Fossil SCM
Merge trunk into markdown-tagrefs branch.
Commit
8ef0347fd36952d04bf70e5df3c01087d6494fa3b0d7e530fd39a8131adbe53e
Parent
4d629929911660a…
162 files changed
-23
+111
-26
+26
+1
-1
+11
+1
-1
+112
-49
+407
-4
+23
-25
+7
-4
+28
-22
-21
+1
-1
+1
-1
+1
-1
+3
-3
+8
-4
+1
-1
+11
-10
+14
-4
+5
-3
+17
-18
+21
-20
+17
-14
+6
-6
+18
-18
+11
-6
+1
-1
+1
-1
+4
-4
+5
+4
-4
+5
+4
-4
+5
+4
-4
+5
+4
-4
+5
+994
-320
+9441
-436
+78
-30
+12
-15
+5
+433
-408
+1
-1
+4
-2
+466
+172
-102
+7
+3
-2
+5
-3
+5
-7
+25
-13
+2
-1
+14
-14
+39
-8
+3
-2
+3
-3
+1
-1
+3
-3
+5
-5
+2
-3
+2
-2
+27
-48
-1
-5
-4
+2
-2
+3
+2
-2
+3
-3
+123
-100
+6
+2
-2
+12
-9
+11
+1200
+2
-2
+4
-6
+234
-90
+1218
-754
+17
-9
+34
-8
+96
-23
+27
-29
+12
-2
+12
-2
+1
-1
+2
-1
+55
-10
+2
-2
+116
-6
+116
-6
+11
-4
+2
-2
+2
+19
-11
+9
+2
+39
-1
+124
-31
+5
-7
+2
-1
+3
-3
+1
-1
+12
-7
+1
-1
+1
-1
+7
-6
+82
-40
+3
-2
+16
-12
+16
-12
+1
-1
+1
-1
+5
-5
+1
-1
+20
+40
-32
+1
-1
+1
-1
+4
-3
+9
-1
+4
-1
+1
-1
+1
-1
+1
-1
+1
-1
+1
-1
+8
-8
+1
-1
+41
-5
+5
-5
+2
-2
+1
-1
+1
-1
+1
-1
+1
-1
+2
-2
+7
+6
-4
+1
-1
+20
-5
+3
-2
+44
-42
+2
-2
+1
-1
+13
-77
+24
-4
+17
-2
+12
+795
+71
-50
+80
-69
+4
-4
+3
+3
+6
+1
-1
-
.dockerignore
~
Dockerfile
~
Makefile.in
~
VERSION
~
auto.def
~
compat/zlib/CMakeLists.txt
~
compat/zlib/ChangeLog
~
compat/zlib/Makefile
~
compat/zlib/Makefile.in
~
compat/zlib/README
~
compat/zlib/configure
~
compat/zlib/contrib/README.contrib
~
compat/zlib/contrib/blast/blast.h
~
compat/zlib/contrib/delphi/ZLib.pas
~
compat/zlib/contrib/dotzlib/DotZLib/UnitTests.cs
~
compat/zlib/contrib/infback9/inftree9.c
~
compat/zlib/contrib/minizip/Makefile
~
compat/zlib/contrib/minizip/configure.ac
~
compat/zlib/contrib/minizip/crypt.h
~
compat/zlib/contrib/minizip/ioapi.c
~
compat/zlib/contrib/minizip/ioapi.h
~
compat/zlib/contrib/minizip/miniunz.c
~
compat/zlib/contrib/minizip/minizip.c
~
compat/zlib/contrib/minizip/unzip.c
~
compat/zlib/contrib/minizip/unzip.h
~
compat/zlib/contrib/minizip/zip.c
~
compat/zlib/contrib/minizip/zip.h
~
compat/zlib/contrib/pascal/zlibpas.pas
~
compat/zlib/contrib/vstudio/readme.txt
~
compat/zlib/contrib/vstudio/vc10/zlib.rc
~
compat/zlib/contrib/vstudio/vc10/zlibvc.def
~
compat/zlib/contrib/vstudio/vc11/zlib.rc
~
compat/zlib/contrib/vstudio/vc11/zlibvc.def
~
compat/zlib/contrib/vstudio/vc12/zlib.rc
~
compat/zlib/contrib/vstudio/vc12/zlibvc.def
~
compat/zlib/contrib/vstudio/vc14/zlib.rc
~
compat/zlib/contrib/vstudio/vc14/zlibvc.def
~
compat/zlib/contrib/vstudio/vc9/zlib.rc
~
compat/zlib/contrib/vstudio/vc9/zlibvc.def
~
compat/zlib/crc32.c
~
compat/zlib/crc32.h
~
compat/zlib/deflate.c
~
compat/zlib/deflate.h
~
compat/zlib/examples/README.examples
~
compat/zlib/examples/enough.c
~
compat/zlib/examples/gzappend.c
~
compat/zlib/examples/gzlog.c
~
compat/zlib/examples/gznorm.c
~
compat/zlib/examples/zran.c
~
compat/zlib/examples/zran.h
~
compat/zlib/gzguts.h
~
compat/zlib/gzlib.c
~
compat/zlib/gzread.c
~
compat/zlib/gzwrite.c
~
compat/zlib/infback.c
~
compat/zlib/inffast.c
~
compat/zlib/inflate.c
~
compat/zlib/inflate.h
~
compat/zlib/inftrees.c
~
compat/zlib/os400/README400
~
compat/zlib/os400/zlib.inc
~
compat/zlib/qnx/package.qpg
~
compat/zlib/test/example.c
~
compat/zlib/treebuild.xml
~
compat/zlib/trees.c
~
compat/zlib/win32/Makefile.bor
~
compat/zlib/win32/Makefile.gcc
~
compat/zlib/win32/Makefile.msc
~
compat/zlib/win32/README-WIN32.txt
~
compat/zlib/win32/zlib.def
~
compat/zlib/zconf.h
~
compat/zlib/zlib.3
~
compat/zlib/zlib.3.pdf
~
compat/zlib/zlib.h
~
compat/zlib/zlib.map
~
compat/zlib/zutil.c
~
compat/zlib/zutil.h
~
containers/Dockerfile-nojail.patch
~
containers/busybox-config
~
extsrc/pikchr-worker.js
~
extsrc/pikchr.c
~
extsrc/pikchr.wasm
~
extsrc/shell.c
~
extsrc/sqlite3.c
~
extsrc/sqlite3.h
~
src/accordion.js
~
src/alerts.c
~
src/allrepo.c
~
src/backlink.c
~
src/backlink.c
~
src/backoffice.c
~
src/bisect.c
~
src/branch.c
~
src/builtin.c
~
src/chat.c
~
src/chat.c
~
src/checkin.c
~
src/checkout.c
~
src/configure.c
~
src/db.c
~
src/default.css
~
src/diff.c
~
src/diffcmd.c
~
src/dispatch.c
~
src/file.c
~
src/forum.c
~
src/fossil.page.pikchrshowasm.js
~
src/http_ssl.c
~
src/info.c
~
src/interwiki.c
~
src/json_branch.c
~
src/login.c
~
src/main.c
~
src/main.mk
~
src/markdown.c
~
src/markdown.c
~
src/md5.c
~
src/name.c
~
src/patch.c
~
src/printf.c
~
src/repolist.c
~
src/rss.c
~
src/schema.c
~
src/search.c
~
src/security_audit.c
~
src/setup.c
~
src/setupuser.c
~
src/sha1.c
~
src/sha3.c
~
src/skins.c
~
src/stat.c
~
src/style.c
~
src/tag.c
~
src/tar.c
~
src/timeline.c
~
src/unversioned.c
~
src/wiki.c
~
src/wikiformat.c
~
src/wikiformat.c
~
src/winhttp.c
~
src/xfer.c
~
src/zip.c
~
test/markdown-test3.md
~
tools/makemake.tcl
~
tools/mkbuiltin.c
~
tools/mkindex.c
~
win/Makefile.mingw
~
win/Makefile.mingw.mistachkin
~
win/fossil.exe.manifest
~
www/alerts.md
~
www/build.wiki
~
www/cgi.wiki
~
www/changes.wiki
~
www/chat.md
~
www/containers.md
~
www/fossil-v-git.wiki
~
www/gitusers.md
~
www/index.wiki
~
www/mkindex.tcl
~
www/permutedindex.html
~
www/quotes.wiki
~
www/sync.wiki
D
.dockerignore
-23
| --- a/.dockerignore | ||
| +++ b/.dockerignore | ||
| @@ -1,23 +0,0 @@ | ||
| 1 | -_FOSSIL_ | |
| 2 | -.fslckout | |
| 3 | -ajax | |
| 4 | -art | |
| 5 | -autosetup | |
| 6 | -bld | |
| 7 | -compat | |
| 8 | -debian | |
| 9 | -fossil | |
| 10 | -fossil.exe | |
| 11 | -msvcbld | |
| 12 | -setup | |
| 13 | -src | |
| 14 | -test | |
| 15 | -tools | |
| 16 | -win | |
| 17 | -wbld | |
| 18 | -win | |
| 19 | -www | |
| 20 | -*.a | |
| 21 | -*.lib | |
| 22 | -*.log | |
| 23 | -*.mani |
| --- a/.dockerignore | |
| +++ b/.dockerignore | |
| @@ -1,23 +0,0 @@ | |
| 1 | _FOSSIL_ |
| 2 | .fslckout |
| 3 | ajax |
| 4 | art |
| 5 | autosetup |
| 6 | bld |
| 7 | compat |
| 8 | debian |
| 9 | fossil |
| 10 | fossil.exe |
| 11 | msvcbld |
| 12 | setup |
| 13 | src |
| 14 | test |
| 15 | tools |
| 16 | win |
| 17 | wbld |
| 18 | win |
| 19 | www |
| 20 | *.a |
| 21 | *.lib |
| 22 | *.log |
| 23 | *.mani |
| --- a/.dockerignore | |
| +++ b/.dockerignore | |
| @@ -1,23 +0,0 @@ | |
+111
-26
| --- Dockerfile | ||
| +++ Dockerfile | ||
| @@ -1,26 +1,111 @@ | ||
| 1 | -### | |
| 2 | -# Dockerfile for Fossil | |
| 3 | -### | |
| 4 | -FROM fedora:29 | |
| 5 | - | |
| 6 | -### Now install some additional parts we will need for the build | |
| 7 | -RUN dnf update -y && dnf install -y gcc make tcl tcl-devel zlib-devel openssl-devel tar && dnf clean all && groupadd -r fossil -g 433 && useradd -u 431 -r -g fossil -d /opt/fossil -s /sbin/nologin -c "Fossil user" fossil | |
| 8 | - | |
| 9 | -### If you want to build "trunk", change the next line accordingly. | |
| 10 | -ENV FOSSIL_INSTALL_VERSION release | |
| 11 | - | |
| 12 | -RUN curl "https://fossil-scm.org/home/tarball/fossil-src.tar.gz?name=fossil-src&uuid=${FOSSIL_INSTALL_VERSION}" | tar zx | |
| 13 | -RUN cd fossil-src && ./configure --disable-fusefs --json --with-th1-docs --with-th1-hooks --with-tcl=1 --with-tcl-stubs --with-tcl-private-stubs | |
| 14 | -RUN cd fossil-src/src && mv main.c main.c.orig && sed s/\"now\"/0/ <main.c.orig >main.c | |
| 15 | -RUN cd fossil-src && make && strip fossil && cp fossil /usr/bin && cd .. && rm -rf fossil-src && chmod a+rx /usr/bin/fossil && mkdir -p /opt/fossil && chown fossil:fossil /opt/fossil | |
| 16 | - | |
| 17 | -### Build is done, remove modules no longer needed | |
| 18 | -RUN dnf remove -y gcc make zlib-devel tcl-devel openssl-devel tar && dnf clean all | |
| 19 | - | |
| 20 | -USER fossil | |
| 21 | - | |
| 22 | -ENV HOME /opt/fossil | |
| 23 | - | |
| 24 | -EXPOSE 8080 | |
| 25 | - | |
| 26 | -CMD ["/usr/bin/fossil", "server", "--create", "--user", "admin", "/opt/fossil/repository.fossil"] | |
| 1 | +# See www/containers.md for documentation on how to use this file. | |
| 2 | + | |
| 3 | +## --------------------------------------------------------------------- | |
| 4 | +## STAGE 1: Build static Fossil & BusyBox binaries atop Alpine Linux | |
| 5 | +## --------------------------------------------------------------------- | |
| 6 | + | |
| 7 | +FROM alpine:latest AS builder | |
| 8 | +WORKDIR /tmp | |
| 9 | + | |
| 10 | +### Bake the basic Alpine Linux into a base layer so we never have to | |
| 11 | +### repeat that step unless we change the package set. Although we're | |
| 12 | +### going to throw this layer away below, we still pass --no-cache | |
| 13 | +### because that cache is of no use in an immutable layer. Note that | |
| 14 | +### we allow the UPX step to fail: it isn't in the ARM distros. We'll | |
| 15 | +### check whether this optional piece exists before using it below. | |
| 16 | +RUN set -x \ | |
| 17 | + && apk update \ | |
| 18 | + && apk upgrade --no-cache \ | |
| 19 | + && apk add --no-cache \ | |
| 20 | + gcc make moreutils \ | |
| 21 | + linux-headers musl-dev \ | |
| 22 | + openssl-dev openssl-libs-static \ | |
| 23 | + zlib-dev zlib-static \ | |
| 24 | + ; apk add --no-cache upx | |
| 25 | + | |
| 26 | +### Bake the custom BusyBox into another layer. The intent is that this | |
| 27 | +### changes only when we change BBXVER. That will force an update of | |
| 28 | +### the layers below, but this is a rare occurrence. | |
| 29 | +ARG BBXVER="1_35_0" | |
| 30 | +ENV BBXURL "https://github.com/mirror/busybox/tarball/${BBXVER}" | |
| 31 | +COPY containers/busybox-config /tmp/bbx/.config | |
| 32 | +ADD $BBXURL /tmp/bbx/src.tar.gz | |
| 33 | +RUN set -x \ | |
| 34 | + && tar --strip-components=1 -C bbx -xzf bbx/src.tar.gz \ | |
| 35 | + && ( cd bbx && yes "" | make oldconfig && make -j11 ) \ | |
| 36 | + && if [ -x /usr/bin/upx ] ; then upx -9q bbx/busybox ; fi | |
| 37 | + | |
| 38 | +### The changeable Fossil layer is the only one in the first stage that | |
| 39 | +### changes often, so add it last, to make it independent of the others. | |
| 40 | +### | |
| 41 | +### $FSLSTB can be either a file or a directory due to a ADD's bizarre | |
| 42 | +### behavior: it unpacks tarballs when added from a local file but not | |
| 43 | +### from a URL! It matters because we default to a URL in case you're | |
| 44 | +### building outside a Fossil checkout, but when building via the | |
| 45 | +### container-image target, we can avoid a costly hit on the Fossil | |
| 46 | +### project's home site by pulling the data from the local repo via the | |
| 47 | +### "tarball" command. This is a DVCS, after all! | |
| 48 | +ARG FSLVER="trunk" | |
| 49 | +ARG FSLURL="https://fossil-scm.org/home/tarball/src?r=${FSLVER}" | |
| 50 | +ENV FSLSTB=/tmp/fsl/src.tar.gz | |
| 51 | +ADD $FSLURL $FSLSTB | |
| 52 | +RUN set -x \ | |
| 53 | + && if [ -d $FSLSTB ] ; then mv $FSLSTB/src fsl ; \ | |
| 54 | + else tar -C fsl -xzf fsl/src.tar.gz ; fi \ | |
| 55 | + && m=fsl/src/src/main.mk \ | |
| 56 | + && grep -v '/skins/[a-ce-z]' $m | sponge $m \ | |
| 57 | + && fsl/src/configure --static CFLAGS='-Os -s' && make -j11 \ | |
| 58 | + && if [ -x /usr/bin/upx ] ; then upx -9q fossil ; fi | |
| 59 | + | |
| 60 | + | |
| 61 | +## --------------------------------------------------------------------- | |
| 62 | +## STAGE 2: Pare that back to the bare essentials. | |
| 63 | +## --------------------------------------------------------------------- | |
| 64 | + | |
| 65 | +FROM scratch | |
| 66 | +WORKDIR /jail | |
| 67 | +ARG UID=499 | |
| 68 | +ENV PATH "/bin:/jail/bin" | |
| 69 | + | |
| 70 | +### Lay BusyBox down as the first base layer. Coupled with the host's | |
| 71 | +### kernel, this is the "OS." | |
| 72 | +COPY --from=builder /tmp/bbx/busybox /bin/ | |
| 73 | +RUN [ "/bin/busybox", "--install", "/bin" ] | |
| 74 | + | |
| 75 | +### Set up that base OS for our specific use without tying it to | |
| 76 | +### anything likely to change often. So long as the user leaves | |
| 77 | +### UID alone, this layer will be durable. | |
| 78 | +RUN set -x \ | |
| 79 | + && echo 'root:x:0:0:SysAdmin:/:/bin/nologin' > /etc/passwd \ | |
| 80 | + && echo 'root:x:0:root' > /etc/group \ | |
| 81 | + && addgroup -S -g ${UID} fossil \ | |
| 82 | + && adduser -S -h `pwd` -g 'Fossil User' -G fossil -u ${UID} fossil \ | |
| 83 | + && install -d -m 700 -o fossil -g fossil log museum \ | |
| 84 | + && install -d -m 755 -o fossil -g fossil dev \ | |
| 85 | + && mknod -m 666 dev/null c 1 3 \ | |
| 86 | + && mknod -m 444 dev/urandom c 1 9 | |
| 87 | + | |
| 88 | +### Do Fossil-specific things atop those base layers; this will change | |
| 89 | +### as often as the Fossil build-from-source layer above. | |
| 90 | +COPY --from=builder /tmp/fossil bin/ | |
| 91 | +RUN set -x \ | |
| 92 | + && ln -s /jail/bin/fossil /bin/f \ | |
| 93 | + && echo -e '#!/bin/sh\nfossil sha1sum "$@"' > /bin/sha1sum \ | |
| 94 | + && echo -e '#!/bin/sh\nfossil sha3sum "$@"' > /bin/sha3sum \ | |
| 95 | + && echo -e '#!/bin/sh\nfossil sqlite3 --no-repository "$@"' > \ | |
| 96 | + /bin/sqlite3 \ | |
| 97 | + && chmod +x /bin/sha?sum /bin/sqlite3 | |
| 98 | + | |
| 99 | + | |
| 100 | +## --------------------------------------------------------------------- | |
| 101 | +## STAGE 3: Run! | |
| 102 | +## --------------------------------------------------------------------- | |
| 103 | + | |
| 104 | +EXPOSE 8080/tcp | |
| 105 | +CMD [ \ | |
| 106 | + "bin/fossil", "server", \ | |
| 107 | + "--chroot", "/jail", \ | |
| 108 | + "--create", \ | |
| 109 | + "--jsmode", "bundled", \ | |
| 110 | + "--user", "admin", \ | |
| 111 | + "museum/repo.fossil"] | |
| 27 | 112 |
| --- Dockerfile | |
| +++ Dockerfile | |
| @@ -1,26 +1,111 @@ | |
| 1 | ### |
| 2 | # Dockerfile for Fossil |
| 3 | ### |
| 4 | FROM fedora:29 |
| 5 | |
| 6 | ### Now install some additional parts we will need for the build |
| 7 | RUN dnf update -y && dnf install -y gcc make tcl tcl-devel zlib-devel openssl-devel tar && dnf clean all && groupadd -r fossil -g 433 && useradd -u 431 -r -g fossil -d /opt/fossil -s /sbin/nologin -c "Fossil user" fossil |
| 8 | |
| 9 | ### If you want to build "trunk", change the next line accordingly. |
| 10 | ENV FOSSIL_INSTALL_VERSION release |
| 11 | |
| 12 | RUN curl "https://fossil-scm.org/home/tarball/fossil-src.tar.gz?name=fossil-src&uuid=${FOSSIL_INSTALL_VERSION}" | tar zx |
| 13 | RUN cd fossil-src && ./configure --disable-fusefs --json --with-th1-docs --with-th1-hooks --with-tcl=1 --with-tcl-stubs --with-tcl-private-stubs |
| 14 | RUN cd fossil-src/src && mv main.c main.c.orig && sed s/\"now\"/0/ <main.c.orig >main.c |
| 15 | RUN cd fossil-src && make && strip fossil && cp fossil /usr/bin && cd .. && rm -rf fossil-src && chmod a+rx /usr/bin/fossil && mkdir -p /opt/fossil && chown fossil:fossil /opt/fossil |
| 16 | |
| 17 | ### Build is done, remove modules no longer needed |
| 18 | RUN dnf remove -y gcc make zlib-devel tcl-devel openssl-devel tar && dnf clean all |
| 19 | |
| 20 | USER fossil |
| 21 | |
| 22 | ENV HOME /opt/fossil |
| 23 | |
| 24 | EXPOSE 8080 |
| 25 | |
| 26 | CMD ["/usr/bin/fossil", "server", "--create", "--user", "admin", "/opt/fossil/repository.fossil"] |
| 27 |
| --- Dockerfile | |
| +++ Dockerfile | |
| @@ -1,26 +1,111 @@ | |
| 1 | # See www/containers.md for documentation on how to use this file. |
| 2 | |
| 3 | ## --------------------------------------------------------------------- |
| 4 | ## STAGE 1: Build static Fossil & BusyBox binaries atop Alpine Linux |
| 5 | ## --------------------------------------------------------------------- |
| 6 | |
| 7 | FROM alpine:latest AS builder |
| 8 | WORKDIR /tmp |
| 9 | |
| 10 | ### Bake the basic Alpine Linux into a base layer so we never have to |
| 11 | ### repeat that step unless we change the package set. Although we're |
| 12 | ### going to throw this layer away below, we still pass --no-cache |
| 13 | ### because that cache is of no use in an immutable layer. Note that |
| 14 | ### we allow the UPX step to fail: it isn't in the ARM distros. We'll |
| 15 | ### check whether this optional piece exists before using it below. |
| 16 | RUN set -x \ |
| 17 | && apk update \ |
| 18 | && apk upgrade --no-cache \ |
| 19 | && apk add --no-cache \ |
| 20 | gcc make moreutils \ |
| 21 | linux-headers musl-dev \ |
| 22 | openssl-dev openssl-libs-static \ |
| 23 | zlib-dev zlib-static \ |
| 24 | ; apk add --no-cache upx |
| 25 | |
| 26 | ### Bake the custom BusyBox into another layer. The intent is that this |
| 27 | ### changes only when we change BBXVER. That will force an update of |
| 28 | ### the layers below, but this is a rare occurrence. |
| 29 | ARG BBXVER="1_35_0" |
| 30 | ENV BBXURL "https://github.com/mirror/busybox/tarball/${BBXVER}" |
| 31 | COPY containers/busybox-config /tmp/bbx/.config |
| 32 | ADD $BBXURL /tmp/bbx/src.tar.gz |
| 33 | RUN set -x \ |
| 34 | && tar --strip-components=1 -C bbx -xzf bbx/src.tar.gz \ |
| 35 | && ( cd bbx && yes "" | make oldconfig && make -j11 ) \ |
| 36 | && if [ -x /usr/bin/upx ] ; then upx -9q bbx/busybox ; fi |
| 37 | |
| 38 | ### The changeable Fossil layer is the only one in the first stage that |
| 39 | ### changes often, so add it last, to make it independent of the others. |
| 40 | ### |
| 41 | ### $FSLSTB can be either a file or a directory due to a ADD's bizarre |
| 42 | ### behavior: it unpacks tarballs when added from a local file but not |
| 43 | ### from a URL! It matters because we default to a URL in case you're |
| 44 | ### building outside a Fossil checkout, but when building via the |
| 45 | ### container-image target, we can avoid a costly hit on the Fossil |
| 46 | ### project's home site by pulling the data from the local repo via the |
| 47 | ### "tarball" command. This is a DVCS, after all! |
| 48 | ARG FSLVER="trunk" |
| 49 | ARG FSLURL="https://fossil-scm.org/home/tarball/src?r=${FSLVER}" |
| 50 | ENV FSLSTB=/tmp/fsl/src.tar.gz |
| 51 | ADD $FSLURL $FSLSTB |
| 52 | RUN set -x \ |
| 53 | && if [ -d $FSLSTB ] ; then mv $FSLSTB/src fsl ; \ |
| 54 | else tar -C fsl -xzf fsl/src.tar.gz ; fi \ |
| 55 | && m=fsl/src/src/main.mk \ |
| 56 | && grep -v '/skins/[a-ce-z]' $m | sponge $m \ |
| 57 | && fsl/src/configure --static CFLAGS='-Os -s' && make -j11 \ |
| 58 | && if [ -x /usr/bin/upx ] ; then upx -9q fossil ; fi |
| 59 | |
| 60 | |
| 61 | ## --------------------------------------------------------------------- |
| 62 | ## STAGE 2: Pare that back to the bare essentials. |
| 63 | ## --------------------------------------------------------------------- |
| 64 | |
| 65 | FROM scratch |
| 66 | WORKDIR /jail |
| 67 | ARG UID=499 |
| 68 | ENV PATH "/bin:/jail/bin" |
| 69 | |
| 70 | ### Lay BusyBox down as the first base layer. Coupled with the host's |
| 71 | ### kernel, this is the "OS." |
| 72 | COPY --from=builder /tmp/bbx/busybox /bin/ |
| 73 | RUN [ "/bin/busybox", "--install", "/bin" ] |
| 74 | |
| 75 | ### Set up that base OS for our specific use without tying it to |
| 76 | ### anything likely to change often. So long as the user leaves |
| 77 | ### UID alone, this layer will be durable. |
| 78 | RUN set -x \ |
| 79 | && echo 'root:x:0:0:SysAdmin:/:/bin/nologin' > /etc/passwd \ |
| 80 | && echo 'root:x:0:root' > /etc/group \ |
| 81 | && addgroup -S -g ${UID} fossil \ |
| 82 | && adduser -S -h `pwd` -g 'Fossil User' -G fossil -u ${UID} fossil \ |
| 83 | && install -d -m 700 -o fossil -g fossil log museum \ |
| 84 | && install -d -m 755 -o fossil -g fossil dev \ |
| 85 | && mknod -m 666 dev/null c 1 3 \ |
| 86 | && mknod -m 444 dev/urandom c 1 9 |
| 87 | |
| 88 | ### Do Fossil-specific things atop those base layers; this will change |
| 89 | ### as often as the Fossil build-from-source layer above. |
| 90 | COPY --from=builder /tmp/fossil bin/ |
| 91 | RUN set -x \ |
| 92 | && ln -s /jail/bin/fossil /bin/f \ |
| 93 | && echo -e '#!/bin/sh\nfossil sha1sum "$@"' > /bin/sha1sum \ |
| 94 | && echo -e '#!/bin/sh\nfossil sha3sum "$@"' > /bin/sha3sum \ |
| 95 | && echo -e '#!/bin/sh\nfossil sqlite3 --no-repository "$@"' > \ |
| 96 | /bin/sqlite3 \ |
| 97 | && chmod +x /bin/sha?sum /bin/sqlite3 |
| 98 | |
| 99 | |
| 100 | ## --------------------------------------------------------------------- |
| 101 | ## STAGE 3: Run! |
| 102 | ## --------------------------------------------------------------------- |
| 103 | |
| 104 | EXPOSE 8080/tcp |
| 105 | CMD [ \ |
| 106 | "bin/fossil", "server", \ |
| 107 | "--chroot", "/jail", \ |
| 108 | "--create", \ |
| 109 | "--jsmode", "bundled", \ |
| 110 | "--user", "admin", \ |
| 111 | "museum/repo.fossil"] |
| 112 |
+26
| --- Makefile.in | ||
| +++ Makefile.in | ||
| @@ -116,5 +116,31 @@ | ||
| 116 | 116 | # of delegating to it with "$(MAKE) reconfig": having children running |
| 117 | 117 | # around interfering makes this failure mode even worse. |
| 118 | 118 | Makefile: @srcdir@/Makefile.in $(SRCDIR)/main.mk @AUTODEPS@ |
| 119 | 119 | @AUTOREMAKE@ |
| 120 | 120 | touch @builddir@/Makefile |
| 121 | + | |
| 122 | +# Container stuff | |
| 123 | +SRCTB := src-@[email protected] | |
| 124 | +container-image: | |
| 125 | + $(APPNAME) tarball --name src @FOSSIL_CI_PFX@ $(SRCTB) | |
| 126 | + docker build \ | |
| 127 | + --tag fossil:@FOSSIL_CI_PFX@ \ | |
| 128 | + --build-arg FSLURL=$(SRCTB) \ | |
| 129 | + $(DBFLAGS) @srcdir@ | |
| 130 | + rm -f $(SRCTB) | |
| 131 | + | |
| 132 | +container-run: container-image | |
| 133 | + docker run \ | |
| 134 | + --name fossil-@FOSSIL_CI_PFX@ \ | |
| 135 | + --cap-drop AUDIT_WRITE \ | |
| 136 | + --cap-drop CHOWN \ | |
| 137 | + --cap-drop FSETID \ | |
| 138 | + --cap-drop KILL \ | |
| 139 | + --cap-drop MKNOD \ | |
| 140 | + --cap-drop NET_BIND_SERVICE \ | |
| 141 | + --cap-drop NET_RAW \ | |
| 142 | + --cap-drop SETFCAP \ | |
| 143 | + --cap-drop SETPCAP \ | |
| 144 | + --detach --publish 8080:8080 \ | |
| 145 | + $(DRFLAGS) fossil:@FOSSIL_CI_PFX@ | |
| 146 | + docker container logs fossil-@FOSSIL_CI_PFX@ | |
| 121 | 147 |
| --- Makefile.in | |
| +++ Makefile.in | |
| @@ -116,5 +116,31 @@ | |
| 116 | # of delegating to it with "$(MAKE) reconfig": having children running |
| 117 | # around interfering makes this failure mode even worse. |
| 118 | Makefile: @srcdir@/Makefile.in $(SRCDIR)/main.mk @AUTODEPS@ |
| 119 | @AUTOREMAKE@ |
| 120 | touch @builddir@/Makefile |
| 121 |
| --- Makefile.in | |
| +++ Makefile.in | |
| @@ -116,5 +116,31 @@ | |
| 116 | # of delegating to it with "$(MAKE) reconfig": having children running |
| 117 | # around interfering makes this failure mode even worse. |
| 118 | Makefile: @srcdir@/Makefile.in $(SRCDIR)/main.mk @AUTODEPS@ |
| 119 | @AUTOREMAKE@ |
| 120 | touch @builddir@/Makefile |
| 121 | |
| 122 | # Container stuff |
| 123 | SRCTB := src-@[email protected] |
| 124 | container-image: |
| 125 | $(APPNAME) tarball --name src @FOSSIL_CI_PFX@ $(SRCTB) |
| 126 | docker build \ |
| 127 | --tag fossil:@FOSSIL_CI_PFX@ \ |
| 128 | --build-arg FSLURL=$(SRCTB) \ |
| 129 | $(DBFLAGS) @srcdir@ |
| 130 | rm -f $(SRCTB) |
| 131 | |
| 132 | container-run: container-image |
| 133 | docker run \ |
| 134 | --name fossil-@FOSSIL_CI_PFX@ \ |
| 135 | --cap-drop AUDIT_WRITE \ |
| 136 | --cap-drop CHOWN \ |
| 137 | --cap-drop FSETID \ |
| 138 | --cap-drop KILL \ |
| 139 | --cap-drop MKNOD \ |
| 140 | --cap-drop NET_BIND_SERVICE \ |
| 141 | --cap-drop NET_RAW \ |
| 142 | --cap-drop SETFCAP \ |
| 143 | --cap-drop SETPCAP \ |
| 144 | --detach --publish 8080:8080 \ |
| 145 | $(DRFLAGS) fossil:@FOSSIL_CI_PFX@ |
| 146 | docker container logs fossil-@FOSSIL_CI_PFX@ |
| 147 |
M
VERSION
+1
-1
| --- VERSION | ||
| +++ VERSION | ||
| @@ -1,1 +1,1 @@ | ||
| 1 | -2.19 | |
| 1 | +2.20 | |
| 2 | 2 |
| --- VERSION | |
| +++ VERSION | |
| @@ -1,1 +1,1 @@ | |
| 1 | 2.19 |
| 2 |
| --- VERSION | |
| +++ VERSION | |
| @@ -1,1 +1,1 @@ | |
| 1 | 2.20 |
| 2 |
M
auto.def
+11
| --- auto.def | ||
| +++ auto.def | ||
| @@ -349,10 +349,12 @@ | ||
| 349 | 349 | set zlibpath [opt-val with-zlib] |
| 350 | 350 | if {$zlibpath eq "tree"} { |
| 351 | 351 | set zlibdir [file dirname $autosetup(dir)]/compat/zlib |
| 352 | 352 | if {![file isdirectory $zlibdir]} { |
| 353 | 353 | user-error "The zlib in source tree directory does not exist" |
| 354 | + } elseif { ([llength [glob -nocomplain -directory $zlibdir libz*]] == 0) } { | |
| 355 | + user-error "With --with-zlib=tree, $zlibdir must be configured and built first." | |
| 354 | 356 | } |
| 355 | 357 | cc-with [list -cflags "-I$zlibdir -L$zlibdir"] |
| 356 | 358 | define-append EXTRA_CFLAGS -I$zlibdir |
| 357 | 359 | define-append LIBS $zlibdir/libz.a |
| 358 | 360 | set ::zlib_lib $zlibdir/libz.a |
| @@ -762,8 +764,17 @@ | ||
| 762 | 764 | catch {exec chmod u+x tools/emcc.sh} |
| 763 | 765 | } else { |
| 764 | 766 | define EMCC_WRAPPER "" |
| 765 | 767 | catch {exec rm -f tools/emcc.sh} |
| 766 | 768 | } |
| 769 | + | |
| 770 | +# Tag container builds with a prefix of the checkin ID of the version | |
| 771 | +# of Fossil each one contains. This not only allows multiple images | |
| 772 | +# to coexist and multiple containers to be created unamgiguosly from | |
| 773 | +# them, it also changes the URL we fetch the source tarball from, so | |
| 774 | +# repeated builds of a given version generate and fetch the source | |
| 775 | +# tarball once only, keeping it in the local Docker/Podman cache. | |
| 776 | +set ci [readfile "$::autosetup(srcdir)/manifest.uuid"] | |
| 777 | +define FOSSIL_CI_PFX [string range $ci 0 11] | |
| 767 | 778 | |
| 768 | 779 | make-template Makefile.in |
| 769 | 780 | make-config-header autoconfig.h -auto {USE_* FOSSIL_*} |
| 770 | 781 |
| --- auto.def | |
| +++ auto.def | |
| @@ -349,10 +349,12 @@ | |
| 349 | set zlibpath [opt-val with-zlib] |
| 350 | if {$zlibpath eq "tree"} { |
| 351 | set zlibdir [file dirname $autosetup(dir)]/compat/zlib |
| 352 | if {![file isdirectory $zlibdir]} { |
| 353 | user-error "The zlib in source tree directory does not exist" |
| 354 | } |
| 355 | cc-with [list -cflags "-I$zlibdir -L$zlibdir"] |
| 356 | define-append EXTRA_CFLAGS -I$zlibdir |
| 357 | define-append LIBS $zlibdir/libz.a |
| 358 | set ::zlib_lib $zlibdir/libz.a |
| @@ -762,8 +764,17 @@ | |
| 762 | catch {exec chmod u+x tools/emcc.sh} |
| 763 | } else { |
| 764 | define EMCC_WRAPPER "" |
| 765 | catch {exec rm -f tools/emcc.sh} |
| 766 | } |
| 767 | |
| 768 | make-template Makefile.in |
| 769 | make-config-header autoconfig.h -auto {USE_* FOSSIL_*} |
| 770 |
| --- auto.def | |
| +++ auto.def | |
| @@ -349,10 +349,12 @@ | |
| 349 | set zlibpath [opt-val with-zlib] |
| 350 | if {$zlibpath eq "tree"} { |
| 351 | set zlibdir [file dirname $autosetup(dir)]/compat/zlib |
| 352 | if {![file isdirectory $zlibdir]} { |
| 353 | user-error "The zlib in source tree directory does not exist" |
| 354 | } elseif { ([llength [glob -nocomplain -directory $zlibdir libz*]] == 0) } { |
| 355 | user-error "With --with-zlib=tree, $zlibdir must be configured and built first." |
| 356 | } |
| 357 | cc-with [list -cflags "-I$zlibdir -L$zlibdir"] |
| 358 | define-append EXTRA_CFLAGS -I$zlibdir |
| 359 | define-append LIBS $zlibdir/libz.a |
| 360 | set ::zlib_lib $zlibdir/libz.a |
| @@ -762,8 +764,17 @@ | |
| 764 | catch {exec chmod u+x tools/emcc.sh} |
| 765 | } else { |
| 766 | define EMCC_WRAPPER "" |
| 767 | catch {exec rm -f tools/emcc.sh} |
| 768 | } |
| 769 | |
| 770 | # Tag container builds with a prefix of the checkin ID of the version |
| 771 | # of Fossil each one contains. This not only allows multiple images |
| 772 | # to coexist and multiple containers to be created unamgiguosly from |
| 773 | # them, it also changes the URL we fetch the source tarball from, so |
| 774 | # repeated builds of a given version generate and fetch the source |
| 775 | # tarball once only, keeping it in the local Docker/Podman cache. |
| 776 | set ci [readfile "$::autosetup(srcdir)/manifest.uuid"] |
| 777 | define FOSSIL_CI_PFX [string range $ci 0 11] |
| 778 | |
| 779 | make-template Makefile.in |
| 780 | make-config-header autoconfig.h -auto {USE_* FOSSIL_*} |
| 781 |
+1
-1
| --- compat/zlib/CMakeLists.txt | ||
| +++ compat/zlib/CMakeLists.txt | ||
| @@ -1,11 +1,11 @@ | ||
| 1 | 1 | cmake_minimum_required(VERSION 2.4.4) |
| 2 | 2 | set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON) |
| 3 | 3 | |
| 4 | 4 | project(zlib C) |
| 5 | 5 | |
| 6 | -set(VERSION "1.2.11") | |
| 6 | +set(VERSION "1.2.12") | |
| 7 | 7 | |
| 8 | 8 | option(ASM686 "Enable building i686 assembly implementation") |
| 9 | 9 | option(AMD64 "Enable building amd64 assembly implementation") |
| 10 | 10 | |
| 11 | 11 | set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables") |
| 12 | 12 |
| --- compat/zlib/CMakeLists.txt | |
| +++ compat/zlib/CMakeLists.txt | |
| @@ -1,11 +1,11 @@ | |
| 1 | cmake_minimum_required(VERSION 2.4.4) |
| 2 | set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON) |
| 3 | |
| 4 | project(zlib C) |
| 5 | |
| 6 | set(VERSION "1.2.11") |
| 7 | |
| 8 | option(ASM686 "Enable building i686 assembly implementation") |
| 9 | option(AMD64 "Enable building amd64 assembly implementation") |
| 10 | |
| 11 | set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables") |
| 12 |
| --- compat/zlib/CMakeLists.txt | |
| +++ compat/zlib/CMakeLists.txt | |
| @@ -1,11 +1,11 @@ | |
| 1 | cmake_minimum_required(VERSION 2.4.4) |
| 2 | set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON) |
| 3 | |
| 4 | project(zlib C) |
| 5 | |
| 6 | set(VERSION "1.2.12") |
| 7 | |
| 8 | option(ASM686 "Enable building i686 assembly implementation") |
| 9 | option(AMD64 "Enable building amd64 assembly implementation") |
| 10 | |
| 11 | set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables") |
| 12 |
+112
-49
| --- compat/zlib/ChangeLog | ||
| +++ compat/zlib/ChangeLog | ||
| @@ -1,8 +1,71 @@ | ||
| 1 | 1 | |
| 2 | 2 | ChangeLog file for zlib |
| 3 | 3 | |
| 4 | +Changes in 1.2.12 (27 Mar 2022) | |
| 5 | +- Cygwin does not have _wopen(), so do not create gzopen_w() there | |
| 6 | +- Permit a deflateParams() parameter change as soon as possible | |
| 7 | +- Limit hash table inserts after switch from stored deflate | |
| 8 | +- Fix bug when window full in deflate_stored() | |
| 9 | +- Fix CLEAR_HASH macro to be usable as a single statement | |
| 10 | +- Avoid a conversion error in gzseek when off_t type too small | |
| 11 | +- Have Makefile return non-zero error code on test failure | |
| 12 | +- Avoid some conversion warnings in gzread.c and gzwrite.c | |
| 13 | +- Update use of errno for newer Windows CE versions | |
| 14 | +- Small speedup to inflate [psumbera] | |
| 15 | +- Return an error if the gzputs string length can't fit in an int | |
| 16 | +- Add address checking in clang to -w option of configure | |
| 17 | +- Don't compute check value for raw inflate if asked to validate | |
| 18 | +- Handle case where inflateSync used when header never processed | |
| 19 | +- Avoid the use of ptrdiff_t | |
| 20 | +- Avoid an undefined behavior of memcpy() in gzappend() | |
| 21 | +- Avoid undefined behaviors of memcpy() in gz*printf() | |
| 22 | +- Avoid an undefined behavior of memcpy() in _tr_stored_block() | |
| 23 | +- Make the names in functions declarations identical to definitions | |
| 24 | +- Remove old assembler code in which bugs have manifested | |
| 25 | +- Fix deflateEnd() to not report an error at start of raw deflate | |
| 26 | +- Add legal disclaimer to README | |
| 27 | +- Emphasize the need to continue decompressing gzip members | |
| 28 | +- Correct the initialization requirements for deflateInit2() | |
| 29 | +- Fix a bug that can crash deflate on some input when using Z_FIXED | |
| 30 | +- Assure that the number of bits for deflatePrime() is valid | |
| 31 | +- Use a structure to make globals in enough.c evident | |
| 32 | +- Use a macro for the printf format of big_t in enough.c | |
| 33 | +- Clean up code style in enough.c, update version | |
| 34 | +- Use inline function instead of macro for index in enough.c | |
| 35 | +- Clarify that prefix codes are counted in enough.c | |
| 36 | +- Show all the codes for the maximum tables size in enough.c | |
| 37 | +- Add gznorm.c example, which normalizes gzip files | |
| 38 | +- Fix the zran.c example to work on a multiple-member gzip file | |
| 39 | +- Add tables for crc32_combine(), to speed it up by a factor of 200 | |
| 40 | +- Add crc32_combine_gen() and crc32_combine_op() for fast combines | |
| 41 | +- Speed up software CRC-32 computation by a factor of 1.5 to 3 | |
| 42 | +- Use atomic test and set, if available, for dynamic CRC tables | |
| 43 | +- Don't bother computing check value after successful inflateSync() | |
| 44 | +- Correct comment in crc32.c | |
| 45 | +- Add use of the ARMv8 crc32 instructions when requested | |
| 46 | +- Use ARM crc32 instructions if the ARM architecture has them | |
| 47 | +- Explicitly note that the 32-bit check values are 32 bits | |
| 48 | +- Avoid adding empty gzip member after gzflush with Z_FINISH | |
| 49 | +- Fix memory leak on error in gzlog.c | |
| 50 | +- Fix error in comment on the polynomial representation of a byte | |
| 51 | +- Clarify gz* function interfaces, referring to parameter names | |
| 52 | +- Change macro name in inflate.c to avoid collision in VxWorks | |
| 53 | +- Correct typo in blast.c | |
| 54 | +- Improve portability of contrib/minizip | |
| 55 | +- Fix indentation in minizip's zip.c | |
| 56 | +- Replace black/white with allow/block. (theresa-m) | |
| 57 | +- minizip warning fix if MAXU32 already defined. (gvollant) | |
| 58 | +- Fix unztell64() in minizip to work past 4GB. (Daniël Hörchner) | |
| 59 | +- Clean up minizip to reduce warnings for testing | |
| 60 | +- Add fallthrough comments for gcc | |
| 61 | +- Eliminate use of ULL constants | |
| 62 | +- Separate out address sanitizing from warnings in configure | |
| 63 | +- Remove destructive aspects of make distclean | |
| 64 | +- Check for cc masquerading as gcc or clang in configure | |
| 65 | +- Fix crc32.c to compile local functions only if used | |
| 66 | + | |
| 4 | 67 | Changes in 1.2.11 (15 Jan 2017) |
| 5 | 68 | - Fix deflate stored bug when pulling last block from window |
| 6 | 69 | - Permit immediate deflateParams changes before any deflate input |
| 7 | 70 | |
| 8 | 71 | Changes in 1.2.10 (2 Jan 2017) |
| @@ -509,11 +572,11 @@ | ||
| 509 | 572 | - Replace use of errno in gz* with functions, support WinCE [Alves] |
| 510 | 573 | - Provide alternative to perror() in minigzip.c for WinCE [Alves] |
| 511 | 574 | - Don't use _vsnprintf on later versions of MSVC [Lowman] |
| 512 | 575 | - Add CMake build script and input file [Lowman] |
| 513 | 576 | - Update contrib/minizip to 1.1 [Svensson, Vollant] |
| 514 | -- Moved nintendods directory from contrib to . | |
| 577 | +- Moved nintendods directory from contrib to root | |
| 515 | 578 | - Replace gzio.c with a new set of routines with the same functionality |
| 516 | 579 | - Add gzbuffer(), gzoffset(), gzclose_r(), gzclose_w() as part of above |
| 517 | 580 | - Update contrib/minizip to 1.1b |
| 518 | 581 | - Change gzeof() to return 0 on error instead of -1 to agree with zlib.h |
| 519 | 582 | |
| @@ -683,11 +746,11 @@ | ||
| 683 | 746 | - Update make_vms.com [Zinser] |
| 684 | 747 | - Initialize state->write in inflateReset() since copied in inflate_fast() |
| 685 | 748 | - Be more strict on incomplete code sets in inflate_table() and increase |
| 686 | 749 | ENOUGH and MAXD -- this repairs a possible security vulnerability for |
| 687 | 750 | invalid inflate input. Thanks to Tavis Ormandy and Markus Oberhumer for |
| 688 | - discovering the vulnerability and providing test cases. | |
| 751 | + discovering the vulnerability and providing test cases | |
| 689 | 752 | - Add ia64 support to configure for HP-UX [Smith] |
| 690 | 753 | - Add error return to gzread() for format or i/o error [Levin] |
| 691 | 754 | - Use malloc.h for OS/2 [Necasek] |
| 692 | 755 | |
| 693 | 756 | Changes in 1.2.2.3 (27 May 2005) |
| @@ -719,11 +782,11 @@ | ||
| 719 | 782 | - Improve WinCE errno handling and comments [Chang] |
| 720 | 783 | - Remove comment about no gzip header processing in FAQ |
| 721 | 784 | - Add Z_FIXED strategy option to deflateInit2() to force fixed trees |
| 722 | 785 | - Add updated make_vms.com [Coghlan], update README |
| 723 | 786 | - Create a new "examples" directory, move gzappend.c there, add zpipe.c, |
| 724 | - fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html. | |
| 787 | + fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html | |
| 725 | 788 | - Add FAQ entry and comments in deflate.c on uninitialized memory access |
| 726 | 789 | - Add Solaris 9 make options in configure [Gilbert] |
| 727 | 790 | - Allow strerror() usage in gzio.c for STDC |
| 728 | 791 | - Fix DecompressBuf in contrib/delphi/ZLib.pas [ManChesTer] |
| 729 | 792 | - Update contrib/masmx86/inffas32.asm and gvmat32.asm [Vollant] |
| @@ -790,11 +853,11 @@ | ||
| 790 | 853 | - Update email address in README |
| 791 | 854 | - Several FAQ updates |
| 792 | 855 | - Fix a big fat bug in inftrees.c that prevented decoding valid |
| 793 | 856 | dynamic blocks with only literals and no distance codes -- |
| 794 | 857 | Thanks to "Hot Emu" for the bug report and sample file |
| 795 | -- Add a note to puff.c on no distance codes case. | |
| 858 | +- Add a note to puff.c on no distance codes case | |
| 796 | 859 | |
| 797 | 860 | Changes in 1.2.1 (17 November 2003) |
| 798 | 861 | - Remove a tab in contrib/gzappend/gzappend.c |
| 799 | 862 | - Update some interfaces in contrib for new zlib functions |
| 800 | 863 | - Update zlib version number in some contrib entries |
| @@ -1034,18 +1097,18 @@ | ||
| 1034 | 1097 | - Add contrib/inflate86/ for x86 faster inflate |
| 1035 | 1098 | - Add contrib/blast/ for PKWare Data Compression Library decompression |
| 1036 | 1099 | - Add contrib/puff/ simple inflate for deflate format description |
| 1037 | 1100 | |
| 1038 | 1101 | Changes in 1.1.4 (11 March 2002) |
| 1039 | -- ZFREE was repeated on same allocation on some error conditions. | |
| 1102 | +- ZFREE was repeated on same allocation on some error conditions | |
| 1040 | 1103 | This creates a security problem described in |
| 1041 | 1104 | http://www.zlib.org/advisory-2002-03-11.txt |
| 1042 | 1105 | - Returned incorrect error (Z_MEM_ERROR) on some invalid data |
| 1043 | 1106 | - Avoid accesses before window for invalid distances with inflate window |
| 1044 | - less than 32K. | |
| 1107 | + less than 32K | |
| 1045 | 1108 | - force windowBits > 8 to avoid a bug in the encoder for a window size |
| 1046 | - of 256 bytes. (A complete fix will be available in 1.1.5). | |
| 1109 | + of 256 bytes. (A complete fix will be available in 1.1.5) | |
| 1047 | 1110 | |
| 1048 | 1111 | Changes in 1.1.3 (9 July 1998) |
| 1049 | 1112 | - fix "an inflate input buffer bug that shows up on rare but persistent |
| 1050 | 1113 | occasions" (Mark) |
| 1051 | 1114 | - fix gzread and gztell for concatenated .gz files (Didier Le Botlan) |
| @@ -1115,11 +1178,11 @@ | ||
| 1115 | 1178 | Changes in 1.1.1 (27 Feb 98) |
| 1116 | 1179 | - fix macros _tr_tally_* in deflate.h for debug mode (Glenn Randers-Pehrson) |
| 1117 | 1180 | - remove block truncation heuristic which had very marginal effect for zlib |
| 1118 | 1181 | (smaller lit_bufsize than in gzip 1.2.4) and degraded a little the |
| 1119 | 1182 | compression ratio on some files. This also allows inlining _tr_tally for |
| 1120 | - matches in deflate_slow. | |
| 1183 | + matches in deflate_slow | |
| 1121 | 1184 | - added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier) |
| 1122 | 1185 | |
| 1123 | 1186 | Changes in 1.1.0 (24 Feb 98) |
| 1124 | 1187 | - do not return STREAM_END prematurely in inflate (John Bowler) |
| 1125 | 1188 | - revert to the zlib 1.0.8 inflate to avoid the gcc 2.8.0 bug (Jeremy Buhler) |
| @@ -1160,11 +1223,11 @@ | ||
| 1160 | 1223 | - fix gzgetc and gzputc for big endian systems (Markus Oberhumer) |
| 1161 | 1224 | - added compress2() to allow setting the compression level |
| 1162 | 1225 | - include sys/types.h to get off_t on some systems (Marc Lehmann & QingLong) |
| 1163 | 1226 | - use constant arrays for the static trees in trees.c instead of computing |
| 1164 | 1227 | them at run time (thanks to Ken Raeburn for this suggestion). To create |
| 1165 | - trees.h, compile with GEN_TREES_H and run "make test". | |
| 1228 | + trees.h, compile with GEN_TREES_H and run "make test" | |
| 1166 | 1229 | - check return code of example in "make test" and display result |
| 1167 | 1230 | - pass minigzip command line options to file_compress |
| 1168 | 1231 | - simplifying code of inflateSync to avoid gcc 2.8 bug |
| 1169 | 1232 | |
| 1170 | 1233 | - support CC="gcc -Wall" in configure -s (QingLong) |
| @@ -1199,16 +1262,16 @@ | ||
| 1199 | 1262 | |
| 1200 | 1263 | Changes in 1.0.6 (19 Jan 1998) |
| 1201 | 1264 | - add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and |
| 1202 | 1265 | gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code) |
| 1203 | 1266 | - Fix a deflate bug occurring only with compression level 0 (thanks to |
| 1204 | - Andy Buckler for finding this one). | |
| 1205 | -- In minigzip, pass transparently also the first byte for .Z files. | |
| 1267 | + Andy Buckler for finding this one) | |
| 1268 | +- In minigzip, pass transparently also the first byte for .Z files | |
| 1206 | 1269 | - return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress() |
| 1207 | 1270 | - check Z_FINISH in inflate (thanks to Marc Schluper) |
| 1208 | 1271 | - Implement deflateCopy (thanks to Adam Costello) |
| 1209 | -- make static libraries by default in configure, add --shared option. | |
| 1272 | +- make static libraries by default in configure, add --shared option | |
| 1210 | 1273 | - move MSDOS or Windows specific files to directory msdos |
| 1211 | 1274 | - suppress the notion of partial flush to simplify the interface |
| 1212 | 1275 | (but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4) |
| 1213 | 1276 | - suppress history buffer provided by application to simplify the interface |
| 1214 | 1277 | (this feature was not implemented anyway in 1.0.4) |
| @@ -1216,29 +1279,29 @@ | ||
| 1216 | 1279 | inflateInit2 |
| 1217 | 1280 | - add EXPORT in all exported functions (for Windows DLL) |
| 1218 | 1281 | - added Makefile.nt (thanks to Stephen Williams) |
| 1219 | 1282 | - added the unsupported "contrib" directory: |
| 1220 | 1283 | contrib/asm386/ by Gilles Vollant <[email protected]> |
| 1221 | - 386 asm code replacing longest_match(). | |
| 1284 | + 386 asm code replacing longest_match() | |
| 1222 | 1285 | contrib/iostream/ by Kevin Ruland <[email protected]> |
| 1223 | 1286 | A C++ I/O streams interface to the zlib gz* functions |
| 1224 | 1287 | contrib/iostream2/ by Tyge Løvset <[email protected]> |
| 1225 | 1288 | Another C++ I/O streams interface |
| 1226 | 1289 | contrib/untgz/ by "Pedro A. Aranda Guti\irrez" <[email protected]> |
| 1227 | 1290 | A very simple tar.gz file extractor using zlib |
| 1228 | 1291 | contrib/visual-basic.txt by Carlos Rios <[email protected]> |
| 1229 | - How to use compress(), uncompress() and the gz* functions from VB. | |
| 1292 | + How to use compress(), uncompress() and the gz* functions from VB | |
| 1230 | 1293 | - pass params -f (filtered data), -h (huffman only), -1 to -9 (compression |
| 1231 | 1294 | level) in minigzip (thanks to Tom Lane) |
| 1232 | 1295 | |
| 1233 | 1296 | - use const for rommable constants in deflate |
| 1234 | 1297 | - added test for gzseek and gztell in example.c |
| 1235 | 1298 | - add undocumented function inflateSyncPoint() (hack for Paul Mackerras) |
| 1236 | 1299 | - add undocumented function zError to convert error code to string |
| 1237 | 1300 | (for Tim Smithers) |
| 1238 | -- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code. | |
| 1239 | -- Use default memcpy for Symantec MSDOS compiler. | |
| 1301 | +- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code | |
| 1302 | +- Use default memcpy for Symantec MSDOS compiler | |
| 1240 | 1303 | - Add EXPORT keyword for check_func (needed for Windows DLL) |
| 1241 | 1304 | - add current directory to LD_LIBRARY_PATH for "make test" |
| 1242 | 1305 | - create also a link for libz.so.1 |
| 1243 | 1306 | - added support for FUJITSU UXP/DS (thanks to Toshiaki Nomura) |
| 1244 | 1307 | - use $(SHAREDLIB) instead of libz.so in Makefile.in (for HPUX) |
| @@ -1247,21 +1310,21 @@ | ||
| 1247 | 1310 | - add advice in zlib.h for best usage of deflateSetDictionary |
| 1248 | 1311 | - work around compiler bug on Atari (cast Z_NULL in call of s->checkfn) |
| 1249 | 1312 | - allow compilation with ANSI keywords only enabled for TurboC in large model |
| 1250 | 1313 | - avoid "versionString"[0] (Borland bug) |
| 1251 | 1314 | - add NEED_DUMMY_RETURN for Borland |
| 1252 | -- use variable z_verbose for tracing in debug mode (L. Peter Deutsch). | |
| 1315 | +- use variable z_verbose for tracing in debug mode (L. Peter Deutsch) | |
| 1253 | 1316 | - allow compilation with CC |
| 1254 | 1317 | - defined STDC for OS/2 (David Charlap) |
| 1255 | 1318 | - limit external names to 8 chars for MVS (Thomas Lund) |
| 1256 | 1319 | - in minigzip.c, use static buffers only for 16-bit systems |
| 1257 | 1320 | - fix suffix check for "minigzip -d foo.gz" |
| 1258 | 1321 | - do not return an error for the 2nd of two consecutive gzflush() (Felix Lee) |
| 1259 | 1322 | - use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau) |
| 1260 | 1323 | - added makelcc.bat for lcc-win32 (Tom St Denis) |
| 1261 | 1324 | - in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe) |
| 1262 | -- Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion. | |
| 1325 | +- Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion | |
| 1263 | 1326 | - check for unistd.h in configure (for off_t) |
| 1264 | 1327 | - remove useless check parameter in inflate_blocks_free |
| 1265 | 1328 | - avoid useless assignment of s->check to itself in inflate_blocks_new |
| 1266 | 1329 | - do not flush twice in gzclose (thanks to Ken Raeburn) |
| 1267 | 1330 | - rename FOPEN as F_OPEN to avoid clash with /usr/include/sys/file.h |
| @@ -1278,11 +1341,11 @@ | ||
| 1278 | 1341 | - Update web address in README |
| 1279 | 1342 | |
| 1280 | 1343 | Changes in 1.0.4 (24 Jul 96) |
| 1281 | 1344 | - In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF |
| 1282 | 1345 | bit, so the decompressor could decompress all the correct data but went |
| 1283 | - on to attempt decompressing extra garbage data. This affected minigzip too. | |
| 1346 | + on to attempt decompressing extra garbage data. This affected minigzip too | |
| 1284 | 1347 | - zlibVersion and gzerror return const char* (needed for DLL) |
| 1285 | 1348 | - port to RISCOS (no fdopen, no multiple dots, no unlink, no fileno) |
| 1286 | 1349 | - use z_error only for DEBUG (avoid problem with DLLs) |
| 1287 | 1350 | |
| 1288 | 1351 | Changes in 1.0.3 (2 Jul 96) |
| @@ -1308,11 +1371,11 @@ | ||
| 1308 | 1371 | |
| 1309 | 1372 | Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion] |
| 1310 | 1373 | - fix array overlay in deflate.c which sometimes caused bad compressed data |
| 1311 | 1374 | - fix inflate bug with empty stored block |
| 1312 | 1375 | - fix MSDOS medium model which was broken in 0.99 |
| 1313 | -- fix deflateParams() which could generate bad compressed data. | |
| 1376 | +- fix deflateParams() which could generate bad compressed data | |
| 1314 | 1377 | - Bytef is define'd instead of typedef'ed (work around Borland bug) |
| 1315 | 1378 | - added an INDEX file |
| 1316 | 1379 | - new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32), |
| 1317 | 1380 | Watcom (Makefile.wat), Amiga SAS/C (Makefile.sas) |
| 1318 | 1381 | - speed up adler32 for modern machines without auto-increment |
| @@ -1329,11 +1392,11 @@ | ||
| 1329 | 1392 | |
| 1330 | 1393 | Changes in 0.99 (27 Jan 96) |
| 1331 | 1394 | - allow preset dictionary shared between compressor and decompressor |
| 1332 | 1395 | - allow compression level 0 (no compression) |
| 1333 | 1396 | - add deflateParams in zlib.h: allow dynamic change of compression level |
| 1334 | - and compression strategy. | |
| 1397 | + and compression strategy | |
| 1335 | 1398 | - test large buffers and deflateParams in example.c |
| 1336 | 1399 | - add optional "configure" to build zlib as a shared library |
| 1337 | 1400 | - suppress Makefile.qnx, use configure instead |
| 1338 | 1401 | - fixed deflate for 64-bit systems (detected on Cray) |
| 1339 | 1402 | - fixed inflate_blocks for 64-bit systems (detected on Alpha) |
| @@ -1371,48 +1434,48 @@ | ||
| 1371 | 1434 | - in fcalloc, normalize pointer if size > 65520 bytes |
| 1372 | 1435 | - don't use special fcalloc for 32 bit Borland C++ |
| 1373 | 1436 | - use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc... |
| 1374 | 1437 | - use Z_BINARY instead of BINARY |
| 1375 | 1438 | - document that gzclose after gzdopen will close the file |
| 1376 | -- allow "a" as mode in gzopen. | |
| 1439 | +- allow "a" as mode in gzopen | |
| 1377 | 1440 | - fix error checking in gzread |
| 1378 | 1441 | - allow skipping .gz extra-field on pipes |
| 1379 | 1442 | - added reference to Perl interface in README |
| 1380 | 1443 | - put the crc table in FAR data (I dislike more and more the medium model :) |
| 1381 | 1444 | - added get_crc_table |
| 1382 | -- added a dimension to all arrays (Borland C can't count). | |
| 1445 | +- added a dimension to all arrays (Borland C can't count) | |
| 1383 | 1446 | - workaround Borland C bug in declaration of inflate_codes_new & inflate_fast |
| 1384 | 1447 | - guard against multiple inclusion of *.h (for precompiled header on Mac) |
| 1385 | -- Watcom C pretends to be Microsoft C small model even in 32 bit mode. | |
| 1448 | +- Watcom C pretends to be Microsoft C small model even in 32 bit mode | |
| 1386 | 1449 | - don't use unsized arrays to avoid silly warnings by Visual C++: |
| 1387 | 1450 | warning C4746: 'inflate_mask' : unsized array treated as '__far' |
| 1388 | - (what's wrong with far data in far model?). | |
| 1451 | + (what's wrong with far data in far model?) | |
| 1389 | 1452 | - define enum out of inflate_blocks_state to allow compilation with C++ |
| 1390 | 1453 | |
| 1391 | 1454 | Changes in 0.95 (16 Aug 95) |
| 1392 | 1455 | - fix MSDOS small and medium model (now easier to adapt to any compiler) |
| 1393 | 1456 | - inlined send_bits |
| 1394 | 1457 | - fix the final (:-) bug for deflate with flush (output was correct but |
| 1395 | - not completely flushed in rare occasions). | |
| 1458 | + not completely flushed in rare occasions) | |
| 1396 | 1459 | - default window size is same for compression and decompression |
| 1397 | - (it's now sufficient to set MAX_WBITS in zconf.h). | |
| 1460 | + (it's now sufficient to set MAX_WBITS in zconf.h) | |
| 1398 | 1461 | - voidp -> voidpf and voidnp -> voidp (for consistency with other |
| 1399 | - typedefs and because voidnp was not near in large model). | |
| 1462 | + typedefs and because voidnp was not near in large model) | |
| 1400 | 1463 | |
| 1401 | 1464 | Changes in 0.94 (13 Aug 95) |
| 1402 | 1465 | - support MSDOS medium model |
| 1403 | 1466 | - fix deflate with flush (could sometimes generate bad output) |
| 1404 | 1467 | - fix deflateReset (zlib header was incorrectly suppressed) |
| 1405 | 1468 | - added support for VMS |
| 1406 | 1469 | - allow a compression level in gzopen() |
| 1407 | 1470 | - gzflush now calls fflush |
| 1408 | -- For deflate with flush, flush even if no more input is provided. | |
| 1471 | +- For deflate with flush, flush even if no more input is provided | |
| 1409 | 1472 | - rename libgz.a as libz.a |
| 1410 | 1473 | - avoid complex expression in infcodes.c triggering Turbo C bug |
| 1411 | 1474 | - work around a problem with gcc on Alpha (in INSERT_STRING) |
| 1412 | 1475 | - don't use inline functions (problem with some gcc versions) |
| 1413 | -- allow renaming of Byte, uInt, etc... with #define. | |
| 1476 | +- allow renaming of Byte, uInt, etc... with #define | |
| 1414 | 1477 | - avoid warning about (unused) pointer before start of array in deflate.c |
| 1415 | 1478 | - avoid various warnings in gzio.c, example.c, infblock.c, adler32.c, zutil.c |
| 1416 | 1479 | - avoid reserved word 'new' in trees.c |
| 1417 | 1480 | |
| 1418 | 1481 | Changes in 0.93 (25 June 95) |
| @@ -1427,11 +1490,11 @@ | ||
| 1427 | 1490 | - don't assume that char is signed (problem on SGI) |
| 1428 | 1491 | - Clear bit buffer when starting a stored block |
| 1429 | 1492 | - no memcpy on Pyramid |
| 1430 | 1493 | - suppressed inftest.c |
| 1431 | 1494 | - optimized fill_window, put longest_match inline for gcc |
| 1432 | -- optimized inflate on stored blocks. | |
| 1495 | +- optimized inflate on stored blocks | |
| 1433 | 1496 | - untabify all sources to simplify patches |
| 1434 | 1497 | |
| 1435 | 1498 | Changes in 0.91 (2 May 95) |
| 1436 | 1499 | - Default MEM_LEVEL is 8 (not 9 for Unix) as documented in zlib.h |
| 1437 | 1500 | - Document the memory requirements in zconf.h |
| @@ -1445,71 +1508,71 @@ | ||
| 1445 | 1508 | - don't assume that zalloc clears the allocated memory (the TurboC bug |
| 1446 | 1509 | was Mark's bug after all :) |
| 1447 | 1510 | - let again gzread copy uncompressed data unchanged (was working in 0.71) |
| 1448 | 1511 | - deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented |
| 1449 | 1512 | - added a test of inflateSync in example.c |
| 1450 | -- moved MAX_WBITS to zconf.h because users might want to change that. | |
| 1513 | +- moved MAX_WBITS to zconf.h because users might want to change that | |
| 1451 | 1514 | - document explicitly that zalloc(64K) on MSDOS must return a normalized |
| 1452 | 1515 | pointer (zero offset) |
| 1453 | 1516 | - added Makefiles for Microsoft C, Turbo C, Borland C++ |
| 1454 | 1517 | - faster crc32() |
| 1455 | 1518 | |
| 1456 | 1519 | Changes in 0.8 (29 April 95) |
| 1457 | 1520 | - added fast inflate (inffast.c) |
| 1458 | 1521 | - deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this |
| 1459 | - is incompatible with previous versions of zlib which returned Z_OK. | |
| 1522 | + is incompatible with previous versions of zlib which returned Z_OK | |
| 1460 | 1523 | - work around a TurboC compiler bug (bad code for b << 0, see infutil.h) |
| 1461 | 1524 | (actually that was not a compiler bug, see 0.81 above) |
| 1462 | 1525 | - gzread no longer reads one extra byte in certain cases |
| 1463 | 1526 | - In gzio destroy(), don't reference a freed structure |
| 1464 | 1527 | - avoid many warnings for MSDOS |
| 1465 | 1528 | - avoid the ERROR symbol which is used by MS Windows |
| 1466 | 1529 | |
| 1467 | 1530 | Changes in 0.71 (14 April 95) |
| 1468 | 1531 | - Fixed more MSDOS compilation problems :( There is still a bug with |
| 1469 | - TurboC large model. | |
| 1532 | + TurboC large model | |
| 1470 | 1533 | |
| 1471 | 1534 | Changes in 0.7 (14 April 95) |
| 1472 | -- Added full inflate support. | |
| 1535 | +- Added full inflate support | |
| 1473 | 1536 | - Simplified the crc32() interface. The pre- and post-conditioning |
| 1474 | 1537 | (one's complement) is now done inside crc32(). WARNING: this is |
| 1475 | - incompatible with previous versions; see zlib.h for the new usage. | |
| 1538 | + incompatible with previous versions; see zlib.h for the new usage | |
| 1476 | 1539 | |
| 1477 | 1540 | Changes in 0.61 (12 April 95) |
| 1478 | -- workaround for a bug in TurboC. example and minigzip now work on MSDOS. | |
| 1541 | +- workaround for a bug in TurboC. example and minigzip now work on MSDOS | |
| 1479 | 1542 | |
| 1480 | 1543 | Changes in 0.6 (11 April 95) |
| 1481 | 1544 | - added minigzip.c |
| 1482 | 1545 | - added gzdopen to reopen a file descriptor as gzFile |
| 1483 | -- added transparent reading of non-gziped files in gzread. | |
| 1546 | +- added transparent reading of non-gziped files in gzread | |
| 1484 | 1547 | - fixed bug in gzread (don't read crc as data) |
| 1485 | -- fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose). | |
| 1548 | +- fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose) | |
| 1486 | 1549 | - don't allocate big arrays in the stack (for MSDOS) |
| 1487 | 1550 | - fix some MSDOS compilation problems |
| 1488 | 1551 | |
| 1489 | 1552 | Changes in 0.5: |
| 1490 | 1553 | - do real compression in deflate.c. Z_PARTIAL_FLUSH is supported but |
| 1491 | - not yet Z_FULL_FLUSH. | |
| 1554 | + not yet Z_FULL_FLUSH | |
| 1492 | 1555 | - support decompression but only in a single step (forced Z_FINISH) |
| 1493 | -- added opaque object for zalloc and zfree. | |
| 1556 | +- added opaque object for zalloc and zfree | |
| 1494 | 1557 | - added deflateReset and inflateReset |
| 1495 | -- added a variable zlib_version for consistency checking. | |
| 1496 | -- renamed the 'filter' parameter of deflateInit2 as 'strategy'. | |
| 1497 | - Added Z_FILTERED and Z_HUFFMAN_ONLY constants. | |
| 1558 | +- added a variable zlib_version for consistency checking | |
| 1559 | +- renamed the 'filter' parameter of deflateInit2 as 'strategy' | |
| 1560 | + Added Z_FILTERED and Z_HUFFMAN_ONLY constants | |
| 1498 | 1561 | |
| 1499 | 1562 | Changes in 0.4: |
| 1500 | -- avoid "zip" everywhere, use zlib instead of ziplib. | |
| 1563 | +- avoid "zip" everywhere, use zlib instead of ziplib | |
| 1501 | 1564 | - suppress Z_BLOCK_FLUSH, interpret Z_PARTIAL_FLUSH as block flush |
| 1502 | - if compression method == 8. | |
| 1565 | + if compression method == 8 | |
| 1503 | 1566 | - added adler32 and crc32 |
| 1504 | 1567 | - renamed deflateOptions as deflateInit2, call one or the other but not both |
| 1505 | -- added the method parameter for deflateInit2. | |
| 1568 | +- added the method parameter for deflateInit2 | |
| 1506 | 1569 | - added inflateInit2 |
| 1507 | 1570 | - simplied considerably deflateInit and inflateInit by not supporting |
| 1508 | 1571 | user-provided history buffer. This is supported only in deflateInit2 |
| 1509 | - and inflateInit2. | |
| 1572 | + and inflateInit2 | |
| 1510 | 1573 | |
| 1511 | 1574 | Changes in 0.3: |
| 1512 | 1575 | - prefix all macro names with Z_ |
| 1513 | -- use Z_FINISH instead of deflateEnd to finish compression. | |
| 1576 | +- use Z_FINISH instead of deflateEnd to finish compression | |
| 1514 | 1577 | - added Z_HUFFMAN_ONLY |
| 1515 | 1578 | - added gzerror() |
| 1516 | 1579 |
| --- compat/zlib/ChangeLog | |
| +++ compat/zlib/ChangeLog | |
| @@ -1,8 +1,71 @@ | |
| 1 | |
| 2 | ChangeLog file for zlib |
| 3 | |
| 4 | Changes in 1.2.11 (15 Jan 2017) |
| 5 | - Fix deflate stored bug when pulling last block from window |
| 6 | - Permit immediate deflateParams changes before any deflate input |
| 7 | |
| 8 | Changes in 1.2.10 (2 Jan 2017) |
| @@ -509,11 +572,11 @@ | |
| 509 | - Replace use of errno in gz* with functions, support WinCE [Alves] |
| 510 | - Provide alternative to perror() in minigzip.c for WinCE [Alves] |
| 511 | - Don't use _vsnprintf on later versions of MSVC [Lowman] |
| 512 | - Add CMake build script and input file [Lowman] |
| 513 | - Update contrib/minizip to 1.1 [Svensson, Vollant] |
| 514 | - Moved nintendods directory from contrib to . |
| 515 | - Replace gzio.c with a new set of routines with the same functionality |
| 516 | - Add gzbuffer(), gzoffset(), gzclose_r(), gzclose_w() as part of above |
| 517 | - Update contrib/minizip to 1.1b |
| 518 | - Change gzeof() to return 0 on error instead of -1 to agree with zlib.h |
| 519 | |
| @@ -683,11 +746,11 @@ | |
| 683 | - Update make_vms.com [Zinser] |
| 684 | - Initialize state->write in inflateReset() since copied in inflate_fast() |
| 685 | - Be more strict on incomplete code sets in inflate_table() and increase |
| 686 | ENOUGH and MAXD -- this repairs a possible security vulnerability for |
| 687 | invalid inflate input. Thanks to Tavis Ormandy and Markus Oberhumer for |
| 688 | discovering the vulnerability and providing test cases. |
| 689 | - Add ia64 support to configure for HP-UX [Smith] |
| 690 | - Add error return to gzread() for format or i/o error [Levin] |
| 691 | - Use malloc.h for OS/2 [Necasek] |
| 692 | |
| 693 | Changes in 1.2.2.3 (27 May 2005) |
| @@ -719,11 +782,11 @@ | |
| 719 | - Improve WinCE errno handling and comments [Chang] |
| 720 | - Remove comment about no gzip header processing in FAQ |
| 721 | - Add Z_FIXED strategy option to deflateInit2() to force fixed trees |
| 722 | - Add updated make_vms.com [Coghlan], update README |
| 723 | - Create a new "examples" directory, move gzappend.c there, add zpipe.c, |
| 724 | fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html. |
| 725 | - Add FAQ entry and comments in deflate.c on uninitialized memory access |
| 726 | - Add Solaris 9 make options in configure [Gilbert] |
| 727 | - Allow strerror() usage in gzio.c for STDC |
| 728 | - Fix DecompressBuf in contrib/delphi/ZLib.pas [ManChesTer] |
| 729 | - Update contrib/masmx86/inffas32.asm and gvmat32.asm [Vollant] |
| @@ -790,11 +853,11 @@ | |
| 790 | - Update email address in README |
| 791 | - Several FAQ updates |
| 792 | - Fix a big fat bug in inftrees.c that prevented decoding valid |
| 793 | dynamic blocks with only literals and no distance codes -- |
| 794 | Thanks to "Hot Emu" for the bug report and sample file |
| 795 | - Add a note to puff.c on no distance codes case. |
| 796 | |
| 797 | Changes in 1.2.1 (17 November 2003) |
| 798 | - Remove a tab in contrib/gzappend/gzappend.c |
| 799 | - Update some interfaces in contrib for new zlib functions |
| 800 | - Update zlib version number in some contrib entries |
| @@ -1034,18 +1097,18 @@ | |
| 1034 | - Add contrib/inflate86/ for x86 faster inflate |
| 1035 | - Add contrib/blast/ for PKWare Data Compression Library decompression |
| 1036 | - Add contrib/puff/ simple inflate for deflate format description |
| 1037 | |
| 1038 | Changes in 1.1.4 (11 March 2002) |
| 1039 | - ZFREE was repeated on same allocation on some error conditions. |
| 1040 | This creates a security problem described in |
| 1041 | http://www.zlib.org/advisory-2002-03-11.txt |
| 1042 | - Returned incorrect error (Z_MEM_ERROR) on some invalid data |
| 1043 | - Avoid accesses before window for invalid distances with inflate window |
| 1044 | less than 32K. |
| 1045 | - force windowBits > 8 to avoid a bug in the encoder for a window size |
| 1046 | of 256 bytes. (A complete fix will be available in 1.1.5). |
| 1047 | |
| 1048 | Changes in 1.1.3 (9 July 1998) |
| 1049 | - fix "an inflate input buffer bug that shows up on rare but persistent |
| 1050 | occasions" (Mark) |
| 1051 | - fix gzread and gztell for concatenated .gz files (Didier Le Botlan) |
| @@ -1115,11 +1178,11 @@ | |
| 1115 | Changes in 1.1.1 (27 Feb 98) |
| 1116 | - fix macros _tr_tally_* in deflate.h for debug mode (Glenn Randers-Pehrson) |
| 1117 | - remove block truncation heuristic which had very marginal effect for zlib |
| 1118 | (smaller lit_bufsize than in gzip 1.2.4) and degraded a little the |
| 1119 | compression ratio on some files. This also allows inlining _tr_tally for |
| 1120 | matches in deflate_slow. |
| 1121 | - added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier) |
| 1122 | |
| 1123 | Changes in 1.1.0 (24 Feb 98) |
| 1124 | - do not return STREAM_END prematurely in inflate (John Bowler) |
| 1125 | - revert to the zlib 1.0.8 inflate to avoid the gcc 2.8.0 bug (Jeremy Buhler) |
| @@ -1160,11 +1223,11 @@ | |
| 1160 | - fix gzgetc and gzputc for big endian systems (Markus Oberhumer) |
| 1161 | - added compress2() to allow setting the compression level |
| 1162 | - include sys/types.h to get off_t on some systems (Marc Lehmann & QingLong) |
| 1163 | - use constant arrays for the static trees in trees.c instead of computing |
| 1164 | them at run time (thanks to Ken Raeburn for this suggestion). To create |
| 1165 | trees.h, compile with GEN_TREES_H and run "make test". |
| 1166 | - check return code of example in "make test" and display result |
| 1167 | - pass minigzip command line options to file_compress |
| 1168 | - simplifying code of inflateSync to avoid gcc 2.8 bug |
| 1169 | |
| 1170 | - support CC="gcc -Wall" in configure -s (QingLong) |
| @@ -1199,16 +1262,16 @@ | |
| 1199 | |
| 1200 | Changes in 1.0.6 (19 Jan 1998) |
| 1201 | - add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and |
| 1202 | gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code) |
| 1203 | - Fix a deflate bug occurring only with compression level 0 (thanks to |
| 1204 | Andy Buckler for finding this one). |
| 1205 | - In minigzip, pass transparently also the first byte for .Z files. |
| 1206 | - return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress() |
| 1207 | - check Z_FINISH in inflate (thanks to Marc Schluper) |
| 1208 | - Implement deflateCopy (thanks to Adam Costello) |
| 1209 | - make static libraries by default in configure, add --shared option. |
| 1210 | - move MSDOS or Windows specific files to directory msdos |
| 1211 | - suppress the notion of partial flush to simplify the interface |
| 1212 | (but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4) |
| 1213 | - suppress history buffer provided by application to simplify the interface |
| 1214 | (this feature was not implemented anyway in 1.0.4) |
| @@ -1216,29 +1279,29 @@ | |
| 1216 | inflateInit2 |
| 1217 | - add EXPORT in all exported functions (for Windows DLL) |
| 1218 | - added Makefile.nt (thanks to Stephen Williams) |
| 1219 | - added the unsupported "contrib" directory: |
| 1220 | contrib/asm386/ by Gilles Vollant <[email protected]> |
| 1221 | 386 asm code replacing longest_match(). |
| 1222 | contrib/iostream/ by Kevin Ruland <[email protected]> |
| 1223 | A C++ I/O streams interface to the zlib gz* functions |
| 1224 | contrib/iostream2/ by Tyge Løvset <[email protected]> |
| 1225 | Another C++ I/O streams interface |
| 1226 | contrib/untgz/ by "Pedro A. Aranda Guti\irrez" <[email protected]> |
| 1227 | A very simple tar.gz file extractor using zlib |
| 1228 | contrib/visual-basic.txt by Carlos Rios <[email protected]> |
| 1229 | How to use compress(), uncompress() and the gz* functions from VB. |
| 1230 | - pass params -f (filtered data), -h (huffman only), -1 to -9 (compression |
| 1231 | level) in minigzip (thanks to Tom Lane) |
| 1232 | |
| 1233 | - use const for rommable constants in deflate |
| 1234 | - added test for gzseek and gztell in example.c |
| 1235 | - add undocumented function inflateSyncPoint() (hack for Paul Mackerras) |
| 1236 | - add undocumented function zError to convert error code to string |
| 1237 | (for Tim Smithers) |
| 1238 | - Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code. |
| 1239 | - Use default memcpy for Symantec MSDOS compiler. |
| 1240 | - Add EXPORT keyword for check_func (needed for Windows DLL) |
| 1241 | - add current directory to LD_LIBRARY_PATH for "make test" |
| 1242 | - create also a link for libz.so.1 |
| 1243 | - added support for FUJITSU UXP/DS (thanks to Toshiaki Nomura) |
| 1244 | - use $(SHAREDLIB) instead of libz.so in Makefile.in (for HPUX) |
| @@ -1247,21 +1310,21 @@ | |
| 1247 | - add advice in zlib.h for best usage of deflateSetDictionary |
| 1248 | - work around compiler bug on Atari (cast Z_NULL in call of s->checkfn) |
| 1249 | - allow compilation with ANSI keywords only enabled for TurboC in large model |
| 1250 | - avoid "versionString"[0] (Borland bug) |
| 1251 | - add NEED_DUMMY_RETURN for Borland |
| 1252 | - use variable z_verbose for tracing in debug mode (L. Peter Deutsch). |
| 1253 | - allow compilation with CC |
| 1254 | - defined STDC for OS/2 (David Charlap) |
| 1255 | - limit external names to 8 chars for MVS (Thomas Lund) |
| 1256 | - in minigzip.c, use static buffers only for 16-bit systems |
| 1257 | - fix suffix check for "minigzip -d foo.gz" |
| 1258 | - do not return an error for the 2nd of two consecutive gzflush() (Felix Lee) |
| 1259 | - use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau) |
| 1260 | - added makelcc.bat for lcc-win32 (Tom St Denis) |
| 1261 | - in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe) |
| 1262 | - Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion. |
| 1263 | - check for unistd.h in configure (for off_t) |
| 1264 | - remove useless check parameter in inflate_blocks_free |
| 1265 | - avoid useless assignment of s->check to itself in inflate_blocks_new |
| 1266 | - do not flush twice in gzclose (thanks to Ken Raeburn) |
| 1267 | - rename FOPEN as F_OPEN to avoid clash with /usr/include/sys/file.h |
| @@ -1278,11 +1341,11 @@ | |
| 1278 | - Update web address in README |
| 1279 | |
| 1280 | Changes in 1.0.4 (24 Jul 96) |
| 1281 | - In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF |
| 1282 | bit, so the decompressor could decompress all the correct data but went |
| 1283 | on to attempt decompressing extra garbage data. This affected minigzip too. |
| 1284 | - zlibVersion and gzerror return const char* (needed for DLL) |
| 1285 | - port to RISCOS (no fdopen, no multiple dots, no unlink, no fileno) |
| 1286 | - use z_error only for DEBUG (avoid problem with DLLs) |
| 1287 | |
| 1288 | Changes in 1.0.3 (2 Jul 96) |
| @@ -1308,11 +1371,11 @@ | |
| 1308 | |
| 1309 | Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion] |
| 1310 | - fix array overlay in deflate.c which sometimes caused bad compressed data |
| 1311 | - fix inflate bug with empty stored block |
| 1312 | - fix MSDOS medium model which was broken in 0.99 |
| 1313 | - fix deflateParams() which could generate bad compressed data. |
| 1314 | - Bytef is define'd instead of typedef'ed (work around Borland bug) |
| 1315 | - added an INDEX file |
| 1316 | - new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32), |
| 1317 | Watcom (Makefile.wat), Amiga SAS/C (Makefile.sas) |
| 1318 | - speed up adler32 for modern machines without auto-increment |
| @@ -1329,11 +1392,11 @@ | |
| 1329 | |
| 1330 | Changes in 0.99 (27 Jan 96) |
| 1331 | - allow preset dictionary shared between compressor and decompressor |
| 1332 | - allow compression level 0 (no compression) |
| 1333 | - add deflateParams in zlib.h: allow dynamic change of compression level |
| 1334 | and compression strategy. |
| 1335 | - test large buffers and deflateParams in example.c |
| 1336 | - add optional "configure" to build zlib as a shared library |
| 1337 | - suppress Makefile.qnx, use configure instead |
| 1338 | - fixed deflate for 64-bit systems (detected on Cray) |
| 1339 | - fixed inflate_blocks for 64-bit systems (detected on Alpha) |
| @@ -1371,48 +1434,48 @@ | |
| 1371 | - in fcalloc, normalize pointer if size > 65520 bytes |
| 1372 | - don't use special fcalloc for 32 bit Borland C++ |
| 1373 | - use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc... |
| 1374 | - use Z_BINARY instead of BINARY |
| 1375 | - document that gzclose after gzdopen will close the file |
| 1376 | - allow "a" as mode in gzopen. |
| 1377 | - fix error checking in gzread |
| 1378 | - allow skipping .gz extra-field on pipes |
| 1379 | - added reference to Perl interface in README |
| 1380 | - put the crc table in FAR data (I dislike more and more the medium model :) |
| 1381 | - added get_crc_table |
| 1382 | - added a dimension to all arrays (Borland C can't count). |
| 1383 | - workaround Borland C bug in declaration of inflate_codes_new & inflate_fast |
| 1384 | - guard against multiple inclusion of *.h (for precompiled header on Mac) |
| 1385 | - Watcom C pretends to be Microsoft C small model even in 32 bit mode. |
| 1386 | - don't use unsized arrays to avoid silly warnings by Visual C++: |
| 1387 | warning C4746: 'inflate_mask' : unsized array treated as '__far' |
| 1388 | (what's wrong with far data in far model?). |
| 1389 | - define enum out of inflate_blocks_state to allow compilation with C++ |
| 1390 | |
| 1391 | Changes in 0.95 (16 Aug 95) |
| 1392 | - fix MSDOS small and medium model (now easier to adapt to any compiler) |
| 1393 | - inlined send_bits |
| 1394 | - fix the final (:-) bug for deflate with flush (output was correct but |
| 1395 | not completely flushed in rare occasions). |
| 1396 | - default window size is same for compression and decompression |
| 1397 | (it's now sufficient to set MAX_WBITS in zconf.h). |
| 1398 | - voidp -> voidpf and voidnp -> voidp (for consistency with other |
| 1399 | typedefs and because voidnp was not near in large model). |
| 1400 | |
| 1401 | Changes in 0.94 (13 Aug 95) |
| 1402 | - support MSDOS medium model |
| 1403 | - fix deflate with flush (could sometimes generate bad output) |
| 1404 | - fix deflateReset (zlib header was incorrectly suppressed) |
| 1405 | - added support for VMS |
| 1406 | - allow a compression level in gzopen() |
| 1407 | - gzflush now calls fflush |
| 1408 | - For deflate with flush, flush even if no more input is provided. |
| 1409 | - rename libgz.a as libz.a |
| 1410 | - avoid complex expression in infcodes.c triggering Turbo C bug |
| 1411 | - work around a problem with gcc on Alpha (in INSERT_STRING) |
| 1412 | - don't use inline functions (problem with some gcc versions) |
| 1413 | - allow renaming of Byte, uInt, etc... with #define. |
| 1414 | - avoid warning about (unused) pointer before start of array in deflate.c |
| 1415 | - avoid various warnings in gzio.c, example.c, infblock.c, adler32.c, zutil.c |
| 1416 | - avoid reserved word 'new' in trees.c |
| 1417 | |
| 1418 | Changes in 0.93 (25 June 95) |
| @@ -1427,11 +1490,11 @@ | |
| 1427 | - don't assume that char is signed (problem on SGI) |
| 1428 | - Clear bit buffer when starting a stored block |
| 1429 | - no memcpy on Pyramid |
| 1430 | - suppressed inftest.c |
| 1431 | - optimized fill_window, put longest_match inline for gcc |
| 1432 | - optimized inflate on stored blocks. |
| 1433 | - untabify all sources to simplify patches |
| 1434 | |
| 1435 | Changes in 0.91 (2 May 95) |
| 1436 | - Default MEM_LEVEL is 8 (not 9 for Unix) as documented in zlib.h |
| 1437 | - Document the memory requirements in zconf.h |
| @@ -1445,71 +1508,71 @@ | |
| 1445 | - don't assume that zalloc clears the allocated memory (the TurboC bug |
| 1446 | was Mark's bug after all :) |
| 1447 | - let again gzread copy uncompressed data unchanged (was working in 0.71) |
| 1448 | - deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented |
| 1449 | - added a test of inflateSync in example.c |
| 1450 | - moved MAX_WBITS to zconf.h because users might want to change that. |
| 1451 | - document explicitly that zalloc(64K) on MSDOS must return a normalized |
| 1452 | pointer (zero offset) |
| 1453 | - added Makefiles for Microsoft C, Turbo C, Borland C++ |
| 1454 | - faster crc32() |
| 1455 | |
| 1456 | Changes in 0.8 (29 April 95) |
| 1457 | - added fast inflate (inffast.c) |
| 1458 | - deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this |
| 1459 | is incompatible with previous versions of zlib which returned Z_OK. |
| 1460 | - work around a TurboC compiler bug (bad code for b << 0, see infutil.h) |
| 1461 | (actually that was not a compiler bug, see 0.81 above) |
| 1462 | - gzread no longer reads one extra byte in certain cases |
| 1463 | - In gzio destroy(), don't reference a freed structure |
| 1464 | - avoid many warnings for MSDOS |
| 1465 | - avoid the ERROR symbol which is used by MS Windows |
| 1466 | |
| 1467 | Changes in 0.71 (14 April 95) |
| 1468 | - Fixed more MSDOS compilation problems :( There is still a bug with |
| 1469 | TurboC large model. |
| 1470 | |
| 1471 | Changes in 0.7 (14 April 95) |
| 1472 | - Added full inflate support. |
| 1473 | - Simplified the crc32() interface. The pre- and post-conditioning |
| 1474 | (one's complement) is now done inside crc32(). WARNING: this is |
| 1475 | incompatible with previous versions; see zlib.h for the new usage. |
| 1476 | |
| 1477 | Changes in 0.61 (12 April 95) |
| 1478 | - workaround for a bug in TurboC. example and minigzip now work on MSDOS. |
| 1479 | |
| 1480 | Changes in 0.6 (11 April 95) |
| 1481 | - added minigzip.c |
| 1482 | - added gzdopen to reopen a file descriptor as gzFile |
| 1483 | - added transparent reading of non-gziped files in gzread. |
| 1484 | - fixed bug in gzread (don't read crc as data) |
| 1485 | - fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose). |
| 1486 | - don't allocate big arrays in the stack (for MSDOS) |
| 1487 | - fix some MSDOS compilation problems |
| 1488 | |
| 1489 | Changes in 0.5: |
| 1490 | - do real compression in deflate.c. Z_PARTIAL_FLUSH is supported but |
| 1491 | not yet Z_FULL_FLUSH. |
| 1492 | - support decompression but only in a single step (forced Z_FINISH) |
| 1493 | - added opaque object for zalloc and zfree. |
| 1494 | - added deflateReset and inflateReset |
| 1495 | - added a variable zlib_version for consistency checking. |
| 1496 | - renamed the 'filter' parameter of deflateInit2 as 'strategy'. |
| 1497 | Added Z_FILTERED and Z_HUFFMAN_ONLY constants. |
| 1498 | |
| 1499 | Changes in 0.4: |
| 1500 | - avoid "zip" everywhere, use zlib instead of ziplib. |
| 1501 | - suppress Z_BLOCK_FLUSH, interpret Z_PARTIAL_FLUSH as block flush |
| 1502 | if compression method == 8. |
| 1503 | - added adler32 and crc32 |
| 1504 | - renamed deflateOptions as deflateInit2, call one or the other but not both |
| 1505 | - added the method parameter for deflateInit2. |
| 1506 | - added inflateInit2 |
| 1507 | - simplied considerably deflateInit and inflateInit by not supporting |
| 1508 | user-provided history buffer. This is supported only in deflateInit2 |
| 1509 | and inflateInit2. |
| 1510 | |
| 1511 | Changes in 0.3: |
| 1512 | - prefix all macro names with Z_ |
| 1513 | - use Z_FINISH instead of deflateEnd to finish compression. |
| 1514 | - added Z_HUFFMAN_ONLY |
| 1515 | - added gzerror() |
| 1516 |
| --- compat/zlib/ChangeLog | |
| +++ compat/zlib/ChangeLog | |
| @@ -1,8 +1,71 @@ | |
| 1 | |
| 2 | ChangeLog file for zlib |
| 3 | |
| 4 | Changes in 1.2.12 (27 Mar 2022) |
| 5 | - Cygwin does not have _wopen(), so do not create gzopen_w() there |
| 6 | - Permit a deflateParams() parameter change as soon as possible |
| 7 | - Limit hash table inserts after switch from stored deflate |
| 8 | - Fix bug when window full in deflate_stored() |
| 9 | - Fix CLEAR_HASH macro to be usable as a single statement |
| 10 | - Avoid a conversion error in gzseek when off_t type too small |
| 11 | - Have Makefile return non-zero error code on test failure |
| 12 | - Avoid some conversion warnings in gzread.c and gzwrite.c |
| 13 | - Update use of errno for newer Windows CE versions |
| 14 | - Small speedup to inflate [psumbera] |
| 15 | - Return an error if the gzputs string length can't fit in an int |
| 16 | - Add address checking in clang to -w option of configure |
| 17 | - Don't compute check value for raw inflate if asked to validate |
| 18 | - Handle case where inflateSync used when header never processed |
| 19 | - Avoid the use of ptrdiff_t |
| 20 | - Avoid an undefined behavior of memcpy() in gzappend() |
| 21 | - Avoid undefined behaviors of memcpy() in gz*printf() |
| 22 | - Avoid an undefined behavior of memcpy() in _tr_stored_block() |
| 23 | - Make the names in functions declarations identical to definitions |
| 24 | - Remove old assembler code in which bugs have manifested |
| 25 | - Fix deflateEnd() to not report an error at start of raw deflate |
| 26 | - Add legal disclaimer to README |
| 27 | - Emphasize the need to continue decompressing gzip members |
| 28 | - Correct the initialization requirements for deflateInit2() |
| 29 | - Fix a bug that can crash deflate on some input when using Z_FIXED |
| 30 | - Assure that the number of bits for deflatePrime() is valid |
| 31 | - Use a structure to make globals in enough.c evident |
| 32 | - Use a macro for the printf format of big_t in enough.c |
| 33 | - Clean up code style in enough.c, update version |
| 34 | - Use inline function instead of macro for index in enough.c |
| 35 | - Clarify that prefix codes are counted in enough.c |
| 36 | - Show all the codes for the maximum tables size in enough.c |
| 37 | - Add gznorm.c example, which normalizes gzip files |
| 38 | - Fix the zran.c example to work on a multiple-member gzip file |
| 39 | - Add tables for crc32_combine(), to speed it up by a factor of 200 |
| 40 | - Add crc32_combine_gen() and crc32_combine_op() for fast combines |
| 41 | - Speed up software CRC-32 computation by a factor of 1.5 to 3 |
| 42 | - Use atomic test and set, if available, for dynamic CRC tables |
| 43 | - Don't bother computing check value after successful inflateSync() |
| 44 | - Correct comment in crc32.c |
| 45 | - Add use of the ARMv8 crc32 instructions when requested |
| 46 | - Use ARM crc32 instructions if the ARM architecture has them |
| 47 | - Explicitly note that the 32-bit check values are 32 bits |
| 48 | - Avoid adding empty gzip member after gzflush with Z_FINISH |
| 49 | - Fix memory leak on error in gzlog.c |
| 50 | - Fix error in comment on the polynomial representation of a byte |
| 51 | - Clarify gz* function interfaces, referring to parameter names |
| 52 | - Change macro name in inflate.c to avoid collision in VxWorks |
| 53 | - Correct typo in blast.c |
| 54 | - Improve portability of contrib/minizip |
| 55 | - Fix indentation in minizip's zip.c |
| 56 | - Replace black/white with allow/block. (theresa-m) |
| 57 | - minizip warning fix if MAXU32 already defined. (gvollant) |
| 58 | - Fix unztell64() in minizip to work past 4GB. (Daniël Hörchner) |
| 59 | - Clean up minizip to reduce warnings for testing |
| 60 | - Add fallthrough comments for gcc |
| 61 | - Eliminate use of ULL constants |
| 62 | - Separate out address sanitizing from warnings in configure |
| 63 | - Remove destructive aspects of make distclean |
| 64 | - Check for cc masquerading as gcc or clang in configure |
| 65 | - Fix crc32.c to compile local functions only if used |
| 66 | |
| 67 | Changes in 1.2.11 (15 Jan 2017) |
| 68 | - Fix deflate stored bug when pulling last block from window |
| 69 | - Permit immediate deflateParams changes before any deflate input |
| 70 | |
| 71 | Changes in 1.2.10 (2 Jan 2017) |
| @@ -509,11 +572,11 @@ | |
| 572 | - Replace use of errno in gz* with functions, support WinCE [Alves] |
| 573 | - Provide alternative to perror() in minigzip.c for WinCE [Alves] |
| 574 | - Don't use _vsnprintf on later versions of MSVC [Lowman] |
| 575 | - Add CMake build script and input file [Lowman] |
| 576 | - Update contrib/minizip to 1.1 [Svensson, Vollant] |
| 577 | - Moved nintendods directory from contrib to root |
| 578 | - Replace gzio.c with a new set of routines with the same functionality |
| 579 | - Add gzbuffer(), gzoffset(), gzclose_r(), gzclose_w() as part of above |
| 580 | - Update contrib/minizip to 1.1b |
| 581 | - Change gzeof() to return 0 on error instead of -1 to agree with zlib.h |
| 582 | |
| @@ -683,11 +746,11 @@ | |
| 746 | - Update make_vms.com [Zinser] |
| 747 | - Initialize state->write in inflateReset() since copied in inflate_fast() |
| 748 | - Be more strict on incomplete code sets in inflate_table() and increase |
| 749 | ENOUGH and MAXD -- this repairs a possible security vulnerability for |
| 750 | invalid inflate input. Thanks to Tavis Ormandy and Markus Oberhumer for |
| 751 | discovering the vulnerability and providing test cases |
| 752 | - Add ia64 support to configure for HP-UX [Smith] |
| 753 | - Add error return to gzread() for format or i/o error [Levin] |
| 754 | - Use malloc.h for OS/2 [Necasek] |
| 755 | |
| 756 | Changes in 1.2.2.3 (27 May 2005) |
| @@ -719,11 +782,11 @@ | |
| 782 | - Improve WinCE errno handling and comments [Chang] |
| 783 | - Remove comment about no gzip header processing in FAQ |
| 784 | - Add Z_FIXED strategy option to deflateInit2() to force fixed trees |
| 785 | - Add updated make_vms.com [Coghlan], update README |
| 786 | - Create a new "examples" directory, move gzappend.c there, add zpipe.c, |
| 787 | fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html |
| 788 | - Add FAQ entry and comments in deflate.c on uninitialized memory access |
| 789 | - Add Solaris 9 make options in configure [Gilbert] |
| 790 | - Allow strerror() usage in gzio.c for STDC |
| 791 | - Fix DecompressBuf in contrib/delphi/ZLib.pas [ManChesTer] |
| 792 | - Update contrib/masmx86/inffas32.asm and gvmat32.asm [Vollant] |
| @@ -790,11 +853,11 @@ | |
| 853 | - Update email address in README |
| 854 | - Several FAQ updates |
| 855 | - Fix a big fat bug in inftrees.c that prevented decoding valid |
| 856 | dynamic blocks with only literals and no distance codes -- |
| 857 | Thanks to "Hot Emu" for the bug report and sample file |
| 858 | - Add a note to puff.c on no distance codes case |
| 859 | |
| 860 | Changes in 1.2.1 (17 November 2003) |
| 861 | - Remove a tab in contrib/gzappend/gzappend.c |
| 862 | - Update some interfaces in contrib for new zlib functions |
| 863 | - Update zlib version number in some contrib entries |
| @@ -1034,18 +1097,18 @@ | |
| 1097 | - Add contrib/inflate86/ for x86 faster inflate |
| 1098 | - Add contrib/blast/ for PKWare Data Compression Library decompression |
| 1099 | - Add contrib/puff/ simple inflate for deflate format description |
| 1100 | |
| 1101 | Changes in 1.1.4 (11 March 2002) |
| 1102 | - ZFREE was repeated on same allocation on some error conditions |
| 1103 | This creates a security problem described in |
| 1104 | http://www.zlib.org/advisory-2002-03-11.txt |
| 1105 | - Returned incorrect error (Z_MEM_ERROR) on some invalid data |
| 1106 | - Avoid accesses before window for invalid distances with inflate window |
| 1107 | less than 32K |
| 1108 | - force windowBits > 8 to avoid a bug in the encoder for a window size |
| 1109 | of 256 bytes. (A complete fix will be available in 1.1.5) |
| 1110 | |
| 1111 | Changes in 1.1.3 (9 July 1998) |
| 1112 | - fix "an inflate input buffer bug that shows up on rare but persistent |
| 1113 | occasions" (Mark) |
| 1114 | - fix gzread and gztell for concatenated .gz files (Didier Le Botlan) |
| @@ -1115,11 +1178,11 @@ | |
| 1178 | Changes in 1.1.1 (27 Feb 98) |
| 1179 | - fix macros _tr_tally_* in deflate.h for debug mode (Glenn Randers-Pehrson) |
| 1180 | - remove block truncation heuristic which had very marginal effect for zlib |
| 1181 | (smaller lit_bufsize than in gzip 1.2.4) and degraded a little the |
| 1182 | compression ratio on some files. This also allows inlining _tr_tally for |
| 1183 | matches in deflate_slow |
| 1184 | - added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier) |
| 1185 | |
| 1186 | Changes in 1.1.0 (24 Feb 98) |
| 1187 | - do not return STREAM_END prematurely in inflate (John Bowler) |
| 1188 | - revert to the zlib 1.0.8 inflate to avoid the gcc 2.8.0 bug (Jeremy Buhler) |
| @@ -1160,11 +1223,11 @@ | |
| 1223 | - fix gzgetc and gzputc for big endian systems (Markus Oberhumer) |
| 1224 | - added compress2() to allow setting the compression level |
| 1225 | - include sys/types.h to get off_t on some systems (Marc Lehmann & QingLong) |
| 1226 | - use constant arrays for the static trees in trees.c instead of computing |
| 1227 | them at run time (thanks to Ken Raeburn for this suggestion). To create |
| 1228 | trees.h, compile with GEN_TREES_H and run "make test" |
| 1229 | - check return code of example in "make test" and display result |
| 1230 | - pass minigzip command line options to file_compress |
| 1231 | - simplifying code of inflateSync to avoid gcc 2.8 bug |
| 1232 | |
| 1233 | - support CC="gcc -Wall" in configure -s (QingLong) |
| @@ -1199,16 +1262,16 @@ | |
| 1262 | |
| 1263 | Changes in 1.0.6 (19 Jan 1998) |
| 1264 | - add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and |
| 1265 | gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code) |
| 1266 | - Fix a deflate bug occurring only with compression level 0 (thanks to |
| 1267 | Andy Buckler for finding this one) |
| 1268 | - In minigzip, pass transparently also the first byte for .Z files |
| 1269 | - return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress() |
| 1270 | - check Z_FINISH in inflate (thanks to Marc Schluper) |
| 1271 | - Implement deflateCopy (thanks to Adam Costello) |
| 1272 | - make static libraries by default in configure, add --shared option |
| 1273 | - move MSDOS or Windows specific files to directory msdos |
| 1274 | - suppress the notion of partial flush to simplify the interface |
| 1275 | (but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4) |
| 1276 | - suppress history buffer provided by application to simplify the interface |
| 1277 | (this feature was not implemented anyway in 1.0.4) |
| @@ -1216,29 +1279,29 @@ | |
| 1279 | inflateInit2 |
| 1280 | - add EXPORT in all exported functions (for Windows DLL) |
| 1281 | - added Makefile.nt (thanks to Stephen Williams) |
| 1282 | - added the unsupported "contrib" directory: |
| 1283 | contrib/asm386/ by Gilles Vollant <[email protected]> |
| 1284 | 386 asm code replacing longest_match() |
| 1285 | contrib/iostream/ by Kevin Ruland <[email protected]> |
| 1286 | A C++ I/O streams interface to the zlib gz* functions |
| 1287 | contrib/iostream2/ by Tyge Løvset <[email protected]> |
| 1288 | Another C++ I/O streams interface |
| 1289 | contrib/untgz/ by "Pedro A. Aranda Guti\irrez" <[email protected]> |
| 1290 | A very simple tar.gz file extractor using zlib |
| 1291 | contrib/visual-basic.txt by Carlos Rios <[email protected]> |
| 1292 | How to use compress(), uncompress() and the gz* functions from VB |
| 1293 | - pass params -f (filtered data), -h (huffman only), -1 to -9 (compression |
| 1294 | level) in minigzip (thanks to Tom Lane) |
| 1295 | |
| 1296 | - use const for rommable constants in deflate |
| 1297 | - added test for gzseek and gztell in example.c |
| 1298 | - add undocumented function inflateSyncPoint() (hack for Paul Mackerras) |
| 1299 | - add undocumented function zError to convert error code to string |
| 1300 | (for Tim Smithers) |
| 1301 | - Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code |
| 1302 | - Use default memcpy for Symantec MSDOS compiler |
| 1303 | - Add EXPORT keyword for check_func (needed for Windows DLL) |
| 1304 | - add current directory to LD_LIBRARY_PATH for "make test" |
| 1305 | - create also a link for libz.so.1 |
| 1306 | - added support for FUJITSU UXP/DS (thanks to Toshiaki Nomura) |
| 1307 | - use $(SHAREDLIB) instead of libz.so in Makefile.in (for HPUX) |
| @@ -1247,21 +1310,21 @@ | |
| 1310 | - add advice in zlib.h for best usage of deflateSetDictionary |
| 1311 | - work around compiler bug on Atari (cast Z_NULL in call of s->checkfn) |
| 1312 | - allow compilation with ANSI keywords only enabled for TurboC in large model |
| 1313 | - avoid "versionString"[0] (Borland bug) |
| 1314 | - add NEED_DUMMY_RETURN for Borland |
| 1315 | - use variable z_verbose for tracing in debug mode (L. Peter Deutsch) |
| 1316 | - allow compilation with CC |
| 1317 | - defined STDC for OS/2 (David Charlap) |
| 1318 | - limit external names to 8 chars for MVS (Thomas Lund) |
| 1319 | - in minigzip.c, use static buffers only for 16-bit systems |
| 1320 | - fix suffix check for "minigzip -d foo.gz" |
| 1321 | - do not return an error for the 2nd of two consecutive gzflush() (Felix Lee) |
| 1322 | - use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau) |
| 1323 | - added makelcc.bat for lcc-win32 (Tom St Denis) |
| 1324 | - in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe) |
| 1325 | - Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion |
| 1326 | - check for unistd.h in configure (for off_t) |
| 1327 | - remove useless check parameter in inflate_blocks_free |
| 1328 | - avoid useless assignment of s->check to itself in inflate_blocks_new |
| 1329 | - do not flush twice in gzclose (thanks to Ken Raeburn) |
| 1330 | - rename FOPEN as F_OPEN to avoid clash with /usr/include/sys/file.h |
| @@ -1278,11 +1341,11 @@ | |
| 1341 | - Update web address in README |
| 1342 | |
| 1343 | Changes in 1.0.4 (24 Jul 96) |
| 1344 | - In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF |
| 1345 | bit, so the decompressor could decompress all the correct data but went |
| 1346 | on to attempt decompressing extra garbage data. This affected minigzip too |
| 1347 | - zlibVersion and gzerror return const char* (needed for DLL) |
| 1348 | - port to RISCOS (no fdopen, no multiple dots, no unlink, no fileno) |
| 1349 | - use z_error only for DEBUG (avoid problem with DLLs) |
| 1350 | |
| 1351 | Changes in 1.0.3 (2 Jul 96) |
| @@ -1308,11 +1371,11 @@ | |
| 1371 | |
| 1372 | Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion] |
| 1373 | - fix array overlay in deflate.c which sometimes caused bad compressed data |
| 1374 | - fix inflate bug with empty stored block |
| 1375 | - fix MSDOS medium model which was broken in 0.99 |
| 1376 | - fix deflateParams() which could generate bad compressed data |
| 1377 | - Bytef is define'd instead of typedef'ed (work around Borland bug) |
| 1378 | - added an INDEX file |
| 1379 | - new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32), |
| 1380 | Watcom (Makefile.wat), Amiga SAS/C (Makefile.sas) |
| 1381 | - speed up adler32 for modern machines without auto-increment |
| @@ -1329,11 +1392,11 @@ | |
| 1392 | |
| 1393 | Changes in 0.99 (27 Jan 96) |
| 1394 | - allow preset dictionary shared between compressor and decompressor |
| 1395 | - allow compression level 0 (no compression) |
| 1396 | - add deflateParams in zlib.h: allow dynamic change of compression level |
| 1397 | and compression strategy |
| 1398 | - test large buffers and deflateParams in example.c |
| 1399 | - add optional "configure" to build zlib as a shared library |
| 1400 | - suppress Makefile.qnx, use configure instead |
| 1401 | - fixed deflate for 64-bit systems (detected on Cray) |
| 1402 | - fixed inflate_blocks for 64-bit systems (detected on Alpha) |
| @@ -1371,48 +1434,48 @@ | |
| 1434 | - in fcalloc, normalize pointer if size > 65520 bytes |
| 1435 | - don't use special fcalloc for 32 bit Borland C++ |
| 1436 | - use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc... |
| 1437 | - use Z_BINARY instead of BINARY |
| 1438 | - document that gzclose after gzdopen will close the file |
| 1439 | - allow "a" as mode in gzopen |
| 1440 | - fix error checking in gzread |
| 1441 | - allow skipping .gz extra-field on pipes |
| 1442 | - added reference to Perl interface in README |
| 1443 | - put the crc table in FAR data (I dislike more and more the medium model :) |
| 1444 | - added get_crc_table |
| 1445 | - added a dimension to all arrays (Borland C can't count) |
| 1446 | - workaround Borland C bug in declaration of inflate_codes_new & inflate_fast |
| 1447 | - guard against multiple inclusion of *.h (for precompiled header on Mac) |
| 1448 | - Watcom C pretends to be Microsoft C small model even in 32 bit mode |
| 1449 | - don't use unsized arrays to avoid silly warnings by Visual C++: |
| 1450 | warning C4746: 'inflate_mask' : unsized array treated as '__far' |
| 1451 | (what's wrong with far data in far model?) |
| 1452 | - define enum out of inflate_blocks_state to allow compilation with C++ |
| 1453 | |
| 1454 | Changes in 0.95 (16 Aug 95) |
| 1455 | - fix MSDOS small and medium model (now easier to adapt to any compiler) |
| 1456 | - inlined send_bits |
| 1457 | - fix the final (:-) bug for deflate with flush (output was correct but |
| 1458 | not completely flushed in rare occasions) |
| 1459 | - default window size is same for compression and decompression |
| 1460 | (it's now sufficient to set MAX_WBITS in zconf.h) |
| 1461 | - voidp -> voidpf and voidnp -> voidp (for consistency with other |
| 1462 | typedefs and because voidnp was not near in large model) |
| 1463 | |
| 1464 | Changes in 0.94 (13 Aug 95) |
| 1465 | - support MSDOS medium model |
| 1466 | - fix deflate with flush (could sometimes generate bad output) |
| 1467 | - fix deflateReset (zlib header was incorrectly suppressed) |
| 1468 | - added support for VMS |
| 1469 | - allow a compression level in gzopen() |
| 1470 | - gzflush now calls fflush |
| 1471 | - For deflate with flush, flush even if no more input is provided |
| 1472 | - rename libgz.a as libz.a |
| 1473 | - avoid complex expression in infcodes.c triggering Turbo C bug |
| 1474 | - work around a problem with gcc on Alpha (in INSERT_STRING) |
| 1475 | - don't use inline functions (problem with some gcc versions) |
| 1476 | - allow renaming of Byte, uInt, etc... with #define |
| 1477 | - avoid warning about (unused) pointer before start of array in deflate.c |
| 1478 | - avoid various warnings in gzio.c, example.c, infblock.c, adler32.c, zutil.c |
| 1479 | - avoid reserved word 'new' in trees.c |
| 1480 | |
| 1481 | Changes in 0.93 (25 June 95) |
| @@ -1427,11 +1490,11 @@ | |
| 1490 | - don't assume that char is signed (problem on SGI) |
| 1491 | - Clear bit buffer when starting a stored block |
| 1492 | - no memcpy on Pyramid |
| 1493 | - suppressed inftest.c |
| 1494 | - optimized fill_window, put longest_match inline for gcc |
| 1495 | - optimized inflate on stored blocks |
| 1496 | - untabify all sources to simplify patches |
| 1497 | |
| 1498 | Changes in 0.91 (2 May 95) |
| 1499 | - Default MEM_LEVEL is 8 (not 9 for Unix) as documented in zlib.h |
| 1500 | - Document the memory requirements in zconf.h |
| @@ -1445,71 +1508,71 @@ | |
| 1508 | - don't assume that zalloc clears the allocated memory (the TurboC bug |
| 1509 | was Mark's bug after all :) |
| 1510 | - let again gzread copy uncompressed data unchanged (was working in 0.71) |
| 1511 | - deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented |
| 1512 | - added a test of inflateSync in example.c |
| 1513 | - moved MAX_WBITS to zconf.h because users might want to change that |
| 1514 | - document explicitly that zalloc(64K) on MSDOS must return a normalized |
| 1515 | pointer (zero offset) |
| 1516 | - added Makefiles for Microsoft C, Turbo C, Borland C++ |
| 1517 | - faster crc32() |
| 1518 | |
| 1519 | Changes in 0.8 (29 April 95) |
| 1520 | - added fast inflate (inffast.c) |
| 1521 | - deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this |
| 1522 | is incompatible with previous versions of zlib which returned Z_OK |
| 1523 | - work around a TurboC compiler bug (bad code for b << 0, see infutil.h) |
| 1524 | (actually that was not a compiler bug, see 0.81 above) |
| 1525 | - gzread no longer reads one extra byte in certain cases |
| 1526 | - In gzio destroy(), don't reference a freed structure |
| 1527 | - avoid many warnings for MSDOS |
| 1528 | - avoid the ERROR symbol which is used by MS Windows |
| 1529 | |
| 1530 | Changes in 0.71 (14 April 95) |
| 1531 | - Fixed more MSDOS compilation problems :( There is still a bug with |
| 1532 | TurboC large model |
| 1533 | |
| 1534 | Changes in 0.7 (14 April 95) |
| 1535 | - Added full inflate support |
| 1536 | - Simplified the crc32() interface. The pre- and post-conditioning |
| 1537 | (one's complement) is now done inside crc32(). WARNING: this is |
| 1538 | incompatible with previous versions; see zlib.h for the new usage |
| 1539 | |
| 1540 | Changes in 0.61 (12 April 95) |
| 1541 | - workaround for a bug in TurboC. example and minigzip now work on MSDOS |
| 1542 | |
| 1543 | Changes in 0.6 (11 April 95) |
| 1544 | - added minigzip.c |
| 1545 | - added gzdopen to reopen a file descriptor as gzFile |
| 1546 | - added transparent reading of non-gziped files in gzread |
| 1547 | - fixed bug in gzread (don't read crc as data) |
| 1548 | - fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose) |
| 1549 | - don't allocate big arrays in the stack (for MSDOS) |
| 1550 | - fix some MSDOS compilation problems |
| 1551 | |
| 1552 | Changes in 0.5: |
| 1553 | - do real compression in deflate.c. Z_PARTIAL_FLUSH is supported but |
| 1554 | not yet Z_FULL_FLUSH |
| 1555 | - support decompression but only in a single step (forced Z_FINISH) |
| 1556 | - added opaque object for zalloc and zfree |
| 1557 | - added deflateReset and inflateReset |
| 1558 | - added a variable zlib_version for consistency checking |
| 1559 | - renamed the 'filter' parameter of deflateInit2 as 'strategy' |
| 1560 | Added Z_FILTERED and Z_HUFFMAN_ONLY constants |
| 1561 | |
| 1562 | Changes in 0.4: |
| 1563 | - avoid "zip" everywhere, use zlib instead of ziplib |
| 1564 | - suppress Z_BLOCK_FLUSH, interpret Z_PARTIAL_FLUSH as block flush |
| 1565 | if compression method == 8 |
| 1566 | - added adler32 and crc32 |
| 1567 | - renamed deflateOptions as deflateInit2, call one or the other but not both |
| 1568 | - added the method parameter for deflateInit2 |
| 1569 | - added inflateInit2 |
| 1570 | - simplied considerably deflateInit and inflateInit by not supporting |
| 1571 | user-provided history buffer. This is supported only in deflateInit2 |
| 1572 | and inflateInit2 |
| 1573 | |
| 1574 | Changes in 0.3: |
| 1575 | - prefix all macro names with Z_ |
| 1576 | - use Z_FINISH instead of deflateEnd to finish compression |
| 1577 | - added Z_HUFFMAN_ONLY |
| 1578 | - added gzerror() |
| 1579 |
+407
-4
| --- compat/zlib/Makefile | ||
| +++ compat/zlib/Makefile | ||
| @@ -1,5 +1,408 @@ | ||
| 1 | -all: | |
| 2 | - -@echo "Please use ./configure first. Thank you." | |
| 1 | +# Makefile for zlib | |
| 2 | +# Copyright (C) 1995-2017 Jean-loup Gailly, Mark Adler | |
| 3 | +# For conditions of distribution and use, see copyright notice in zlib.h | |
| 4 | + | |
| 5 | +# To compile and test, type: | |
| 6 | +# ./configure; make test | |
| 7 | +# Normally configure builds both a static and a shared library. | |
| 8 | +# If you want to build just a static library, use: ./configure --static | |
| 9 | + | |
| 10 | +# To use the asm code, type: | |
| 11 | +# cp contrib/asm?86/match.S ./match.S | |
| 12 | +# make LOC=-DASMV OBJA=match.o | |
| 13 | + | |
| 14 | +# To install /usr/local/lib/libz.* and /usr/local/include/zlib.h, type: | |
| 15 | +# make install | |
| 16 | +# To install in $HOME instead of /usr/local, use: | |
| 17 | +# make install prefix=$HOME | |
| 18 | + | |
| 19 | +CC=gcc | |
| 20 | + | |
| 21 | +CFLAGS=-O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN | |
| 22 | +#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 | |
| 23 | +#CFLAGS=-g -DZLIB_DEBUG | |
| 24 | +#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ | |
| 25 | +# -Wstrict-prototypes -Wmissing-prototypes | |
| 26 | + | |
| 27 | +SFLAGS=-O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN | |
| 28 | +LDFLAGS= | |
| 29 | +TEST_LDFLAGS=-L. libz.a | |
| 30 | +LDSHARED=gcc | |
| 31 | +CPP=gcc -E | |
| 32 | + | |
| 33 | +STATICLIB=libz.a | |
| 34 | +SHAREDLIB= | |
| 35 | +SHAREDLIBV= | |
| 36 | +SHAREDLIBM= | |
| 37 | +LIBS=$(STATICLIB) $(SHAREDLIBV) | |
| 38 | + | |
| 39 | +AR=ar | |
| 40 | +ARFLAGS=rc | |
| 41 | +RANLIB=ranlib | |
| 42 | +LDCONFIG=ldconfig | |
| 43 | +LDSHAREDLIBC=-lc | |
| 44 | +TAR=tar | |
| 45 | +SHELL=/bin/sh | |
| 46 | +EXE= | |
| 47 | + | |
| 48 | +prefix =/usr/local | |
| 49 | +exec_prefix =${prefix} | |
| 50 | +libdir =${exec_prefix}/lib | |
| 51 | +sharedlibdir =${libdir} | |
| 52 | +includedir =${prefix}/include | |
| 53 | +mandir =${prefix}/share/man | |
| 54 | +man3dir = ${mandir}/man3 | |
| 55 | +pkgconfigdir = ${libdir}/pkgconfig | |
| 56 | +SRCDIR= | |
| 57 | +ZINC= | |
| 58 | +ZINCOUT=-I. | |
| 59 | + | |
| 60 | +OBJZ = adler32.o crc32.o deflate.o infback.o inffast.o inflate.o inftrees.o trees.o zutil.o | |
| 61 | +OBJG = compress.o uncompr.o gzclose.o gzlib.o gzread.o gzwrite.o | |
| 62 | +OBJC = $(OBJZ) $(OBJG) | |
| 63 | + | |
| 64 | +PIC_OBJZ = adler32.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo | |
| 65 | +PIC_OBJG = compress.lo uncompr.lo gzclose.lo gzlib.lo gzread.lo gzwrite.lo | |
| 66 | +PIC_OBJC = $(PIC_OBJZ) $(PIC_OBJG) | |
| 67 | + | |
| 68 | +# to use the asm code: make OBJA=match.o, PIC_OBJA=match.lo | |
| 69 | +OBJA = | |
| 70 | +PIC_OBJA = | |
| 71 | + | |
| 72 | +OBJS = $(OBJC) $(OBJA) | |
| 73 | + | |
| 74 | +PIC_OBJS = $(PIC_OBJC) $(PIC_OBJA) | |
| 75 | + | |
| 76 | +all: static all64 | |
| 77 | + | |
| 78 | +static: example$(EXE) minigzip$(EXE) | |
| 79 | + | |
| 80 | +shared: examplesh$(EXE) minigzipsh$(EXE) | |
| 81 | + | |
| 82 | +all64: example64$(EXE) minigzip64$(EXE) | |
| 83 | + | |
| 84 | +check: test | |
| 85 | + | |
| 86 | +test: all teststatic test64 | |
| 87 | + | |
| 88 | +teststatic: static | |
| 89 | + @TMPST=tmpst_$$; \ | |
| 90 | + if echo hello world | ./minigzip | ./minigzip -d && ./example $$TMPST ; then \ | |
| 91 | + echo ' *** zlib test OK ***'; \ | |
| 92 | + else \ | |
| 93 | + echo ' *** zlib test FAILED ***'; false; \ | |
| 94 | + fi | |
| 95 | + @rm -f tmpst_$$ | |
| 96 | + | |
| 97 | +testshared: shared | |
| 98 | + @LD_LIBRARY_PATH=`pwd`:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \ | |
| 99 | + LD_LIBRARYN32_PATH=`pwd`:$(LD_LIBRARYN32_PATH) ; export LD_LIBRARYN32_PATH; \ | |
| 100 | + DYLD_LIBRARY_PATH=`pwd`:$(DYLD_LIBRARY_PATH) ; export DYLD_LIBRARY_PATH; \ | |
| 101 | + SHLIB_PATH=`pwd`:$(SHLIB_PATH) ; export SHLIB_PATH; \ | |
| 102 | + TMPSH=tmpsh_$$; \ | |
| 103 | + if echo hello world | ./minigzipsh | ./minigzipsh -d && ./examplesh $$TMPSH; then \ | |
| 104 | + echo ' *** zlib shared test OK ***'; \ | |
| 105 | + else \ | |
| 106 | + echo ' *** zlib shared test FAILED ***'; false; \ | |
| 107 | + fi | |
| 108 | + @rm -f tmpsh_$$ | |
| 109 | + | |
| 110 | +test64: all64 | |
| 111 | + @TMP64=tmp64_$$; \ | |
| 112 | + if echo hello world | ./minigzip64 | ./minigzip64 -d && ./example64 $$TMP64; then \ | |
| 113 | + echo ' *** zlib 64-bit test OK ***'; \ | |
| 114 | + else \ | |
| 115 | + echo ' *** zlib 64-bit test FAILED ***'; false; \ | |
| 116 | + fi | |
| 117 | + @rm -f tmp64_$$ | |
| 118 | + | |
| 119 | +infcover.o: $(SRCDIR)test/infcover.c $(SRCDIR)zlib.h zconf.h | |
| 120 | + $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/infcover.c | |
| 121 | + | |
| 122 | +infcover: infcover.o libz.a | |
| 123 | + $(CC) $(CFLAGS) -o $@ infcover.o libz.a | |
| 124 | + | |
| 125 | +cover: infcover | |
| 126 | + rm -f *.gcda | |
| 127 | + ./infcover | |
| 128 | + gcov inf*.c | |
| 129 | + | |
| 130 | +libz.a: $(OBJS) | |
| 131 | + $(AR) $(ARFLAGS) $@ $(OBJS) | |
| 132 | + -@ ($(RANLIB) $@ || true) >/dev/null 2>&1 | |
| 133 | + | |
| 134 | +match.o: match.S | |
| 135 | + $(CPP) match.S > _match.s | |
| 136 | + $(CC) -c _match.s | |
| 137 | + mv _match.o match.o | |
| 138 | + rm -f _match.s | |
| 139 | + | |
| 140 | +match.lo: match.S | |
| 141 | + $(CPP) match.S > _match.s | |
| 142 | + $(CC) -c -fPIC _match.s | |
| 143 | + mv _match.o match.lo | |
| 144 | + rm -f _match.s | |
| 145 | + | |
| 146 | +example.o: $(SRCDIR)test/example.c $(SRCDIR)zlib.h zconf.h | |
| 147 | + $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/example.c | |
| 148 | + | |
| 149 | +minigzip.o: $(SRCDIR)test/minigzip.c $(SRCDIR)zlib.h zconf.h | |
| 150 | + $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/minigzip.c | |
| 151 | + | |
| 152 | +example64.o: $(SRCDIR)test/example.c $(SRCDIR)zlib.h zconf.h | |
| 153 | + $(CC) $(CFLAGS) $(ZINCOUT) -D_FILE_OFFSET_BITS=64 -c -o $@ $(SRCDIR)test/example.c | |
| 154 | + | |
| 155 | +minigzip64.o: $(SRCDIR)test/minigzip.c $(SRCDIR)zlib.h zconf.h | |
| 156 | + $(CC) $(CFLAGS) $(ZINCOUT) -D_FILE_OFFSET_BITS=64 -c -o $@ $(SRCDIR)test/minigzip.c | |
| 157 | + | |
| 158 | + | |
| 159 | +adler32.o: $(SRCDIR)adler32.c | |
| 160 | + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)adler32.c | |
| 161 | + | |
| 162 | +crc32.o: $(SRCDIR)crc32.c | |
| 163 | + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)crc32.c | |
| 164 | + | |
| 165 | +deflate.o: $(SRCDIR)deflate.c | |
| 166 | + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)deflate.c | |
| 167 | + | |
| 168 | +infback.o: $(SRCDIR)infback.c | |
| 169 | + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)infback.c | |
| 170 | + | |
| 171 | +inffast.o: $(SRCDIR)inffast.c | |
| 172 | + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inffast.c | |
| 173 | + | |
| 174 | +inflate.o: $(SRCDIR)inflate.c | |
| 175 | + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inflate.c | |
| 176 | + | |
| 177 | +inftrees.o: $(SRCDIR)inftrees.c | |
| 178 | + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inftrees.c | |
| 179 | + | |
| 180 | +trees.o: $(SRCDIR)trees.c | |
| 181 | + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)trees.c | |
| 182 | + | |
| 183 | +zutil.o: $(SRCDIR)zutil.c | |
| 184 | + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)zutil.c | |
| 185 | + | |
| 186 | +compress.o: $(SRCDIR)compress.c | |
| 187 | + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)compress.c | |
| 188 | + | |
| 189 | +uncompr.o: $(SRCDIR)uncompr.c | |
| 190 | + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)uncompr.c | |
| 191 | + | |
| 192 | +gzclose.o: $(SRCDIR)gzclose.c | |
| 193 | + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzclose.c | |
| 194 | + | |
| 195 | +gzlib.o: $(SRCDIR)gzlib.c | |
| 196 | + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzlib.c | |
| 197 | + | |
| 198 | +gzread.o: $(SRCDIR)gzread.c | |
| 199 | + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzread.c | |
| 200 | + | |
| 201 | +gzwrite.o: $(SRCDIR)gzwrite.c | |
| 202 | + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzwrite.c | |
| 203 | + | |
| 204 | + | |
| 205 | +adler32.lo: $(SRCDIR)adler32.c | |
| 206 | + -@mkdir objs 2>/dev/null || test -d objs | |
| 207 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/adler32.o $(SRCDIR)adler32.c | |
| 208 | + -@mv objs/adler32.o $@ | |
| 209 | + | |
| 210 | +crc32.lo: $(SRCDIR)crc32.c | |
| 211 | + -@mkdir objs 2>/dev/null || test -d objs | |
| 212 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/crc32.o $(SRCDIR)crc32.c | |
| 213 | + -@mv objs/crc32.o $@ | |
| 214 | + | |
| 215 | +deflate.lo: $(SRCDIR)deflate.c | |
| 216 | + -@mkdir objs 2>/dev/null || test -d objs | |
| 217 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/deflate.o $(SRCDIR)deflate.c | |
| 218 | + -@mv objs/deflate.o $@ | |
| 219 | + | |
| 220 | +infback.lo: $(SRCDIR)infback.c | |
| 221 | + -@mkdir objs 2>/dev/null || test -d objs | |
| 222 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/infback.o $(SRCDIR)infback.c | |
| 223 | + -@mv objs/infback.o $@ | |
| 224 | + | |
| 225 | +inffast.lo: $(SRCDIR)inffast.c | |
| 226 | + -@mkdir objs 2>/dev/null || test -d objs | |
| 227 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inffast.o $(SRCDIR)inffast.c | |
| 228 | + -@mv objs/inffast.o $@ | |
| 229 | + | |
| 230 | +inflate.lo: $(SRCDIR)inflate.c | |
| 231 | + -@mkdir objs 2>/dev/null || test -d objs | |
| 232 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inflate.o $(SRCDIR)inflate.c | |
| 233 | + -@mv objs/inflate.o $@ | |
| 234 | + | |
| 235 | +inftrees.lo: $(SRCDIR)inftrees.c | |
| 236 | + -@mkdir objs 2>/dev/null || test -d objs | |
| 237 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inftrees.o $(SRCDIR)inftrees.c | |
| 238 | + -@mv objs/inftrees.o $@ | |
| 239 | + | |
| 240 | +trees.lo: $(SRCDIR)trees.c | |
| 241 | + -@mkdir objs 2>/dev/null || test -d objs | |
| 242 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/trees.o $(SRCDIR)trees.c | |
| 243 | + -@mv objs/trees.o $@ | |
| 244 | + | |
| 245 | +zutil.lo: $(SRCDIR)zutil.c | |
| 246 | + -@mkdir objs 2>/dev/null || test -d objs | |
| 247 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/zutil.o $(SRCDIR)zutil.c | |
| 248 | + -@mv objs/zutil.o $@ | |
| 249 | + | |
| 250 | +compress.lo: $(SRCDIR)compress.c | |
| 251 | + -@mkdir objs 2>/dev/null || test -d objs | |
| 252 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/compress.o $(SRCDIR)compress.c | |
| 253 | + -@mv objs/compress.o $@ | |
| 254 | + | |
| 255 | +uncompr.lo: $(SRCDIR)uncompr.c | |
| 256 | + -@mkdir objs 2>/dev/null || test -d objs | |
| 257 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/uncompr.o $(SRCDIR)uncompr.c | |
| 258 | + -@mv objs/uncompr.o $@ | |
| 259 | + | |
| 260 | +gzclose.lo: $(SRCDIR)gzclose.c | |
| 261 | + -@mkdir objs 2>/dev/null || test -d objs | |
| 262 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzclose.o $(SRCDIR)gzclose.c | |
| 263 | + -@mv objs/gzclose.o $@ | |
| 264 | + | |
| 265 | +gzlib.lo: $(SRCDIR)gzlib.c | |
| 266 | + -@mkdir objs 2>/dev/null || test -d objs | |
| 267 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzlib.o $(SRCDIR)gzlib.c | |
| 268 | + -@mv objs/gzlib.o $@ | |
| 269 | + | |
| 270 | +gzread.lo: $(SRCDIR)gzread.c | |
| 271 | + -@mkdir objs 2>/dev/null || test -d objs | |
| 272 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzread.o $(SRCDIR)gzread.c | |
| 273 | + -@mv objs/gzread.o $@ | |
| 274 | + | |
| 275 | +gzwrite.lo: $(SRCDIR)gzwrite.c | |
| 276 | + -@mkdir objs 2>/dev/null || test -d objs | |
| 277 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzwrite.o $(SRCDIR)gzwrite.c | |
| 278 | + -@mv objs/gzwrite.o $@ | |
| 279 | + | |
| 280 | + | |
| 281 | +placebo $(SHAREDLIBV): $(PIC_OBJS) libz.a | |
| 282 | + $(LDSHARED) $(SFLAGS) -o $@ $(PIC_OBJS) $(LDSHAREDLIBC) $(LDFLAGS) | |
| 283 | + rm -f $(SHAREDLIB) $(SHAREDLIBM) | |
| 284 | + ln -s $@ $(SHAREDLIB) | |
| 285 | + ln -s $@ $(SHAREDLIBM) | |
| 286 | + -@rmdir objs | |
| 287 | + | |
| 288 | +example$(EXE): example.o $(STATICLIB) | |
| 289 | + $(CC) $(CFLAGS) -o $@ example.o $(TEST_LDFLAGS) | |
| 290 | + | |
| 291 | +minigzip$(EXE): minigzip.o $(STATICLIB) | |
| 292 | + $(CC) $(CFLAGS) -o $@ minigzip.o $(TEST_LDFLAGS) | |
| 293 | + | |
| 294 | +examplesh$(EXE): example.o $(SHAREDLIBV) | |
| 295 | + $(CC) $(CFLAGS) -o $@ example.o -L. $(SHAREDLIBV) | |
| 296 | + | |
| 297 | +minigzipsh$(EXE): minigzip.o $(SHAREDLIBV) | |
| 298 | + $(CC) $(CFLAGS) -o $@ minigzip.o -L. $(SHAREDLIBV) | |
| 299 | + | |
| 300 | +example64$(EXE): example64.o $(STATICLIB) | |
| 301 | + $(CC) $(CFLAGS) -o $@ example64.o $(TEST_LDFLAGS) | |
| 302 | + | |
| 303 | +minigzip64$(EXE): minigzip64.o $(STATICLIB) | |
| 304 | + $(CC) $(CFLAGS) -o $@ minigzip64.o $(TEST_LDFLAGS) | |
| 305 | + | |
| 306 | +install-libs: $(LIBS) | |
| 307 | + -@if [ ! -d $(DESTDIR)$(exec_prefix) ]; then mkdir -p $(DESTDIR)$(exec_prefix); fi | |
| 308 | + -@if [ ! -d $(DESTDIR)$(libdir) ]; then mkdir -p $(DESTDIR)$(libdir); fi | |
| 309 | + -@if [ ! -d $(DESTDIR)$(sharedlibdir) ]; then mkdir -p $(DESTDIR)$(sharedlibdir); fi | |
| 310 | + -@if [ ! -d $(DESTDIR)$(man3dir) ]; then mkdir -p $(DESTDIR)$(man3dir); fi | |
| 311 | + -@if [ ! -d $(DESTDIR)$(pkgconfigdir) ]; then mkdir -p $(DESTDIR)$(pkgconfigdir); fi | |
| 312 | + rm -f $(DESTDIR)$(libdir)/$(STATICLIB) | |
| 313 | + cp $(STATICLIB) $(DESTDIR)$(libdir) | |
| 314 | + chmod 644 $(DESTDIR)$(libdir)/$(STATICLIB) | |
| 315 | + -@($(RANLIB) $(DESTDIR)$(libdir)/libz.a || true) >/dev/null 2>&1 | |
| 316 | + -@if test -n "$(SHAREDLIBV)"; then \ | |
| 317 | + rm -f $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV); \ | |
| 318 | + cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir); \ | |
| 319 | + echo "cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)"; \ | |
| 320 | + chmod 755 $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV); \ | |
| 321 | + echo "chmod 755 $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV)"; \ | |
| 322 | + rm -f $(DESTDIR)$(sharedlibdir)/$(SHAREDLIB) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBM); \ | |
| 323 | + ln -s $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIB); \ | |
| 324 | + ln -s $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBM); \ | |
| 325 | + ($(LDCONFIG) || true) >/dev/null 2>&1; \ | |
| 326 | + fi | |
| 327 | + rm -f $(DESTDIR)$(man3dir)/zlib.3 | |
| 328 | + cp $(SRCDIR)zlib.3 $(DESTDIR)$(man3dir) | |
| 329 | + chmod 644 $(DESTDIR)$(man3dir)/zlib.3 | |
| 330 | + rm -f $(DESTDIR)$(pkgconfigdir)/zlib.pc | |
| 331 | + cp zlib.pc $(DESTDIR)$(pkgconfigdir) | |
| 332 | + chmod 644 $(DESTDIR)$(pkgconfigdir)/zlib.pc | |
| 333 | +# The ranlib in install is needed on NeXTSTEP which checks file times | |
| 334 | +# ldconfig is for Linux | |
| 335 | + | |
| 336 | +install: install-libs | |
| 337 | + -@if [ ! -d $(DESTDIR)$(includedir) ]; then mkdir -p $(DESTDIR)$(includedir); fi | |
| 338 | + rm -f $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h | |
| 339 | + cp $(SRCDIR)zlib.h zconf.h $(DESTDIR)$(includedir) | |
| 340 | + chmod 644 $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h | |
| 341 | + | |
| 342 | +uninstall: | |
| 343 | + cd $(DESTDIR)$(includedir) && rm -f zlib.h zconf.h | |
| 344 | + cd $(DESTDIR)$(libdir) && rm -f libz.a; \ | |
| 345 | + if test -n "$(SHAREDLIBV)" -a -f $(SHAREDLIBV); then \ | |
| 346 | + rm -f $(SHAREDLIBV) $(SHAREDLIB) $(SHAREDLIBM); \ | |
| 347 | + fi | |
| 348 | + cd $(DESTDIR)$(man3dir) && rm -f zlib.3 | |
| 349 | + cd $(DESTDIR)$(pkgconfigdir) && rm -f zlib.pc | |
| 350 | + | |
| 351 | +docs: zlib.3.pdf | |
| 352 | + | |
| 353 | +zlib.3.pdf: $(SRCDIR)zlib.3 | |
| 354 | + groff -mandoc -f H -T ps $(SRCDIR)zlib.3 | ps2pdf - $@ | |
| 355 | + | |
| 356 | +zconf.h.cmakein: $(SRCDIR)zconf.h.in | |
| 357 | + -@ TEMPFILE=zconfh_$$; \ | |
| 358 | + echo "/#define ZCONF_H/ a\\\\\n#cmakedefine Z_PREFIX\\\\\n#cmakedefine Z_HAVE_UNISTD_H\n" >> $$TEMPFILE &&\ | |
| 359 | + sed -f $$TEMPFILE $(SRCDIR)zconf.h.in > $@ &&\ | |
| 360 | + touch -r $(SRCDIR)zconf.h.in $@ &&\ | |
| 361 | + rm $$TEMPFILE | |
| 362 | + | |
| 363 | +zconf: $(SRCDIR)zconf.h.in | |
| 364 | + cp -p $(SRCDIR)zconf.h.in zconf.h | |
| 365 | + | |
| 366 | +mostlyclean: clean | |
| 367 | +clean: | |
| 368 | + rm -f *.o *.lo *~ \ | |
| 369 | + example$(EXE) minigzip$(EXE) examplesh$(EXE) minigzipsh$(EXE) \ | |
| 370 | + example64$(EXE) minigzip64$(EXE) \ | |
| 371 | + infcover \ | |
| 372 | + libz.* foo.gz so_locations \ | |
| 373 | + _match.s maketree contrib/infback9/*.o | |
| 374 | + rm -rf objs | |
| 375 | + rm -f *.gcda *.gcno *.gcov | |
| 376 | + rm -f contrib/infback9/*.gcda contrib/infback9/*.gcno contrib/infback9/*.gcov | |
| 377 | + | |
| 378 | +maintainer-clean: distclean | |
| 379 | +distclean: clean zconf zconf.h.cmakein | |
| 380 | + rm -f Makefile zlib.pc configure.log | |
| 381 | + -@rm -f .DS_Store | |
| 382 | + @if [ -f Makefile.in ]; then \ | |
| 383 | + printf 'all:\n\t-@echo "Please use ./configure first. Thank you."\n' > Makefile ; \ | |
| 384 | + printf '\ndistclean:\n\tmake -f Makefile.in distclean\n' >> Makefile ; \ | |
| 385 | + touch -r $(SRCDIR)Makefile.in Makefile ; fi | |
| 386 | + | |
| 387 | +tags: | |
| 388 | + etags $(SRCDIR)*.[ch] | |
| 389 | + | |
| 390 | +adler32.o zutil.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h | |
| 391 | +gzclose.o gzlib.o gzread.o gzwrite.o: $(SRCDIR)zlib.h zconf.h $(SRCDIR)gzguts.h | |
| 392 | +compress.o example.o minigzip.o uncompr.o: $(SRCDIR)zlib.h zconf.h | |
| 393 | +crc32.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)crc32.h | |
| 394 | +deflate.o: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h | |
| 395 | +infback.o inflate.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h $(SRCDIR)inffixed.h | |
| 396 | +inffast.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h | |
| 397 | +inftrees.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h | |
| 398 | +trees.o: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)trees.h | |
| 3 | 399 | |
| 4 | -distclean: | |
| 5 | - make -f Makefile.in distclean | |
| 400 | +adler32.lo zutil.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h | |
| 401 | +gzclose.lo gzlib.lo gzread.lo gzwrite.lo: $(SRCDIR)zlib.h zconf.h $(SRCDIR)gzguts.h | |
| 402 | +compress.lo example.lo minigzip.lo uncompr.lo: $(SRCDIR)zlib.h zconf.h | |
| 403 | +crc32.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)crc32.h | |
| 404 | +deflate.lo: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h | |
| 405 | +infback.lo inflate.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h $(SRCDIR)inffixed.h | |
| 406 | +inffast.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h | |
| 407 | +inftrees.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h | |
| 408 | +trees.lo: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)trees.h | |
| 6 | 409 |
| --- compat/zlib/Makefile | |
| +++ compat/zlib/Makefile | |
| @@ -1,5 +1,408 @@ | |
| 1 | all: |
| 2 | -@echo "Please use ./configure first. Thank you." |
| 3 | |
| 4 | distclean: |
| 5 | make -f Makefile.in distclean |
| 6 |
| --- compat/zlib/Makefile | |
| +++ compat/zlib/Makefile | |
| @@ -1,5 +1,408 @@ | |
| 1 | # Makefile for zlib |
| 2 | # Copyright (C) 1995-2017 Jean-loup Gailly, Mark Adler |
| 3 | # For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | |
| 5 | # To compile and test, type: |
| 6 | # ./configure; make test |
| 7 | # Normally configure builds both a static and a shared library. |
| 8 | # If you want to build just a static library, use: ./configure --static |
| 9 | |
| 10 | # To use the asm code, type: |
| 11 | # cp contrib/asm?86/match.S ./match.S |
| 12 | # make LOC=-DASMV OBJA=match.o |
| 13 | |
| 14 | # To install /usr/local/lib/libz.* and /usr/local/include/zlib.h, type: |
| 15 | # make install |
| 16 | # To install in $HOME instead of /usr/local, use: |
| 17 | # make install prefix=$HOME |
| 18 | |
| 19 | CC=gcc |
| 20 | |
| 21 | CFLAGS=-O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN |
| 22 | #CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 |
| 23 | #CFLAGS=-g -DZLIB_DEBUG |
| 24 | #CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ |
| 25 | # -Wstrict-prototypes -Wmissing-prototypes |
| 26 | |
| 27 | SFLAGS=-O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN |
| 28 | LDFLAGS= |
| 29 | TEST_LDFLAGS=-L. libz.a |
| 30 | LDSHARED=gcc |
| 31 | CPP=gcc -E |
| 32 | |
| 33 | STATICLIB=libz.a |
| 34 | SHAREDLIB= |
| 35 | SHAREDLIBV= |
| 36 | SHAREDLIBM= |
| 37 | LIBS=$(STATICLIB) $(SHAREDLIBV) |
| 38 | |
| 39 | AR=ar |
| 40 | ARFLAGS=rc |
| 41 | RANLIB=ranlib |
| 42 | LDCONFIG=ldconfig |
| 43 | LDSHAREDLIBC=-lc |
| 44 | TAR=tar |
| 45 | SHELL=/bin/sh |
| 46 | EXE= |
| 47 | |
| 48 | prefix =/usr/local |
| 49 | exec_prefix =${prefix} |
| 50 | libdir =${exec_prefix}/lib |
| 51 | sharedlibdir =${libdir} |
| 52 | includedir =${prefix}/include |
| 53 | mandir =${prefix}/share/man |
| 54 | man3dir = ${mandir}/man3 |
| 55 | pkgconfigdir = ${libdir}/pkgconfig |
| 56 | SRCDIR= |
| 57 | ZINC= |
| 58 | ZINCOUT=-I. |
| 59 | |
| 60 | OBJZ = adler32.o crc32.o deflate.o infback.o inffast.o inflate.o inftrees.o trees.o zutil.o |
| 61 | OBJG = compress.o uncompr.o gzclose.o gzlib.o gzread.o gzwrite.o |
| 62 | OBJC = $(OBJZ) $(OBJG) |
| 63 | |
| 64 | PIC_OBJZ = adler32.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo |
| 65 | PIC_OBJG = compress.lo uncompr.lo gzclose.lo gzlib.lo gzread.lo gzwrite.lo |
| 66 | PIC_OBJC = $(PIC_OBJZ) $(PIC_OBJG) |
| 67 | |
| 68 | # to use the asm code: make OBJA=match.o, PIC_OBJA=match.lo |
| 69 | OBJA = |
| 70 | PIC_OBJA = |
| 71 | |
| 72 | OBJS = $(OBJC) $(OBJA) |
| 73 | |
| 74 | PIC_OBJS = $(PIC_OBJC) $(PIC_OBJA) |
| 75 | |
| 76 | all: static all64 |
| 77 | |
| 78 | static: example$(EXE) minigzip$(EXE) |
| 79 | |
| 80 | shared: examplesh$(EXE) minigzipsh$(EXE) |
| 81 | |
| 82 | all64: example64$(EXE) minigzip64$(EXE) |
| 83 | |
| 84 | check: test |
| 85 | |
| 86 | test: all teststatic test64 |
| 87 | |
| 88 | teststatic: static |
| 89 | @TMPST=tmpst_$$; \ |
| 90 | if echo hello world | ./minigzip | ./minigzip -d && ./example $$TMPST ; then \ |
| 91 | echo ' *** zlib test OK ***'; \ |
| 92 | else \ |
| 93 | echo ' *** zlib test FAILED ***'; false; \ |
| 94 | fi |
| 95 | @rm -f tmpst_$$ |
| 96 | |
| 97 | testshared: shared |
| 98 | @LD_LIBRARY_PATH=`pwd`:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \ |
| 99 | LD_LIBRARYN32_PATH=`pwd`:$(LD_LIBRARYN32_PATH) ; export LD_LIBRARYN32_PATH; \ |
| 100 | DYLD_LIBRARY_PATH=`pwd`:$(DYLD_LIBRARY_PATH) ; export DYLD_LIBRARY_PATH; \ |
| 101 | SHLIB_PATH=`pwd`:$(SHLIB_PATH) ; export SHLIB_PATH; \ |
| 102 | TMPSH=tmpsh_$$; \ |
| 103 | if echo hello world | ./minigzipsh | ./minigzipsh -d && ./examplesh $$TMPSH; then \ |
| 104 | echo ' *** zlib shared test OK ***'; \ |
| 105 | else \ |
| 106 | echo ' *** zlib shared test FAILED ***'; false; \ |
| 107 | fi |
| 108 | @rm -f tmpsh_$$ |
| 109 | |
| 110 | test64: all64 |
| 111 | @TMP64=tmp64_$$; \ |
| 112 | if echo hello world | ./minigzip64 | ./minigzip64 -d && ./example64 $$TMP64; then \ |
| 113 | echo ' *** zlib 64-bit test OK ***'; \ |
| 114 | else \ |
| 115 | echo ' *** zlib 64-bit test FAILED ***'; false; \ |
| 116 | fi |
| 117 | @rm -f tmp64_$$ |
| 118 | |
| 119 | infcover.o: $(SRCDIR)test/infcover.c $(SRCDIR)zlib.h zconf.h |
| 120 | $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/infcover.c |
| 121 | |
| 122 | infcover: infcover.o libz.a |
| 123 | $(CC) $(CFLAGS) -o $@ infcover.o libz.a |
| 124 | |
| 125 | cover: infcover |
| 126 | rm -f *.gcda |
| 127 | ./infcover |
| 128 | gcov inf*.c |
| 129 | |
| 130 | libz.a: $(OBJS) |
| 131 | $(AR) $(ARFLAGS) $@ $(OBJS) |
| 132 | -@ ($(RANLIB) $@ || true) >/dev/null 2>&1 |
| 133 | |
| 134 | match.o: match.S |
| 135 | $(CPP) match.S > _match.s |
| 136 | $(CC) -c _match.s |
| 137 | mv _match.o match.o |
| 138 | rm -f _match.s |
| 139 | |
| 140 | match.lo: match.S |
| 141 | $(CPP) match.S > _match.s |
| 142 | $(CC) -c -fPIC _match.s |
| 143 | mv _match.o match.lo |
| 144 | rm -f _match.s |
| 145 | |
| 146 | example.o: $(SRCDIR)test/example.c $(SRCDIR)zlib.h zconf.h |
| 147 | $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/example.c |
| 148 | |
| 149 | minigzip.o: $(SRCDIR)test/minigzip.c $(SRCDIR)zlib.h zconf.h |
| 150 | $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/minigzip.c |
| 151 | |
| 152 | example64.o: $(SRCDIR)test/example.c $(SRCDIR)zlib.h zconf.h |
| 153 | $(CC) $(CFLAGS) $(ZINCOUT) -D_FILE_OFFSET_BITS=64 -c -o $@ $(SRCDIR)test/example.c |
| 154 | |
| 155 | minigzip64.o: $(SRCDIR)test/minigzip.c $(SRCDIR)zlib.h zconf.h |
| 156 | $(CC) $(CFLAGS) $(ZINCOUT) -D_FILE_OFFSET_BITS=64 -c -o $@ $(SRCDIR)test/minigzip.c |
| 157 | |
| 158 | |
| 159 | adler32.o: $(SRCDIR)adler32.c |
| 160 | $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)adler32.c |
| 161 | |
| 162 | crc32.o: $(SRCDIR)crc32.c |
| 163 | $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)crc32.c |
| 164 | |
| 165 | deflate.o: $(SRCDIR)deflate.c |
| 166 | $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)deflate.c |
| 167 | |
| 168 | infback.o: $(SRCDIR)infback.c |
| 169 | $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)infback.c |
| 170 | |
| 171 | inffast.o: $(SRCDIR)inffast.c |
| 172 | $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inffast.c |
| 173 | |
| 174 | inflate.o: $(SRCDIR)inflate.c |
| 175 | $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inflate.c |
| 176 | |
| 177 | inftrees.o: $(SRCDIR)inftrees.c |
| 178 | $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inftrees.c |
| 179 | |
| 180 | trees.o: $(SRCDIR)trees.c |
| 181 | $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)trees.c |
| 182 | |
| 183 | zutil.o: $(SRCDIR)zutil.c |
| 184 | $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)zutil.c |
| 185 | |
| 186 | compress.o: $(SRCDIR)compress.c |
| 187 | $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)compress.c |
| 188 | |
| 189 | uncompr.o: $(SRCDIR)uncompr.c |
| 190 | $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)uncompr.c |
| 191 | |
| 192 | gzclose.o: $(SRCDIR)gzclose.c |
| 193 | $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzclose.c |
| 194 | |
| 195 | gzlib.o: $(SRCDIR)gzlib.c |
| 196 | $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzlib.c |
| 197 | |
| 198 | gzread.o: $(SRCDIR)gzread.c |
| 199 | $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzread.c |
| 200 | |
| 201 | gzwrite.o: $(SRCDIR)gzwrite.c |
| 202 | $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzwrite.c |
| 203 | |
| 204 | |
| 205 | adler32.lo: $(SRCDIR)adler32.c |
| 206 | -@mkdir objs 2>/dev/null || test -d objs |
| 207 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/adler32.o $(SRCDIR)adler32.c |
| 208 | -@mv objs/adler32.o $@ |
| 209 | |
| 210 | crc32.lo: $(SRCDIR)crc32.c |
| 211 | -@mkdir objs 2>/dev/null || test -d objs |
| 212 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/crc32.o $(SRCDIR)crc32.c |
| 213 | -@mv objs/crc32.o $@ |
| 214 | |
| 215 | deflate.lo: $(SRCDIR)deflate.c |
| 216 | -@mkdir objs 2>/dev/null || test -d objs |
| 217 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/deflate.o $(SRCDIR)deflate.c |
| 218 | -@mv objs/deflate.o $@ |
| 219 | |
| 220 | infback.lo: $(SRCDIR)infback.c |
| 221 | -@mkdir objs 2>/dev/null || test -d objs |
| 222 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/infback.o $(SRCDIR)infback.c |
| 223 | -@mv objs/infback.o $@ |
| 224 | |
| 225 | inffast.lo: $(SRCDIR)inffast.c |
| 226 | -@mkdir objs 2>/dev/null || test -d objs |
| 227 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inffast.o $(SRCDIR)inffast.c |
| 228 | -@mv objs/inffast.o $@ |
| 229 | |
| 230 | inflate.lo: $(SRCDIR)inflate.c |
| 231 | -@mkdir objs 2>/dev/null || test -d objs |
| 232 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inflate.o $(SRCDIR)inflate.c |
| 233 | -@mv objs/inflate.o $@ |
| 234 | |
| 235 | inftrees.lo: $(SRCDIR)inftrees.c |
| 236 | -@mkdir objs 2>/dev/null || test -d objs |
| 237 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inftrees.o $(SRCDIR)inftrees.c |
| 238 | -@mv objs/inftrees.o $@ |
| 239 | |
| 240 | trees.lo: $(SRCDIR)trees.c |
| 241 | -@mkdir objs 2>/dev/null || test -d objs |
| 242 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/trees.o $(SRCDIR)trees.c |
| 243 | -@mv objs/trees.o $@ |
| 244 | |
| 245 | zutil.lo: $(SRCDIR)zutil.c |
| 246 | -@mkdir objs 2>/dev/null || test -d objs |
| 247 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/zutil.o $(SRCDIR)zutil.c |
| 248 | -@mv objs/zutil.o $@ |
| 249 | |
| 250 | compress.lo: $(SRCDIR)compress.c |
| 251 | -@mkdir objs 2>/dev/null || test -d objs |
| 252 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/compress.o $(SRCDIR)compress.c |
| 253 | -@mv objs/compress.o $@ |
| 254 | |
| 255 | uncompr.lo: $(SRCDIR)uncompr.c |
| 256 | -@mkdir objs 2>/dev/null || test -d objs |
| 257 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/uncompr.o $(SRCDIR)uncompr.c |
| 258 | -@mv objs/uncompr.o $@ |
| 259 | |
| 260 | gzclose.lo: $(SRCDIR)gzclose.c |
| 261 | -@mkdir objs 2>/dev/null || test -d objs |
| 262 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzclose.o $(SRCDIR)gzclose.c |
| 263 | -@mv objs/gzclose.o $@ |
| 264 | |
| 265 | gzlib.lo: $(SRCDIR)gzlib.c |
| 266 | -@mkdir objs 2>/dev/null || test -d objs |
| 267 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzlib.o $(SRCDIR)gzlib.c |
| 268 | -@mv objs/gzlib.o $@ |
| 269 | |
| 270 | gzread.lo: $(SRCDIR)gzread.c |
| 271 | -@mkdir objs 2>/dev/null || test -d objs |
| 272 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzread.o $(SRCDIR)gzread.c |
| 273 | -@mv objs/gzread.o $@ |
| 274 | |
| 275 | gzwrite.lo: $(SRCDIR)gzwrite.c |
| 276 | -@mkdir objs 2>/dev/null || test -d objs |
| 277 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzwrite.o $(SRCDIR)gzwrite.c |
| 278 | -@mv objs/gzwrite.o $@ |
| 279 | |
| 280 | |
| 281 | placebo $(SHAREDLIBV): $(PIC_OBJS) libz.a |
| 282 | $(LDSHARED) $(SFLAGS) -o $@ $(PIC_OBJS) $(LDSHAREDLIBC) $(LDFLAGS) |
| 283 | rm -f $(SHAREDLIB) $(SHAREDLIBM) |
| 284 | ln -s $@ $(SHAREDLIB) |
| 285 | ln -s $@ $(SHAREDLIBM) |
| 286 | -@rmdir objs |
| 287 | |
| 288 | example$(EXE): example.o $(STATICLIB) |
| 289 | $(CC) $(CFLAGS) -o $@ example.o $(TEST_LDFLAGS) |
| 290 | |
| 291 | minigzip$(EXE): minigzip.o $(STATICLIB) |
| 292 | $(CC) $(CFLAGS) -o $@ minigzip.o $(TEST_LDFLAGS) |
| 293 | |
| 294 | examplesh$(EXE): example.o $(SHAREDLIBV) |
| 295 | $(CC) $(CFLAGS) -o $@ example.o -L. $(SHAREDLIBV) |
| 296 | |
| 297 | minigzipsh$(EXE): minigzip.o $(SHAREDLIBV) |
| 298 | $(CC) $(CFLAGS) -o $@ minigzip.o -L. $(SHAREDLIBV) |
| 299 | |
| 300 | example64$(EXE): example64.o $(STATICLIB) |
| 301 | $(CC) $(CFLAGS) -o $@ example64.o $(TEST_LDFLAGS) |
| 302 | |
| 303 | minigzip64$(EXE): minigzip64.o $(STATICLIB) |
| 304 | $(CC) $(CFLAGS) -o $@ minigzip64.o $(TEST_LDFLAGS) |
| 305 | |
| 306 | install-libs: $(LIBS) |
| 307 | -@if [ ! -d $(DESTDIR)$(exec_prefix) ]; then mkdir -p $(DESTDIR)$(exec_prefix); fi |
| 308 | -@if [ ! -d $(DESTDIR)$(libdir) ]; then mkdir -p $(DESTDIR)$(libdir); fi |
| 309 | -@if [ ! -d $(DESTDIR)$(sharedlibdir) ]; then mkdir -p $(DESTDIR)$(sharedlibdir); fi |
| 310 | -@if [ ! -d $(DESTDIR)$(man3dir) ]; then mkdir -p $(DESTDIR)$(man3dir); fi |
| 311 | -@if [ ! -d $(DESTDIR)$(pkgconfigdir) ]; then mkdir -p $(DESTDIR)$(pkgconfigdir); fi |
| 312 | rm -f $(DESTDIR)$(libdir)/$(STATICLIB) |
| 313 | cp $(STATICLIB) $(DESTDIR)$(libdir) |
| 314 | chmod 644 $(DESTDIR)$(libdir)/$(STATICLIB) |
| 315 | -@($(RANLIB) $(DESTDIR)$(libdir)/libz.a || true) >/dev/null 2>&1 |
| 316 | -@if test -n "$(SHAREDLIBV)"; then \ |
| 317 | rm -f $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV); \ |
| 318 | cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir); \ |
| 319 | echo "cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)"; \ |
| 320 | chmod 755 $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV); \ |
| 321 | echo "chmod 755 $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV)"; \ |
| 322 | rm -f $(DESTDIR)$(sharedlibdir)/$(SHAREDLIB) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBM); \ |
| 323 | ln -s $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIB); \ |
| 324 | ln -s $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBM); \ |
| 325 | ($(LDCONFIG) || true) >/dev/null 2>&1; \ |
| 326 | fi |
| 327 | rm -f $(DESTDIR)$(man3dir)/zlib.3 |
| 328 | cp $(SRCDIR)zlib.3 $(DESTDIR)$(man3dir) |
| 329 | chmod 644 $(DESTDIR)$(man3dir)/zlib.3 |
| 330 | rm -f $(DESTDIR)$(pkgconfigdir)/zlib.pc |
| 331 | cp zlib.pc $(DESTDIR)$(pkgconfigdir) |
| 332 | chmod 644 $(DESTDIR)$(pkgconfigdir)/zlib.pc |
| 333 | # The ranlib in install is needed on NeXTSTEP which checks file times |
| 334 | # ldconfig is for Linux |
| 335 | |
| 336 | install: install-libs |
| 337 | -@if [ ! -d $(DESTDIR)$(includedir) ]; then mkdir -p $(DESTDIR)$(includedir); fi |
| 338 | rm -f $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h |
| 339 | cp $(SRCDIR)zlib.h zconf.h $(DESTDIR)$(includedir) |
| 340 | chmod 644 $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h |
| 341 | |
| 342 | uninstall: |
| 343 | cd $(DESTDIR)$(includedir) && rm -f zlib.h zconf.h |
| 344 | cd $(DESTDIR)$(libdir) && rm -f libz.a; \ |
| 345 | if test -n "$(SHAREDLIBV)" -a -f $(SHAREDLIBV); then \ |
| 346 | rm -f $(SHAREDLIBV) $(SHAREDLIB) $(SHAREDLIBM); \ |
| 347 | fi |
| 348 | cd $(DESTDIR)$(man3dir) && rm -f zlib.3 |
| 349 | cd $(DESTDIR)$(pkgconfigdir) && rm -f zlib.pc |
| 350 | |
| 351 | docs: zlib.3.pdf |
| 352 | |
| 353 | zlib.3.pdf: $(SRCDIR)zlib.3 |
| 354 | groff -mandoc -f H -T ps $(SRCDIR)zlib.3 | ps2pdf - $@ |
| 355 | |
| 356 | zconf.h.cmakein: $(SRCDIR)zconf.h.in |
| 357 | -@ TEMPFILE=zconfh_$$; \ |
| 358 | echo "/#define ZCONF_H/ a\\\\\n#cmakedefine Z_PREFIX\\\\\n#cmakedefine Z_HAVE_UNISTD_H\n" >> $$TEMPFILE &&\ |
| 359 | sed -f $$TEMPFILE $(SRCDIR)zconf.h.in > $@ &&\ |
| 360 | touch -r $(SRCDIR)zconf.h.in $@ &&\ |
| 361 | rm $$TEMPFILE |
| 362 | |
| 363 | zconf: $(SRCDIR)zconf.h.in |
| 364 | cp -p $(SRCDIR)zconf.h.in zconf.h |
| 365 | |
| 366 | mostlyclean: clean |
| 367 | clean: |
| 368 | rm -f *.o *.lo *~ \ |
| 369 | example$(EXE) minigzip$(EXE) examplesh$(EXE) minigzipsh$(EXE) \ |
| 370 | example64$(EXE) minigzip64$(EXE) \ |
| 371 | infcover \ |
| 372 | libz.* foo.gz so_locations \ |
| 373 | _match.s maketree contrib/infback9/*.o |
| 374 | rm -rf objs |
| 375 | rm -f *.gcda *.gcno *.gcov |
| 376 | rm -f contrib/infback9/*.gcda contrib/infback9/*.gcno contrib/infback9/*.gcov |
| 377 | |
| 378 | maintainer-clean: distclean |
| 379 | distclean: clean zconf zconf.h.cmakein |
| 380 | rm -f Makefile zlib.pc configure.log |
| 381 | -@rm -f .DS_Store |
| 382 | @if [ -f Makefile.in ]; then \ |
| 383 | printf 'all:\n\t-@echo "Please use ./configure first. Thank you."\n' > Makefile ; \ |
| 384 | printf '\ndistclean:\n\tmake -f Makefile.in distclean\n' >> Makefile ; \ |
| 385 | touch -r $(SRCDIR)Makefile.in Makefile ; fi |
| 386 | |
| 387 | tags: |
| 388 | etags $(SRCDIR)*.[ch] |
| 389 | |
| 390 | adler32.o zutil.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h |
| 391 | gzclose.o gzlib.o gzread.o gzwrite.o: $(SRCDIR)zlib.h zconf.h $(SRCDIR)gzguts.h |
| 392 | compress.o example.o minigzip.o uncompr.o: $(SRCDIR)zlib.h zconf.h |
| 393 | crc32.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)crc32.h |
| 394 | deflate.o: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h |
| 395 | infback.o inflate.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h $(SRCDIR)inffixed.h |
| 396 | inffast.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h |
| 397 | inftrees.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h |
| 398 | trees.o: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)trees.h |
| 399 | |
| 400 | adler32.lo zutil.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h |
| 401 | gzclose.lo gzlib.lo gzread.lo gzwrite.lo: $(SRCDIR)zlib.h zconf.h $(SRCDIR)gzguts.h |
| 402 | compress.lo example.lo minigzip.lo uncompr.lo: $(SRCDIR)zlib.h zconf.h |
| 403 | crc32.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)crc32.h |
| 404 | deflate.lo: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h |
| 405 | infback.lo inflate.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h $(SRCDIR)inffixed.h |
| 406 | inffast.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h |
| 407 | inftrees.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h |
| 408 | trees.lo: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)trees.h |
| 409 |
+23
-25
| --- compat/zlib/Makefile.in | ||
| +++ compat/zlib/Makefile.in | ||
| @@ -30,11 +30,11 @@ | ||
| 30 | 30 | LDSHARED=$(CC) |
| 31 | 31 | CPP=$(CC) -E |
| 32 | 32 | |
| 33 | 33 | STATICLIB=libz.a |
| 34 | 34 | SHAREDLIB=libz.so |
| 35 | -SHAREDLIBV=libz.so.1.2.11 | |
| 35 | +SHAREDLIBV=libz.so.1.2.12 | |
| 36 | 36 | SHAREDLIBM=libz.so.1 |
| 37 | 37 | LIBS=$(STATICLIB) $(SHAREDLIBV) |
| 38 | 38 | |
| 39 | 39 | AR=ar |
| 40 | 40 | ARFLAGS=rc |
| @@ -89,12 +89,12 @@ | ||
| 89 | 89 | @TMPST=tmpst_$$; \ |
| 90 | 90 | if echo hello world | ./minigzip | ./minigzip -d && ./example $$TMPST ; then \ |
| 91 | 91 | echo ' *** zlib test OK ***'; \ |
| 92 | 92 | else \ |
| 93 | 93 | echo ' *** zlib test FAILED ***'; false; \ |
| 94 | - fi; \ | |
| 95 | - rm -f $$TMPST | |
| 94 | + fi | |
| 95 | + @rm -f tmpst_$$ | |
| 96 | 96 | |
| 97 | 97 | testshared: shared |
| 98 | 98 | @LD_LIBRARY_PATH=`pwd`:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \ |
| 99 | 99 | LD_LIBRARYN32_PATH=`pwd`:$(LD_LIBRARYN32_PATH) ; export LD_LIBRARYN32_PATH; \ |
| 100 | 100 | DYLD_LIBRARY_PATH=`pwd`:$(DYLD_LIBRARY_PATH) ; export DYLD_LIBRARY_PATH; \ |
| @@ -102,21 +102,21 @@ | ||
| 102 | 102 | TMPSH=tmpsh_$$; \ |
| 103 | 103 | if echo hello world | ./minigzipsh | ./minigzipsh -d && ./examplesh $$TMPSH; then \ |
| 104 | 104 | echo ' *** zlib shared test OK ***'; \ |
| 105 | 105 | else \ |
| 106 | 106 | echo ' *** zlib shared test FAILED ***'; false; \ |
| 107 | - fi; \ | |
| 108 | - rm -f $$TMPSH | |
| 107 | + fi | |
| 108 | + @rm -f tmpsh_$$ | |
| 109 | 109 | |
| 110 | 110 | test64: all64 |
| 111 | 111 | @TMP64=tmp64_$$; \ |
| 112 | 112 | if echo hello world | ./minigzip64 | ./minigzip64 -d && ./example64 $$TMP64; then \ |
| 113 | 113 | echo ' *** zlib 64-bit test OK ***'; \ |
| 114 | 114 | else \ |
| 115 | 115 | echo ' *** zlib 64-bit test FAILED ***'; false; \ |
| 116 | - fi; \ | |
| 117 | - rm -f $$TMP64 | |
| 116 | + fi | |
| 117 | + @rm -f tmp64_$$ | |
| 118 | 118 | |
| 119 | 119 | infcover.o: $(SRCDIR)test/infcover.c $(SRCDIR)zlib.h zconf.h |
| 120 | 120 | $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/infcover.c |
| 121 | 121 | |
| 122 | 122 | infcover: infcover.o libz.a |
| @@ -202,81 +202,81 @@ | ||
| 202 | 202 | $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzwrite.c |
| 203 | 203 | |
| 204 | 204 | |
| 205 | 205 | adler32.lo: $(SRCDIR)adler32.c |
| 206 | 206 | -@mkdir objs 2>/dev/null || test -d objs |
| 207 | - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/adler32.o $(SRCDIR)adler32.c | |
| 207 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/adler32.o $(SRCDIR)adler32.c | |
| 208 | 208 | -@mv objs/adler32.o $@ |
| 209 | 209 | |
| 210 | 210 | crc32.lo: $(SRCDIR)crc32.c |
| 211 | 211 | -@mkdir objs 2>/dev/null || test -d objs |
| 212 | - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/crc32.o $(SRCDIR)crc32.c | |
| 212 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/crc32.o $(SRCDIR)crc32.c | |
| 213 | 213 | -@mv objs/crc32.o $@ |
| 214 | 214 | |
| 215 | 215 | deflate.lo: $(SRCDIR)deflate.c |
| 216 | 216 | -@mkdir objs 2>/dev/null || test -d objs |
| 217 | - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/deflate.o $(SRCDIR)deflate.c | |
| 217 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/deflate.o $(SRCDIR)deflate.c | |
| 218 | 218 | -@mv objs/deflate.o $@ |
| 219 | 219 | |
| 220 | 220 | infback.lo: $(SRCDIR)infback.c |
| 221 | 221 | -@mkdir objs 2>/dev/null || test -d objs |
| 222 | - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/infback.o $(SRCDIR)infback.c | |
| 222 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/infback.o $(SRCDIR)infback.c | |
| 223 | 223 | -@mv objs/infback.o $@ |
| 224 | 224 | |
| 225 | 225 | inffast.lo: $(SRCDIR)inffast.c |
| 226 | 226 | -@mkdir objs 2>/dev/null || test -d objs |
| 227 | - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inffast.o $(SRCDIR)inffast.c | |
| 227 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inffast.o $(SRCDIR)inffast.c | |
| 228 | 228 | -@mv objs/inffast.o $@ |
| 229 | 229 | |
| 230 | 230 | inflate.lo: $(SRCDIR)inflate.c |
| 231 | 231 | -@mkdir objs 2>/dev/null || test -d objs |
| 232 | - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inflate.o $(SRCDIR)inflate.c | |
| 232 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inflate.o $(SRCDIR)inflate.c | |
| 233 | 233 | -@mv objs/inflate.o $@ |
| 234 | 234 | |
| 235 | 235 | inftrees.lo: $(SRCDIR)inftrees.c |
| 236 | 236 | -@mkdir objs 2>/dev/null || test -d objs |
| 237 | - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inftrees.o $(SRCDIR)inftrees.c | |
| 237 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inftrees.o $(SRCDIR)inftrees.c | |
| 238 | 238 | -@mv objs/inftrees.o $@ |
| 239 | 239 | |
| 240 | 240 | trees.lo: $(SRCDIR)trees.c |
| 241 | 241 | -@mkdir objs 2>/dev/null || test -d objs |
| 242 | - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/trees.o $(SRCDIR)trees.c | |
| 242 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/trees.o $(SRCDIR)trees.c | |
| 243 | 243 | -@mv objs/trees.o $@ |
| 244 | 244 | |
| 245 | 245 | zutil.lo: $(SRCDIR)zutil.c |
| 246 | 246 | -@mkdir objs 2>/dev/null || test -d objs |
| 247 | - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/zutil.o $(SRCDIR)zutil.c | |
| 247 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/zutil.o $(SRCDIR)zutil.c | |
| 248 | 248 | -@mv objs/zutil.o $@ |
| 249 | 249 | |
| 250 | 250 | compress.lo: $(SRCDIR)compress.c |
| 251 | 251 | -@mkdir objs 2>/dev/null || test -d objs |
| 252 | - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/compress.o $(SRCDIR)compress.c | |
| 252 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/compress.o $(SRCDIR)compress.c | |
| 253 | 253 | -@mv objs/compress.o $@ |
| 254 | 254 | |
| 255 | 255 | uncompr.lo: $(SRCDIR)uncompr.c |
| 256 | 256 | -@mkdir objs 2>/dev/null || test -d objs |
| 257 | - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/uncompr.o $(SRCDIR)uncompr.c | |
| 257 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/uncompr.o $(SRCDIR)uncompr.c | |
| 258 | 258 | -@mv objs/uncompr.o $@ |
| 259 | 259 | |
| 260 | 260 | gzclose.lo: $(SRCDIR)gzclose.c |
| 261 | 261 | -@mkdir objs 2>/dev/null || test -d objs |
| 262 | - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzclose.o $(SRCDIR)gzclose.c | |
| 262 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzclose.o $(SRCDIR)gzclose.c | |
| 263 | 263 | -@mv objs/gzclose.o $@ |
| 264 | 264 | |
| 265 | 265 | gzlib.lo: $(SRCDIR)gzlib.c |
| 266 | 266 | -@mkdir objs 2>/dev/null || test -d objs |
| 267 | - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzlib.o $(SRCDIR)gzlib.c | |
| 267 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzlib.o $(SRCDIR)gzlib.c | |
| 268 | 268 | -@mv objs/gzlib.o $@ |
| 269 | 269 | |
| 270 | 270 | gzread.lo: $(SRCDIR)gzread.c |
| 271 | 271 | -@mkdir objs 2>/dev/null || test -d objs |
| 272 | - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzread.o $(SRCDIR)gzread.c | |
| 272 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzread.o $(SRCDIR)gzread.c | |
| 273 | 273 | -@mv objs/gzread.o $@ |
| 274 | 274 | |
| 275 | 275 | gzwrite.lo: $(SRCDIR)gzwrite.c |
| 276 | 276 | -@mkdir objs 2>/dev/null || test -d objs |
| 277 | - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzwrite.o $(SRCDIR)gzwrite.c | |
| 277 | + $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzwrite.o $(SRCDIR)gzwrite.c | |
| 278 | 278 | -@mv objs/gzwrite.o $@ |
| 279 | 279 | |
| 280 | 280 | |
| 281 | 281 | placebo $(SHAREDLIBV): $(PIC_OBJS) libz.a |
| 282 | 282 | $(LDSHARED) $(SFLAGS) -o $@ $(PIC_OBJS) $(LDSHAREDLIBC) $(LDFLAGS) |
| @@ -374,19 +374,17 @@ | ||
| 374 | 374 | rm -rf objs |
| 375 | 375 | rm -f *.gcda *.gcno *.gcov |
| 376 | 376 | rm -f contrib/infback9/*.gcda contrib/infback9/*.gcno contrib/infback9/*.gcov |
| 377 | 377 | |
| 378 | 378 | maintainer-clean: distclean |
| 379 | -distclean: clean zconf zconf.h.cmakein docs | |
| 379 | +distclean: clean zconf zconf.h.cmakein | |
| 380 | 380 | rm -f Makefile zlib.pc configure.log |
| 381 | 381 | -@rm -f .DS_Store |
| 382 | 382 | @if [ -f Makefile.in ]; then \ |
| 383 | 383 | printf 'all:\n\t-@echo "Please use ./configure first. Thank you."\n' > Makefile ; \ |
| 384 | 384 | printf '\ndistclean:\n\tmake -f Makefile.in distclean\n' >> Makefile ; \ |
| 385 | 385 | touch -r $(SRCDIR)Makefile.in Makefile ; fi |
| 386 | - @if [ ! -f zconf.h.in ]; then rm -f zconf.h zconf.h.cmakein ; fi | |
| 387 | - @if [ ! -f zlib.3 ]; then rm -f zlib.3.pdf ; fi | |
| 388 | 386 | |
| 389 | 387 | tags: |
| 390 | 388 | etags $(SRCDIR)*.[ch] |
| 391 | 389 | |
| 392 | 390 | adler32.o zutil.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h |
| 393 | 391 |
| --- compat/zlib/Makefile.in | |
| +++ compat/zlib/Makefile.in | |
| @@ -30,11 +30,11 @@ | |
| 30 | LDSHARED=$(CC) |
| 31 | CPP=$(CC) -E |
| 32 | |
| 33 | STATICLIB=libz.a |
| 34 | SHAREDLIB=libz.so |
| 35 | SHAREDLIBV=libz.so.1.2.11 |
| 36 | SHAREDLIBM=libz.so.1 |
| 37 | LIBS=$(STATICLIB) $(SHAREDLIBV) |
| 38 | |
| 39 | AR=ar |
| 40 | ARFLAGS=rc |
| @@ -89,12 +89,12 @@ | |
| 89 | @TMPST=tmpst_$$; \ |
| 90 | if echo hello world | ./minigzip | ./minigzip -d && ./example $$TMPST ; then \ |
| 91 | echo ' *** zlib test OK ***'; \ |
| 92 | else \ |
| 93 | echo ' *** zlib test FAILED ***'; false; \ |
| 94 | fi; \ |
| 95 | rm -f $$TMPST |
| 96 | |
| 97 | testshared: shared |
| 98 | @LD_LIBRARY_PATH=`pwd`:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \ |
| 99 | LD_LIBRARYN32_PATH=`pwd`:$(LD_LIBRARYN32_PATH) ; export LD_LIBRARYN32_PATH; \ |
| 100 | DYLD_LIBRARY_PATH=`pwd`:$(DYLD_LIBRARY_PATH) ; export DYLD_LIBRARY_PATH; \ |
| @@ -102,21 +102,21 @@ | |
| 102 | TMPSH=tmpsh_$$; \ |
| 103 | if echo hello world | ./minigzipsh | ./minigzipsh -d && ./examplesh $$TMPSH; then \ |
| 104 | echo ' *** zlib shared test OK ***'; \ |
| 105 | else \ |
| 106 | echo ' *** zlib shared test FAILED ***'; false; \ |
| 107 | fi; \ |
| 108 | rm -f $$TMPSH |
| 109 | |
| 110 | test64: all64 |
| 111 | @TMP64=tmp64_$$; \ |
| 112 | if echo hello world | ./minigzip64 | ./minigzip64 -d && ./example64 $$TMP64; then \ |
| 113 | echo ' *** zlib 64-bit test OK ***'; \ |
| 114 | else \ |
| 115 | echo ' *** zlib 64-bit test FAILED ***'; false; \ |
| 116 | fi; \ |
| 117 | rm -f $$TMP64 |
| 118 | |
| 119 | infcover.o: $(SRCDIR)test/infcover.c $(SRCDIR)zlib.h zconf.h |
| 120 | $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/infcover.c |
| 121 | |
| 122 | infcover: infcover.o libz.a |
| @@ -202,81 +202,81 @@ | |
| 202 | $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzwrite.c |
| 203 | |
| 204 | |
| 205 | adler32.lo: $(SRCDIR)adler32.c |
| 206 | -@mkdir objs 2>/dev/null || test -d objs |
| 207 | $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/adler32.o $(SRCDIR)adler32.c |
| 208 | -@mv objs/adler32.o $@ |
| 209 | |
| 210 | crc32.lo: $(SRCDIR)crc32.c |
| 211 | -@mkdir objs 2>/dev/null || test -d objs |
| 212 | $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/crc32.o $(SRCDIR)crc32.c |
| 213 | -@mv objs/crc32.o $@ |
| 214 | |
| 215 | deflate.lo: $(SRCDIR)deflate.c |
| 216 | -@mkdir objs 2>/dev/null || test -d objs |
| 217 | $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/deflate.o $(SRCDIR)deflate.c |
| 218 | -@mv objs/deflate.o $@ |
| 219 | |
| 220 | infback.lo: $(SRCDIR)infback.c |
| 221 | -@mkdir objs 2>/dev/null || test -d objs |
| 222 | $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/infback.o $(SRCDIR)infback.c |
| 223 | -@mv objs/infback.o $@ |
| 224 | |
| 225 | inffast.lo: $(SRCDIR)inffast.c |
| 226 | -@mkdir objs 2>/dev/null || test -d objs |
| 227 | $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inffast.o $(SRCDIR)inffast.c |
| 228 | -@mv objs/inffast.o $@ |
| 229 | |
| 230 | inflate.lo: $(SRCDIR)inflate.c |
| 231 | -@mkdir objs 2>/dev/null || test -d objs |
| 232 | $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inflate.o $(SRCDIR)inflate.c |
| 233 | -@mv objs/inflate.o $@ |
| 234 | |
| 235 | inftrees.lo: $(SRCDIR)inftrees.c |
| 236 | -@mkdir objs 2>/dev/null || test -d objs |
| 237 | $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inftrees.o $(SRCDIR)inftrees.c |
| 238 | -@mv objs/inftrees.o $@ |
| 239 | |
| 240 | trees.lo: $(SRCDIR)trees.c |
| 241 | -@mkdir objs 2>/dev/null || test -d objs |
| 242 | $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/trees.o $(SRCDIR)trees.c |
| 243 | -@mv objs/trees.o $@ |
| 244 | |
| 245 | zutil.lo: $(SRCDIR)zutil.c |
| 246 | -@mkdir objs 2>/dev/null || test -d objs |
| 247 | $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/zutil.o $(SRCDIR)zutil.c |
| 248 | -@mv objs/zutil.o $@ |
| 249 | |
| 250 | compress.lo: $(SRCDIR)compress.c |
| 251 | -@mkdir objs 2>/dev/null || test -d objs |
| 252 | $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/compress.o $(SRCDIR)compress.c |
| 253 | -@mv objs/compress.o $@ |
| 254 | |
| 255 | uncompr.lo: $(SRCDIR)uncompr.c |
| 256 | -@mkdir objs 2>/dev/null || test -d objs |
| 257 | $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/uncompr.o $(SRCDIR)uncompr.c |
| 258 | -@mv objs/uncompr.o $@ |
| 259 | |
| 260 | gzclose.lo: $(SRCDIR)gzclose.c |
| 261 | -@mkdir objs 2>/dev/null || test -d objs |
| 262 | $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzclose.o $(SRCDIR)gzclose.c |
| 263 | -@mv objs/gzclose.o $@ |
| 264 | |
| 265 | gzlib.lo: $(SRCDIR)gzlib.c |
| 266 | -@mkdir objs 2>/dev/null || test -d objs |
| 267 | $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzlib.o $(SRCDIR)gzlib.c |
| 268 | -@mv objs/gzlib.o $@ |
| 269 | |
| 270 | gzread.lo: $(SRCDIR)gzread.c |
| 271 | -@mkdir objs 2>/dev/null || test -d objs |
| 272 | $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzread.o $(SRCDIR)gzread.c |
| 273 | -@mv objs/gzread.o $@ |
| 274 | |
| 275 | gzwrite.lo: $(SRCDIR)gzwrite.c |
| 276 | -@mkdir objs 2>/dev/null || test -d objs |
| 277 | $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzwrite.o $(SRCDIR)gzwrite.c |
| 278 | -@mv objs/gzwrite.o $@ |
| 279 | |
| 280 | |
| 281 | placebo $(SHAREDLIBV): $(PIC_OBJS) libz.a |
| 282 | $(LDSHARED) $(SFLAGS) -o $@ $(PIC_OBJS) $(LDSHAREDLIBC) $(LDFLAGS) |
| @@ -374,19 +374,17 @@ | |
| 374 | rm -rf objs |
| 375 | rm -f *.gcda *.gcno *.gcov |
| 376 | rm -f contrib/infback9/*.gcda contrib/infback9/*.gcno contrib/infback9/*.gcov |
| 377 | |
| 378 | maintainer-clean: distclean |
| 379 | distclean: clean zconf zconf.h.cmakein docs |
| 380 | rm -f Makefile zlib.pc configure.log |
| 381 | -@rm -f .DS_Store |
| 382 | @if [ -f Makefile.in ]; then \ |
| 383 | printf 'all:\n\t-@echo "Please use ./configure first. Thank you."\n' > Makefile ; \ |
| 384 | printf '\ndistclean:\n\tmake -f Makefile.in distclean\n' >> Makefile ; \ |
| 385 | touch -r $(SRCDIR)Makefile.in Makefile ; fi |
| 386 | @if [ ! -f zconf.h.in ]; then rm -f zconf.h zconf.h.cmakein ; fi |
| 387 | @if [ ! -f zlib.3 ]; then rm -f zlib.3.pdf ; fi |
| 388 | |
| 389 | tags: |
| 390 | etags $(SRCDIR)*.[ch] |
| 391 | |
| 392 | adler32.o zutil.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h |
| 393 |
| --- compat/zlib/Makefile.in | |
| +++ compat/zlib/Makefile.in | |
| @@ -30,11 +30,11 @@ | |
| 30 | LDSHARED=$(CC) |
| 31 | CPP=$(CC) -E |
| 32 | |
| 33 | STATICLIB=libz.a |
| 34 | SHAREDLIB=libz.so |
| 35 | SHAREDLIBV=libz.so.1.2.12 |
| 36 | SHAREDLIBM=libz.so.1 |
| 37 | LIBS=$(STATICLIB) $(SHAREDLIBV) |
| 38 | |
| 39 | AR=ar |
| 40 | ARFLAGS=rc |
| @@ -89,12 +89,12 @@ | |
| 89 | @TMPST=tmpst_$$; \ |
| 90 | if echo hello world | ./minigzip | ./minigzip -d && ./example $$TMPST ; then \ |
| 91 | echo ' *** zlib test OK ***'; \ |
| 92 | else \ |
| 93 | echo ' *** zlib test FAILED ***'; false; \ |
| 94 | fi |
| 95 | @rm -f tmpst_$$ |
| 96 | |
| 97 | testshared: shared |
| 98 | @LD_LIBRARY_PATH=`pwd`:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \ |
| 99 | LD_LIBRARYN32_PATH=`pwd`:$(LD_LIBRARYN32_PATH) ; export LD_LIBRARYN32_PATH; \ |
| 100 | DYLD_LIBRARY_PATH=`pwd`:$(DYLD_LIBRARY_PATH) ; export DYLD_LIBRARY_PATH; \ |
| @@ -102,21 +102,21 @@ | |
| 102 | TMPSH=tmpsh_$$; \ |
| 103 | if echo hello world | ./minigzipsh | ./minigzipsh -d && ./examplesh $$TMPSH; then \ |
| 104 | echo ' *** zlib shared test OK ***'; \ |
| 105 | else \ |
| 106 | echo ' *** zlib shared test FAILED ***'; false; \ |
| 107 | fi |
| 108 | @rm -f tmpsh_$$ |
| 109 | |
| 110 | test64: all64 |
| 111 | @TMP64=tmp64_$$; \ |
| 112 | if echo hello world | ./minigzip64 | ./minigzip64 -d && ./example64 $$TMP64; then \ |
| 113 | echo ' *** zlib 64-bit test OK ***'; \ |
| 114 | else \ |
| 115 | echo ' *** zlib 64-bit test FAILED ***'; false; \ |
| 116 | fi |
| 117 | @rm -f tmp64_$$ |
| 118 | |
| 119 | infcover.o: $(SRCDIR)test/infcover.c $(SRCDIR)zlib.h zconf.h |
| 120 | $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/infcover.c |
| 121 | |
| 122 | infcover: infcover.o libz.a |
| @@ -202,81 +202,81 @@ | |
| 202 | $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzwrite.c |
| 203 | |
| 204 | |
| 205 | adler32.lo: $(SRCDIR)adler32.c |
| 206 | -@mkdir objs 2>/dev/null || test -d objs |
| 207 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/adler32.o $(SRCDIR)adler32.c |
| 208 | -@mv objs/adler32.o $@ |
| 209 | |
| 210 | crc32.lo: $(SRCDIR)crc32.c |
| 211 | -@mkdir objs 2>/dev/null || test -d objs |
| 212 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/crc32.o $(SRCDIR)crc32.c |
| 213 | -@mv objs/crc32.o $@ |
| 214 | |
| 215 | deflate.lo: $(SRCDIR)deflate.c |
| 216 | -@mkdir objs 2>/dev/null || test -d objs |
| 217 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/deflate.o $(SRCDIR)deflate.c |
| 218 | -@mv objs/deflate.o $@ |
| 219 | |
| 220 | infback.lo: $(SRCDIR)infback.c |
| 221 | -@mkdir objs 2>/dev/null || test -d objs |
| 222 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/infback.o $(SRCDIR)infback.c |
| 223 | -@mv objs/infback.o $@ |
| 224 | |
| 225 | inffast.lo: $(SRCDIR)inffast.c |
| 226 | -@mkdir objs 2>/dev/null || test -d objs |
| 227 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inffast.o $(SRCDIR)inffast.c |
| 228 | -@mv objs/inffast.o $@ |
| 229 | |
| 230 | inflate.lo: $(SRCDIR)inflate.c |
| 231 | -@mkdir objs 2>/dev/null || test -d objs |
| 232 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inflate.o $(SRCDIR)inflate.c |
| 233 | -@mv objs/inflate.o $@ |
| 234 | |
| 235 | inftrees.lo: $(SRCDIR)inftrees.c |
| 236 | -@mkdir objs 2>/dev/null || test -d objs |
| 237 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/inftrees.o $(SRCDIR)inftrees.c |
| 238 | -@mv objs/inftrees.o $@ |
| 239 | |
| 240 | trees.lo: $(SRCDIR)trees.c |
| 241 | -@mkdir objs 2>/dev/null || test -d objs |
| 242 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/trees.o $(SRCDIR)trees.c |
| 243 | -@mv objs/trees.o $@ |
| 244 | |
| 245 | zutil.lo: $(SRCDIR)zutil.c |
| 246 | -@mkdir objs 2>/dev/null || test -d objs |
| 247 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/zutil.o $(SRCDIR)zutil.c |
| 248 | -@mv objs/zutil.o $@ |
| 249 | |
| 250 | compress.lo: $(SRCDIR)compress.c |
| 251 | -@mkdir objs 2>/dev/null || test -d objs |
| 252 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/compress.o $(SRCDIR)compress.c |
| 253 | -@mv objs/compress.o $@ |
| 254 | |
| 255 | uncompr.lo: $(SRCDIR)uncompr.c |
| 256 | -@mkdir objs 2>/dev/null || test -d objs |
| 257 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/uncompr.o $(SRCDIR)uncompr.c |
| 258 | -@mv objs/uncompr.o $@ |
| 259 | |
| 260 | gzclose.lo: $(SRCDIR)gzclose.c |
| 261 | -@mkdir objs 2>/dev/null || test -d objs |
| 262 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzclose.o $(SRCDIR)gzclose.c |
| 263 | -@mv objs/gzclose.o $@ |
| 264 | |
| 265 | gzlib.lo: $(SRCDIR)gzlib.c |
| 266 | -@mkdir objs 2>/dev/null || test -d objs |
| 267 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzlib.o $(SRCDIR)gzlib.c |
| 268 | -@mv objs/gzlib.o $@ |
| 269 | |
| 270 | gzread.lo: $(SRCDIR)gzread.c |
| 271 | -@mkdir objs 2>/dev/null || test -d objs |
| 272 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzread.o $(SRCDIR)gzread.c |
| 273 | -@mv objs/gzread.o $@ |
| 274 | |
| 275 | gzwrite.lo: $(SRCDIR)gzwrite.c |
| 276 | -@mkdir objs 2>/dev/null || test -d objs |
| 277 | $(CC) $(SFLAGS) $(ZINC) -fPIC -c -o objs/gzwrite.o $(SRCDIR)gzwrite.c |
| 278 | -@mv objs/gzwrite.o $@ |
| 279 | |
| 280 | |
| 281 | placebo $(SHAREDLIBV): $(PIC_OBJS) libz.a |
| 282 | $(LDSHARED) $(SFLAGS) -o $@ $(PIC_OBJS) $(LDSHAREDLIBC) $(LDFLAGS) |
| @@ -374,19 +374,17 @@ | |
| 374 | rm -rf objs |
| 375 | rm -f *.gcda *.gcno *.gcov |
| 376 | rm -f contrib/infback9/*.gcda contrib/infback9/*.gcno contrib/infback9/*.gcov |
| 377 | |
| 378 | maintainer-clean: distclean |
| 379 | distclean: clean zconf zconf.h.cmakein |
| 380 | rm -f Makefile zlib.pc configure.log |
| 381 | -@rm -f .DS_Store |
| 382 | @if [ -f Makefile.in ]; then \ |
| 383 | printf 'all:\n\t-@echo "Please use ./configure first. Thank you."\n' > Makefile ; \ |
| 384 | printf '\ndistclean:\n\tmake -f Makefile.in distclean\n' >> Makefile ; \ |
| 385 | touch -r $(SRCDIR)Makefile.in Makefile ; fi |
| 386 | |
| 387 | tags: |
| 388 | etags $(SRCDIR)*.[ch] |
| 389 | |
| 390 | adler32.o zutil.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h |
| 391 |
+7
-4
| --- compat/zlib/README | ||
| +++ compat/zlib/README | ||
| @@ -1,8 +1,8 @@ | ||
| 1 | 1 | ZLIB DATA COMPRESSION LIBRARY |
| 2 | 2 | |
| 3 | -zlib 1.2.11 is a general purpose data compression library. All the code is | |
| 3 | +zlib 1.2.12 is a general purpose data compression library. All the code is | |
| 4 | 4 | thread safe. The data format used by the zlib library is described by RFCs |
| 5 | 5 | (Request for Comments) 1950 to 1952 in the files |
| 6 | 6 | http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and |
| 7 | 7 | rfc1952 (gzip format). |
| 8 | 8 | |
| @@ -29,11 +29,11 @@ | ||
| 29 | 29 | |
| 30 | 30 | Mark Nelson <[email protected]> wrote an article about zlib for the Jan. 1997 |
| 31 | 31 | issue of Dr. Dobb's Journal; a copy of the article is available at |
| 32 | 32 | http://marknelson.us/1997/01/01/zlib-engine/ . |
| 33 | 33 | |
| 34 | -The changes made in version 1.2.11 are documented in the file ChangeLog. | |
| 34 | +The changes made in version 1.2.12 are documented in the file ChangeLog. | |
| 35 | 35 | |
| 36 | 36 | Unsupported third party contributions are provided in directory contrib/ . |
| 37 | 37 | |
| 38 | 38 | zlib is available in Java using the java.util.zip package, documented at |
| 39 | 39 | http://java.sun.com/developer/technicalArticles/Programming/compression/ . |
| @@ -82,11 +82,11 @@ | ||
| 82 | 82 | people who reported problems and suggested various improvements in zlib; they |
| 83 | 83 | are too numerous to cite here. |
| 84 | 84 | |
| 85 | 85 | Copyright notice: |
| 86 | 86 | |
| 87 | - (C) 1995-2017 Jean-loup Gailly and Mark Adler | |
| 87 | + (C) 1995-2022 Jean-loup Gailly and Mark Adler | |
| 88 | 88 | |
| 89 | 89 | This software is provided 'as-is', without any express or implied |
| 90 | 90 | warranty. In no event will the authors be held liable for any damages |
| 91 | 91 | arising from the use of this software. |
| 92 | 92 | |
| @@ -106,10 +106,13 @@ | ||
| 106 | 106 | [email protected] [email protected] |
| 107 | 107 | |
| 108 | 108 | If you use the zlib library in a product, we would appreciate *not* receiving |
| 109 | 109 | lengthy legal documents to sign. The sources are provided for free but without |
| 110 | 110 | warranty of any kind. The library has been entirely written by Jean-loup |
| 111 | -Gailly and Mark Adler; it does not include third-party code. | |
| 111 | +Gailly and Mark Adler; it does not include third-party code. We make all | |
| 112 | +contributions to and distributions of this project solely in our personal | |
| 113 | +capacity, and are not conveying any rights to any intellectual property of | |
| 114 | +any third parties. | |
| 112 | 115 | |
| 113 | 116 | If you redistribute modified sources, we would appreciate that you include in |
| 114 | 117 | the file ChangeLog history information documenting your changes. Please read |
| 115 | 118 | the FAQ for more information on the distribution of modified source versions. |
| 116 | 119 |
| --- compat/zlib/README | |
| +++ compat/zlib/README | |
| @@ -1,8 +1,8 @@ | |
| 1 | ZLIB DATA COMPRESSION LIBRARY |
| 2 | |
| 3 | zlib 1.2.11 is a general purpose data compression library. All the code is |
| 4 | thread safe. The data format used by the zlib library is described by RFCs |
| 5 | (Request for Comments) 1950 to 1952 in the files |
| 6 | http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and |
| 7 | rfc1952 (gzip format). |
| 8 | |
| @@ -29,11 +29,11 @@ | |
| 29 | |
| 30 | Mark Nelson <[email protected]> wrote an article about zlib for the Jan. 1997 |
| 31 | issue of Dr. Dobb's Journal; a copy of the article is available at |
| 32 | http://marknelson.us/1997/01/01/zlib-engine/ . |
| 33 | |
| 34 | The changes made in version 1.2.11 are documented in the file ChangeLog. |
| 35 | |
| 36 | Unsupported third party contributions are provided in directory contrib/ . |
| 37 | |
| 38 | zlib is available in Java using the java.util.zip package, documented at |
| 39 | http://java.sun.com/developer/technicalArticles/Programming/compression/ . |
| @@ -82,11 +82,11 @@ | |
| 82 | people who reported problems and suggested various improvements in zlib; they |
| 83 | are too numerous to cite here. |
| 84 | |
| 85 | Copyright notice: |
| 86 | |
| 87 | (C) 1995-2017 Jean-loup Gailly and Mark Adler |
| 88 | |
| 89 | This software is provided 'as-is', without any express or implied |
| 90 | warranty. In no event will the authors be held liable for any damages |
| 91 | arising from the use of this software. |
| 92 | |
| @@ -106,10 +106,13 @@ | |
| 106 | [email protected] [email protected] |
| 107 | |
| 108 | If you use the zlib library in a product, we would appreciate *not* receiving |
| 109 | lengthy legal documents to sign. The sources are provided for free but without |
| 110 | warranty of any kind. The library has been entirely written by Jean-loup |
| 111 | Gailly and Mark Adler; it does not include third-party code. |
| 112 | |
| 113 | If you redistribute modified sources, we would appreciate that you include in |
| 114 | the file ChangeLog history information documenting your changes. Please read |
| 115 | the FAQ for more information on the distribution of modified source versions. |
| 116 |
| --- compat/zlib/README | |
| +++ compat/zlib/README | |
| @@ -1,8 +1,8 @@ | |
| 1 | ZLIB DATA COMPRESSION LIBRARY |
| 2 | |
| 3 | zlib 1.2.12 is a general purpose data compression library. All the code is |
| 4 | thread safe. The data format used by the zlib library is described by RFCs |
| 5 | (Request for Comments) 1950 to 1952 in the files |
| 6 | http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and |
| 7 | rfc1952 (gzip format). |
| 8 | |
| @@ -29,11 +29,11 @@ | |
| 29 | |
| 30 | Mark Nelson <[email protected]> wrote an article about zlib for the Jan. 1997 |
| 31 | issue of Dr. Dobb's Journal; a copy of the article is available at |
| 32 | http://marknelson.us/1997/01/01/zlib-engine/ . |
| 33 | |
| 34 | The changes made in version 1.2.12 are documented in the file ChangeLog. |
| 35 | |
| 36 | Unsupported third party contributions are provided in directory contrib/ . |
| 37 | |
| 38 | zlib is available in Java using the java.util.zip package, documented at |
| 39 | http://java.sun.com/developer/technicalArticles/Programming/compression/ . |
| @@ -82,11 +82,11 @@ | |
| 82 | people who reported problems and suggested various improvements in zlib; they |
| 83 | are too numerous to cite here. |
| 84 | |
| 85 | Copyright notice: |
| 86 | |
| 87 | (C) 1995-2022 Jean-loup Gailly and Mark Adler |
| 88 | |
| 89 | This software is provided 'as-is', without any express or implied |
| 90 | warranty. In no event will the authors be held liable for any damages |
| 91 | arising from the use of this software. |
| 92 | |
| @@ -106,10 +106,13 @@ | |
| 106 | [email protected] [email protected] |
| 107 | |
| 108 | If you use the zlib library in a product, we would appreciate *not* receiving |
| 109 | lengthy legal documents to sign. The sources are provided for free but without |
| 110 | warranty of any kind. The library has been entirely written by Jean-loup |
| 111 | Gailly and Mark Adler; it does not include third-party code. We make all |
| 112 | contributions to and distributions of this project solely in our personal |
| 113 | capacity, and are not conveying any rights to any intellectual property of |
| 114 | any third parties. |
| 115 | |
| 116 | If you redistribute modified sources, we would appreciate that you include in |
| 117 | the file ChangeLog history information documenting your changes. Please read |
| 118 | the FAQ for more information on the distribution of modified source versions. |
| 119 |
+28
-22
| --- compat/zlib/configure | ||
| +++ compat/zlib/configure | ||
| @@ -85,10 +85,11 @@ | ||
| 85 | 85 | zconst=0 |
| 86 | 86 | build64=0 |
| 87 | 87 | gcc=0 |
| 88 | 88 | warn=0 |
| 89 | 89 | debug=0 |
| 90 | +sanitize=0 | |
| 90 | 91 | old_cc="$CC" |
| 91 | 92 | old_cflags="$CFLAGS" |
| 92 | 93 | OBJC='$(OBJZ) $(OBJG)' |
| 93 | 94 | PIC_OBJC='$(PIC_OBJZ) $(PIC_OBJG)' |
| 94 | 95 | |
| @@ -135,10 +136,11 @@ | ||
| 135 | 136 | --sysconfdir=*) echo "ignored option: --sysconfdir" | tee -a configure.log; shift ;; |
| 136 | 137 | --localstatedir=*) echo "ignored option: --localstatedir" | tee -a configure.log; shift ;; |
| 137 | 138 | -c* | --const) zconst=1; shift ;; |
| 138 | 139 | -w* | --warn) warn=1; shift ;; |
| 139 | 140 | -d* | --debug) debug=1; shift ;; |
| 141 | + --sanitize) sanitize=1; shift ;; | |
| 140 | 142 | *) |
| 141 | 143 | echo "unknown option: $1" | tee -a configure.log |
| 142 | 144 | echo "$0 --help for help" | tee -a configure.log |
| 143 | 145 | leave 1;; |
| 144 | 146 | esac |
| @@ -163,12 +165,18 @@ | ||
| 163 | 165 | cat > $test.c <<EOF |
| 164 | 166 | extern int getchar(); |
| 165 | 167 | int hello() {return getchar();} |
| 166 | 168 | EOF |
| 167 | 169 | |
| 168 | -test -z "$CC" && echo Checking for ${CROSS_PREFIX}gcc... | tee -a configure.log | |
| 169 | -cc=${CC-${CROSS_PREFIX}gcc} | |
| 170 | +if test -z "$CC"; then | |
| 171 | + echo Checking for ${CROSS_PREFIX}gcc... | tee -a configure.log | |
| 172 | + if ${CROSS_PREFIX}gcc -v >/dev/null 2>&1; then | |
| 173 | + cc=${CROSS_PREFIX}gcc | |
| 174 | + else | |
| 175 | + cc=${CROSS_PREFIX}cc | |
| 176 | + fi | |
| 177 | +fi | |
| 170 | 178 | cflags=${CFLAGS-"-O3"} |
| 171 | 179 | # to force the asm version use: CFLAGS="-O3 -DASMV" ./configure |
| 172 | 180 | case "$cc" in |
| 173 | 181 | *gcc*) gcc=1 ;; |
| 174 | 182 | *clang*) gcc=1 ;; |
| @@ -197,10 +205,13 @@ | ||
| 197 | 205 | CFLAGS="${CFLAGS} -Wall -Wextra -Wcast-qual -pedantic -DZLIB_CONST" |
| 198 | 206 | else |
| 199 | 207 | CFLAGS="${CFLAGS} -Wall -Wextra -pedantic" |
| 200 | 208 | fi |
| 201 | 209 | fi |
| 210 | + if test $sanitize -eq 1; then | |
| 211 | + CFLAGS="${CFLAGS} -fsanitize=address" | |
| 212 | + fi | |
| 202 | 213 | if test $debug -eq 1; then |
| 203 | 214 | CFLAGS="${CFLAGS} -DZLIB_DEBUG" |
| 204 | 215 | SFLAGS="${SFLAGS} -DZLIB_DEBUG" |
| 205 | 216 | fi |
| 206 | 217 | if test -z "$uname"; then |
| @@ -365,12 +376,15 @@ | ||
| 365 | 376 | echo - using any output from compiler to indicate an error >> configure.log |
| 366 | 377 | else |
| 367 | 378 | try() |
| 368 | 379 | { |
| 369 | 380 | show $* |
| 370 | - ( $* ) >> configure.log 2>&1 | |
| 381 | + got=`( $* ) 2>&1` | |
| 371 | 382 | ret=$? |
| 383 | + if test "$got" != ""; then | |
| 384 | + printf "%s\n" "$got" >> configure.log | |
| 385 | + fi | |
| 372 | 386 | if test $ret -ne 0; then |
| 373 | 387 | echo "(exit code "$ret")" >> configure.log |
| 374 | 388 | fi |
| 375 | 389 | return $ret |
| 376 | 390 | } |
| @@ -379,12 +393,15 @@ | ||
| 379 | 393 | tryboth() |
| 380 | 394 | { |
| 381 | 395 | show $* |
| 382 | 396 | got=`( $* ) 2>&1` |
| 383 | 397 | ret=$? |
| 384 | - printf %s "$got" >> configure.log | |
| 398 | + if test "$got" != ""; then | |
| 399 | + printf "%s\n" "$got" >> configure.log | |
| 400 | + fi | |
| 385 | 401 | if test $ret -ne 0; then |
| 402 | + echo "(exit code "$ret")" >> configure.log | |
| 386 | 403 | return $ret |
| 387 | 404 | fi |
| 388 | 405 | test "$got" = "" |
| 389 | 406 | } |
| 390 | 407 | |
| @@ -455,21 +472,15 @@ | ||
| 455 | 472 | #include <stdlib.h> |
| 456 | 473 | size_t dummy = 0; |
| 457 | 474 | EOF |
| 458 | 475 | if try $CC -c $CFLAGS $test.c; then |
| 459 | 476 | echo "Checking for size_t... Yes." | tee -a configure.log |
| 460 | - need_sizet=0 | |
| 461 | 477 | else |
| 462 | 478 | echo "Checking for size_t... No." | tee -a configure.log |
| 463 | - need_sizet=1 | |
| 464 | -fi | |
| 465 | - | |
| 466 | -echo >> configure.log | |
| 467 | - | |
| 468 | -# find the size_t integer type, if needed | |
| 469 | -if test $need_sizet -eq 1; then | |
| 470 | - cat > $test.c <<EOF | |
| 479 | + # find a size_t integer type | |
| 480 | + # check for long long | |
| 481 | + cat > $test.c << EOF | |
| 471 | 482 | long long dummy = 0; |
| 472 | 483 | EOF |
| 473 | 484 | if try $CC -c $CFLAGS $test.c; then |
| 474 | 485 | echo "Checking for long long... Yes." | tee -a configure.log |
| 475 | 486 | cat > $test.c <<EOF |
| @@ -493,19 +504,15 @@ | ||
| 493 | 504 | EOF |
| 494 | 505 | fi |
| 495 | 506 | if try $CC $CFLAGS -o $test $test.c; then |
| 496 | 507 | sizet=`./$test` |
| 497 | 508 | echo "Checking for a pointer-size integer type..." $sizet"." | tee -a configure.log |
| 509 | + CFLAGS="${CFLAGS} -DNO_SIZE_T=${sizet}" | |
| 510 | + SFLAGS="${SFLAGS} -DNO_SIZE_T=${sizet}" | |
| 498 | 511 | else |
| 499 | - echo "Failed to find a pointer-size integer type." | tee -a configure.log | |
| 500 | - leave 1 | |
| 501 | - fi | |
| 502 | -fi | |
| 503 | - | |
| 504 | -if test $need_sizet -eq 1; then | |
| 505 | - CFLAGS="${CFLAGS} -DNO_SIZE_T=${sizet}" | |
| 506 | - SFLAGS="${SFLAGS} -DNO_SIZE_T=${sizet}" | |
| 512 | + echo "Checking for a pointer-size integer type... not found." | tee -a configure.log | |
| 513 | + fi | |
| 507 | 514 | fi |
| 508 | 515 | |
| 509 | 516 | echo >> configure.log |
| 510 | 517 | |
| 511 | 518 | # check for large file support, and if none, check for fseeko() |
| @@ -847,11 +854,10 @@ | ||
| 847 | 854 | echo SHAREDLIBM = $SHAREDLIBM >> configure.log |
| 848 | 855 | echo SHAREDLIBV = $SHAREDLIBV >> configure.log |
| 849 | 856 | echo STATICLIB = $STATICLIB >> configure.log |
| 850 | 857 | echo TEST = $TEST >> configure.log |
| 851 | 858 | echo VER = $VER >> configure.log |
| 852 | -echo Z_U4 = $Z_U4 >> configure.log | |
| 853 | 859 | echo SRCDIR = $SRCDIR >> configure.log |
| 854 | 860 | echo exec_prefix = $exec_prefix >> configure.log |
| 855 | 861 | echo includedir = $includedir >> configure.log |
| 856 | 862 | echo libdir = $libdir >> configure.log |
| 857 | 863 | echo mandir = $mandir >> configure.log |
| 858 | 864 |
| --- compat/zlib/configure | |
| +++ compat/zlib/configure | |
| @@ -85,10 +85,11 @@ | |
| 85 | zconst=0 |
| 86 | build64=0 |
| 87 | gcc=0 |
| 88 | warn=0 |
| 89 | debug=0 |
| 90 | old_cc="$CC" |
| 91 | old_cflags="$CFLAGS" |
| 92 | OBJC='$(OBJZ) $(OBJG)' |
| 93 | PIC_OBJC='$(PIC_OBJZ) $(PIC_OBJG)' |
| 94 | |
| @@ -135,10 +136,11 @@ | |
| 135 | --sysconfdir=*) echo "ignored option: --sysconfdir" | tee -a configure.log; shift ;; |
| 136 | --localstatedir=*) echo "ignored option: --localstatedir" | tee -a configure.log; shift ;; |
| 137 | -c* | --const) zconst=1; shift ;; |
| 138 | -w* | --warn) warn=1; shift ;; |
| 139 | -d* | --debug) debug=1; shift ;; |
| 140 | *) |
| 141 | echo "unknown option: $1" | tee -a configure.log |
| 142 | echo "$0 --help for help" | tee -a configure.log |
| 143 | leave 1;; |
| 144 | esac |
| @@ -163,12 +165,18 @@ | |
| 163 | cat > $test.c <<EOF |
| 164 | extern int getchar(); |
| 165 | int hello() {return getchar();} |
| 166 | EOF |
| 167 | |
| 168 | test -z "$CC" && echo Checking for ${CROSS_PREFIX}gcc... | tee -a configure.log |
| 169 | cc=${CC-${CROSS_PREFIX}gcc} |
| 170 | cflags=${CFLAGS-"-O3"} |
| 171 | # to force the asm version use: CFLAGS="-O3 -DASMV" ./configure |
| 172 | case "$cc" in |
| 173 | *gcc*) gcc=1 ;; |
| 174 | *clang*) gcc=1 ;; |
| @@ -197,10 +205,13 @@ | |
| 197 | CFLAGS="${CFLAGS} -Wall -Wextra -Wcast-qual -pedantic -DZLIB_CONST" |
| 198 | else |
| 199 | CFLAGS="${CFLAGS} -Wall -Wextra -pedantic" |
| 200 | fi |
| 201 | fi |
| 202 | if test $debug -eq 1; then |
| 203 | CFLAGS="${CFLAGS} -DZLIB_DEBUG" |
| 204 | SFLAGS="${SFLAGS} -DZLIB_DEBUG" |
| 205 | fi |
| 206 | if test -z "$uname"; then |
| @@ -365,12 +376,15 @@ | |
| 365 | echo - using any output from compiler to indicate an error >> configure.log |
| 366 | else |
| 367 | try() |
| 368 | { |
| 369 | show $* |
| 370 | ( $* ) >> configure.log 2>&1 |
| 371 | ret=$? |
| 372 | if test $ret -ne 0; then |
| 373 | echo "(exit code "$ret")" >> configure.log |
| 374 | fi |
| 375 | return $ret |
| 376 | } |
| @@ -379,12 +393,15 @@ | |
| 379 | tryboth() |
| 380 | { |
| 381 | show $* |
| 382 | got=`( $* ) 2>&1` |
| 383 | ret=$? |
| 384 | printf %s "$got" >> configure.log |
| 385 | if test $ret -ne 0; then |
| 386 | return $ret |
| 387 | fi |
| 388 | test "$got" = "" |
| 389 | } |
| 390 | |
| @@ -455,21 +472,15 @@ | |
| 455 | #include <stdlib.h> |
| 456 | size_t dummy = 0; |
| 457 | EOF |
| 458 | if try $CC -c $CFLAGS $test.c; then |
| 459 | echo "Checking for size_t... Yes." | tee -a configure.log |
| 460 | need_sizet=0 |
| 461 | else |
| 462 | echo "Checking for size_t... No." | tee -a configure.log |
| 463 | need_sizet=1 |
| 464 | fi |
| 465 | |
| 466 | echo >> configure.log |
| 467 | |
| 468 | # find the size_t integer type, if needed |
| 469 | if test $need_sizet -eq 1; then |
| 470 | cat > $test.c <<EOF |
| 471 | long long dummy = 0; |
| 472 | EOF |
| 473 | if try $CC -c $CFLAGS $test.c; then |
| 474 | echo "Checking for long long... Yes." | tee -a configure.log |
| 475 | cat > $test.c <<EOF |
| @@ -493,19 +504,15 @@ | |
| 493 | EOF |
| 494 | fi |
| 495 | if try $CC $CFLAGS -o $test $test.c; then |
| 496 | sizet=`./$test` |
| 497 | echo "Checking for a pointer-size integer type..." $sizet"." | tee -a configure.log |
| 498 | else |
| 499 | echo "Failed to find a pointer-size integer type." | tee -a configure.log |
| 500 | leave 1 |
| 501 | fi |
| 502 | fi |
| 503 | |
| 504 | if test $need_sizet -eq 1; then |
| 505 | CFLAGS="${CFLAGS} -DNO_SIZE_T=${sizet}" |
| 506 | SFLAGS="${SFLAGS} -DNO_SIZE_T=${sizet}" |
| 507 | fi |
| 508 | |
| 509 | echo >> configure.log |
| 510 | |
| 511 | # check for large file support, and if none, check for fseeko() |
| @@ -847,11 +854,10 @@ | |
| 847 | echo SHAREDLIBM = $SHAREDLIBM >> configure.log |
| 848 | echo SHAREDLIBV = $SHAREDLIBV >> configure.log |
| 849 | echo STATICLIB = $STATICLIB >> configure.log |
| 850 | echo TEST = $TEST >> configure.log |
| 851 | echo VER = $VER >> configure.log |
| 852 | echo Z_U4 = $Z_U4 >> configure.log |
| 853 | echo SRCDIR = $SRCDIR >> configure.log |
| 854 | echo exec_prefix = $exec_prefix >> configure.log |
| 855 | echo includedir = $includedir >> configure.log |
| 856 | echo libdir = $libdir >> configure.log |
| 857 | echo mandir = $mandir >> configure.log |
| 858 |
| --- compat/zlib/configure | |
| +++ compat/zlib/configure | |
| @@ -85,10 +85,11 @@ | |
| 85 | zconst=0 |
| 86 | build64=0 |
| 87 | gcc=0 |
| 88 | warn=0 |
| 89 | debug=0 |
| 90 | sanitize=0 |
| 91 | old_cc="$CC" |
| 92 | old_cflags="$CFLAGS" |
| 93 | OBJC='$(OBJZ) $(OBJG)' |
| 94 | PIC_OBJC='$(PIC_OBJZ) $(PIC_OBJG)' |
| 95 | |
| @@ -135,10 +136,11 @@ | |
| 136 | --sysconfdir=*) echo "ignored option: --sysconfdir" | tee -a configure.log; shift ;; |
| 137 | --localstatedir=*) echo "ignored option: --localstatedir" | tee -a configure.log; shift ;; |
| 138 | -c* | --const) zconst=1; shift ;; |
| 139 | -w* | --warn) warn=1; shift ;; |
| 140 | -d* | --debug) debug=1; shift ;; |
| 141 | --sanitize) sanitize=1; shift ;; |
| 142 | *) |
| 143 | echo "unknown option: $1" | tee -a configure.log |
| 144 | echo "$0 --help for help" | tee -a configure.log |
| 145 | leave 1;; |
| 146 | esac |
| @@ -163,12 +165,18 @@ | |
| 165 | cat > $test.c <<EOF |
| 166 | extern int getchar(); |
| 167 | int hello() {return getchar();} |
| 168 | EOF |
| 169 | |
| 170 | if test -z "$CC"; then |
| 171 | echo Checking for ${CROSS_PREFIX}gcc... | tee -a configure.log |
| 172 | if ${CROSS_PREFIX}gcc -v >/dev/null 2>&1; then |
| 173 | cc=${CROSS_PREFIX}gcc |
| 174 | else |
| 175 | cc=${CROSS_PREFIX}cc |
| 176 | fi |
| 177 | fi |
| 178 | cflags=${CFLAGS-"-O3"} |
| 179 | # to force the asm version use: CFLAGS="-O3 -DASMV" ./configure |
| 180 | case "$cc" in |
| 181 | *gcc*) gcc=1 ;; |
| 182 | *clang*) gcc=1 ;; |
| @@ -197,10 +205,13 @@ | |
| 205 | CFLAGS="${CFLAGS} -Wall -Wextra -Wcast-qual -pedantic -DZLIB_CONST" |
| 206 | else |
| 207 | CFLAGS="${CFLAGS} -Wall -Wextra -pedantic" |
| 208 | fi |
| 209 | fi |
| 210 | if test $sanitize -eq 1; then |
| 211 | CFLAGS="${CFLAGS} -fsanitize=address" |
| 212 | fi |
| 213 | if test $debug -eq 1; then |
| 214 | CFLAGS="${CFLAGS} -DZLIB_DEBUG" |
| 215 | SFLAGS="${SFLAGS} -DZLIB_DEBUG" |
| 216 | fi |
| 217 | if test -z "$uname"; then |
| @@ -365,12 +376,15 @@ | |
| 376 | echo - using any output from compiler to indicate an error >> configure.log |
| 377 | else |
| 378 | try() |
| 379 | { |
| 380 | show $* |
| 381 | got=`( $* ) 2>&1` |
| 382 | ret=$? |
| 383 | if test "$got" != ""; then |
| 384 | printf "%s\n" "$got" >> configure.log |
| 385 | fi |
| 386 | if test $ret -ne 0; then |
| 387 | echo "(exit code "$ret")" >> configure.log |
| 388 | fi |
| 389 | return $ret |
| 390 | } |
| @@ -379,12 +393,15 @@ | |
| 393 | tryboth() |
| 394 | { |
| 395 | show $* |
| 396 | got=`( $* ) 2>&1` |
| 397 | ret=$? |
| 398 | if test "$got" != ""; then |
| 399 | printf "%s\n" "$got" >> configure.log |
| 400 | fi |
| 401 | if test $ret -ne 0; then |
| 402 | echo "(exit code "$ret")" >> configure.log |
| 403 | return $ret |
| 404 | fi |
| 405 | test "$got" = "" |
| 406 | } |
| 407 | |
| @@ -455,21 +472,15 @@ | |
| 472 | #include <stdlib.h> |
| 473 | size_t dummy = 0; |
| 474 | EOF |
| 475 | if try $CC -c $CFLAGS $test.c; then |
| 476 | echo "Checking for size_t... Yes." | tee -a configure.log |
| 477 | else |
| 478 | echo "Checking for size_t... No." | tee -a configure.log |
| 479 | # find a size_t integer type |
| 480 | # check for long long |
| 481 | cat > $test.c << EOF |
| 482 | long long dummy = 0; |
| 483 | EOF |
| 484 | if try $CC -c $CFLAGS $test.c; then |
| 485 | echo "Checking for long long... Yes." | tee -a configure.log |
| 486 | cat > $test.c <<EOF |
| @@ -493,19 +504,15 @@ | |
| 504 | EOF |
| 505 | fi |
| 506 | if try $CC $CFLAGS -o $test $test.c; then |
| 507 | sizet=`./$test` |
| 508 | echo "Checking for a pointer-size integer type..." $sizet"." | tee -a configure.log |
| 509 | CFLAGS="${CFLAGS} -DNO_SIZE_T=${sizet}" |
| 510 | SFLAGS="${SFLAGS} -DNO_SIZE_T=${sizet}" |
| 511 | else |
| 512 | echo "Checking for a pointer-size integer type... not found." | tee -a configure.log |
| 513 | fi |
| 514 | fi |
| 515 | |
| 516 | echo >> configure.log |
| 517 | |
| 518 | # check for large file support, and if none, check for fseeko() |
| @@ -847,11 +854,10 @@ | |
| 854 | echo SHAREDLIBM = $SHAREDLIBM >> configure.log |
| 855 | echo SHAREDLIBV = $SHAREDLIBV >> configure.log |
| 856 | echo STATICLIB = $STATICLIB >> configure.log |
| 857 | echo TEST = $TEST >> configure.log |
| 858 | echo VER = $VER >> configure.log |
| 859 | echo SRCDIR = $SRCDIR >> configure.log |
| 860 | echo exec_prefix = $exec_prefix >> configure.log |
| 861 | echo includedir = $includedir >> configure.log |
| 862 | echo libdir = $libdir >> configure.log |
| 863 | echo mandir = $mandir >> configure.log |
| 864 |
| --- compat/zlib/contrib/README.contrib | ||
| +++ compat/zlib/contrib/README.contrib | ||
| @@ -6,18 +6,10 @@ | ||
| 6 | 6 | |
| 7 | 7 | ada/ by Dmitriy Anisimkov <[email protected]> |
| 8 | 8 | Support for Ada |
| 9 | 9 | See http://zlib-ada.sourceforge.net/ |
| 10 | 10 | |
| 11 | -amd64/ by Mikhail Teterin <[email protected]> | |
| 12 | - asm code for AMD64 | |
| 13 | - See patch at http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/96393 | |
| 14 | - | |
| 15 | -asm686/ by Brian Raiter <[email protected]> | |
| 16 | - asm code for Pentium and PPro/PII, using the AT&T (GNU as) syntax | |
| 17 | - See http://www.muppetlabs.com/~breadbox/software/assembly.html | |
| 18 | - | |
| 19 | 11 | blast/ by Mark Adler <[email protected]> |
| 20 | 12 | Decompressor for output of PKWare Data Compression Library (DCL) |
| 21 | 13 | |
| 22 | 14 | delphi/ by Cosmin Truta <[email protected]> |
| 23 | 15 | Support for Delphi and C++ Builder |
| @@ -30,13 +22,10 @@ | ||
| 30 | 22 | assembler to replace longest_match() and inflate_fast() |
| 31 | 23 | |
| 32 | 24 | infback9/ by Mark Adler <[email protected]> |
| 33 | 25 | Unsupported diffs to infback to decode the deflate64 format |
| 34 | 26 | |
| 35 | -inflate86/ by Chris Anderson <[email protected]> | |
| 36 | - Tuned x86 gcc asm code to replace inflate_fast() | |
| 37 | - | |
| 38 | 27 | iostream/ by Kevin Ruland <[email protected]> |
| 39 | 28 | A C++ I/O streams interface to the zlib gz* functions |
| 40 | 29 | |
| 41 | 30 | iostream2/ by Tyge Løvset <[email protected]> |
| 42 | 31 | Another C++ I/O streams interface |
| @@ -43,20 +32,10 @@ | ||
| 43 | 32 | |
| 44 | 33 | iostream3/ by Ludwig Schwardt <[email protected]> |
| 45 | 34 | and Kevin Ruland <[email protected]> |
| 46 | 35 | Yet another C++ I/O streams interface |
| 47 | 36 | |
| 48 | -masmx64/ by Gilles Vollant <[email protected]> | |
| 49 | - x86 64-bit (AMD64 and Intel EM64t) code for x64 assembler to | |
| 50 | - replace longest_match() and inflate_fast(), also masm x86 | |
| 51 | - 64-bits translation of Chris Anderson inflate_fast() | |
| 52 | - | |
| 53 | -masmx86/ by Gilles Vollant <[email protected]> | |
| 54 | - x86 asm code to replace longest_match() and inflate_fast(), | |
| 55 | - for Visual C++ and MASM (32 bits). | |
| 56 | - Based on Brian Raiter (asm686) and Chris Anderson (inflate86) | |
| 57 | - | |
| 58 | 37 | minizip/ by Gilles Vollant <[email protected]> |
| 59 | 38 | Mini zip and unzip based on zlib |
| 60 | 39 | Includes Zip64 support by Mathias Svensson <[email protected]> |
| 61 | 40 | See http://www.winimage.com/zLibDll/minizip.html |
| 62 | 41 | |
| 63 | 42 |
| --- compat/zlib/contrib/README.contrib | |
| +++ compat/zlib/contrib/README.contrib | |
| @@ -6,18 +6,10 @@ | |
| 6 | |
| 7 | ada/ by Dmitriy Anisimkov <[email protected]> |
| 8 | Support for Ada |
| 9 | See http://zlib-ada.sourceforge.net/ |
| 10 | |
| 11 | amd64/ by Mikhail Teterin <[email protected]> |
| 12 | asm code for AMD64 |
| 13 | See patch at http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/96393 |
| 14 | |
| 15 | asm686/ by Brian Raiter <[email protected]> |
| 16 | asm code for Pentium and PPro/PII, using the AT&T (GNU as) syntax |
| 17 | See http://www.muppetlabs.com/~breadbox/software/assembly.html |
| 18 | |
| 19 | blast/ by Mark Adler <[email protected]> |
| 20 | Decompressor for output of PKWare Data Compression Library (DCL) |
| 21 | |
| 22 | delphi/ by Cosmin Truta <[email protected]> |
| 23 | Support for Delphi and C++ Builder |
| @@ -30,13 +22,10 @@ | |
| 30 | assembler to replace longest_match() and inflate_fast() |
| 31 | |
| 32 | infback9/ by Mark Adler <[email protected]> |
| 33 | Unsupported diffs to infback to decode the deflate64 format |
| 34 | |
| 35 | inflate86/ by Chris Anderson <[email protected]> |
| 36 | Tuned x86 gcc asm code to replace inflate_fast() |
| 37 | |
| 38 | iostream/ by Kevin Ruland <[email protected]> |
| 39 | A C++ I/O streams interface to the zlib gz* functions |
| 40 | |
| 41 | iostream2/ by Tyge Løvset <[email protected]> |
| 42 | Another C++ I/O streams interface |
| @@ -43,20 +32,10 @@ | |
| 43 | |
| 44 | iostream3/ by Ludwig Schwardt <[email protected]> |
| 45 | and Kevin Ruland <[email protected]> |
| 46 | Yet another C++ I/O streams interface |
| 47 | |
| 48 | masmx64/ by Gilles Vollant <[email protected]> |
| 49 | x86 64-bit (AMD64 and Intel EM64t) code for x64 assembler to |
| 50 | replace longest_match() and inflate_fast(), also masm x86 |
| 51 | 64-bits translation of Chris Anderson inflate_fast() |
| 52 | |
| 53 | masmx86/ by Gilles Vollant <[email protected]> |
| 54 | x86 asm code to replace longest_match() and inflate_fast(), |
| 55 | for Visual C++ and MASM (32 bits). |
| 56 | Based on Brian Raiter (asm686) and Chris Anderson (inflate86) |
| 57 | |
| 58 | minizip/ by Gilles Vollant <[email protected]> |
| 59 | Mini zip and unzip based on zlib |
| 60 | Includes Zip64 support by Mathias Svensson <[email protected]> |
| 61 | See http://www.winimage.com/zLibDll/minizip.html |
| 62 | |
| 63 |
| --- compat/zlib/contrib/README.contrib | |
| +++ compat/zlib/contrib/README.contrib | |
| @@ -6,18 +6,10 @@ | |
| 6 | |
| 7 | ada/ by Dmitriy Anisimkov <[email protected]> |
| 8 | Support for Ada |
| 9 | See http://zlib-ada.sourceforge.net/ |
| 10 | |
| 11 | blast/ by Mark Adler <[email protected]> |
| 12 | Decompressor for output of PKWare Data Compression Library (DCL) |
| 13 | |
| 14 | delphi/ by Cosmin Truta <[email protected]> |
| 15 | Support for Delphi and C++ Builder |
| @@ -30,13 +22,10 @@ | |
| 22 | assembler to replace longest_match() and inflate_fast() |
| 23 | |
| 24 | infback9/ by Mark Adler <[email protected]> |
| 25 | Unsupported diffs to infback to decode the deflate64 format |
| 26 | |
| 27 | iostream/ by Kevin Ruland <[email protected]> |
| 28 | A C++ I/O streams interface to the zlib gz* functions |
| 29 | |
| 30 | iostream2/ by Tyge Løvset <[email protected]> |
| 31 | Another C++ I/O streams interface |
| @@ -43,20 +32,10 @@ | |
| 32 | |
| 33 | iostream3/ by Ludwig Schwardt <[email protected]> |
| 34 | and Kevin Ruland <[email protected]> |
| 35 | Yet another C++ I/O streams interface |
| 36 | |
| 37 | minizip/ by Gilles Vollant <[email protected]> |
| 38 | Mini zip and unzip based on zlib |
| 39 | Includes Zip64 support by Mathias Svensson <[email protected]> |
| 40 | See http://www.winimage.com/zLibDll/minizip.html |
| 41 | |
| 42 |
| --- compat/zlib/contrib/blast/blast.h | ||
| +++ compat/zlib/contrib/blast/blast.h | ||
| @@ -55,11 +55,11 @@ | ||
| 55 | 55 | * available bytes there. If infun() returns zero, then blast() returns with |
| 56 | 56 | * an input error. (blast() only asks for input if it needs it.) inhow is for |
| 57 | 57 | * use by the application to pass an input descriptor to infun(), if desired. |
| 58 | 58 | * |
| 59 | 59 | * If left and in are not NULL and *left is not zero when blast() is called, |
| 60 | - * then the *left bytes are *in are consumed for input before infun() is used. | |
| 60 | + * then the *left bytes at *in are consumed for input before infun() is used. | |
| 61 | 61 | * |
| 62 | 62 | * The output function is invoked: err = outfun(how, buf, len), where the bytes |
| 63 | 63 | * to be written are buf[0..len-1]. If err is not zero, then blast() returns |
| 64 | 64 | * with an output error. outfun() is always called with len <= 4096. outhow |
| 65 | 65 | * is for use by the application to pass an output descriptor to outfun(), if |
| 66 | 66 |
| --- compat/zlib/contrib/blast/blast.h | |
| +++ compat/zlib/contrib/blast/blast.h | |
| @@ -55,11 +55,11 @@ | |
| 55 | * available bytes there. If infun() returns zero, then blast() returns with |
| 56 | * an input error. (blast() only asks for input if it needs it.) inhow is for |
| 57 | * use by the application to pass an input descriptor to infun(), if desired. |
| 58 | * |
| 59 | * If left and in are not NULL and *left is not zero when blast() is called, |
| 60 | * then the *left bytes are *in are consumed for input before infun() is used. |
| 61 | * |
| 62 | * The output function is invoked: err = outfun(how, buf, len), where the bytes |
| 63 | * to be written are buf[0..len-1]. If err is not zero, then blast() returns |
| 64 | * with an output error. outfun() is always called with len <= 4096. outhow |
| 65 | * is for use by the application to pass an output descriptor to outfun(), if |
| 66 |
| --- compat/zlib/contrib/blast/blast.h | |
| +++ compat/zlib/contrib/blast/blast.h | |
| @@ -55,11 +55,11 @@ | |
| 55 | * available bytes there. If infun() returns zero, then blast() returns with |
| 56 | * an input error. (blast() only asks for input if it needs it.) inhow is for |
| 57 | * use by the application to pass an input descriptor to infun(), if desired. |
| 58 | * |
| 59 | * If left and in are not NULL and *left is not zero when blast() is called, |
| 60 | * then the *left bytes at *in are consumed for input before infun() is used. |
| 61 | * |
| 62 | * The output function is invoked: err = outfun(how, buf, len), where the bytes |
| 63 | * to be written are buf[0..len-1]. If err is not zero, then blast() returns |
| 64 | * with an output error. outfun() is always called with len <= 4096. outhow |
| 65 | * is for use by the application to pass an output descriptor to outfun(), if |
| 66 |
| --- compat/zlib/contrib/delphi/ZLib.pas | ||
| +++ compat/zlib/contrib/delphi/ZLib.pas | ||
| @@ -150,11 +150,11 @@ | ||
| 150 | 150 | BufSize = number of bytes in OutBuf } |
| 151 | 151 | procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer; |
| 152 | 152 | const OutBuf: Pointer; BufSize: Integer); |
| 153 | 153 | |
| 154 | 154 | const |
| 155 | - zlib_version = '1.2.11'; | |
| 155 | + zlib_version = '1.2.12'; | |
| 156 | 156 | |
| 157 | 157 | type |
| 158 | 158 | EZlibError = class(Exception); |
| 159 | 159 | ECompressionError = class(EZlibError); |
| 160 | 160 | EDecompressionError = class(EZlibError); |
| 161 | 161 |
| --- compat/zlib/contrib/delphi/ZLib.pas | |
| +++ compat/zlib/contrib/delphi/ZLib.pas | |
| @@ -150,11 +150,11 @@ | |
| 150 | BufSize = number of bytes in OutBuf } |
| 151 | procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer; |
| 152 | const OutBuf: Pointer; BufSize: Integer); |
| 153 | |
| 154 | const |
| 155 | zlib_version = '1.2.11'; |
| 156 | |
| 157 | type |
| 158 | EZlibError = class(Exception); |
| 159 | ECompressionError = class(EZlibError); |
| 160 | EDecompressionError = class(EZlibError); |
| 161 |
| --- compat/zlib/contrib/delphi/ZLib.pas | |
| +++ compat/zlib/contrib/delphi/ZLib.pas | |
| @@ -150,11 +150,11 @@ | |
| 150 | BufSize = number of bytes in OutBuf } |
| 151 | procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer; |
| 152 | const OutBuf: Pointer; BufSize: Integer); |
| 153 | |
| 154 | const |
| 155 | zlib_version = '1.2.12'; |
| 156 | |
| 157 | type |
| 158 | EZlibError = class(Exception); |
| 159 | ECompressionError = class(EZlibError); |
| 160 | EDecompressionError = class(EZlibError); |
| 161 |
| --- compat/zlib/contrib/dotzlib/DotZLib/UnitTests.cs | ||
| +++ compat/zlib/contrib/dotzlib/DotZLib/UnitTests.cs | ||
| @@ -154,11 +154,11 @@ | ||
| 154 | 154 | #region Info tests |
| 155 | 155 | [Test] |
| 156 | 156 | public void Info_Version() |
| 157 | 157 | { |
| 158 | 158 | Info info = new Info(); |
| 159 | - Assert.AreEqual("1.2.11", Info.Version); | |
| 159 | + Assert.AreEqual("1.2.12", Info.Version); | |
| 160 | 160 | Assert.AreEqual(32, info.SizeOfUInt); |
| 161 | 161 | Assert.AreEqual(32, info.SizeOfULong); |
| 162 | 162 | Assert.AreEqual(32, info.SizeOfPointer); |
| 163 | 163 | Assert.AreEqual(32, info.SizeOfOffset); |
| 164 | 164 | } |
| 165 | 165 |
| --- compat/zlib/contrib/dotzlib/DotZLib/UnitTests.cs | |
| +++ compat/zlib/contrib/dotzlib/DotZLib/UnitTests.cs | |
| @@ -154,11 +154,11 @@ | |
| 154 | #region Info tests |
| 155 | [Test] |
| 156 | public void Info_Version() |
| 157 | { |
| 158 | Info info = new Info(); |
| 159 | Assert.AreEqual("1.2.11", Info.Version); |
| 160 | Assert.AreEqual(32, info.SizeOfUInt); |
| 161 | Assert.AreEqual(32, info.SizeOfULong); |
| 162 | Assert.AreEqual(32, info.SizeOfPointer); |
| 163 | Assert.AreEqual(32, info.SizeOfOffset); |
| 164 | } |
| 165 |
| --- compat/zlib/contrib/dotzlib/DotZLib/UnitTests.cs | |
| +++ compat/zlib/contrib/dotzlib/DotZLib/UnitTests.cs | |
| @@ -154,11 +154,11 @@ | |
| 154 | #region Info tests |
| 155 | [Test] |
| 156 | public void Info_Version() |
| 157 | { |
| 158 | Info info = new Info(); |
| 159 | Assert.AreEqual("1.2.12", Info.Version); |
| 160 | Assert.AreEqual(32, info.SizeOfUInt); |
| 161 | Assert.AreEqual(32, info.SizeOfULong); |
| 162 | Assert.AreEqual(32, info.SizeOfPointer); |
| 163 | Assert.AreEqual(32, info.SizeOfOffset); |
| 164 | } |
| 165 |
| --- compat/zlib/contrib/infback9/inftree9.c | ||
| +++ compat/zlib/contrib/infback9/inftree9.c | ||
| @@ -1,17 +1,17 @@ | ||
| 1 | 1 | /* inftree9.c -- generate Huffman trees for efficient decoding |
| 2 | - * Copyright (C) 1995-2017 Mark Adler | |
| 2 | + * Copyright (C) 1995-2022 Mark Adler | |
| 3 | 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | 4 | */ |
| 5 | 5 | |
| 6 | 6 | #include "zutil.h" |
| 7 | 7 | #include "inftree9.h" |
| 8 | 8 | |
| 9 | 9 | #define MAXBITS 15 |
| 10 | 10 | |
| 11 | 11 | const char inflate9_copyright[] = |
| 12 | - " inflate9 1.2.11 Copyright 1995-2017 Mark Adler "; | |
| 12 | + " inflate9 1.2.12 Copyright 1995-2022 Mark Adler "; | |
| 13 | 13 | /* |
| 14 | 14 | If you use the zlib library in a product, an acknowledgment is welcome |
| 15 | 15 | in the documentation of your product. If for some reason you cannot |
| 16 | 16 | include such an acknowledgment, I would appreciate that you keep this |
| 17 | 17 | copyright string in the executable of your product. |
| @@ -62,11 +62,11 @@ | ||
| 62 | 62 | 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, |
| 63 | 63 | 131, 163, 195, 227, 3, 0, 0}; |
| 64 | 64 | static const unsigned short lext[31] = { /* Length codes 257..285 extra */ |
| 65 | 65 | 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, |
| 66 | 66 | 130, 130, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132, |
| 67 | - 133, 133, 133, 133, 144, 77, 202}; | |
| 67 | + 133, 133, 133, 133, 144, 199, 202}; | |
| 68 | 68 | static const unsigned short dbase[32] = { /* Distance codes 0..31 base */ |
| 69 | 69 | 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, |
| 70 | 70 | 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, |
| 71 | 71 | 4097, 6145, 8193, 12289, 16385, 24577, 32769, 49153}; |
| 72 | 72 | static const unsigned short dext[32] = { /* Distance codes 0..31 extra */ |
| 73 | 73 |
| --- compat/zlib/contrib/infback9/inftree9.c | |
| +++ compat/zlib/contrib/infback9/inftree9.c | |
| @@ -1,17 +1,17 @@ | |
| 1 | /* inftree9.c -- generate Huffman trees for efficient decoding |
| 2 | * Copyright (C) 1995-2017 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | #include "zutil.h" |
| 7 | #include "inftree9.h" |
| 8 | |
| 9 | #define MAXBITS 15 |
| 10 | |
| 11 | const char inflate9_copyright[] = |
| 12 | " inflate9 1.2.11 Copyright 1995-2017 Mark Adler "; |
| 13 | /* |
| 14 | If you use the zlib library in a product, an acknowledgment is welcome |
| 15 | in the documentation of your product. If for some reason you cannot |
| 16 | include such an acknowledgment, I would appreciate that you keep this |
| 17 | copyright string in the executable of your product. |
| @@ -62,11 +62,11 @@ | |
| 62 | 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, |
| 63 | 131, 163, 195, 227, 3, 0, 0}; |
| 64 | static const unsigned short lext[31] = { /* Length codes 257..285 extra */ |
| 65 | 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, |
| 66 | 130, 130, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132, |
| 67 | 133, 133, 133, 133, 144, 77, 202}; |
| 68 | static const unsigned short dbase[32] = { /* Distance codes 0..31 base */ |
| 69 | 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, |
| 70 | 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, |
| 71 | 4097, 6145, 8193, 12289, 16385, 24577, 32769, 49153}; |
| 72 | static const unsigned short dext[32] = { /* Distance codes 0..31 extra */ |
| 73 |
| --- compat/zlib/contrib/infback9/inftree9.c | |
| +++ compat/zlib/contrib/infback9/inftree9.c | |
| @@ -1,17 +1,17 @@ | |
| 1 | /* inftree9.c -- generate Huffman trees for efficient decoding |
| 2 | * Copyright (C) 1995-2022 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | #include "zutil.h" |
| 7 | #include "inftree9.h" |
| 8 | |
| 9 | #define MAXBITS 15 |
| 10 | |
| 11 | const char inflate9_copyright[] = |
| 12 | " inflate9 1.2.12 Copyright 1995-2022 Mark Adler "; |
| 13 | /* |
| 14 | If you use the zlib library in a product, an acknowledgment is welcome |
| 15 | in the documentation of your product. If for some reason you cannot |
| 16 | include such an acknowledgment, I would appreciate that you keep this |
| 17 | copyright string in the executable of your product. |
| @@ -62,11 +62,11 @@ | |
| 62 | 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, |
| 63 | 131, 163, 195, 227, 3, 0, 0}; |
| 64 | static const unsigned short lext[31] = { /* Length codes 257..285 extra */ |
| 65 | 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, |
| 66 | 130, 130, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132, |
| 67 | 133, 133, 133, 133, 144, 199, 202}; |
| 68 | static const unsigned short dbase[32] = { /* Distance codes 0..31 base */ |
| 69 | 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, |
| 70 | 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, |
| 71 | 4097, 6145, 8193, 12289, 16385, 24577, 32769, 49153}; |
| 72 | static const unsigned short dext[32] = { /* Distance codes 0..31 extra */ |
| 73 |
| --- compat/zlib/contrib/minizip/Makefile | ||
| +++ compat/zlib/contrib/minizip/Makefile | ||
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | CC=cc |
| 2 | -CFLAGS=-O -I../.. | |
| 2 | +CFLAGS := $(CFLAGS) -O -I../.. | |
| 3 | 3 | |
| 4 | 4 | UNZ_OBJS = miniunz.o unzip.o ioapi.o ../../libz.a |
| 5 | 5 | ZIP_OBJS = minizip.o zip.o ioapi.o ../../libz.a |
| 6 | 6 | |
| 7 | 7 | .c.o: |
| @@ -14,12 +14,16 @@ | ||
| 14 | 14 | |
| 15 | 15 | minizip: $(ZIP_OBJS) |
| 16 | 16 | $(CC) $(CFLAGS) -o $@ $(ZIP_OBJS) |
| 17 | 17 | |
| 18 | 18 | test: miniunz minizip |
| 19 | - ./minizip test readme.txt | |
| 19 | + @rm -f test.* | |
| 20 | + @echo hello hello hello > test.txt | |
| 21 | + ./minizip test test.txt | |
| 20 | 22 | ./miniunz -l test.zip |
| 21 | - mv readme.txt readme.old | |
| 23 | + @mv test.txt test.old | |
| 22 | 24 | ./miniunz test.zip |
| 25 | + @cmp test.txt test.old | |
| 26 | + @rm -f test.* | |
| 23 | 27 | |
| 24 | 28 | clean: |
| 25 | - /bin/rm -f *.o *~ minizip miniunz | |
| 29 | + /bin/rm -f *.o *~ minizip miniunz test.* | |
| 26 | 30 |
| --- compat/zlib/contrib/minizip/Makefile | |
| +++ compat/zlib/contrib/minizip/Makefile | |
| @@ -1,7 +1,7 @@ | |
| 1 | CC=cc |
| 2 | CFLAGS=-O -I../.. |
| 3 | |
| 4 | UNZ_OBJS = miniunz.o unzip.o ioapi.o ../../libz.a |
| 5 | ZIP_OBJS = minizip.o zip.o ioapi.o ../../libz.a |
| 6 | |
| 7 | .c.o: |
| @@ -14,12 +14,16 @@ | |
| 14 | |
| 15 | minizip: $(ZIP_OBJS) |
| 16 | $(CC) $(CFLAGS) -o $@ $(ZIP_OBJS) |
| 17 | |
| 18 | test: miniunz minizip |
| 19 | ./minizip test readme.txt |
| 20 | ./miniunz -l test.zip |
| 21 | mv readme.txt readme.old |
| 22 | ./miniunz test.zip |
| 23 | |
| 24 | clean: |
| 25 | /bin/rm -f *.o *~ minizip miniunz |
| 26 |
| --- compat/zlib/contrib/minizip/Makefile | |
| +++ compat/zlib/contrib/minizip/Makefile | |
| @@ -1,7 +1,7 @@ | |
| 1 | CC=cc |
| 2 | CFLAGS := $(CFLAGS) -O -I../.. |
| 3 | |
| 4 | UNZ_OBJS = miniunz.o unzip.o ioapi.o ../../libz.a |
| 5 | ZIP_OBJS = minizip.o zip.o ioapi.o ../../libz.a |
| 6 | |
| 7 | .c.o: |
| @@ -14,12 +14,16 @@ | |
| 14 | |
| 15 | minizip: $(ZIP_OBJS) |
| 16 | $(CC) $(CFLAGS) -o $@ $(ZIP_OBJS) |
| 17 | |
| 18 | test: miniunz minizip |
| 19 | @rm -f test.* |
| 20 | @echo hello hello hello > test.txt |
| 21 | ./minizip test test.txt |
| 22 | ./miniunz -l test.zip |
| 23 | @mv test.txt test.old |
| 24 | ./miniunz test.zip |
| 25 | @cmp test.txt test.old |
| 26 | @rm -f test.* |
| 27 | |
| 28 | clean: |
| 29 | /bin/rm -f *.o *~ minizip miniunz test.* |
| 30 |
| --- compat/zlib/contrib/minizip/configure.ac | ||
| +++ compat/zlib/contrib/minizip/configure.ac | ||
| @@ -1,9 +1,9 @@ | ||
| 1 | 1 | # -*- Autoconf -*- |
| 2 | 2 | # Process this file with autoconf to produce a configure script. |
| 3 | 3 | |
| 4 | -AC_INIT([minizip], [1.2.11], [bugzilla.redhat.com]) | |
| 4 | +AC_INIT([minizip], [1.2.12], [bugzilla.redhat.com]) | |
| 5 | 5 | AC_CONFIG_SRCDIR([minizip.c]) |
| 6 | 6 | AM_INIT_AUTOMAKE([foreign]) |
| 7 | 7 | LT_INIT |
| 8 | 8 | |
| 9 | 9 | AC_MSG_CHECKING([whether to build example programs]) |
| 10 | 10 |
| --- compat/zlib/contrib/minizip/configure.ac | |
| +++ compat/zlib/contrib/minizip/configure.ac | |
| @@ -1,9 +1,9 @@ | |
| 1 | # -*- Autoconf -*- |
| 2 | # Process this file with autoconf to produce a configure script. |
| 3 | |
| 4 | AC_INIT([minizip], [1.2.11], [bugzilla.redhat.com]) |
| 5 | AC_CONFIG_SRCDIR([minizip.c]) |
| 6 | AM_INIT_AUTOMAKE([foreign]) |
| 7 | LT_INIT |
| 8 | |
| 9 | AC_MSG_CHECKING([whether to build example programs]) |
| 10 |
| --- compat/zlib/contrib/minizip/configure.ac | |
| +++ compat/zlib/contrib/minizip/configure.ac | |
| @@ -1,9 +1,9 @@ | |
| 1 | # -*- Autoconf -*- |
| 2 | # Process this file with autoconf to produce a configure script. |
| 3 | |
| 4 | AC_INIT([minizip], [1.2.12], [bugzilla.redhat.com]) |
| 5 | AC_CONFIG_SRCDIR([minizip.c]) |
| 6 | AM_INIT_AUTOMAKE([foreign]) |
| 7 | LT_INIT |
| 8 | |
| 9 | AC_MSG_CHECKING([whether to build example programs]) |
| 10 |
+11
-10
| --- compat/zlib/contrib/minizip/crypt.h | ||
| +++ compat/zlib/contrib/minizip/crypt.h | ||
| @@ -36,10 +36,11 @@ | ||
| 36 | 36 | { |
| 37 | 37 | unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an |
| 38 | 38 | * unpredictable manner on 16-bit systems; not a problem |
| 39 | 39 | * with any known compiler so far, though */ |
| 40 | 40 | |
| 41 | + (void)pcrc_32_tab; | |
| 41 | 42 | temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2; |
| 42 | 43 | return (int)(((temp * (temp ^ 1)) >> 8) & 0xff); |
| 43 | 44 | } |
| 44 | 45 | |
| 45 | 46 | /*********************************************************************** |
| @@ -75,28 +76,28 @@ | ||
| 75 | 76 | |
| 76 | 77 | #define zdecode(pkeys,pcrc_32_tab,c) \ |
| 77 | 78 | (update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab))) |
| 78 | 79 | |
| 79 | 80 | #define zencode(pkeys,pcrc_32_tab,c,t) \ |
| 80 | - (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c)) | |
| 81 | + (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), (Byte)t^(c)) | |
| 81 | 82 | |
| 82 | 83 | #ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED |
| 83 | 84 | |
| 84 | 85 | #define RAND_HEAD_LEN 12 |
| 85 | 86 | /* "last resort" source for second part of crypt seed pattern */ |
| 86 | 87 | # ifndef ZCR_SEED2 |
| 87 | -# define ZCR_SEED2 3141592654UL /* use PI as default pattern */ | |
| 88 | +# define ZCR_SEED2 3141592654L /* use PI as default pattern */ | |
| 88 | 89 | # endif |
| 89 | 90 | |
| 90 | -static int crypthead(const char* passwd, /* password string */ | |
| 91 | - unsigned char* buf, /* where to write header */ | |
| 92 | - int bufSize, | |
| 93 | - unsigned long* pkeys, | |
| 94 | - const z_crc_t* pcrc_32_tab, | |
| 95 | - unsigned long crcForCrypting) | |
| 96 | -{ | |
| 97 | - int n; /* index in random header */ | |
| 91 | +static unsigned crypthead(const char* passwd, /* password string */ | |
| 92 | + unsigned char* buf, /* where to write header */ | |
| 93 | + int bufSize, | |
| 94 | + unsigned long* pkeys, | |
| 95 | + const z_crc_t* pcrc_32_tab, | |
| 96 | + unsigned long crcForCrypting) | |
| 97 | +{ | |
| 98 | + unsigned n; /* index in random header */ | |
| 98 | 99 | int t; /* temporary */ |
| 99 | 100 | int c; /* random byte */ |
| 100 | 101 | unsigned char header[RAND_HEAD_LEN-2]; /* random header */ |
| 101 | 102 | static unsigned calls = 0; /* ensure different random header each time */ |
| 102 | 103 | |
| 103 | 104 |
| --- compat/zlib/contrib/minizip/crypt.h | |
| +++ compat/zlib/contrib/minizip/crypt.h | |
| @@ -36,10 +36,11 @@ | |
| 36 | { |
| 37 | unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an |
| 38 | * unpredictable manner on 16-bit systems; not a problem |
| 39 | * with any known compiler so far, though */ |
| 40 | |
| 41 | temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2; |
| 42 | return (int)(((temp * (temp ^ 1)) >> 8) & 0xff); |
| 43 | } |
| 44 | |
| 45 | /*********************************************************************** |
| @@ -75,28 +76,28 @@ | |
| 75 | |
| 76 | #define zdecode(pkeys,pcrc_32_tab,c) \ |
| 77 | (update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab))) |
| 78 | |
| 79 | #define zencode(pkeys,pcrc_32_tab,c,t) \ |
| 80 | (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c)) |
| 81 | |
| 82 | #ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED |
| 83 | |
| 84 | #define RAND_HEAD_LEN 12 |
| 85 | /* "last resort" source for second part of crypt seed pattern */ |
| 86 | # ifndef ZCR_SEED2 |
| 87 | # define ZCR_SEED2 3141592654UL /* use PI as default pattern */ |
| 88 | # endif |
| 89 | |
| 90 | static int crypthead(const char* passwd, /* password string */ |
| 91 | unsigned char* buf, /* where to write header */ |
| 92 | int bufSize, |
| 93 | unsigned long* pkeys, |
| 94 | const z_crc_t* pcrc_32_tab, |
| 95 | unsigned long crcForCrypting) |
| 96 | { |
| 97 | int n; /* index in random header */ |
| 98 | int t; /* temporary */ |
| 99 | int c; /* random byte */ |
| 100 | unsigned char header[RAND_HEAD_LEN-2]; /* random header */ |
| 101 | static unsigned calls = 0; /* ensure different random header each time */ |
| 102 | |
| 103 |
| --- compat/zlib/contrib/minizip/crypt.h | |
| +++ compat/zlib/contrib/minizip/crypt.h | |
| @@ -36,10 +36,11 @@ | |
| 36 | { |
| 37 | unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an |
| 38 | * unpredictable manner on 16-bit systems; not a problem |
| 39 | * with any known compiler so far, though */ |
| 40 | |
| 41 | (void)pcrc_32_tab; |
| 42 | temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2; |
| 43 | return (int)(((temp * (temp ^ 1)) >> 8) & 0xff); |
| 44 | } |
| 45 | |
| 46 | /*********************************************************************** |
| @@ -75,28 +76,28 @@ | |
| 76 | |
| 77 | #define zdecode(pkeys,pcrc_32_tab,c) \ |
| 78 | (update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab))) |
| 79 | |
| 80 | #define zencode(pkeys,pcrc_32_tab,c,t) \ |
| 81 | (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), (Byte)t^(c)) |
| 82 | |
| 83 | #ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED |
| 84 | |
| 85 | #define RAND_HEAD_LEN 12 |
| 86 | /* "last resort" source for second part of crypt seed pattern */ |
| 87 | # ifndef ZCR_SEED2 |
| 88 | # define ZCR_SEED2 3141592654L /* use PI as default pattern */ |
| 89 | # endif |
| 90 | |
| 91 | static unsigned crypthead(const char* passwd, /* password string */ |
| 92 | unsigned char* buf, /* where to write header */ |
| 93 | int bufSize, |
| 94 | unsigned long* pkeys, |
| 95 | const z_crc_t* pcrc_32_tab, |
| 96 | unsigned long crcForCrypting) |
| 97 | { |
| 98 | unsigned n; /* index in random header */ |
| 99 | int t; /* temporary */ |
| 100 | int c; /* random byte */ |
| 101 | unsigned char header[RAND_HEAD_LEN-2]; /* random header */ |
| 102 | static unsigned calls = 0; /* ensure different random header each time */ |
| 103 | |
| 104 |
+14
-4
| --- compat/zlib/contrib/minizip/ioapi.c | ||
| +++ compat/zlib/contrib/minizip/ioapi.c | ||
| @@ -56,11 +56,11 @@ | ||
| 56 | 56 | { |
| 57 | 57 | if (pfilefunc->zfile_func64.zseek64_file != NULL) |
| 58 | 58 | return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream); |
| 59 | 59 | else |
| 60 | 60 | { |
| 61 | - uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream); | |
| 61 | + uLong tell_uLong = (uLong)(*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream); | |
| 62 | 62 | if ((tell_uLong) == MAXU32) |
| 63 | 63 | return (ZPOS64_T)-1; |
| 64 | 64 | else |
| 65 | 65 | return tell_uLong; |
| 66 | 66 | } |
| @@ -92,10 +92,11 @@ | ||
| 92 | 92 | static int ZCALLBACK fclose_file_func OF((voidpf opaque, voidpf stream)); |
| 93 | 93 | static int ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream)); |
| 94 | 94 | |
| 95 | 95 | static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode) |
| 96 | 96 | { |
| 97 | + (void)opaque; | |
| 97 | 98 | FILE* file = NULL; |
| 98 | 99 | const char* mode_fopen = NULL; |
| 99 | 100 | if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) |
| 100 | 101 | mode_fopen = "rb"; |
| 101 | 102 | else |
| @@ -110,10 +111,11 @@ | ||
| 110 | 111 | return file; |
| 111 | 112 | } |
| 112 | 113 | |
| 113 | 114 | static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, int mode) |
| 114 | 115 | { |
| 116 | + (void)opaque; | |
| 115 | 117 | FILE* file = NULL; |
| 116 | 118 | const char* mode_fopen = NULL; |
| 117 | 119 | if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) |
| 118 | 120 | mode_fopen = "rb"; |
| 119 | 121 | else |
| @@ -129,39 +131,44 @@ | ||
| 129 | 131 | } |
| 130 | 132 | |
| 131 | 133 | |
| 132 | 134 | static uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, void* buf, uLong size) |
| 133 | 135 | { |
| 136 | + (void)opaque; | |
| 134 | 137 | uLong ret; |
| 135 | 138 | ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream); |
| 136 | 139 | return ret; |
| 137 | 140 | } |
| 138 | 141 | |
| 139 | 142 | static uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, const void* buf, uLong size) |
| 140 | 143 | { |
| 144 | + (void)opaque; | |
| 141 | 145 | uLong ret; |
| 142 | 146 | ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream); |
| 143 | 147 | return ret; |
| 144 | 148 | } |
| 145 | 149 | |
| 146 | 150 | static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream) |
| 147 | 151 | { |
| 152 | + (void)opaque; | |
| 148 | 153 | long ret; |
| 149 | 154 | ret = ftell((FILE *)stream); |
| 150 | 155 | return ret; |
| 151 | 156 | } |
| 152 | 157 | |
| 153 | 158 | |
| 154 | 159 | static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream) |
| 155 | 160 | { |
| 161 | + (void)opaque; | |
| 156 | 162 | ZPOS64_T ret; |
| 157 | - ret = FTELLO_FUNC((FILE *)stream); | |
| 163 | + ret = (ZPOS64_T)FTELLO_FUNC((FILE *)stream); | |
| 158 | 164 | return ret; |
| 159 | 165 | } |
| 160 | 166 | |
| 161 | 167 | static long ZCALLBACK fseek_file_func (voidpf opaque, voidpf stream, uLong offset, int origin) |
| 162 | 168 | { |
| 169 | + (void)opaque; | |
| 163 | 170 | int fseek_origin=0; |
| 164 | 171 | long ret; |
| 165 | 172 | switch (origin) |
| 166 | 173 | { |
| 167 | 174 | case ZLIB_FILEFUNC_SEEK_CUR : |
| @@ -174,17 +181,18 @@ | ||
| 174 | 181 | fseek_origin = SEEK_SET; |
| 175 | 182 | break; |
| 176 | 183 | default: return -1; |
| 177 | 184 | } |
| 178 | 185 | ret = 0; |
| 179 | - if (fseek((FILE *)stream, offset, fseek_origin) != 0) | |
| 186 | + if (fseek((FILE *)stream, (long)offset, fseek_origin) != 0) | |
| 180 | 187 | ret = -1; |
| 181 | 188 | return ret; |
| 182 | 189 | } |
| 183 | 190 | |
| 184 | 191 | static long ZCALLBACK fseek64_file_func (voidpf opaque, voidpf stream, ZPOS64_T offset, int origin) |
| 185 | 192 | { |
| 193 | + (void)opaque; | |
| 186 | 194 | int fseek_origin=0; |
| 187 | 195 | long ret; |
| 188 | 196 | switch (origin) |
| 189 | 197 | { |
| 190 | 198 | case ZLIB_FILEFUNC_SEEK_CUR : |
| @@ -198,26 +206,28 @@ | ||
| 198 | 206 | break; |
| 199 | 207 | default: return -1; |
| 200 | 208 | } |
| 201 | 209 | ret = 0; |
| 202 | 210 | |
| 203 | - if(FSEEKO_FUNC((FILE *)stream, offset, fseek_origin) != 0) | |
| 211 | + if(FSEEKO_FUNC((FILE *)stream, (long)offset, fseek_origin) != 0) | |
| 204 | 212 | ret = -1; |
| 205 | 213 | |
| 206 | 214 | return ret; |
| 207 | 215 | } |
| 208 | 216 | |
| 209 | 217 | |
| 210 | 218 | static int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream) |
| 211 | 219 | { |
| 220 | + (void)opaque; | |
| 212 | 221 | int ret; |
| 213 | 222 | ret = fclose((FILE *)stream); |
| 214 | 223 | return ret; |
| 215 | 224 | } |
| 216 | 225 | |
| 217 | 226 | static int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream) |
| 218 | 227 | { |
| 228 | + (void)opaque; | |
| 219 | 229 | int ret; |
| 220 | 230 | ret = ferror((FILE *)stream); |
| 221 | 231 | return ret; |
| 222 | 232 | } |
| 223 | 233 | |
| 224 | 234 |
| --- compat/zlib/contrib/minizip/ioapi.c | |
| +++ compat/zlib/contrib/minizip/ioapi.c | |
| @@ -56,11 +56,11 @@ | |
| 56 | { |
| 57 | if (pfilefunc->zfile_func64.zseek64_file != NULL) |
| 58 | return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream); |
| 59 | else |
| 60 | { |
| 61 | uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream); |
| 62 | if ((tell_uLong) == MAXU32) |
| 63 | return (ZPOS64_T)-1; |
| 64 | else |
| 65 | return tell_uLong; |
| 66 | } |
| @@ -92,10 +92,11 @@ | |
| 92 | static int ZCALLBACK fclose_file_func OF((voidpf opaque, voidpf stream)); |
| 93 | static int ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream)); |
| 94 | |
| 95 | static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode) |
| 96 | { |
| 97 | FILE* file = NULL; |
| 98 | const char* mode_fopen = NULL; |
| 99 | if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) |
| 100 | mode_fopen = "rb"; |
| 101 | else |
| @@ -110,10 +111,11 @@ | |
| 110 | return file; |
| 111 | } |
| 112 | |
| 113 | static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, int mode) |
| 114 | { |
| 115 | FILE* file = NULL; |
| 116 | const char* mode_fopen = NULL; |
| 117 | if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) |
| 118 | mode_fopen = "rb"; |
| 119 | else |
| @@ -129,39 +131,44 @@ | |
| 129 | } |
| 130 | |
| 131 | |
| 132 | static uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, void* buf, uLong size) |
| 133 | { |
| 134 | uLong ret; |
| 135 | ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream); |
| 136 | return ret; |
| 137 | } |
| 138 | |
| 139 | static uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, const void* buf, uLong size) |
| 140 | { |
| 141 | uLong ret; |
| 142 | ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream); |
| 143 | return ret; |
| 144 | } |
| 145 | |
| 146 | static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream) |
| 147 | { |
| 148 | long ret; |
| 149 | ret = ftell((FILE *)stream); |
| 150 | return ret; |
| 151 | } |
| 152 | |
| 153 | |
| 154 | static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream) |
| 155 | { |
| 156 | ZPOS64_T ret; |
| 157 | ret = FTELLO_FUNC((FILE *)stream); |
| 158 | return ret; |
| 159 | } |
| 160 | |
| 161 | static long ZCALLBACK fseek_file_func (voidpf opaque, voidpf stream, uLong offset, int origin) |
| 162 | { |
| 163 | int fseek_origin=0; |
| 164 | long ret; |
| 165 | switch (origin) |
| 166 | { |
| 167 | case ZLIB_FILEFUNC_SEEK_CUR : |
| @@ -174,17 +181,18 @@ | |
| 174 | fseek_origin = SEEK_SET; |
| 175 | break; |
| 176 | default: return -1; |
| 177 | } |
| 178 | ret = 0; |
| 179 | if (fseek((FILE *)stream, offset, fseek_origin) != 0) |
| 180 | ret = -1; |
| 181 | return ret; |
| 182 | } |
| 183 | |
| 184 | static long ZCALLBACK fseek64_file_func (voidpf opaque, voidpf stream, ZPOS64_T offset, int origin) |
| 185 | { |
| 186 | int fseek_origin=0; |
| 187 | long ret; |
| 188 | switch (origin) |
| 189 | { |
| 190 | case ZLIB_FILEFUNC_SEEK_CUR : |
| @@ -198,26 +206,28 @@ | |
| 198 | break; |
| 199 | default: return -1; |
| 200 | } |
| 201 | ret = 0; |
| 202 | |
| 203 | if(FSEEKO_FUNC((FILE *)stream, offset, fseek_origin) != 0) |
| 204 | ret = -1; |
| 205 | |
| 206 | return ret; |
| 207 | } |
| 208 | |
| 209 | |
| 210 | static int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream) |
| 211 | { |
| 212 | int ret; |
| 213 | ret = fclose((FILE *)stream); |
| 214 | return ret; |
| 215 | } |
| 216 | |
| 217 | static int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream) |
| 218 | { |
| 219 | int ret; |
| 220 | ret = ferror((FILE *)stream); |
| 221 | return ret; |
| 222 | } |
| 223 | |
| 224 |
| --- compat/zlib/contrib/minizip/ioapi.c | |
| +++ compat/zlib/contrib/minizip/ioapi.c | |
| @@ -56,11 +56,11 @@ | |
| 56 | { |
| 57 | if (pfilefunc->zfile_func64.zseek64_file != NULL) |
| 58 | return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream); |
| 59 | else |
| 60 | { |
| 61 | uLong tell_uLong = (uLong)(*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream); |
| 62 | if ((tell_uLong) == MAXU32) |
| 63 | return (ZPOS64_T)-1; |
| 64 | else |
| 65 | return tell_uLong; |
| 66 | } |
| @@ -92,10 +92,11 @@ | |
| 92 | static int ZCALLBACK fclose_file_func OF((voidpf opaque, voidpf stream)); |
| 93 | static int ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream)); |
| 94 | |
| 95 | static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode) |
| 96 | { |
| 97 | (void)opaque; |
| 98 | FILE* file = NULL; |
| 99 | const char* mode_fopen = NULL; |
| 100 | if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) |
| 101 | mode_fopen = "rb"; |
| 102 | else |
| @@ -110,10 +111,11 @@ | |
| 111 | return file; |
| 112 | } |
| 113 | |
| 114 | static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, int mode) |
| 115 | { |
| 116 | (void)opaque; |
| 117 | FILE* file = NULL; |
| 118 | const char* mode_fopen = NULL; |
| 119 | if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) |
| 120 | mode_fopen = "rb"; |
| 121 | else |
| @@ -129,39 +131,44 @@ | |
| 131 | } |
| 132 | |
| 133 | |
| 134 | static uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, void* buf, uLong size) |
| 135 | { |
| 136 | (void)opaque; |
| 137 | uLong ret; |
| 138 | ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream); |
| 139 | return ret; |
| 140 | } |
| 141 | |
| 142 | static uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, const void* buf, uLong size) |
| 143 | { |
| 144 | (void)opaque; |
| 145 | uLong ret; |
| 146 | ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream); |
| 147 | return ret; |
| 148 | } |
| 149 | |
| 150 | static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream) |
| 151 | { |
| 152 | (void)opaque; |
| 153 | long ret; |
| 154 | ret = ftell((FILE *)stream); |
| 155 | return ret; |
| 156 | } |
| 157 | |
| 158 | |
| 159 | static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream) |
| 160 | { |
| 161 | (void)opaque; |
| 162 | ZPOS64_T ret; |
| 163 | ret = (ZPOS64_T)FTELLO_FUNC((FILE *)stream); |
| 164 | return ret; |
| 165 | } |
| 166 | |
| 167 | static long ZCALLBACK fseek_file_func (voidpf opaque, voidpf stream, uLong offset, int origin) |
| 168 | { |
| 169 | (void)opaque; |
| 170 | int fseek_origin=0; |
| 171 | long ret; |
| 172 | switch (origin) |
| 173 | { |
| 174 | case ZLIB_FILEFUNC_SEEK_CUR : |
| @@ -174,17 +181,18 @@ | |
| 181 | fseek_origin = SEEK_SET; |
| 182 | break; |
| 183 | default: return -1; |
| 184 | } |
| 185 | ret = 0; |
| 186 | if (fseek((FILE *)stream, (long)offset, fseek_origin) != 0) |
| 187 | ret = -1; |
| 188 | return ret; |
| 189 | } |
| 190 | |
| 191 | static long ZCALLBACK fseek64_file_func (voidpf opaque, voidpf stream, ZPOS64_T offset, int origin) |
| 192 | { |
| 193 | (void)opaque; |
| 194 | int fseek_origin=0; |
| 195 | long ret; |
| 196 | switch (origin) |
| 197 | { |
| 198 | case ZLIB_FILEFUNC_SEEK_CUR : |
| @@ -198,26 +206,28 @@ | |
| 206 | break; |
| 207 | default: return -1; |
| 208 | } |
| 209 | ret = 0; |
| 210 | |
| 211 | if(FSEEKO_FUNC((FILE *)stream, (long)offset, fseek_origin) != 0) |
| 212 | ret = -1; |
| 213 | |
| 214 | return ret; |
| 215 | } |
| 216 | |
| 217 | |
| 218 | static int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream) |
| 219 | { |
| 220 | (void)opaque; |
| 221 | int ret; |
| 222 | ret = fclose((FILE *)stream); |
| 223 | return ret; |
| 224 | } |
| 225 | |
| 226 | static int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream) |
| 227 | { |
| 228 | (void)opaque; |
| 229 | int ret; |
| 230 | ret = ferror((FILE *)stream); |
| 231 | return ret; |
| 232 | } |
| 233 | |
| 234 |
| --- compat/zlib/contrib/minizip/ioapi.h | ||
| +++ compat/zlib/contrib/minizip/ioapi.h | ||
| @@ -89,22 +89,24 @@ | ||
| 89 | 89 | #ifdef HAS_STDINT_H |
| 90 | 90 | #include "stdint.h" |
| 91 | 91 | typedef uint64_t ZPOS64_T; |
| 92 | 92 | #else |
| 93 | 93 | |
| 94 | -/* Maximum unsigned 32-bit value used as placeholder for zip64 */ | |
| 95 | -#define MAXU32 0xffffffff | |
| 94 | + | |
| 96 | 95 | |
| 97 | 96 | #if defined(_MSC_VER) || defined(__BORLANDC__) |
| 98 | 97 | typedef unsigned __int64 ZPOS64_T; |
| 99 | 98 | #else |
| 100 | 99 | typedef unsigned long long int ZPOS64_T; |
| 101 | 100 | #endif |
| 102 | 101 | #endif |
| 103 | 102 | #endif |
| 104 | 103 | |
| 105 | - | |
| 104 | +/* Maximum unsigned 32-bit value used as placeholder for zip64 */ | |
| 105 | +#ifndef MAXU32 | |
| 106 | +#define MAXU32 (0xffffffff) | |
| 107 | +#endif | |
| 106 | 108 | |
| 107 | 109 | #ifdef __cplusplus |
| 108 | 110 | extern "C" { |
| 109 | 111 | #endif |
| 110 | 112 | |
| 111 | 113 |
| --- compat/zlib/contrib/minizip/ioapi.h | |
| +++ compat/zlib/contrib/minizip/ioapi.h | |
| @@ -89,22 +89,24 @@ | |
| 89 | #ifdef HAS_STDINT_H |
| 90 | #include "stdint.h" |
| 91 | typedef uint64_t ZPOS64_T; |
| 92 | #else |
| 93 | |
| 94 | /* Maximum unsigned 32-bit value used as placeholder for zip64 */ |
| 95 | #define MAXU32 0xffffffff |
| 96 | |
| 97 | #if defined(_MSC_VER) || defined(__BORLANDC__) |
| 98 | typedef unsigned __int64 ZPOS64_T; |
| 99 | #else |
| 100 | typedef unsigned long long int ZPOS64_T; |
| 101 | #endif |
| 102 | #endif |
| 103 | #endif |
| 104 | |
| 105 | |
| 106 | |
| 107 | #ifdef __cplusplus |
| 108 | extern "C" { |
| 109 | #endif |
| 110 | |
| 111 |
| --- compat/zlib/contrib/minizip/ioapi.h | |
| +++ compat/zlib/contrib/minizip/ioapi.h | |
| @@ -89,22 +89,24 @@ | |
| 89 | #ifdef HAS_STDINT_H |
| 90 | #include "stdint.h" |
| 91 | typedef uint64_t ZPOS64_T; |
| 92 | #else |
| 93 | |
| 94 | |
| 95 | |
| 96 | #if defined(_MSC_VER) || defined(__BORLANDC__) |
| 97 | typedef unsigned __int64 ZPOS64_T; |
| 98 | #else |
| 99 | typedef unsigned long long int ZPOS64_T; |
| 100 | #endif |
| 101 | #endif |
| 102 | #endif |
| 103 | |
| 104 | /* Maximum unsigned 32-bit value used as placeholder for zip64 */ |
| 105 | #ifndef MAXU32 |
| 106 | #define MAXU32 (0xffffffff) |
| 107 | #endif |
| 108 | |
| 109 | #ifdef __cplusplus |
| 110 | extern "C" { |
| 111 | #endif |
| 112 | |
| 113 |
+17
-18
| --- compat/zlib/contrib/minizip/miniunz.c | ||
| +++ compat/zlib/contrib/minizip/miniunz.c | ||
| @@ -43,10 +43,11 @@ | ||
| 43 | 43 | #include <stdlib.h> |
| 44 | 44 | #include <string.h> |
| 45 | 45 | #include <time.h> |
| 46 | 46 | #include <errno.h> |
| 47 | 47 | #include <fcntl.h> |
| 48 | +#include <sys/stat.h> | |
| 48 | 49 | |
| 49 | 50 | #ifdef _WIN32 |
| 50 | 51 | # include <direct.h> |
| 51 | 52 | # include <io.h> |
| 52 | 53 | #else |
| @@ -78,11 +79,11 @@ | ||
| 78 | 79 | |
| 79 | 80 | /* change_file_date : change the date/time of a file |
| 80 | 81 | filename : the filename of the file where date/time must be modified |
| 81 | 82 | dosdate : the new date at the MSDos format (4 bytes) |
| 82 | 83 | tmu_date : the SAME new date at the tm_unz format */ |
| 83 | -void change_file_date(filename,dosdate,tmu_date) | |
| 84 | +static void change_file_date(filename,dosdate,tmu_date) | |
| 84 | 85 | const char *filename; |
| 85 | 86 | uLong dosdate; |
| 86 | 87 | tm_unz tmu_date; |
| 87 | 88 | { |
| 88 | 89 | #ifdef _WIN32 |
| @@ -95,11 +96,12 @@ | ||
| 95 | 96 | DosDateTimeToFileTime((WORD)(dosdate>>16),(WORD)dosdate,&ftLocal); |
| 96 | 97 | LocalFileTimeToFileTime(&ftLocal,&ftm); |
| 97 | 98 | SetFileTime(hFile,&ftm,&ftLastAcc,&ftm); |
| 98 | 99 | CloseHandle(hFile); |
| 99 | 100 | #else |
| 100 | -#ifdef unix || __APPLE__ | |
| 101 | +#if defined(unix) || defined(__APPLE__) | |
| 102 | + (void)dosdate; | |
| 101 | 103 | struct utimbuf ut; |
| 102 | 104 | struct tm newdate; |
| 103 | 105 | newdate.tm_sec = tmu_date.tm_sec; |
| 104 | 106 | newdate.tm_min=tmu_date.tm_min; |
| 105 | 107 | newdate.tm_hour=tmu_date.tm_hour; |
| @@ -119,11 +121,11 @@ | ||
| 119 | 121 | |
| 120 | 122 | |
| 121 | 123 | /* mymkdir and change_file_date are not 100 % portable |
| 122 | 124 | As I don't know well Unix, I wait feedback for the unix portion */ |
| 123 | 125 | |
| 124 | -int mymkdir(dirname) | |
| 126 | +static int mymkdir(dirname) | |
| 125 | 127 | const char* dirname; |
| 126 | 128 | { |
| 127 | 129 | int ret=0; |
| 128 | 130 | #ifdef _WIN32 |
| 129 | 131 | ret = _mkdir(dirname); |
| @@ -133,18 +135,18 @@ | ||
| 133 | 135 | ret = mkdir (dirname,0775); |
| 134 | 136 | #endif |
| 135 | 137 | return ret; |
| 136 | 138 | } |
| 137 | 139 | |
| 138 | -int makedir (newdir) | |
| 139 | - char *newdir; | |
| 140 | +static int makedir (newdir) | |
| 141 | + const char *newdir; | |
| 140 | 142 | { |
| 141 | 143 | char *buffer ; |
| 142 | 144 | char *p; |
| 143 | - int len = (int)strlen(newdir); | |
| 145 | + size_t len = strlen(newdir); | |
| 144 | 146 | |
| 145 | - if (len <= 0) | |
| 147 | + if (len == 0) | |
| 146 | 148 | return 0; |
| 147 | 149 | |
| 148 | 150 | buffer = (char*)malloc(len+1); |
| 149 | 151 | if (buffer==NULL) |
| 150 | 152 | { |
| @@ -183,17 +185,17 @@ | ||
| 183 | 185 | } |
| 184 | 186 | free(buffer); |
| 185 | 187 | return 1; |
| 186 | 188 | } |
| 187 | 189 | |
| 188 | -void do_banner() | |
| 190 | +static void do_banner() | |
| 189 | 191 | { |
| 190 | 192 | printf("MiniUnz 1.01b, demo of zLib + Unz package written by Gilles Vollant\n"); |
| 191 | 193 | printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n"); |
| 192 | 194 | } |
| 193 | 195 | |
| 194 | -void do_help() | |
| 196 | +static void do_help() | |
| 195 | 197 | { |
| 196 | 198 | printf("Usage : miniunz [-e] [-x] [-v] [-l] [-o] [-p password] file.zip [file_to_extr.] [-d extractdir]\n\n" \ |
| 197 | 199 | " -e Extract without pathname (junk paths)\n" \ |
| 198 | 200 | " -x Extract with pathname\n" \ |
| 199 | 201 | " -v list files\n" \ |
| @@ -201,11 +203,11 @@ | ||
| 201 | 203 | " -d directory to extract into\n" \ |
| 202 | 204 | " -o overwrite files without prompting\n" \ |
| 203 | 205 | " -p extract crypted file using password\n\n"); |
| 204 | 206 | } |
| 205 | 207 | |
| 206 | -void Display64BitsSize(ZPOS64_T n, int size_char) | |
| 208 | +static void Display64BitsSize(ZPOS64_T n, int size_char) | |
| 207 | 209 | { |
| 208 | 210 | /* to avoid compatibility problem , we do here the conversion */ |
| 209 | 211 | char number[21]; |
| 210 | 212 | int offset=19; |
| 211 | 213 | int pos_string = 19; |
| @@ -229,11 +231,11 @@ | ||
| 229 | 231 | } |
| 230 | 232 | |
| 231 | 233 | printf("%s",&number[pos_string]); |
| 232 | 234 | } |
| 233 | 235 | |
| 234 | -int do_list(uf) | |
| 236 | +static int do_list(uf) | |
| 235 | 237 | unzFile uf; |
| 236 | 238 | { |
| 237 | 239 | uLong i; |
| 238 | 240 | unz_global_info64 gi; |
| 239 | 241 | int err; |
| @@ -307,11 +309,11 @@ | ||
| 307 | 309 | |
| 308 | 310 | return 0; |
| 309 | 311 | } |
| 310 | 312 | |
| 311 | 313 | |
| 312 | -int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password) | |
| 314 | +static int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password) | |
| 313 | 315 | unzFile uf; |
| 314 | 316 | const int* popt_extract_without_path; |
| 315 | 317 | int* popt_overwrite; |
| 316 | 318 | const char* password; |
| 317 | 319 | { |
| @@ -322,11 +324,10 @@ | ||
| 322 | 324 | FILE *fout=NULL; |
| 323 | 325 | void* buf; |
| 324 | 326 | uInt size_buf; |
| 325 | 327 | |
| 326 | 328 | unz_file_info64 file_info; |
| 327 | - uLong ratio=0; | |
| 328 | 329 | err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0); |
| 329 | 330 | |
| 330 | 331 | if (err!=UNZ_OK) |
| 331 | 332 | { |
| 332 | 333 | printf("error %d with zipfile in unzGetCurrentFileInfo\n",err); |
| @@ -437,11 +438,11 @@ | ||
| 437 | 438 | { |
| 438 | 439 | printf("error %d with zipfile in unzReadCurrentFile\n",err); |
| 439 | 440 | break; |
| 440 | 441 | } |
| 441 | 442 | if (err>0) |
| 442 | - if (fwrite(buf,err,1,fout)!=1) | |
| 443 | + if (fwrite(buf,(unsigned)err,1,fout)!=1) | |
| 443 | 444 | { |
| 444 | 445 | printf("error in writing extracted file\n"); |
| 445 | 446 | err=UNZ_ERRNO; |
| 446 | 447 | break; |
| 447 | 448 | } |
| @@ -470,20 +471,19 @@ | ||
| 470 | 471 | free(buf); |
| 471 | 472 | return err; |
| 472 | 473 | } |
| 473 | 474 | |
| 474 | 475 | |
| 475 | -int do_extract(uf,opt_extract_without_path,opt_overwrite,password) | |
| 476 | +static int do_extract(uf,opt_extract_without_path,opt_overwrite,password) | |
| 476 | 477 | unzFile uf; |
| 477 | 478 | int opt_extract_without_path; |
| 478 | 479 | int opt_overwrite; |
| 479 | 480 | const char* password; |
| 480 | 481 | { |
| 481 | 482 | uLong i; |
| 482 | 483 | unz_global_info64 gi; |
| 483 | 484 | int err; |
| 484 | - FILE* fout=NULL; | |
| 485 | 485 | |
| 486 | 486 | err = unzGetGlobalInfo64(uf,&gi); |
| 487 | 487 | if (err!=UNZ_OK) |
| 488 | 488 | printf("error %d with zipfile in unzGetGlobalInfo \n",err); |
| 489 | 489 | |
| @@ -506,18 +506,17 @@ | ||
| 506 | 506 | } |
| 507 | 507 | |
| 508 | 508 | return 0; |
| 509 | 509 | } |
| 510 | 510 | |
| 511 | -int do_extract_onefile(uf,filename,opt_extract_without_path,opt_overwrite,password) | |
| 511 | +static int do_extract_onefile(uf,filename,opt_extract_without_path,opt_overwrite,password) | |
| 512 | 512 | unzFile uf; |
| 513 | 513 | const char* filename; |
| 514 | 514 | int opt_extract_without_path; |
| 515 | 515 | int opt_overwrite; |
| 516 | 516 | const char* password; |
| 517 | 517 | { |
| 518 | - int err = UNZ_OK; | |
| 519 | 518 | if (unzLocateFile(uf,filename,CASESENSITIVITY)!=UNZ_OK) |
| 520 | 519 | { |
| 521 | 520 | printf("file %s not found in the zipfile\n",filename); |
| 522 | 521 | return 2; |
| 523 | 522 | } |
| 524 | 523 |
| --- compat/zlib/contrib/minizip/miniunz.c | |
| +++ compat/zlib/contrib/minizip/miniunz.c | |
| @@ -43,10 +43,11 @@ | |
| 43 | #include <stdlib.h> |
| 44 | #include <string.h> |
| 45 | #include <time.h> |
| 46 | #include <errno.h> |
| 47 | #include <fcntl.h> |
| 48 | |
| 49 | #ifdef _WIN32 |
| 50 | # include <direct.h> |
| 51 | # include <io.h> |
| 52 | #else |
| @@ -78,11 +79,11 @@ | |
| 78 | |
| 79 | /* change_file_date : change the date/time of a file |
| 80 | filename : the filename of the file where date/time must be modified |
| 81 | dosdate : the new date at the MSDos format (4 bytes) |
| 82 | tmu_date : the SAME new date at the tm_unz format */ |
| 83 | void change_file_date(filename,dosdate,tmu_date) |
| 84 | const char *filename; |
| 85 | uLong dosdate; |
| 86 | tm_unz tmu_date; |
| 87 | { |
| 88 | #ifdef _WIN32 |
| @@ -95,11 +96,12 @@ | |
| 95 | DosDateTimeToFileTime((WORD)(dosdate>>16),(WORD)dosdate,&ftLocal); |
| 96 | LocalFileTimeToFileTime(&ftLocal,&ftm); |
| 97 | SetFileTime(hFile,&ftm,&ftLastAcc,&ftm); |
| 98 | CloseHandle(hFile); |
| 99 | #else |
| 100 | #ifdef unix || __APPLE__ |
| 101 | struct utimbuf ut; |
| 102 | struct tm newdate; |
| 103 | newdate.tm_sec = tmu_date.tm_sec; |
| 104 | newdate.tm_min=tmu_date.tm_min; |
| 105 | newdate.tm_hour=tmu_date.tm_hour; |
| @@ -119,11 +121,11 @@ | |
| 119 | |
| 120 | |
| 121 | /* mymkdir and change_file_date are not 100 % portable |
| 122 | As I don't know well Unix, I wait feedback for the unix portion */ |
| 123 | |
| 124 | int mymkdir(dirname) |
| 125 | const char* dirname; |
| 126 | { |
| 127 | int ret=0; |
| 128 | #ifdef _WIN32 |
| 129 | ret = _mkdir(dirname); |
| @@ -133,18 +135,18 @@ | |
| 133 | ret = mkdir (dirname,0775); |
| 134 | #endif |
| 135 | return ret; |
| 136 | } |
| 137 | |
| 138 | int makedir (newdir) |
| 139 | char *newdir; |
| 140 | { |
| 141 | char *buffer ; |
| 142 | char *p; |
| 143 | int len = (int)strlen(newdir); |
| 144 | |
| 145 | if (len <= 0) |
| 146 | return 0; |
| 147 | |
| 148 | buffer = (char*)malloc(len+1); |
| 149 | if (buffer==NULL) |
| 150 | { |
| @@ -183,17 +185,17 @@ | |
| 183 | } |
| 184 | free(buffer); |
| 185 | return 1; |
| 186 | } |
| 187 | |
| 188 | void do_banner() |
| 189 | { |
| 190 | printf("MiniUnz 1.01b, demo of zLib + Unz package written by Gilles Vollant\n"); |
| 191 | printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n"); |
| 192 | } |
| 193 | |
| 194 | void do_help() |
| 195 | { |
| 196 | printf("Usage : miniunz [-e] [-x] [-v] [-l] [-o] [-p password] file.zip [file_to_extr.] [-d extractdir]\n\n" \ |
| 197 | " -e Extract without pathname (junk paths)\n" \ |
| 198 | " -x Extract with pathname\n" \ |
| 199 | " -v list files\n" \ |
| @@ -201,11 +203,11 @@ | |
| 201 | " -d directory to extract into\n" \ |
| 202 | " -o overwrite files without prompting\n" \ |
| 203 | " -p extract crypted file using password\n\n"); |
| 204 | } |
| 205 | |
| 206 | void Display64BitsSize(ZPOS64_T n, int size_char) |
| 207 | { |
| 208 | /* to avoid compatibility problem , we do here the conversion */ |
| 209 | char number[21]; |
| 210 | int offset=19; |
| 211 | int pos_string = 19; |
| @@ -229,11 +231,11 @@ | |
| 229 | } |
| 230 | |
| 231 | printf("%s",&number[pos_string]); |
| 232 | } |
| 233 | |
| 234 | int do_list(uf) |
| 235 | unzFile uf; |
| 236 | { |
| 237 | uLong i; |
| 238 | unz_global_info64 gi; |
| 239 | int err; |
| @@ -307,11 +309,11 @@ | |
| 307 | |
| 308 | return 0; |
| 309 | } |
| 310 | |
| 311 | |
| 312 | int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password) |
| 313 | unzFile uf; |
| 314 | const int* popt_extract_without_path; |
| 315 | int* popt_overwrite; |
| 316 | const char* password; |
| 317 | { |
| @@ -322,11 +324,10 @@ | |
| 322 | FILE *fout=NULL; |
| 323 | void* buf; |
| 324 | uInt size_buf; |
| 325 | |
| 326 | unz_file_info64 file_info; |
| 327 | uLong ratio=0; |
| 328 | err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0); |
| 329 | |
| 330 | if (err!=UNZ_OK) |
| 331 | { |
| 332 | printf("error %d with zipfile in unzGetCurrentFileInfo\n",err); |
| @@ -437,11 +438,11 @@ | |
| 437 | { |
| 438 | printf("error %d with zipfile in unzReadCurrentFile\n",err); |
| 439 | break; |
| 440 | } |
| 441 | if (err>0) |
| 442 | if (fwrite(buf,err,1,fout)!=1) |
| 443 | { |
| 444 | printf("error in writing extracted file\n"); |
| 445 | err=UNZ_ERRNO; |
| 446 | break; |
| 447 | } |
| @@ -470,20 +471,19 @@ | |
| 470 | free(buf); |
| 471 | return err; |
| 472 | } |
| 473 | |
| 474 | |
| 475 | int do_extract(uf,opt_extract_without_path,opt_overwrite,password) |
| 476 | unzFile uf; |
| 477 | int opt_extract_without_path; |
| 478 | int opt_overwrite; |
| 479 | const char* password; |
| 480 | { |
| 481 | uLong i; |
| 482 | unz_global_info64 gi; |
| 483 | int err; |
| 484 | FILE* fout=NULL; |
| 485 | |
| 486 | err = unzGetGlobalInfo64(uf,&gi); |
| 487 | if (err!=UNZ_OK) |
| 488 | printf("error %d with zipfile in unzGetGlobalInfo \n",err); |
| 489 | |
| @@ -506,18 +506,17 @@ | |
| 506 | } |
| 507 | |
| 508 | return 0; |
| 509 | } |
| 510 | |
| 511 | int do_extract_onefile(uf,filename,opt_extract_without_path,opt_overwrite,password) |
| 512 | unzFile uf; |
| 513 | const char* filename; |
| 514 | int opt_extract_without_path; |
| 515 | int opt_overwrite; |
| 516 | const char* password; |
| 517 | { |
| 518 | int err = UNZ_OK; |
| 519 | if (unzLocateFile(uf,filename,CASESENSITIVITY)!=UNZ_OK) |
| 520 | { |
| 521 | printf("file %s not found in the zipfile\n",filename); |
| 522 | return 2; |
| 523 | } |
| 524 |
| --- compat/zlib/contrib/minizip/miniunz.c | |
| +++ compat/zlib/contrib/minizip/miniunz.c | |
| @@ -43,10 +43,11 @@ | |
| 43 | #include <stdlib.h> |
| 44 | #include <string.h> |
| 45 | #include <time.h> |
| 46 | #include <errno.h> |
| 47 | #include <fcntl.h> |
| 48 | #include <sys/stat.h> |
| 49 | |
| 50 | #ifdef _WIN32 |
| 51 | # include <direct.h> |
| 52 | # include <io.h> |
| 53 | #else |
| @@ -78,11 +79,11 @@ | |
| 79 | |
| 80 | /* change_file_date : change the date/time of a file |
| 81 | filename : the filename of the file where date/time must be modified |
| 82 | dosdate : the new date at the MSDos format (4 bytes) |
| 83 | tmu_date : the SAME new date at the tm_unz format */ |
| 84 | static void change_file_date(filename,dosdate,tmu_date) |
| 85 | const char *filename; |
| 86 | uLong dosdate; |
| 87 | tm_unz tmu_date; |
| 88 | { |
| 89 | #ifdef _WIN32 |
| @@ -95,11 +96,12 @@ | |
| 96 | DosDateTimeToFileTime((WORD)(dosdate>>16),(WORD)dosdate,&ftLocal); |
| 97 | LocalFileTimeToFileTime(&ftLocal,&ftm); |
| 98 | SetFileTime(hFile,&ftm,&ftLastAcc,&ftm); |
| 99 | CloseHandle(hFile); |
| 100 | #else |
| 101 | #if defined(unix) || defined(__APPLE__) |
| 102 | (void)dosdate; |
| 103 | struct utimbuf ut; |
| 104 | struct tm newdate; |
| 105 | newdate.tm_sec = tmu_date.tm_sec; |
| 106 | newdate.tm_min=tmu_date.tm_min; |
| 107 | newdate.tm_hour=tmu_date.tm_hour; |
| @@ -119,11 +121,11 @@ | |
| 121 | |
| 122 | |
| 123 | /* mymkdir and change_file_date are not 100 % portable |
| 124 | As I don't know well Unix, I wait feedback for the unix portion */ |
| 125 | |
| 126 | static int mymkdir(dirname) |
| 127 | const char* dirname; |
| 128 | { |
| 129 | int ret=0; |
| 130 | #ifdef _WIN32 |
| 131 | ret = _mkdir(dirname); |
| @@ -133,18 +135,18 @@ | |
| 135 | ret = mkdir (dirname,0775); |
| 136 | #endif |
| 137 | return ret; |
| 138 | } |
| 139 | |
| 140 | static int makedir (newdir) |
| 141 | const char *newdir; |
| 142 | { |
| 143 | char *buffer ; |
| 144 | char *p; |
| 145 | size_t len = strlen(newdir); |
| 146 | |
| 147 | if (len == 0) |
| 148 | return 0; |
| 149 | |
| 150 | buffer = (char*)malloc(len+1); |
| 151 | if (buffer==NULL) |
| 152 | { |
| @@ -183,17 +185,17 @@ | |
| 185 | } |
| 186 | free(buffer); |
| 187 | return 1; |
| 188 | } |
| 189 | |
| 190 | static void do_banner() |
| 191 | { |
| 192 | printf("MiniUnz 1.01b, demo of zLib + Unz package written by Gilles Vollant\n"); |
| 193 | printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n"); |
| 194 | } |
| 195 | |
| 196 | static void do_help() |
| 197 | { |
| 198 | printf("Usage : miniunz [-e] [-x] [-v] [-l] [-o] [-p password] file.zip [file_to_extr.] [-d extractdir]\n\n" \ |
| 199 | " -e Extract without pathname (junk paths)\n" \ |
| 200 | " -x Extract with pathname\n" \ |
| 201 | " -v list files\n" \ |
| @@ -201,11 +203,11 @@ | |
| 203 | " -d directory to extract into\n" \ |
| 204 | " -o overwrite files without prompting\n" \ |
| 205 | " -p extract crypted file using password\n\n"); |
| 206 | } |
| 207 | |
| 208 | static void Display64BitsSize(ZPOS64_T n, int size_char) |
| 209 | { |
| 210 | /* to avoid compatibility problem , we do here the conversion */ |
| 211 | char number[21]; |
| 212 | int offset=19; |
| 213 | int pos_string = 19; |
| @@ -229,11 +231,11 @@ | |
| 231 | } |
| 232 | |
| 233 | printf("%s",&number[pos_string]); |
| 234 | } |
| 235 | |
| 236 | static int do_list(uf) |
| 237 | unzFile uf; |
| 238 | { |
| 239 | uLong i; |
| 240 | unz_global_info64 gi; |
| 241 | int err; |
| @@ -307,11 +309,11 @@ | |
| 309 | |
| 310 | return 0; |
| 311 | } |
| 312 | |
| 313 | |
| 314 | static int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password) |
| 315 | unzFile uf; |
| 316 | const int* popt_extract_without_path; |
| 317 | int* popt_overwrite; |
| 318 | const char* password; |
| 319 | { |
| @@ -322,11 +324,10 @@ | |
| 324 | FILE *fout=NULL; |
| 325 | void* buf; |
| 326 | uInt size_buf; |
| 327 | |
| 328 | unz_file_info64 file_info; |
| 329 | err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0); |
| 330 | |
| 331 | if (err!=UNZ_OK) |
| 332 | { |
| 333 | printf("error %d with zipfile in unzGetCurrentFileInfo\n",err); |
| @@ -437,11 +438,11 @@ | |
| 438 | { |
| 439 | printf("error %d with zipfile in unzReadCurrentFile\n",err); |
| 440 | break; |
| 441 | } |
| 442 | if (err>0) |
| 443 | if (fwrite(buf,(unsigned)err,1,fout)!=1) |
| 444 | { |
| 445 | printf("error in writing extracted file\n"); |
| 446 | err=UNZ_ERRNO; |
| 447 | break; |
| 448 | } |
| @@ -470,20 +471,19 @@ | |
| 471 | free(buf); |
| 472 | return err; |
| 473 | } |
| 474 | |
| 475 | |
| 476 | static int do_extract(uf,opt_extract_without_path,opt_overwrite,password) |
| 477 | unzFile uf; |
| 478 | int opt_extract_without_path; |
| 479 | int opt_overwrite; |
| 480 | const char* password; |
| 481 | { |
| 482 | uLong i; |
| 483 | unz_global_info64 gi; |
| 484 | int err; |
| 485 | |
| 486 | err = unzGetGlobalInfo64(uf,&gi); |
| 487 | if (err!=UNZ_OK) |
| 488 | printf("error %d with zipfile in unzGetGlobalInfo \n",err); |
| 489 | |
| @@ -506,18 +506,17 @@ | |
| 506 | } |
| 507 | |
| 508 | return 0; |
| 509 | } |
| 510 | |
| 511 | static int do_extract_onefile(uf,filename,opt_extract_without_path,opt_overwrite,password) |
| 512 | unzFile uf; |
| 513 | const char* filename; |
| 514 | int opt_extract_without_path; |
| 515 | int opt_overwrite; |
| 516 | const char* password; |
| 517 | { |
| 518 | if (unzLocateFile(uf,filename,CASESENSITIVITY)!=UNZ_OK) |
| 519 | { |
| 520 | printf("file %s not found in the zipfile\n",filename); |
| 521 | return 2; |
| 522 | } |
| 523 |
+21
-20
| --- compat/zlib/contrib/minizip/minizip.c | ||
| +++ compat/zlib/contrib/minizip/minizip.c | ||
| @@ -69,12 +69,12 @@ | ||
| 69 | 69 | |
| 70 | 70 | #define WRITEBUFFERSIZE (16384) |
| 71 | 71 | #define MAXFILENAME (256) |
| 72 | 72 | |
| 73 | 73 | #ifdef _WIN32 |
| 74 | -uLong filetime(f, tmzip, dt) | |
| 75 | - char *f; /* name of file to get info on */ | |
| 74 | +static int filetime(f, tmzip, dt) | |
| 75 | + const char *f; /* name of file to get info on */ | |
| 76 | 76 | tm_zip *tmzip; /* return value: access, modific. and creation times */ |
| 77 | 77 | uLong *dt; /* dostime */ |
| 78 | 78 | { |
| 79 | 79 | int ret = 0; |
| 80 | 80 | { |
| @@ -92,25 +92,26 @@ | ||
| 92 | 92 | } |
| 93 | 93 | } |
| 94 | 94 | return ret; |
| 95 | 95 | } |
| 96 | 96 | #else |
| 97 | -#ifdef unix || __APPLE__ | |
| 98 | -uLong filetime(f, tmzip, dt) | |
| 99 | - char *f; /* name of file to get info on */ | |
| 97 | +#if defined(unix) || defined(__APPLE__) | |
| 98 | +static int filetime(f, tmzip, dt) | |
| 99 | + const char *f; /* name of file to get info on */ | |
| 100 | 100 | tm_zip *tmzip; /* return value: access, modific. and creation times */ |
| 101 | 101 | uLong *dt; /* dostime */ |
| 102 | 102 | { |
| 103 | + (void)dt; | |
| 103 | 104 | int ret=0; |
| 104 | 105 | struct stat s; /* results of stat() */ |
| 105 | 106 | struct tm* filedate; |
| 106 | 107 | time_t tm_t=0; |
| 107 | 108 | |
| 108 | 109 | if (strcmp(f,"-")!=0) |
| 109 | 110 | { |
| 110 | 111 | char name[MAXFILENAME+1]; |
| 111 | - int len = strlen(f); | |
| 112 | + size_t len = strlen(f); | |
| 112 | 113 | if (len > MAXFILENAME) |
| 113 | 114 | len = MAXFILENAME; |
| 114 | 115 | |
| 115 | 116 | strncpy(name, f,MAXFILENAME-1); |
| 116 | 117 | /* strncpy doesnt append the trailing NULL, of the string is too long. */ |
| @@ -136,11 +137,11 @@ | ||
| 136 | 137 | |
| 137 | 138 | return ret; |
| 138 | 139 | } |
| 139 | 140 | #else |
| 140 | 141 | uLong filetime(f, tmzip, dt) |
| 141 | - char *f; /* name of file to get info on */ | |
| 142 | + const char *f; /* name of file to get info on */ | |
| 142 | 143 | tm_zip *tmzip; /* return value: access, modific. and creation times */ |
| 143 | 144 | uLong *dt; /* dostime */ |
| 144 | 145 | { |
| 145 | 146 | return 0; |
| 146 | 147 | } |
| @@ -148,11 +149,11 @@ | ||
| 148 | 149 | #endif |
| 149 | 150 | |
| 150 | 151 | |
| 151 | 152 | |
| 152 | 153 | |
| 153 | -int check_exist_file(filename) | |
| 154 | +static int check_exist_file(filename) | |
| 154 | 155 | const char* filename; |
| 155 | 156 | { |
| 156 | 157 | FILE* ftestexist; |
| 157 | 158 | int ret = 1; |
| 158 | 159 | ftestexist = FOPEN_FUNC(filename,"rb"); |
| @@ -161,17 +162,17 @@ | ||
| 161 | 162 | else |
| 162 | 163 | fclose(ftestexist); |
| 163 | 164 | return ret; |
| 164 | 165 | } |
| 165 | 166 | |
| 166 | -void do_banner() | |
| 167 | +static void do_banner() | |
| 167 | 168 | { |
| 168 | 169 | printf("MiniZip 1.1, demo of zLib + MiniZip64 package, written by Gilles Vollant\n"); |
| 169 | 170 | printf("more info on MiniZip at http://www.winimage.com/zLibDll/minizip.html\n\n"); |
| 170 | 171 | } |
| 171 | 172 | |
| 172 | -void do_help() | |
| 173 | +static void do_help() | |
| 173 | 174 | { |
| 174 | 175 | printf("Usage : minizip [-o] [-a] [-0 to -9] [-p password] [-j] file.zip [files_to_add]\n\n" \ |
| 175 | 176 | " -o Overwrite existing file.zip\n" \ |
| 176 | 177 | " -a Append to existing file.zip\n" \ |
| 177 | 178 | " -0 Store only\n" \ |
| @@ -180,11 +181,11 @@ | ||
| 180 | 181 | " -j exclude path. store only the file name.\n\n"); |
| 181 | 182 | } |
| 182 | 183 | |
| 183 | 184 | /* calculate the CRC32 of a file, |
| 184 | 185 | because to encrypt a file, we need known the CRC32 of the file before */ |
| 185 | -int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigned long* result_crc) | |
| 186 | +static int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigned long* result_crc) | |
| 186 | 187 | { |
| 187 | 188 | unsigned long calculate_crc=0; |
| 188 | 189 | int err=ZIP_OK; |
| 189 | 190 | FILE * fin = FOPEN_FUNC(filenameinzip,"rb"); |
| 190 | 191 | |
| @@ -197,20 +198,20 @@ | ||
| 197 | 198 | |
| 198 | 199 | if (err == ZIP_OK) |
| 199 | 200 | do |
| 200 | 201 | { |
| 201 | 202 | err = ZIP_OK; |
| 202 | - size_read = (int)fread(buf,1,size_buf,fin); | |
| 203 | + size_read = fread(buf,1,size_buf,fin); | |
| 203 | 204 | if (size_read < size_buf) |
| 204 | 205 | if (feof(fin)==0) |
| 205 | 206 | { |
| 206 | 207 | printf("error in reading %s\n",filenameinzip); |
| 207 | 208 | err = ZIP_ERRNO; |
| 208 | 209 | } |
| 209 | 210 | |
| 210 | 211 | if (size_read>0) |
| 211 | - calculate_crc = crc32(calculate_crc,buf,size_read); | |
| 212 | + calculate_crc = crc32_z(calculate_crc,buf,size_read); | |
| 212 | 213 | total_read += size_read; |
| 213 | 214 | |
| 214 | 215 | } while ((err == ZIP_OK) && (size_read>0)); |
| 215 | 216 | |
| 216 | 217 | if (fin) |
| @@ -219,20 +220,20 @@ | ||
| 219 | 220 | *result_crc=calculate_crc; |
| 220 | 221 | printf("file %s crc %lx\n", filenameinzip, calculate_crc); |
| 221 | 222 | return err; |
| 222 | 223 | } |
| 223 | 224 | |
| 224 | -int isLargeFile(const char* filename) | |
| 225 | +static int isLargeFile(const char* filename) | |
| 225 | 226 | { |
| 226 | 227 | int largeFile = 0; |
| 227 | 228 | ZPOS64_T pos = 0; |
| 228 | 229 | FILE* pFile = FOPEN_FUNC(filename, "rb"); |
| 229 | 230 | |
| 230 | 231 | if(pFile != NULL) |
| 231 | 232 | { |
| 232 | - int n = FSEEKO_FUNC(pFile, 0, SEEK_END); | |
| 233 | - pos = FTELLO_FUNC(pFile); | |
| 233 | + FSEEKO_FUNC(pFile, 0, SEEK_END); | |
| 234 | + pos = (ZPOS64_T)FTELLO_FUNC(pFile); | |
| 234 | 235 | |
| 235 | 236 | printf("File : %s is %lld bytes\n", filename, pos); |
| 236 | 237 | |
| 237 | 238 | if(pos >= 0xffffffff) |
| 238 | 239 | largeFile = 1; |
| @@ -253,11 +254,11 @@ | ||
| 253 | 254 | int opt_exclude_path=0; |
| 254 | 255 | int zipfilenamearg = 0; |
| 255 | 256 | char filename_try[MAXFILENAME+16]; |
| 256 | 257 | int zipok; |
| 257 | 258 | int err=0; |
| 258 | - int size_buf=0; | |
| 259 | + size_t size_buf=0; | |
| 259 | 260 | void* buf=NULL; |
| 260 | 261 | const char* password=NULL; |
| 261 | 262 | |
| 262 | 263 | |
| 263 | 264 | do_banner(); |
| @@ -394,11 +395,11 @@ | ||
| 394 | 395 | (argv[i][1]=='p') || (argv[i][1]=='P') || |
| 395 | 396 | ((argv[i][1]>='0') || (argv[i][1]<='9'))) && |
| 396 | 397 | (strlen(argv[i]) == 2))) |
| 397 | 398 | { |
| 398 | 399 | FILE * fin; |
| 399 | - int size_read; | |
| 400 | + size_t size_read; | |
| 400 | 401 | const char* filenameinzip = argv[i]; |
| 401 | 402 | const char *savefilenameinzip; |
| 402 | 403 | zip_fileinfo zi; |
| 403 | 404 | unsigned long crcFile=0; |
| 404 | 405 | int zip64 = 0; |
| @@ -470,21 +471,21 @@ | ||
| 470 | 471 | |
| 471 | 472 | if (err == ZIP_OK) |
| 472 | 473 | do |
| 473 | 474 | { |
| 474 | 475 | err = ZIP_OK; |
| 475 | - size_read = (int)fread(buf,1,size_buf,fin); | |
| 476 | + size_read = fread(buf,1,size_buf,fin); | |
| 476 | 477 | if (size_read < size_buf) |
| 477 | 478 | if (feof(fin)==0) |
| 478 | 479 | { |
| 479 | 480 | printf("error in reading %s\n",filenameinzip); |
| 480 | 481 | err = ZIP_ERRNO; |
| 481 | 482 | } |
| 482 | 483 | |
| 483 | 484 | if (size_read>0) |
| 484 | 485 | { |
| 485 | - err = zipWriteInFileInZip (zf,buf,size_read); | |
| 486 | + err = zipWriteInFileInZip (zf,buf,(unsigned)size_read); | |
| 486 | 487 | if (err<0) |
| 487 | 488 | { |
| 488 | 489 | printf("error in writing %s in the zipfile\n", |
| 489 | 490 | filenameinzip); |
| 490 | 491 | } |
| 491 | 492 |
| --- compat/zlib/contrib/minizip/minizip.c | |
| +++ compat/zlib/contrib/minizip/minizip.c | |
| @@ -69,12 +69,12 @@ | |
| 69 | |
| 70 | #define WRITEBUFFERSIZE (16384) |
| 71 | #define MAXFILENAME (256) |
| 72 | |
| 73 | #ifdef _WIN32 |
| 74 | uLong filetime(f, tmzip, dt) |
| 75 | char *f; /* name of file to get info on */ |
| 76 | tm_zip *tmzip; /* return value: access, modific. and creation times */ |
| 77 | uLong *dt; /* dostime */ |
| 78 | { |
| 79 | int ret = 0; |
| 80 | { |
| @@ -92,25 +92,26 @@ | |
| 92 | } |
| 93 | } |
| 94 | return ret; |
| 95 | } |
| 96 | #else |
| 97 | #ifdef unix || __APPLE__ |
| 98 | uLong filetime(f, tmzip, dt) |
| 99 | char *f; /* name of file to get info on */ |
| 100 | tm_zip *tmzip; /* return value: access, modific. and creation times */ |
| 101 | uLong *dt; /* dostime */ |
| 102 | { |
| 103 | int ret=0; |
| 104 | struct stat s; /* results of stat() */ |
| 105 | struct tm* filedate; |
| 106 | time_t tm_t=0; |
| 107 | |
| 108 | if (strcmp(f,"-")!=0) |
| 109 | { |
| 110 | char name[MAXFILENAME+1]; |
| 111 | int len = strlen(f); |
| 112 | if (len > MAXFILENAME) |
| 113 | len = MAXFILENAME; |
| 114 | |
| 115 | strncpy(name, f,MAXFILENAME-1); |
| 116 | /* strncpy doesnt append the trailing NULL, of the string is too long. */ |
| @@ -136,11 +137,11 @@ | |
| 136 | |
| 137 | return ret; |
| 138 | } |
| 139 | #else |
| 140 | uLong filetime(f, tmzip, dt) |
| 141 | char *f; /* name of file to get info on */ |
| 142 | tm_zip *tmzip; /* return value: access, modific. and creation times */ |
| 143 | uLong *dt; /* dostime */ |
| 144 | { |
| 145 | return 0; |
| 146 | } |
| @@ -148,11 +149,11 @@ | |
| 148 | #endif |
| 149 | |
| 150 | |
| 151 | |
| 152 | |
| 153 | int check_exist_file(filename) |
| 154 | const char* filename; |
| 155 | { |
| 156 | FILE* ftestexist; |
| 157 | int ret = 1; |
| 158 | ftestexist = FOPEN_FUNC(filename,"rb"); |
| @@ -161,17 +162,17 @@ | |
| 161 | else |
| 162 | fclose(ftestexist); |
| 163 | return ret; |
| 164 | } |
| 165 | |
| 166 | void do_banner() |
| 167 | { |
| 168 | printf("MiniZip 1.1, demo of zLib + MiniZip64 package, written by Gilles Vollant\n"); |
| 169 | printf("more info on MiniZip at http://www.winimage.com/zLibDll/minizip.html\n\n"); |
| 170 | } |
| 171 | |
| 172 | void do_help() |
| 173 | { |
| 174 | printf("Usage : minizip [-o] [-a] [-0 to -9] [-p password] [-j] file.zip [files_to_add]\n\n" \ |
| 175 | " -o Overwrite existing file.zip\n" \ |
| 176 | " -a Append to existing file.zip\n" \ |
| 177 | " -0 Store only\n" \ |
| @@ -180,11 +181,11 @@ | |
| 180 | " -j exclude path. store only the file name.\n\n"); |
| 181 | } |
| 182 | |
| 183 | /* calculate the CRC32 of a file, |
| 184 | because to encrypt a file, we need known the CRC32 of the file before */ |
| 185 | int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigned long* result_crc) |
| 186 | { |
| 187 | unsigned long calculate_crc=0; |
| 188 | int err=ZIP_OK; |
| 189 | FILE * fin = FOPEN_FUNC(filenameinzip,"rb"); |
| 190 | |
| @@ -197,20 +198,20 @@ | |
| 197 | |
| 198 | if (err == ZIP_OK) |
| 199 | do |
| 200 | { |
| 201 | err = ZIP_OK; |
| 202 | size_read = (int)fread(buf,1,size_buf,fin); |
| 203 | if (size_read < size_buf) |
| 204 | if (feof(fin)==0) |
| 205 | { |
| 206 | printf("error in reading %s\n",filenameinzip); |
| 207 | err = ZIP_ERRNO; |
| 208 | } |
| 209 | |
| 210 | if (size_read>0) |
| 211 | calculate_crc = crc32(calculate_crc,buf,size_read); |
| 212 | total_read += size_read; |
| 213 | |
| 214 | } while ((err == ZIP_OK) && (size_read>0)); |
| 215 | |
| 216 | if (fin) |
| @@ -219,20 +220,20 @@ | |
| 219 | *result_crc=calculate_crc; |
| 220 | printf("file %s crc %lx\n", filenameinzip, calculate_crc); |
| 221 | return err; |
| 222 | } |
| 223 | |
| 224 | int isLargeFile(const char* filename) |
| 225 | { |
| 226 | int largeFile = 0; |
| 227 | ZPOS64_T pos = 0; |
| 228 | FILE* pFile = FOPEN_FUNC(filename, "rb"); |
| 229 | |
| 230 | if(pFile != NULL) |
| 231 | { |
| 232 | int n = FSEEKO_FUNC(pFile, 0, SEEK_END); |
| 233 | pos = FTELLO_FUNC(pFile); |
| 234 | |
| 235 | printf("File : %s is %lld bytes\n", filename, pos); |
| 236 | |
| 237 | if(pos >= 0xffffffff) |
| 238 | largeFile = 1; |
| @@ -253,11 +254,11 @@ | |
| 253 | int opt_exclude_path=0; |
| 254 | int zipfilenamearg = 0; |
| 255 | char filename_try[MAXFILENAME+16]; |
| 256 | int zipok; |
| 257 | int err=0; |
| 258 | int size_buf=0; |
| 259 | void* buf=NULL; |
| 260 | const char* password=NULL; |
| 261 | |
| 262 | |
| 263 | do_banner(); |
| @@ -394,11 +395,11 @@ | |
| 394 | (argv[i][1]=='p') || (argv[i][1]=='P') || |
| 395 | ((argv[i][1]>='0') || (argv[i][1]<='9'))) && |
| 396 | (strlen(argv[i]) == 2))) |
| 397 | { |
| 398 | FILE * fin; |
| 399 | int size_read; |
| 400 | const char* filenameinzip = argv[i]; |
| 401 | const char *savefilenameinzip; |
| 402 | zip_fileinfo zi; |
| 403 | unsigned long crcFile=0; |
| 404 | int zip64 = 0; |
| @@ -470,21 +471,21 @@ | |
| 470 | |
| 471 | if (err == ZIP_OK) |
| 472 | do |
| 473 | { |
| 474 | err = ZIP_OK; |
| 475 | size_read = (int)fread(buf,1,size_buf,fin); |
| 476 | if (size_read < size_buf) |
| 477 | if (feof(fin)==0) |
| 478 | { |
| 479 | printf("error in reading %s\n",filenameinzip); |
| 480 | err = ZIP_ERRNO; |
| 481 | } |
| 482 | |
| 483 | if (size_read>0) |
| 484 | { |
| 485 | err = zipWriteInFileInZip (zf,buf,size_read); |
| 486 | if (err<0) |
| 487 | { |
| 488 | printf("error in writing %s in the zipfile\n", |
| 489 | filenameinzip); |
| 490 | } |
| 491 |
| --- compat/zlib/contrib/minizip/minizip.c | |
| +++ compat/zlib/contrib/minizip/minizip.c | |
| @@ -69,12 +69,12 @@ | |
| 69 | |
| 70 | #define WRITEBUFFERSIZE (16384) |
| 71 | #define MAXFILENAME (256) |
| 72 | |
| 73 | #ifdef _WIN32 |
| 74 | static int filetime(f, tmzip, dt) |
| 75 | const char *f; /* name of file to get info on */ |
| 76 | tm_zip *tmzip; /* return value: access, modific. and creation times */ |
| 77 | uLong *dt; /* dostime */ |
| 78 | { |
| 79 | int ret = 0; |
| 80 | { |
| @@ -92,25 +92,26 @@ | |
| 92 | } |
| 93 | } |
| 94 | return ret; |
| 95 | } |
| 96 | #else |
| 97 | #if defined(unix) || defined(__APPLE__) |
| 98 | static int filetime(f, tmzip, dt) |
| 99 | const char *f; /* name of file to get info on */ |
| 100 | tm_zip *tmzip; /* return value: access, modific. and creation times */ |
| 101 | uLong *dt; /* dostime */ |
| 102 | { |
| 103 | (void)dt; |
| 104 | int ret=0; |
| 105 | struct stat s; /* results of stat() */ |
| 106 | struct tm* filedate; |
| 107 | time_t tm_t=0; |
| 108 | |
| 109 | if (strcmp(f,"-")!=0) |
| 110 | { |
| 111 | char name[MAXFILENAME+1]; |
| 112 | size_t len = strlen(f); |
| 113 | if (len > MAXFILENAME) |
| 114 | len = MAXFILENAME; |
| 115 | |
| 116 | strncpy(name, f,MAXFILENAME-1); |
| 117 | /* strncpy doesnt append the trailing NULL, of the string is too long. */ |
| @@ -136,11 +137,11 @@ | |
| 137 | |
| 138 | return ret; |
| 139 | } |
| 140 | #else |
| 141 | uLong filetime(f, tmzip, dt) |
| 142 | const char *f; /* name of file to get info on */ |
| 143 | tm_zip *tmzip; /* return value: access, modific. and creation times */ |
| 144 | uLong *dt; /* dostime */ |
| 145 | { |
| 146 | return 0; |
| 147 | } |
| @@ -148,11 +149,11 @@ | |
| 149 | #endif |
| 150 | |
| 151 | |
| 152 | |
| 153 | |
| 154 | static int check_exist_file(filename) |
| 155 | const char* filename; |
| 156 | { |
| 157 | FILE* ftestexist; |
| 158 | int ret = 1; |
| 159 | ftestexist = FOPEN_FUNC(filename,"rb"); |
| @@ -161,17 +162,17 @@ | |
| 162 | else |
| 163 | fclose(ftestexist); |
| 164 | return ret; |
| 165 | } |
| 166 | |
| 167 | static void do_banner() |
| 168 | { |
| 169 | printf("MiniZip 1.1, demo of zLib + MiniZip64 package, written by Gilles Vollant\n"); |
| 170 | printf("more info on MiniZip at http://www.winimage.com/zLibDll/minizip.html\n\n"); |
| 171 | } |
| 172 | |
| 173 | static void do_help() |
| 174 | { |
| 175 | printf("Usage : minizip [-o] [-a] [-0 to -9] [-p password] [-j] file.zip [files_to_add]\n\n" \ |
| 176 | " -o Overwrite existing file.zip\n" \ |
| 177 | " -a Append to existing file.zip\n" \ |
| 178 | " -0 Store only\n" \ |
| @@ -180,11 +181,11 @@ | |
| 181 | " -j exclude path. store only the file name.\n\n"); |
| 182 | } |
| 183 | |
| 184 | /* calculate the CRC32 of a file, |
| 185 | because to encrypt a file, we need known the CRC32 of the file before */ |
| 186 | static int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigned long* result_crc) |
| 187 | { |
| 188 | unsigned long calculate_crc=0; |
| 189 | int err=ZIP_OK; |
| 190 | FILE * fin = FOPEN_FUNC(filenameinzip,"rb"); |
| 191 | |
| @@ -197,20 +198,20 @@ | |
| 198 | |
| 199 | if (err == ZIP_OK) |
| 200 | do |
| 201 | { |
| 202 | err = ZIP_OK; |
| 203 | size_read = fread(buf,1,size_buf,fin); |
| 204 | if (size_read < size_buf) |
| 205 | if (feof(fin)==0) |
| 206 | { |
| 207 | printf("error in reading %s\n",filenameinzip); |
| 208 | err = ZIP_ERRNO; |
| 209 | } |
| 210 | |
| 211 | if (size_read>0) |
| 212 | calculate_crc = crc32_z(calculate_crc,buf,size_read); |
| 213 | total_read += size_read; |
| 214 | |
| 215 | } while ((err == ZIP_OK) && (size_read>0)); |
| 216 | |
| 217 | if (fin) |
| @@ -219,20 +220,20 @@ | |
| 220 | *result_crc=calculate_crc; |
| 221 | printf("file %s crc %lx\n", filenameinzip, calculate_crc); |
| 222 | return err; |
| 223 | } |
| 224 | |
| 225 | static int isLargeFile(const char* filename) |
| 226 | { |
| 227 | int largeFile = 0; |
| 228 | ZPOS64_T pos = 0; |
| 229 | FILE* pFile = FOPEN_FUNC(filename, "rb"); |
| 230 | |
| 231 | if(pFile != NULL) |
| 232 | { |
| 233 | FSEEKO_FUNC(pFile, 0, SEEK_END); |
| 234 | pos = (ZPOS64_T)FTELLO_FUNC(pFile); |
| 235 | |
| 236 | printf("File : %s is %lld bytes\n", filename, pos); |
| 237 | |
| 238 | if(pos >= 0xffffffff) |
| 239 | largeFile = 1; |
| @@ -253,11 +254,11 @@ | |
| 254 | int opt_exclude_path=0; |
| 255 | int zipfilenamearg = 0; |
| 256 | char filename_try[MAXFILENAME+16]; |
| 257 | int zipok; |
| 258 | int err=0; |
| 259 | size_t size_buf=0; |
| 260 | void* buf=NULL; |
| 261 | const char* password=NULL; |
| 262 | |
| 263 | |
| 264 | do_banner(); |
| @@ -394,11 +395,11 @@ | |
| 395 | (argv[i][1]=='p') || (argv[i][1]=='P') || |
| 396 | ((argv[i][1]>='0') || (argv[i][1]<='9'))) && |
| 397 | (strlen(argv[i]) == 2))) |
| 398 | { |
| 399 | FILE * fin; |
| 400 | size_t size_read; |
| 401 | const char* filenameinzip = argv[i]; |
| 402 | const char *savefilenameinzip; |
| 403 | zip_fileinfo zi; |
| 404 | unsigned long crcFile=0; |
| 405 | int zip64 = 0; |
| @@ -470,21 +471,21 @@ | |
| 471 | |
| 472 | if (err == ZIP_OK) |
| 473 | do |
| 474 | { |
| 475 | err = ZIP_OK; |
| 476 | size_read = fread(buf,1,size_buf,fin); |
| 477 | if (size_read < size_buf) |
| 478 | if (feof(fin)==0) |
| 479 | { |
| 480 | printf("error in reading %s\n",filenameinzip); |
| 481 | err = ZIP_ERRNO; |
| 482 | } |
| 483 | |
| 484 | if (size_read>0) |
| 485 | { |
| 486 | err = zipWriteInFileInZip (zf,buf,(unsigned)size_read); |
| 487 | if (err<0) |
| 488 | { |
| 489 | printf("error in writing %s in the zipfile\n", |
| 490 | filenameinzip); |
| 491 | } |
| 492 |
+17
-14
| --- compat/zlib/contrib/minizip/unzip.c | ||
| +++ compat/zlib/contrib/minizip/unzip.c | ||
| @@ -453,11 +453,11 @@ | ||
| 453 | 453 | |
| 454 | 454 | for (i=(int)uReadSize-3; (i--)>0;) |
| 455 | 455 | if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && |
| 456 | 456 | ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) |
| 457 | 457 | { |
| 458 | - uPosFound = uReadPos+i; | |
| 458 | + uPosFound = uReadPos+(unsigned)i; | |
| 459 | 459 | break; |
| 460 | 460 | } |
| 461 | 461 | |
| 462 | 462 | if (uPosFound!=0) |
| 463 | 463 | break; |
| @@ -521,11 +521,11 @@ | ||
| 521 | 521 | |
| 522 | 522 | for (i=(int)uReadSize-3; (i--)>0;) |
| 523 | 523 | if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && |
| 524 | 524 | ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07)) |
| 525 | 525 | { |
| 526 | - uPosFound = uReadPos+i; | |
| 526 | + uPosFound = uReadPos+(unsigned)i; | |
| 527 | 527 | break; |
| 528 | 528 | } |
| 529 | 529 | |
| 530 | 530 | if (uPosFound!=0) |
| 531 | 531 | break; |
| @@ -851,17 +851,17 @@ | ||
| 851 | 851 | */ |
| 852 | 852 | local void unz64local_DosDateToTmuDate (ZPOS64_T ulDosDate, tm_unz* ptm) |
| 853 | 853 | { |
| 854 | 854 | ZPOS64_T uDate; |
| 855 | 855 | uDate = (ZPOS64_T)(ulDosDate>>16); |
| 856 | - ptm->tm_mday = (uInt)(uDate&0x1f) ; | |
| 857 | - ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ; | |
| 858 | - ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ; | |
| 856 | + ptm->tm_mday = (int)(uDate&0x1f) ; | |
| 857 | + ptm->tm_mon = (int)((((uDate)&0x1E0)/0x20)-1) ; | |
| 858 | + ptm->tm_year = (int)(((uDate&0x0FE00)/0x0200)+1980) ; | |
| 859 | 859 | |
| 860 | - ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800); | |
| 861 | - ptm->tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ; | |
| 862 | - ptm->tm_sec = (uInt) (2*(ulDosDate&0x1f)) ; | |
| 860 | + ptm->tm_hour = (int) ((ulDosDate &0xF800)/0x800); | |
| 861 | + ptm->tm_min = (int) ((ulDosDate&0x7E0)/0x20) ; | |
| 862 | + ptm->tm_sec = (int) (2*(ulDosDate&0x1f)) ; | |
| 863 | 863 | } |
| 864 | 864 | |
| 865 | 865 | /* |
| 866 | 866 | Get Info about the current file in the zipfile, with internal only info |
| 867 | 867 | */ |
| @@ -991,11 +991,11 @@ | ||
| 991 | 991 | else |
| 992 | 992 | uSizeRead = extraFieldBufferSize; |
| 993 | 993 | |
| 994 | 994 | if (lSeek!=0) |
| 995 | 995 | { |
| 996 | - if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) | |
| 996 | + if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) | |
| 997 | 997 | lSeek=0; |
| 998 | 998 | else |
| 999 | 999 | err=UNZ_ERRNO; |
| 1000 | 1000 | } |
| 1001 | 1001 | |
| @@ -1016,11 +1016,11 @@ | ||
| 1016 | 1016 | // since lSeek now points to after the extra field we need to move back |
| 1017 | 1017 | lSeek -= file_info.size_file_extra; |
| 1018 | 1018 | |
| 1019 | 1019 | if (lSeek!=0) |
| 1020 | 1020 | { |
| 1021 | - if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) | |
| 1021 | + if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) | |
| 1022 | 1022 | lSeek=0; |
| 1023 | 1023 | else |
| 1024 | 1024 | err=UNZ_ERRNO; |
| 1025 | 1025 | } |
| 1026 | 1026 | |
| @@ -1088,11 +1088,11 @@ | ||
| 1088 | 1088 | else |
| 1089 | 1089 | uSizeRead = commentBufferSize; |
| 1090 | 1090 | |
| 1091 | 1091 | if (lSeek!=0) |
| 1092 | 1092 | { |
| 1093 | - if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) | |
| 1093 | + if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) | |
| 1094 | 1094 | lSeek=0; |
| 1095 | 1095 | else |
| 1096 | 1096 | err=UNZ_ERRNO; |
| 1097 | 1097 | } |
| 1098 | 1098 | |
| @@ -1765,11 +1765,11 @@ | ||
| 1765 | 1765 | { |
| 1766 | 1766 | uInt uDoCopy,i ; |
| 1767 | 1767 | |
| 1768 | 1768 | if ((pfile_in_zip_read_info->stream.avail_in == 0) && |
| 1769 | 1769 | (pfile_in_zip_read_info->rest_read_compressed == 0)) |
| 1770 | - return (iRead==0) ? UNZ_EOF : iRead; | |
| 1770 | + return (iRead==0) ? UNZ_EOF : (int)iRead; | |
| 1771 | 1771 | |
| 1772 | 1772 | if (pfile_in_zip_read_info->stream.avail_out < |
| 1773 | 1773 | pfile_in_zip_read_info->stream.avail_in) |
| 1774 | 1774 | uDoCopy = pfile_in_zip_read_info->stream.avail_out ; |
| 1775 | 1775 | else |
| @@ -1855,10 +1855,13 @@ | ||
| 1855 | 1855 | |
| 1856 | 1856 | if ((err>=0) && (pfile_in_zip_read_info->stream.msg!=NULL)) |
| 1857 | 1857 | err = Z_DATA_ERROR; |
| 1858 | 1858 | |
| 1859 | 1859 | uTotalOutAfter = pfile_in_zip_read_info->stream.total_out; |
| 1860 | + /* Detect overflow, because z_stream.total_out is uLong (32 bits) */ | |
| 1861 | + if (uTotalOutAfter<uTotalOutBefore) | |
| 1862 | + uTotalOutAfter += 1LL << 32; /* Add maximum value of uLong + 1 */ | |
| 1860 | 1863 | uOutThis = uTotalOutAfter-uTotalOutBefore; |
| 1861 | 1864 | |
| 1862 | 1865 | pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis; |
| 1863 | 1866 | |
| 1864 | 1867 | pfile_in_zip_read_info->crc32 = |
| @@ -1869,18 +1872,18 @@ | ||
| 1869 | 1872 | uOutThis; |
| 1870 | 1873 | |
| 1871 | 1874 | iRead += (uInt)(uTotalOutAfter - uTotalOutBefore); |
| 1872 | 1875 | |
| 1873 | 1876 | if (err==Z_STREAM_END) |
| 1874 | - return (iRead==0) ? UNZ_EOF : iRead; | |
| 1877 | + return (iRead==0) ? UNZ_EOF : (int)iRead; | |
| 1875 | 1878 | if (err!=Z_OK) |
| 1876 | 1879 | break; |
| 1877 | 1880 | } |
| 1878 | 1881 | } |
| 1879 | 1882 | |
| 1880 | 1883 | if (err==Z_OK) |
| 1881 | - return iRead; | |
| 1884 | + return (int)iRead; | |
| 1882 | 1885 | return err; |
| 1883 | 1886 | } |
| 1884 | 1887 | |
| 1885 | 1888 | |
| 1886 | 1889 | /* |
| 1887 | 1890 |
| --- compat/zlib/contrib/minizip/unzip.c | |
| +++ compat/zlib/contrib/minizip/unzip.c | |
| @@ -453,11 +453,11 @@ | |
| 453 | |
| 454 | for (i=(int)uReadSize-3; (i--)>0;) |
| 455 | if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && |
| 456 | ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) |
| 457 | { |
| 458 | uPosFound = uReadPos+i; |
| 459 | break; |
| 460 | } |
| 461 | |
| 462 | if (uPosFound!=0) |
| 463 | break; |
| @@ -521,11 +521,11 @@ | |
| 521 | |
| 522 | for (i=(int)uReadSize-3; (i--)>0;) |
| 523 | if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && |
| 524 | ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07)) |
| 525 | { |
| 526 | uPosFound = uReadPos+i; |
| 527 | break; |
| 528 | } |
| 529 | |
| 530 | if (uPosFound!=0) |
| 531 | break; |
| @@ -851,17 +851,17 @@ | |
| 851 | */ |
| 852 | local void unz64local_DosDateToTmuDate (ZPOS64_T ulDosDate, tm_unz* ptm) |
| 853 | { |
| 854 | ZPOS64_T uDate; |
| 855 | uDate = (ZPOS64_T)(ulDosDate>>16); |
| 856 | ptm->tm_mday = (uInt)(uDate&0x1f) ; |
| 857 | ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ; |
| 858 | ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ; |
| 859 | |
| 860 | ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800); |
| 861 | ptm->tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ; |
| 862 | ptm->tm_sec = (uInt) (2*(ulDosDate&0x1f)) ; |
| 863 | } |
| 864 | |
| 865 | /* |
| 866 | Get Info about the current file in the zipfile, with internal only info |
| 867 | */ |
| @@ -991,11 +991,11 @@ | |
| 991 | else |
| 992 | uSizeRead = extraFieldBufferSize; |
| 993 | |
| 994 | if (lSeek!=0) |
| 995 | { |
| 996 | if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) |
| 997 | lSeek=0; |
| 998 | else |
| 999 | err=UNZ_ERRNO; |
| 1000 | } |
| 1001 | |
| @@ -1016,11 +1016,11 @@ | |
| 1016 | // since lSeek now points to after the extra field we need to move back |
| 1017 | lSeek -= file_info.size_file_extra; |
| 1018 | |
| 1019 | if (lSeek!=0) |
| 1020 | { |
| 1021 | if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) |
| 1022 | lSeek=0; |
| 1023 | else |
| 1024 | err=UNZ_ERRNO; |
| 1025 | } |
| 1026 | |
| @@ -1088,11 +1088,11 @@ | |
| 1088 | else |
| 1089 | uSizeRead = commentBufferSize; |
| 1090 | |
| 1091 | if (lSeek!=0) |
| 1092 | { |
| 1093 | if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) |
| 1094 | lSeek=0; |
| 1095 | else |
| 1096 | err=UNZ_ERRNO; |
| 1097 | } |
| 1098 | |
| @@ -1765,11 +1765,11 @@ | |
| 1765 | { |
| 1766 | uInt uDoCopy,i ; |
| 1767 | |
| 1768 | if ((pfile_in_zip_read_info->stream.avail_in == 0) && |
| 1769 | (pfile_in_zip_read_info->rest_read_compressed == 0)) |
| 1770 | return (iRead==0) ? UNZ_EOF : iRead; |
| 1771 | |
| 1772 | if (pfile_in_zip_read_info->stream.avail_out < |
| 1773 | pfile_in_zip_read_info->stream.avail_in) |
| 1774 | uDoCopy = pfile_in_zip_read_info->stream.avail_out ; |
| 1775 | else |
| @@ -1855,10 +1855,13 @@ | |
| 1855 | |
| 1856 | if ((err>=0) && (pfile_in_zip_read_info->stream.msg!=NULL)) |
| 1857 | err = Z_DATA_ERROR; |
| 1858 | |
| 1859 | uTotalOutAfter = pfile_in_zip_read_info->stream.total_out; |
| 1860 | uOutThis = uTotalOutAfter-uTotalOutBefore; |
| 1861 | |
| 1862 | pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis; |
| 1863 | |
| 1864 | pfile_in_zip_read_info->crc32 = |
| @@ -1869,18 +1872,18 @@ | |
| 1869 | uOutThis; |
| 1870 | |
| 1871 | iRead += (uInt)(uTotalOutAfter - uTotalOutBefore); |
| 1872 | |
| 1873 | if (err==Z_STREAM_END) |
| 1874 | return (iRead==0) ? UNZ_EOF : iRead; |
| 1875 | if (err!=Z_OK) |
| 1876 | break; |
| 1877 | } |
| 1878 | } |
| 1879 | |
| 1880 | if (err==Z_OK) |
| 1881 | return iRead; |
| 1882 | return err; |
| 1883 | } |
| 1884 | |
| 1885 | |
| 1886 | /* |
| 1887 |
| --- compat/zlib/contrib/minizip/unzip.c | |
| +++ compat/zlib/contrib/minizip/unzip.c | |
| @@ -453,11 +453,11 @@ | |
| 453 | |
| 454 | for (i=(int)uReadSize-3; (i--)>0;) |
| 455 | if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && |
| 456 | ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) |
| 457 | { |
| 458 | uPosFound = uReadPos+(unsigned)i; |
| 459 | break; |
| 460 | } |
| 461 | |
| 462 | if (uPosFound!=0) |
| 463 | break; |
| @@ -521,11 +521,11 @@ | |
| 521 | |
| 522 | for (i=(int)uReadSize-3; (i--)>0;) |
| 523 | if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && |
| 524 | ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07)) |
| 525 | { |
| 526 | uPosFound = uReadPos+(unsigned)i; |
| 527 | break; |
| 528 | } |
| 529 | |
| 530 | if (uPosFound!=0) |
| 531 | break; |
| @@ -851,17 +851,17 @@ | |
| 851 | */ |
| 852 | local void unz64local_DosDateToTmuDate (ZPOS64_T ulDosDate, tm_unz* ptm) |
| 853 | { |
| 854 | ZPOS64_T uDate; |
| 855 | uDate = (ZPOS64_T)(ulDosDate>>16); |
| 856 | ptm->tm_mday = (int)(uDate&0x1f) ; |
| 857 | ptm->tm_mon = (int)((((uDate)&0x1E0)/0x20)-1) ; |
| 858 | ptm->tm_year = (int)(((uDate&0x0FE00)/0x0200)+1980) ; |
| 859 | |
| 860 | ptm->tm_hour = (int) ((ulDosDate &0xF800)/0x800); |
| 861 | ptm->tm_min = (int) ((ulDosDate&0x7E0)/0x20) ; |
| 862 | ptm->tm_sec = (int) (2*(ulDosDate&0x1f)) ; |
| 863 | } |
| 864 | |
| 865 | /* |
| 866 | Get Info about the current file in the zipfile, with internal only info |
| 867 | */ |
| @@ -991,11 +991,11 @@ | |
| 991 | else |
| 992 | uSizeRead = extraFieldBufferSize; |
| 993 | |
| 994 | if (lSeek!=0) |
| 995 | { |
| 996 | if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) |
| 997 | lSeek=0; |
| 998 | else |
| 999 | err=UNZ_ERRNO; |
| 1000 | } |
| 1001 | |
| @@ -1016,11 +1016,11 @@ | |
| 1016 | // since lSeek now points to after the extra field we need to move back |
| 1017 | lSeek -= file_info.size_file_extra; |
| 1018 | |
| 1019 | if (lSeek!=0) |
| 1020 | { |
| 1021 | if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) |
| 1022 | lSeek=0; |
| 1023 | else |
| 1024 | err=UNZ_ERRNO; |
| 1025 | } |
| 1026 | |
| @@ -1088,11 +1088,11 @@ | |
| 1088 | else |
| 1089 | uSizeRead = commentBufferSize; |
| 1090 | |
| 1091 | if (lSeek!=0) |
| 1092 | { |
| 1093 | if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) |
| 1094 | lSeek=0; |
| 1095 | else |
| 1096 | err=UNZ_ERRNO; |
| 1097 | } |
| 1098 | |
| @@ -1765,11 +1765,11 @@ | |
| 1765 | { |
| 1766 | uInt uDoCopy,i ; |
| 1767 | |
| 1768 | if ((pfile_in_zip_read_info->stream.avail_in == 0) && |
| 1769 | (pfile_in_zip_read_info->rest_read_compressed == 0)) |
| 1770 | return (iRead==0) ? UNZ_EOF : (int)iRead; |
| 1771 | |
| 1772 | if (pfile_in_zip_read_info->stream.avail_out < |
| 1773 | pfile_in_zip_read_info->stream.avail_in) |
| 1774 | uDoCopy = pfile_in_zip_read_info->stream.avail_out ; |
| 1775 | else |
| @@ -1855,10 +1855,13 @@ | |
| 1855 | |
| 1856 | if ((err>=0) && (pfile_in_zip_read_info->stream.msg!=NULL)) |
| 1857 | err = Z_DATA_ERROR; |
| 1858 | |
| 1859 | uTotalOutAfter = pfile_in_zip_read_info->stream.total_out; |
| 1860 | /* Detect overflow, because z_stream.total_out is uLong (32 bits) */ |
| 1861 | if (uTotalOutAfter<uTotalOutBefore) |
| 1862 | uTotalOutAfter += 1LL << 32; /* Add maximum value of uLong + 1 */ |
| 1863 | uOutThis = uTotalOutAfter-uTotalOutBefore; |
| 1864 | |
| 1865 | pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis; |
| 1866 | |
| 1867 | pfile_in_zip_read_info->crc32 = |
| @@ -1869,18 +1872,18 @@ | |
| 1872 | uOutThis; |
| 1873 | |
| 1874 | iRead += (uInt)(uTotalOutAfter - uTotalOutBefore); |
| 1875 | |
| 1876 | if (err==Z_STREAM_END) |
| 1877 | return (iRead==0) ? UNZ_EOF : (int)iRead; |
| 1878 | if (err!=Z_OK) |
| 1879 | break; |
| 1880 | } |
| 1881 | } |
| 1882 | |
| 1883 | if (err==Z_OK) |
| 1884 | return (int)iRead; |
| 1885 | return err; |
| 1886 | } |
| 1887 | |
| 1888 | |
| 1889 | /* |
| 1890 |
| --- compat/zlib/contrib/minizip/unzip.h | ||
| +++ compat/zlib/contrib/minizip/unzip.h | ||
| @@ -81,16 +81,16 @@ | ||
| 81 | 81 | #define UNZ_CRCERROR (-105) |
| 82 | 82 | |
| 83 | 83 | /* tm_unz contain date/time info */ |
| 84 | 84 | typedef struct tm_unz_s |
| 85 | 85 | { |
| 86 | - uInt tm_sec; /* seconds after the minute - [0,59] */ | |
| 87 | - uInt tm_min; /* minutes after the hour - [0,59] */ | |
| 88 | - uInt tm_hour; /* hours since midnight - [0,23] */ | |
| 89 | - uInt tm_mday; /* day of the month - [1,31] */ | |
| 90 | - uInt tm_mon; /* months since January - [0,11] */ | |
| 91 | - uInt tm_year; /* years - [1980..2044] */ | |
| 86 | + int tm_sec; /* seconds after the minute - [0,59] */ | |
| 87 | + int tm_min; /* minutes after the hour - [0,59] */ | |
| 88 | + int tm_hour; /* hours since midnight - [0,23] */ | |
| 89 | + int tm_mday; /* day of the month - [1,31] */ | |
| 90 | + int tm_mon; /* months since January - [0,11] */ | |
| 91 | + int tm_year; /* years - [1980..2044] */ | |
| 92 | 92 | } tm_unz; |
| 93 | 93 | |
| 94 | 94 | /* unz_global_info structure contain global data about the ZIPfile |
| 95 | 95 | These data comes from the end of central dir */ |
| 96 | 96 | typedef struct unz_global_info64_s |
| 97 | 97 |
| --- compat/zlib/contrib/minizip/unzip.h | |
| +++ compat/zlib/contrib/minizip/unzip.h | |
| @@ -81,16 +81,16 @@ | |
| 81 | #define UNZ_CRCERROR (-105) |
| 82 | |
| 83 | /* tm_unz contain date/time info */ |
| 84 | typedef struct tm_unz_s |
| 85 | { |
| 86 | uInt tm_sec; /* seconds after the minute - [0,59] */ |
| 87 | uInt tm_min; /* minutes after the hour - [0,59] */ |
| 88 | uInt tm_hour; /* hours since midnight - [0,23] */ |
| 89 | uInt tm_mday; /* day of the month - [1,31] */ |
| 90 | uInt tm_mon; /* months since January - [0,11] */ |
| 91 | uInt tm_year; /* years - [1980..2044] */ |
| 92 | } tm_unz; |
| 93 | |
| 94 | /* unz_global_info structure contain global data about the ZIPfile |
| 95 | These data comes from the end of central dir */ |
| 96 | typedef struct unz_global_info64_s |
| 97 |
| --- compat/zlib/contrib/minizip/unzip.h | |
| +++ compat/zlib/contrib/minizip/unzip.h | |
| @@ -81,16 +81,16 @@ | |
| 81 | #define UNZ_CRCERROR (-105) |
| 82 | |
| 83 | /* tm_unz contain date/time info */ |
| 84 | typedef struct tm_unz_s |
| 85 | { |
| 86 | int tm_sec; /* seconds after the minute - [0,59] */ |
| 87 | int tm_min; /* minutes after the hour - [0,59] */ |
| 88 | int tm_hour; /* hours since midnight - [0,23] */ |
| 89 | int tm_mday; /* day of the month - [1,31] */ |
| 90 | int tm_mon; /* months since January - [0,11] */ |
| 91 | int tm_year; /* years - [1980..2044] */ |
| 92 | } tm_unz; |
| 93 | |
| 94 | /* unz_global_info structure contain global data about the ZIPfile |
| 95 | These data comes from the end of central dir */ |
| 96 | typedef struct unz_global_info64_s |
| 97 |
+18
-18
| --- compat/zlib/contrib/minizip/zip.c | ||
| +++ compat/zlib/contrib/minizip/zip.c | ||
| @@ -156,11 +156,11 @@ | ||
| 156 | 156 | ZPOS64_T totalCompressedData; |
| 157 | 157 | ZPOS64_T totalUncompressedData; |
| 158 | 158 | #ifndef NOCRYPT |
| 159 | 159 | unsigned long keys[3]; /* keys defining the pseudo-random sequence */ |
| 160 | 160 | const z_crc_t* pcrc_32_tab; |
| 161 | - int crypt_header_size; | |
| 161 | + unsigned crypt_header_size; | |
| 162 | 162 | #endif |
| 163 | 163 | } curfile64_info; |
| 164 | 164 | |
| 165 | 165 | typedef struct |
| 166 | 166 | { |
| @@ -299,11 +299,11 @@ | ||
| 299 | 299 | { |
| 300 | 300 | buf[n] = 0xff; |
| 301 | 301 | } |
| 302 | 302 | } |
| 303 | 303 | |
| 304 | - if (ZWRITE64(*pzlib_filefunc_def,filestream,buf,nbByte)!=(uLong)nbByte) | |
| 304 | + if (ZWRITE64(*pzlib_filefunc_def,filestream,buf,(uLong)nbByte)!=(uLong)nbByte) | |
| 305 | 305 | return ZIP_ERRNO; |
| 306 | 306 | else |
| 307 | 307 | return ZIP_OK; |
| 308 | 308 | } |
| 309 | 309 | |
| @@ -335,12 +335,12 @@ | ||
| 335 | 335 | if (year>=1980) |
| 336 | 336 | year-=1980; |
| 337 | 337 | else if (year>=80) |
| 338 | 338 | year-=80; |
| 339 | 339 | return |
| 340 | - (uLong) (((ptm->tm_mday) + (32 * (ptm->tm_mon+1)) + (512 * year)) << 16) | | |
| 341 | - ((ptm->tm_sec/2) + (32* ptm->tm_min) + (2048 * (uLong)ptm->tm_hour)); | |
| 340 | + (uLong) (((uLong)(ptm->tm_mday) + (32 * (uLong)(ptm->tm_mon+1)) + (512 * year)) << 16) | | |
| 341 | + (((uLong)ptm->tm_sec/2) + (32 * (uLong)ptm->tm_min) + (2048 * (uLong)ptm->tm_hour)); | |
| 342 | 342 | } |
| 343 | 343 | |
| 344 | 344 | |
| 345 | 345 | /****************************************************************************/ |
| 346 | 346 | |
| @@ -520,16 +520,16 @@ | ||
| 520 | 520 | |
| 521 | 521 | for (i=(int)uReadSize-3; (i--)>0;) |
| 522 | 522 | if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && |
| 523 | 523 | ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) |
| 524 | 524 | { |
| 525 | - uPosFound = uReadPos+i; | |
| 525 | + uPosFound = uReadPos+(unsigned)i; | |
| 526 | 526 | break; |
| 527 | 527 | } |
| 528 | 528 | |
| 529 | - if (uPosFound!=0) | |
| 530 | - break; | |
| 529 | + if (uPosFound!=0) | |
| 530 | + break; | |
| 531 | 531 | } |
| 532 | 532 | TRYFREE(buf); |
| 533 | 533 | return uPosFound; |
| 534 | 534 | } |
| 535 | 535 | |
| @@ -584,11 +584,11 @@ | ||
| 584 | 584 | for (i=(int)uReadSize-3; (i--)>0;) |
| 585 | 585 | { |
| 586 | 586 | // Signature "0x07064b50" Zip64 end of central directory locater |
| 587 | 587 | if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07)) |
| 588 | 588 | { |
| 589 | - uPosFound = uReadPos+i; | |
| 589 | + uPosFound = uReadPos+(unsigned)i; | |
| 590 | 590 | break; |
| 591 | 591 | } |
| 592 | 592 | } |
| 593 | 593 | |
| 594 | 594 | if (uPosFound!=0) |
| @@ -635,11 +635,11 @@ | ||
| 635 | 635 | return 0; |
| 636 | 636 | |
| 637 | 637 | return relativeOffset; |
| 638 | 638 | } |
| 639 | 639 | |
| 640 | -int LoadCentralDirectoryRecord(zip64_internal* pziinit) | |
| 640 | +local int LoadCentralDirectoryRecord(zip64_internal* pziinit) | |
| 641 | 641 | { |
| 642 | 642 | int err=ZIP_OK; |
| 643 | 643 | ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ |
| 644 | 644 | |
| 645 | 645 | ZPOS64_T size_central_dir; /* size of the central directory */ |
| @@ -953,11 +953,11 @@ | ||
| 953 | 953 | extern zipFile ZEXPORT zipOpen64 (const void* pathname, int append) |
| 954 | 954 | { |
| 955 | 955 | return zipOpen3(pathname,append,NULL,NULL); |
| 956 | 956 | } |
| 957 | 957 | |
| 958 | -int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local) | |
| 958 | +local int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local) | |
| 959 | 959 | { |
| 960 | 960 | /* write the local header */ |
| 961 | 961 | int err; |
| 962 | 962 | uInt size_filename = (uInt)strlen(filename); |
| 963 | 963 | uInt size_extrafield = size_extrafield_local; |
| @@ -1032,12 +1032,12 @@ | ||
| 1032 | 1032 | ZPOS64_T UncompressedSize = 0; |
| 1033 | 1033 | |
| 1034 | 1034 | // Remember position of Zip64 extended info for the local file header. (needed when we update size after done with file) |
| 1035 | 1035 | zi->ci.pos_zip64extrainfo = ZTELL64(zi->z_filefunc,zi->filestream); |
| 1036 | 1036 | |
| 1037 | - err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)HeaderID,2); | |
| 1038 | - err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)DataSize,2); | |
| 1037 | + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)HeaderID,2); | |
| 1038 | + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)DataSize,2); | |
| 1039 | 1039 | |
| 1040 | 1040 | err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)UncompressedSize,8); |
| 1041 | 1041 | err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)CompressedSize,8); |
| 1042 | 1042 | } |
| 1043 | 1043 | |
| @@ -1514,11 +1514,11 @@ | ||
| 1514 | 1514 | extern int ZEXPORT zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompressed_size, uLong crc32) |
| 1515 | 1515 | { |
| 1516 | 1516 | zip64_internal* zi; |
| 1517 | 1517 | ZPOS64_T compressed_size; |
| 1518 | 1518 | uLong invalidValue = 0xffffffff; |
| 1519 | - short datasize = 0; | |
| 1519 | + unsigned datasize = 0; | |
| 1520 | 1520 | int err=ZIP_OK; |
| 1521 | 1521 | |
| 1522 | 1522 | if (file == NULL) |
| 1523 | 1523 | return ZIP_PARAMERROR; |
| 1524 | 1524 | zi = (zip64_internal*)file; |
| @@ -1750,11 +1750,11 @@ | ||
| 1750 | 1750 | extern int ZEXPORT zipCloseFileInZip (zipFile file) |
| 1751 | 1751 | { |
| 1752 | 1752 | return zipCloseFileInZipRaw (file,0,0); |
| 1753 | 1753 | } |
| 1754 | 1754 | |
| 1755 | -int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip) | |
| 1755 | +local int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip) | |
| 1756 | 1756 | { |
| 1757 | 1757 | int err = ZIP_OK; |
| 1758 | 1758 | ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writing_offset; |
| 1759 | 1759 | |
| 1760 | 1760 | err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDLOCHEADERMAGIC,4); |
| @@ -1772,11 +1772,11 @@ | ||
| 1772 | 1772 | err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)1,4); |
| 1773 | 1773 | |
| 1774 | 1774 | return err; |
| 1775 | 1775 | } |
| 1776 | 1776 | |
| 1777 | -int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip) | |
| 1777 | +local int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip) | |
| 1778 | 1778 | { |
| 1779 | 1779 | int err = ZIP_OK; |
| 1780 | 1780 | |
| 1781 | 1781 | uLong Zip64DataSize = 44; |
| 1782 | 1782 | |
| @@ -1811,11 +1811,11 @@ | ||
| 1811 | 1811 | ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writing_offset; |
| 1812 | 1812 | err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (ZPOS64_T)pos,8); |
| 1813 | 1813 | } |
| 1814 | 1814 | return err; |
| 1815 | 1815 | } |
| 1816 | -int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip) | |
| 1816 | +local int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip) | |
| 1817 | 1817 | { |
| 1818 | 1818 | int err = ZIP_OK; |
| 1819 | 1819 | |
| 1820 | 1820 | /*signature*/ |
| 1821 | 1821 | err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4); |
| @@ -1859,11 +1859,11 @@ | ||
| 1859 | 1859 | } |
| 1860 | 1860 | |
| 1861 | 1861 | return err; |
| 1862 | 1862 | } |
| 1863 | 1863 | |
| 1864 | -int Write_GlobalComment(zip64_internal* zi, const char* global_comment) | |
| 1864 | +local int Write_GlobalComment(zip64_internal* zi, const char* global_comment) | |
| 1865 | 1865 | { |
| 1866 | 1866 | int err = ZIP_OK; |
| 1867 | 1867 | uInt size_global_comment = 0; |
| 1868 | 1868 | |
| 1869 | 1869 | if(global_comment != NULL) |
| @@ -1960,11 +1960,11 @@ | ||
| 1960 | 1960 | int retVal = ZIP_OK; |
| 1961 | 1961 | |
| 1962 | 1962 | if(pData == NULL || *dataLen < 4) |
| 1963 | 1963 | return ZIP_PARAMERROR; |
| 1964 | 1964 | |
| 1965 | - pNewHeader = (char*)ALLOC(*dataLen); | |
| 1965 | + pNewHeader = (char*)ALLOC((unsigned)*dataLen); | |
| 1966 | 1966 | pTmp = pNewHeader; |
| 1967 | 1967 | |
| 1968 | 1968 | while(p < (pData + *dataLen)) |
| 1969 | 1969 | { |
| 1970 | 1970 | header = *(short*)p; |
| 1971 | 1971 |
| --- compat/zlib/contrib/minizip/zip.c | |
| +++ compat/zlib/contrib/minizip/zip.c | |
| @@ -156,11 +156,11 @@ | |
| 156 | ZPOS64_T totalCompressedData; |
| 157 | ZPOS64_T totalUncompressedData; |
| 158 | #ifndef NOCRYPT |
| 159 | unsigned long keys[3]; /* keys defining the pseudo-random sequence */ |
| 160 | const z_crc_t* pcrc_32_tab; |
| 161 | int crypt_header_size; |
| 162 | #endif |
| 163 | } curfile64_info; |
| 164 | |
| 165 | typedef struct |
| 166 | { |
| @@ -299,11 +299,11 @@ | |
| 299 | { |
| 300 | buf[n] = 0xff; |
| 301 | } |
| 302 | } |
| 303 | |
| 304 | if (ZWRITE64(*pzlib_filefunc_def,filestream,buf,nbByte)!=(uLong)nbByte) |
| 305 | return ZIP_ERRNO; |
| 306 | else |
| 307 | return ZIP_OK; |
| 308 | } |
| 309 | |
| @@ -335,12 +335,12 @@ | |
| 335 | if (year>=1980) |
| 336 | year-=1980; |
| 337 | else if (year>=80) |
| 338 | year-=80; |
| 339 | return |
| 340 | (uLong) (((ptm->tm_mday) + (32 * (ptm->tm_mon+1)) + (512 * year)) << 16) | |
| 341 | ((ptm->tm_sec/2) + (32* ptm->tm_min) + (2048 * (uLong)ptm->tm_hour)); |
| 342 | } |
| 343 | |
| 344 | |
| 345 | /****************************************************************************/ |
| 346 | |
| @@ -520,16 +520,16 @@ | |
| 520 | |
| 521 | for (i=(int)uReadSize-3; (i--)>0;) |
| 522 | if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && |
| 523 | ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) |
| 524 | { |
| 525 | uPosFound = uReadPos+i; |
| 526 | break; |
| 527 | } |
| 528 | |
| 529 | if (uPosFound!=0) |
| 530 | break; |
| 531 | } |
| 532 | TRYFREE(buf); |
| 533 | return uPosFound; |
| 534 | } |
| 535 | |
| @@ -584,11 +584,11 @@ | |
| 584 | for (i=(int)uReadSize-3; (i--)>0;) |
| 585 | { |
| 586 | // Signature "0x07064b50" Zip64 end of central directory locater |
| 587 | if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07)) |
| 588 | { |
| 589 | uPosFound = uReadPos+i; |
| 590 | break; |
| 591 | } |
| 592 | } |
| 593 | |
| 594 | if (uPosFound!=0) |
| @@ -635,11 +635,11 @@ | |
| 635 | return 0; |
| 636 | |
| 637 | return relativeOffset; |
| 638 | } |
| 639 | |
| 640 | int LoadCentralDirectoryRecord(zip64_internal* pziinit) |
| 641 | { |
| 642 | int err=ZIP_OK; |
| 643 | ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ |
| 644 | |
| 645 | ZPOS64_T size_central_dir; /* size of the central directory */ |
| @@ -953,11 +953,11 @@ | |
| 953 | extern zipFile ZEXPORT zipOpen64 (const void* pathname, int append) |
| 954 | { |
| 955 | return zipOpen3(pathname,append,NULL,NULL); |
| 956 | } |
| 957 | |
| 958 | int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local) |
| 959 | { |
| 960 | /* write the local header */ |
| 961 | int err; |
| 962 | uInt size_filename = (uInt)strlen(filename); |
| 963 | uInt size_extrafield = size_extrafield_local; |
| @@ -1032,12 +1032,12 @@ | |
| 1032 | ZPOS64_T UncompressedSize = 0; |
| 1033 | |
| 1034 | // Remember position of Zip64 extended info for the local file header. (needed when we update size after done with file) |
| 1035 | zi->ci.pos_zip64extrainfo = ZTELL64(zi->z_filefunc,zi->filestream); |
| 1036 | |
| 1037 | err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)HeaderID,2); |
| 1038 | err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)DataSize,2); |
| 1039 | |
| 1040 | err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)UncompressedSize,8); |
| 1041 | err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)CompressedSize,8); |
| 1042 | } |
| 1043 | |
| @@ -1514,11 +1514,11 @@ | |
| 1514 | extern int ZEXPORT zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompressed_size, uLong crc32) |
| 1515 | { |
| 1516 | zip64_internal* zi; |
| 1517 | ZPOS64_T compressed_size; |
| 1518 | uLong invalidValue = 0xffffffff; |
| 1519 | short datasize = 0; |
| 1520 | int err=ZIP_OK; |
| 1521 | |
| 1522 | if (file == NULL) |
| 1523 | return ZIP_PARAMERROR; |
| 1524 | zi = (zip64_internal*)file; |
| @@ -1750,11 +1750,11 @@ | |
| 1750 | extern int ZEXPORT zipCloseFileInZip (zipFile file) |
| 1751 | { |
| 1752 | return zipCloseFileInZipRaw (file,0,0); |
| 1753 | } |
| 1754 | |
| 1755 | int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip) |
| 1756 | { |
| 1757 | int err = ZIP_OK; |
| 1758 | ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writing_offset; |
| 1759 | |
| 1760 | err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDLOCHEADERMAGIC,4); |
| @@ -1772,11 +1772,11 @@ | |
| 1772 | err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)1,4); |
| 1773 | |
| 1774 | return err; |
| 1775 | } |
| 1776 | |
| 1777 | int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip) |
| 1778 | { |
| 1779 | int err = ZIP_OK; |
| 1780 | |
| 1781 | uLong Zip64DataSize = 44; |
| 1782 | |
| @@ -1811,11 +1811,11 @@ | |
| 1811 | ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writing_offset; |
| 1812 | err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (ZPOS64_T)pos,8); |
| 1813 | } |
| 1814 | return err; |
| 1815 | } |
| 1816 | int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip) |
| 1817 | { |
| 1818 | int err = ZIP_OK; |
| 1819 | |
| 1820 | /*signature*/ |
| 1821 | err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4); |
| @@ -1859,11 +1859,11 @@ | |
| 1859 | } |
| 1860 | |
| 1861 | return err; |
| 1862 | } |
| 1863 | |
| 1864 | int Write_GlobalComment(zip64_internal* zi, const char* global_comment) |
| 1865 | { |
| 1866 | int err = ZIP_OK; |
| 1867 | uInt size_global_comment = 0; |
| 1868 | |
| 1869 | if(global_comment != NULL) |
| @@ -1960,11 +1960,11 @@ | |
| 1960 | int retVal = ZIP_OK; |
| 1961 | |
| 1962 | if(pData == NULL || *dataLen < 4) |
| 1963 | return ZIP_PARAMERROR; |
| 1964 | |
| 1965 | pNewHeader = (char*)ALLOC(*dataLen); |
| 1966 | pTmp = pNewHeader; |
| 1967 | |
| 1968 | while(p < (pData + *dataLen)) |
| 1969 | { |
| 1970 | header = *(short*)p; |
| 1971 |
| --- compat/zlib/contrib/minizip/zip.c | |
| +++ compat/zlib/contrib/minizip/zip.c | |
| @@ -156,11 +156,11 @@ | |
| 156 | ZPOS64_T totalCompressedData; |
| 157 | ZPOS64_T totalUncompressedData; |
| 158 | #ifndef NOCRYPT |
| 159 | unsigned long keys[3]; /* keys defining the pseudo-random sequence */ |
| 160 | const z_crc_t* pcrc_32_tab; |
| 161 | unsigned crypt_header_size; |
| 162 | #endif |
| 163 | } curfile64_info; |
| 164 | |
| 165 | typedef struct |
| 166 | { |
| @@ -299,11 +299,11 @@ | |
| 299 | { |
| 300 | buf[n] = 0xff; |
| 301 | } |
| 302 | } |
| 303 | |
| 304 | if (ZWRITE64(*pzlib_filefunc_def,filestream,buf,(uLong)nbByte)!=(uLong)nbByte) |
| 305 | return ZIP_ERRNO; |
| 306 | else |
| 307 | return ZIP_OK; |
| 308 | } |
| 309 | |
| @@ -335,12 +335,12 @@ | |
| 335 | if (year>=1980) |
| 336 | year-=1980; |
| 337 | else if (year>=80) |
| 338 | year-=80; |
| 339 | return |
| 340 | (uLong) (((uLong)(ptm->tm_mday) + (32 * (uLong)(ptm->tm_mon+1)) + (512 * year)) << 16) | |
| 341 | (((uLong)ptm->tm_sec/2) + (32 * (uLong)ptm->tm_min) + (2048 * (uLong)ptm->tm_hour)); |
| 342 | } |
| 343 | |
| 344 | |
| 345 | /****************************************************************************/ |
| 346 | |
| @@ -520,16 +520,16 @@ | |
| 520 | |
| 521 | for (i=(int)uReadSize-3; (i--)>0;) |
| 522 | if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && |
| 523 | ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) |
| 524 | { |
| 525 | uPosFound = uReadPos+(unsigned)i; |
| 526 | break; |
| 527 | } |
| 528 | |
| 529 | if (uPosFound!=0) |
| 530 | break; |
| 531 | } |
| 532 | TRYFREE(buf); |
| 533 | return uPosFound; |
| 534 | } |
| 535 | |
| @@ -584,11 +584,11 @@ | |
| 584 | for (i=(int)uReadSize-3; (i--)>0;) |
| 585 | { |
| 586 | // Signature "0x07064b50" Zip64 end of central directory locater |
| 587 | if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07)) |
| 588 | { |
| 589 | uPosFound = uReadPos+(unsigned)i; |
| 590 | break; |
| 591 | } |
| 592 | } |
| 593 | |
| 594 | if (uPosFound!=0) |
| @@ -635,11 +635,11 @@ | |
| 635 | return 0; |
| 636 | |
| 637 | return relativeOffset; |
| 638 | } |
| 639 | |
| 640 | local int LoadCentralDirectoryRecord(zip64_internal* pziinit) |
| 641 | { |
| 642 | int err=ZIP_OK; |
| 643 | ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ |
| 644 | |
| 645 | ZPOS64_T size_central_dir; /* size of the central directory */ |
| @@ -953,11 +953,11 @@ | |
| 953 | extern zipFile ZEXPORT zipOpen64 (const void* pathname, int append) |
| 954 | { |
| 955 | return zipOpen3(pathname,append,NULL,NULL); |
| 956 | } |
| 957 | |
| 958 | local int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local) |
| 959 | { |
| 960 | /* write the local header */ |
| 961 | int err; |
| 962 | uInt size_filename = (uInt)strlen(filename); |
| 963 | uInt size_extrafield = size_extrafield_local; |
| @@ -1032,12 +1032,12 @@ | |
| 1032 | ZPOS64_T UncompressedSize = 0; |
| 1033 | |
| 1034 | // Remember position of Zip64 extended info for the local file header. (needed when we update size after done with file) |
| 1035 | zi->ci.pos_zip64extrainfo = ZTELL64(zi->z_filefunc,zi->filestream); |
| 1036 | |
| 1037 | err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)HeaderID,2); |
| 1038 | err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)DataSize,2); |
| 1039 | |
| 1040 | err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)UncompressedSize,8); |
| 1041 | err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)CompressedSize,8); |
| 1042 | } |
| 1043 | |
| @@ -1514,11 +1514,11 @@ | |
| 1514 | extern int ZEXPORT zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompressed_size, uLong crc32) |
| 1515 | { |
| 1516 | zip64_internal* zi; |
| 1517 | ZPOS64_T compressed_size; |
| 1518 | uLong invalidValue = 0xffffffff; |
| 1519 | unsigned datasize = 0; |
| 1520 | int err=ZIP_OK; |
| 1521 | |
| 1522 | if (file == NULL) |
| 1523 | return ZIP_PARAMERROR; |
| 1524 | zi = (zip64_internal*)file; |
| @@ -1750,11 +1750,11 @@ | |
| 1750 | extern int ZEXPORT zipCloseFileInZip (zipFile file) |
| 1751 | { |
| 1752 | return zipCloseFileInZipRaw (file,0,0); |
| 1753 | } |
| 1754 | |
| 1755 | local int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip) |
| 1756 | { |
| 1757 | int err = ZIP_OK; |
| 1758 | ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writing_offset; |
| 1759 | |
| 1760 | err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDLOCHEADERMAGIC,4); |
| @@ -1772,11 +1772,11 @@ | |
| 1772 | err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)1,4); |
| 1773 | |
| 1774 | return err; |
| 1775 | } |
| 1776 | |
| 1777 | local int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip) |
| 1778 | { |
| 1779 | int err = ZIP_OK; |
| 1780 | |
| 1781 | uLong Zip64DataSize = 44; |
| 1782 | |
| @@ -1811,11 +1811,11 @@ | |
| 1811 | ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writing_offset; |
| 1812 | err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (ZPOS64_T)pos,8); |
| 1813 | } |
| 1814 | return err; |
| 1815 | } |
| 1816 | local int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip) |
| 1817 | { |
| 1818 | int err = ZIP_OK; |
| 1819 | |
| 1820 | /*signature*/ |
| 1821 | err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4); |
| @@ -1859,11 +1859,11 @@ | |
| 1859 | } |
| 1860 | |
| 1861 | return err; |
| 1862 | } |
| 1863 | |
| 1864 | local int Write_GlobalComment(zip64_internal* zi, const char* global_comment) |
| 1865 | { |
| 1866 | int err = ZIP_OK; |
| 1867 | uInt size_global_comment = 0; |
| 1868 | |
| 1869 | if(global_comment != NULL) |
| @@ -1960,11 +1960,11 @@ | |
| 1960 | int retVal = ZIP_OK; |
| 1961 | |
| 1962 | if(pData == NULL || *dataLen < 4) |
| 1963 | return ZIP_PARAMERROR; |
| 1964 | |
| 1965 | pNewHeader = (char*)ALLOC((unsigned)*dataLen); |
| 1966 | pTmp = pNewHeader; |
| 1967 | |
| 1968 | while(p < (pData + *dataLen)) |
| 1969 | { |
| 1970 | header = *(short*)p; |
| 1971 |
+11
-6
| --- compat/zlib/contrib/minizip/zip.h | ||
| +++ compat/zlib/contrib/minizip/zip.h | ||
| @@ -86,16 +86,16 @@ | ||
| 86 | 86 | /* default memLevel */ |
| 87 | 87 | |
| 88 | 88 | /* tm_zip contain date/time info */ |
| 89 | 89 | typedef struct tm_zip_s |
| 90 | 90 | { |
| 91 | - uInt tm_sec; /* seconds after the minute - [0,59] */ | |
| 92 | - uInt tm_min; /* minutes after the hour - [0,59] */ | |
| 93 | - uInt tm_hour; /* hours since midnight - [0,23] */ | |
| 94 | - uInt tm_mday; /* day of the month - [1,31] */ | |
| 95 | - uInt tm_mon; /* months since January - [0,11] */ | |
| 96 | - uInt tm_year; /* years - [1980..2044] */ | |
| 91 | + int tm_sec; /* seconds after the minute - [0,59] */ | |
| 92 | + int tm_min; /* minutes after the hour - [0,59] */ | |
| 93 | + int tm_hour; /* hours since midnight - [0,23] */ | |
| 94 | + int tm_mday; /* day of the month - [1,31] */ | |
| 95 | + int tm_mon; /* months since January - [0,11] */ | |
| 96 | + int tm_year; /* years - [1980..2044] */ | |
| 97 | 97 | } tm_zip; |
| 98 | 98 | |
| 99 | 99 | typedef struct |
| 100 | 100 | { |
| 101 | 101 | tm_zip tmz_date; /* date in understandable format */ |
| @@ -142,10 +142,15 @@ | ||
| 142 | 142 | extern zipFile ZEXPORT zipOpen2_64 OF((const void *pathname, |
| 143 | 143 | int append, |
| 144 | 144 | zipcharpc* globalcomment, |
| 145 | 145 | zlib_filefunc64_def* pzlib_filefunc_def)); |
| 146 | 146 | |
| 147 | +extern zipFile ZEXPORT zipOpen3 OF((const void *pathname, | |
| 148 | + int append, | |
| 149 | + zipcharpc* globalcomment, | |
| 150 | + zlib_filefunc64_32_def* pzlib_filefunc64_32_def)); | |
| 151 | + | |
| 147 | 152 | extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file, |
| 148 | 153 | const char* filename, |
| 149 | 154 | const zip_fileinfo* zipfi, |
| 150 | 155 | const void* extrafield_local, |
| 151 | 156 | uInt size_extrafield_local, |
| 152 | 157 |
| --- compat/zlib/contrib/minizip/zip.h | |
| +++ compat/zlib/contrib/minizip/zip.h | |
| @@ -86,16 +86,16 @@ | |
| 86 | /* default memLevel */ |
| 87 | |
| 88 | /* tm_zip contain date/time info */ |
| 89 | typedef struct tm_zip_s |
| 90 | { |
| 91 | uInt tm_sec; /* seconds after the minute - [0,59] */ |
| 92 | uInt tm_min; /* minutes after the hour - [0,59] */ |
| 93 | uInt tm_hour; /* hours since midnight - [0,23] */ |
| 94 | uInt tm_mday; /* day of the month - [1,31] */ |
| 95 | uInt tm_mon; /* months since January - [0,11] */ |
| 96 | uInt tm_year; /* years - [1980..2044] */ |
| 97 | } tm_zip; |
| 98 | |
| 99 | typedef struct |
| 100 | { |
| 101 | tm_zip tmz_date; /* date in understandable format */ |
| @@ -142,10 +142,15 @@ | |
| 142 | extern zipFile ZEXPORT zipOpen2_64 OF((const void *pathname, |
| 143 | int append, |
| 144 | zipcharpc* globalcomment, |
| 145 | zlib_filefunc64_def* pzlib_filefunc_def)); |
| 146 | |
| 147 | extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file, |
| 148 | const char* filename, |
| 149 | const zip_fileinfo* zipfi, |
| 150 | const void* extrafield_local, |
| 151 | uInt size_extrafield_local, |
| 152 |
| --- compat/zlib/contrib/minizip/zip.h | |
| +++ compat/zlib/contrib/minizip/zip.h | |
| @@ -86,16 +86,16 @@ | |
| 86 | /* default memLevel */ |
| 87 | |
| 88 | /* tm_zip contain date/time info */ |
| 89 | typedef struct tm_zip_s |
| 90 | { |
| 91 | int tm_sec; /* seconds after the minute - [0,59] */ |
| 92 | int tm_min; /* minutes after the hour - [0,59] */ |
| 93 | int tm_hour; /* hours since midnight - [0,23] */ |
| 94 | int tm_mday; /* day of the month - [1,31] */ |
| 95 | int tm_mon; /* months since January - [0,11] */ |
| 96 | int tm_year; /* years - [1980..2044] */ |
| 97 | } tm_zip; |
| 98 | |
| 99 | typedef struct |
| 100 | { |
| 101 | tm_zip tmz_date; /* date in understandable format */ |
| @@ -142,10 +142,15 @@ | |
| 142 | extern zipFile ZEXPORT zipOpen2_64 OF((const void *pathname, |
| 143 | int append, |
| 144 | zipcharpc* globalcomment, |
| 145 | zlib_filefunc64_def* pzlib_filefunc_def)); |
| 146 | |
| 147 | extern zipFile ZEXPORT zipOpen3 OF((const void *pathname, |
| 148 | int append, |
| 149 | zipcharpc* globalcomment, |
| 150 | zlib_filefunc64_32_def* pzlib_filefunc64_32_def)); |
| 151 | |
| 152 | extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file, |
| 153 | const char* filename, |
| 154 | const zip_fileinfo* zipfi, |
| 155 | const void* extrafield_local, |
| 156 | uInt size_extrafield_local, |
| 157 |
| --- compat/zlib/contrib/pascal/zlibpas.pas | ||
| +++ compat/zlib/contrib/pascal/zlibpas.pas | ||
| @@ -8,11 +8,11 @@ | ||
| 8 | 8 | unit zlibpas; |
| 9 | 9 | |
| 10 | 10 | interface |
| 11 | 11 | |
| 12 | 12 | const |
| 13 | - ZLIB_VERSION = '1.2.11'; | |
| 13 | + ZLIB_VERSION = '1.2.12'; | |
| 14 | 14 | ZLIB_VERNUM = $12a0; |
| 15 | 15 | |
| 16 | 16 | type |
| 17 | 17 | alloc_func = function(opaque: Pointer; items, size: Integer): Pointer; |
| 18 | 18 | cdecl; |
| 19 | 19 |
| --- compat/zlib/contrib/pascal/zlibpas.pas | |
| +++ compat/zlib/contrib/pascal/zlibpas.pas | |
| @@ -8,11 +8,11 @@ | |
| 8 | unit zlibpas; |
| 9 | |
| 10 | interface |
| 11 | |
| 12 | const |
| 13 | ZLIB_VERSION = '1.2.11'; |
| 14 | ZLIB_VERNUM = $12a0; |
| 15 | |
| 16 | type |
| 17 | alloc_func = function(opaque: Pointer; items, size: Integer): Pointer; |
| 18 | cdecl; |
| 19 |
| --- compat/zlib/contrib/pascal/zlibpas.pas | |
| +++ compat/zlib/contrib/pascal/zlibpas.pas | |
| @@ -8,11 +8,11 @@ | |
| 8 | unit zlibpas; |
| 9 | |
| 10 | interface |
| 11 | |
| 12 | const |
| 13 | ZLIB_VERSION = '1.2.12'; |
| 14 | ZLIB_VERNUM = $12a0; |
| 15 | |
| 16 | type |
| 17 | alloc_func = function(opaque: Pointer; items, size: Integer): Pointer; |
| 18 | cdecl; |
| 19 |
| --- compat/zlib/contrib/vstudio/readme.txt | ||
| +++ compat/zlib/contrib/vstudio/readme.txt | ||
| @@ -1,6 +1,6 @@ | ||
| 1 | -Building instructions for the DLL versions of Zlib 1.2.11 | |
| 1 | +Building instructions for the DLL versions of Zlib 1.2.12 | |
| 2 | 2 | ======================================================== |
| 3 | 3 | |
| 4 | 4 | This directory contains projects that build zlib and minizip using |
| 5 | 5 | Microsoft Visual C++ 9.0/10.0. |
| 6 | 6 | |
| 7 | 7 |
| --- compat/zlib/contrib/vstudio/readme.txt | |
| +++ compat/zlib/contrib/vstudio/readme.txt | |
| @@ -1,6 +1,6 @@ | |
| 1 | Building instructions for the DLL versions of Zlib 1.2.11 |
| 2 | ======================================================== |
| 3 | |
| 4 | This directory contains projects that build zlib and minizip using |
| 5 | Microsoft Visual C++ 9.0/10.0. |
| 6 | |
| 7 |
| --- compat/zlib/contrib/vstudio/readme.txt | |
| +++ compat/zlib/contrib/vstudio/readme.txt | |
| @@ -1,6 +1,6 @@ | |
| 1 | Building instructions for the DLL versions of Zlib 1.2.12 |
| 2 | ======================================================== |
| 3 | |
| 4 | This directory contains projects that build zlib and minizip using |
| 5 | Microsoft Visual C++ 9.0/10.0. |
| 6 | |
| 7 |
| --- compat/zlib/contrib/vstudio/vc10/zlib.rc | ||
| +++ compat/zlib/contrib/vstudio/vc10/zlib.rc | ||
| @@ -1,11 +1,11 @@ | ||
| 1 | 1 | #include <windows.h> |
| 2 | 2 | |
| 3 | 3 | #define IDR_VERSION1 1 |
| 4 | 4 | IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE |
| 5 | - FILEVERSION 1, 2, 11, 0 | |
| 6 | - PRODUCTVERSION 1, 2, 11, 0 | |
| 5 | + FILEVERSION 1, 2, 12, 0 | |
| 6 | + PRODUCTVERSION 1, 2, 12, 0 | |
| 7 | 7 | FILEFLAGSMASK VS_FFI_FILEFLAGSMASK |
| 8 | 8 | FILEFLAGS 0 |
| 9 | 9 | FILEOS VOS_DOS_WINDOWS32 |
| 10 | 10 | FILETYPE VFT_DLL |
| 11 | 11 | FILESUBTYPE 0 // not used |
| @@ -15,18 +15,18 @@ | ||
| 15 | 15 | BLOCK "040904E4" |
| 16 | 16 | //language ID = U.S. English, char set = Windows, Multilingual |
| 17 | 17 | |
| 18 | 18 | BEGIN |
| 19 | 19 | VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" |
| 20 | - VALUE "FileVersion", "1.2.11\0" | |
| 20 | + VALUE "FileVersion", "1.2.12\0" | |
| 21 | 21 | VALUE "InternalName", "zlib\0" |
| 22 | 22 | VALUE "OriginalFilename", "zlibwapi.dll\0" |
| 23 | 23 | VALUE "ProductName", "ZLib.DLL\0" |
| 24 | 24 | VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" |
| 25 | - VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0" | |
| 25 | + VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0" | |
| 26 | 26 | END |
| 27 | 27 | END |
| 28 | 28 | BLOCK "VarFileInfo" |
| 29 | 29 | BEGIN |
| 30 | 30 | VALUE "Translation", 0x0409, 1252 |
| 31 | 31 | END |
| 32 | 32 | END |
| 33 | 33 |
| --- compat/zlib/contrib/vstudio/vc10/zlib.rc | |
| +++ compat/zlib/contrib/vstudio/vc10/zlib.rc | |
| @@ -1,11 +1,11 @@ | |
| 1 | #include <windows.h> |
| 2 | |
| 3 | #define IDR_VERSION1 1 |
| 4 | IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE |
| 5 | FILEVERSION 1, 2, 11, 0 |
| 6 | PRODUCTVERSION 1, 2, 11, 0 |
| 7 | FILEFLAGSMASK VS_FFI_FILEFLAGSMASK |
| 8 | FILEFLAGS 0 |
| 9 | FILEOS VOS_DOS_WINDOWS32 |
| 10 | FILETYPE VFT_DLL |
| 11 | FILESUBTYPE 0 // not used |
| @@ -15,18 +15,18 @@ | |
| 15 | BLOCK "040904E4" |
| 16 | //language ID = U.S. English, char set = Windows, Multilingual |
| 17 | |
| 18 | BEGIN |
| 19 | VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" |
| 20 | VALUE "FileVersion", "1.2.11\0" |
| 21 | VALUE "InternalName", "zlib\0" |
| 22 | VALUE "OriginalFilename", "zlibwapi.dll\0" |
| 23 | VALUE "ProductName", "ZLib.DLL\0" |
| 24 | VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" |
| 25 | VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0" |
| 26 | END |
| 27 | END |
| 28 | BLOCK "VarFileInfo" |
| 29 | BEGIN |
| 30 | VALUE "Translation", 0x0409, 1252 |
| 31 | END |
| 32 | END |
| 33 |
| --- compat/zlib/contrib/vstudio/vc10/zlib.rc | |
| +++ compat/zlib/contrib/vstudio/vc10/zlib.rc | |
| @@ -1,11 +1,11 @@ | |
| 1 | #include <windows.h> |
| 2 | |
| 3 | #define IDR_VERSION1 1 |
| 4 | IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE |
| 5 | FILEVERSION 1, 2, 12, 0 |
| 6 | PRODUCTVERSION 1, 2, 12, 0 |
| 7 | FILEFLAGSMASK VS_FFI_FILEFLAGSMASK |
| 8 | FILEFLAGS 0 |
| 9 | FILEOS VOS_DOS_WINDOWS32 |
| 10 | FILETYPE VFT_DLL |
| 11 | FILESUBTYPE 0 // not used |
| @@ -15,18 +15,18 @@ | |
| 15 | BLOCK "040904E4" |
| 16 | //language ID = U.S. English, char set = Windows, Multilingual |
| 17 | |
| 18 | BEGIN |
| 19 | VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" |
| 20 | VALUE "FileVersion", "1.2.12\0" |
| 21 | VALUE "InternalName", "zlib\0" |
| 22 | VALUE "OriginalFilename", "zlibwapi.dll\0" |
| 23 | VALUE "ProductName", "ZLib.DLL\0" |
| 24 | VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" |
| 25 | VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0" |
| 26 | END |
| 27 | END |
| 28 | BLOCK "VarFileInfo" |
| 29 | BEGIN |
| 30 | VALUE "Translation", 0x0409, 1252 |
| 31 | END |
| 32 | END |
| 33 |
| --- compat/zlib/contrib/vstudio/vc10/zlibvc.def | ||
| +++ compat/zlib/contrib/vstudio/vc10/zlibvc.def | ||
| @@ -149,5 +149,10 @@ | ||
| 149 | 149 | gzfread @171 |
| 150 | 150 | gzfwrite @172 |
| 151 | 151 | deflateGetDictionary @173 |
| 152 | 152 | adler32_z @174 |
| 153 | 153 | crc32_z @175 |
| 154 | + | |
| 155 | +; zlib1 v1.2.12 added: | |
| 156 | + crc32_combine_gen @176 | |
| 157 | + crc32_combine_gen64 @177 | |
| 158 | + crc32_combine_op @178 | |
| 154 | 159 |
| --- compat/zlib/contrib/vstudio/vc10/zlibvc.def | |
| +++ compat/zlib/contrib/vstudio/vc10/zlibvc.def | |
| @@ -149,5 +149,10 @@ | |
| 149 | gzfread @171 |
| 150 | gzfwrite @172 |
| 151 | deflateGetDictionary @173 |
| 152 | adler32_z @174 |
| 153 | crc32_z @175 |
| 154 |
| --- compat/zlib/contrib/vstudio/vc10/zlibvc.def | |
| +++ compat/zlib/contrib/vstudio/vc10/zlibvc.def | |
| @@ -149,5 +149,10 @@ | |
| 149 | gzfread @171 |
| 150 | gzfwrite @172 |
| 151 | deflateGetDictionary @173 |
| 152 | adler32_z @174 |
| 153 | crc32_z @175 |
| 154 | |
| 155 | ; zlib1 v1.2.12 added: |
| 156 | crc32_combine_gen @176 |
| 157 | crc32_combine_gen64 @177 |
| 158 | crc32_combine_op @178 |
| 159 |
| --- compat/zlib/contrib/vstudio/vc11/zlib.rc | ||
| +++ compat/zlib/contrib/vstudio/vc11/zlib.rc | ||
| @@ -1,11 +1,11 @@ | ||
| 1 | 1 | #include <windows.h> |
| 2 | 2 | |
| 3 | 3 | #define IDR_VERSION1 1 |
| 4 | 4 | IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE |
| 5 | - FILEVERSION 1, 2, 11, 0 | |
| 6 | - PRODUCTVERSION 1, 2, 11, 0 | |
| 5 | + FILEVERSION 1, 2, 12, 0 | |
| 6 | + PRODUCTVERSION 1, 2, 12, 0 | |
| 7 | 7 | FILEFLAGSMASK VS_FFI_FILEFLAGSMASK |
| 8 | 8 | FILEFLAGS 0 |
| 9 | 9 | FILEOS VOS_DOS_WINDOWS32 |
| 10 | 10 | FILETYPE VFT_DLL |
| 11 | 11 | FILESUBTYPE 0 // not used |
| @@ -15,18 +15,18 @@ | ||
| 15 | 15 | BLOCK "040904E4" |
| 16 | 16 | //language ID = U.S. English, char set = Windows, Multilingual |
| 17 | 17 | |
| 18 | 18 | BEGIN |
| 19 | 19 | VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" |
| 20 | - VALUE "FileVersion", "1.2.11\0" | |
| 20 | + VALUE "FileVersion", "1.2.12\0" | |
| 21 | 21 | VALUE "InternalName", "zlib\0" |
| 22 | 22 | VALUE "OriginalFilename", "zlibwapi.dll\0" |
| 23 | 23 | VALUE "ProductName", "ZLib.DLL\0" |
| 24 | 24 | VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" |
| 25 | - VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0" | |
| 25 | + VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0" | |
| 26 | 26 | END |
| 27 | 27 | END |
| 28 | 28 | BLOCK "VarFileInfo" |
| 29 | 29 | BEGIN |
| 30 | 30 | VALUE "Translation", 0x0409, 1252 |
| 31 | 31 | END |
| 32 | 32 | END |
| 33 | 33 |
| --- compat/zlib/contrib/vstudio/vc11/zlib.rc | |
| +++ compat/zlib/contrib/vstudio/vc11/zlib.rc | |
| @@ -1,11 +1,11 @@ | |
| 1 | #include <windows.h> |
| 2 | |
| 3 | #define IDR_VERSION1 1 |
| 4 | IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE |
| 5 | FILEVERSION 1, 2, 11, 0 |
| 6 | PRODUCTVERSION 1, 2, 11, 0 |
| 7 | FILEFLAGSMASK VS_FFI_FILEFLAGSMASK |
| 8 | FILEFLAGS 0 |
| 9 | FILEOS VOS_DOS_WINDOWS32 |
| 10 | FILETYPE VFT_DLL |
| 11 | FILESUBTYPE 0 // not used |
| @@ -15,18 +15,18 @@ | |
| 15 | BLOCK "040904E4" |
| 16 | //language ID = U.S. English, char set = Windows, Multilingual |
| 17 | |
| 18 | BEGIN |
| 19 | VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" |
| 20 | VALUE "FileVersion", "1.2.11\0" |
| 21 | VALUE "InternalName", "zlib\0" |
| 22 | VALUE "OriginalFilename", "zlibwapi.dll\0" |
| 23 | VALUE "ProductName", "ZLib.DLL\0" |
| 24 | VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" |
| 25 | VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0" |
| 26 | END |
| 27 | END |
| 28 | BLOCK "VarFileInfo" |
| 29 | BEGIN |
| 30 | VALUE "Translation", 0x0409, 1252 |
| 31 | END |
| 32 | END |
| 33 |
| --- compat/zlib/contrib/vstudio/vc11/zlib.rc | |
| +++ compat/zlib/contrib/vstudio/vc11/zlib.rc | |
| @@ -1,11 +1,11 @@ | |
| 1 | #include <windows.h> |
| 2 | |
| 3 | #define IDR_VERSION1 1 |
| 4 | IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE |
| 5 | FILEVERSION 1, 2, 12, 0 |
| 6 | PRODUCTVERSION 1, 2, 12, 0 |
| 7 | FILEFLAGSMASK VS_FFI_FILEFLAGSMASK |
| 8 | FILEFLAGS 0 |
| 9 | FILEOS VOS_DOS_WINDOWS32 |
| 10 | FILETYPE VFT_DLL |
| 11 | FILESUBTYPE 0 // not used |
| @@ -15,18 +15,18 @@ | |
| 15 | BLOCK "040904E4" |
| 16 | //language ID = U.S. English, char set = Windows, Multilingual |
| 17 | |
| 18 | BEGIN |
| 19 | VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" |
| 20 | VALUE "FileVersion", "1.2.12\0" |
| 21 | VALUE "InternalName", "zlib\0" |
| 22 | VALUE "OriginalFilename", "zlibwapi.dll\0" |
| 23 | VALUE "ProductName", "ZLib.DLL\0" |
| 24 | VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" |
| 25 | VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0" |
| 26 | END |
| 27 | END |
| 28 | BLOCK "VarFileInfo" |
| 29 | BEGIN |
| 30 | VALUE "Translation", 0x0409, 1252 |
| 31 | END |
| 32 | END |
| 33 |
| --- compat/zlib/contrib/vstudio/vc11/zlibvc.def | ||
| +++ compat/zlib/contrib/vstudio/vc11/zlibvc.def | ||
| @@ -149,5 +149,10 @@ | ||
| 149 | 149 | gzfread @171 |
| 150 | 150 | gzfwrite @172 |
| 151 | 151 | deflateGetDictionary @173 |
| 152 | 152 | adler32_z @174 |
| 153 | 153 | crc32_z @175 |
| 154 | + | |
| 155 | +; zlib1 v1.2.12 added: | |
| 156 | + crc32_combine_gen @176 | |
| 157 | + crc32_combine_gen64 @177 | |
| 158 | + crc32_combine_op @178 | |
| 154 | 159 |
| --- compat/zlib/contrib/vstudio/vc11/zlibvc.def | |
| +++ compat/zlib/contrib/vstudio/vc11/zlibvc.def | |
| @@ -149,5 +149,10 @@ | |
| 149 | gzfread @171 |
| 150 | gzfwrite @172 |
| 151 | deflateGetDictionary @173 |
| 152 | adler32_z @174 |
| 153 | crc32_z @175 |
| 154 |
| --- compat/zlib/contrib/vstudio/vc11/zlibvc.def | |
| +++ compat/zlib/contrib/vstudio/vc11/zlibvc.def | |
| @@ -149,5 +149,10 @@ | |
| 149 | gzfread @171 |
| 150 | gzfwrite @172 |
| 151 | deflateGetDictionary @173 |
| 152 | adler32_z @174 |
| 153 | crc32_z @175 |
| 154 | |
| 155 | ; zlib1 v1.2.12 added: |
| 156 | crc32_combine_gen @176 |
| 157 | crc32_combine_gen64 @177 |
| 158 | crc32_combine_op @178 |
| 159 |
| --- compat/zlib/contrib/vstudio/vc12/zlib.rc | ||
| +++ compat/zlib/contrib/vstudio/vc12/zlib.rc | ||
| @@ -1,11 +1,11 @@ | ||
| 1 | 1 | #include <windows.h> |
| 2 | 2 | |
| 3 | 3 | #define IDR_VERSION1 1 |
| 4 | 4 | IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE |
| 5 | - FILEVERSION 1, 2, 11, 0 | |
| 6 | - PRODUCTVERSION 1, 2, 11, 0 | |
| 5 | + FILEVERSION 1, 2, 12, 0 | |
| 6 | + PRODUCTVERSION 1, 2, 12, 0 | |
| 7 | 7 | FILEFLAGSMASK VS_FFI_FILEFLAGSMASK |
| 8 | 8 | FILEFLAGS 0 |
| 9 | 9 | FILEOS VOS_DOS_WINDOWS32 |
| 10 | 10 | FILETYPE VFT_DLL |
| 11 | 11 | FILESUBTYPE 0 // not used |
| @@ -15,18 +15,18 @@ | ||
| 15 | 15 | BLOCK "040904E4" |
| 16 | 16 | //language ID = U.S. English, char set = Windows, Multilingual |
| 17 | 17 | |
| 18 | 18 | BEGIN |
| 19 | 19 | VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" |
| 20 | - VALUE "FileVersion", "1.2.11\0" | |
| 20 | + VALUE "FileVersion", "1.2.12\0" | |
| 21 | 21 | VALUE "InternalName", "zlib\0" |
| 22 | 22 | VALUE "OriginalFilename", "zlibwapi.dll\0" |
| 23 | 23 | VALUE "ProductName", "ZLib.DLL\0" |
| 24 | 24 | VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" |
| 25 | - VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0" | |
| 25 | + VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0" | |
| 26 | 26 | END |
| 27 | 27 | END |
| 28 | 28 | BLOCK "VarFileInfo" |
| 29 | 29 | BEGIN |
| 30 | 30 | VALUE "Translation", 0x0409, 1252 |
| 31 | 31 | END |
| 32 | 32 | END |
| 33 | 33 |
| --- compat/zlib/contrib/vstudio/vc12/zlib.rc | |
| +++ compat/zlib/contrib/vstudio/vc12/zlib.rc | |
| @@ -1,11 +1,11 @@ | |
| 1 | #include <windows.h> |
| 2 | |
| 3 | #define IDR_VERSION1 1 |
| 4 | IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE |
| 5 | FILEVERSION 1, 2, 11, 0 |
| 6 | PRODUCTVERSION 1, 2, 11, 0 |
| 7 | FILEFLAGSMASK VS_FFI_FILEFLAGSMASK |
| 8 | FILEFLAGS 0 |
| 9 | FILEOS VOS_DOS_WINDOWS32 |
| 10 | FILETYPE VFT_DLL |
| 11 | FILESUBTYPE 0 // not used |
| @@ -15,18 +15,18 @@ | |
| 15 | BLOCK "040904E4" |
| 16 | //language ID = U.S. English, char set = Windows, Multilingual |
| 17 | |
| 18 | BEGIN |
| 19 | VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" |
| 20 | VALUE "FileVersion", "1.2.11\0" |
| 21 | VALUE "InternalName", "zlib\0" |
| 22 | VALUE "OriginalFilename", "zlibwapi.dll\0" |
| 23 | VALUE "ProductName", "ZLib.DLL\0" |
| 24 | VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" |
| 25 | VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0" |
| 26 | END |
| 27 | END |
| 28 | BLOCK "VarFileInfo" |
| 29 | BEGIN |
| 30 | VALUE "Translation", 0x0409, 1252 |
| 31 | END |
| 32 | END |
| 33 |
| --- compat/zlib/contrib/vstudio/vc12/zlib.rc | |
| +++ compat/zlib/contrib/vstudio/vc12/zlib.rc | |
| @@ -1,11 +1,11 @@ | |
| 1 | #include <windows.h> |
| 2 | |
| 3 | #define IDR_VERSION1 1 |
| 4 | IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE |
| 5 | FILEVERSION 1, 2, 12, 0 |
| 6 | PRODUCTVERSION 1, 2, 12, 0 |
| 7 | FILEFLAGSMASK VS_FFI_FILEFLAGSMASK |
| 8 | FILEFLAGS 0 |
| 9 | FILEOS VOS_DOS_WINDOWS32 |
| 10 | FILETYPE VFT_DLL |
| 11 | FILESUBTYPE 0 // not used |
| @@ -15,18 +15,18 @@ | |
| 15 | BLOCK "040904E4" |
| 16 | //language ID = U.S. English, char set = Windows, Multilingual |
| 17 | |
| 18 | BEGIN |
| 19 | VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" |
| 20 | VALUE "FileVersion", "1.2.12\0" |
| 21 | VALUE "InternalName", "zlib\0" |
| 22 | VALUE "OriginalFilename", "zlibwapi.dll\0" |
| 23 | VALUE "ProductName", "ZLib.DLL\0" |
| 24 | VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" |
| 25 | VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0" |
| 26 | END |
| 27 | END |
| 28 | BLOCK "VarFileInfo" |
| 29 | BEGIN |
| 30 | VALUE "Translation", 0x0409, 1252 |
| 31 | END |
| 32 | END |
| 33 |
| --- compat/zlib/contrib/vstudio/vc12/zlibvc.def | ||
| +++ compat/zlib/contrib/vstudio/vc12/zlibvc.def | ||
| @@ -149,5 +149,10 @@ | ||
| 149 | 149 | gzfread @171 |
| 150 | 150 | gzfwrite @172 |
| 151 | 151 | deflateGetDictionary @173 |
| 152 | 152 | adler32_z @174 |
| 153 | 153 | crc32_z @175 |
| 154 | + | |
| 155 | +; zlib1 v1.2.12 added: | |
| 156 | + crc32_combine_gen @176 | |
| 157 | + crc32_combine_gen64 @177 | |
| 158 | + crc32_combine_op @178 | |
| 154 | 159 |
| --- compat/zlib/contrib/vstudio/vc12/zlibvc.def | |
| +++ compat/zlib/contrib/vstudio/vc12/zlibvc.def | |
| @@ -149,5 +149,10 @@ | |
| 149 | gzfread @171 |
| 150 | gzfwrite @172 |
| 151 | deflateGetDictionary @173 |
| 152 | adler32_z @174 |
| 153 | crc32_z @175 |
| 154 |
| --- compat/zlib/contrib/vstudio/vc12/zlibvc.def | |
| +++ compat/zlib/contrib/vstudio/vc12/zlibvc.def | |
| @@ -149,5 +149,10 @@ | |
| 149 | gzfread @171 |
| 150 | gzfwrite @172 |
| 151 | deflateGetDictionary @173 |
| 152 | adler32_z @174 |
| 153 | crc32_z @175 |
| 154 | |
| 155 | ; zlib1 v1.2.12 added: |
| 156 | crc32_combine_gen @176 |
| 157 | crc32_combine_gen64 @177 |
| 158 | crc32_combine_op @178 |
| 159 |
| --- compat/zlib/contrib/vstudio/vc14/zlib.rc | ||
| +++ compat/zlib/contrib/vstudio/vc14/zlib.rc | ||
| @@ -1,11 +1,11 @@ | ||
| 1 | 1 | #include <windows.h> |
| 2 | 2 | |
| 3 | 3 | #define IDR_VERSION1 1 |
| 4 | 4 | IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE |
| 5 | - FILEVERSION 1, 2, 11, 0 | |
| 6 | - PRODUCTVERSION 1, 2, 11, 0 | |
| 5 | + FILEVERSION 1, 2, 12, 0 | |
| 6 | + PRODUCTVERSION 1, 2, 12, 0 | |
| 7 | 7 | FILEFLAGSMASK VS_FFI_FILEFLAGSMASK |
| 8 | 8 | FILEFLAGS 0 |
| 9 | 9 | FILEOS VOS_DOS_WINDOWS32 |
| 10 | 10 | FILETYPE VFT_DLL |
| 11 | 11 | FILESUBTYPE 0 // not used |
| @@ -15,18 +15,18 @@ | ||
| 15 | 15 | BLOCK "040904E4" |
| 16 | 16 | //language ID = U.S. English, char set = Windows, Multilingual |
| 17 | 17 | |
| 18 | 18 | BEGIN |
| 19 | 19 | VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" |
| 20 | - VALUE "FileVersion", "1.2.11\0" | |
| 20 | + VALUE "FileVersion", "1.2.12\0" | |
| 21 | 21 | VALUE "InternalName", "zlib\0" |
| 22 | 22 | VALUE "OriginalFilename", "zlibwapi.dll\0" |
| 23 | 23 | VALUE "ProductName", "ZLib.DLL\0" |
| 24 | 24 | VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" |
| 25 | - VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0" | |
| 25 | + VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0" | |
| 26 | 26 | END |
| 27 | 27 | END |
| 28 | 28 | BLOCK "VarFileInfo" |
| 29 | 29 | BEGIN |
| 30 | 30 | VALUE "Translation", 0x0409, 1252 |
| 31 | 31 | END |
| 32 | 32 | END |
| 33 | 33 |
| --- compat/zlib/contrib/vstudio/vc14/zlib.rc | |
| +++ compat/zlib/contrib/vstudio/vc14/zlib.rc | |
| @@ -1,11 +1,11 @@ | |
| 1 | #include <windows.h> |
| 2 | |
| 3 | #define IDR_VERSION1 1 |
| 4 | IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE |
| 5 | FILEVERSION 1, 2, 11, 0 |
| 6 | PRODUCTVERSION 1, 2, 11, 0 |
| 7 | FILEFLAGSMASK VS_FFI_FILEFLAGSMASK |
| 8 | FILEFLAGS 0 |
| 9 | FILEOS VOS_DOS_WINDOWS32 |
| 10 | FILETYPE VFT_DLL |
| 11 | FILESUBTYPE 0 // not used |
| @@ -15,18 +15,18 @@ | |
| 15 | BLOCK "040904E4" |
| 16 | //language ID = U.S. English, char set = Windows, Multilingual |
| 17 | |
| 18 | BEGIN |
| 19 | VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" |
| 20 | VALUE "FileVersion", "1.2.11\0" |
| 21 | VALUE "InternalName", "zlib\0" |
| 22 | VALUE "OriginalFilename", "zlibwapi.dll\0" |
| 23 | VALUE "ProductName", "ZLib.DLL\0" |
| 24 | VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" |
| 25 | VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0" |
| 26 | END |
| 27 | END |
| 28 | BLOCK "VarFileInfo" |
| 29 | BEGIN |
| 30 | VALUE "Translation", 0x0409, 1252 |
| 31 | END |
| 32 | END |
| 33 |
| --- compat/zlib/contrib/vstudio/vc14/zlib.rc | |
| +++ compat/zlib/contrib/vstudio/vc14/zlib.rc | |
| @@ -1,11 +1,11 @@ | |
| 1 | #include <windows.h> |
| 2 | |
| 3 | #define IDR_VERSION1 1 |
| 4 | IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE |
| 5 | FILEVERSION 1, 2, 12, 0 |
| 6 | PRODUCTVERSION 1, 2, 12, 0 |
| 7 | FILEFLAGSMASK VS_FFI_FILEFLAGSMASK |
| 8 | FILEFLAGS 0 |
| 9 | FILEOS VOS_DOS_WINDOWS32 |
| 10 | FILETYPE VFT_DLL |
| 11 | FILESUBTYPE 0 // not used |
| @@ -15,18 +15,18 @@ | |
| 15 | BLOCK "040904E4" |
| 16 | //language ID = U.S. English, char set = Windows, Multilingual |
| 17 | |
| 18 | BEGIN |
| 19 | VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" |
| 20 | VALUE "FileVersion", "1.2.12\0" |
| 21 | VALUE "InternalName", "zlib\0" |
| 22 | VALUE "OriginalFilename", "zlibwapi.dll\0" |
| 23 | VALUE "ProductName", "ZLib.DLL\0" |
| 24 | VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" |
| 25 | VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0" |
| 26 | END |
| 27 | END |
| 28 | BLOCK "VarFileInfo" |
| 29 | BEGIN |
| 30 | VALUE "Translation", 0x0409, 1252 |
| 31 | END |
| 32 | END |
| 33 |
| --- compat/zlib/contrib/vstudio/vc14/zlibvc.def | ||
| +++ compat/zlib/contrib/vstudio/vc14/zlibvc.def | ||
| @@ -149,5 +149,10 @@ | ||
| 149 | 149 | gzfread @171 |
| 150 | 150 | gzfwrite @172 |
| 151 | 151 | deflateGetDictionary @173 |
| 152 | 152 | adler32_z @174 |
| 153 | 153 | crc32_z @175 |
| 154 | + | |
| 155 | +; zlib1 v1.2.12 added: | |
| 156 | + crc32_combine_gen @176 | |
| 157 | + crc32_combine_gen64 @177 | |
| 158 | + crc32_combine_op @178 | |
| 154 | 159 |
| --- compat/zlib/contrib/vstudio/vc14/zlibvc.def | |
| +++ compat/zlib/contrib/vstudio/vc14/zlibvc.def | |
| @@ -149,5 +149,10 @@ | |
| 149 | gzfread @171 |
| 150 | gzfwrite @172 |
| 151 | deflateGetDictionary @173 |
| 152 | adler32_z @174 |
| 153 | crc32_z @175 |
| 154 |
| --- compat/zlib/contrib/vstudio/vc14/zlibvc.def | |
| +++ compat/zlib/contrib/vstudio/vc14/zlibvc.def | |
| @@ -149,5 +149,10 @@ | |
| 149 | gzfread @171 |
| 150 | gzfwrite @172 |
| 151 | deflateGetDictionary @173 |
| 152 | adler32_z @174 |
| 153 | crc32_z @175 |
| 154 | |
| 155 | ; zlib1 v1.2.12 added: |
| 156 | crc32_combine_gen @176 |
| 157 | crc32_combine_gen64 @177 |
| 158 | crc32_combine_op @178 |
| 159 |
| --- compat/zlib/contrib/vstudio/vc9/zlib.rc | ||
| +++ compat/zlib/contrib/vstudio/vc9/zlib.rc | ||
| @@ -1,11 +1,11 @@ | ||
| 1 | 1 | #include <windows.h> |
| 2 | 2 | |
| 3 | 3 | #define IDR_VERSION1 1 |
| 4 | 4 | IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE |
| 5 | - FILEVERSION 1, 2, 11, 0 | |
| 6 | - PRODUCTVERSION 1, 2, 11, 0 | |
| 5 | + FILEVERSION 1, 2, 12, 0 | |
| 6 | + PRODUCTVERSION 1, 2, 12, 0 | |
| 7 | 7 | FILEFLAGSMASK VS_FFI_FILEFLAGSMASK |
| 8 | 8 | FILEFLAGS 0 |
| 9 | 9 | FILEOS VOS_DOS_WINDOWS32 |
| 10 | 10 | FILETYPE VFT_DLL |
| 11 | 11 | FILESUBTYPE 0 // not used |
| @@ -15,18 +15,18 @@ | ||
| 15 | 15 | BLOCK "040904E4" |
| 16 | 16 | //language ID = U.S. English, char set = Windows, Multilingual |
| 17 | 17 | |
| 18 | 18 | BEGIN |
| 19 | 19 | VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" |
| 20 | - VALUE "FileVersion", "1.2.11\0" | |
| 20 | + VALUE "FileVersion", "1.2.12\0" | |
| 21 | 21 | VALUE "InternalName", "zlib\0" |
| 22 | 22 | VALUE "OriginalFilename", "zlibwapi.dll\0" |
| 23 | 23 | VALUE "ProductName", "ZLib.DLL\0" |
| 24 | 24 | VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" |
| 25 | - VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0" | |
| 25 | + VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0" | |
| 26 | 26 | END |
| 27 | 27 | END |
| 28 | 28 | BLOCK "VarFileInfo" |
| 29 | 29 | BEGIN |
| 30 | 30 | VALUE "Translation", 0x0409, 1252 |
| 31 | 31 | END |
| 32 | 32 | END |
| 33 | 33 |
| --- compat/zlib/contrib/vstudio/vc9/zlib.rc | |
| +++ compat/zlib/contrib/vstudio/vc9/zlib.rc | |
| @@ -1,11 +1,11 @@ | |
| 1 | #include <windows.h> |
| 2 | |
| 3 | #define IDR_VERSION1 1 |
| 4 | IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE |
| 5 | FILEVERSION 1, 2, 11, 0 |
| 6 | PRODUCTVERSION 1, 2, 11, 0 |
| 7 | FILEFLAGSMASK VS_FFI_FILEFLAGSMASK |
| 8 | FILEFLAGS 0 |
| 9 | FILEOS VOS_DOS_WINDOWS32 |
| 10 | FILETYPE VFT_DLL |
| 11 | FILESUBTYPE 0 // not used |
| @@ -15,18 +15,18 @@ | |
| 15 | BLOCK "040904E4" |
| 16 | //language ID = U.S. English, char set = Windows, Multilingual |
| 17 | |
| 18 | BEGIN |
| 19 | VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" |
| 20 | VALUE "FileVersion", "1.2.11\0" |
| 21 | VALUE "InternalName", "zlib\0" |
| 22 | VALUE "OriginalFilename", "zlibwapi.dll\0" |
| 23 | VALUE "ProductName", "ZLib.DLL\0" |
| 24 | VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" |
| 25 | VALUE "LegalCopyright", "(C) 1995-2017 Jean-loup Gailly & Mark Adler\0" |
| 26 | END |
| 27 | END |
| 28 | BLOCK "VarFileInfo" |
| 29 | BEGIN |
| 30 | VALUE "Translation", 0x0409, 1252 |
| 31 | END |
| 32 | END |
| 33 |
| --- compat/zlib/contrib/vstudio/vc9/zlib.rc | |
| +++ compat/zlib/contrib/vstudio/vc9/zlib.rc | |
| @@ -1,11 +1,11 @@ | |
| 1 | #include <windows.h> |
| 2 | |
| 3 | #define IDR_VERSION1 1 |
| 4 | IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE |
| 5 | FILEVERSION 1, 2, 12, 0 |
| 6 | PRODUCTVERSION 1, 2, 12, 0 |
| 7 | FILEFLAGSMASK VS_FFI_FILEFLAGSMASK |
| 8 | FILEFLAGS 0 |
| 9 | FILEOS VOS_DOS_WINDOWS32 |
| 10 | FILETYPE VFT_DLL |
| 11 | FILESUBTYPE 0 // not used |
| @@ -15,18 +15,18 @@ | |
| 15 | BLOCK "040904E4" |
| 16 | //language ID = U.S. English, char set = Windows, Multilingual |
| 17 | |
| 18 | BEGIN |
| 19 | VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" |
| 20 | VALUE "FileVersion", "1.2.12\0" |
| 21 | VALUE "InternalName", "zlib\0" |
| 22 | VALUE "OriginalFilename", "zlibwapi.dll\0" |
| 23 | VALUE "ProductName", "ZLib.DLL\0" |
| 24 | VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" |
| 25 | VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0" |
| 26 | END |
| 27 | END |
| 28 | BLOCK "VarFileInfo" |
| 29 | BEGIN |
| 30 | VALUE "Translation", 0x0409, 1252 |
| 31 | END |
| 32 | END |
| 33 |
| --- compat/zlib/contrib/vstudio/vc9/zlibvc.def | ||
| +++ compat/zlib/contrib/vstudio/vc9/zlibvc.def | ||
| @@ -149,5 +149,10 @@ | ||
| 149 | 149 | gzfread @171 |
| 150 | 150 | gzfwrite @172 |
| 151 | 151 | deflateGetDictionary @173 |
| 152 | 152 | adler32_z @174 |
| 153 | 153 | crc32_z @175 |
| 154 | + | |
| 155 | +; zlib1 v1.2.12 added: | |
| 156 | + crc32_combine_gen @176 | |
| 157 | + crc32_combine_gen64 @177 | |
| 158 | + crc32_combine_op @178 | |
| 154 | 159 |
| --- compat/zlib/contrib/vstudio/vc9/zlibvc.def | |
| +++ compat/zlib/contrib/vstudio/vc9/zlibvc.def | |
| @@ -149,5 +149,10 @@ | |
| 149 | gzfread @171 |
| 150 | gzfwrite @172 |
| 151 | deflateGetDictionary @173 |
| 152 | adler32_z @174 |
| 153 | crc32_z @175 |
| 154 |
| --- compat/zlib/contrib/vstudio/vc9/zlibvc.def | |
| +++ compat/zlib/contrib/vstudio/vc9/zlibvc.def | |
| @@ -149,5 +149,10 @@ | |
| 149 | gzfread @171 |
| 150 | gzfwrite @172 |
| 151 | deflateGetDictionary @173 |
| 152 | adler32_z @174 |
| 153 | crc32_z @175 |
| 154 | |
| 155 | ; zlib1 v1.2.12 added: |
| 156 | crc32_combine_gen @176 |
| 157 | crc32_combine_gen64 @177 |
| 158 | crc32_combine_op @178 |
| 159 |
+994
-320
| --- compat/zlib/crc32.c | ||
| +++ compat/zlib/crc32.c | ||
| @@ -1,239 +1,1065 @@ | ||
| 1 | 1 | /* crc32.c -- compute the CRC-32 of a data stream |
| 2 | - * Copyright (C) 1995-2006, 2010, 2011, 2012, 2016 Mark Adler | |
| 2 | + * Copyright (C) 1995-2022 Mark Adler | |
| 3 | 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | 4 | * |
| 5 | - * Thanks to Rodney Brown <[email protected]> for his contribution of faster | |
| 6 | - * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing | |
| 7 | - * tables for updating the shift register in one step with three exclusive-ors | |
| 8 | - * instead of four steps with four exclusive-ors. This results in about a | |
| 9 | - * factor of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3. | |
| 5 | + * This interleaved implementation of a CRC makes use of pipelined multiple | |
| 6 | + * arithmetic-logic units, commonly found in modern CPU cores. It is due to | |
| 7 | + * Kadatch and Jenkins (2010). See doc/crc-doc.1.0.pdf in this distribution. | |
| 10 | 8 | */ |
| 11 | 9 | |
| 12 | 10 | /* @(#) $Id$ */ |
| 13 | 11 | |
| 14 | 12 | /* |
| 15 | 13 | Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore |
| 16 | 14 | protection on the static variables used to control the first-use generation |
| 17 | - of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should | |
| 15 | + of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should | |
| 18 | 16 | first call get_crc_table() to initialize the tables before allowing more than |
| 19 | 17 | one thread to use crc32(). |
| 20 | 18 | |
| 21 | - DYNAMIC_CRC_TABLE and MAKECRCH can be #defined to write out crc32.h. | |
| 19 | + MAKECRCH can be #defined to write out crc32.h. A main() routine is also | |
| 20 | + produced, so that this one source file can be compiled to an executable. | |
| 22 | 21 | */ |
| 23 | 22 | |
| 24 | 23 | #ifdef MAKECRCH |
| 25 | 24 | # include <stdio.h> |
| 26 | 25 | # ifndef DYNAMIC_CRC_TABLE |
| 27 | 26 | # define DYNAMIC_CRC_TABLE |
| 28 | 27 | # endif /* !DYNAMIC_CRC_TABLE */ |
| 29 | 28 | #endif /* MAKECRCH */ |
| 30 | 29 | |
| 31 | -#include "zutil.h" /* for STDC and FAR definitions */ | |
| 32 | - | |
| 33 | -/* Definitions for doing the crc four data bytes at a time. */ | |
| 34 | -#if !defined(NOBYFOUR) && defined(Z_U4) | |
| 35 | -# define BYFOUR | |
| 36 | -#endif | |
| 37 | -#ifdef BYFOUR | |
| 38 | - local unsigned long crc32_little OF((unsigned long, | |
| 39 | - const unsigned char FAR *, z_size_t)); | |
| 40 | - local unsigned long crc32_big OF((unsigned long, | |
| 41 | - const unsigned char FAR *, z_size_t)); | |
| 42 | -# define TBLS 8 | |
| 30 | +#include "zutil.h" /* for Z_U4, Z_U8, z_crc_t, and FAR definitions */ | |
| 31 | + | |
| 32 | + /* | |
| 33 | + A CRC of a message is computed on N braids of words in the message, where | |
| 34 | + each word consists of W bytes (4 or 8). If N is 3, for example, then three | |
| 35 | + running sparse CRCs are calculated respectively on each braid, at these | |
| 36 | + indices in the array of words: 0, 3, 6, ..., 1, 4, 7, ..., and 2, 5, 8, ... | |
| 37 | + This is done starting at a word boundary, and continues until as many blocks | |
| 38 | + of N * W bytes as are available have been processed. The results are combined | |
| 39 | + into a single CRC at the end. For this code, N must be in the range 1..6 and | |
| 40 | + W must be 4 or 8. The upper limit on N can be increased if desired by adding | |
| 41 | + more #if blocks, extending the patterns apparent in the code. In addition, | |
| 42 | + crc32.h would need to be regenerated, if the maximum N value is increased. | |
| 43 | + | |
| 44 | + N and W are chosen empirically by benchmarking the execution time on a given | |
| 45 | + processor. The choices for N and W below were based on testing on Intel Kaby | |
| 46 | + Lake i7, AMD Ryzen 7, ARM Cortex-A57, Sparc64-VII, PowerPC POWER9, and MIPS64 | |
| 47 | + Octeon II processors. The Intel, AMD, and ARM processors were all fastest | |
| 48 | + with N=5, W=8. The Sparc, PowerPC, and MIPS64 were all fastest at N=5, W=4. | |
| 49 | + They were all tested with either gcc or clang, all using the -O3 optimization | |
| 50 | + level. Your mileage may vary. | |
| 51 | + */ | |
| 52 | + | |
| 53 | +/* Define N */ | |
| 54 | +#ifdef Z_TESTN | |
| 55 | +# define N Z_TESTN | |
| 56 | +#else | |
| 57 | +# define N 5 | |
| 58 | +#endif | |
| 59 | +#if N < 1 || N > 6 | |
| 60 | +# error N must be in 1..6 | |
| 61 | +#endif | |
| 62 | + | |
| 63 | +/* | |
| 64 | + z_crc_t must be at least 32 bits. z_word_t must be at least as long as | |
| 65 | + z_crc_t. It is assumed here that z_word_t is either 32 bits or 64 bits, and | |
| 66 | + that bytes are eight bits. | |
| 67 | + */ | |
| 68 | + | |
| 69 | +/* | |
| 70 | + Define W and the associated z_word_t type. If W is not defined, then a | |
| 71 | + braided calculation is not used, and the associated tables and code are not | |
| 72 | + compiled. | |
| 73 | + */ | |
| 74 | +#ifdef Z_TESTW | |
| 75 | +# if Z_TESTW-1 != -1 | |
| 76 | +# define W Z_TESTW | |
| 77 | +# endif | |
| 43 | 78 | #else |
| 44 | -# define TBLS 1 | |
| 45 | -#endif /* BYFOUR */ | |
| 46 | - | |
| 47 | -/* Local functions for crc concatenation */ | |
| 48 | -local unsigned long gf2_matrix_times OF((unsigned long *mat, | |
| 49 | - unsigned long vec)); | |
| 50 | -local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat)); | |
| 51 | -local uLong crc32_combine_ OF((uLong crc1, uLong crc2, z_off64_t len2)); | |
| 52 | - | |
| 79 | +# ifdef MAKECRCH | |
| 80 | +# define W 8 /* required for MAKECRCH */ | |
| 81 | +# else | |
| 82 | +# if defined(__x86_64__) || defined(__aarch64__) | |
| 83 | +# define W 8 | |
| 84 | +# else | |
| 85 | +# define W 4 | |
| 86 | +# endif | |
| 87 | +# endif | |
| 88 | +#endif | |
| 89 | +#ifdef W | |
| 90 | +# if W == 8 && defined(Z_U8) | |
| 91 | + typedef Z_U8 z_word_t; | |
| 92 | +# elif defined(Z_U4) | |
| 93 | +# undef W | |
| 94 | +# define W 4 | |
| 95 | + typedef Z_U4 z_word_t; | |
| 96 | +# else | |
| 97 | +# undef W | |
| 98 | +# endif | |
| 99 | +#endif | |
| 100 | + | |
| 101 | +/* Local functions. */ | |
| 102 | +local z_crc_t multmodp OF((z_crc_t a, z_crc_t b)); | |
| 103 | +local z_crc_t x2nmodp OF((z_off64_t n, unsigned k)); | |
| 104 | + | |
| 105 | +/* If available, use the ARM processor CRC32 instruction. */ | |
| 106 | +#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8 | |
| 107 | +# define ARMCRC32 | |
| 108 | +#endif | |
| 109 | + | |
| 110 | +#if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE)) | |
| 111 | +/* | |
| 112 | + Swap the bytes in a z_word_t to convert between little and big endian. Any | |
| 113 | + self-respecting compiler will optimize this to a single machine byte-swap | |
| 114 | + instruction, if one is available. This assumes that word_t is either 32 bits | |
| 115 | + or 64 bits. | |
| 116 | + */ | |
| 117 | +local z_word_t byte_swap(word) | |
| 118 | + z_word_t word; | |
| 119 | +{ | |
| 120 | +# if W == 8 | |
| 121 | + return | |
| 122 | + (word & 0xff00000000000000) >> 56 | | |
| 123 | + (word & 0xff000000000000) >> 40 | | |
| 124 | + (word & 0xff0000000000) >> 24 | | |
| 125 | + (word & 0xff00000000) >> 8 | | |
| 126 | + (word & 0xff000000) << 8 | | |
| 127 | + (word & 0xff0000) << 24 | | |
| 128 | + (word & 0xff00) << 40 | | |
| 129 | + (word & 0xff) << 56; | |
| 130 | +# else /* W == 4 */ | |
| 131 | + return | |
| 132 | + (word & 0xff000000) >> 24 | | |
| 133 | + (word & 0xff0000) >> 8 | | |
| 134 | + (word & 0xff00) << 8 | | |
| 135 | + (word & 0xff) << 24; | |
| 136 | +# endif | |
| 137 | +} | |
| 138 | +#endif | |
| 139 | + | |
| 140 | +/* CRC polynomial. */ | |
| 141 | +#define POLY 0xedb88320 /* p(x) reflected, with x^32 implied */ | |
| 53 | 142 | |
| 54 | 143 | #ifdef DYNAMIC_CRC_TABLE |
| 55 | 144 | |
| 56 | -local volatile int crc_table_empty = 1; | |
| 57 | -local z_crc_t FAR crc_table[TBLS][256]; | |
| 145 | +local z_crc_t FAR crc_table[256]; | |
| 146 | +local z_crc_t FAR x2n_table[32]; | |
| 58 | 147 | local void make_crc_table OF((void)); |
| 148 | +#ifdef W | |
| 149 | + local z_word_t FAR crc_big_table[256]; | |
| 150 | + local z_crc_t FAR crc_braid_table[W][256]; | |
| 151 | + local z_word_t FAR crc_braid_big_table[W][256]; | |
| 152 | + local void braid OF((z_crc_t [][256], z_word_t [][256], int, int)); | |
| 153 | +#endif | |
| 59 | 154 | #ifdef MAKECRCH |
| 60 | - local void write_table OF((FILE *, const z_crc_t FAR *)); | |
| 155 | + local void write_table OF((FILE *, const z_crc_t FAR *, int)); | |
| 156 | + local void write_table32hi OF((FILE *, const z_word_t FAR *, int)); | |
| 157 | + local void write_table64 OF((FILE *, const z_word_t FAR *, int)); | |
| 61 | 158 | #endif /* MAKECRCH */ |
| 159 | + | |
| 160 | +/* | |
| 161 | + Define a once() function depending on the availability of atomics. If this is | |
| 162 | + compiled with DYNAMIC_CRC_TABLE defined, and if CRCs will be computed in | |
| 163 | + multiple threads, and if atomics are not available, then get_crc_table() must | |
| 164 | + be called to initialize the tables and must return before any threads are | |
| 165 | + allowed to compute or combine CRCs. | |
| 166 | + */ | |
| 167 | + | |
| 168 | +/* Definition of once functionality. */ | |
| 169 | +typedef struct once_s once_t; | |
| 170 | +local void once OF((once_t *, void (*)(void))); | |
| 171 | + | |
| 172 | +/* Check for the availability of atomics. */ | |
| 173 | +#if defined(__STDC__) && __STDC_VERSION__ >= 201112L && \ | |
| 174 | + !defined(__STDC_NO_ATOMICS__) | |
| 175 | + | |
| 176 | +#include <stdatomic.h> | |
| 177 | + | |
| 178 | +/* Structure for once(), which must be initialized with ONCE_INIT. */ | |
| 179 | +struct once_s { | |
| 180 | + atomic_flag begun; | |
| 181 | + atomic_int done; | |
| 182 | +}; | |
| 183 | +#define ONCE_INIT {ATOMIC_FLAG_INIT, 0} | |
| 184 | + | |
| 185 | +/* | |
| 186 | + Run the provided init() function exactly once, even if multiple threads | |
| 187 | + invoke once() at the same time. The state must be a once_t initialized with | |
| 188 | + ONCE_INIT. | |
| 189 | + */ | |
| 190 | +local void once(state, init) | |
| 191 | + once_t *state; | |
| 192 | + void (*init)(void); | |
| 193 | +{ | |
| 194 | + if (!atomic_load(&state->done)) { | |
| 195 | + if (atomic_flag_test_and_set(&state->begun)) | |
| 196 | + while (!atomic_load(&state->done)) | |
| 197 | + ; | |
| 198 | + else { | |
| 199 | + init(); | |
| 200 | + atomic_store(&state->done, 1); | |
| 201 | + } | |
| 202 | + } | |
| 203 | +} | |
| 204 | + | |
| 205 | +#else /* no atomics */ | |
| 206 | + | |
| 207 | +/* Structure for once(), which must be initialized with ONCE_INIT. */ | |
| 208 | +struct once_s { | |
| 209 | + volatile int begun; | |
| 210 | + volatile int done; | |
| 211 | +}; | |
| 212 | +#define ONCE_INIT {0, 0} | |
| 213 | + | |
| 214 | +/* Test and set. Alas, not atomic, but tries to minimize the period of | |
| 215 | + vulnerability. */ | |
| 216 | +local int test_and_set OF((int volatile *)); | |
| 217 | +local int test_and_set(flag) | |
| 218 | + int volatile *flag; | |
| 219 | +{ | |
| 220 | + int was; | |
| 221 | + | |
| 222 | + was = *flag; | |
| 223 | + *flag = 1; | |
| 224 | + return was; | |
| 225 | +} | |
| 226 | + | |
| 227 | +/* Run the provided init() function once. This is not thread-safe. */ | |
| 228 | +local void once(state, init) | |
| 229 | + once_t *state; | |
| 230 | + void (*init)(void); | |
| 231 | +{ | |
| 232 | + if (!state->done) { | |
| 233 | + if (test_and_set(&state->begun)) | |
| 234 | + while (!state->done) | |
| 235 | + ; | |
| 236 | + else { | |
| 237 | + init(); | |
| 238 | + state->done = 1; | |
| 239 | + } | |
| 240 | + } | |
| 241 | +} | |
| 242 | + | |
| 243 | +#endif | |
| 244 | + | |
| 245 | +/* State for once(). */ | |
| 246 | +local once_t made = ONCE_INIT; | |
| 247 | + | |
| 62 | 248 | /* |
| 63 | 249 | Generate tables for a byte-wise 32-bit CRC calculation on the polynomial: |
| 64 | 250 | x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. |
| 65 | 251 | |
| 66 | 252 | Polynomials over GF(2) are represented in binary, one bit per coefficient, |
| 67 | - with the lowest powers in the most significant bit. Then adding polynomials | |
| 253 | + with the lowest powers in the most significant bit. Then adding polynomials | |
| 68 | 254 | is just exclusive-or, and multiplying a polynomial by x is a right shift by |
| 69 | - one. If we call the above polynomial p, and represent a byte as the | |
| 255 | + one. If we call the above polynomial p, and represent a byte as the | |
| 70 | 256 | polynomial q, also with the lowest power in the most significant bit (so the |
| 71 | - byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, | |
| 257 | + byte 0xb1 is the polynomial x^7+x^3+x^2+1), then the CRC is (q*x^32) mod p, | |
| 72 | 258 | where a mod b means the remainder after dividing a by b. |
| 73 | 259 | |
| 74 | 260 | This calculation is done using the shift-register method of multiplying and |
| 75 | - taking the remainder. The register is initialized to zero, and for each | |
| 261 | + taking the remainder. The register is initialized to zero, and for each | |
| 76 | 262 | incoming bit, x^32 is added mod p to the register if the bit is a one (where |
| 77 | - x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by | |
| 78 | - x (which is shifting right by one and adding x^32 mod p if the bit shifted | |
| 79 | - out is a one). We start with the highest power (least significant bit) of | |
| 80 | - q and repeat for all eight bits of q. | |
| 81 | - | |
| 82 | - The first table is simply the CRC of all possible eight bit values. This is | |
| 83 | - all the information needed to generate CRCs on data a byte at a time for all | |
| 84 | - combinations of CRC register values and incoming bytes. The remaining tables | |
| 85 | - allow for word-at-a-time CRC calculation for both big-endian and little- | |
| 86 | - endian machines, where a word is four bytes. | |
| 87 | -*/ | |
| 263 | + x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by x | |
| 264 | + (which is shifting right by one and adding x^32 mod p if the bit shifted out | |
| 265 | + is a one). We start with the highest power (least significant bit) of q and | |
| 266 | + repeat for all eight bits of q. | |
| 267 | + | |
| 268 | + The table is simply the CRC of all possible eight bit values. This is all the | |
| 269 | + information needed to generate CRCs on data a byte at a time for all | |
| 270 | + combinations of CRC register values and incoming bytes. | |
| 271 | + */ | |
| 272 | + | |
| 88 | 273 | local void make_crc_table() |
| 89 | 274 | { |
| 90 | - z_crc_t c; | |
| 91 | - int n, k; | |
| 92 | - z_crc_t poly; /* polynomial exclusive-or pattern */ | |
| 93 | - /* terms of polynomial defining this crc (except x^32): */ | |
| 94 | - static volatile int first = 1; /* flag to limit concurrent making */ | |
| 95 | - static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26}; | |
| 96 | - | |
| 97 | - /* See if another task is already doing this (not thread-safe, but better | |
| 98 | - than nothing -- significantly reduces duration of vulnerability in | |
| 99 | - case the advice about DYNAMIC_CRC_TABLE is ignored) */ | |
| 100 | - if (first) { | |
| 101 | - first = 0; | |
| 102 | - | |
| 103 | - /* make exclusive-or pattern from polynomial (0xedb88320UL) */ | |
| 104 | - poly = 0; | |
| 105 | - for (n = 0; n < (int)(sizeof(p)/sizeof(unsigned char)); n++) | |
| 106 | - poly |= (z_crc_t)1 << (31 - p[n]); | |
| 107 | - | |
| 108 | - /* generate a crc for every 8-bit value */ | |
| 109 | - for (n = 0; n < 256; n++) { | |
| 110 | - c = (z_crc_t)n; | |
| 111 | - for (k = 0; k < 8; k++) | |
| 112 | - c = c & 1 ? poly ^ (c >> 1) : c >> 1; | |
| 113 | - crc_table[0][n] = c; | |
| 114 | - } | |
| 115 | - | |
| 116 | -#ifdef BYFOUR | |
| 117 | - /* generate crc for each value followed by one, two, and three zeros, | |
| 118 | - and then the byte reversal of those as well as the first table */ | |
| 119 | - for (n = 0; n < 256; n++) { | |
| 120 | - c = crc_table[0][n]; | |
| 121 | - crc_table[4][n] = ZSWAP32(c); | |
| 122 | - for (k = 1; k < 4; k++) { | |
| 123 | - c = crc_table[0][c & 0xff] ^ (c >> 8); | |
| 124 | - crc_table[k][n] = c; | |
| 125 | - crc_table[k + 4][n] = ZSWAP32(c); | |
| 126 | - } | |
| 127 | - } | |
| 128 | -#endif /* BYFOUR */ | |
| 129 | - | |
| 130 | - crc_table_empty = 0; | |
| 131 | - } | |
| 132 | - else { /* not first */ | |
| 133 | - /* wait for the other guy to finish (not efficient, but rare) */ | |
| 134 | - while (crc_table_empty) | |
| 135 | - ; | |
| 136 | - } | |
| 275 | + unsigned i, j, n; | |
| 276 | + z_crc_t p; | |
| 277 | + | |
| 278 | + /* initialize the CRC of bytes tables */ | |
| 279 | + for (i = 0; i < 256; i++) { | |
| 280 | + p = i; | |
| 281 | + for (j = 0; j < 8; j++) | |
| 282 | + p = p & 1 ? (p >> 1) ^ POLY : p >> 1; | |
| 283 | + crc_table[i] = p; | |
| 284 | +#ifdef W | |
| 285 | + crc_big_table[i] = byte_swap(p); | |
| 286 | +#endif | |
| 287 | + } | |
| 288 | + | |
| 289 | + /* initialize the x^2^n mod p(x) table */ | |
| 290 | + p = (z_crc_t)1 << 30; /* x^1 */ | |
| 291 | + x2n_table[0] = p; | |
| 292 | + for (n = 1; n < 32; n++) | |
| 293 | + x2n_table[n] = p = multmodp(p, p); | |
| 294 | + | |
| 295 | +#ifdef W | |
| 296 | + /* initialize the braiding tables -- needs x2n_table[] */ | |
| 297 | + braid(crc_braid_table, crc_braid_big_table, N, W); | |
| 298 | +#endif | |
| 137 | 299 | |
| 138 | 300 | #ifdef MAKECRCH |
| 139 | - /* write out CRC tables to crc32.h */ | |
| 140 | 301 | { |
| 302 | + /* | |
| 303 | + The crc32.h header file contains tables for both 32-bit and 64-bit | |
| 304 | + z_word_t's, and so requires a 64-bit type be available. In that case, | |
| 305 | + z_word_t must be defined to be 64-bits. This code then also generates | |
| 306 | + and writes out the tables for the case that z_word_t is 32 bits. | |
| 307 | + */ | |
| 308 | +#if !defined(W) || W != 8 | |
| 309 | +# error Need a 64-bit integer type in order to generate crc32.h. | |
| 310 | +#endif | |
| 141 | 311 | FILE *out; |
| 312 | + int k, n; | |
| 313 | + z_crc_t ltl[8][256]; | |
| 314 | + z_word_t big[8][256]; | |
| 142 | 315 | |
| 143 | 316 | out = fopen("crc32.h", "w"); |
| 144 | 317 | if (out == NULL) return; |
| 145 | - fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n"); | |
| 146 | - fprintf(out, " * Generated automatically by crc32.c\n */\n\n"); | |
| 147 | - fprintf(out, "local const z_crc_t FAR "); | |
| 148 | - fprintf(out, "crc_table[TBLS][256] =\n{\n {\n"); | |
| 149 | - write_table(out, crc_table[0]); | |
| 150 | -# ifdef BYFOUR | |
| 151 | - fprintf(out, "#ifdef BYFOUR\n"); | |
| 152 | - for (k = 1; k < 8; k++) { | |
| 153 | - fprintf(out, " },\n {\n"); | |
| 154 | - write_table(out, crc_table[k]); | |
| 155 | - } | |
| 156 | - fprintf(out, "#endif\n"); | |
| 157 | -# endif /* BYFOUR */ | |
| 158 | - fprintf(out, " }\n};\n"); | |
| 318 | + | |
| 319 | + /* write out little-endian CRC table to crc32.h */ | |
| 320 | + fprintf(out, | |
| 321 | + "/* crc32.h -- tables for rapid CRC calculation\n" | |
| 322 | + " * Generated automatically by crc32.c\n */\n" | |
| 323 | + "\n" | |
| 324 | + "local const z_crc_t FAR crc_table[] = {\n" | |
| 325 | + " "); | |
| 326 | + write_table(out, crc_table, 256); | |
| 327 | + fprintf(out, | |
| 328 | + "};\n"); | |
| 329 | + | |
| 330 | + /* write out big-endian CRC table for 64-bit z_word_t to crc32.h */ | |
| 331 | + fprintf(out, | |
| 332 | + "\n" | |
| 333 | + "#ifdef W\n" | |
| 334 | + "\n" | |
| 335 | + "#if W == 8\n" | |
| 336 | + "\n" | |
| 337 | + "local const z_word_t FAR crc_big_table[] = {\n" | |
| 338 | + " "); | |
| 339 | + write_table64(out, crc_big_table, 256); | |
| 340 | + fprintf(out, | |
| 341 | + "};\n"); | |
| 342 | + | |
| 343 | + /* write out big-endian CRC table for 32-bit z_word_t to crc32.h */ | |
| 344 | + fprintf(out, | |
| 345 | + "\n" | |
| 346 | + "#else /* W == 4 */\n" | |
| 347 | + "\n" | |
| 348 | + "local const z_word_t FAR crc_big_table[] = {\n" | |
| 349 | + " "); | |
| 350 | + write_table32hi(out, crc_big_table, 256); | |
| 351 | + fprintf(out, | |
| 352 | + "};\n" | |
| 353 | + "\n" | |
| 354 | + "#endif\n"); | |
| 355 | + | |
| 356 | + /* write out braid tables for each value of N */ | |
| 357 | + for (n = 1; n <= 6; n++) { | |
| 358 | + fprintf(out, | |
| 359 | + "\n" | |
| 360 | + "#if N == %d\n", n); | |
| 361 | + | |
| 362 | + /* compute braid tables for this N and 64-bit word_t */ | |
| 363 | + braid(ltl, big, n, 8); | |
| 364 | + | |
| 365 | + /* write out braid tables for 64-bit z_word_t to crc32.h */ | |
| 366 | + fprintf(out, | |
| 367 | + "\n" | |
| 368 | + "#if W == 8\n" | |
| 369 | + "\n" | |
| 370 | + "local const z_crc_t FAR crc_braid_table[][256] = {\n"); | |
| 371 | + for (k = 0; k < 8; k++) { | |
| 372 | + fprintf(out, " {"); | |
| 373 | + write_table(out, ltl[k], 256); | |
| 374 | + fprintf(out, "}%s", k < 7 ? ",\n" : ""); | |
| 375 | + } | |
| 376 | + fprintf(out, | |
| 377 | + "};\n" | |
| 378 | + "\n" | |
| 379 | + "local const z_word_t FAR crc_braid_big_table[][256] = {\n"); | |
| 380 | + for (k = 0; k < 8; k++) { | |
| 381 | + fprintf(out, " {"); | |
| 382 | + write_table64(out, big[k], 256); | |
| 383 | + fprintf(out, "}%s", k < 7 ? ",\n" : ""); | |
| 384 | + } | |
| 385 | + fprintf(out, | |
| 386 | + "};\n"); | |
| 387 | + | |
| 388 | + /* compute braid tables for this N and 32-bit word_t */ | |
| 389 | + braid(ltl, big, n, 4); | |
| 390 | + | |
| 391 | + /* write out braid tables for 32-bit z_word_t to crc32.h */ | |
| 392 | + fprintf(out, | |
| 393 | + "\n" | |
| 394 | + "#else /* W == 4 */\n" | |
| 395 | + "\n" | |
| 396 | + "local const z_crc_t FAR crc_braid_table[][256] = {\n"); | |
| 397 | + for (k = 0; k < 4; k++) { | |
| 398 | + fprintf(out, " {"); | |
| 399 | + write_table(out, ltl[k], 256); | |
| 400 | + fprintf(out, "}%s", k < 3 ? ",\n" : ""); | |
| 401 | + } | |
| 402 | + fprintf(out, | |
| 403 | + "};\n" | |
| 404 | + "\n" | |
| 405 | + "local const z_word_t FAR crc_braid_big_table[][256] = {\n"); | |
| 406 | + for (k = 0; k < 4; k++) { | |
| 407 | + fprintf(out, " {"); | |
| 408 | + write_table32hi(out, big[k], 256); | |
| 409 | + fprintf(out, "}%s", k < 3 ? ",\n" : ""); | |
| 410 | + } | |
| 411 | + fprintf(out, | |
| 412 | + "};\n" | |
| 413 | + "\n" | |
| 414 | + "#endif\n" | |
| 415 | + "\n" | |
| 416 | + "#endif\n"); | |
| 417 | + } | |
| 418 | + fprintf(out, | |
| 419 | + "\n" | |
| 420 | + "#endif\n"); | |
| 421 | + | |
| 422 | + /* write out zeros operator table to crc32.h */ | |
| 423 | + fprintf(out, | |
| 424 | + "\n" | |
| 425 | + "local const z_crc_t FAR x2n_table[] = {\n" | |
| 426 | + " "); | |
| 427 | + write_table(out, x2n_table, 32); | |
| 428 | + fprintf(out, | |
| 429 | + "};\n"); | |
| 159 | 430 | fclose(out); |
| 160 | 431 | } |
| 161 | 432 | #endif /* MAKECRCH */ |
| 162 | 433 | } |
| 163 | 434 | |
| 164 | 435 | #ifdef MAKECRCH |
| 165 | -local void write_table(out, table) | |
| 436 | + | |
| 437 | +/* | |
| 438 | + Write the 32-bit values in table[0..k-1] to out, five per line in | |
| 439 | + hexadecimal separated by commas. | |
| 440 | + */ | |
| 441 | +local void write_table(out, table, k) | |
| 166 | 442 | FILE *out; |
| 167 | 443 | const z_crc_t FAR *table; |
| 444 | + int k; | |
| 168 | 445 | { |
| 169 | 446 | int n; |
| 170 | 447 | |
| 171 | - for (n = 0; n < 256; n++) | |
| 172 | - fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ", | |
| 448 | + for (n = 0; n < k; n++) | |
| 449 | + fprintf(out, "%s0x%08lx%s", n == 0 || n % 5 ? "" : " ", | |
| 173 | 450 | (unsigned long)(table[n]), |
| 174 | - n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", ")); | |
| 451 | + n == k - 1 ? "" : (n % 5 == 4 ? ",\n" : ", ")); | |
| 452 | +} | |
| 453 | + | |
| 454 | +/* | |
| 455 | + Write the high 32-bits of each value in table[0..k-1] to out, five per line | |
| 456 | + in hexadecimal separated by commas. | |
| 457 | + */ | |
| 458 | +local void write_table32hi(out, table, k) | |
| 459 | +FILE *out; | |
| 460 | +const z_word_t FAR *table; | |
| 461 | +int k; | |
| 462 | +{ | |
| 463 | + int n; | |
| 464 | + | |
| 465 | + for (n = 0; n < k; n++) | |
| 466 | + fprintf(out, "%s0x%08lx%s", n == 0 || n % 5 ? "" : " ", | |
| 467 | + (unsigned long)(table[n] >> 32), | |
| 468 | + n == k - 1 ? "" : (n % 5 == 4 ? ",\n" : ", ")); | |
| 469 | +} | |
| 470 | + | |
| 471 | +/* | |
| 472 | + Write the 64-bit values in table[0..k-1] to out, three per line in | |
| 473 | + hexadecimal separated by commas. This assumes that if there is a 64-bit | |
| 474 | + type, then there is also a long long integer type, and it is at least 64 | |
| 475 | + bits. If not, then the type cast and format string can be adjusted | |
| 476 | + accordingly. | |
| 477 | + */ | |
| 478 | +local void write_table64(out, table, k) | |
| 479 | + FILE *out; | |
| 480 | + const z_word_t FAR *table; | |
| 481 | + int k; | |
| 482 | +{ | |
| 483 | + int n; | |
| 484 | + | |
| 485 | + for (n = 0; n < k; n++) | |
| 486 | + fprintf(out, "%s0x%016llx%s", n == 0 || n % 3 ? "" : " ", | |
| 487 | + (unsigned long long)(table[n]), | |
| 488 | + n == k - 1 ? "" : (n % 3 == 2 ? ",\n" : ", ")); | |
| 489 | +} | |
| 490 | + | |
| 491 | +/* Actually do the deed. */ | |
| 492 | +int main() | |
| 493 | +{ | |
| 494 | + make_crc_table(); | |
| 495 | + return 0; | |
| 175 | 496 | } |
| 497 | + | |
| 176 | 498 | #endif /* MAKECRCH */ |
| 499 | + | |
| 500 | +#ifdef W | |
| 501 | +/* | |
| 502 | + Generate the little and big-endian braid tables for the given n and z_word_t | |
| 503 | + size w. Each array must have room for w blocks of 256 elements. | |
| 504 | + */ | |
| 505 | +local void braid(ltl, big, n, w) | |
| 506 | + z_crc_t ltl[][256]; | |
| 507 | + z_word_t big[][256]; | |
| 508 | + int n; | |
| 509 | + int w; | |
| 510 | +{ | |
| 511 | + int k; | |
| 512 | + z_crc_t i, p, q; | |
| 513 | + for (k = 0; k < w; k++) { | |
| 514 | + p = x2nmodp((n * w + 3 - k) << 3, 0); | |
| 515 | + ltl[k][0] = 0; | |
| 516 | + big[w - 1 - k][0] = 0; | |
| 517 | + for (i = 1; i < 256; i++) { | |
| 518 | + ltl[k][i] = q = multmodp(i << 24, p); | |
| 519 | + big[w - 1 - k][i] = byte_swap(q); | |
| 520 | + } | |
| 521 | + } | |
| 522 | +} | |
| 523 | +#endif | |
| 177 | 524 | |
| 178 | 525 | #else /* !DYNAMIC_CRC_TABLE */ |
| 179 | 526 | /* ======================================================================== |
| 180 | - * Tables of CRC-32s of all single-byte values, made by make_crc_table(). | |
| 527 | + * Tables for byte-wise and braided CRC-32 calculations, and a table of powers | |
| 528 | + * of x for combining CRC-32s, all made by make_crc_table(). | |
| 181 | 529 | */ |
| 182 | 530 | #include "crc32.h" |
| 183 | 531 | #endif /* DYNAMIC_CRC_TABLE */ |
| 532 | + | |
| 533 | +/* ======================================================================== | |
| 534 | + * Routines used for CRC calculation. Some are also required for the table | |
| 535 | + * generation above. | |
| 536 | + */ | |
| 537 | + | |
| 538 | +/* | |
| 539 | + Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial, | |
| 540 | + reflected. For speed, this requires that a not be zero. | |
| 541 | + */ | |
| 542 | +local z_crc_t multmodp(a, b) | |
| 543 | + z_crc_t a; | |
| 544 | + z_crc_t b; | |
| 545 | +{ | |
| 546 | + z_crc_t m, p; | |
| 547 | + | |
| 548 | + m = (z_crc_t)1 << 31; | |
| 549 | + p = 0; | |
| 550 | + for (;;) { | |
| 551 | + if (a & m) { | |
| 552 | + p ^= b; | |
| 553 | + if ((a & (m - 1)) == 0) | |
| 554 | + break; | |
| 555 | + } | |
| 556 | + m >>= 1; | |
| 557 | + b = b & 1 ? (b >> 1) ^ POLY : b >> 1; | |
| 558 | + } | |
| 559 | + return p; | |
| 560 | +} | |
| 561 | + | |
| 562 | +/* | |
| 563 | + Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been | |
| 564 | + initialized. | |
| 565 | + */ | |
| 566 | +local z_crc_t x2nmodp(n, k) | |
| 567 | + z_off64_t n; | |
| 568 | + unsigned k; | |
| 569 | +{ | |
| 570 | + z_crc_t p; | |
| 571 | + | |
| 572 | + p = (z_crc_t)1 << 31; /* x^0 == 1 */ | |
| 573 | + while (n) { | |
| 574 | + if (n & 1) | |
| 575 | + p = multmodp(x2n_table[k & 31], p); | |
| 576 | + n >>= 1; | |
| 577 | + k++; | |
| 578 | + } | |
| 579 | + return p; | |
| 580 | +} | |
| 184 | 581 | |
| 185 | 582 | /* ========================================================================= |
| 186 | - * This function can be used by asm versions of crc32() | |
| 583 | + * This function can be used by asm versions of crc32(), and to force the | |
| 584 | + * generation of the CRC tables in a threaded application. | |
| 187 | 585 | */ |
| 188 | 586 | const z_crc_t FAR * ZEXPORT get_crc_table() |
| 189 | 587 | { |
| 190 | 588 | #ifdef DYNAMIC_CRC_TABLE |
| 191 | - if (crc_table_empty) | |
| 192 | - make_crc_table(); | |
| 589 | + once(&made, make_crc_table); | |
| 193 | 590 | #endif /* DYNAMIC_CRC_TABLE */ |
| 194 | 591 | return (const z_crc_t FAR *)crc_table; |
| 195 | 592 | } |
| 196 | 593 | |
| 197 | -/* ========================================================================= */ | |
| 198 | -#define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8) | |
| 199 | -#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1 | |
| 594 | +/* ========================================================================= | |
| 595 | + * Use ARM machine instructions if available. This will compute the CRC about | |
| 596 | + * ten times faster than the braided calculation. This code does not check for | |
| 597 | + * the presence of the CRC instruction at run time. __ARM_FEATURE_CRC32 will | |
| 598 | + * only be defined if the compilation specifies an ARM processor architecture | |
| 599 | + * that has the instructions. For example, compiling with -march=armv8.1-a or | |
| 600 | + * -march=armv8-a+crc, or -march=native if the compile machine has the crc32 | |
| 601 | + * instructions. | |
| 602 | + */ | |
| 603 | +#ifdef ARMCRC32 | |
| 604 | + | |
| 605 | +/* | |
| 606 | + Constants empirically determined to maximize speed. These values are from | |
| 607 | + measurements on a Cortex-A57. Your mileage may vary. | |
| 608 | + */ | |
| 609 | +#define Z_BATCH 3990 /* number of words in a batch */ | |
| 610 | +#define Z_BATCH_ZEROS 0xa10d3d0c /* computed from Z_BATCH = 3990 */ | |
| 611 | +#define Z_BATCH_MIN 800 /* fewest words in a final batch */ | |
| 612 | + | |
| 613 | +unsigned long ZEXPORT crc32_z(crc, buf, len) | |
| 614 | + unsigned long crc; | |
| 615 | + const unsigned char FAR *buf; | |
| 616 | + z_size_t len; | |
| 617 | +{ | |
| 618 | + z_crc_t val; | |
| 619 | + z_word_t crc1, crc2; | |
| 620 | + const z_word_t *word; | |
| 621 | + z_word_t val0, val1, val2; | |
| 622 | + z_size_t last, last2, i; | |
| 623 | + z_size_t num; | |
| 624 | + | |
| 625 | + /* Return initial CRC, if requested. */ | |
| 626 | + if (buf == Z_NULL) return 0; | |
| 627 | + | |
| 628 | +#ifdef DYNAMIC_CRC_TABLE | |
| 629 | + once(&made, make_crc_table); | |
| 630 | +#endif /* DYNAMIC_CRC_TABLE */ | |
| 631 | + | |
| 632 | + /* Pre-condition the CRC */ | |
| 633 | + crc ^= 0xffffffff; | |
| 634 | + | |
| 635 | + /* Compute the CRC up to a word boundary. */ | |
| 636 | + while (len && ((z_size_t)buf & 7) != 0) { | |
| 637 | + len--; | |
| 638 | + val = *buf++; | |
| 639 | + __asm__ volatile("crc32b %w0, %w0, %w1" : "+r"(crc) : "r"(val)); | |
| 640 | + } | |
| 641 | + | |
| 642 | + /* Prepare to compute the CRC on full 64-bit words word[0..num-1]. */ | |
| 643 | + word = (z_word_t const *)buf; | |
| 644 | + num = len >> 3; | |
| 645 | + len &= 7; | |
| 646 | + | |
| 647 | + /* Do three interleaved CRCs to realize the throughput of one crc32x | |
| 648 | + instruction per cycle. Each CRC is calcuated on Z_BATCH words. The three | |
| 649 | + CRCs are combined into a single CRC after each set of batches. */ | |
| 650 | + while (num >= 3 * Z_BATCH) { | |
| 651 | + crc1 = 0; | |
| 652 | + crc2 = 0; | |
| 653 | + for (i = 0; i < Z_BATCH; i++) { | |
| 654 | + val0 = word[i]; | |
| 655 | + val1 = word[i + Z_BATCH]; | |
| 656 | + val2 = word[i + 2 * Z_BATCH]; | |
| 657 | + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0)); | |
| 658 | + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc1) : "r"(val1)); | |
| 659 | + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc2) : "r"(val2)); | |
| 660 | + } | |
| 661 | + word += 3 * Z_BATCH; | |
| 662 | + num -= 3 * Z_BATCH; | |
| 663 | + crc = multmodp(Z_BATCH_ZEROS, crc) ^ crc1; | |
| 664 | + crc = multmodp(Z_BATCH_ZEROS, crc) ^ crc2; | |
| 665 | + } | |
| 666 | + | |
| 667 | + /* Do one last smaller batch with the remaining words, if there are enough | |
| 668 | + to pay for the combination of CRCs. */ | |
| 669 | + last = num / 3; | |
| 670 | + if (last >= Z_BATCH_MIN) { | |
| 671 | + last2 = last << 1; | |
| 672 | + crc1 = 0; | |
| 673 | + crc2 = 0; | |
| 674 | + for (i = 0; i < last; i++) { | |
| 675 | + val0 = word[i]; | |
| 676 | + val1 = word[i + last]; | |
| 677 | + val2 = word[i + last2]; | |
| 678 | + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0)); | |
| 679 | + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc1) : "r"(val1)); | |
| 680 | + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc2) : "r"(val2)); | |
| 681 | + } | |
| 682 | + word += 3 * last; | |
| 683 | + num -= 3 * last; | |
| 684 | + val = x2nmodp(last, 6); | |
| 685 | + crc = multmodp(val, crc) ^ crc1; | |
| 686 | + crc = multmodp(val, crc) ^ crc2; | |
| 687 | + } | |
| 688 | + | |
| 689 | + /* Compute the CRC on any remaining words. */ | |
| 690 | + for (i = 0; i < num; i++) { | |
| 691 | + val0 = word[i]; | |
| 692 | + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0)); | |
| 693 | + } | |
| 694 | + word += num; | |
| 695 | + | |
| 696 | + /* Complete the CRC on any remaining bytes. */ | |
| 697 | + buf = (const unsigned char FAR *)word; | |
| 698 | + while (len) { | |
| 699 | + len--; | |
| 700 | + val = *buf++; | |
| 701 | + __asm__ volatile("crc32b %w0, %w0, %w1" : "+r"(crc) : "r"(val)); | |
| 702 | + } | |
| 703 | + | |
| 704 | + /* Return the CRC, post-conditioned. */ | |
| 705 | + return crc ^ 0xffffffff; | |
| 706 | +} | |
| 707 | + | |
| 708 | +#else | |
| 709 | + | |
| 710 | +#ifdef W | |
| 711 | + | |
| 712 | +/* | |
| 713 | + Return the CRC of the W bytes in the word_t data, taking the | |
| 714 | + least-significant byte of the word as the first byte of data, without any pre | |
| 715 | + or post conditioning. This is used to combine the CRCs of each braid. | |
| 716 | + */ | |
| 717 | +local z_crc_t crc_word(data) | |
| 718 | + z_word_t data; | |
| 719 | +{ | |
| 720 | + int k; | |
| 721 | + for (k = 0; k < W; k++) | |
| 722 | + data = (data >> 8) ^ crc_table[data & 0xff]; | |
| 723 | + return (z_crc_t)data; | |
| 724 | +} | |
| 725 | + | |
| 726 | +local z_word_t crc_word_big(data) | |
| 727 | + z_word_t data; | |
| 728 | +{ | |
| 729 | + int k; | |
| 730 | + for (k = 0; k < W; k++) | |
| 731 | + data = (data << 8) ^ | |
| 732 | + crc_big_table[(data >> ((W - 1) << 3)) & 0xff]; | |
| 733 | + return data; | |
| 734 | +} | |
| 735 | + | |
| 736 | +#endif | |
| 200 | 737 | |
| 201 | 738 | /* ========================================================================= */ |
| 202 | 739 | unsigned long ZEXPORT crc32_z(crc, buf, len) |
| 203 | 740 | unsigned long crc; |
| 204 | 741 | const unsigned char FAR *buf; |
| 205 | 742 | z_size_t len; |
| 206 | 743 | { |
| 207 | - if (buf == Z_NULL) return 0UL; | |
| 744 | + /* Return initial CRC, if requested. */ | |
| 745 | + if (buf == Z_NULL) return 0; | |
| 208 | 746 | |
| 209 | 747 | #ifdef DYNAMIC_CRC_TABLE |
| 210 | - if (crc_table_empty) | |
| 211 | - make_crc_table(); | |
| 748 | + once(&made, make_crc_table); | |
| 212 | 749 | #endif /* DYNAMIC_CRC_TABLE */ |
| 213 | 750 | |
| 214 | -#ifdef BYFOUR | |
| 215 | - if (sizeof(void *) == sizeof(ptrdiff_t)) { | |
| 216 | - z_crc_t endian; | |
| 751 | + /* Pre-condition the CRC */ | |
| 752 | + crc ^= 0xffffffff; | |
| 753 | + | |
| 754 | +#ifdef W | |
| 755 | + | |
| 756 | + /* If provided enough bytes, do a braided CRC calculation. */ | |
| 757 | + if (len >= N * W + W - 1) { | |
| 758 | + z_size_t blks; | |
| 759 | + z_word_t const *words; | |
| 760 | + unsigned endian; | |
| 761 | + int k; | |
| 762 | + | |
| 763 | + /* Compute the CRC up to a z_word_t boundary. */ | |
| 764 | + while (len && ((z_size_t)buf & (W - 1)) != 0) { | |
| 765 | + len--; | |
| 766 | + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; | |
| 767 | + } | |
| 768 | + | |
| 769 | + /* Compute the CRC on as many N z_word_t blocks as are available. */ | |
| 770 | + blks = len / (N * W); | |
| 771 | + len -= blks * N * W; | |
| 772 | + words = (z_word_t const *)buf; | |
| 217 | 773 | |
| 774 | + /* Do endian check at execution time instead of compile time, since ARM | |
| 775 | + processors can change the endianess at execution time. If the | |
| 776 | + compiler knows what the endianess will be, it can optimize out the | |
| 777 | + check and the unused branch. */ | |
| 218 | 778 | endian = 1; |
| 219 | - if (*((unsigned char *)(&endian))) | |
| 220 | - return crc32_little(crc, buf, len); | |
| 221 | - else | |
| 222 | - return crc32_big(crc, buf, len); | |
| 223 | - } | |
| 224 | -#endif /* BYFOUR */ | |
| 225 | - crc = crc ^ 0xffffffffUL; | |
| 226 | - while (len >= 8) { | |
| 227 | - DO8; | |
| 779 | + if (*(unsigned char *)&endian) { | |
| 780 | + /* Little endian. */ | |
| 781 | + | |
| 782 | + z_crc_t crc0; | |
| 783 | + z_word_t word0; | |
| 784 | +#if N > 1 | |
| 785 | + z_crc_t crc1; | |
| 786 | + z_word_t word1; | |
| 787 | +#if N > 2 | |
| 788 | + z_crc_t crc2; | |
| 789 | + z_word_t word2; | |
| 790 | +#if N > 3 | |
| 791 | + z_crc_t crc3; | |
| 792 | + z_word_t word3; | |
| 793 | +#if N > 4 | |
| 794 | + z_crc_t crc4; | |
| 795 | + z_word_t word4; | |
| 796 | +#if N > 5 | |
| 797 | + z_crc_t crc5; | |
| 798 | + z_word_t word5; | |
| 799 | +#endif | |
| 800 | +#endif | |
| 801 | +#endif | |
| 802 | +#endif | |
| 803 | +#endif | |
| 804 | + | |
| 805 | + /* Initialize the CRC for each braid. */ | |
| 806 | + crc0 = crc; | |
| 807 | +#if N > 1 | |
| 808 | + crc1 = 0; | |
| 809 | +#if N > 2 | |
| 810 | + crc2 = 0; | |
| 811 | +#if N > 3 | |
| 812 | + crc3 = 0; | |
| 813 | +#if N > 4 | |
| 814 | + crc4 = 0; | |
| 815 | +#if N > 5 | |
| 816 | + crc5 = 0; | |
| 817 | +#endif | |
| 818 | +#endif | |
| 819 | +#endif | |
| 820 | +#endif | |
| 821 | +#endif | |
| 822 | + | |
| 823 | + /* | |
| 824 | + Process the first blks-1 blocks, computing the CRCs on each braid | |
| 825 | + independently. | |
| 826 | + */ | |
| 827 | + while (--blks) { | |
| 828 | + /* Load the word for each braid into registers. */ | |
| 829 | + word0 = crc0 ^ words[0]; | |
| 830 | +#if N > 1 | |
| 831 | + word1 = crc1 ^ words[1]; | |
| 832 | +#if N > 2 | |
| 833 | + word2 = crc2 ^ words[2]; | |
| 834 | +#if N > 3 | |
| 835 | + word3 = crc3 ^ words[3]; | |
| 836 | +#if N > 4 | |
| 837 | + word4 = crc4 ^ words[4]; | |
| 838 | +#if N > 5 | |
| 839 | + word5 = crc5 ^ words[5]; | |
| 840 | +#endif | |
| 841 | +#endif | |
| 842 | +#endif | |
| 843 | +#endif | |
| 844 | +#endif | |
| 845 | + words += N; | |
| 846 | + | |
| 847 | + /* Compute and update the CRC for each word. The loop should | |
| 848 | + get unrolled. */ | |
| 849 | + crc0 = crc_braid_table[0][word0 & 0xff]; | |
| 850 | +#if N > 1 | |
| 851 | + crc1 = crc_braid_table[0][word1 & 0xff]; | |
| 852 | +#if N > 2 | |
| 853 | + crc2 = crc_braid_table[0][word2 & 0xff]; | |
| 854 | +#if N > 3 | |
| 855 | + crc3 = crc_braid_table[0][word3 & 0xff]; | |
| 856 | +#if N > 4 | |
| 857 | + crc4 = crc_braid_table[0][word4 & 0xff]; | |
| 858 | +#if N > 5 | |
| 859 | + crc5 = crc_braid_table[0][word5 & 0xff]; | |
| 860 | +#endif | |
| 861 | +#endif | |
| 862 | +#endif | |
| 863 | +#endif | |
| 864 | +#endif | |
| 865 | + for (k = 1; k < W; k++) { | |
| 866 | + crc0 ^= crc_braid_table[k][(word0 >> (k << 3)) & 0xff]; | |
| 867 | +#if N > 1 | |
| 868 | + crc1 ^= crc_braid_table[k][(word1 >> (k << 3)) & 0xff]; | |
| 869 | +#if N > 2 | |
| 870 | + crc2 ^= crc_braid_table[k][(word2 >> (k << 3)) & 0xff]; | |
| 871 | +#if N > 3 | |
| 872 | + crc3 ^= crc_braid_table[k][(word3 >> (k << 3)) & 0xff]; | |
| 873 | +#if N > 4 | |
| 874 | + crc4 ^= crc_braid_table[k][(word4 >> (k << 3)) & 0xff]; | |
| 875 | +#if N > 5 | |
| 876 | + crc5 ^= crc_braid_table[k][(word5 >> (k << 3)) & 0xff]; | |
| 877 | +#endif | |
| 878 | +#endif | |
| 879 | +#endif | |
| 880 | +#endif | |
| 881 | +#endif | |
| 882 | + } | |
| 883 | + } | |
| 884 | + | |
| 885 | + /* | |
| 886 | + Process the last block, combining the CRCs of the N braids at the | |
| 887 | + same time. | |
| 888 | + */ | |
| 889 | + crc = crc_word(crc0 ^ words[0]); | |
| 890 | +#if N > 1 | |
| 891 | + crc = crc_word(crc1 ^ words[1] ^ crc); | |
| 892 | +#if N > 2 | |
| 893 | + crc = crc_word(crc2 ^ words[2] ^ crc); | |
| 894 | +#if N > 3 | |
| 895 | + crc = crc_word(crc3 ^ words[3] ^ crc); | |
| 896 | +#if N > 4 | |
| 897 | + crc = crc_word(crc4 ^ words[4] ^ crc); | |
| 898 | +#if N > 5 | |
| 899 | + crc = crc_word(crc5 ^ words[5] ^ crc); | |
| 900 | +#endif | |
| 901 | +#endif | |
| 902 | +#endif | |
| 903 | +#endif | |
| 904 | +#endif | |
| 905 | + words += N; | |
| 906 | + } | |
| 907 | + else { | |
| 908 | + /* Big endian. */ | |
| 909 | + | |
| 910 | + z_word_t crc0, word0, comb; | |
| 911 | +#if N > 1 | |
| 912 | + z_word_t crc1, word1; | |
| 913 | +#if N > 2 | |
| 914 | + z_word_t crc2, word2; | |
| 915 | +#if N > 3 | |
| 916 | + z_word_t crc3, word3; | |
| 917 | +#if N > 4 | |
| 918 | + z_word_t crc4, word4; | |
| 919 | +#if N > 5 | |
| 920 | + z_word_t crc5, word5; | |
| 921 | +#endif | |
| 922 | +#endif | |
| 923 | +#endif | |
| 924 | +#endif | |
| 925 | +#endif | |
| 926 | + | |
| 927 | + /* Initialize the CRC for each braid. */ | |
| 928 | + crc0 = byte_swap(crc); | |
| 929 | +#if N > 1 | |
| 930 | + crc1 = 0; | |
| 931 | +#if N > 2 | |
| 932 | + crc2 = 0; | |
| 933 | +#if N > 3 | |
| 934 | + crc3 = 0; | |
| 935 | +#if N > 4 | |
| 936 | + crc4 = 0; | |
| 937 | +#if N > 5 | |
| 938 | + crc5 = 0; | |
| 939 | +#endif | |
| 940 | +#endif | |
| 941 | +#endif | |
| 942 | +#endif | |
| 943 | +#endif | |
| 944 | + | |
| 945 | + /* | |
| 946 | + Process the first blks-1 blocks, computing the CRCs on each braid | |
| 947 | + independently. | |
| 948 | + */ | |
| 949 | + while (--blks) { | |
| 950 | + /* Load the word for each braid into registers. */ | |
| 951 | + word0 = crc0 ^ words[0]; | |
| 952 | +#if N > 1 | |
| 953 | + word1 = crc1 ^ words[1]; | |
| 954 | +#if N > 2 | |
| 955 | + word2 = crc2 ^ words[2]; | |
| 956 | +#if N > 3 | |
| 957 | + word3 = crc3 ^ words[3]; | |
| 958 | +#if N > 4 | |
| 959 | + word4 = crc4 ^ words[4]; | |
| 960 | +#if N > 5 | |
| 961 | + word5 = crc5 ^ words[5]; | |
| 962 | +#endif | |
| 963 | +#endif | |
| 964 | +#endif | |
| 965 | +#endif | |
| 966 | +#endif | |
| 967 | + words += N; | |
| 968 | + | |
| 969 | + /* Compute and update the CRC for each word. The loop should | |
| 970 | + get unrolled. */ | |
| 971 | + crc0 = crc_braid_big_table[0][word0 & 0xff]; | |
| 972 | +#if N > 1 | |
| 973 | + crc1 = crc_braid_big_table[0][word1 & 0xff]; | |
| 974 | +#if N > 2 | |
| 975 | + crc2 = crc_braid_big_table[0][word2 & 0xff]; | |
| 976 | +#if N > 3 | |
| 977 | + crc3 = crc_braid_big_table[0][word3 & 0xff]; | |
| 978 | +#if N > 4 | |
| 979 | + crc4 = crc_braid_big_table[0][word4 & 0xff]; | |
| 980 | +#if N > 5 | |
| 981 | + crc5 = crc_braid_big_table[0][word5 & 0xff]; | |
| 982 | +#endif | |
| 983 | +#endif | |
| 984 | +#endif | |
| 985 | +#endif | |
| 986 | +#endif | |
| 987 | + for (k = 1; k < W; k++) { | |
| 988 | + crc0 ^= crc_braid_big_table[k][(word0 >> (k << 3)) & 0xff]; | |
| 989 | +#if N > 1 | |
| 990 | + crc1 ^= crc_braid_big_table[k][(word1 >> (k << 3)) & 0xff]; | |
| 991 | +#if N > 2 | |
| 992 | + crc2 ^= crc_braid_big_table[k][(word2 >> (k << 3)) & 0xff]; | |
| 993 | +#if N > 3 | |
| 994 | + crc3 ^= crc_braid_big_table[k][(word3 >> (k << 3)) & 0xff]; | |
| 995 | +#if N > 4 | |
| 996 | + crc4 ^= crc_braid_big_table[k][(word4 >> (k << 3)) & 0xff]; | |
| 997 | +#if N > 5 | |
| 998 | + crc5 ^= crc_braid_big_table[k][(word5 >> (k << 3)) & 0xff]; | |
| 999 | +#endif | |
| 1000 | +#endif | |
| 1001 | +#endif | |
| 1002 | +#endif | |
| 1003 | +#endif | |
| 1004 | + } | |
| 1005 | + } | |
| 1006 | + | |
| 1007 | + /* | |
| 1008 | + Process the last block, combining the CRCs of the N braids at the | |
| 1009 | + same time. | |
| 1010 | + */ | |
| 1011 | + comb = crc_word_big(crc0 ^ words[0]); | |
| 1012 | +#if N > 1 | |
| 1013 | + comb = crc_word_big(crc1 ^ words[1] ^ comb); | |
| 1014 | +#if N > 2 | |
| 1015 | + comb = crc_word_big(crc2 ^ words[2] ^ comb); | |
| 1016 | +#if N > 3 | |
| 1017 | + comb = crc_word_big(crc3 ^ words[3] ^ comb); | |
| 1018 | +#if N > 4 | |
| 1019 | + comb = crc_word_big(crc4 ^ words[4] ^ comb); | |
| 1020 | +#if N > 5 | |
| 1021 | + comb = crc_word_big(crc5 ^ words[5] ^ comb); | |
| 1022 | +#endif | |
| 1023 | +#endif | |
| 1024 | +#endif | |
| 1025 | +#endif | |
| 1026 | +#endif | |
| 1027 | + words += N; | |
| 1028 | + crc = byte_swap(comb); | |
| 1029 | + } | |
| 1030 | + | |
| 1031 | + /* | |
| 1032 | + Update the pointer to the remaining bytes to process. | |
| 1033 | + */ | |
| 1034 | + buf = (unsigned char const *)words; | |
| 1035 | + } | |
| 1036 | + | |
| 1037 | +#endif /* W */ | |
| 1038 | + | |
| 1039 | + /* Complete the computation of the CRC on any remaining bytes. */ | |
| 1040 | + while (len >= 8) { | |
| 228 | 1041 | len -= 8; |
| 1042 | + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; | |
| 1043 | + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; | |
| 1044 | + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; | |
| 1045 | + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; | |
| 1046 | + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; | |
| 1047 | + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; | |
| 1048 | + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; | |
| 1049 | + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; | |
| 1050 | + } | |
| 1051 | + while (len) { | |
| 1052 | + len--; | |
| 1053 | + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; | |
| 229 | 1054 | } |
| 230 | - if (len) do { | |
| 231 | - DO1; | |
| 232 | - } while (--len); | |
| 233 | - return crc ^ 0xffffffffUL; | |
| 1055 | + | |
| 1056 | + /* Return the CRC, post-conditioned. */ | |
| 1057 | + return crc ^ 0xffffffff; | |
| 234 | 1058 | } |
| 1059 | + | |
| 1060 | +#endif | |
| 235 | 1061 | |
| 236 | 1062 | /* ========================================================================= */ |
| 237 | 1063 | unsigned long ZEXPORT crc32(crc, buf, len) |
| 238 | 1064 | unsigned long crc; |
| 239 | 1065 | const unsigned char FAR *buf; |
| @@ -240,203 +1066,51 @@ | ||
| 240 | 1066 | uInt len; |
| 241 | 1067 | { |
| 242 | 1068 | return crc32_z(crc, buf, len); |
| 243 | 1069 | } |
| 244 | 1070 | |
| 245 | -#ifdef BYFOUR | |
| 246 | - | |
| 247 | -/* | |
| 248 | - This BYFOUR code accesses the passed unsigned char * buffer with a 32-bit | |
| 249 | - integer pointer type. This violates the strict aliasing rule, where a | |
| 250 | - compiler can assume, for optimization purposes, that two pointers to | |
| 251 | - fundamentally different types won't ever point to the same memory. This can | |
| 252 | - manifest as a problem only if one of the pointers is written to. This code | |
| 253 | - only reads from those pointers. So long as this code remains isolated in | |
| 254 | - this compilation unit, there won't be a problem. For this reason, this code | |
| 255 | - should not be copied and pasted into a compilation unit in which other code | |
| 256 | - writes to the buffer that is passed to these routines. | |
| 257 | - */ | |
| 258 | - | |
| 259 | -/* ========================================================================= */ | |
| 260 | -#define DOLIT4 c ^= *buf4++; \ | |
| 261 | - c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \ | |
| 262 | - crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24] | |
| 263 | -#define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4 | |
| 264 | - | |
| 265 | -/* ========================================================================= */ | |
| 266 | -local unsigned long crc32_little(crc, buf, len) | |
| 267 | - unsigned long crc; | |
| 268 | - const unsigned char FAR *buf; | |
| 269 | - z_size_t len; | |
| 270 | -{ | |
| 271 | - register z_crc_t c; | |
| 272 | - register const z_crc_t FAR *buf4; | |
| 273 | - | |
| 274 | - c = (z_crc_t)crc; | |
| 275 | - c = ~c; | |
| 276 | - while (len && ((ptrdiff_t)buf & 3)) { | |
| 277 | - c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); | |
| 278 | - len--; | |
| 279 | - } | |
| 280 | - | |
| 281 | - buf4 = (const z_crc_t FAR *)(const void FAR *)buf; | |
| 282 | - while (len >= 32) { | |
| 283 | - DOLIT32; | |
| 284 | - len -= 32; | |
| 285 | - } | |
| 286 | - while (len >= 4) { | |
| 287 | - DOLIT4; | |
| 288 | - len -= 4; | |
| 289 | - } | |
| 290 | - buf = (const unsigned char FAR *)buf4; | |
| 291 | - | |
| 292 | - if (len) do { | |
| 293 | - c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); | |
| 294 | - } while (--len); | |
| 295 | - c = ~c; | |
| 296 | - return (unsigned long)c; | |
| 297 | -} | |
| 298 | - | |
| 299 | -/* ========================================================================= */ | |
| 300 | -#define DOBIG4 c ^= *buf4++; \ | |
| 301 | - c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \ | |
| 302 | - crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24] | |
| 303 | -#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4 | |
| 304 | - | |
| 305 | -/* ========================================================================= */ | |
| 306 | -local unsigned long crc32_big(crc, buf, len) | |
| 307 | - unsigned long crc; | |
| 308 | - const unsigned char FAR *buf; | |
| 309 | - z_size_t len; | |
| 310 | -{ | |
| 311 | - register z_crc_t c; | |
| 312 | - register const z_crc_t FAR *buf4; | |
| 313 | - | |
| 314 | - c = ZSWAP32((z_crc_t)crc); | |
| 315 | - c = ~c; | |
| 316 | - while (len && ((ptrdiff_t)buf & 3)) { | |
| 317 | - c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); | |
| 318 | - len--; | |
| 319 | - } | |
| 320 | - | |
| 321 | - buf4 = (const z_crc_t FAR *)(const void FAR *)buf; | |
| 322 | - while (len >= 32) { | |
| 323 | - DOBIG32; | |
| 324 | - len -= 32; | |
| 325 | - } | |
| 326 | - while (len >= 4) { | |
| 327 | - DOBIG4; | |
| 328 | - len -= 4; | |
| 329 | - } | |
| 330 | - buf = (const unsigned char FAR *)buf4; | |
| 331 | - | |
| 332 | - if (len) do { | |
| 333 | - c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); | |
| 334 | - } while (--len); | |
| 335 | - c = ~c; | |
| 336 | - return (unsigned long)(ZSWAP32(c)); | |
| 337 | -} | |
| 338 | - | |
| 339 | -#endif /* BYFOUR */ | |
| 340 | - | |
| 341 | -#define GF2_DIM 32 /* dimension of GF(2) vectors (length of CRC) */ | |
| 342 | - | |
| 343 | -/* ========================================================================= */ | |
| 344 | -local unsigned long gf2_matrix_times(mat, vec) | |
| 345 | - unsigned long *mat; | |
| 346 | - unsigned long vec; | |
| 347 | -{ | |
| 348 | - unsigned long sum; | |
| 349 | - | |
| 350 | - sum = 0; | |
| 351 | - while (vec) { | |
| 352 | - if (vec & 1) | |
| 353 | - sum ^= *mat; | |
| 354 | - vec >>= 1; | |
| 355 | - mat++; | |
| 356 | - } | |
| 357 | - return sum; | |
| 358 | -} | |
| 359 | - | |
| 360 | -/* ========================================================================= */ | |
| 361 | -local void gf2_matrix_square(square, mat) | |
| 362 | - unsigned long *square; | |
| 363 | - unsigned long *mat; | |
| 364 | -{ | |
| 365 | - int n; | |
| 366 | - | |
| 367 | - for (n = 0; n < GF2_DIM; n++) | |
| 368 | - square[n] = gf2_matrix_times(mat, mat[n]); | |
| 369 | -} | |
| 370 | - | |
| 371 | -/* ========================================================================= */ | |
| 372 | -local uLong crc32_combine_(crc1, crc2, len2) | |
| 1071 | +/* ========================================================================= */ | |
| 1072 | +uLong ZEXPORT crc32_combine64(crc1, crc2, len2) | |
| 373 | 1073 | uLong crc1; |
| 374 | 1074 | uLong crc2; |
| 375 | 1075 | z_off64_t len2; |
| 376 | 1076 | { |
| 377 | - int n; | |
| 378 | - unsigned long row; | |
| 379 | - unsigned long even[GF2_DIM]; /* even-power-of-two zeros operator */ | |
| 380 | - unsigned long odd[GF2_DIM]; /* odd-power-of-two zeros operator */ | |
| 381 | - | |
| 382 | - /* degenerate case (also disallow negative lengths) */ | |
| 383 | - if (len2 <= 0) | |
| 384 | - return crc1; | |
| 385 | - | |
| 386 | - /* put operator for one zero bit in odd */ | |
| 387 | - odd[0] = 0xedb88320UL; /* CRC-32 polynomial */ | |
| 388 | - row = 1; | |
| 389 | - for (n = 1; n < GF2_DIM; n++) { | |
| 390 | - odd[n] = row; | |
| 391 | - row <<= 1; | |
| 392 | - } | |
| 393 | - | |
| 394 | - /* put operator for two zero bits in even */ | |
| 395 | - gf2_matrix_square(even, odd); | |
| 396 | - | |
| 397 | - /* put operator for four zero bits in odd */ | |
| 398 | - gf2_matrix_square(odd, even); | |
| 399 | - | |
| 400 | - /* apply len2 zeros to crc1 (first square will put the operator for one | |
| 401 | - zero byte, eight zero bits, in even) */ | |
| 402 | - do { | |
| 403 | - /* apply zeros operator for this bit of len2 */ | |
| 404 | - gf2_matrix_square(even, odd); | |
| 405 | - if (len2 & 1) | |
| 406 | - crc1 = gf2_matrix_times(even, crc1); | |
| 407 | - len2 >>= 1; | |
| 408 | - | |
| 409 | - /* if no more bits set, then done */ | |
| 410 | - if (len2 == 0) | |
| 411 | - break; | |
| 412 | - | |
| 413 | - /* another iteration of the loop with odd and even swapped */ | |
| 414 | - gf2_matrix_square(odd, even); | |
| 415 | - if (len2 & 1) | |
| 416 | - crc1 = gf2_matrix_times(odd, crc1); | |
| 417 | - len2 >>= 1; | |
| 418 | - | |
| 419 | - /* if no more bits set, then done */ | |
| 420 | - } while (len2 != 0); | |
| 421 | - | |
| 422 | - /* return combined crc */ | |
| 423 | - crc1 ^= crc2; | |
| 424 | - return crc1; | |
| 1077 | +#ifdef DYNAMIC_CRC_TABLE | |
| 1078 | + once(&made, make_crc_table); | |
| 1079 | +#endif /* DYNAMIC_CRC_TABLE */ | |
| 1080 | + return multmodp(x2nmodp(len2, 3), crc1) ^ crc2; | |
| 425 | 1081 | } |
| 426 | 1082 | |
| 427 | 1083 | /* ========================================================================= */ |
| 428 | 1084 | uLong ZEXPORT crc32_combine(crc1, crc2, len2) |
| 429 | 1085 | uLong crc1; |
| 430 | 1086 | uLong crc2; |
| 431 | 1087 | z_off_t len2; |
| 432 | 1088 | { |
| 433 | - return crc32_combine_(crc1, crc2, len2); | |
| 1089 | + return crc32_combine64(crc1, crc2, len2); | |
| 434 | 1090 | } |
| 435 | 1091 | |
| 436 | -uLong ZEXPORT crc32_combine64(crc1, crc2, len2) | |
| 437 | - uLong crc1; | |
| 438 | - uLong crc2; | |
| 1092 | +/* ========================================================================= */ | |
| 1093 | +uLong ZEXPORT crc32_combine_gen64(len2) | |
| 439 | 1094 | z_off64_t len2; |
| 440 | 1095 | { |
| 441 | - return crc32_combine_(crc1, crc2, len2); | |
| 1096 | +#ifdef DYNAMIC_CRC_TABLE | |
| 1097 | + once(&made, make_crc_table); | |
| 1098 | +#endif /* DYNAMIC_CRC_TABLE */ | |
| 1099 | + return x2nmodp(len2, 3); | |
| 1100 | +} | |
| 1101 | + | |
| 1102 | +/* ========================================================================= */ | |
| 1103 | +uLong ZEXPORT crc32_combine_gen(len2) | |
| 1104 | + z_off_t len2; | |
| 1105 | +{ | |
| 1106 | + return crc32_combine_gen64(len2); | |
| 1107 | +} | |
| 1108 | + | |
| 1109 | +/* ========================================================================= */ | |
| 1110 | +uLong crc32_combine_op(crc1, crc2, op) | |
| 1111 | + uLong crc1; | |
| 1112 | + uLong crc2; | |
| 1113 | + uLong op; | |
| 1114 | +{ | |
| 1115 | + return multmodp(op, crc1) ^ crc2; | |
| 442 | 1116 | } |
| 443 | 1117 |
| --- compat/zlib/crc32.c | |
| +++ compat/zlib/crc32.c | |
| @@ -1,239 +1,1065 @@ | |
| 1 | /* crc32.c -- compute the CRC-32 of a data stream |
| 2 | * Copyright (C) 1995-2006, 2010, 2011, 2012, 2016 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | * |
| 5 | * Thanks to Rodney Brown <[email protected]> for his contribution of faster |
| 6 | * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing |
| 7 | * tables for updating the shift register in one step with three exclusive-ors |
| 8 | * instead of four steps with four exclusive-ors. This results in about a |
| 9 | * factor of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3. |
| 10 | */ |
| 11 | |
| 12 | /* @(#) $Id$ */ |
| 13 | |
| 14 | /* |
| 15 | Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore |
| 16 | protection on the static variables used to control the first-use generation |
| 17 | of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should |
| 18 | first call get_crc_table() to initialize the tables before allowing more than |
| 19 | one thread to use crc32(). |
| 20 | |
| 21 | DYNAMIC_CRC_TABLE and MAKECRCH can be #defined to write out crc32.h. |
| 22 | */ |
| 23 | |
| 24 | #ifdef MAKECRCH |
| 25 | # include <stdio.h> |
| 26 | # ifndef DYNAMIC_CRC_TABLE |
| 27 | # define DYNAMIC_CRC_TABLE |
| 28 | # endif /* !DYNAMIC_CRC_TABLE */ |
| 29 | #endif /* MAKECRCH */ |
| 30 | |
| 31 | #include "zutil.h" /* for STDC and FAR definitions */ |
| 32 | |
| 33 | /* Definitions for doing the crc four data bytes at a time. */ |
| 34 | #if !defined(NOBYFOUR) && defined(Z_U4) |
| 35 | # define BYFOUR |
| 36 | #endif |
| 37 | #ifdef BYFOUR |
| 38 | local unsigned long crc32_little OF((unsigned long, |
| 39 | const unsigned char FAR *, z_size_t)); |
| 40 | local unsigned long crc32_big OF((unsigned long, |
| 41 | const unsigned char FAR *, z_size_t)); |
| 42 | # define TBLS 8 |
| 43 | #else |
| 44 | # define TBLS 1 |
| 45 | #endif /* BYFOUR */ |
| 46 | |
| 47 | /* Local functions for crc concatenation */ |
| 48 | local unsigned long gf2_matrix_times OF((unsigned long *mat, |
| 49 | unsigned long vec)); |
| 50 | local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat)); |
| 51 | local uLong crc32_combine_ OF((uLong crc1, uLong crc2, z_off64_t len2)); |
| 52 | |
| 53 | |
| 54 | #ifdef DYNAMIC_CRC_TABLE |
| 55 | |
| 56 | local volatile int crc_table_empty = 1; |
| 57 | local z_crc_t FAR crc_table[TBLS][256]; |
| 58 | local void make_crc_table OF((void)); |
| 59 | #ifdef MAKECRCH |
| 60 | local void write_table OF((FILE *, const z_crc_t FAR *)); |
| 61 | #endif /* MAKECRCH */ |
| 62 | /* |
| 63 | Generate tables for a byte-wise 32-bit CRC calculation on the polynomial: |
| 64 | x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. |
| 65 | |
| 66 | Polynomials over GF(2) are represented in binary, one bit per coefficient, |
| 67 | with the lowest powers in the most significant bit. Then adding polynomials |
| 68 | is just exclusive-or, and multiplying a polynomial by x is a right shift by |
| 69 | one. If we call the above polynomial p, and represent a byte as the |
| 70 | polynomial q, also with the lowest power in the most significant bit (so the |
| 71 | byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, |
| 72 | where a mod b means the remainder after dividing a by b. |
| 73 | |
| 74 | This calculation is done using the shift-register method of multiplying and |
| 75 | taking the remainder. The register is initialized to zero, and for each |
| 76 | incoming bit, x^32 is added mod p to the register if the bit is a one (where |
| 77 | x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by |
| 78 | x (which is shifting right by one and adding x^32 mod p if the bit shifted |
| 79 | out is a one). We start with the highest power (least significant bit) of |
| 80 | q and repeat for all eight bits of q. |
| 81 | |
| 82 | The first table is simply the CRC of all possible eight bit values. This is |
| 83 | all the information needed to generate CRCs on data a byte at a time for all |
| 84 | combinations of CRC register values and incoming bytes. The remaining tables |
| 85 | allow for word-at-a-time CRC calculation for both big-endian and little- |
| 86 | endian machines, where a word is four bytes. |
| 87 | */ |
| 88 | local void make_crc_table() |
| 89 | { |
| 90 | z_crc_t c; |
| 91 | int n, k; |
| 92 | z_crc_t poly; /* polynomial exclusive-or pattern */ |
| 93 | /* terms of polynomial defining this crc (except x^32): */ |
| 94 | static volatile int first = 1; /* flag to limit concurrent making */ |
| 95 | static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26}; |
| 96 | |
| 97 | /* See if another task is already doing this (not thread-safe, but better |
| 98 | than nothing -- significantly reduces duration of vulnerability in |
| 99 | case the advice about DYNAMIC_CRC_TABLE is ignored) */ |
| 100 | if (first) { |
| 101 | first = 0; |
| 102 | |
| 103 | /* make exclusive-or pattern from polynomial (0xedb88320UL) */ |
| 104 | poly = 0; |
| 105 | for (n = 0; n < (int)(sizeof(p)/sizeof(unsigned char)); n++) |
| 106 | poly |= (z_crc_t)1 << (31 - p[n]); |
| 107 | |
| 108 | /* generate a crc for every 8-bit value */ |
| 109 | for (n = 0; n < 256; n++) { |
| 110 | c = (z_crc_t)n; |
| 111 | for (k = 0; k < 8; k++) |
| 112 | c = c & 1 ? poly ^ (c >> 1) : c >> 1; |
| 113 | crc_table[0][n] = c; |
| 114 | } |
| 115 | |
| 116 | #ifdef BYFOUR |
| 117 | /* generate crc for each value followed by one, two, and three zeros, |
| 118 | and then the byte reversal of those as well as the first table */ |
| 119 | for (n = 0; n < 256; n++) { |
| 120 | c = crc_table[0][n]; |
| 121 | crc_table[4][n] = ZSWAP32(c); |
| 122 | for (k = 1; k < 4; k++) { |
| 123 | c = crc_table[0][c & 0xff] ^ (c >> 8); |
| 124 | crc_table[k][n] = c; |
| 125 | crc_table[k + 4][n] = ZSWAP32(c); |
| 126 | } |
| 127 | } |
| 128 | #endif /* BYFOUR */ |
| 129 | |
| 130 | crc_table_empty = 0; |
| 131 | } |
| 132 | else { /* not first */ |
| 133 | /* wait for the other guy to finish (not efficient, but rare) */ |
| 134 | while (crc_table_empty) |
| 135 | ; |
| 136 | } |
| 137 | |
| 138 | #ifdef MAKECRCH |
| 139 | /* write out CRC tables to crc32.h */ |
| 140 | { |
| 141 | FILE *out; |
| 142 | |
| 143 | out = fopen("crc32.h", "w"); |
| 144 | if (out == NULL) return; |
| 145 | fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n"); |
| 146 | fprintf(out, " * Generated automatically by crc32.c\n */\n\n"); |
| 147 | fprintf(out, "local const z_crc_t FAR "); |
| 148 | fprintf(out, "crc_table[TBLS][256] =\n{\n {\n"); |
| 149 | write_table(out, crc_table[0]); |
| 150 | # ifdef BYFOUR |
| 151 | fprintf(out, "#ifdef BYFOUR\n"); |
| 152 | for (k = 1; k < 8; k++) { |
| 153 | fprintf(out, " },\n {\n"); |
| 154 | write_table(out, crc_table[k]); |
| 155 | } |
| 156 | fprintf(out, "#endif\n"); |
| 157 | # endif /* BYFOUR */ |
| 158 | fprintf(out, " }\n};\n"); |
| 159 | fclose(out); |
| 160 | } |
| 161 | #endif /* MAKECRCH */ |
| 162 | } |
| 163 | |
| 164 | #ifdef MAKECRCH |
| 165 | local void write_table(out, table) |
| 166 | FILE *out; |
| 167 | const z_crc_t FAR *table; |
| 168 | { |
| 169 | int n; |
| 170 | |
| 171 | for (n = 0; n < 256; n++) |
| 172 | fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ", |
| 173 | (unsigned long)(table[n]), |
| 174 | n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", ")); |
| 175 | } |
| 176 | #endif /* MAKECRCH */ |
| 177 | |
| 178 | #else /* !DYNAMIC_CRC_TABLE */ |
| 179 | /* ======================================================================== |
| 180 | * Tables of CRC-32s of all single-byte values, made by make_crc_table(). |
| 181 | */ |
| 182 | #include "crc32.h" |
| 183 | #endif /* DYNAMIC_CRC_TABLE */ |
| 184 | |
| 185 | /* ========================================================================= |
| 186 | * This function can be used by asm versions of crc32() |
| 187 | */ |
| 188 | const z_crc_t FAR * ZEXPORT get_crc_table() |
| 189 | { |
| 190 | #ifdef DYNAMIC_CRC_TABLE |
| 191 | if (crc_table_empty) |
| 192 | make_crc_table(); |
| 193 | #endif /* DYNAMIC_CRC_TABLE */ |
| 194 | return (const z_crc_t FAR *)crc_table; |
| 195 | } |
| 196 | |
| 197 | /* ========================================================================= */ |
| 198 | #define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8) |
| 199 | #define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1 |
| 200 | |
| 201 | /* ========================================================================= */ |
| 202 | unsigned long ZEXPORT crc32_z(crc, buf, len) |
| 203 | unsigned long crc; |
| 204 | const unsigned char FAR *buf; |
| 205 | z_size_t len; |
| 206 | { |
| 207 | if (buf == Z_NULL) return 0UL; |
| 208 | |
| 209 | #ifdef DYNAMIC_CRC_TABLE |
| 210 | if (crc_table_empty) |
| 211 | make_crc_table(); |
| 212 | #endif /* DYNAMIC_CRC_TABLE */ |
| 213 | |
| 214 | #ifdef BYFOUR |
| 215 | if (sizeof(void *) == sizeof(ptrdiff_t)) { |
| 216 | z_crc_t endian; |
| 217 | |
| 218 | endian = 1; |
| 219 | if (*((unsigned char *)(&endian))) |
| 220 | return crc32_little(crc, buf, len); |
| 221 | else |
| 222 | return crc32_big(crc, buf, len); |
| 223 | } |
| 224 | #endif /* BYFOUR */ |
| 225 | crc = crc ^ 0xffffffffUL; |
| 226 | while (len >= 8) { |
| 227 | DO8; |
| 228 | len -= 8; |
| 229 | } |
| 230 | if (len) do { |
| 231 | DO1; |
| 232 | } while (--len); |
| 233 | return crc ^ 0xffffffffUL; |
| 234 | } |
| 235 | |
| 236 | /* ========================================================================= */ |
| 237 | unsigned long ZEXPORT crc32(crc, buf, len) |
| 238 | unsigned long crc; |
| 239 | const unsigned char FAR *buf; |
| @@ -240,203 +1066,51 @@ | |
| 240 | uInt len; |
| 241 | { |
| 242 | return crc32_z(crc, buf, len); |
| 243 | } |
| 244 | |
| 245 | #ifdef BYFOUR |
| 246 | |
| 247 | /* |
| 248 | This BYFOUR code accesses the passed unsigned char * buffer with a 32-bit |
| 249 | integer pointer type. This violates the strict aliasing rule, where a |
| 250 | compiler can assume, for optimization purposes, that two pointers to |
| 251 | fundamentally different types won't ever point to the same memory. This can |
| 252 | manifest as a problem only if one of the pointers is written to. This code |
| 253 | only reads from those pointers. So long as this code remains isolated in |
| 254 | this compilation unit, there won't be a problem. For this reason, this code |
| 255 | should not be copied and pasted into a compilation unit in which other code |
| 256 | writes to the buffer that is passed to these routines. |
| 257 | */ |
| 258 | |
| 259 | /* ========================================================================= */ |
| 260 | #define DOLIT4 c ^= *buf4++; \ |
| 261 | c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \ |
| 262 | crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24] |
| 263 | #define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4 |
| 264 | |
| 265 | /* ========================================================================= */ |
| 266 | local unsigned long crc32_little(crc, buf, len) |
| 267 | unsigned long crc; |
| 268 | const unsigned char FAR *buf; |
| 269 | z_size_t len; |
| 270 | { |
| 271 | register z_crc_t c; |
| 272 | register const z_crc_t FAR *buf4; |
| 273 | |
| 274 | c = (z_crc_t)crc; |
| 275 | c = ~c; |
| 276 | while (len && ((ptrdiff_t)buf & 3)) { |
| 277 | c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); |
| 278 | len--; |
| 279 | } |
| 280 | |
| 281 | buf4 = (const z_crc_t FAR *)(const void FAR *)buf; |
| 282 | while (len >= 32) { |
| 283 | DOLIT32; |
| 284 | len -= 32; |
| 285 | } |
| 286 | while (len >= 4) { |
| 287 | DOLIT4; |
| 288 | len -= 4; |
| 289 | } |
| 290 | buf = (const unsigned char FAR *)buf4; |
| 291 | |
| 292 | if (len) do { |
| 293 | c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); |
| 294 | } while (--len); |
| 295 | c = ~c; |
| 296 | return (unsigned long)c; |
| 297 | } |
| 298 | |
| 299 | /* ========================================================================= */ |
| 300 | #define DOBIG4 c ^= *buf4++; \ |
| 301 | c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \ |
| 302 | crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24] |
| 303 | #define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4 |
| 304 | |
| 305 | /* ========================================================================= */ |
| 306 | local unsigned long crc32_big(crc, buf, len) |
| 307 | unsigned long crc; |
| 308 | const unsigned char FAR *buf; |
| 309 | z_size_t len; |
| 310 | { |
| 311 | register z_crc_t c; |
| 312 | register const z_crc_t FAR *buf4; |
| 313 | |
| 314 | c = ZSWAP32((z_crc_t)crc); |
| 315 | c = ~c; |
| 316 | while (len && ((ptrdiff_t)buf & 3)) { |
| 317 | c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); |
| 318 | len--; |
| 319 | } |
| 320 | |
| 321 | buf4 = (const z_crc_t FAR *)(const void FAR *)buf; |
| 322 | while (len >= 32) { |
| 323 | DOBIG32; |
| 324 | len -= 32; |
| 325 | } |
| 326 | while (len >= 4) { |
| 327 | DOBIG4; |
| 328 | len -= 4; |
| 329 | } |
| 330 | buf = (const unsigned char FAR *)buf4; |
| 331 | |
| 332 | if (len) do { |
| 333 | c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); |
| 334 | } while (--len); |
| 335 | c = ~c; |
| 336 | return (unsigned long)(ZSWAP32(c)); |
| 337 | } |
| 338 | |
| 339 | #endif /* BYFOUR */ |
| 340 | |
| 341 | #define GF2_DIM 32 /* dimension of GF(2) vectors (length of CRC) */ |
| 342 | |
| 343 | /* ========================================================================= */ |
| 344 | local unsigned long gf2_matrix_times(mat, vec) |
| 345 | unsigned long *mat; |
| 346 | unsigned long vec; |
| 347 | { |
| 348 | unsigned long sum; |
| 349 | |
| 350 | sum = 0; |
| 351 | while (vec) { |
| 352 | if (vec & 1) |
| 353 | sum ^= *mat; |
| 354 | vec >>= 1; |
| 355 | mat++; |
| 356 | } |
| 357 | return sum; |
| 358 | } |
| 359 | |
| 360 | /* ========================================================================= */ |
| 361 | local void gf2_matrix_square(square, mat) |
| 362 | unsigned long *square; |
| 363 | unsigned long *mat; |
| 364 | { |
| 365 | int n; |
| 366 | |
| 367 | for (n = 0; n < GF2_DIM; n++) |
| 368 | square[n] = gf2_matrix_times(mat, mat[n]); |
| 369 | } |
| 370 | |
| 371 | /* ========================================================================= */ |
| 372 | local uLong crc32_combine_(crc1, crc2, len2) |
| 373 | uLong crc1; |
| 374 | uLong crc2; |
| 375 | z_off64_t len2; |
| 376 | { |
| 377 | int n; |
| 378 | unsigned long row; |
| 379 | unsigned long even[GF2_DIM]; /* even-power-of-two zeros operator */ |
| 380 | unsigned long odd[GF2_DIM]; /* odd-power-of-two zeros operator */ |
| 381 | |
| 382 | /* degenerate case (also disallow negative lengths) */ |
| 383 | if (len2 <= 0) |
| 384 | return crc1; |
| 385 | |
| 386 | /* put operator for one zero bit in odd */ |
| 387 | odd[0] = 0xedb88320UL; /* CRC-32 polynomial */ |
| 388 | row = 1; |
| 389 | for (n = 1; n < GF2_DIM; n++) { |
| 390 | odd[n] = row; |
| 391 | row <<= 1; |
| 392 | } |
| 393 | |
| 394 | /* put operator for two zero bits in even */ |
| 395 | gf2_matrix_square(even, odd); |
| 396 | |
| 397 | /* put operator for four zero bits in odd */ |
| 398 | gf2_matrix_square(odd, even); |
| 399 | |
| 400 | /* apply len2 zeros to crc1 (first square will put the operator for one |
| 401 | zero byte, eight zero bits, in even) */ |
| 402 | do { |
| 403 | /* apply zeros operator for this bit of len2 */ |
| 404 | gf2_matrix_square(even, odd); |
| 405 | if (len2 & 1) |
| 406 | crc1 = gf2_matrix_times(even, crc1); |
| 407 | len2 >>= 1; |
| 408 | |
| 409 | /* if no more bits set, then done */ |
| 410 | if (len2 == 0) |
| 411 | break; |
| 412 | |
| 413 | /* another iteration of the loop with odd and even swapped */ |
| 414 | gf2_matrix_square(odd, even); |
| 415 | if (len2 & 1) |
| 416 | crc1 = gf2_matrix_times(odd, crc1); |
| 417 | len2 >>= 1; |
| 418 | |
| 419 | /* if no more bits set, then done */ |
| 420 | } while (len2 != 0); |
| 421 | |
| 422 | /* return combined crc */ |
| 423 | crc1 ^= crc2; |
| 424 | return crc1; |
| 425 | } |
| 426 | |
| 427 | /* ========================================================================= */ |
| 428 | uLong ZEXPORT crc32_combine(crc1, crc2, len2) |
| 429 | uLong crc1; |
| 430 | uLong crc2; |
| 431 | z_off_t len2; |
| 432 | { |
| 433 | return crc32_combine_(crc1, crc2, len2); |
| 434 | } |
| 435 | |
| 436 | uLong ZEXPORT crc32_combine64(crc1, crc2, len2) |
| 437 | uLong crc1; |
| 438 | uLong crc2; |
| 439 | z_off64_t len2; |
| 440 | { |
| 441 | return crc32_combine_(crc1, crc2, len2); |
| 442 | } |
| 443 |
| --- compat/zlib/crc32.c | |
| +++ compat/zlib/crc32.c | |
| @@ -1,239 +1,1065 @@ | |
| 1 | /* crc32.c -- compute the CRC-32 of a data stream |
| 2 | * Copyright (C) 1995-2022 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | * |
| 5 | * This interleaved implementation of a CRC makes use of pipelined multiple |
| 6 | * arithmetic-logic units, commonly found in modern CPU cores. It is due to |
| 7 | * Kadatch and Jenkins (2010). See doc/crc-doc.1.0.pdf in this distribution. |
| 8 | */ |
| 9 | |
| 10 | /* @(#) $Id$ */ |
| 11 | |
| 12 | /* |
| 13 | Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore |
| 14 | protection on the static variables used to control the first-use generation |
| 15 | of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should |
| 16 | first call get_crc_table() to initialize the tables before allowing more than |
| 17 | one thread to use crc32(). |
| 18 | |
| 19 | MAKECRCH can be #defined to write out crc32.h. A main() routine is also |
| 20 | produced, so that this one source file can be compiled to an executable. |
| 21 | */ |
| 22 | |
| 23 | #ifdef MAKECRCH |
| 24 | # include <stdio.h> |
| 25 | # ifndef DYNAMIC_CRC_TABLE |
| 26 | # define DYNAMIC_CRC_TABLE |
| 27 | # endif /* !DYNAMIC_CRC_TABLE */ |
| 28 | #endif /* MAKECRCH */ |
| 29 | |
| 30 | #include "zutil.h" /* for Z_U4, Z_U8, z_crc_t, and FAR definitions */ |
| 31 | |
| 32 | /* |
| 33 | A CRC of a message is computed on N braids of words in the message, where |
| 34 | each word consists of W bytes (4 or 8). If N is 3, for example, then three |
| 35 | running sparse CRCs are calculated respectively on each braid, at these |
| 36 | indices in the array of words: 0, 3, 6, ..., 1, 4, 7, ..., and 2, 5, 8, ... |
| 37 | This is done starting at a word boundary, and continues until as many blocks |
| 38 | of N * W bytes as are available have been processed. The results are combined |
| 39 | into a single CRC at the end. For this code, N must be in the range 1..6 and |
| 40 | W must be 4 or 8. The upper limit on N can be increased if desired by adding |
| 41 | more #if blocks, extending the patterns apparent in the code. In addition, |
| 42 | crc32.h would need to be regenerated, if the maximum N value is increased. |
| 43 | |
| 44 | N and W are chosen empirically by benchmarking the execution time on a given |
| 45 | processor. The choices for N and W below were based on testing on Intel Kaby |
| 46 | Lake i7, AMD Ryzen 7, ARM Cortex-A57, Sparc64-VII, PowerPC POWER9, and MIPS64 |
| 47 | Octeon II processors. The Intel, AMD, and ARM processors were all fastest |
| 48 | with N=5, W=8. The Sparc, PowerPC, and MIPS64 were all fastest at N=5, W=4. |
| 49 | They were all tested with either gcc or clang, all using the -O3 optimization |
| 50 | level. Your mileage may vary. |
| 51 | */ |
| 52 | |
| 53 | /* Define N */ |
| 54 | #ifdef Z_TESTN |
| 55 | # define N Z_TESTN |
| 56 | #else |
| 57 | # define N 5 |
| 58 | #endif |
| 59 | #if N < 1 || N > 6 |
| 60 | # error N must be in 1..6 |
| 61 | #endif |
| 62 | |
| 63 | /* |
| 64 | z_crc_t must be at least 32 bits. z_word_t must be at least as long as |
| 65 | z_crc_t. It is assumed here that z_word_t is either 32 bits or 64 bits, and |
| 66 | that bytes are eight bits. |
| 67 | */ |
| 68 | |
| 69 | /* |
| 70 | Define W and the associated z_word_t type. If W is not defined, then a |
| 71 | braided calculation is not used, and the associated tables and code are not |
| 72 | compiled. |
| 73 | */ |
| 74 | #ifdef Z_TESTW |
| 75 | # if Z_TESTW-1 != -1 |
| 76 | # define W Z_TESTW |
| 77 | # endif |
| 78 | #else |
| 79 | # ifdef MAKECRCH |
| 80 | # define W 8 /* required for MAKECRCH */ |
| 81 | # else |
| 82 | # if defined(__x86_64__) || defined(__aarch64__) |
| 83 | # define W 8 |
| 84 | # else |
| 85 | # define W 4 |
| 86 | # endif |
| 87 | # endif |
| 88 | #endif |
| 89 | #ifdef W |
| 90 | # if W == 8 && defined(Z_U8) |
| 91 | typedef Z_U8 z_word_t; |
| 92 | # elif defined(Z_U4) |
| 93 | # undef W |
| 94 | # define W 4 |
| 95 | typedef Z_U4 z_word_t; |
| 96 | # else |
| 97 | # undef W |
| 98 | # endif |
| 99 | #endif |
| 100 | |
| 101 | /* Local functions. */ |
| 102 | local z_crc_t multmodp OF((z_crc_t a, z_crc_t b)); |
| 103 | local z_crc_t x2nmodp OF((z_off64_t n, unsigned k)); |
| 104 | |
| 105 | /* If available, use the ARM processor CRC32 instruction. */ |
| 106 | #if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8 |
| 107 | # define ARMCRC32 |
| 108 | #endif |
| 109 | |
| 110 | #if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE)) |
| 111 | /* |
| 112 | Swap the bytes in a z_word_t to convert between little and big endian. Any |
| 113 | self-respecting compiler will optimize this to a single machine byte-swap |
| 114 | instruction, if one is available. This assumes that word_t is either 32 bits |
| 115 | or 64 bits. |
| 116 | */ |
| 117 | local z_word_t byte_swap(word) |
| 118 | z_word_t word; |
| 119 | { |
| 120 | # if W == 8 |
| 121 | return |
| 122 | (word & 0xff00000000000000) >> 56 | |
| 123 | (word & 0xff000000000000) >> 40 | |
| 124 | (word & 0xff0000000000) >> 24 | |
| 125 | (word & 0xff00000000) >> 8 | |
| 126 | (word & 0xff000000) << 8 | |
| 127 | (word & 0xff0000) << 24 | |
| 128 | (word & 0xff00) << 40 | |
| 129 | (word & 0xff) << 56; |
| 130 | # else /* W == 4 */ |
| 131 | return |
| 132 | (word & 0xff000000) >> 24 | |
| 133 | (word & 0xff0000) >> 8 | |
| 134 | (word & 0xff00) << 8 | |
| 135 | (word & 0xff) << 24; |
| 136 | # endif |
| 137 | } |
| 138 | #endif |
| 139 | |
| 140 | /* CRC polynomial. */ |
| 141 | #define POLY 0xedb88320 /* p(x) reflected, with x^32 implied */ |
| 142 | |
| 143 | #ifdef DYNAMIC_CRC_TABLE |
| 144 | |
| 145 | local z_crc_t FAR crc_table[256]; |
| 146 | local z_crc_t FAR x2n_table[32]; |
| 147 | local void make_crc_table OF((void)); |
| 148 | #ifdef W |
| 149 | local z_word_t FAR crc_big_table[256]; |
| 150 | local z_crc_t FAR crc_braid_table[W][256]; |
| 151 | local z_word_t FAR crc_braid_big_table[W][256]; |
| 152 | local void braid OF((z_crc_t [][256], z_word_t [][256], int, int)); |
| 153 | #endif |
| 154 | #ifdef MAKECRCH |
| 155 | local void write_table OF((FILE *, const z_crc_t FAR *, int)); |
| 156 | local void write_table32hi OF((FILE *, const z_word_t FAR *, int)); |
| 157 | local void write_table64 OF((FILE *, const z_word_t FAR *, int)); |
| 158 | #endif /* MAKECRCH */ |
| 159 | |
| 160 | /* |
| 161 | Define a once() function depending on the availability of atomics. If this is |
| 162 | compiled with DYNAMIC_CRC_TABLE defined, and if CRCs will be computed in |
| 163 | multiple threads, and if atomics are not available, then get_crc_table() must |
| 164 | be called to initialize the tables and must return before any threads are |
| 165 | allowed to compute or combine CRCs. |
| 166 | */ |
| 167 | |
| 168 | /* Definition of once functionality. */ |
| 169 | typedef struct once_s once_t; |
| 170 | local void once OF((once_t *, void (*)(void))); |
| 171 | |
| 172 | /* Check for the availability of atomics. */ |
| 173 | #if defined(__STDC__) && __STDC_VERSION__ >= 201112L && \ |
| 174 | !defined(__STDC_NO_ATOMICS__) |
| 175 | |
| 176 | #include <stdatomic.h> |
| 177 | |
| 178 | /* Structure for once(), which must be initialized with ONCE_INIT. */ |
| 179 | struct once_s { |
| 180 | atomic_flag begun; |
| 181 | atomic_int done; |
| 182 | }; |
| 183 | #define ONCE_INIT {ATOMIC_FLAG_INIT, 0} |
| 184 | |
| 185 | /* |
| 186 | Run the provided init() function exactly once, even if multiple threads |
| 187 | invoke once() at the same time. The state must be a once_t initialized with |
| 188 | ONCE_INIT. |
| 189 | */ |
| 190 | local void once(state, init) |
| 191 | once_t *state; |
| 192 | void (*init)(void); |
| 193 | { |
| 194 | if (!atomic_load(&state->done)) { |
| 195 | if (atomic_flag_test_and_set(&state->begun)) |
| 196 | while (!atomic_load(&state->done)) |
| 197 | ; |
| 198 | else { |
| 199 | init(); |
| 200 | atomic_store(&state->done, 1); |
| 201 | } |
| 202 | } |
| 203 | } |
| 204 | |
| 205 | #else /* no atomics */ |
| 206 | |
| 207 | /* Structure for once(), which must be initialized with ONCE_INIT. */ |
| 208 | struct once_s { |
| 209 | volatile int begun; |
| 210 | volatile int done; |
| 211 | }; |
| 212 | #define ONCE_INIT {0, 0} |
| 213 | |
| 214 | /* Test and set. Alas, not atomic, but tries to minimize the period of |
| 215 | vulnerability. */ |
| 216 | local int test_and_set OF((int volatile *)); |
| 217 | local int test_and_set(flag) |
| 218 | int volatile *flag; |
| 219 | { |
| 220 | int was; |
| 221 | |
| 222 | was = *flag; |
| 223 | *flag = 1; |
| 224 | return was; |
| 225 | } |
| 226 | |
| 227 | /* Run the provided init() function once. This is not thread-safe. */ |
| 228 | local void once(state, init) |
| 229 | once_t *state; |
| 230 | void (*init)(void); |
| 231 | { |
| 232 | if (!state->done) { |
| 233 | if (test_and_set(&state->begun)) |
| 234 | while (!state->done) |
| 235 | ; |
| 236 | else { |
| 237 | init(); |
| 238 | state->done = 1; |
| 239 | } |
| 240 | } |
| 241 | } |
| 242 | |
| 243 | #endif |
| 244 | |
| 245 | /* State for once(). */ |
| 246 | local once_t made = ONCE_INIT; |
| 247 | |
| 248 | /* |
| 249 | Generate tables for a byte-wise 32-bit CRC calculation on the polynomial: |
| 250 | x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. |
| 251 | |
| 252 | Polynomials over GF(2) are represented in binary, one bit per coefficient, |
| 253 | with the lowest powers in the most significant bit. Then adding polynomials |
| 254 | is just exclusive-or, and multiplying a polynomial by x is a right shift by |
| 255 | one. If we call the above polynomial p, and represent a byte as the |
| 256 | polynomial q, also with the lowest power in the most significant bit (so the |
| 257 | byte 0xb1 is the polynomial x^7+x^3+x^2+1), then the CRC is (q*x^32) mod p, |
| 258 | where a mod b means the remainder after dividing a by b. |
| 259 | |
| 260 | This calculation is done using the shift-register method of multiplying and |
| 261 | taking the remainder. The register is initialized to zero, and for each |
| 262 | incoming bit, x^32 is added mod p to the register if the bit is a one (where |
| 263 | x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by x |
| 264 | (which is shifting right by one and adding x^32 mod p if the bit shifted out |
| 265 | is a one). We start with the highest power (least significant bit) of q and |
| 266 | repeat for all eight bits of q. |
| 267 | |
| 268 | The table is simply the CRC of all possible eight bit values. This is all the |
| 269 | information needed to generate CRCs on data a byte at a time for all |
| 270 | combinations of CRC register values and incoming bytes. |
| 271 | */ |
| 272 | |
| 273 | local void make_crc_table() |
| 274 | { |
| 275 | unsigned i, j, n; |
| 276 | z_crc_t p; |
| 277 | |
| 278 | /* initialize the CRC of bytes tables */ |
| 279 | for (i = 0; i < 256; i++) { |
| 280 | p = i; |
| 281 | for (j = 0; j < 8; j++) |
| 282 | p = p & 1 ? (p >> 1) ^ POLY : p >> 1; |
| 283 | crc_table[i] = p; |
| 284 | #ifdef W |
| 285 | crc_big_table[i] = byte_swap(p); |
| 286 | #endif |
| 287 | } |
| 288 | |
| 289 | /* initialize the x^2^n mod p(x) table */ |
| 290 | p = (z_crc_t)1 << 30; /* x^1 */ |
| 291 | x2n_table[0] = p; |
| 292 | for (n = 1; n < 32; n++) |
| 293 | x2n_table[n] = p = multmodp(p, p); |
| 294 | |
| 295 | #ifdef W |
| 296 | /* initialize the braiding tables -- needs x2n_table[] */ |
| 297 | braid(crc_braid_table, crc_braid_big_table, N, W); |
| 298 | #endif |
| 299 | |
| 300 | #ifdef MAKECRCH |
| 301 | { |
| 302 | /* |
| 303 | The crc32.h header file contains tables for both 32-bit and 64-bit |
| 304 | z_word_t's, and so requires a 64-bit type be available. In that case, |
| 305 | z_word_t must be defined to be 64-bits. This code then also generates |
| 306 | and writes out the tables for the case that z_word_t is 32 bits. |
| 307 | */ |
| 308 | #if !defined(W) || W != 8 |
| 309 | # error Need a 64-bit integer type in order to generate crc32.h. |
| 310 | #endif |
| 311 | FILE *out; |
| 312 | int k, n; |
| 313 | z_crc_t ltl[8][256]; |
| 314 | z_word_t big[8][256]; |
| 315 | |
| 316 | out = fopen("crc32.h", "w"); |
| 317 | if (out == NULL) return; |
| 318 | |
| 319 | /* write out little-endian CRC table to crc32.h */ |
| 320 | fprintf(out, |
| 321 | "/* crc32.h -- tables for rapid CRC calculation\n" |
| 322 | " * Generated automatically by crc32.c\n */\n" |
| 323 | "\n" |
| 324 | "local const z_crc_t FAR crc_table[] = {\n" |
| 325 | " "); |
| 326 | write_table(out, crc_table, 256); |
| 327 | fprintf(out, |
| 328 | "};\n"); |
| 329 | |
| 330 | /* write out big-endian CRC table for 64-bit z_word_t to crc32.h */ |
| 331 | fprintf(out, |
| 332 | "\n" |
| 333 | "#ifdef W\n" |
| 334 | "\n" |
| 335 | "#if W == 8\n" |
| 336 | "\n" |
| 337 | "local const z_word_t FAR crc_big_table[] = {\n" |
| 338 | " "); |
| 339 | write_table64(out, crc_big_table, 256); |
| 340 | fprintf(out, |
| 341 | "};\n"); |
| 342 | |
| 343 | /* write out big-endian CRC table for 32-bit z_word_t to crc32.h */ |
| 344 | fprintf(out, |
| 345 | "\n" |
| 346 | "#else /* W == 4 */\n" |
| 347 | "\n" |
| 348 | "local const z_word_t FAR crc_big_table[] = {\n" |
| 349 | " "); |
| 350 | write_table32hi(out, crc_big_table, 256); |
| 351 | fprintf(out, |
| 352 | "};\n" |
| 353 | "\n" |
| 354 | "#endif\n"); |
| 355 | |
| 356 | /* write out braid tables for each value of N */ |
| 357 | for (n = 1; n <= 6; n++) { |
| 358 | fprintf(out, |
| 359 | "\n" |
| 360 | "#if N == %d\n", n); |
| 361 | |
| 362 | /* compute braid tables for this N and 64-bit word_t */ |
| 363 | braid(ltl, big, n, 8); |
| 364 | |
| 365 | /* write out braid tables for 64-bit z_word_t to crc32.h */ |
| 366 | fprintf(out, |
| 367 | "\n" |
| 368 | "#if W == 8\n" |
| 369 | "\n" |
| 370 | "local const z_crc_t FAR crc_braid_table[][256] = {\n"); |
| 371 | for (k = 0; k < 8; k++) { |
| 372 | fprintf(out, " {"); |
| 373 | write_table(out, ltl[k], 256); |
| 374 | fprintf(out, "}%s", k < 7 ? ",\n" : ""); |
| 375 | } |
| 376 | fprintf(out, |
| 377 | "};\n" |
| 378 | "\n" |
| 379 | "local const z_word_t FAR crc_braid_big_table[][256] = {\n"); |
| 380 | for (k = 0; k < 8; k++) { |
| 381 | fprintf(out, " {"); |
| 382 | write_table64(out, big[k], 256); |
| 383 | fprintf(out, "}%s", k < 7 ? ",\n" : ""); |
| 384 | } |
| 385 | fprintf(out, |
| 386 | "};\n"); |
| 387 | |
| 388 | /* compute braid tables for this N and 32-bit word_t */ |
| 389 | braid(ltl, big, n, 4); |
| 390 | |
| 391 | /* write out braid tables for 32-bit z_word_t to crc32.h */ |
| 392 | fprintf(out, |
| 393 | "\n" |
| 394 | "#else /* W == 4 */\n" |
| 395 | "\n" |
| 396 | "local const z_crc_t FAR crc_braid_table[][256] = {\n"); |
| 397 | for (k = 0; k < 4; k++) { |
| 398 | fprintf(out, " {"); |
| 399 | write_table(out, ltl[k], 256); |
| 400 | fprintf(out, "}%s", k < 3 ? ",\n" : ""); |
| 401 | } |
| 402 | fprintf(out, |
| 403 | "};\n" |
| 404 | "\n" |
| 405 | "local const z_word_t FAR crc_braid_big_table[][256] = {\n"); |
| 406 | for (k = 0; k < 4; k++) { |
| 407 | fprintf(out, " {"); |
| 408 | write_table32hi(out, big[k], 256); |
| 409 | fprintf(out, "}%s", k < 3 ? ",\n" : ""); |
| 410 | } |
| 411 | fprintf(out, |
| 412 | "};\n" |
| 413 | "\n" |
| 414 | "#endif\n" |
| 415 | "\n" |
| 416 | "#endif\n"); |
| 417 | } |
| 418 | fprintf(out, |
| 419 | "\n" |
| 420 | "#endif\n"); |
| 421 | |
| 422 | /* write out zeros operator table to crc32.h */ |
| 423 | fprintf(out, |
| 424 | "\n" |
| 425 | "local const z_crc_t FAR x2n_table[] = {\n" |
| 426 | " "); |
| 427 | write_table(out, x2n_table, 32); |
| 428 | fprintf(out, |
| 429 | "};\n"); |
| 430 | fclose(out); |
| 431 | } |
| 432 | #endif /* MAKECRCH */ |
| 433 | } |
| 434 | |
| 435 | #ifdef MAKECRCH |
| 436 | |
| 437 | /* |
| 438 | Write the 32-bit values in table[0..k-1] to out, five per line in |
| 439 | hexadecimal separated by commas. |
| 440 | */ |
| 441 | local void write_table(out, table, k) |
| 442 | FILE *out; |
| 443 | const z_crc_t FAR *table; |
| 444 | int k; |
| 445 | { |
| 446 | int n; |
| 447 | |
| 448 | for (n = 0; n < k; n++) |
| 449 | fprintf(out, "%s0x%08lx%s", n == 0 || n % 5 ? "" : " ", |
| 450 | (unsigned long)(table[n]), |
| 451 | n == k - 1 ? "" : (n % 5 == 4 ? ",\n" : ", ")); |
| 452 | } |
| 453 | |
| 454 | /* |
| 455 | Write the high 32-bits of each value in table[0..k-1] to out, five per line |
| 456 | in hexadecimal separated by commas. |
| 457 | */ |
| 458 | local void write_table32hi(out, table, k) |
| 459 | FILE *out; |
| 460 | const z_word_t FAR *table; |
| 461 | int k; |
| 462 | { |
| 463 | int n; |
| 464 | |
| 465 | for (n = 0; n < k; n++) |
| 466 | fprintf(out, "%s0x%08lx%s", n == 0 || n % 5 ? "" : " ", |
| 467 | (unsigned long)(table[n] >> 32), |
| 468 | n == k - 1 ? "" : (n % 5 == 4 ? ",\n" : ", ")); |
| 469 | } |
| 470 | |
| 471 | /* |
| 472 | Write the 64-bit values in table[0..k-1] to out, three per line in |
| 473 | hexadecimal separated by commas. This assumes that if there is a 64-bit |
| 474 | type, then there is also a long long integer type, and it is at least 64 |
| 475 | bits. If not, then the type cast and format string can be adjusted |
| 476 | accordingly. |
| 477 | */ |
| 478 | local void write_table64(out, table, k) |
| 479 | FILE *out; |
| 480 | const z_word_t FAR *table; |
| 481 | int k; |
| 482 | { |
| 483 | int n; |
| 484 | |
| 485 | for (n = 0; n < k; n++) |
| 486 | fprintf(out, "%s0x%016llx%s", n == 0 || n % 3 ? "" : " ", |
| 487 | (unsigned long long)(table[n]), |
| 488 | n == k - 1 ? "" : (n % 3 == 2 ? ",\n" : ", ")); |
| 489 | } |
| 490 | |
| 491 | /* Actually do the deed. */ |
| 492 | int main() |
| 493 | { |
| 494 | make_crc_table(); |
| 495 | return 0; |
| 496 | } |
| 497 | |
| 498 | #endif /* MAKECRCH */ |
| 499 | |
| 500 | #ifdef W |
| 501 | /* |
| 502 | Generate the little and big-endian braid tables for the given n and z_word_t |
| 503 | size w. Each array must have room for w blocks of 256 elements. |
| 504 | */ |
| 505 | local void braid(ltl, big, n, w) |
| 506 | z_crc_t ltl[][256]; |
| 507 | z_word_t big[][256]; |
| 508 | int n; |
| 509 | int w; |
| 510 | { |
| 511 | int k; |
| 512 | z_crc_t i, p, q; |
| 513 | for (k = 0; k < w; k++) { |
| 514 | p = x2nmodp((n * w + 3 - k) << 3, 0); |
| 515 | ltl[k][0] = 0; |
| 516 | big[w - 1 - k][0] = 0; |
| 517 | for (i = 1; i < 256; i++) { |
| 518 | ltl[k][i] = q = multmodp(i << 24, p); |
| 519 | big[w - 1 - k][i] = byte_swap(q); |
| 520 | } |
| 521 | } |
| 522 | } |
| 523 | #endif |
| 524 | |
| 525 | #else /* !DYNAMIC_CRC_TABLE */ |
| 526 | /* ======================================================================== |
| 527 | * Tables for byte-wise and braided CRC-32 calculations, and a table of powers |
| 528 | * of x for combining CRC-32s, all made by make_crc_table(). |
| 529 | */ |
| 530 | #include "crc32.h" |
| 531 | #endif /* DYNAMIC_CRC_TABLE */ |
| 532 | |
| 533 | /* ======================================================================== |
| 534 | * Routines used for CRC calculation. Some are also required for the table |
| 535 | * generation above. |
| 536 | */ |
| 537 | |
| 538 | /* |
| 539 | Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial, |
| 540 | reflected. For speed, this requires that a not be zero. |
| 541 | */ |
| 542 | local z_crc_t multmodp(a, b) |
| 543 | z_crc_t a; |
| 544 | z_crc_t b; |
| 545 | { |
| 546 | z_crc_t m, p; |
| 547 | |
| 548 | m = (z_crc_t)1 << 31; |
| 549 | p = 0; |
| 550 | for (;;) { |
| 551 | if (a & m) { |
| 552 | p ^= b; |
| 553 | if ((a & (m - 1)) == 0) |
| 554 | break; |
| 555 | } |
| 556 | m >>= 1; |
| 557 | b = b & 1 ? (b >> 1) ^ POLY : b >> 1; |
| 558 | } |
| 559 | return p; |
| 560 | } |
| 561 | |
| 562 | /* |
| 563 | Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been |
| 564 | initialized. |
| 565 | */ |
| 566 | local z_crc_t x2nmodp(n, k) |
| 567 | z_off64_t n; |
| 568 | unsigned k; |
| 569 | { |
| 570 | z_crc_t p; |
| 571 | |
| 572 | p = (z_crc_t)1 << 31; /* x^0 == 1 */ |
| 573 | while (n) { |
| 574 | if (n & 1) |
| 575 | p = multmodp(x2n_table[k & 31], p); |
| 576 | n >>= 1; |
| 577 | k++; |
| 578 | } |
| 579 | return p; |
| 580 | } |
| 581 | |
| 582 | /* ========================================================================= |
| 583 | * This function can be used by asm versions of crc32(), and to force the |
| 584 | * generation of the CRC tables in a threaded application. |
| 585 | */ |
| 586 | const z_crc_t FAR * ZEXPORT get_crc_table() |
| 587 | { |
| 588 | #ifdef DYNAMIC_CRC_TABLE |
| 589 | once(&made, make_crc_table); |
| 590 | #endif /* DYNAMIC_CRC_TABLE */ |
| 591 | return (const z_crc_t FAR *)crc_table; |
| 592 | } |
| 593 | |
| 594 | /* ========================================================================= |
| 595 | * Use ARM machine instructions if available. This will compute the CRC about |
| 596 | * ten times faster than the braided calculation. This code does not check for |
| 597 | * the presence of the CRC instruction at run time. __ARM_FEATURE_CRC32 will |
| 598 | * only be defined if the compilation specifies an ARM processor architecture |
| 599 | * that has the instructions. For example, compiling with -march=armv8.1-a or |
| 600 | * -march=armv8-a+crc, or -march=native if the compile machine has the crc32 |
| 601 | * instructions. |
| 602 | */ |
| 603 | #ifdef ARMCRC32 |
| 604 | |
| 605 | /* |
| 606 | Constants empirically determined to maximize speed. These values are from |
| 607 | measurements on a Cortex-A57. Your mileage may vary. |
| 608 | */ |
| 609 | #define Z_BATCH 3990 /* number of words in a batch */ |
| 610 | #define Z_BATCH_ZEROS 0xa10d3d0c /* computed from Z_BATCH = 3990 */ |
| 611 | #define Z_BATCH_MIN 800 /* fewest words in a final batch */ |
| 612 | |
| 613 | unsigned long ZEXPORT crc32_z(crc, buf, len) |
| 614 | unsigned long crc; |
| 615 | const unsigned char FAR *buf; |
| 616 | z_size_t len; |
| 617 | { |
| 618 | z_crc_t val; |
| 619 | z_word_t crc1, crc2; |
| 620 | const z_word_t *word; |
| 621 | z_word_t val0, val1, val2; |
| 622 | z_size_t last, last2, i; |
| 623 | z_size_t num; |
| 624 | |
| 625 | /* Return initial CRC, if requested. */ |
| 626 | if (buf == Z_NULL) return 0; |
| 627 | |
| 628 | #ifdef DYNAMIC_CRC_TABLE |
| 629 | once(&made, make_crc_table); |
| 630 | #endif /* DYNAMIC_CRC_TABLE */ |
| 631 | |
| 632 | /* Pre-condition the CRC */ |
| 633 | crc ^= 0xffffffff; |
| 634 | |
| 635 | /* Compute the CRC up to a word boundary. */ |
| 636 | while (len && ((z_size_t)buf & 7) != 0) { |
| 637 | len--; |
| 638 | val = *buf++; |
| 639 | __asm__ volatile("crc32b %w0, %w0, %w1" : "+r"(crc) : "r"(val)); |
| 640 | } |
| 641 | |
| 642 | /* Prepare to compute the CRC on full 64-bit words word[0..num-1]. */ |
| 643 | word = (z_word_t const *)buf; |
| 644 | num = len >> 3; |
| 645 | len &= 7; |
| 646 | |
| 647 | /* Do three interleaved CRCs to realize the throughput of one crc32x |
| 648 | instruction per cycle. Each CRC is calcuated on Z_BATCH words. The three |
| 649 | CRCs are combined into a single CRC after each set of batches. */ |
| 650 | while (num >= 3 * Z_BATCH) { |
| 651 | crc1 = 0; |
| 652 | crc2 = 0; |
| 653 | for (i = 0; i < Z_BATCH; i++) { |
| 654 | val0 = word[i]; |
| 655 | val1 = word[i + Z_BATCH]; |
| 656 | val2 = word[i + 2 * Z_BATCH]; |
| 657 | __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0)); |
| 658 | __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc1) : "r"(val1)); |
| 659 | __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc2) : "r"(val2)); |
| 660 | } |
| 661 | word += 3 * Z_BATCH; |
| 662 | num -= 3 * Z_BATCH; |
| 663 | crc = multmodp(Z_BATCH_ZEROS, crc) ^ crc1; |
| 664 | crc = multmodp(Z_BATCH_ZEROS, crc) ^ crc2; |
| 665 | } |
| 666 | |
| 667 | /* Do one last smaller batch with the remaining words, if there are enough |
| 668 | to pay for the combination of CRCs. */ |
| 669 | last = num / 3; |
| 670 | if (last >= Z_BATCH_MIN) { |
| 671 | last2 = last << 1; |
| 672 | crc1 = 0; |
| 673 | crc2 = 0; |
| 674 | for (i = 0; i < last; i++) { |
| 675 | val0 = word[i]; |
| 676 | val1 = word[i + last]; |
| 677 | val2 = word[i + last2]; |
| 678 | __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0)); |
| 679 | __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc1) : "r"(val1)); |
| 680 | __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc2) : "r"(val2)); |
| 681 | } |
| 682 | word += 3 * last; |
| 683 | num -= 3 * last; |
| 684 | val = x2nmodp(last, 6); |
| 685 | crc = multmodp(val, crc) ^ crc1; |
| 686 | crc = multmodp(val, crc) ^ crc2; |
| 687 | } |
| 688 | |
| 689 | /* Compute the CRC on any remaining words. */ |
| 690 | for (i = 0; i < num; i++) { |
| 691 | val0 = word[i]; |
| 692 | __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0)); |
| 693 | } |
| 694 | word += num; |
| 695 | |
| 696 | /* Complete the CRC on any remaining bytes. */ |
| 697 | buf = (const unsigned char FAR *)word; |
| 698 | while (len) { |
| 699 | len--; |
| 700 | val = *buf++; |
| 701 | __asm__ volatile("crc32b %w0, %w0, %w1" : "+r"(crc) : "r"(val)); |
| 702 | } |
| 703 | |
| 704 | /* Return the CRC, post-conditioned. */ |
| 705 | return crc ^ 0xffffffff; |
| 706 | } |
| 707 | |
| 708 | #else |
| 709 | |
| 710 | #ifdef W |
| 711 | |
| 712 | /* |
| 713 | Return the CRC of the W bytes in the word_t data, taking the |
| 714 | least-significant byte of the word as the first byte of data, without any pre |
| 715 | or post conditioning. This is used to combine the CRCs of each braid. |
| 716 | */ |
| 717 | local z_crc_t crc_word(data) |
| 718 | z_word_t data; |
| 719 | { |
| 720 | int k; |
| 721 | for (k = 0; k < W; k++) |
| 722 | data = (data >> 8) ^ crc_table[data & 0xff]; |
| 723 | return (z_crc_t)data; |
| 724 | } |
| 725 | |
| 726 | local z_word_t crc_word_big(data) |
| 727 | z_word_t data; |
| 728 | { |
| 729 | int k; |
| 730 | for (k = 0; k < W; k++) |
| 731 | data = (data << 8) ^ |
| 732 | crc_big_table[(data >> ((W - 1) << 3)) & 0xff]; |
| 733 | return data; |
| 734 | } |
| 735 | |
| 736 | #endif |
| 737 | |
| 738 | /* ========================================================================= */ |
| 739 | unsigned long ZEXPORT crc32_z(crc, buf, len) |
| 740 | unsigned long crc; |
| 741 | const unsigned char FAR *buf; |
| 742 | z_size_t len; |
| 743 | { |
| 744 | /* Return initial CRC, if requested. */ |
| 745 | if (buf == Z_NULL) return 0; |
| 746 | |
| 747 | #ifdef DYNAMIC_CRC_TABLE |
| 748 | once(&made, make_crc_table); |
| 749 | #endif /* DYNAMIC_CRC_TABLE */ |
| 750 | |
| 751 | /* Pre-condition the CRC */ |
| 752 | crc ^= 0xffffffff; |
| 753 | |
| 754 | #ifdef W |
| 755 | |
| 756 | /* If provided enough bytes, do a braided CRC calculation. */ |
| 757 | if (len >= N * W + W - 1) { |
| 758 | z_size_t blks; |
| 759 | z_word_t const *words; |
| 760 | unsigned endian; |
| 761 | int k; |
| 762 | |
| 763 | /* Compute the CRC up to a z_word_t boundary. */ |
| 764 | while (len && ((z_size_t)buf & (W - 1)) != 0) { |
| 765 | len--; |
| 766 | crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; |
| 767 | } |
| 768 | |
| 769 | /* Compute the CRC on as many N z_word_t blocks as are available. */ |
| 770 | blks = len / (N * W); |
| 771 | len -= blks * N * W; |
| 772 | words = (z_word_t const *)buf; |
| 773 | |
| 774 | /* Do endian check at execution time instead of compile time, since ARM |
| 775 | processors can change the endianess at execution time. If the |
| 776 | compiler knows what the endianess will be, it can optimize out the |
| 777 | check and the unused branch. */ |
| 778 | endian = 1; |
| 779 | if (*(unsigned char *)&endian) { |
| 780 | /* Little endian. */ |
| 781 | |
| 782 | z_crc_t crc0; |
| 783 | z_word_t word0; |
| 784 | #if N > 1 |
| 785 | z_crc_t crc1; |
| 786 | z_word_t word1; |
| 787 | #if N > 2 |
| 788 | z_crc_t crc2; |
| 789 | z_word_t word2; |
| 790 | #if N > 3 |
| 791 | z_crc_t crc3; |
| 792 | z_word_t word3; |
| 793 | #if N > 4 |
| 794 | z_crc_t crc4; |
| 795 | z_word_t word4; |
| 796 | #if N > 5 |
| 797 | z_crc_t crc5; |
| 798 | z_word_t word5; |
| 799 | #endif |
| 800 | #endif |
| 801 | #endif |
| 802 | #endif |
| 803 | #endif |
| 804 | |
| 805 | /* Initialize the CRC for each braid. */ |
| 806 | crc0 = crc; |
| 807 | #if N > 1 |
| 808 | crc1 = 0; |
| 809 | #if N > 2 |
| 810 | crc2 = 0; |
| 811 | #if N > 3 |
| 812 | crc3 = 0; |
| 813 | #if N > 4 |
| 814 | crc4 = 0; |
| 815 | #if N > 5 |
| 816 | crc5 = 0; |
| 817 | #endif |
| 818 | #endif |
| 819 | #endif |
| 820 | #endif |
| 821 | #endif |
| 822 | |
| 823 | /* |
| 824 | Process the first blks-1 blocks, computing the CRCs on each braid |
| 825 | independently. |
| 826 | */ |
| 827 | while (--blks) { |
| 828 | /* Load the word for each braid into registers. */ |
| 829 | word0 = crc0 ^ words[0]; |
| 830 | #if N > 1 |
| 831 | word1 = crc1 ^ words[1]; |
| 832 | #if N > 2 |
| 833 | word2 = crc2 ^ words[2]; |
| 834 | #if N > 3 |
| 835 | word3 = crc3 ^ words[3]; |
| 836 | #if N > 4 |
| 837 | word4 = crc4 ^ words[4]; |
| 838 | #if N > 5 |
| 839 | word5 = crc5 ^ words[5]; |
| 840 | #endif |
| 841 | #endif |
| 842 | #endif |
| 843 | #endif |
| 844 | #endif |
| 845 | words += N; |
| 846 | |
| 847 | /* Compute and update the CRC for each word. The loop should |
| 848 | get unrolled. */ |
| 849 | crc0 = crc_braid_table[0][word0 & 0xff]; |
| 850 | #if N > 1 |
| 851 | crc1 = crc_braid_table[0][word1 & 0xff]; |
| 852 | #if N > 2 |
| 853 | crc2 = crc_braid_table[0][word2 & 0xff]; |
| 854 | #if N > 3 |
| 855 | crc3 = crc_braid_table[0][word3 & 0xff]; |
| 856 | #if N > 4 |
| 857 | crc4 = crc_braid_table[0][word4 & 0xff]; |
| 858 | #if N > 5 |
| 859 | crc5 = crc_braid_table[0][word5 & 0xff]; |
| 860 | #endif |
| 861 | #endif |
| 862 | #endif |
| 863 | #endif |
| 864 | #endif |
| 865 | for (k = 1; k < W; k++) { |
| 866 | crc0 ^= crc_braid_table[k][(word0 >> (k << 3)) & 0xff]; |
| 867 | #if N > 1 |
| 868 | crc1 ^= crc_braid_table[k][(word1 >> (k << 3)) & 0xff]; |
| 869 | #if N > 2 |
| 870 | crc2 ^= crc_braid_table[k][(word2 >> (k << 3)) & 0xff]; |
| 871 | #if N > 3 |
| 872 | crc3 ^= crc_braid_table[k][(word3 >> (k << 3)) & 0xff]; |
| 873 | #if N > 4 |
| 874 | crc4 ^= crc_braid_table[k][(word4 >> (k << 3)) & 0xff]; |
| 875 | #if N > 5 |
| 876 | crc5 ^= crc_braid_table[k][(word5 >> (k << 3)) & 0xff]; |
| 877 | #endif |
| 878 | #endif |
| 879 | #endif |
| 880 | #endif |
| 881 | #endif |
| 882 | } |
| 883 | } |
| 884 | |
| 885 | /* |
| 886 | Process the last block, combining the CRCs of the N braids at the |
| 887 | same time. |
| 888 | */ |
| 889 | crc = crc_word(crc0 ^ words[0]); |
| 890 | #if N > 1 |
| 891 | crc = crc_word(crc1 ^ words[1] ^ crc); |
| 892 | #if N > 2 |
| 893 | crc = crc_word(crc2 ^ words[2] ^ crc); |
| 894 | #if N > 3 |
| 895 | crc = crc_word(crc3 ^ words[3] ^ crc); |
| 896 | #if N > 4 |
| 897 | crc = crc_word(crc4 ^ words[4] ^ crc); |
| 898 | #if N > 5 |
| 899 | crc = crc_word(crc5 ^ words[5] ^ crc); |
| 900 | #endif |
| 901 | #endif |
| 902 | #endif |
| 903 | #endif |
| 904 | #endif |
| 905 | words += N; |
| 906 | } |
| 907 | else { |
| 908 | /* Big endian. */ |
| 909 | |
| 910 | z_word_t crc0, word0, comb; |
| 911 | #if N > 1 |
| 912 | z_word_t crc1, word1; |
| 913 | #if N > 2 |
| 914 | z_word_t crc2, word2; |
| 915 | #if N > 3 |
| 916 | z_word_t crc3, word3; |
| 917 | #if N > 4 |
| 918 | z_word_t crc4, word4; |
| 919 | #if N > 5 |
| 920 | z_word_t crc5, word5; |
| 921 | #endif |
| 922 | #endif |
| 923 | #endif |
| 924 | #endif |
| 925 | #endif |
| 926 | |
| 927 | /* Initialize the CRC for each braid. */ |
| 928 | crc0 = byte_swap(crc); |
| 929 | #if N > 1 |
| 930 | crc1 = 0; |
| 931 | #if N > 2 |
| 932 | crc2 = 0; |
| 933 | #if N > 3 |
| 934 | crc3 = 0; |
| 935 | #if N > 4 |
| 936 | crc4 = 0; |
| 937 | #if N > 5 |
| 938 | crc5 = 0; |
| 939 | #endif |
| 940 | #endif |
| 941 | #endif |
| 942 | #endif |
| 943 | #endif |
| 944 | |
| 945 | /* |
| 946 | Process the first blks-1 blocks, computing the CRCs on each braid |
| 947 | independently. |
| 948 | */ |
| 949 | while (--blks) { |
| 950 | /* Load the word for each braid into registers. */ |
| 951 | word0 = crc0 ^ words[0]; |
| 952 | #if N > 1 |
| 953 | word1 = crc1 ^ words[1]; |
| 954 | #if N > 2 |
| 955 | word2 = crc2 ^ words[2]; |
| 956 | #if N > 3 |
| 957 | word3 = crc3 ^ words[3]; |
| 958 | #if N > 4 |
| 959 | word4 = crc4 ^ words[4]; |
| 960 | #if N > 5 |
| 961 | word5 = crc5 ^ words[5]; |
| 962 | #endif |
| 963 | #endif |
| 964 | #endif |
| 965 | #endif |
| 966 | #endif |
| 967 | words += N; |
| 968 | |
| 969 | /* Compute and update the CRC for each word. The loop should |
| 970 | get unrolled. */ |
| 971 | crc0 = crc_braid_big_table[0][word0 & 0xff]; |
| 972 | #if N > 1 |
| 973 | crc1 = crc_braid_big_table[0][word1 & 0xff]; |
| 974 | #if N > 2 |
| 975 | crc2 = crc_braid_big_table[0][word2 & 0xff]; |
| 976 | #if N > 3 |
| 977 | crc3 = crc_braid_big_table[0][word3 & 0xff]; |
| 978 | #if N > 4 |
| 979 | crc4 = crc_braid_big_table[0][word4 & 0xff]; |
| 980 | #if N > 5 |
| 981 | crc5 = crc_braid_big_table[0][word5 & 0xff]; |
| 982 | #endif |
| 983 | #endif |
| 984 | #endif |
| 985 | #endif |
| 986 | #endif |
| 987 | for (k = 1; k < W; k++) { |
| 988 | crc0 ^= crc_braid_big_table[k][(word0 >> (k << 3)) & 0xff]; |
| 989 | #if N > 1 |
| 990 | crc1 ^= crc_braid_big_table[k][(word1 >> (k << 3)) & 0xff]; |
| 991 | #if N > 2 |
| 992 | crc2 ^= crc_braid_big_table[k][(word2 >> (k << 3)) & 0xff]; |
| 993 | #if N > 3 |
| 994 | crc3 ^= crc_braid_big_table[k][(word3 >> (k << 3)) & 0xff]; |
| 995 | #if N > 4 |
| 996 | crc4 ^= crc_braid_big_table[k][(word4 >> (k << 3)) & 0xff]; |
| 997 | #if N > 5 |
| 998 | crc5 ^= crc_braid_big_table[k][(word5 >> (k << 3)) & 0xff]; |
| 999 | #endif |
| 1000 | #endif |
| 1001 | #endif |
| 1002 | #endif |
| 1003 | #endif |
| 1004 | } |
| 1005 | } |
| 1006 | |
| 1007 | /* |
| 1008 | Process the last block, combining the CRCs of the N braids at the |
| 1009 | same time. |
| 1010 | */ |
| 1011 | comb = crc_word_big(crc0 ^ words[0]); |
| 1012 | #if N > 1 |
| 1013 | comb = crc_word_big(crc1 ^ words[1] ^ comb); |
| 1014 | #if N > 2 |
| 1015 | comb = crc_word_big(crc2 ^ words[2] ^ comb); |
| 1016 | #if N > 3 |
| 1017 | comb = crc_word_big(crc3 ^ words[3] ^ comb); |
| 1018 | #if N > 4 |
| 1019 | comb = crc_word_big(crc4 ^ words[4] ^ comb); |
| 1020 | #if N > 5 |
| 1021 | comb = crc_word_big(crc5 ^ words[5] ^ comb); |
| 1022 | #endif |
| 1023 | #endif |
| 1024 | #endif |
| 1025 | #endif |
| 1026 | #endif |
| 1027 | words += N; |
| 1028 | crc = byte_swap(comb); |
| 1029 | } |
| 1030 | |
| 1031 | /* |
| 1032 | Update the pointer to the remaining bytes to process. |
| 1033 | */ |
| 1034 | buf = (unsigned char const *)words; |
| 1035 | } |
| 1036 | |
| 1037 | #endif /* W */ |
| 1038 | |
| 1039 | /* Complete the computation of the CRC on any remaining bytes. */ |
| 1040 | while (len >= 8) { |
| 1041 | len -= 8; |
| 1042 | crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; |
| 1043 | crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; |
| 1044 | crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; |
| 1045 | crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; |
| 1046 | crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; |
| 1047 | crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; |
| 1048 | crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; |
| 1049 | crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; |
| 1050 | } |
| 1051 | while (len) { |
| 1052 | len--; |
| 1053 | crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; |
| 1054 | } |
| 1055 | |
| 1056 | /* Return the CRC, post-conditioned. */ |
| 1057 | return crc ^ 0xffffffff; |
| 1058 | } |
| 1059 | |
| 1060 | #endif |
| 1061 | |
| 1062 | /* ========================================================================= */ |
| 1063 | unsigned long ZEXPORT crc32(crc, buf, len) |
| 1064 | unsigned long crc; |
| 1065 | const unsigned char FAR *buf; |
| @@ -240,203 +1066,51 @@ | |
| 1066 | uInt len; |
| 1067 | { |
| 1068 | return crc32_z(crc, buf, len); |
| 1069 | } |
| 1070 | |
| 1071 | /* ========================================================================= */ |
| 1072 | uLong ZEXPORT crc32_combine64(crc1, crc2, len2) |
| 1073 | uLong crc1; |
| 1074 | uLong crc2; |
| 1075 | z_off64_t len2; |
| 1076 | { |
| 1077 | #ifdef DYNAMIC_CRC_TABLE |
| 1078 | once(&made, make_crc_table); |
| 1079 | #endif /* DYNAMIC_CRC_TABLE */ |
| 1080 | return multmodp(x2nmodp(len2, 3), crc1) ^ crc2; |
| 1081 | } |
| 1082 | |
| 1083 | /* ========================================================================= */ |
| 1084 | uLong ZEXPORT crc32_combine(crc1, crc2, len2) |
| 1085 | uLong crc1; |
| 1086 | uLong crc2; |
| 1087 | z_off_t len2; |
| 1088 | { |
| 1089 | return crc32_combine64(crc1, crc2, len2); |
| 1090 | } |
| 1091 | |
| 1092 | /* ========================================================================= */ |
| 1093 | uLong ZEXPORT crc32_combine_gen64(len2) |
| 1094 | z_off64_t len2; |
| 1095 | { |
| 1096 | #ifdef DYNAMIC_CRC_TABLE |
| 1097 | once(&made, make_crc_table); |
| 1098 | #endif /* DYNAMIC_CRC_TABLE */ |
| 1099 | return x2nmodp(len2, 3); |
| 1100 | } |
| 1101 | |
| 1102 | /* ========================================================================= */ |
| 1103 | uLong ZEXPORT crc32_combine_gen(len2) |
| 1104 | z_off_t len2; |
| 1105 | { |
| 1106 | return crc32_combine_gen64(len2); |
| 1107 | } |
| 1108 | |
| 1109 | /* ========================================================================= */ |
| 1110 | uLong crc32_combine_op(crc1, crc2, op) |
| 1111 | uLong crc1; |
| 1112 | uLong crc2; |
| 1113 | uLong op; |
| 1114 | { |
| 1115 | return multmodp(op, crc1) ^ crc2; |
| 1116 | } |
| 1117 |
+9441
-436
| --- compat/zlib/crc32.h | ||
| +++ compat/zlib/crc32.h | ||
| @@ -1,441 +1,9446 @@ | ||
| 1 | 1 | /* crc32.h -- tables for rapid CRC calculation |
| 2 | 2 | * Generated automatically by crc32.c |
| 3 | 3 | */ |
| 4 | 4 | |
| 5 | -local const z_crc_t FAR crc_table[TBLS][256] = | |
| 6 | -{ | |
| 7 | - { | |
| 8 | - 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL, | |
| 9 | - 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL, | |
| 10 | - 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL, | |
| 11 | - 0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL, | |
| 12 | - 0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL, | |
| 13 | - 0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL, | |
| 14 | - 0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL, | |
| 15 | - 0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL, | |
| 16 | - 0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL, | |
| 17 | - 0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL, | |
| 18 | - 0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL, | |
| 19 | - 0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL, | |
| 20 | - 0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL, | |
| 21 | - 0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL, | |
| 22 | - 0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL, | |
| 23 | - 0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL, | |
| 24 | - 0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL, | |
| 25 | - 0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL, | |
| 26 | - 0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL, | |
| 27 | - 0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL, | |
| 28 | - 0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL, | |
| 29 | - 0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL, | |
| 30 | - 0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL, | |
| 31 | - 0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL, | |
| 32 | - 0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL, | |
| 33 | - 0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL, | |
| 34 | - 0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL, | |
| 35 | - 0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL, | |
| 36 | - 0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL, | |
| 37 | - 0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL, | |
| 38 | - 0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL, | |
| 39 | - 0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL, | |
| 40 | - 0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL, | |
| 41 | - 0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL, | |
| 42 | - 0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL, | |
| 43 | - 0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL, | |
| 44 | - 0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL, | |
| 45 | - 0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL, | |
| 46 | - 0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL, | |
| 47 | - 0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL, | |
| 48 | - 0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL, | |
| 49 | - 0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL, | |
| 50 | - 0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL, | |
| 51 | - 0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL, | |
| 52 | - 0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL, | |
| 53 | - 0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL, | |
| 54 | - 0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL, | |
| 55 | - 0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL, | |
| 56 | - 0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL, | |
| 57 | - 0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL, | |
| 58 | - 0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL, | |
| 59 | - 0x2d02ef8dUL | |
| 60 | -#ifdef BYFOUR | |
| 61 | - }, | |
| 62 | - { | |
| 63 | - 0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL, | |
| 64 | - 0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL, | |
| 65 | - 0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL, | |
| 66 | - 0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL, | |
| 67 | - 0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL, | |
| 68 | - 0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL, | |
| 69 | - 0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL, | |
| 70 | - 0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL, | |
| 71 | - 0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL, | |
| 72 | - 0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL, | |
| 73 | - 0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL, | |
| 74 | - 0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL, | |
| 75 | - 0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL, | |
| 76 | - 0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL, | |
| 77 | - 0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL, | |
| 78 | - 0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL, | |
| 79 | - 0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL, | |
| 80 | - 0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL, | |
| 81 | - 0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL, | |
| 82 | - 0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL, | |
| 83 | - 0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL, | |
| 84 | - 0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL, | |
| 85 | - 0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL, | |
| 86 | - 0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL, | |
| 87 | - 0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL, | |
| 88 | - 0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL, | |
| 89 | - 0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL, | |
| 90 | - 0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL, | |
| 91 | - 0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL, | |
| 92 | - 0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL, | |
| 93 | - 0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL, | |
| 94 | - 0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL, | |
| 95 | - 0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL, | |
| 96 | - 0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL, | |
| 97 | - 0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL, | |
| 98 | - 0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL, | |
| 99 | - 0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL, | |
| 100 | - 0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL, | |
| 101 | - 0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL, | |
| 102 | - 0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL, | |
| 103 | - 0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL, | |
| 104 | - 0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL, | |
| 105 | - 0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL, | |
| 106 | - 0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL, | |
| 107 | - 0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL, | |
| 108 | - 0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL, | |
| 109 | - 0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL, | |
| 110 | - 0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL, | |
| 111 | - 0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL, | |
| 112 | - 0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL, | |
| 113 | - 0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL, | |
| 114 | - 0x9324fd72UL | |
| 115 | - }, | |
| 116 | - { | |
| 117 | - 0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL, | |
| 118 | - 0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL, | |
| 119 | - 0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL, | |
| 120 | - 0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL, | |
| 121 | - 0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL, | |
| 122 | - 0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL, | |
| 123 | - 0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL, | |
| 124 | - 0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL, | |
| 125 | - 0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL, | |
| 126 | - 0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL, | |
| 127 | - 0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL, | |
| 128 | - 0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL, | |
| 129 | - 0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL, | |
| 130 | - 0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL, | |
| 131 | - 0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL, | |
| 132 | - 0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL, | |
| 133 | - 0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL, | |
| 134 | - 0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL, | |
| 135 | - 0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL, | |
| 136 | - 0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL, | |
| 137 | - 0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL, | |
| 138 | - 0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL, | |
| 139 | - 0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL, | |
| 140 | - 0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL, | |
| 141 | - 0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL, | |
| 142 | - 0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL, | |
| 143 | - 0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL, | |
| 144 | - 0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL, | |
| 145 | - 0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL, | |
| 146 | - 0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL, | |
| 147 | - 0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL, | |
| 148 | - 0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL, | |
| 149 | - 0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL, | |
| 150 | - 0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL, | |
| 151 | - 0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL, | |
| 152 | - 0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL, | |
| 153 | - 0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL, | |
| 154 | - 0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL, | |
| 155 | - 0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL, | |
| 156 | - 0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL, | |
| 157 | - 0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL, | |
| 158 | - 0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL, | |
| 159 | - 0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL, | |
| 160 | - 0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL, | |
| 161 | - 0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL, | |
| 162 | - 0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL, | |
| 163 | - 0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL, | |
| 164 | - 0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL, | |
| 165 | - 0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL, | |
| 166 | - 0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL, | |
| 167 | - 0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL, | |
| 168 | - 0xbe9834edUL | |
| 169 | - }, | |
| 170 | - { | |
| 171 | - 0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL, | |
| 172 | - 0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL, | |
| 173 | - 0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL, | |
| 174 | - 0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL, | |
| 175 | - 0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL, | |
| 176 | - 0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL, | |
| 177 | - 0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL, | |
| 178 | - 0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL, | |
| 179 | - 0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL, | |
| 180 | - 0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL, | |
| 181 | - 0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL, | |
| 182 | - 0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL, | |
| 183 | - 0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL, | |
| 184 | - 0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL, | |
| 185 | - 0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL, | |
| 186 | - 0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL, | |
| 187 | - 0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL, | |
| 188 | - 0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL, | |
| 189 | - 0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL, | |
| 190 | - 0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL, | |
| 191 | - 0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL, | |
| 192 | - 0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL, | |
| 193 | - 0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL, | |
| 194 | - 0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL, | |
| 195 | - 0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL, | |
| 196 | - 0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL, | |
| 197 | - 0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL, | |
| 198 | - 0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL, | |
| 199 | - 0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL, | |
| 200 | - 0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL, | |
| 201 | - 0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL, | |
| 202 | - 0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL, | |
| 203 | - 0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL, | |
| 204 | - 0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL, | |
| 205 | - 0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL, | |
| 206 | - 0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL, | |
| 207 | - 0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL, | |
| 208 | - 0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL, | |
| 209 | - 0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL, | |
| 210 | - 0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL, | |
| 211 | - 0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL, | |
| 212 | - 0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL, | |
| 213 | - 0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL, | |
| 214 | - 0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL, | |
| 215 | - 0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL, | |
| 216 | - 0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL, | |
| 217 | - 0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL, | |
| 218 | - 0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL, | |
| 219 | - 0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL, | |
| 220 | - 0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL, | |
| 221 | - 0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL, | |
| 222 | - 0xde0506f1UL | |
| 223 | - }, | |
| 224 | - { | |
| 225 | - 0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL, | |
| 226 | - 0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL, | |
| 227 | - 0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL, | |
| 228 | - 0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL, | |
| 229 | - 0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL, | |
| 230 | - 0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL, | |
| 231 | - 0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL, | |
| 232 | - 0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL, | |
| 233 | - 0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL, | |
| 234 | - 0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL, | |
| 235 | - 0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL, | |
| 236 | - 0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL, | |
| 237 | - 0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL, | |
| 238 | - 0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL, | |
| 239 | - 0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL, | |
| 240 | - 0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL, | |
| 241 | - 0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL, | |
| 242 | - 0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL, | |
| 243 | - 0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL, | |
| 244 | - 0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL, | |
| 245 | - 0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL, | |
| 246 | - 0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL, | |
| 247 | - 0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL, | |
| 248 | - 0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL, | |
| 249 | - 0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL, | |
| 250 | - 0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL, | |
| 251 | - 0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL, | |
| 252 | - 0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL, | |
| 253 | - 0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL, | |
| 254 | - 0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL, | |
| 255 | - 0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL, | |
| 256 | - 0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL, | |
| 257 | - 0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL, | |
| 258 | - 0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL, | |
| 259 | - 0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL, | |
| 260 | - 0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL, | |
| 261 | - 0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL, | |
| 262 | - 0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL, | |
| 263 | - 0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL, | |
| 264 | - 0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL, | |
| 265 | - 0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL, | |
| 266 | - 0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL, | |
| 267 | - 0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL, | |
| 268 | - 0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL, | |
| 269 | - 0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL, | |
| 270 | - 0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL, | |
| 271 | - 0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL, | |
| 272 | - 0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL, | |
| 273 | - 0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL, | |
| 274 | - 0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL, | |
| 275 | - 0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL, | |
| 276 | - 0x8def022dUL | |
| 277 | - }, | |
| 278 | - { | |
| 279 | - 0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL, | |
| 280 | - 0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL, | |
| 281 | - 0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL, | |
| 282 | - 0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL, | |
| 283 | - 0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL, | |
| 284 | - 0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL, | |
| 285 | - 0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL, | |
| 286 | - 0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL, | |
| 287 | - 0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL, | |
| 288 | - 0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL, | |
| 289 | - 0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL, | |
| 290 | - 0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL, | |
| 291 | - 0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL, | |
| 292 | - 0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL, | |
| 293 | - 0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL, | |
| 294 | - 0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL, | |
| 295 | - 0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL, | |
| 296 | - 0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL, | |
| 297 | - 0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL, | |
| 298 | - 0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL, | |
| 299 | - 0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL, | |
| 300 | - 0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL, | |
| 301 | - 0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL, | |
| 302 | - 0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL, | |
| 303 | - 0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL, | |
| 304 | - 0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL, | |
| 305 | - 0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL, | |
| 306 | - 0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL, | |
| 307 | - 0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL, | |
| 308 | - 0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL, | |
| 309 | - 0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL, | |
| 310 | - 0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL, | |
| 311 | - 0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL, | |
| 312 | - 0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL, | |
| 313 | - 0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL, | |
| 314 | - 0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL, | |
| 315 | - 0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL, | |
| 316 | - 0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL, | |
| 317 | - 0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL, | |
| 318 | - 0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL, | |
| 319 | - 0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL, | |
| 320 | - 0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL, | |
| 321 | - 0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL, | |
| 322 | - 0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL, | |
| 323 | - 0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL, | |
| 324 | - 0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL, | |
| 325 | - 0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL, | |
| 326 | - 0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL, | |
| 327 | - 0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL, | |
| 328 | - 0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL, | |
| 329 | - 0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL, | |
| 330 | - 0x72fd2493UL | |
| 331 | - }, | |
| 332 | - { | |
| 333 | - 0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL, | |
| 334 | - 0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL, | |
| 335 | - 0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL, | |
| 336 | - 0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL, | |
| 337 | - 0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL, | |
| 338 | - 0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL, | |
| 339 | - 0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL, | |
| 340 | - 0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL, | |
| 341 | - 0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL, | |
| 342 | - 0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL, | |
| 343 | - 0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL, | |
| 344 | - 0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL, | |
| 345 | - 0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL, | |
| 346 | - 0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL, | |
| 347 | - 0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL, | |
| 348 | - 0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL, | |
| 349 | - 0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL, | |
| 350 | - 0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL, | |
| 351 | - 0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL, | |
| 352 | - 0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL, | |
| 353 | - 0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL, | |
| 354 | - 0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL, | |
| 355 | - 0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL, | |
| 356 | - 0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL, | |
| 357 | - 0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL, | |
| 358 | - 0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL, | |
| 359 | - 0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL, | |
| 360 | - 0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL, | |
| 361 | - 0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL, | |
| 362 | - 0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL, | |
| 363 | - 0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL, | |
| 364 | - 0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL, | |
| 365 | - 0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL, | |
| 366 | - 0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL, | |
| 367 | - 0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL, | |
| 368 | - 0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL, | |
| 369 | - 0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL, | |
| 370 | - 0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL, | |
| 371 | - 0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL, | |
| 372 | - 0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL, | |
| 373 | - 0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL, | |
| 374 | - 0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL, | |
| 375 | - 0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL, | |
| 376 | - 0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL, | |
| 377 | - 0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL, | |
| 378 | - 0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL, | |
| 379 | - 0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL, | |
| 380 | - 0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL, | |
| 381 | - 0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL, | |
| 382 | - 0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL, | |
| 383 | - 0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL, | |
| 384 | - 0xed3498beUL | |
| 385 | - }, | |
| 386 | - { | |
| 387 | - 0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL, | |
| 388 | - 0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL, | |
| 389 | - 0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL, | |
| 390 | - 0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL, | |
| 391 | - 0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL, | |
| 392 | - 0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL, | |
| 393 | - 0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL, | |
| 394 | - 0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL, | |
| 395 | - 0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL, | |
| 396 | - 0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL, | |
| 397 | - 0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL, | |
| 398 | - 0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL, | |
| 399 | - 0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL, | |
| 400 | - 0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL, | |
| 401 | - 0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL, | |
| 402 | - 0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL, | |
| 403 | - 0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL, | |
| 404 | - 0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL, | |
| 405 | - 0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL, | |
| 406 | - 0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL, | |
| 407 | - 0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL, | |
| 408 | - 0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL, | |
| 409 | - 0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL, | |
| 410 | - 0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL, | |
| 411 | - 0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL, | |
| 412 | - 0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL, | |
| 413 | - 0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL, | |
| 414 | - 0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL, | |
| 415 | - 0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL, | |
| 416 | - 0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL, | |
| 417 | - 0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL, | |
| 418 | - 0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL, | |
| 419 | - 0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL, | |
| 420 | - 0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL, | |
| 421 | - 0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL, | |
| 422 | - 0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL, | |
| 423 | - 0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL, | |
| 424 | - 0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL, | |
| 425 | - 0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL, | |
| 426 | - 0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL, | |
| 427 | - 0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL, | |
| 428 | - 0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL, | |
| 429 | - 0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL, | |
| 430 | - 0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL, | |
| 431 | - 0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL, | |
| 432 | - 0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL, | |
| 433 | - 0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL, | |
| 434 | - 0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL, | |
| 435 | - 0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL, | |
| 436 | - 0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL, | |
| 437 | - 0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL, | |
| 438 | - 0xf10605deUL | |
| 5 | +local const z_crc_t FAR crc_table[] = { | |
| 6 | + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, | |
| 7 | + 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, | |
| 8 | + 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, | |
| 9 | + 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, | |
| 10 | + 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, | |
| 11 | + 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, | |
| 12 | + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, | |
| 13 | + 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, | |
| 14 | + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, | |
| 15 | + 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, | |
| 16 | + 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, | |
| 17 | + 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, | |
| 18 | + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, | |
| 19 | + 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, | |
| 20 | + 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, | |
| 21 | + 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, | |
| 22 | + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, | |
| 23 | + 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, | |
| 24 | + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, | |
| 25 | + 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, | |
| 26 | + 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, | |
| 27 | + 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, | |
| 28 | + 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, | |
| 29 | + 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, | |
| 30 | + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, | |
| 31 | + 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, | |
| 32 | + 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, | |
| 33 | + 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, | |
| 34 | + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, | |
| 35 | + 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, | |
| 36 | + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, | |
| 37 | + 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, | |
| 38 | + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, | |
| 39 | + 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, | |
| 40 | + 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, | |
| 41 | + 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, | |
| 42 | + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, | |
| 43 | + 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, | |
| 44 | + 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, | |
| 45 | + 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, | |
| 46 | + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, | |
| 47 | + 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, | |
| 48 | + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, | |
| 49 | + 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, | |
| 50 | + 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, | |
| 51 | + 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, | |
| 52 | + 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, | |
| 53 | + 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, | |
| 54 | + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, | |
| 55 | + 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, | |
| 56 | + 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, | |
| 57 | + 0x2d02ef8d}; | |
| 58 | + | |
| 59 | +#ifdef W | |
| 60 | + | |
| 61 | +#if W == 8 | |
| 62 | + | |
| 63 | +local const z_word_t FAR crc_big_table[] = { | |
| 64 | + 0x0000000000000000, 0x9630077700000000, 0x2c610eee00000000, | |
| 65 | + 0xba51099900000000, 0x19c46d0700000000, 0x8ff46a7000000000, | |
| 66 | + 0x35a563e900000000, 0xa395649e00000000, 0x3288db0e00000000, | |
| 67 | + 0xa4b8dc7900000000, 0x1ee9d5e000000000, 0x88d9d29700000000, | |
| 68 | + 0x2b4cb60900000000, 0xbd7cb17e00000000, 0x072db8e700000000, | |
| 69 | + 0x911dbf9000000000, 0x6410b71d00000000, 0xf220b06a00000000, | |
| 70 | + 0x4871b9f300000000, 0xde41be8400000000, 0x7dd4da1a00000000, | |
| 71 | + 0xebe4dd6d00000000, 0x51b5d4f400000000, 0xc785d38300000000, | |
| 72 | + 0x56986c1300000000, 0xc0a86b6400000000, 0x7af962fd00000000, | |
| 73 | + 0xecc9658a00000000, 0x4f5c011400000000, 0xd96c066300000000, | |
| 74 | + 0x633d0ffa00000000, 0xf50d088d00000000, 0xc8206e3b00000000, | |
| 75 | + 0x5e10694c00000000, 0xe44160d500000000, 0x727167a200000000, | |
| 76 | + 0xd1e4033c00000000, 0x47d4044b00000000, 0xfd850dd200000000, | |
| 77 | + 0x6bb50aa500000000, 0xfaa8b53500000000, 0x6c98b24200000000, | |
| 78 | + 0xd6c9bbdb00000000, 0x40f9bcac00000000, 0xe36cd83200000000, | |
| 79 | + 0x755cdf4500000000, 0xcf0dd6dc00000000, 0x593dd1ab00000000, | |
| 80 | + 0xac30d92600000000, 0x3a00de5100000000, 0x8051d7c800000000, | |
| 81 | + 0x1661d0bf00000000, 0xb5f4b42100000000, 0x23c4b35600000000, | |
| 82 | + 0x9995bacf00000000, 0x0fa5bdb800000000, 0x9eb8022800000000, | |
| 83 | + 0x0888055f00000000, 0xb2d90cc600000000, 0x24e90bb100000000, | |
| 84 | + 0x877c6f2f00000000, 0x114c685800000000, 0xab1d61c100000000, | |
| 85 | + 0x3d2d66b600000000, 0x9041dc7600000000, 0x0671db0100000000, | |
| 86 | + 0xbc20d29800000000, 0x2a10d5ef00000000, 0x8985b17100000000, | |
| 87 | + 0x1fb5b60600000000, 0xa5e4bf9f00000000, 0x33d4b8e800000000, | |
| 88 | + 0xa2c9077800000000, 0x34f9000f00000000, 0x8ea8099600000000, | |
| 89 | + 0x18980ee100000000, 0xbb0d6a7f00000000, 0x2d3d6d0800000000, | |
| 90 | + 0x976c649100000000, 0x015c63e600000000, 0xf4516b6b00000000, | |
| 91 | + 0x62616c1c00000000, 0xd830658500000000, 0x4e0062f200000000, | |
| 92 | + 0xed95066c00000000, 0x7ba5011b00000000, 0xc1f4088200000000, | |
| 93 | + 0x57c40ff500000000, 0xc6d9b06500000000, 0x50e9b71200000000, | |
| 94 | + 0xeab8be8b00000000, 0x7c88b9fc00000000, 0xdf1ddd6200000000, | |
| 95 | + 0x492dda1500000000, 0xf37cd38c00000000, 0x654cd4fb00000000, | |
| 96 | + 0x5861b24d00000000, 0xce51b53a00000000, 0x7400bca300000000, | |
| 97 | + 0xe230bbd400000000, 0x41a5df4a00000000, 0xd795d83d00000000, | |
| 98 | + 0x6dc4d1a400000000, 0xfbf4d6d300000000, 0x6ae9694300000000, | |
| 99 | + 0xfcd96e3400000000, 0x468867ad00000000, 0xd0b860da00000000, | |
| 100 | + 0x732d044400000000, 0xe51d033300000000, 0x5f4c0aaa00000000, | |
| 101 | + 0xc97c0ddd00000000, 0x3c71055000000000, 0xaa41022700000000, | |
| 102 | + 0x10100bbe00000000, 0x86200cc900000000, 0x25b5685700000000, | |
| 103 | + 0xb3856f2000000000, 0x09d466b900000000, 0x9fe461ce00000000, | |
| 104 | + 0x0ef9de5e00000000, 0x98c9d92900000000, 0x2298d0b000000000, | |
| 105 | + 0xb4a8d7c700000000, 0x173db35900000000, 0x810db42e00000000, | |
| 106 | + 0x3b5cbdb700000000, 0xad6cbac000000000, 0x2083b8ed00000000, | |
| 107 | + 0xb6b3bf9a00000000, 0x0ce2b60300000000, 0x9ad2b17400000000, | |
| 108 | + 0x3947d5ea00000000, 0xaf77d29d00000000, 0x1526db0400000000, | |
| 109 | + 0x8316dc7300000000, 0x120b63e300000000, 0x843b649400000000, | |
| 110 | + 0x3e6a6d0d00000000, 0xa85a6a7a00000000, 0x0bcf0ee400000000, | |
| 111 | + 0x9dff099300000000, 0x27ae000a00000000, 0xb19e077d00000000, | |
| 112 | + 0x44930ff000000000, 0xd2a3088700000000, 0x68f2011e00000000, | |
| 113 | + 0xfec2066900000000, 0x5d5762f700000000, 0xcb67658000000000, | |
| 114 | + 0x71366c1900000000, 0xe7066b6e00000000, 0x761bd4fe00000000, | |
| 115 | + 0xe02bd38900000000, 0x5a7ada1000000000, 0xcc4add6700000000, | |
| 116 | + 0x6fdfb9f900000000, 0xf9efbe8e00000000, 0x43beb71700000000, | |
| 117 | + 0xd58eb06000000000, 0xe8a3d6d600000000, 0x7e93d1a100000000, | |
| 118 | + 0xc4c2d83800000000, 0x52f2df4f00000000, 0xf167bbd100000000, | |
| 119 | + 0x6757bca600000000, 0xdd06b53f00000000, 0x4b36b24800000000, | |
| 120 | + 0xda2b0dd800000000, 0x4c1b0aaf00000000, 0xf64a033600000000, | |
| 121 | + 0x607a044100000000, 0xc3ef60df00000000, 0x55df67a800000000, | |
| 122 | + 0xef8e6e3100000000, 0x79be694600000000, 0x8cb361cb00000000, | |
| 123 | + 0x1a8366bc00000000, 0xa0d26f2500000000, 0x36e2685200000000, | |
| 124 | + 0x95770ccc00000000, 0x03470bbb00000000, 0xb916022200000000, | |
| 125 | + 0x2f26055500000000, 0xbe3bbac500000000, 0x280bbdb200000000, | |
| 126 | + 0x925ab42b00000000, 0x046ab35c00000000, 0xa7ffd7c200000000, | |
| 127 | + 0x31cfd0b500000000, 0x8b9ed92c00000000, 0x1daede5b00000000, | |
| 128 | + 0xb0c2649b00000000, 0x26f263ec00000000, 0x9ca36a7500000000, | |
| 129 | + 0x0a936d0200000000, 0xa906099c00000000, 0x3f360eeb00000000, | |
| 130 | + 0x8567077200000000, 0x1357000500000000, 0x824abf9500000000, | |
| 131 | + 0x147ab8e200000000, 0xae2bb17b00000000, 0x381bb60c00000000, | |
| 132 | + 0x9b8ed29200000000, 0x0dbed5e500000000, 0xb7efdc7c00000000, | |
| 133 | + 0x21dfdb0b00000000, 0xd4d2d38600000000, 0x42e2d4f100000000, | |
| 134 | + 0xf8b3dd6800000000, 0x6e83da1f00000000, 0xcd16be8100000000, | |
| 135 | + 0x5b26b9f600000000, 0xe177b06f00000000, 0x7747b71800000000, | |
| 136 | + 0xe65a088800000000, 0x706a0fff00000000, 0xca3b066600000000, | |
| 137 | + 0x5c0b011100000000, 0xff9e658f00000000, 0x69ae62f800000000, | |
| 138 | + 0xd3ff6b6100000000, 0x45cf6c1600000000, 0x78e20aa000000000, | |
| 139 | + 0xeed20dd700000000, 0x5483044e00000000, 0xc2b3033900000000, | |
| 140 | + 0x612667a700000000, 0xf71660d000000000, 0x4d47694900000000, | |
| 141 | + 0xdb776e3e00000000, 0x4a6ad1ae00000000, 0xdc5ad6d900000000, | |
| 142 | + 0x660bdf4000000000, 0xf03bd83700000000, 0x53aebca900000000, | |
| 143 | + 0xc59ebbde00000000, 0x7fcfb24700000000, 0xe9ffb53000000000, | |
| 144 | + 0x1cf2bdbd00000000, 0x8ac2baca00000000, 0x3093b35300000000, | |
| 145 | + 0xa6a3b42400000000, 0x0536d0ba00000000, 0x9306d7cd00000000, | |
| 146 | + 0x2957de5400000000, 0xbf67d92300000000, 0x2e7a66b300000000, | |
| 147 | + 0xb84a61c400000000, 0x021b685d00000000, 0x942b6f2a00000000, | |
| 148 | + 0x37be0bb400000000, 0xa18e0cc300000000, 0x1bdf055a00000000, | |
| 149 | + 0x8def022d00000000}; | |
| 150 | + | |
| 151 | +#else /* W == 4 */ | |
| 152 | + | |
| 153 | +local const z_word_t FAR crc_big_table[] = { | |
| 154 | + 0x00000000, 0x96300777, 0x2c610eee, 0xba510999, 0x19c46d07, | |
| 155 | + 0x8ff46a70, 0x35a563e9, 0xa395649e, 0x3288db0e, 0xa4b8dc79, | |
| 156 | + 0x1ee9d5e0, 0x88d9d297, 0x2b4cb609, 0xbd7cb17e, 0x072db8e7, | |
| 157 | + 0x911dbf90, 0x6410b71d, 0xf220b06a, 0x4871b9f3, 0xde41be84, | |
| 158 | + 0x7dd4da1a, 0xebe4dd6d, 0x51b5d4f4, 0xc785d383, 0x56986c13, | |
| 159 | + 0xc0a86b64, 0x7af962fd, 0xecc9658a, 0x4f5c0114, 0xd96c0663, | |
| 160 | + 0x633d0ffa, 0xf50d088d, 0xc8206e3b, 0x5e10694c, 0xe44160d5, | |
| 161 | + 0x727167a2, 0xd1e4033c, 0x47d4044b, 0xfd850dd2, 0x6bb50aa5, | |
| 162 | + 0xfaa8b535, 0x6c98b242, 0xd6c9bbdb, 0x40f9bcac, 0xe36cd832, | |
| 163 | + 0x755cdf45, 0xcf0dd6dc, 0x593dd1ab, 0xac30d926, 0x3a00de51, | |
| 164 | + 0x8051d7c8, 0x1661d0bf, 0xb5f4b421, 0x23c4b356, 0x9995bacf, | |
| 165 | + 0x0fa5bdb8, 0x9eb80228, 0x0888055f, 0xb2d90cc6, 0x24e90bb1, | |
| 166 | + 0x877c6f2f, 0x114c6858, 0xab1d61c1, 0x3d2d66b6, 0x9041dc76, | |
| 167 | + 0x0671db01, 0xbc20d298, 0x2a10d5ef, 0x8985b171, 0x1fb5b606, | |
| 168 | + 0xa5e4bf9f, 0x33d4b8e8, 0xa2c90778, 0x34f9000f, 0x8ea80996, | |
| 169 | + 0x18980ee1, 0xbb0d6a7f, 0x2d3d6d08, 0x976c6491, 0x015c63e6, | |
| 170 | + 0xf4516b6b, 0x62616c1c, 0xd8306585, 0x4e0062f2, 0xed95066c, | |
| 171 | + 0x7ba5011b, 0xc1f40882, 0x57c40ff5, 0xc6d9b065, 0x50e9b712, | |
| 172 | + 0xeab8be8b, 0x7c88b9fc, 0xdf1ddd62, 0x492dda15, 0xf37cd38c, | |
| 173 | + 0x654cd4fb, 0x5861b24d, 0xce51b53a, 0x7400bca3, 0xe230bbd4, | |
| 174 | + 0x41a5df4a, 0xd795d83d, 0x6dc4d1a4, 0xfbf4d6d3, 0x6ae96943, | |
| 175 | + 0xfcd96e34, 0x468867ad, 0xd0b860da, 0x732d0444, 0xe51d0333, | |
| 176 | + 0x5f4c0aaa, 0xc97c0ddd, 0x3c710550, 0xaa410227, 0x10100bbe, | |
| 177 | + 0x86200cc9, 0x25b56857, 0xb3856f20, 0x09d466b9, 0x9fe461ce, | |
| 178 | + 0x0ef9de5e, 0x98c9d929, 0x2298d0b0, 0xb4a8d7c7, 0x173db359, | |
| 179 | + 0x810db42e, 0x3b5cbdb7, 0xad6cbac0, 0x2083b8ed, 0xb6b3bf9a, | |
| 180 | + 0x0ce2b603, 0x9ad2b174, 0x3947d5ea, 0xaf77d29d, 0x1526db04, | |
| 181 | + 0x8316dc73, 0x120b63e3, 0x843b6494, 0x3e6a6d0d, 0xa85a6a7a, | |
| 182 | + 0x0bcf0ee4, 0x9dff0993, 0x27ae000a, 0xb19e077d, 0x44930ff0, | |
| 183 | + 0xd2a30887, 0x68f2011e, 0xfec20669, 0x5d5762f7, 0xcb676580, | |
| 184 | + 0x71366c19, 0xe7066b6e, 0x761bd4fe, 0xe02bd389, 0x5a7ada10, | |
| 185 | + 0xcc4add67, 0x6fdfb9f9, 0xf9efbe8e, 0x43beb717, 0xd58eb060, | |
| 186 | + 0xe8a3d6d6, 0x7e93d1a1, 0xc4c2d838, 0x52f2df4f, 0xf167bbd1, | |
| 187 | + 0x6757bca6, 0xdd06b53f, 0x4b36b248, 0xda2b0dd8, 0x4c1b0aaf, | |
| 188 | + 0xf64a0336, 0x607a0441, 0xc3ef60df, 0x55df67a8, 0xef8e6e31, | |
| 189 | + 0x79be6946, 0x8cb361cb, 0x1a8366bc, 0xa0d26f25, 0x36e26852, | |
| 190 | + 0x95770ccc, 0x03470bbb, 0xb9160222, 0x2f260555, 0xbe3bbac5, | |
| 191 | + 0x280bbdb2, 0x925ab42b, 0x046ab35c, 0xa7ffd7c2, 0x31cfd0b5, | |
| 192 | + 0x8b9ed92c, 0x1daede5b, 0xb0c2649b, 0x26f263ec, 0x9ca36a75, | |
| 193 | + 0x0a936d02, 0xa906099c, 0x3f360eeb, 0x85670772, 0x13570005, | |
| 194 | + 0x824abf95, 0x147ab8e2, 0xae2bb17b, 0x381bb60c, 0x9b8ed292, | |
| 195 | + 0x0dbed5e5, 0xb7efdc7c, 0x21dfdb0b, 0xd4d2d386, 0x42e2d4f1, | |
| 196 | + 0xf8b3dd68, 0x6e83da1f, 0xcd16be81, 0x5b26b9f6, 0xe177b06f, | |
| 197 | + 0x7747b718, 0xe65a0888, 0x706a0fff, 0xca3b0666, 0x5c0b0111, | |
| 198 | + 0xff9e658f, 0x69ae62f8, 0xd3ff6b61, 0x45cf6c16, 0x78e20aa0, | |
| 199 | + 0xeed20dd7, 0x5483044e, 0xc2b30339, 0x612667a7, 0xf71660d0, | |
| 200 | + 0x4d476949, 0xdb776e3e, 0x4a6ad1ae, 0xdc5ad6d9, 0x660bdf40, | |
| 201 | + 0xf03bd837, 0x53aebca9, 0xc59ebbde, 0x7fcfb247, 0xe9ffb530, | |
| 202 | + 0x1cf2bdbd, 0x8ac2baca, 0x3093b353, 0xa6a3b424, 0x0536d0ba, | |
| 203 | + 0x9306d7cd, 0x2957de54, 0xbf67d923, 0x2e7a66b3, 0xb84a61c4, | |
| 204 | + 0x021b685d, 0x942b6f2a, 0x37be0bb4, 0xa18e0cc3, 0x1bdf055a, | |
| 205 | + 0x8def022d}; | |
| 206 | + | |
| 207 | +#endif | |
| 208 | + | |
| 209 | +#if N == 1 | |
| 210 | + | |
| 211 | +#if W == 8 | |
| 212 | + | |
| 213 | +local const z_crc_t FAR crc_braid_table[][256] = { | |
| 214 | + {0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa, | |
| 215 | + 0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b, | |
| 216 | + 0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232, | |
| 217 | + 0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8, | |
| 218 | + 0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e, | |
| 219 | + 0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa, | |
| 220 | + 0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b, | |
| 221 | + 0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f, | |
| 222 | + 0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719, | |
| 223 | + 0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d, 0x496753e3, | |
| 224 | + 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa, | |
| 225 | + 0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b, | |
| 226 | + 0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed, | |
| 227 | + 0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89, | |
| 228 | + 0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25, | |
| 229 | + 0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041, | |
| 230 | + 0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c, | |
| 231 | + 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed, | |
| 232 | + 0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4, | |
| 233 | + 0x8c06e16a, 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758, | |
| 234 | + 0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e, | |
| 235 | + 0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a, | |
| 236 | + 0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, 0xee7596ed, | |
| 237 | + 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889, | |
| 238 | + 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df, | |
| 239 | + 0x37558441, 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544, | |
| 240 | + 0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d, | |
| 241 | + 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c, | |
| 242 | + 0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1, | |
| 243 | + 0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95, | |
| 244 | + 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839, | |
| 245 | + 0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d, | |
| 246 | + 0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976, | |
| 247 | + 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7, | |
| 248 | + 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be, | |
| 249 | + 0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144, | |
| 250 | + 0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12, | |
| 251 | + 0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376, | |
| 252 | + 0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a, | |
| 253 | + 0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e, | |
| 254 | + 0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278, | |
| 255 | + 0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682, | |
| 256 | + 0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b, | |
| 257 | + 0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a, | |
| 258 | + 0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0, 0x83d02561, | |
| 259 | + 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05, | |
| 260 | + 0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9, | |
| 261 | + 0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd, | |
| 262 | + 0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0, | |
| 263 | + 0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61, | |
| 264 | + 0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678, | |
| 265 | + 0x264b06e6}, | |
| 266 | + {0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413, | |
| 267 | + 0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3, | |
| 268 | + 0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d, | |
| 269 | + 0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653, | |
| 270 | + 0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9, | |
| 271 | + 0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e, | |
| 272 | + 0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5, | |
| 273 | + 0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712, | |
| 274 | + 0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8, | |
| 275 | + 0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552, 0x0e14aee6, | |
| 276 | + 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068, | |
| 277 | + 0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8, | |
| 278 | + 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579, | |
| 279 | + 0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade, | |
| 280 | + 0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37, | |
| 281 | + 0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590, | |
| 282 | + 0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4, | |
| 283 | + 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64, | |
| 284 | + 0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea, | |
| 285 | + 0xd59d995e, 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678, | |
| 286 | + 0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282, | |
| 287 | + 0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25, | |
| 288 | + 0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, 0x7bf7c102, | |
| 289 | + 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5, | |
| 290 | + 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f, | |
| 291 | + 0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146, | |
| 292 | + 0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8, | |
| 293 | + 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08, | |
| 294 | + 0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c, | |
| 295 | + 0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b, | |
| 296 | + 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972, | |
| 297 | + 0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5, | |
| 298 | + 0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d, | |
| 299 | + 0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd, | |
| 300 | + 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833, | |
| 301 | + 0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d, | |
| 302 | + 0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7, | |
| 303 | + 0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60, | |
| 304 | + 0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2, | |
| 305 | + 0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105, | |
| 306 | + 0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff, | |
| 307 | + 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1, | |
| 308 | + 0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f, | |
| 309 | + 0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf, | |
| 310 | + 0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac, 0x03a0a617, | |
| 311 | + 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0, | |
| 312 | + 0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959, | |
| 313 | + 0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe, | |
| 314 | + 0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca, | |
| 315 | + 0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a, | |
| 316 | + 0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184, | |
| 317 | + 0x92364a30}, | |
| 318 | + {0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216, | |
| 319 | + 0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8, | |
| 320 | + 0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170, | |
| 321 | + 0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035, | |
| 322 | + 0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6, | |
| 323 | + 0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145, | |
| 324 | + 0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d, | |
| 325 | + 0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e, | |
| 326 | + 0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d, | |
| 327 | + 0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad, 0xcf26d408, | |
| 328 | + 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0, | |
| 329 | + 0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e, | |
| 330 | + 0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c, | |
| 331 | + 0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf, | |
| 332 | + 0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a, | |
| 333 | + 0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9, | |
| 334 | + 0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1, | |
| 335 | + 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f, | |
| 336 | + 0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987, | |
| 337 | + 0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4, | |
| 338 | + 0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37, | |
| 339 | + 0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84, | |
| 340 | + 0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, 0x46eaacca, | |
| 341 | + 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79, | |
| 342 | + 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba, | |
| 343 | + 0xb7bc1e1f, 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d, | |
| 344 | + 0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5, | |
| 345 | + 0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b, | |
| 346 | + 0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643, | |
| 347 | + 0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0, | |
| 348 | + 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525, | |
| 349 | + 0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496, | |
| 350 | + 0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8, | |
| 351 | + 0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026, | |
| 352 | + 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e, | |
| 353 | + 0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db, | |
| 354 | + 0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118, | |
| 355 | + 0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab, | |
| 356 | + 0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf, | |
| 357 | + 0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c, | |
| 358 | + 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf, | |
| 359 | + 0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a, | |
| 360 | + 0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32, | |
| 361 | + 0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec, | |
| 362 | + 0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa, 0x16441b82, | |
| 363 | + 0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31, | |
| 364 | + 0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4, | |
| 365 | + 0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957, | |
| 366 | + 0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f, | |
| 367 | + 0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1, | |
| 368 | + 0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869, | |
| 369 | + 0xe4c4abcc}, | |
| 370 | + {0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0, | |
| 371 | + 0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271, | |
| 372 | + 0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61, | |
| 373 | + 0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52, | |
| 374 | + 0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43, | |
| 375 | + 0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333, | |
| 376 | + 0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64, | |
| 377 | + 0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314, | |
| 378 | + 0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205, | |
| 379 | + 0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886, 0x9c419136, | |
| 380 | + 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26, | |
| 381 | + 0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997, | |
| 382 | + 0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849, | |
| 383 | + 0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739, | |
| 384 | + 0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8, | |
| 385 | + 0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98, | |
| 386 | + 0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b, | |
| 387 | + 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba, | |
| 388 | + 0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa, | |
| 389 | + 0xba43581a, 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d, | |
| 390 | + 0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c, | |
| 391 | + 0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc, | |
| 392 | + 0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af, | |
| 393 | + 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf, | |
| 394 | + 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce, | |
| 395 | + 0x0142247e, 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922, | |
| 396 | + 0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532, | |
| 397 | + 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183, | |
| 398 | + 0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710, | |
| 399 | + 0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860, | |
| 400 | + 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1, | |
| 401 | + 0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1, | |
| 402 | + 0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956, | |
| 403 | + 0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7, | |
| 404 | + 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7, | |
| 405 | + 0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4, | |
| 406 | + 0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5, | |
| 407 | + 0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5, | |
| 408 | + 0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb, | |
| 409 | + 0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb, | |
| 410 | + 0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da, | |
| 411 | + 0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9, | |
| 412 | + 0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9, | |
| 413 | + 0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48, | |
| 414 | + 0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888, 0x28d4c7df, | |
| 415 | + 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af, | |
| 416 | + 0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e, | |
| 417 | + 0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e, | |
| 418 | + 0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d, | |
| 419 | + 0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c, | |
| 420 | + 0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c, | |
| 421 | + 0xca64c78c}, | |
| 422 | + {0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757, | |
| 423 | + 0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a, | |
| 424 | + 0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733, | |
| 425 | + 0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871, | |
| 426 | + 0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70, | |
| 427 | + 0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42, | |
| 428 | + 0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5, | |
| 429 | + 0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787, | |
| 430 | + 0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086, | |
| 431 | + 0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1, 0x48979fc4, | |
| 432 | + 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d, | |
| 433 | + 0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0, | |
| 434 | + 0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d, | |
| 435 | + 0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f, | |
| 436 | + 0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859, | |
| 437 | + 0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b, | |
| 438 | + 0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5, | |
| 439 | + 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028, | |
| 440 | + 0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891, | |
| 441 | + 0x936e1ff4, 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed, | |
| 442 | + 0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec, | |
| 443 | + 0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde, | |
| 444 | + 0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, 0xc1366817, | |
| 445 | + 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825, | |
| 446 | + 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24, | |
| 447 | + 0x99557841, 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e, | |
| 448 | + 0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7, | |
| 449 | + 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a, | |
| 450 | + 0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4, | |
| 451 | + 0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196, | |
| 452 | + 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0, | |
| 453 | + 0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2, | |
| 454 | + 0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52, | |
| 455 | + 0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f, | |
| 456 | + 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36, | |
| 457 | + 0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174, | |
| 458 | + 0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675, | |
| 459 | + 0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647, | |
| 460 | + 0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d, | |
| 461 | + 0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf, | |
| 462 | + 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be, | |
| 463 | + 0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc, | |
| 464 | + 0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645, | |
| 465 | + 0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98, | |
| 466 | + 0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf, 0xd67f4138, | |
| 467 | + 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a, | |
| 468 | + 0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c, | |
| 469 | + 0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e, | |
| 470 | + 0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0, | |
| 471 | + 0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d, | |
| 472 | + 0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194, | |
| 473 | + 0xde0506f1}, | |
| 474 | + {0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc, | |
| 475 | + 0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f, | |
| 476 | + 0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a, | |
| 477 | + 0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29, | |
| 478 | + 0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8, | |
| 479 | + 0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023, | |
| 480 | + 0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e, | |
| 481 | + 0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065, | |
| 482 | + 0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84, | |
| 483 | + 0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590, 0x25a98fa7, | |
| 484 | + 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922, | |
| 485 | + 0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71, | |
| 486 | + 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0, | |
| 487 | + 0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b, | |
| 488 | + 0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816, | |
| 489 | + 0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd, | |
| 490 | + 0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c, | |
| 491 | + 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f, | |
| 492 | + 0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba, | |
| 493 | + 0x67e0698d, 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579, | |
| 494 | + 0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98, | |
| 495 | + 0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873, | |
| 496 | + 0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, 0x5775bc3e, | |
| 497 | + 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5, | |
| 498 | + 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134, | |
| 499 | + 0x5c29fb03, 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7, | |
| 500 | + 0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732, | |
| 501 | + 0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461, | |
| 502 | + 0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0, | |
| 503 | + 0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b, | |
| 504 | + 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26, | |
| 505 | + 0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd, | |
| 506 | + 0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc, | |
| 507 | + 0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef, | |
| 508 | + 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a, | |
| 509 | + 0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049, | |
| 510 | + 0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8, | |
| 511 | + 0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43, | |
| 512 | + 0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e, | |
| 513 | + 0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5, | |
| 514 | + 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24, | |
| 515 | + 0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07, | |
| 516 | + 0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982, | |
| 517 | + 0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1, | |
| 518 | + 0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d, 0xa9e2d0a0, | |
| 519 | + 0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b, | |
| 520 | + 0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576, | |
| 521 | + 0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d, | |
| 522 | + 0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c, | |
| 523 | + 0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f, | |
| 524 | + 0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda, | |
| 525 | + 0xbe9834ed}, | |
| 526 | + {0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504, | |
| 527 | + 0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49, | |
| 528 | + 0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e, | |
| 529 | + 0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192, | |
| 530 | + 0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859, | |
| 531 | + 0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c, | |
| 532 | + 0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620, | |
| 533 | + 0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265, | |
| 534 | + 0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae, | |
| 535 | + 0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3, 0xc65d07b2, | |
| 536 | + 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175, | |
| 537 | + 0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38, | |
| 538 | + 0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05, | |
| 539 | + 0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40, | |
| 540 | + 0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f, | |
| 541 | + 0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca, | |
| 542 | + 0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850, | |
| 543 | + 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d, | |
| 544 | + 0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da, | |
| 545 | + 0x3d23419b, 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864, | |
| 546 | + 0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af, | |
| 547 | + 0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea, | |
| 548 | + 0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, 0x1d091b74, | |
| 549 | + 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31, | |
| 550 | + 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa, | |
| 551 | + 0x9a9107bb, 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a, | |
| 552 | + 0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd, | |
| 553 | + 0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180, | |
| 554 | + 0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a, | |
| 555 | + 0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f, | |
| 556 | + 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290, | |
| 557 | + 0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5, | |
| 558 | + 0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed, | |
| 559 | + 0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0, | |
| 560 | + 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167, | |
| 561 | + 0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b, | |
| 562 | + 0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0, | |
| 563 | + 0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5, | |
| 564 | + 0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc, | |
| 565 | + 0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189, | |
| 566 | + 0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842, | |
| 567 | + 0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e, | |
| 568 | + 0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299, | |
| 569 | + 0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4, | |
| 570 | + 0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec, | |
| 571 | + 0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9, | |
| 572 | + 0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66, | |
| 573 | + 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23, | |
| 574 | + 0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9, | |
| 575 | + 0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4, | |
| 576 | + 0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33, | |
| 577 | + 0x9324fd72}, | |
| 578 | + {0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, | |
| 579 | + 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, | |
| 580 | + 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, | |
| 581 | + 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, | |
| 582 | + 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, | |
| 583 | + 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, | |
| 584 | + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, | |
| 585 | + 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, | |
| 586 | + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, | |
| 587 | + 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, | |
| 588 | + 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, | |
| 589 | + 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, | |
| 590 | + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, | |
| 591 | + 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, | |
| 592 | + 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, | |
| 593 | + 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, | |
| 594 | + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, | |
| 595 | + 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, | |
| 596 | + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, | |
| 597 | + 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, | |
| 598 | + 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, | |
| 599 | + 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, | |
| 600 | + 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, | |
| 601 | + 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, | |
| 602 | + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, | |
| 603 | + 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, | |
| 604 | + 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, | |
| 605 | + 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, | |
| 606 | + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, | |
| 607 | + 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, | |
| 608 | + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, | |
| 609 | + 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, | |
| 610 | + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, | |
| 611 | + 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, | |
| 612 | + 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, | |
| 613 | + 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, | |
| 614 | + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, | |
| 615 | + 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, | |
| 616 | + 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, | |
| 617 | + 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, | |
| 618 | + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, | |
| 619 | + 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, | |
| 620 | + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, | |
| 621 | + 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, | |
| 622 | + 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, | |
| 623 | + 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, | |
| 624 | + 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, | |
| 625 | + 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, | |
| 626 | + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, | |
| 627 | + 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, | |
| 628 | + 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, | |
| 629 | + 0x2d02ef8d}}; | |
| 630 | + | |
| 631 | +local const z_word_t FAR crc_braid_big_table[][256] = { | |
| 632 | + {0x0000000000000000, 0x9630077700000000, 0x2c610eee00000000, | |
| 633 | + 0xba51099900000000, 0x19c46d0700000000, 0x8ff46a7000000000, | |
| 634 | + 0x35a563e900000000, 0xa395649e00000000, 0x3288db0e00000000, | |
| 635 | + 0xa4b8dc7900000000, 0x1ee9d5e000000000, 0x88d9d29700000000, | |
| 636 | + 0x2b4cb60900000000, 0xbd7cb17e00000000, 0x072db8e700000000, | |
| 637 | + 0x911dbf9000000000, 0x6410b71d00000000, 0xf220b06a00000000, | |
| 638 | + 0x4871b9f300000000, 0xde41be8400000000, 0x7dd4da1a00000000, | |
| 639 | + 0xebe4dd6d00000000, 0x51b5d4f400000000, 0xc785d38300000000, | |
| 640 | + 0x56986c1300000000, 0xc0a86b6400000000, 0x7af962fd00000000, | |
| 641 | + 0xecc9658a00000000, 0x4f5c011400000000, 0xd96c066300000000, | |
| 642 | + 0x633d0ffa00000000, 0xf50d088d00000000, 0xc8206e3b00000000, | |
| 643 | + 0x5e10694c00000000, 0xe44160d500000000, 0x727167a200000000, | |
| 644 | + 0xd1e4033c00000000, 0x47d4044b00000000, 0xfd850dd200000000, | |
| 645 | + 0x6bb50aa500000000, 0xfaa8b53500000000, 0x6c98b24200000000, | |
| 646 | + 0xd6c9bbdb00000000, 0x40f9bcac00000000, 0xe36cd83200000000, | |
| 647 | + 0x755cdf4500000000, 0xcf0dd6dc00000000, 0x593dd1ab00000000, | |
| 648 | + 0xac30d92600000000, 0x3a00de5100000000, 0x8051d7c800000000, | |
| 649 | + 0x1661d0bf00000000, 0xb5f4b42100000000, 0x23c4b35600000000, | |
| 650 | + 0x9995bacf00000000, 0x0fa5bdb800000000, 0x9eb8022800000000, | |
| 651 | + 0x0888055f00000000, 0xb2d90cc600000000, 0x24e90bb100000000, | |
| 652 | + 0x877c6f2f00000000, 0x114c685800000000, 0xab1d61c100000000, | |
| 653 | + 0x3d2d66b600000000, 0x9041dc7600000000, 0x0671db0100000000, | |
| 654 | + 0xbc20d29800000000, 0x2a10d5ef00000000, 0x8985b17100000000, | |
| 655 | + 0x1fb5b60600000000, 0xa5e4bf9f00000000, 0x33d4b8e800000000, | |
| 656 | + 0xa2c9077800000000, 0x34f9000f00000000, 0x8ea8099600000000, | |
| 657 | + 0x18980ee100000000, 0xbb0d6a7f00000000, 0x2d3d6d0800000000, | |
| 658 | + 0x976c649100000000, 0x015c63e600000000, 0xf4516b6b00000000, | |
| 659 | + 0x62616c1c00000000, 0xd830658500000000, 0x4e0062f200000000, | |
| 660 | + 0xed95066c00000000, 0x7ba5011b00000000, 0xc1f4088200000000, | |
| 661 | + 0x57c40ff500000000, 0xc6d9b06500000000, 0x50e9b71200000000, | |
| 662 | + 0xeab8be8b00000000, 0x7c88b9fc00000000, 0xdf1ddd6200000000, | |
| 663 | + 0x492dda1500000000, 0xf37cd38c00000000, 0x654cd4fb00000000, | |
| 664 | + 0x5861b24d00000000, 0xce51b53a00000000, 0x7400bca300000000, | |
| 665 | + 0xe230bbd400000000, 0x41a5df4a00000000, 0xd795d83d00000000, | |
| 666 | + 0x6dc4d1a400000000, 0xfbf4d6d300000000, 0x6ae9694300000000, | |
| 667 | + 0xfcd96e3400000000, 0x468867ad00000000, 0xd0b860da00000000, | |
| 668 | + 0x732d044400000000, 0xe51d033300000000, 0x5f4c0aaa00000000, | |
| 669 | + 0xc97c0ddd00000000, 0x3c71055000000000, 0xaa41022700000000, | |
| 670 | + 0x10100bbe00000000, 0x86200cc900000000, 0x25b5685700000000, | |
| 671 | + 0xb3856f2000000000, 0x09d466b900000000, 0x9fe461ce00000000, | |
| 672 | + 0x0ef9de5e00000000, 0x98c9d92900000000, 0x2298d0b000000000, | |
| 673 | + 0xb4a8d7c700000000, 0x173db35900000000, 0x810db42e00000000, | |
| 674 | + 0x3b5cbdb700000000, 0xad6cbac000000000, 0x2083b8ed00000000, | |
| 675 | + 0xb6b3bf9a00000000, 0x0ce2b60300000000, 0x9ad2b17400000000, | |
| 676 | + 0x3947d5ea00000000, 0xaf77d29d00000000, 0x1526db0400000000, | |
| 677 | + 0x8316dc7300000000, 0x120b63e300000000, 0x843b649400000000, | |
| 678 | + 0x3e6a6d0d00000000, 0xa85a6a7a00000000, 0x0bcf0ee400000000, | |
| 679 | + 0x9dff099300000000, 0x27ae000a00000000, 0xb19e077d00000000, | |
| 680 | + 0x44930ff000000000, 0xd2a3088700000000, 0x68f2011e00000000, | |
| 681 | + 0xfec2066900000000, 0x5d5762f700000000, 0xcb67658000000000, | |
| 682 | + 0x71366c1900000000, 0xe7066b6e00000000, 0x761bd4fe00000000, | |
| 683 | + 0xe02bd38900000000, 0x5a7ada1000000000, 0xcc4add6700000000, | |
| 684 | + 0x6fdfb9f900000000, 0xf9efbe8e00000000, 0x43beb71700000000, | |
| 685 | + 0xd58eb06000000000, 0xe8a3d6d600000000, 0x7e93d1a100000000, | |
| 686 | + 0xc4c2d83800000000, 0x52f2df4f00000000, 0xf167bbd100000000, | |
| 687 | + 0x6757bca600000000, 0xdd06b53f00000000, 0x4b36b24800000000, | |
| 688 | + 0xda2b0dd800000000, 0x4c1b0aaf00000000, 0xf64a033600000000, | |
| 689 | + 0x607a044100000000, 0xc3ef60df00000000, 0x55df67a800000000, | |
| 690 | + 0xef8e6e3100000000, 0x79be694600000000, 0x8cb361cb00000000, | |
| 691 | + 0x1a8366bc00000000, 0xa0d26f2500000000, 0x36e2685200000000, | |
| 692 | + 0x95770ccc00000000, 0x03470bbb00000000, 0xb916022200000000, | |
| 693 | + 0x2f26055500000000, 0xbe3bbac500000000, 0x280bbdb200000000, | |
| 694 | + 0x925ab42b00000000, 0x046ab35c00000000, 0xa7ffd7c200000000, | |
| 695 | + 0x31cfd0b500000000, 0x8b9ed92c00000000, 0x1daede5b00000000, | |
| 696 | + 0xb0c2649b00000000, 0x26f263ec00000000, 0x9ca36a7500000000, | |
| 697 | + 0x0a936d0200000000, 0xa906099c00000000, 0x3f360eeb00000000, | |
| 698 | + 0x8567077200000000, 0x1357000500000000, 0x824abf9500000000, | |
| 699 | + 0x147ab8e200000000, 0xae2bb17b00000000, 0x381bb60c00000000, | |
| 700 | + 0x9b8ed29200000000, 0x0dbed5e500000000, 0xb7efdc7c00000000, | |
| 701 | + 0x21dfdb0b00000000, 0xd4d2d38600000000, 0x42e2d4f100000000, | |
| 702 | + 0xf8b3dd6800000000, 0x6e83da1f00000000, 0xcd16be8100000000, | |
| 703 | + 0x5b26b9f600000000, 0xe177b06f00000000, 0x7747b71800000000, | |
| 704 | + 0xe65a088800000000, 0x706a0fff00000000, 0xca3b066600000000, | |
| 705 | + 0x5c0b011100000000, 0xff9e658f00000000, 0x69ae62f800000000, | |
| 706 | + 0xd3ff6b6100000000, 0x45cf6c1600000000, 0x78e20aa000000000, | |
| 707 | + 0xeed20dd700000000, 0x5483044e00000000, 0xc2b3033900000000, | |
| 708 | + 0x612667a700000000, 0xf71660d000000000, 0x4d47694900000000, | |
| 709 | + 0xdb776e3e00000000, 0x4a6ad1ae00000000, 0xdc5ad6d900000000, | |
| 710 | + 0x660bdf4000000000, 0xf03bd83700000000, 0x53aebca900000000, | |
| 711 | + 0xc59ebbde00000000, 0x7fcfb24700000000, 0xe9ffb53000000000, | |
| 712 | + 0x1cf2bdbd00000000, 0x8ac2baca00000000, 0x3093b35300000000, | |
| 713 | + 0xa6a3b42400000000, 0x0536d0ba00000000, 0x9306d7cd00000000, | |
| 714 | + 0x2957de5400000000, 0xbf67d92300000000, 0x2e7a66b300000000, | |
| 715 | + 0xb84a61c400000000, 0x021b685d00000000, 0x942b6f2a00000000, | |
| 716 | + 0x37be0bb400000000, 0xa18e0cc300000000, 0x1bdf055a00000000, | |
| 717 | + 0x8def022d00000000}, | |
| 718 | + {0x0000000000000000, 0x41311b1900000000, 0x8262363200000000, | |
| 719 | + 0xc3532d2b00000000, 0x04c56c6400000000, 0x45f4777d00000000, | |
| 720 | + 0x86a75a5600000000, 0xc796414f00000000, 0x088ad9c800000000, | |
| 721 | + 0x49bbc2d100000000, 0x8ae8effa00000000, 0xcbd9f4e300000000, | |
| 722 | + 0x0c4fb5ac00000000, 0x4d7eaeb500000000, 0x8e2d839e00000000, | |
| 723 | + 0xcf1c988700000000, 0x5112c24a00000000, 0x1023d95300000000, | |
| 724 | + 0xd370f47800000000, 0x9241ef6100000000, 0x55d7ae2e00000000, | |
| 725 | + 0x14e6b53700000000, 0xd7b5981c00000000, 0x9684830500000000, | |
| 726 | + 0x59981b8200000000, 0x18a9009b00000000, 0xdbfa2db000000000, | |
| 727 | + 0x9acb36a900000000, 0x5d5d77e600000000, 0x1c6c6cff00000000, | |
| 728 | + 0xdf3f41d400000000, 0x9e0e5acd00000000, 0xa224849500000000, | |
| 729 | + 0xe3159f8c00000000, 0x2046b2a700000000, 0x6177a9be00000000, | |
| 730 | + 0xa6e1e8f100000000, 0xe7d0f3e800000000, 0x2483dec300000000, | |
| 731 | + 0x65b2c5da00000000, 0xaaae5d5d00000000, 0xeb9f464400000000, | |
| 732 | + 0x28cc6b6f00000000, 0x69fd707600000000, 0xae6b313900000000, | |
| 733 | + 0xef5a2a2000000000, 0x2c09070b00000000, 0x6d381c1200000000, | |
| 734 | + 0xf33646df00000000, 0xb2075dc600000000, 0x715470ed00000000, | |
| 735 | + 0x30656bf400000000, 0xf7f32abb00000000, 0xb6c231a200000000, | |
| 736 | + 0x75911c8900000000, 0x34a0079000000000, 0xfbbc9f1700000000, | |
| 737 | + 0xba8d840e00000000, 0x79dea92500000000, 0x38efb23c00000000, | |
| 738 | + 0xff79f37300000000, 0xbe48e86a00000000, 0x7d1bc54100000000, | |
| 739 | + 0x3c2ade5800000000, 0x054f79f000000000, 0x447e62e900000000, | |
| 740 | + 0x872d4fc200000000, 0xc61c54db00000000, 0x018a159400000000, | |
| 741 | + 0x40bb0e8d00000000, 0x83e823a600000000, 0xc2d938bf00000000, | |
| 742 | + 0x0dc5a03800000000, 0x4cf4bb2100000000, 0x8fa7960a00000000, | |
| 743 | + 0xce968d1300000000, 0x0900cc5c00000000, 0x4831d74500000000, | |
| 744 | + 0x8b62fa6e00000000, 0xca53e17700000000, 0x545dbbba00000000, | |
| 745 | + 0x156ca0a300000000, 0xd63f8d8800000000, 0x970e969100000000, | |
| 746 | + 0x5098d7de00000000, 0x11a9ccc700000000, 0xd2fae1ec00000000, | |
| 747 | + 0x93cbfaf500000000, 0x5cd7627200000000, 0x1de6796b00000000, | |
| 748 | + 0xdeb5544000000000, 0x9f844f5900000000, 0x58120e1600000000, | |
| 749 | + 0x1923150f00000000, 0xda70382400000000, 0x9b41233d00000000, | |
| 750 | + 0xa76bfd6500000000, 0xe65ae67c00000000, 0x2509cb5700000000, | |
| 751 | + 0x6438d04e00000000, 0xa3ae910100000000, 0xe29f8a1800000000, | |
| 752 | + 0x21cca73300000000, 0x60fdbc2a00000000, 0xafe124ad00000000, | |
| 753 | + 0xeed03fb400000000, 0x2d83129f00000000, 0x6cb2098600000000, | |
| 754 | + 0xab2448c900000000, 0xea1553d000000000, 0x29467efb00000000, | |
| 755 | + 0x687765e200000000, 0xf6793f2f00000000, 0xb748243600000000, | |
| 756 | + 0x741b091d00000000, 0x352a120400000000, 0xf2bc534b00000000, | |
| 757 | + 0xb38d485200000000, 0x70de657900000000, 0x31ef7e6000000000, | |
| 758 | + 0xfef3e6e700000000, 0xbfc2fdfe00000000, 0x7c91d0d500000000, | |
| 759 | + 0x3da0cbcc00000000, 0xfa368a8300000000, 0xbb07919a00000000, | |
| 760 | + 0x7854bcb100000000, 0x3965a7a800000000, 0x4b98833b00000000, | |
| 761 | + 0x0aa9982200000000, 0xc9fab50900000000, 0x88cbae1000000000, | |
| 762 | + 0x4f5def5f00000000, 0x0e6cf44600000000, 0xcd3fd96d00000000, | |
| 763 | + 0x8c0ec27400000000, 0x43125af300000000, 0x022341ea00000000, | |
| 764 | + 0xc1706cc100000000, 0x804177d800000000, 0x47d7369700000000, | |
| 765 | + 0x06e62d8e00000000, 0xc5b500a500000000, 0x84841bbc00000000, | |
| 766 | + 0x1a8a417100000000, 0x5bbb5a6800000000, 0x98e8774300000000, | |
| 767 | + 0xd9d96c5a00000000, 0x1e4f2d1500000000, 0x5f7e360c00000000, | |
| 768 | + 0x9c2d1b2700000000, 0xdd1c003e00000000, 0x120098b900000000, | |
| 769 | + 0x533183a000000000, 0x9062ae8b00000000, 0xd153b59200000000, | |
| 770 | + 0x16c5f4dd00000000, 0x57f4efc400000000, 0x94a7c2ef00000000, | |
| 771 | + 0xd596d9f600000000, 0xe9bc07ae00000000, 0xa88d1cb700000000, | |
| 772 | + 0x6bde319c00000000, 0x2aef2a8500000000, 0xed796bca00000000, | |
| 773 | + 0xac4870d300000000, 0x6f1b5df800000000, 0x2e2a46e100000000, | |
| 774 | + 0xe136de6600000000, 0xa007c57f00000000, 0x6354e85400000000, | |
| 775 | + 0x2265f34d00000000, 0xe5f3b20200000000, 0xa4c2a91b00000000, | |
| 776 | + 0x6791843000000000, 0x26a09f2900000000, 0xb8aec5e400000000, | |
| 777 | + 0xf99fdefd00000000, 0x3accf3d600000000, 0x7bfde8cf00000000, | |
| 778 | + 0xbc6ba98000000000, 0xfd5ab29900000000, 0x3e099fb200000000, | |
| 779 | + 0x7f3884ab00000000, 0xb0241c2c00000000, 0xf115073500000000, | |
| 780 | + 0x32462a1e00000000, 0x7377310700000000, 0xb4e1704800000000, | |
| 781 | + 0xf5d06b5100000000, 0x3683467a00000000, 0x77b25d6300000000, | |
| 782 | + 0x4ed7facb00000000, 0x0fe6e1d200000000, 0xccb5ccf900000000, | |
| 783 | + 0x8d84d7e000000000, 0x4a1296af00000000, 0x0b238db600000000, | |
| 784 | + 0xc870a09d00000000, 0x8941bb8400000000, 0x465d230300000000, | |
| 785 | + 0x076c381a00000000, 0xc43f153100000000, 0x850e0e2800000000, | |
| 786 | + 0x42984f6700000000, 0x03a9547e00000000, 0xc0fa795500000000, | |
| 787 | + 0x81cb624c00000000, 0x1fc5388100000000, 0x5ef4239800000000, | |
| 788 | + 0x9da70eb300000000, 0xdc9615aa00000000, 0x1b0054e500000000, | |
| 789 | + 0x5a314ffc00000000, 0x996262d700000000, 0xd85379ce00000000, | |
| 790 | + 0x174fe14900000000, 0x567efa5000000000, 0x952dd77b00000000, | |
| 791 | + 0xd41ccc6200000000, 0x138a8d2d00000000, 0x52bb963400000000, | |
| 792 | + 0x91e8bb1f00000000, 0xd0d9a00600000000, 0xecf37e5e00000000, | |
| 793 | + 0xadc2654700000000, 0x6e91486c00000000, 0x2fa0537500000000, | |
| 794 | + 0xe836123a00000000, 0xa907092300000000, 0x6a54240800000000, | |
| 795 | + 0x2b653f1100000000, 0xe479a79600000000, 0xa548bc8f00000000, | |
| 796 | + 0x661b91a400000000, 0x272a8abd00000000, 0xe0bccbf200000000, | |
| 797 | + 0xa18dd0eb00000000, 0x62defdc000000000, 0x23efe6d900000000, | |
| 798 | + 0xbde1bc1400000000, 0xfcd0a70d00000000, 0x3f838a2600000000, | |
| 799 | + 0x7eb2913f00000000, 0xb924d07000000000, 0xf815cb6900000000, | |
| 800 | + 0x3b46e64200000000, 0x7a77fd5b00000000, 0xb56b65dc00000000, | |
| 801 | + 0xf45a7ec500000000, 0x370953ee00000000, 0x763848f700000000, | |
| 802 | + 0xb1ae09b800000000, 0xf09f12a100000000, 0x33cc3f8a00000000, | |
| 803 | + 0x72fd249300000000}, | |
| 804 | + {0x0000000000000000, 0x376ac20100000000, 0x6ed4840300000000, | |
| 805 | + 0x59be460200000000, 0xdca8090700000000, 0xebc2cb0600000000, | |
| 806 | + 0xb27c8d0400000000, 0x85164f0500000000, 0xb851130e00000000, | |
| 807 | + 0x8f3bd10f00000000, 0xd685970d00000000, 0xe1ef550c00000000, | |
| 808 | + 0x64f91a0900000000, 0x5393d80800000000, 0x0a2d9e0a00000000, | |
| 809 | + 0x3d475c0b00000000, 0x70a3261c00000000, 0x47c9e41d00000000, | |
| 810 | + 0x1e77a21f00000000, 0x291d601e00000000, 0xac0b2f1b00000000, | |
| 811 | + 0x9b61ed1a00000000, 0xc2dfab1800000000, 0xf5b5691900000000, | |
| 812 | + 0xc8f2351200000000, 0xff98f71300000000, 0xa626b11100000000, | |
| 813 | + 0x914c731000000000, 0x145a3c1500000000, 0x2330fe1400000000, | |
| 814 | + 0x7a8eb81600000000, 0x4de47a1700000000, 0xe0464d3800000000, | |
| 815 | + 0xd72c8f3900000000, 0x8e92c93b00000000, 0xb9f80b3a00000000, | |
| 816 | + 0x3cee443f00000000, 0x0b84863e00000000, 0x523ac03c00000000, | |
| 817 | + 0x6550023d00000000, 0x58175e3600000000, 0x6f7d9c3700000000, | |
| 818 | + 0x36c3da3500000000, 0x01a9183400000000, 0x84bf573100000000, | |
| 819 | + 0xb3d5953000000000, 0xea6bd33200000000, 0xdd01113300000000, | |
| 820 | + 0x90e56b2400000000, 0xa78fa92500000000, 0xfe31ef2700000000, | |
| 821 | + 0xc95b2d2600000000, 0x4c4d622300000000, 0x7b27a02200000000, | |
| 822 | + 0x2299e62000000000, 0x15f3242100000000, 0x28b4782a00000000, | |
| 823 | + 0x1fdeba2b00000000, 0x4660fc2900000000, 0x710a3e2800000000, | |
| 824 | + 0xf41c712d00000000, 0xc376b32c00000000, 0x9ac8f52e00000000, | |
| 825 | + 0xada2372f00000000, 0xc08d9a7000000000, 0xf7e7587100000000, | |
| 826 | + 0xae591e7300000000, 0x9933dc7200000000, 0x1c25937700000000, | |
| 827 | + 0x2b4f517600000000, 0x72f1177400000000, 0x459bd57500000000, | |
| 828 | + 0x78dc897e00000000, 0x4fb64b7f00000000, 0x16080d7d00000000, | |
| 829 | + 0x2162cf7c00000000, 0xa474807900000000, 0x931e427800000000, | |
| 830 | + 0xcaa0047a00000000, 0xfdcac67b00000000, 0xb02ebc6c00000000, | |
| 831 | + 0x87447e6d00000000, 0xdefa386f00000000, 0xe990fa6e00000000, | |
| 832 | + 0x6c86b56b00000000, 0x5bec776a00000000, 0x0252316800000000, | |
| 833 | + 0x3538f36900000000, 0x087faf6200000000, 0x3f156d6300000000, | |
| 834 | + 0x66ab2b6100000000, 0x51c1e96000000000, 0xd4d7a66500000000, | |
| 835 | + 0xe3bd646400000000, 0xba03226600000000, 0x8d69e06700000000, | |
| 836 | + 0x20cbd74800000000, 0x17a1154900000000, 0x4e1f534b00000000, | |
| 837 | + 0x7975914a00000000, 0xfc63de4f00000000, 0xcb091c4e00000000, | |
| 838 | + 0x92b75a4c00000000, 0xa5dd984d00000000, 0x989ac44600000000, | |
| 839 | + 0xaff0064700000000, 0xf64e404500000000, 0xc124824400000000, | |
| 840 | + 0x4432cd4100000000, 0x73580f4000000000, 0x2ae6494200000000, | |
| 841 | + 0x1d8c8b4300000000, 0x5068f15400000000, 0x6702335500000000, | |
| 842 | + 0x3ebc755700000000, 0x09d6b75600000000, 0x8cc0f85300000000, | |
| 843 | + 0xbbaa3a5200000000, 0xe2147c5000000000, 0xd57ebe5100000000, | |
| 844 | + 0xe839e25a00000000, 0xdf53205b00000000, 0x86ed665900000000, | |
| 845 | + 0xb187a45800000000, 0x3491eb5d00000000, 0x03fb295c00000000, | |
| 846 | + 0x5a456f5e00000000, 0x6d2fad5f00000000, 0x801b35e100000000, | |
| 847 | + 0xb771f7e000000000, 0xeecfb1e200000000, 0xd9a573e300000000, | |
| 848 | + 0x5cb33ce600000000, 0x6bd9fee700000000, 0x3267b8e500000000, | |
| 849 | + 0x050d7ae400000000, 0x384a26ef00000000, 0x0f20e4ee00000000, | |
| 850 | + 0x569ea2ec00000000, 0x61f460ed00000000, 0xe4e22fe800000000, | |
| 851 | + 0xd388ede900000000, 0x8a36abeb00000000, 0xbd5c69ea00000000, | |
| 852 | + 0xf0b813fd00000000, 0xc7d2d1fc00000000, 0x9e6c97fe00000000, | |
| 853 | + 0xa90655ff00000000, 0x2c101afa00000000, 0x1b7ad8fb00000000, | |
| 854 | + 0x42c49ef900000000, 0x75ae5cf800000000, 0x48e900f300000000, | |
| 855 | + 0x7f83c2f200000000, 0x263d84f000000000, 0x115746f100000000, | |
| 856 | + 0x944109f400000000, 0xa32bcbf500000000, 0xfa958df700000000, | |
| 857 | + 0xcdff4ff600000000, 0x605d78d900000000, 0x5737bad800000000, | |
| 858 | + 0x0e89fcda00000000, 0x39e33edb00000000, 0xbcf571de00000000, | |
| 859 | + 0x8b9fb3df00000000, 0xd221f5dd00000000, 0xe54b37dc00000000, | |
| 860 | + 0xd80c6bd700000000, 0xef66a9d600000000, 0xb6d8efd400000000, | |
| 861 | + 0x81b22dd500000000, 0x04a462d000000000, 0x33cea0d100000000, | |
| 862 | + 0x6a70e6d300000000, 0x5d1a24d200000000, 0x10fe5ec500000000, | |
| 863 | + 0x27949cc400000000, 0x7e2adac600000000, 0x494018c700000000, | |
| 864 | + 0xcc5657c200000000, 0xfb3c95c300000000, 0xa282d3c100000000, | |
| 865 | + 0x95e811c000000000, 0xa8af4dcb00000000, 0x9fc58fca00000000, | |
| 866 | + 0xc67bc9c800000000, 0xf1110bc900000000, 0x740744cc00000000, | |
| 867 | + 0x436d86cd00000000, 0x1ad3c0cf00000000, 0x2db902ce00000000, | |
| 868 | + 0x4096af9100000000, 0x77fc6d9000000000, 0x2e422b9200000000, | |
| 869 | + 0x1928e99300000000, 0x9c3ea69600000000, 0xab54649700000000, | |
| 870 | + 0xf2ea229500000000, 0xc580e09400000000, 0xf8c7bc9f00000000, | |
| 871 | + 0xcfad7e9e00000000, 0x9613389c00000000, 0xa179fa9d00000000, | |
| 872 | + 0x246fb59800000000, 0x1305779900000000, 0x4abb319b00000000, | |
| 873 | + 0x7dd1f39a00000000, 0x3035898d00000000, 0x075f4b8c00000000, | |
| 874 | + 0x5ee10d8e00000000, 0x698bcf8f00000000, 0xec9d808a00000000, | |
| 875 | + 0xdbf7428b00000000, 0x8249048900000000, 0xb523c68800000000, | |
| 876 | + 0x88649a8300000000, 0xbf0e588200000000, 0xe6b01e8000000000, | |
| 877 | + 0xd1dadc8100000000, 0x54cc938400000000, 0x63a6518500000000, | |
| 878 | + 0x3a18178700000000, 0x0d72d58600000000, 0xa0d0e2a900000000, | |
| 879 | + 0x97ba20a800000000, 0xce0466aa00000000, 0xf96ea4ab00000000, | |
| 880 | + 0x7c78ebae00000000, 0x4b1229af00000000, 0x12ac6fad00000000, | |
| 881 | + 0x25c6adac00000000, 0x1881f1a700000000, 0x2feb33a600000000, | |
| 882 | + 0x765575a400000000, 0x413fb7a500000000, 0xc429f8a000000000, | |
| 883 | + 0xf3433aa100000000, 0xaafd7ca300000000, 0x9d97bea200000000, | |
| 884 | + 0xd073c4b500000000, 0xe71906b400000000, 0xbea740b600000000, | |
| 885 | + 0x89cd82b700000000, 0x0cdbcdb200000000, 0x3bb10fb300000000, | |
| 886 | + 0x620f49b100000000, 0x55658bb000000000, 0x6822d7bb00000000, | |
| 887 | + 0x5f4815ba00000000, 0x06f653b800000000, 0x319c91b900000000, | |
| 888 | + 0xb48adebc00000000, 0x83e01cbd00000000, 0xda5e5abf00000000, | |
| 889 | + 0xed3498be00000000}, | |
| 890 | + {0x0000000000000000, 0x6567bcb800000000, 0x8bc809aa00000000, | |
| 891 | + 0xeeafb51200000000, 0x5797628f00000000, 0x32f0de3700000000, | |
| 892 | + 0xdc5f6b2500000000, 0xb938d79d00000000, 0xef28b4c500000000, | |
| 893 | + 0x8a4f087d00000000, 0x64e0bd6f00000000, 0x018701d700000000, | |
| 894 | + 0xb8bfd64a00000000, 0xddd86af200000000, 0x3377dfe000000000, | |
| 895 | + 0x5610635800000000, 0x9f57195000000000, 0xfa30a5e800000000, | |
| 896 | + 0x149f10fa00000000, 0x71f8ac4200000000, 0xc8c07bdf00000000, | |
| 897 | + 0xada7c76700000000, 0x4308727500000000, 0x266fcecd00000000, | |
| 898 | + 0x707fad9500000000, 0x1518112d00000000, 0xfbb7a43f00000000, | |
| 899 | + 0x9ed0188700000000, 0x27e8cf1a00000000, 0x428f73a200000000, | |
| 900 | + 0xac20c6b000000000, 0xc9477a0800000000, 0x3eaf32a000000000, | |
| 901 | + 0x5bc88e1800000000, 0xb5673b0a00000000, 0xd00087b200000000, | |
| 902 | + 0x6938502f00000000, 0x0c5fec9700000000, 0xe2f0598500000000, | |
| 903 | + 0x8797e53d00000000, 0xd187866500000000, 0xb4e03add00000000, | |
| 904 | + 0x5a4f8fcf00000000, 0x3f28337700000000, 0x8610e4ea00000000, | |
| 905 | + 0xe377585200000000, 0x0dd8ed4000000000, 0x68bf51f800000000, | |
| 906 | + 0xa1f82bf000000000, 0xc49f974800000000, 0x2a30225a00000000, | |
| 907 | + 0x4f579ee200000000, 0xf66f497f00000000, 0x9308f5c700000000, | |
| 908 | + 0x7da740d500000000, 0x18c0fc6d00000000, 0x4ed09f3500000000, | |
| 909 | + 0x2bb7238d00000000, 0xc518969f00000000, 0xa07f2a2700000000, | |
| 910 | + 0x1947fdba00000000, 0x7c20410200000000, 0x928ff41000000000, | |
| 911 | + 0xf7e848a800000000, 0x3d58149b00000000, 0x583fa82300000000, | |
| 912 | + 0xb6901d3100000000, 0xd3f7a18900000000, 0x6acf761400000000, | |
| 913 | + 0x0fa8caac00000000, 0xe1077fbe00000000, 0x8460c30600000000, | |
| 914 | + 0xd270a05e00000000, 0xb7171ce600000000, 0x59b8a9f400000000, | |
| 915 | + 0x3cdf154c00000000, 0x85e7c2d100000000, 0xe0807e6900000000, | |
| 916 | + 0x0e2fcb7b00000000, 0x6b4877c300000000, 0xa20f0dcb00000000, | |
| 917 | + 0xc768b17300000000, 0x29c7046100000000, 0x4ca0b8d900000000, | |
| 918 | + 0xf5986f4400000000, 0x90ffd3fc00000000, 0x7e5066ee00000000, | |
| 919 | + 0x1b37da5600000000, 0x4d27b90e00000000, 0x284005b600000000, | |
| 920 | + 0xc6efb0a400000000, 0xa3880c1c00000000, 0x1ab0db8100000000, | |
| 921 | + 0x7fd7673900000000, 0x9178d22b00000000, 0xf41f6e9300000000, | |
| 922 | + 0x03f7263b00000000, 0x66909a8300000000, 0x883f2f9100000000, | |
| 923 | + 0xed58932900000000, 0x546044b400000000, 0x3107f80c00000000, | |
| 924 | + 0xdfa84d1e00000000, 0xbacff1a600000000, 0xecdf92fe00000000, | |
| 925 | + 0x89b82e4600000000, 0x67179b5400000000, 0x027027ec00000000, | |
| 926 | + 0xbb48f07100000000, 0xde2f4cc900000000, 0x3080f9db00000000, | |
| 927 | + 0x55e7456300000000, 0x9ca03f6b00000000, 0xf9c783d300000000, | |
| 928 | + 0x176836c100000000, 0x720f8a7900000000, 0xcb375de400000000, | |
| 929 | + 0xae50e15c00000000, 0x40ff544e00000000, 0x2598e8f600000000, | |
| 930 | + 0x73888bae00000000, 0x16ef371600000000, 0xf840820400000000, | |
| 931 | + 0x9d273ebc00000000, 0x241fe92100000000, 0x4178559900000000, | |
| 932 | + 0xafd7e08b00000000, 0xcab05c3300000000, 0x3bb659ed00000000, | |
| 933 | + 0x5ed1e55500000000, 0xb07e504700000000, 0xd519ecff00000000, | |
| 934 | + 0x6c213b6200000000, 0x094687da00000000, 0xe7e932c800000000, | |
| 935 | + 0x828e8e7000000000, 0xd49eed2800000000, 0xb1f9519000000000, | |
| 936 | + 0x5f56e48200000000, 0x3a31583a00000000, 0x83098fa700000000, | |
| 937 | + 0xe66e331f00000000, 0x08c1860d00000000, 0x6da63ab500000000, | |
| 938 | + 0xa4e140bd00000000, 0xc186fc0500000000, 0x2f29491700000000, | |
| 939 | + 0x4a4ef5af00000000, 0xf376223200000000, 0x96119e8a00000000, | |
| 940 | + 0x78be2b9800000000, 0x1dd9972000000000, 0x4bc9f47800000000, | |
| 941 | + 0x2eae48c000000000, 0xc001fdd200000000, 0xa566416a00000000, | |
| 942 | + 0x1c5e96f700000000, 0x79392a4f00000000, 0x97969f5d00000000, | |
| 943 | + 0xf2f123e500000000, 0x05196b4d00000000, 0x607ed7f500000000, | |
| 944 | + 0x8ed162e700000000, 0xebb6de5f00000000, 0x528e09c200000000, | |
| 945 | + 0x37e9b57a00000000, 0xd946006800000000, 0xbc21bcd000000000, | |
| 946 | + 0xea31df8800000000, 0x8f56633000000000, 0x61f9d62200000000, | |
| 947 | + 0x049e6a9a00000000, 0xbda6bd0700000000, 0xd8c101bf00000000, | |
| 948 | + 0x366eb4ad00000000, 0x5309081500000000, 0x9a4e721d00000000, | |
| 949 | + 0xff29cea500000000, 0x11867bb700000000, 0x74e1c70f00000000, | |
| 950 | + 0xcdd9109200000000, 0xa8beac2a00000000, 0x4611193800000000, | |
| 951 | + 0x2376a58000000000, 0x7566c6d800000000, 0x10017a6000000000, | |
| 952 | + 0xfeaecf7200000000, 0x9bc973ca00000000, 0x22f1a45700000000, | |
| 953 | + 0x479618ef00000000, 0xa939adfd00000000, 0xcc5e114500000000, | |
| 954 | + 0x06ee4d7600000000, 0x6389f1ce00000000, 0x8d2644dc00000000, | |
| 955 | + 0xe841f86400000000, 0x51792ff900000000, 0x341e934100000000, | |
| 956 | + 0xdab1265300000000, 0xbfd69aeb00000000, 0xe9c6f9b300000000, | |
| 957 | + 0x8ca1450b00000000, 0x620ef01900000000, 0x07694ca100000000, | |
| 958 | + 0xbe519b3c00000000, 0xdb36278400000000, 0x3599929600000000, | |
| 959 | + 0x50fe2e2e00000000, 0x99b9542600000000, 0xfcdee89e00000000, | |
| 960 | + 0x12715d8c00000000, 0x7716e13400000000, 0xce2e36a900000000, | |
| 961 | + 0xab498a1100000000, 0x45e63f0300000000, 0x208183bb00000000, | |
| 962 | + 0x7691e0e300000000, 0x13f65c5b00000000, 0xfd59e94900000000, | |
| 963 | + 0x983e55f100000000, 0x2106826c00000000, 0x44613ed400000000, | |
| 964 | + 0xaace8bc600000000, 0xcfa9377e00000000, 0x38417fd600000000, | |
| 965 | + 0x5d26c36e00000000, 0xb389767c00000000, 0xd6eecac400000000, | |
| 966 | + 0x6fd61d5900000000, 0x0ab1a1e100000000, 0xe41e14f300000000, | |
| 967 | + 0x8179a84b00000000, 0xd769cb1300000000, 0xb20e77ab00000000, | |
| 968 | + 0x5ca1c2b900000000, 0x39c67e0100000000, 0x80fea99c00000000, | |
| 969 | + 0xe599152400000000, 0x0b36a03600000000, 0x6e511c8e00000000, | |
| 970 | + 0xa716668600000000, 0xc271da3e00000000, 0x2cde6f2c00000000, | |
| 971 | + 0x49b9d39400000000, 0xf081040900000000, 0x95e6b8b100000000, | |
| 972 | + 0x7b490da300000000, 0x1e2eb11b00000000, 0x483ed24300000000, | |
| 973 | + 0x2d596efb00000000, 0xc3f6dbe900000000, 0xa691675100000000, | |
| 974 | + 0x1fa9b0cc00000000, 0x7ace0c7400000000, 0x9461b96600000000, | |
| 975 | + 0xf10605de00000000}, | |
| 976 | + {0x0000000000000000, 0xb029603d00000000, 0x6053c07a00000000, | |
| 977 | + 0xd07aa04700000000, 0xc0a680f500000000, 0x708fe0c800000000, | |
| 978 | + 0xa0f5408f00000000, 0x10dc20b200000000, 0xc14b703000000000, | |
| 979 | + 0x7162100d00000000, 0xa118b04a00000000, 0x1131d07700000000, | |
| 980 | + 0x01edf0c500000000, 0xb1c490f800000000, 0x61be30bf00000000, | |
| 981 | + 0xd197508200000000, 0x8297e06000000000, 0x32be805d00000000, | |
| 982 | + 0xe2c4201a00000000, 0x52ed402700000000, 0x4231609500000000, | |
| 983 | + 0xf21800a800000000, 0x2262a0ef00000000, 0x924bc0d200000000, | |
| 984 | + 0x43dc905000000000, 0xf3f5f06d00000000, 0x238f502a00000000, | |
| 985 | + 0x93a6301700000000, 0x837a10a500000000, 0x3353709800000000, | |
| 986 | + 0xe329d0df00000000, 0x5300b0e200000000, 0x042fc1c100000000, | |
| 987 | + 0xb406a1fc00000000, 0x647c01bb00000000, 0xd455618600000000, | |
| 988 | + 0xc489413400000000, 0x74a0210900000000, 0xa4da814e00000000, | |
| 989 | + 0x14f3e17300000000, 0xc564b1f100000000, 0x754dd1cc00000000, | |
| 990 | + 0xa537718b00000000, 0x151e11b600000000, 0x05c2310400000000, | |
| 991 | + 0xb5eb513900000000, 0x6591f17e00000000, 0xd5b8914300000000, | |
| 992 | + 0x86b821a100000000, 0x3691419c00000000, 0xe6ebe1db00000000, | |
| 993 | + 0x56c281e600000000, 0x461ea15400000000, 0xf637c16900000000, | |
| 994 | + 0x264d612e00000000, 0x9664011300000000, 0x47f3519100000000, | |
| 995 | + 0xf7da31ac00000000, 0x27a091eb00000000, 0x9789f1d600000000, | |
| 996 | + 0x8755d16400000000, 0x377cb15900000000, 0xe706111e00000000, | |
| 997 | + 0x572f712300000000, 0x4958f35800000000, 0xf971936500000000, | |
| 998 | + 0x290b332200000000, 0x9922531f00000000, 0x89fe73ad00000000, | |
| 999 | + 0x39d7139000000000, 0xe9adb3d700000000, 0x5984d3ea00000000, | |
| 1000 | + 0x8813836800000000, 0x383ae35500000000, 0xe840431200000000, | |
| 1001 | + 0x5869232f00000000, 0x48b5039d00000000, 0xf89c63a000000000, | |
| 1002 | + 0x28e6c3e700000000, 0x98cfa3da00000000, 0xcbcf133800000000, | |
| 1003 | + 0x7be6730500000000, 0xab9cd34200000000, 0x1bb5b37f00000000, | |
| 1004 | + 0x0b6993cd00000000, 0xbb40f3f000000000, 0x6b3a53b700000000, | |
| 1005 | + 0xdb13338a00000000, 0x0a84630800000000, 0xbaad033500000000, | |
| 1006 | + 0x6ad7a37200000000, 0xdafec34f00000000, 0xca22e3fd00000000, | |
| 1007 | + 0x7a0b83c000000000, 0xaa71238700000000, 0x1a5843ba00000000, | |
| 1008 | + 0x4d77329900000000, 0xfd5e52a400000000, 0x2d24f2e300000000, | |
| 1009 | + 0x9d0d92de00000000, 0x8dd1b26c00000000, 0x3df8d25100000000, | |
| 1010 | + 0xed82721600000000, 0x5dab122b00000000, 0x8c3c42a900000000, | |
| 1011 | + 0x3c15229400000000, 0xec6f82d300000000, 0x5c46e2ee00000000, | |
| 1012 | + 0x4c9ac25c00000000, 0xfcb3a26100000000, 0x2cc9022600000000, | |
| 1013 | + 0x9ce0621b00000000, 0xcfe0d2f900000000, 0x7fc9b2c400000000, | |
| 1014 | + 0xafb3128300000000, 0x1f9a72be00000000, 0x0f46520c00000000, | |
| 1015 | + 0xbf6f323100000000, 0x6f15927600000000, 0xdf3cf24b00000000, | |
| 1016 | + 0x0eaba2c900000000, 0xbe82c2f400000000, 0x6ef862b300000000, | |
| 1017 | + 0xded1028e00000000, 0xce0d223c00000000, 0x7e24420100000000, | |
| 1018 | + 0xae5ee24600000000, 0x1e77827b00000000, 0x92b0e6b100000000, | |
| 1019 | + 0x2299868c00000000, 0xf2e326cb00000000, 0x42ca46f600000000, | |
| 1020 | + 0x5216664400000000, 0xe23f067900000000, 0x3245a63e00000000, | |
| 1021 | + 0x826cc60300000000, 0x53fb968100000000, 0xe3d2f6bc00000000, | |
| 1022 | + 0x33a856fb00000000, 0x838136c600000000, 0x935d167400000000, | |
| 1023 | + 0x2374764900000000, 0xf30ed60e00000000, 0x4327b63300000000, | |
| 1024 | + 0x102706d100000000, 0xa00e66ec00000000, 0x7074c6ab00000000, | |
| 1025 | + 0xc05da69600000000, 0xd081862400000000, 0x60a8e61900000000, | |
| 1026 | + 0xb0d2465e00000000, 0x00fb266300000000, 0xd16c76e100000000, | |
| 1027 | + 0x614516dc00000000, 0xb13fb69b00000000, 0x0116d6a600000000, | |
| 1028 | + 0x11caf61400000000, 0xa1e3962900000000, 0x7199366e00000000, | |
| 1029 | + 0xc1b0565300000000, 0x969f277000000000, 0x26b6474d00000000, | |
| 1030 | + 0xf6cce70a00000000, 0x46e5873700000000, 0x5639a78500000000, | |
| 1031 | + 0xe610c7b800000000, 0x366a67ff00000000, 0x864307c200000000, | |
| 1032 | + 0x57d4574000000000, 0xe7fd377d00000000, 0x3787973a00000000, | |
| 1033 | + 0x87aef70700000000, 0x9772d7b500000000, 0x275bb78800000000, | |
| 1034 | + 0xf72117cf00000000, 0x470877f200000000, 0x1408c71000000000, | |
| 1035 | + 0xa421a72d00000000, 0x745b076a00000000, 0xc472675700000000, | |
| 1036 | + 0xd4ae47e500000000, 0x648727d800000000, 0xb4fd879f00000000, | |
| 1037 | + 0x04d4e7a200000000, 0xd543b72000000000, 0x656ad71d00000000, | |
| 1038 | + 0xb510775a00000000, 0x0539176700000000, 0x15e537d500000000, | |
| 1039 | + 0xa5cc57e800000000, 0x75b6f7af00000000, 0xc59f979200000000, | |
| 1040 | + 0xdbe815e900000000, 0x6bc175d400000000, 0xbbbbd59300000000, | |
| 1041 | + 0x0b92b5ae00000000, 0x1b4e951c00000000, 0xab67f52100000000, | |
| 1042 | + 0x7b1d556600000000, 0xcb34355b00000000, 0x1aa365d900000000, | |
| 1043 | + 0xaa8a05e400000000, 0x7af0a5a300000000, 0xcad9c59e00000000, | |
| 1044 | + 0xda05e52c00000000, 0x6a2c851100000000, 0xba56255600000000, | |
| 1045 | + 0x0a7f456b00000000, 0x597ff58900000000, 0xe95695b400000000, | |
| 1046 | + 0x392c35f300000000, 0x890555ce00000000, 0x99d9757c00000000, | |
| 1047 | + 0x29f0154100000000, 0xf98ab50600000000, 0x49a3d53b00000000, | |
| 1048 | + 0x983485b900000000, 0x281de58400000000, 0xf86745c300000000, | |
| 1049 | + 0x484e25fe00000000, 0x5892054c00000000, 0xe8bb657100000000, | |
| 1050 | + 0x38c1c53600000000, 0x88e8a50b00000000, 0xdfc7d42800000000, | |
| 1051 | + 0x6feeb41500000000, 0xbf94145200000000, 0x0fbd746f00000000, | |
| 1052 | + 0x1f6154dd00000000, 0xaf4834e000000000, 0x7f3294a700000000, | |
| 1053 | + 0xcf1bf49a00000000, 0x1e8ca41800000000, 0xaea5c42500000000, | |
| 1054 | + 0x7edf646200000000, 0xcef6045f00000000, 0xde2a24ed00000000, | |
| 1055 | + 0x6e0344d000000000, 0xbe79e49700000000, 0x0e5084aa00000000, | |
| 1056 | + 0x5d50344800000000, 0xed79547500000000, 0x3d03f43200000000, | |
| 1057 | + 0x8d2a940f00000000, 0x9df6b4bd00000000, 0x2ddfd48000000000, | |
| 1058 | + 0xfda574c700000000, 0x4d8c14fa00000000, 0x9c1b447800000000, | |
| 1059 | + 0x2c32244500000000, 0xfc48840200000000, 0x4c61e43f00000000, | |
| 1060 | + 0x5cbdc48d00000000, 0xec94a4b000000000, 0x3cee04f700000000, | |
| 1061 | + 0x8cc764ca00000000}, | |
| 1062 | + {0x0000000000000000, 0xa5d35ccb00000000, 0x0ba1c84d00000000, | |
| 1063 | + 0xae72948600000000, 0x1642919b00000000, 0xb391cd5000000000, | |
| 1064 | + 0x1de359d600000000, 0xb830051d00000000, 0x6d8253ec00000000, | |
| 1065 | + 0xc8510f2700000000, 0x66239ba100000000, 0xc3f0c76a00000000, | |
| 1066 | + 0x7bc0c27700000000, 0xde139ebc00000000, 0x70610a3a00000000, | |
| 1067 | + 0xd5b256f100000000, 0x9b02d60300000000, 0x3ed18ac800000000, | |
| 1068 | + 0x90a31e4e00000000, 0x3570428500000000, 0x8d40479800000000, | |
| 1069 | + 0x28931b5300000000, 0x86e18fd500000000, 0x2332d31e00000000, | |
| 1070 | + 0xf68085ef00000000, 0x5353d92400000000, 0xfd214da200000000, | |
| 1071 | + 0x58f2116900000000, 0xe0c2147400000000, 0x451148bf00000000, | |
| 1072 | + 0xeb63dc3900000000, 0x4eb080f200000000, 0x3605ac0700000000, | |
| 1073 | + 0x93d6f0cc00000000, 0x3da4644a00000000, 0x9877388100000000, | |
| 1074 | + 0x20473d9c00000000, 0x8594615700000000, 0x2be6f5d100000000, | |
| 1075 | + 0x8e35a91a00000000, 0x5b87ffeb00000000, 0xfe54a32000000000, | |
| 1076 | + 0x502637a600000000, 0xf5f56b6d00000000, 0x4dc56e7000000000, | |
| 1077 | + 0xe81632bb00000000, 0x4664a63d00000000, 0xe3b7faf600000000, | |
| 1078 | + 0xad077a0400000000, 0x08d426cf00000000, 0xa6a6b24900000000, | |
| 1079 | + 0x0375ee8200000000, 0xbb45eb9f00000000, 0x1e96b75400000000, | |
| 1080 | + 0xb0e423d200000000, 0x15377f1900000000, 0xc08529e800000000, | |
| 1081 | + 0x6556752300000000, 0xcb24e1a500000000, 0x6ef7bd6e00000000, | |
| 1082 | + 0xd6c7b87300000000, 0x7314e4b800000000, 0xdd66703e00000000, | |
| 1083 | + 0x78b52cf500000000, 0x6c0a580f00000000, 0xc9d904c400000000, | |
| 1084 | + 0x67ab904200000000, 0xc278cc8900000000, 0x7a48c99400000000, | |
| 1085 | + 0xdf9b955f00000000, 0x71e901d900000000, 0xd43a5d1200000000, | |
| 1086 | + 0x01880be300000000, 0xa45b572800000000, 0x0a29c3ae00000000, | |
| 1087 | + 0xaffa9f6500000000, 0x17ca9a7800000000, 0xb219c6b300000000, | |
| 1088 | + 0x1c6b523500000000, 0xb9b80efe00000000, 0xf7088e0c00000000, | |
| 1089 | + 0x52dbd2c700000000, 0xfca9464100000000, 0x597a1a8a00000000, | |
| 1090 | + 0xe14a1f9700000000, 0x4499435c00000000, 0xeaebd7da00000000, | |
| 1091 | + 0x4f388b1100000000, 0x9a8adde000000000, 0x3f59812b00000000, | |
| 1092 | + 0x912b15ad00000000, 0x34f8496600000000, 0x8cc84c7b00000000, | |
| 1093 | + 0x291b10b000000000, 0x8769843600000000, 0x22bad8fd00000000, | |
| 1094 | + 0x5a0ff40800000000, 0xffdca8c300000000, 0x51ae3c4500000000, | |
| 1095 | + 0xf47d608e00000000, 0x4c4d659300000000, 0xe99e395800000000, | |
| 1096 | + 0x47ecadde00000000, 0xe23ff11500000000, 0x378da7e400000000, | |
| 1097 | + 0x925efb2f00000000, 0x3c2c6fa900000000, 0x99ff336200000000, | |
| 1098 | + 0x21cf367f00000000, 0x841c6ab400000000, 0x2a6efe3200000000, | |
| 1099 | + 0x8fbda2f900000000, 0xc10d220b00000000, 0x64de7ec000000000, | |
| 1100 | + 0xcaacea4600000000, 0x6f7fb68d00000000, 0xd74fb39000000000, | |
| 1101 | + 0x729cef5b00000000, 0xdcee7bdd00000000, 0x793d271600000000, | |
| 1102 | + 0xac8f71e700000000, 0x095c2d2c00000000, 0xa72eb9aa00000000, | |
| 1103 | + 0x02fde56100000000, 0xbacde07c00000000, 0x1f1ebcb700000000, | |
| 1104 | + 0xb16c283100000000, 0x14bf74fa00000000, 0xd814b01e00000000, | |
| 1105 | + 0x7dc7ecd500000000, 0xd3b5785300000000, 0x7666249800000000, | |
| 1106 | + 0xce56218500000000, 0x6b857d4e00000000, 0xc5f7e9c800000000, | |
| 1107 | + 0x6024b50300000000, 0xb596e3f200000000, 0x1045bf3900000000, | |
| 1108 | + 0xbe372bbf00000000, 0x1be4777400000000, 0xa3d4726900000000, | |
| 1109 | + 0x06072ea200000000, 0xa875ba2400000000, 0x0da6e6ef00000000, | |
| 1110 | + 0x4316661d00000000, 0xe6c53ad600000000, 0x48b7ae5000000000, | |
| 1111 | + 0xed64f29b00000000, 0x5554f78600000000, 0xf087ab4d00000000, | |
| 1112 | + 0x5ef53fcb00000000, 0xfb26630000000000, 0x2e9435f100000000, | |
| 1113 | + 0x8b47693a00000000, 0x2535fdbc00000000, 0x80e6a17700000000, | |
| 1114 | + 0x38d6a46a00000000, 0x9d05f8a100000000, 0x33776c2700000000, | |
| 1115 | + 0x96a430ec00000000, 0xee111c1900000000, 0x4bc240d200000000, | |
| 1116 | + 0xe5b0d45400000000, 0x4063889f00000000, 0xf8538d8200000000, | |
| 1117 | + 0x5d80d14900000000, 0xf3f245cf00000000, 0x5621190400000000, | |
| 1118 | + 0x83934ff500000000, 0x2640133e00000000, 0x883287b800000000, | |
| 1119 | + 0x2de1db7300000000, 0x95d1de6e00000000, 0x300282a500000000, | |
| 1120 | + 0x9e70162300000000, 0x3ba34ae800000000, 0x7513ca1a00000000, | |
| 1121 | + 0xd0c096d100000000, 0x7eb2025700000000, 0xdb615e9c00000000, | |
| 1122 | + 0x63515b8100000000, 0xc682074a00000000, 0x68f093cc00000000, | |
| 1123 | + 0xcd23cf0700000000, 0x189199f600000000, 0xbd42c53d00000000, | |
| 1124 | + 0x133051bb00000000, 0xb6e30d7000000000, 0x0ed3086d00000000, | |
| 1125 | + 0xab0054a600000000, 0x0572c02000000000, 0xa0a19ceb00000000, | |
| 1126 | + 0xb41ee81100000000, 0x11cdb4da00000000, 0xbfbf205c00000000, | |
| 1127 | + 0x1a6c7c9700000000, 0xa25c798a00000000, 0x078f254100000000, | |
| 1128 | + 0xa9fdb1c700000000, 0x0c2eed0c00000000, 0xd99cbbfd00000000, | |
| 1129 | + 0x7c4fe73600000000, 0xd23d73b000000000, 0x77ee2f7b00000000, | |
| 1130 | + 0xcfde2a6600000000, 0x6a0d76ad00000000, 0xc47fe22b00000000, | |
| 1131 | + 0x61acbee000000000, 0x2f1c3e1200000000, 0x8acf62d900000000, | |
| 1132 | + 0x24bdf65f00000000, 0x816eaa9400000000, 0x395eaf8900000000, | |
| 1133 | + 0x9c8df34200000000, 0x32ff67c400000000, 0x972c3b0f00000000, | |
| 1134 | + 0x429e6dfe00000000, 0xe74d313500000000, 0x493fa5b300000000, | |
| 1135 | + 0xececf97800000000, 0x54dcfc6500000000, 0xf10fa0ae00000000, | |
| 1136 | + 0x5f7d342800000000, 0xfaae68e300000000, 0x821b441600000000, | |
| 1137 | + 0x27c818dd00000000, 0x89ba8c5b00000000, 0x2c69d09000000000, | |
| 1138 | + 0x9459d58d00000000, 0x318a894600000000, 0x9ff81dc000000000, | |
| 1139 | + 0x3a2b410b00000000, 0xef9917fa00000000, 0x4a4a4b3100000000, | |
| 1140 | + 0xe438dfb700000000, 0x41eb837c00000000, 0xf9db866100000000, | |
| 1141 | + 0x5c08daaa00000000, 0xf27a4e2c00000000, 0x57a912e700000000, | |
| 1142 | + 0x1919921500000000, 0xbccacede00000000, 0x12b85a5800000000, | |
| 1143 | + 0xb76b069300000000, 0x0f5b038e00000000, 0xaa885f4500000000, | |
| 1144 | + 0x04facbc300000000, 0xa129970800000000, 0x749bc1f900000000, | |
| 1145 | + 0xd1489d3200000000, 0x7f3a09b400000000, 0xdae9557f00000000, | |
| 1146 | + 0x62d9506200000000, 0xc70a0ca900000000, 0x6978982f00000000, | |
| 1147 | + 0xccabc4e400000000}, | |
| 1148 | + {0x0000000000000000, 0xb40b77a600000000, 0x29119f9700000000, | |
| 1149 | + 0x9d1ae83100000000, 0x13244ff400000000, 0xa72f385200000000, | |
| 1150 | + 0x3a35d06300000000, 0x8e3ea7c500000000, 0x674eef3300000000, | |
| 1151 | + 0xd345989500000000, 0x4e5f70a400000000, 0xfa54070200000000, | |
| 1152 | + 0x746aa0c700000000, 0xc061d76100000000, 0x5d7b3f5000000000, | |
| 1153 | + 0xe97048f600000000, 0xce9cde6700000000, 0x7a97a9c100000000, | |
| 1154 | + 0xe78d41f000000000, 0x5386365600000000, 0xddb8919300000000, | |
| 1155 | + 0x69b3e63500000000, 0xf4a90e0400000000, 0x40a279a200000000, | |
| 1156 | + 0xa9d2315400000000, 0x1dd946f200000000, 0x80c3aec300000000, | |
| 1157 | + 0x34c8d96500000000, 0xbaf67ea000000000, 0x0efd090600000000, | |
| 1158 | + 0x93e7e13700000000, 0x27ec969100000000, 0x9c39bdcf00000000, | |
| 1159 | + 0x2832ca6900000000, 0xb528225800000000, 0x012355fe00000000, | |
| 1160 | + 0x8f1df23b00000000, 0x3b16859d00000000, 0xa60c6dac00000000, | |
| 1161 | + 0x12071a0a00000000, 0xfb7752fc00000000, 0x4f7c255a00000000, | |
| 1162 | + 0xd266cd6b00000000, 0x666dbacd00000000, 0xe8531d0800000000, | |
| 1163 | + 0x5c586aae00000000, 0xc142829f00000000, 0x7549f53900000000, | |
| 1164 | + 0x52a563a800000000, 0xe6ae140e00000000, 0x7bb4fc3f00000000, | |
| 1165 | + 0xcfbf8b9900000000, 0x41812c5c00000000, 0xf58a5bfa00000000, | |
| 1166 | + 0x6890b3cb00000000, 0xdc9bc46d00000000, 0x35eb8c9b00000000, | |
| 1167 | + 0x81e0fb3d00000000, 0x1cfa130c00000000, 0xa8f164aa00000000, | |
| 1168 | + 0x26cfc36f00000000, 0x92c4b4c900000000, 0x0fde5cf800000000, | |
| 1169 | + 0xbbd52b5e00000000, 0x79750b4400000000, 0xcd7e7ce200000000, | |
| 1170 | + 0x506494d300000000, 0xe46fe37500000000, 0x6a5144b000000000, | |
| 1171 | + 0xde5a331600000000, 0x4340db2700000000, 0xf74bac8100000000, | |
| 1172 | + 0x1e3be47700000000, 0xaa3093d100000000, 0x372a7be000000000, | |
| 1173 | + 0x83210c4600000000, 0x0d1fab8300000000, 0xb914dc2500000000, | |
| 1174 | + 0x240e341400000000, 0x900543b200000000, 0xb7e9d52300000000, | |
| 1175 | + 0x03e2a28500000000, 0x9ef84ab400000000, 0x2af33d1200000000, | |
| 1176 | + 0xa4cd9ad700000000, 0x10c6ed7100000000, 0x8ddc054000000000, | |
| 1177 | + 0x39d772e600000000, 0xd0a73a1000000000, 0x64ac4db600000000, | |
| 1178 | + 0xf9b6a58700000000, 0x4dbdd22100000000, 0xc38375e400000000, | |
| 1179 | + 0x7788024200000000, 0xea92ea7300000000, 0x5e999dd500000000, | |
| 1180 | + 0xe54cb68b00000000, 0x5147c12d00000000, 0xcc5d291c00000000, | |
| 1181 | + 0x78565eba00000000, 0xf668f97f00000000, 0x42638ed900000000, | |
| 1182 | + 0xdf7966e800000000, 0x6b72114e00000000, 0x820259b800000000, | |
| 1183 | + 0x36092e1e00000000, 0xab13c62f00000000, 0x1f18b18900000000, | |
| 1184 | + 0x9126164c00000000, 0x252d61ea00000000, 0xb83789db00000000, | |
| 1185 | + 0x0c3cfe7d00000000, 0x2bd068ec00000000, 0x9fdb1f4a00000000, | |
| 1186 | + 0x02c1f77b00000000, 0xb6ca80dd00000000, 0x38f4271800000000, | |
| 1187 | + 0x8cff50be00000000, 0x11e5b88f00000000, 0xa5eecf2900000000, | |
| 1188 | + 0x4c9e87df00000000, 0xf895f07900000000, 0x658f184800000000, | |
| 1189 | + 0xd1846fee00000000, 0x5fbac82b00000000, 0xebb1bf8d00000000, | |
| 1190 | + 0x76ab57bc00000000, 0xc2a0201a00000000, 0xf2ea168800000000, | |
| 1191 | + 0x46e1612e00000000, 0xdbfb891f00000000, 0x6ff0feb900000000, | |
| 1192 | + 0xe1ce597c00000000, 0x55c52eda00000000, 0xc8dfc6eb00000000, | |
| 1193 | + 0x7cd4b14d00000000, 0x95a4f9bb00000000, 0x21af8e1d00000000, | |
| 1194 | + 0xbcb5662c00000000, 0x08be118a00000000, 0x8680b64f00000000, | |
| 1195 | + 0x328bc1e900000000, 0xaf9129d800000000, 0x1b9a5e7e00000000, | |
| 1196 | + 0x3c76c8ef00000000, 0x887dbf4900000000, 0x1567577800000000, | |
| 1197 | + 0xa16c20de00000000, 0x2f52871b00000000, 0x9b59f0bd00000000, | |
| 1198 | + 0x0643188c00000000, 0xb2486f2a00000000, 0x5b3827dc00000000, | |
| 1199 | + 0xef33507a00000000, 0x7229b84b00000000, 0xc622cfed00000000, | |
| 1200 | + 0x481c682800000000, 0xfc171f8e00000000, 0x610df7bf00000000, | |
| 1201 | + 0xd506801900000000, 0x6ed3ab4700000000, 0xdad8dce100000000, | |
| 1202 | + 0x47c234d000000000, 0xf3c9437600000000, 0x7df7e4b300000000, | |
| 1203 | + 0xc9fc931500000000, 0x54e67b2400000000, 0xe0ed0c8200000000, | |
| 1204 | + 0x099d447400000000, 0xbd9633d200000000, 0x208cdbe300000000, | |
| 1205 | + 0x9487ac4500000000, 0x1ab90b8000000000, 0xaeb27c2600000000, | |
| 1206 | + 0x33a8941700000000, 0x87a3e3b100000000, 0xa04f752000000000, | |
| 1207 | + 0x1444028600000000, 0x895eeab700000000, 0x3d559d1100000000, | |
| 1208 | + 0xb36b3ad400000000, 0x07604d7200000000, 0x9a7aa54300000000, | |
| 1209 | + 0x2e71d2e500000000, 0xc7019a1300000000, 0x730aedb500000000, | |
| 1210 | + 0xee10058400000000, 0x5a1b722200000000, 0xd425d5e700000000, | |
| 1211 | + 0x602ea24100000000, 0xfd344a7000000000, 0x493f3dd600000000, | |
| 1212 | + 0x8b9f1dcc00000000, 0x3f946a6a00000000, 0xa28e825b00000000, | |
| 1213 | + 0x1685f5fd00000000, 0x98bb523800000000, 0x2cb0259e00000000, | |
| 1214 | + 0xb1aacdaf00000000, 0x05a1ba0900000000, 0xecd1f2ff00000000, | |
| 1215 | + 0x58da855900000000, 0xc5c06d6800000000, 0x71cb1ace00000000, | |
| 1216 | + 0xfff5bd0b00000000, 0x4bfecaad00000000, 0xd6e4229c00000000, | |
| 1217 | + 0x62ef553a00000000, 0x4503c3ab00000000, 0xf108b40d00000000, | |
| 1218 | + 0x6c125c3c00000000, 0xd8192b9a00000000, 0x56278c5f00000000, | |
| 1219 | + 0xe22cfbf900000000, 0x7f3613c800000000, 0xcb3d646e00000000, | |
| 1220 | + 0x224d2c9800000000, 0x96465b3e00000000, 0x0b5cb30f00000000, | |
| 1221 | + 0xbf57c4a900000000, 0x3169636c00000000, 0x856214ca00000000, | |
| 1222 | + 0x1878fcfb00000000, 0xac738b5d00000000, 0x17a6a00300000000, | |
| 1223 | + 0xa3add7a500000000, 0x3eb73f9400000000, 0x8abc483200000000, | |
| 1224 | + 0x0482eff700000000, 0xb089985100000000, 0x2d93706000000000, | |
| 1225 | + 0x999807c600000000, 0x70e84f3000000000, 0xc4e3389600000000, | |
| 1226 | + 0x59f9d0a700000000, 0xedf2a70100000000, 0x63cc00c400000000, | |
| 1227 | + 0xd7c7776200000000, 0x4add9f5300000000, 0xfed6e8f500000000, | |
| 1228 | + 0xd93a7e6400000000, 0x6d3109c200000000, 0xf02be1f300000000, | |
| 1229 | + 0x4420965500000000, 0xca1e319000000000, 0x7e15463600000000, | |
| 1230 | + 0xe30fae0700000000, 0x5704d9a100000000, 0xbe74915700000000, | |
| 1231 | + 0x0a7fe6f100000000, 0x97650ec000000000, 0x236e796600000000, | |
| 1232 | + 0xad50dea300000000, 0x195ba90500000000, 0x8441413400000000, | |
| 1233 | + 0x304a369200000000}, | |
| 1234 | + {0x0000000000000000, 0x9e00aacc00000000, 0x7d07254200000000, | |
| 1235 | + 0xe3078f8e00000000, 0xfa0e4a8400000000, 0x640ee04800000000, | |
| 1236 | + 0x87096fc600000000, 0x1909c50a00000000, 0xb51be5d300000000, | |
| 1237 | + 0x2b1b4f1f00000000, 0xc81cc09100000000, 0x561c6a5d00000000, | |
| 1238 | + 0x4f15af5700000000, 0xd115059b00000000, 0x32128a1500000000, | |
| 1239 | + 0xac1220d900000000, 0x2b31bb7c00000000, 0xb53111b000000000, | |
| 1240 | + 0x56369e3e00000000, 0xc83634f200000000, 0xd13ff1f800000000, | |
| 1241 | + 0x4f3f5b3400000000, 0xac38d4ba00000000, 0x32387e7600000000, | |
| 1242 | + 0x9e2a5eaf00000000, 0x002af46300000000, 0xe32d7bed00000000, | |
| 1243 | + 0x7d2dd12100000000, 0x6424142b00000000, 0xfa24bee700000000, | |
| 1244 | + 0x1923316900000000, 0x87239ba500000000, 0x566276f900000000, | |
| 1245 | + 0xc862dc3500000000, 0x2b6553bb00000000, 0xb565f97700000000, | |
| 1246 | + 0xac6c3c7d00000000, 0x326c96b100000000, 0xd16b193f00000000, | |
| 1247 | + 0x4f6bb3f300000000, 0xe379932a00000000, 0x7d7939e600000000, | |
| 1248 | + 0x9e7eb66800000000, 0x007e1ca400000000, 0x1977d9ae00000000, | |
| 1249 | + 0x8777736200000000, 0x6470fcec00000000, 0xfa70562000000000, | |
| 1250 | + 0x7d53cd8500000000, 0xe353674900000000, 0x0054e8c700000000, | |
| 1251 | + 0x9e54420b00000000, 0x875d870100000000, 0x195d2dcd00000000, | |
| 1252 | + 0xfa5aa24300000000, 0x645a088f00000000, 0xc848285600000000, | |
| 1253 | + 0x5648829a00000000, 0xb54f0d1400000000, 0x2b4fa7d800000000, | |
| 1254 | + 0x324662d200000000, 0xac46c81e00000000, 0x4f41479000000000, | |
| 1255 | + 0xd141ed5c00000000, 0xedc29d2900000000, 0x73c237e500000000, | |
| 1256 | + 0x90c5b86b00000000, 0x0ec512a700000000, 0x17ccd7ad00000000, | |
| 1257 | + 0x89cc7d6100000000, 0x6acbf2ef00000000, 0xf4cb582300000000, | |
| 1258 | + 0x58d978fa00000000, 0xc6d9d23600000000, 0x25de5db800000000, | |
| 1259 | + 0xbbdef77400000000, 0xa2d7327e00000000, 0x3cd798b200000000, | |
| 1260 | + 0xdfd0173c00000000, 0x41d0bdf000000000, 0xc6f3265500000000, | |
| 1261 | + 0x58f38c9900000000, 0xbbf4031700000000, 0x25f4a9db00000000, | |
| 1262 | + 0x3cfd6cd100000000, 0xa2fdc61d00000000, 0x41fa499300000000, | |
| 1263 | + 0xdffae35f00000000, 0x73e8c38600000000, 0xede8694a00000000, | |
| 1264 | + 0x0eefe6c400000000, 0x90ef4c0800000000, 0x89e6890200000000, | |
| 1265 | + 0x17e623ce00000000, 0xf4e1ac4000000000, 0x6ae1068c00000000, | |
| 1266 | + 0xbba0ebd000000000, 0x25a0411c00000000, 0xc6a7ce9200000000, | |
| 1267 | + 0x58a7645e00000000, 0x41aea15400000000, 0xdfae0b9800000000, | |
| 1268 | + 0x3ca9841600000000, 0xa2a92eda00000000, 0x0ebb0e0300000000, | |
| 1269 | + 0x90bba4cf00000000, 0x73bc2b4100000000, 0xedbc818d00000000, | |
| 1270 | + 0xf4b5448700000000, 0x6ab5ee4b00000000, 0x89b261c500000000, | |
| 1271 | + 0x17b2cb0900000000, 0x909150ac00000000, 0x0e91fa6000000000, | |
| 1272 | + 0xed9675ee00000000, 0x7396df2200000000, 0x6a9f1a2800000000, | |
| 1273 | + 0xf49fb0e400000000, 0x17983f6a00000000, 0x899895a600000000, | |
| 1274 | + 0x258ab57f00000000, 0xbb8a1fb300000000, 0x588d903d00000000, | |
| 1275 | + 0xc68d3af100000000, 0xdf84fffb00000000, 0x4184553700000000, | |
| 1276 | + 0xa283dab900000000, 0x3c83707500000000, 0xda853b5300000000, | |
| 1277 | + 0x4485919f00000000, 0xa7821e1100000000, 0x3982b4dd00000000, | |
| 1278 | + 0x208b71d700000000, 0xbe8bdb1b00000000, 0x5d8c549500000000, | |
| 1279 | + 0xc38cfe5900000000, 0x6f9ede8000000000, 0xf19e744c00000000, | |
| 1280 | + 0x1299fbc200000000, 0x8c99510e00000000, 0x9590940400000000, | |
| 1281 | + 0x0b903ec800000000, 0xe897b14600000000, 0x76971b8a00000000, | |
| 1282 | + 0xf1b4802f00000000, 0x6fb42ae300000000, 0x8cb3a56d00000000, | |
| 1283 | + 0x12b30fa100000000, 0x0bbacaab00000000, 0x95ba606700000000, | |
| 1284 | + 0x76bdefe900000000, 0xe8bd452500000000, 0x44af65fc00000000, | |
| 1285 | + 0xdaafcf3000000000, 0x39a840be00000000, 0xa7a8ea7200000000, | |
| 1286 | + 0xbea12f7800000000, 0x20a185b400000000, 0xc3a60a3a00000000, | |
| 1287 | + 0x5da6a0f600000000, 0x8ce74daa00000000, 0x12e7e76600000000, | |
| 1288 | + 0xf1e068e800000000, 0x6fe0c22400000000, 0x76e9072e00000000, | |
| 1289 | + 0xe8e9ade200000000, 0x0bee226c00000000, 0x95ee88a000000000, | |
| 1290 | + 0x39fca87900000000, 0xa7fc02b500000000, 0x44fb8d3b00000000, | |
| 1291 | + 0xdafb27f700000000, 0xc3f2e2fd00000000, 0x5df2483100000000, | |
| 1292 | + 0xbef5c7bf00000000, 0x20f56d7300000000, 0xa7d6f6d600000000, | |
| 1293 | + 0x39d65c1a00000000, 0xdad1d39400000000, 0x44d1795800000000, | |
| 1294 | + 0x5dd8bc5200000000, 0xc3d8169e00000000, 0x20df991000000000, | |
| 1295 | + 0xbedf33dc00000000, 0x12cd130500000000, 0x8ccdb9c900000000, | |
| 1296 | + 0x6fca364700000000, 0xf1ca9c8b00000000, 0xe8c3598100000000, | |
| 1297 | + 0x76c3f34d00000000, 0x95c47cc300000000, 0x0bc4d60f00000000, | |
| 1298 | + 0x3747a67a00000000, 0xa9470cb600000000, 0x4a40833800000000, | |
| 1299 | + 0xd44029f400000000, 0xcd49ecfe00000000, 0x5349463200000000, | |
| 1300 | + 0xb04ec9bc00000000, 0x2e4e637000000000, 0x825c43a900000000, | |
| 1301 | + 0x1c5ce96500000000, 0xff5b66eb00000000, 0x615bcc2700000000, | |
| 1302 | + 0x7852092d00000000, 0xe652a3e100000000, 0x05552c6f00000000, | |
| 1303 | + 0x9b5586a300000000, 0x1c761d0600000000, 0x8276b7ca00000000, | |
| 1304 | + 0x6171384400000000, 0xff71928800000000, 0xe678578200000000, | |
| 1305 | + 0x7878fd4e00000000, 0x9b7f72c000000000, 0x057fd80c00000000, | |
| 1306 | + 0xa96df8d500000000, 0x376d521900000000, 0xd46add9700000000, | |
| 1307 | + 0x4a6a775b00000000, 0x5363b25100000000, 0xcd63189d00000000, | |
| 1308 | + 0x2e64971300000000, 0xb0643ddf00000000, 0x6125d08300000000, | |
| 1309 | + 0xff257a4f00000000, 0x1c22f5c100000000, 0x82225f0d00000000, | |
| 1310 | + 0x9b2b9a0700000000, 0x052b30cb00000000, 0xe62cbf4500000000, | |
| 1311 | + 0x782c158900000000, 0xd43e355000000000, 0x4a3e9f9c00000000, | |
| 1312 | + 0xa939101200000000, 0x3739bade00000000, 0x2e307fd400000000, | |
| 1313 | + 0xb030d51800000000, 0x53375a9600000000, 0xcd37f05a00000000, | |
| 1314 | + 0x4a146bff00000000, 0xd414c13300000000, 0x37134ebd00000000, | |
| 1315 | + 0xa913e47100000000, 0xb01a217b00000000, 0x2e1a8bb700000000, | |
| 1316 | + 0xcd1d043900000000, 0x531daef500000000, 0xff0f8e2c00000000, | |
| 1317 | + 0x610f24e000000000, 0x8208ab6e00000000, 0x1c0801a200000000, | |
| 1318 | + 0x0501c4a800000000, 0x9b016e6400000000, 0x7806e1ea00000000, | |
| 1319 | + 0xe6064b2600000000}}; | |
| 1320 | + | |
| 1321 | +#else /* W == 4 */ | |
| 1322 | + | |
| 1323 | +local const z_crc_t FAR crc_braid_table[][256] = { | |
| 1324 | + {0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757, | |
| 1325 | + 0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a, | |
| 1326 | + 0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733, | |
| 1327 | + 0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871, | |
| 1328 | + 0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70, | |
| 1329 | + 0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42, | |
| 1330 | + 0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5, | |
| 1331 | + 0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787, | |
| 1332 | + 0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086, | |
| 1333 | + 0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1, 0x48979fc4, | |
| 1334 | + 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d, | |
| 1335 | + 0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0, | |
| 1336 | + 0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d, | |
| 1337 | + 0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f, | |
| 1338 | + 0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859, | |
| 1339 | + 0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b, | |
| 1340 | + 0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5, | |
| 1341 | + 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028, | |
| 1342 | + 0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891, | |
| 1343 | + 0x936e1ff4, 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed, | |
| 1344 | + 0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec, | |
| 1345 | + 0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde, | |
| 1346 | + 0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, 0xc1366817, | |
| 1347 | + 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825, | |
| 1348 | + 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24, | |
| 1349 | + 0x99557841, 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e, | |
| 1350 | + 0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7, | |
| 1351 | + 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a, | |
| 1352 | + 0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4, | |
| 1353 | + 0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196, | |
| 1354 | + 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0, | |
| 1355 | + 0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2, | |
| 1356 | + 0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52, | |
| 1357 | + 0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f, | |
| 1358 | + 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36, | |
| 1359 | + 0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174, | |
| 1360 | + 0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675, | |
| 1361 | + 0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647, | |
| 1362 | + 0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d, | |
| 1363 | + 0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf, | |
| 1364 | + 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be, | |
| 1365 | + 0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc, | |
| 1366 | + 0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645, | |
| 1367 | + 0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98, | |
| 1368 | + 0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf, 0xd67f4138, | |
| 1369 | + 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a, | |
| 1370 | + 0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c, | |
| 1371 | + 0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e, | |
| 1372 | + 0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0, | |
| 1373 | + 0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d, | |
| 1374 | + 0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194, | |
| 1375 | + 0xde0506f1}, | |
| 1376 | + {0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc, | |
| 1377 | + 0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f, | |
| 1378 | + 0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a, | |
| 1379 | + 0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29, | |
| 1380 | + 0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8, | |
| 1381 | + 0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023, | |
| 1382 | + 0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e, | |
| 1383 | + 0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065, | |
| 1384 | + 0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84, | |
| 1385 | + 0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590, 0x25a98fa7, | |
| 1386 | + 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922, | |
| 1387 | + 0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71, | |
| 1388 | + 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0, | |
| 1389 | + 0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b, | |
| 1390 | + 0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816, | |
| 1391 | + 0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd, | |
| 1392 | + 0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c, | |
| 1393 | + 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f, | |
| 1394 | + 0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba, | |
| 1395 | + 0x67e0698d, 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579, | |
| 1396 | + 0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98, | |
| 1397 | + 0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873, | |
| 1398 | + 0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, 0x5775bc3e, | |
| 1399 | + 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5, | |
| 1400 | + 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134, | |
| 1401 | + 0x5c29fb03, 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7, | |
| 1402 | + 0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732, | |
| 1403 | + 0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461, | |
| 1404 | + 0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0, | |
| 1405 | + 0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b, | |
| 1406 | + 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26, | |
| 1407 | + 0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd, | |
| 1408 | + 0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc, | |
| 1409 | + 0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef, | |
| 1410 | + 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a, | |
| 1411 | + 0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049, | |
| 1412 | + 0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8, | |
| 1413 | + 0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43, | |
| 1414 | + 0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e, | |
| 1415 | + 0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5, | |
| 1416 | + 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24, | |
| 1417 | + 0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07, | |
| 1418 | + 0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982, | |
| 1419 | + 0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1, | |
| 1420 | + 0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d, 0xa9e2d0a0, | |
| 1421 | + 0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b, | |
| 1422 | + 0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576, | |
| 1423 | + 0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d, | |
| 1424 | + 0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c, | |
| 1425 | + 0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f, | |
| 1426 | + 0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda, | |
| 1427 | + 0xbe9834ed}, | |
| 1428 | + {0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504, | |
| 1429 | + 0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49, | |
| 1430 | + 0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e, | |
| 1431 | + 0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192, | |
| 1432 | + 0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859, | |
| 1433 | + 0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c, | |
| 1434 | + 0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620, | |
| 1435 | + 0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265, | |
| 1436 | + 0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae, | |
| 1437 | + 0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3, 0xc65d07b2, | |
| 1438 | + 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175, | |
| 1439 | + 0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38, | |
| 1440 | + 0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05, | |
| 1441 | + 0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40, | |
| 1442 | + 0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f, | |
| 1443 | + 0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca, | |
| 1444 | + 0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850, | |
| 1445 | + 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d, | |
| 1446 | + 0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da, | |
| 1447 | + 0x3d23419b, 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864, | |
| 1448 | + 0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af, | |
| 1449 | + 0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea, | |
| 1450 | + 0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, 0x1d091b74, | |
| 1451 | + 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31, | |
| 1452 | + 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa, | |
| 1453 | + 0x9a9107bb, 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a, | |
| 1454 | + 0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd, | |
| 1455 | + 0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180, | |
| 1456 | + 0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a, | |
| 1457 | + 0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f, | |
| 1458 | + 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290, | |
| 1459 | + 0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5, | |
| 1460 | + 0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed, | |
| 1461 | + 0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0, | |
| 1462 | + 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167, | |
| 1463 | + 0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b, | |
| 1464 | + 0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0, | |
| 1465 | + 0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5, | |
| 1466 | + 0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc, | |
| 1467 | + 0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189, | |
| 1468 | + 0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842, | |
| 1469 | + 0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e, | |
| 1470 | + 0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299, | |
| 1471 | + 0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4, | |
| 1472 | + 0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec, | |
| 1473 | + 0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9, | |
| 1474 | + 0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66, | |
| 1475 | + 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23, | |
| 1476 | + 0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9, | |
| 1477 | + 0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4, | |
| 1478 | + 0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33, | |
| 1479 | + 0x9324fd72}, | |
| 1480 | + {0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, | |
| 1481 | + 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, | |
| 1482 | + 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, | |
| 1483 | + 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, | |
| 1484 | + 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, | |
| 1485 | + 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, | |
| 1486 | + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, | |
| 1487 | + 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, | |
| 1488 | + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, | |
| 1489 | + 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, | |
| 1490 | + 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, | |
| 1491 | + 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, | |
| 1492 | + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, | |
| 1493 | + 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, | |
| 1494 | + 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, | |
| 1495 | + 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, | |
| 1496 | + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, | |
| 1497 | + 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, | |
| 1498 | + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, | |
| 1499 | + 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, | |
| 1500 | + 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, | |
| 1501 | + 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, | |
| 1502 | + 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, | |
| 1503 | + 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, | |
| 1504 | + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, | |
| 1505 | + 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, | |
| 1506 | + 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, | |
| 1507 | + 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, | |
| 1508 | + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, | |
| 1509 | + 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, | |
| 1510 | + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, | |
| 1511 | + 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, | |
| 1512 | + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, | |
| 1513 | + 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, | |
| 1514 | + 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, | |
| 1515 | + 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, | |
| 1516 | + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, | |
| 1517 | + 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, | |
| 1518 | + 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, | |
| 1519 | + 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, | |
| 1520 | + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, | |
| 1521 | + 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, | |
| 1522 | + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, | |
| 1523 | + 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, | |
| 1524 | + 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, | |
| 1525 | + 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, | |
| 1526 | + 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, | |
| 1527 | + 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, | |
| 1528 | + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, | |
| 1529 | + 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, | |
| 1530 | + 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, | |
| 1531 | + 0x2d02ef8d}}; | |
| 1532 | + | |
| 1533 | +local const z_word_t FAR crc_braid_big_table[][256] = { | |
| 1534 | + {0x00000000, 0x96300777, 0x2c610eee, 0xba510999, 0x19c46d07, | |
| 1535 | + 0x8ff46a70, 0x35a563e9, 0xa395649e, 0x3288db0e, 0xa4b8dc79, | |
| 1536 | + 0x1ee9d5e0, 0x88d9d297, 0x2b4cb609, 0xbd7cb17e, 0x072db8e7, | |
| 1537 | + 0x911dbf90, 0x6410b71d, 0xf220b06a, 0x4871b9f3, 0xde41be84, | |
| 1538 | + 0x7dd4da1a, 0xebe4dd6d, 0x51b5d4f4, 0xc785d383, 0x56986c13, | |
| 1539 | + 0xc0a86b64, 0x7af962fd, 0xecc9658a, 0x4f5c0114, 0xd96c0663, | |
| 1540 | + 0x633d0ffa, 0xf50d088d, 0xc8206e3b, 0x5e10694c, 0xe44160d5, | |
| 1541 | + 0x727167a2, 0xd1e4033c, 0x47d4044b, 0xfd850dd2, 0x6bb50aa5, | |
| 1542 | + 0xfaa8b535, 0x6c98b242, 0xd6c9bbdb, 0x40f9bcac, 0xe36cd832, | |
| 1543 | + 0x755cdf45, 0xcf0dd6dc, 0x593dd1ab, 0xac30d926, 0x3a00de51, | |
| 1544 | + 0x8051d7c8, 0x1661d0bf, 0xb5f4b421, 0x23c4b356, 0x9995bacf, | |
| 1545 | + 0x0fa5bdb8, 0x9eb80228, 0x0888055f, 0xb2d90cc6, 0x24e90bb1, | |
| 1546 | + 0x877c6f2f, 0x114c6858, 0xab1d61c1, 0x3d2d66b6, 0x9041dc76, | |
| 1547 | + 0x0671db01, 0xbc20d298, 0x2a10d5ef, 0x8985b171, 0x1fb5b606, | |
| 1548 | + 0xa5e4bf9f, 0x33d4b8e8, 0xa2c90778, 0x34f9000f, 0x8ea80996, | |
| 1549 | + 0x18980ee1, 0xbb0d6a7f, 0x2d3d6d08, 0x976c6491, 0x015c63e6, | |
| 1550 | + 0xf4516b6b, 0x62616c1c, 0xd8306585, 0x4e0062f2, 0xed95066c, | |
| 1551 | + 0x7ba5011b, 0xc1f40882, 0x57c40ff5, 0xc6d9b065, 0x50e9b712, | |
| 1552 | + 0xeab8be8b, 0x7c88b9fc, 0xdf1ddd62, 0x492dda15, 0xf37cd38c, | |
| 1553 | + 0x654cd4fb, 0x5861b24d, 0xce51b53a, 0x7400bca3, 0xe230bbd4, | |
| 1554 | + 0x41a5df4a, 0xd795d83d, 0x6dc4d1a4, 0xfbf4d6d3, 0x6ae96943, | |
| 1555 | + 0xfcd96e34, 0x468867ad, 0xd0b860da, 0x732d0444, 0xe51d0333, | |
| 1556 | + 0x5f4c0aaa, 0xc97c0ddd, 0x3c710550, 0xaa410227, 0x10100bbe, | |
| 1557 | + 0x86200cc9, 0x25b56857, 0xb3856f20, 0x09d466b9, 0x9fe461ce, | |
| 1558 | + 0x0ef9de5e, 0x98c9d929, 0x2298d0b0, 0xb4a8d7c7, 0x173db359, | |
| 1559 | + 0x810db42e, 0x3b5cbdb7, 0xad6cbac0, 0x2083b8ed, 0xb6b3bf9a, | |
| 1560 | + 0x0ce2b603, 0x9ad2b174, 0x3947d5ea, 0xaf77d29d, 0x1526db04, | |
| 1561 | + 0x8316dc73, 0x120b63e3, 0x843b6494, 0x3e6a6d0d, 0xa85a6a7a, | |
| 1562 | + 0x0bcf0ee4, 0x9dff0993, 0x27ae000a, 0xb19e077d, 0x44930ff0, | |
| 1563 | + 0xd2a30887, 0x68f2011e, 0xfec20669, 0x5d5762f7, 0xcb676580, | |
| 1564 | + 0x71366c19, 0xe7066b6e, 0x761bd4fe, 0xe02bd389, 0x5a7ada10, | |
| 1565 | + 0xcc4add67, 0x6fdfb9f9, 0xf9efbe8e, 0x43beb717, 0xd58eb060, | |
| 1566 | + 0xe8a3d6d6, 0x7e93d1a1, 0xc4c2d838, 0x52f2df4f, 0xf167bbd1, | |
| 1567 | + 0x6757bca6, 0xdd06b53f, 0x4b36b248, 0xda2b0dd8, 0x4c1b0aaf, | |
| 1568 | + 0xf64a0336, 0x607a0441, 0xc3ef60df, 0x55df67a8, 0xef8e6e31, | |
| 1569 | + 0x79be6946, 0x8cb361cb, 0x1a8366bc, 0xa0d26f25, 0x36e26852, | |
| 1570 | + 0x95770ccc, 0x03470bbb, 0xb9160222, 0x2f260555, 0xbe3bbac5, | |
| 1571 | + 0x280bbdb2, 0x925ab42b, 0x046ab35c, 0xa7ffd7c2, 0x31cfd0b5, | |
| 1572 | + 0x8b9ed92c, 0x1daede5b, 0xb0c2649b, 0x26f263ec, 0x9ca36a75, | |
| 1573 | + 0x0a936d02, 0xa906099c, 0x3f360eeb, 0x85670772, 0x13570005, | |
| 1574 | + 0x824abf95, 0x147ab8e2, 0xae2bb17b, 0x381bb60c, 0x9b8ed292, | |
| 1575 | + 0x0dbed5e5, 0xb7efdc7c, 0x21dfdb0b, 0xd4d2d386, 0x42e2d4f1, | |
| 1576 | + 0xf8b3dd68, 0x6e83da1f, 0xcd16be81, 0x5b26b9f6, 0xe177b06f, | |
| 1577 | + 0x7747b718, 0xe65a0888, 0x706a0fff, 0xca3b0666, 0x5c0b0111, | |
| 1578 | + 0xff9e658f, 0x69ae62f8, 0xd3ff6b61, 0x45cf6c16, 0x78e20aa0, | |
| 1579 | + 0xeed20dd7, 0x5483044e, 0xc2b30339, 0x612667a7, 0xf71660d0, | |
| 1580 | + 0x4d476949, 0xdb776e3e, 0x4a6ad1ae, 0xdc5ad6d9, 0x660bdf40, | |
| 1581 | + 0xf03bd837, 0x53aebca9, 0xc59ebbde, 0x7fcfb247, 0xe9ffb530, | |
| 1582 | + 0x1cf2bdbd, 0x8ac2baca, 0x3093b353, 0xa6a3b424, 0x0536d0ba, | |
| 1583 | + 0x9306d7cd, 0x2957de54, 0xbf67d923, 0x2e7a66b3, 0xb84a61c4, | |
| 1584 | + 0x021b685d, 0x942b6f2a, 0x37be0bb4, 0xa18e0cc3, 0x1bdf055a, | |
| 1585 | + 0x8def022d}, | |
| 1586 | + {0x00000000, 0x41311b19, 0x82623632, 0xc3532d2b, 0x04c56c64, | |
| 1587 | + 0x45f4777d, 0x86a75a56, 0xc796414f, 0x088ad9c8, 0x49bbc2d1, | |
| 1588 | + 0x8ae8effa, 0xcbd9f4e3, 0x0c4fb5ac, 0x4d7eaeb5, 0x8e2d839e, | |
| 1589 | + 0xcf1c9887, 0x5112c24a, 0x1023d953, 0xd370f478, 0x9241ef61, | |
| 1590 | + 0x55d7ae2e, 0x14e6b537, 0xd7b5981c, 0x96848305, 0x59981b82, | |
| 1591 | + 0x18a9009b, 0xdbfa2db0, 0x9acb36a9, 0x5d5d77e6, 0x1c6c6cff, | |
| 1592 | + 0xdf3f41d4, 0x9e0e5acd, 0xa2248495, 0xe3159f8c, 0x2046b2a7, | |
| 1593 | + 0x6177a9be, 0xa6e1e8f1, 0xe7d0f3e8, 0x2483dec3, 0x65b2c5da, | |
| 1594 | + 0xaaae5d5d, 0xeb9f4644, 0x28cc6b6f, 0x69fd7076, 0xae6b3139, | |
| 1595 | + 0xef5a2a20, 0x2c09070b, 0x6d381c12, 0xf33646df, 0xb2075dc6, | |
| 1596 | + 0x715470ed, 0x30656bf4, 0xf7f32abb, 0xb6c231a2, 0x75911c89, | |
| 1597 | + 0x34a00790, 0xfbbc9f17, 0xba8d840e, 0x79dea925, 0x38efb23c, | |
| 1598 | + 0xff79f373, 0xbe48e86a, 0x7d1bc541, 0x3c2ade58, 0x054f79f0, | |
| 1599 | + 0x447e62e9, 0x872d4fc2, 0xc61c54db, 0x018a1594, 0x40bb0e8d, | |
| 1600 | + 0x83e823a6, 0xc2d938bf, 0x0dc5a038, 0x4cf4bb21, 0x8fa7960a, | |
| 1601 | + 0xce968d13, 0x0900cc5c, 0x4831d745, 0x8b62fa6e, 0xca53e177, | |
| 1602 | + 0x545dbbba, 0x156ca0a3, 0xd63f8d88, 0x970e9691, 0x5098d7de, | |
| 1603 | + 0x11a9ccc7, 0xd2fae1ec, 0x93cbfaf5, 0x5cd76272, 0x1de6796b, | |
| 1604 | + 0xdeb55440, 0x9f844f59, 0x58120e16, 0x1923150f, 0xda703824, | |
| 1605 | + 0x9b41233d, 0xa76bfd65, 0xe65ae67c, 0x2509cb57, 0x6438d04e, | |
| 1606 | + 0xa3ae9101, 0xe29f8a18, 0x21cca733, 0x60fdbc2a, 0xafe124ad, | |
| 1607 | + 0xeed03fb4, 0x2d83129f, 0x6cb20986, 0xab2448c9, 0xea1553d0, | |
| 1608 | + 0x29467efb, 0x687765e2, 0xf6793f2f, 0xb7482436, 0x741b091d, | |
| 1609 | + 0x352a1204, 0xf2bc534b, 0xb38d4852, 0x70de6579, 0x31ef7e60, | |
| 1610 | + 0xfef3e6e7, 0xbfc2fdfe, 0x7c91d0d5, 0x3da0cbcc, 0xfa368a83, | |
| 1611 | + 0xbb07919a, 0x7854bcb1, 0x3965a7a8, 0x4b98833b, 0x0aa99822, | |
| 1612 | + 0xc9fab509, 0x88cbae10, 0x4f5def5f, 0x0e6cf446, 0xcd3fd96d, | |
| 1613 | + 0x8c0ec274, 0x43125af3, 0x022341ea, 0xc1706cc1, 0x804177d8, | |
| 1614 | + 0x47d73697, 0x06e62d8e, 0xc5b500a5, 0x84841bbc, 0x1a8a4171, | |
| 1615 | + 0x5bbb5a68, 0x98e87743, 0xd9d96c5a, 0x1e4f2d15, 0x5f7e360c, | |
| 1616 | + 0x9c2d1b27, 0xdd1c003e, 0x120098b9, 0x533183a0, 0x9062ae8b, | |
| 1617 | + 0xd153b592, 0x16c5f4dd, 0x57f4efc4, 0x94a7c2ef, 0xd596d9f6, | |
| 1618 | + 0xe9bc07ae, 0xa88d1cb7, 0x6bde319c, 0x2aef2a85, 0xed796bca, | |
| 1619 | + 0xac4870d3, 0x6f1b5df8, 0x2e2a46e1, 0xe136de66, 0xa007c57f, | |
| 1620 | + 0x6354e854, 0x2265f34d, 0xe5f3b202, 0xa4c2a91b, 0x67918430, | |
| 1621 | + 0x26a09f29, 0xb8aec5e4, 0xf99fdefd, 0x3accf3d6, 0x7bfde8cf, | |
| 1622 | + 0xbc6ba980, 0xfd5ab299, 0x3e099fb2, 0x7f3884ab, 0xb0241c2c, | |
| 1623 | + 0xf1150735, 0x32462a1e, 0x73773107, 0xb4e17048, 0xf5d06b51, | |
| 1624 | + 0x3683467a, 0x77b25d63, 0x4ed7facb, 0x0fe6e1d2, 0xccb5ccf9, | |
| 1625 | + 0x8d84d7e0, 0x4a1296af, 0x0b238db6, 0xc870a09d, 0x8941bb84, | |
| 1626 | + 0x465d2303, 0x076c381a, 0xc43f1531, 0x850e0e28, 0x42984f67, | |
| 1627 | + 0x03a9547e, 0xc0fa7955, 0x81cb624c, 0x1fc53881, 0x5ef42398, | |
| 1628 | + 0x9da70eb3, 0xdc9615aa, 0x1b0054e5, 0x5a314ffc, 0x996262d7, | |
| 1629 | + 0xd85379ce, 0x174fe149, 0x567efa50, 0x952dd77b, 0xd41ccc62, | |
| 1630 | + 0x138a8d2d, 0x52bb9634, 0x91e8bb1f, 0xd0d9a006, 0xecf37e5e, | |
| 1631 | + 0xadc26547, 0x6e91486c, 0x2fa05375, 0xe836123a, 0xa9070923, | |
| 1632 | + 0x6a542408, 0x2b653f11, 0xe479a796, 0xa548bc8f, 0x661b91a4, | |
| 1633 | + 0x272a8abd, 0xe0bccbf2, 0xa18dd0eb, 0x62defdc0, 0x23efe6d9, | |
| 1634 | + 0xbde1bc14, 0xfcd0a70d, 0x3f838a26, 0x7eb2913f, 0xb924d070, | |
| 1635 | + 0xf815cb69, 0x3b46e642, 0x7a77fd5b, 0xb56b65dc, 0xf45a7ec5, | |
| 1636 | + 0x370953ee, 0x763848f7, 0xb1ae09b8, 0xf09f12a1, 0x33cc3f8a, | |
| 1637 | + 0x72fd2493}, | |
| 1638 | + {0x00000000, 0x376ac201, 0x6ed48403, 0x59be4602, 0xdca80907, | |
| 1639 | + 0xebc2cb06, 0xb27c8d04, 0x85164f05, 0xb851130e, 0x8f3bd10f, | |
| 1640 | + 0xd685970d, 0xe1ef550c, 0x64f91a09, 0x5393d808, 0x0a2d9e0a, | |
| 1641 | + 0x3d475c0b, 0x70a3261c, 0x47c9e41d, 0x1e77a21f, 0x291d601e, | |
| 1642 | + 0xac0b2f1b, 0x9b61ed1a, 0xc2dfab18, 0xf5b56919, 0xc8f23512, | |
| 1643 | + 0xff98f713, 0xa626b111, 0x914c7310, 0x145a3c15, 0x2330fe14, | |
| 1644 | + 0x7a8eb816, 0x4de47a17, 0xe0464d38, 0xd72c8f39, 0x8e92c93b, | |
| 1645 | + 0xb9f80b3a, 0x3cee443f, 0x0b84863e, 0x523ac03c, 0x6550023d, | |
| 1646 | + 0x58175e36, 0x6f7d9c37, 0x36c3da35, 0x01a91834, 0x84bf5731, | |
| 1647 | + 0xb3d59530, 0xea6bd332, 0xdd011133, 0x90e56b24, 0xa78fa925, | |
| 1648 | + 0xfe31ef27, 0xc95b2d26, 0x4c4d6223, 0x7b27a022, 0x2299e620, | |
| 1649 | + 0x15f32421, 0x28b4782a, 0x1fdeba2b, 0x4660fc29, 0x710a3e28, | |
| 1650 | + 0xf41c712d, 0xc376b32c, 0x9ac8f52e, 0xada2372f, 0xc08d9a70, | |
| 1651 | + 0xf7e75871, 0xae591e73, 0x9933dc72, 0x1c259377, 0x2b4f5176, | |
| 1652 | + 0x72f11774, 0x459bd575, 0x78dc897e, 0x4fb64b7f, 0x16080d7d, | |
| 1653 | + 0x2162cf7c, 0xa4748079, 0x931e4278, 0xcaa0047a, 0xfdcac67b, | |
| 1654 | + 0xb02ebc6c, 0x87447e6d, 0xdefa386f, 0xe990fa6e, 0x6c86b56b, | |
| 1655 | + 0x5bec776a, 0x02523168, 0x3538f369, 0x087faf62, 0x3f156d63, | |
| 1656 | + 0x66ab2b61, 0x51c1e960, 0xd4d7a665, 0xe3bd6464, 0xba032266, | |
| 1657 | + 0x8d69e067, 0x20cbd748, 0x17a11549, 0x4e1f534b, 0x7975914a, | |
| 1658 | + 0xfc63de4f, 0xcb091c4e, 0x92b75a4c, 0xa5dd984d, 0x989ac446, | |
| 1659 | + 0xaff00647, 0xf64e4045, 0xc1248244, 0x4432cd41, 0x73580f40, | |
| 1660 | + 0x2ae64942, 0x1d8c8b43, 0x5068f154, 0x67023355, 0x3ebc7557, | |
| 1661 | + 0x09d6b756, 0x8cc0f853, 0xbbaa3a52, 0xe2147c50, 0xd57ebe51, | |
| 1662 | + 0xe839e25a, 0xdf53205b, 0x86ed6659, 0xb187a458, 0x3491eb5d, | |
| 1663 | + 0x03fb295c, 0x5a456f5e, 0x6d2fad5f, 0x801b35e1, 0xb771f7e0, | |
| 1664 | + 0xeecfb1e2, 0xd9a573e3, 0x5cb33ce6, 0x6bd9fee7, 0x3267b8e5, | |
| 1665 | + 0x050d7ae4, 0x384a26ef, 0x0f20e4ee, 0x569ea2ec, 0x61f460ed, | |
| 1666 | + 0xe4e22fe8, 0xd388ede9, 0x8a36abeb, 0xbd5c69ea, 0xf0b813fd, | |
| 1667 | + 0xc7d2d1fc, 0x9e6c97fe, 0xa90655ff, 0x2c101afa, 0x1b7ad8fb, | |
| 1668 | + 0x42c49ef9, 0x75ae5cf8, 0x48e900f3, 0x7f83c2f2, 0x263d84f0, | |
| 1669 | + 0x115746f1, 0x944109f4, 0xa32bcbf5, 0xfa958df7, 0xcdff4ff6, | |
| 1670 | + 0x605d78d9, 0x5737bad8, 0x0e89fcda, 0x39e33edb, 0xbcf571de, | |
| 1671 | + 0x8b9fb3df, 0xd221f5dd, 0xe54b37dc, 0xd80c6bd7, 0xef66a9d6, | |
| 1672 | + 0xb6d8efd4, 0x81b22dd5, 0x04a462d0, 0x33cea0d1, 0x6a70e6d3, | |
| 1673 | + 0x5d1a24d2, 0x10fe5ec5, 0x27949cc4, 0x7e2adac6, 0x494018c7, | |
| 1674 | + 0xcc5657c2, 0xfb3c95c3, 0xa282d3c1, 0x95e811c0, 0xa8af4dcb, | |
| 1675 | + 0x9fc58fca, 0xc67bc9c8, 0xf1110bc9, 0x740744cc, 0x436d86cd, | |
| 1676 | + 0x1ad3c0cf, 0x2db902ce, 0x4096af91, 0x77fc6d90, 0x2e422b92, | |
| 1677 | + 0x1928e993, 0x9c3ea696, 0xab546497, 0xf2ea2295, 0xc580e094, | |
| 1678 | + 0xf8c7bc9f, 0xcfad7e9e, 0x9613389c, 0xa179fa9d, 0x246fb598, | |
| 1679 | + 0x13057799, 0x4abb319b, 0x7dd1f39a, 0x3035898d, 0x075f4b8c, | |
| 1680 | + 0x5ee10d8e, 0x698bcf8f, 0xec9d808a, 0xdbf7428b, 0x82490489, | |
| 1681 | + 0xb523c688, 0x88649a83, 0xbf0e5882, 0xe6b01e80, 0xd1dadc81, | |
| 1682 | + 0x54cc9384, 0x63a65185, 0x3a181787, 0x0d72d586, 0xa0d0e2a9, | |
| 1683 | + 0x97ba20a8, 0xce0466aa, 0xf96ea4ab, 0x7c78ebae, 0x4b1229af, | |
| 1684 | + 0x12ac6fad, 0x25c6adac, 0x1881f1a7, 0x2feb33a6, 0x765575a4, | |
| 1685 | + 0x413fb7a5, 0xc429f8a0, 0xf3433aa1, 0xaafd7ca3, 0x9d97bea2, | |
| 1686 | + 0xd073c4b5, 0xe71906b4, 0xbea740b6, 0x89cd82b7, 0x0cdbcdb2, | |
| 1687 | + 0x3bb10fb3, 0x620f49b1, 0x55658bb0, 0x6822d7bb, 0x5f4815ba, | |
| 1688 | + 0x06f653b8, 0x319c91b9, 0xb48adebc, 0x83e01cbd, 0xda5e5abf, | |
| 1689 | + 0xed3498be}, | |
| 1690 | + {0x00000000, 0x6567bcb8, 0x8bc809aa, 0xeeafb512, 0x5797628f, | |
| 1691 | + 0x32f0de37, 0xdc5f6b25, 0xb938d79d, 0xef28b4c5, 0x8a4f087d, | |
| 1692 | + 0x64e0bd6f, 0x018701d7, 0xb8bfd64a, 0xddd86af2, 0x3377dfe0, | |
| 1693 | + 0x56106358, 0x9f571950, 0xfa30a5e8, 0x149f10fa, 0x71f8ac42, | |
| 1694 | + 0xc8c07bdf, 0xada7c767, 0x43087275, 0x266fcecd, 0x707fad95, | |
| 1695 | + 0x1518112d, 0xfbb7a43f, 0x9ed01887, 0x27e8cf1a, 0x428f73a2, | |
| 1696 | + 0xac20c6b0, 0xc9477a08, 0x3eaf32a0, 0x5bc88e18, 0xb5673b0a, | |
| 1697 | + 0xd00087b2, 0x6938502f, 0x0c5fec97, 0xe2f05985, 0x8797e53d, | |
| 1698 | + 0xd1878665, 0xb4e03add, 0x5a4f8fcf, 0x3f283377, 0x8610e4ea, | |
| 1699 | + 0xe3775852, 0x0dd8ed40, 0x68bf51f8, 0xa1f82bf0, 0xc49f9748, | |
| 1700 | + 0x2a30225a, 0x4f579ee2, 0xf66f497f, 0x9308f5c7, 0x7da740d5, | |
| 1701 | + 0x18c0fc6d, 0x4ed09f35, 0x2bb7238d, 0xc518969f, 0xa07f2a27, | |
| 1702 | + 0x1947fdba, 0x7c204102, 0x928ff410, 0xf7e848a8, 0x3d58149b, | |
| 1703 | + 0x583fa823, 0xb6901d31, 0xd3f7a189, 0x6acf7614, 0x0fa8caac, | |
| 1704 | + 0xe1077fbe, 0x8460c306, 0xd270a05e, 0xb7171ce6, 0x59b8a9f4, | |
| 1705 | + 0x3cdf154c, 0x85e7c2d1, 0xe0807e69, 0x0e2fcb7b, 0x6b4877c3, | |
| 1706 | + 0xa20f0dcb, 0xc768b173, 0x29c70461, 0x4ca0b8d9, 0xf5986f44, | |
| 1707 | + 0x90ffd3fc, 0x7e5066ee, 0x1b37da56, 0x4d27b90e, 0x284005b6, | |
| 1708 | + 0xc6efb0a4, 0xa3880c1c, 0x1ab0db81, 0x7fd76739, 0x9178d22b, | |
| 1709 | + 0xf41f6e93, 0x03f7263b, 0x66909a83, 0x883f2f91, 0xed589329, | |
| 1710 | + 0x546044b4, 0x3107f80c, 0xdfa84d1e, 0xbacff1a6, 0xecdf92fe, | |
| 1711 | + 0x89b82e46, 0x67179b54, 0x027027ec, 0xbb48f071, 0xde2f4cc9, | |
| 1712 | + 0x3080f9db, 0x55e74563, 0x9ca03f6b, 0xf9c783d3, 0x176836c1, | |
| 1713 | + 0x720f8a79, 0xcb375de4, 0xae50e15c, 0x40ff544e, 0x2598e8f6, | |
| 1714 | + 0x73888bae, 0x16ef3716, 0xf8408204, 0x9d273ebc, 0x241fe921, | |
| 1715 | + 0x41785599, 0xafd7e08b, 0xcab05c33, 0x3bb659ed, 0x5ed1e555, | |
| 1716 | + 0xb07e5047, 0xd519ecff, 0x6c213b62, 0x094687da, 0xe7e932c8, | |
| 1717 | + 0x828e8e70, 0xd49eed28, 0xb1f95190, 0x5f56e482, 0x3a31583a, | |
| 1718 | + 0x83098fa7, 0xe66e331f, 0x08c1860d, 0x6da63ab5, 0xa4e140bd, | |
| 1719 | + 0xc186fc05, 0x2f294917, 0x4a4ef5af, 0xf3762232, 0x96119e8a, | |
| 1720 | + 0x78be2b98, 0x1dd99720, 0x4bc9f478, 0x2eae48c0, 0xc001fdd2, | |
| 1721 | + 0xa566416a, 0x1c5e96f7, 0x79392a4f, 0x97969f5d, 0xf2f123e5, | |
| 1722 | + 0x05196b4d, 0x607ed7f5, 0x8ed162e7, 0xebb6de5f, 0x528e09c2, | |
| 1723 | + 0x37e9b57a, 0xd9460068, 0xbc21bcd0, 0xea31df88, 0x8f566330, | |
| 1724 | + 0x61f9d622, 0x049e6a9a, 0xbda6bd07, 0xd8c101bf, 0x366eb4ad, | |
| 1725 | + 0x53090815, 0x9a4e721d, 0xff29cea5, 0x11867bb7, 0x74e1c70f, | |
| 1726 | + 0xcdd91092, 0xa8beac2a, 0x46111938, 0x2376a580, 0x7566c6d8, | |
| 1727 | + 0x10017a60, 0xfeaecf72, 0x9bc973ca, 0x22f1a457, 0x479618ef, | |
| 1728 | + 0xa939adfd, 0xcc5e1145, 0x06ee4d76, 0x6389f1ce, 0x8d2644dc, | |
| 1729 | + 0xe841f864, 0x51792ff9, 0x341e9341, 0xdab12653, 0xbfd69aeb, | |
| 1730 | + 0xe9c6f9b3, 0x8ca1450b, 0x620ef019, 0x07694ca1, 0xbe519b3c, | |
| 1731 | + 0xdb362784, 0x35999296, 0x50fe2e2e, 0x99b95426, 0xfcdee89e, | |
| 1732 | + 0x12715d8c, 0x7716e134, 0xce2e36a9, 0xab498a11, 0x45e63f03, | |
| 1733 | + 0x208183bb, 0x7691e0e3, 0x13f65c5b, 0xfd59e949, 0x983e55f1, | |
| 1734 | + 0x2106826c, 0x44613ed4, 0xaace8bc6, 0xcfa9377e, 0x38417fd6, | |
| 1735 | + 0x5d26c36e, 0xb389767c, 0xd6eecac4, 0x6fd61d59, 0x0ab1a1e1, | |
| 1736 | + 0xe41e14f3, 0x8179a84b, 0xd769cb13, 0xb20e77ab, 0x5ca1c2b9, | |
| 1737 | + 0x39c67e01, 0x80fea99c, 0xe5991524, 0x0b36a036, 0x6e511c8e, | |
| 1738 | + 0xa7166686, 0xc271da3e, 0x2cde6f2c, 0x49b9d394, 0xf0810409, | |
| 1739 | + 0x95e6b8b1, 0x7b490da3, 0x1e2eb11b, 0x483ed243, 0x2d596efb, | |
| 1740 | + 0xc3f6dbe9, 0xa6916751, 0x1fa9b0cc, 0x7ace0c74, 0x9461b966, | |
| 1741 | + 0xf10605de}}; | |
| 1742 | + | |
| 1743 | +#endif | |
| 1744 | + | |
| 1745 | +#endif | |
| 1746 | + | |
| 1747 | +#if N == 2 | |
| 1748 | + | |
| 1749 | +#if W == 8 | |
| 1750 | + | |
| 1751 | +local const z_crc_t FAR crc_braid_table[][256] = { | |
| 1752 | + {0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87, | |
| 1753 | + 0x7a59dd16, 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede, | |
| 1754 | + 0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259, 0x2082f6ab, | |
| 1755 | + 0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c, | |
| 1756 | + 0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1, | |
| 1757 | + 0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7, | |
| 1758 | + 0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e, | |
| 1759 | + 0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308, | |
| 1760 | + 0x642ce432, 0xca4475a3, 0xe38cc151, 0x4de450c0, 0xb01da8b5, | |
| 1761 | + 0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3, 0x5f70d472, | |
| 1762 | + 0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07, | |
| 1763 | + 0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e, | |
| 1764 | + 0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa, | |
| 1765 | + 0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec, | |
| 1766 | + 0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6, | |
| 1767 | + 0x74a5dd47, 0x895c2532, 0x2734b4a3, 0x0efc0051, 0xa09491c0, | |
| 1768 | + 0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, 0x1c6884e3, | |
| 1769 | + 0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba, | |
| 1770 | + 0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf, | |
| 1771 | + 0x46b3af5e, 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975, | |
| 1772 | + 0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8, | |
| 1773 | + 0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde, | |
| 1774 | + 0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, 0x58c6967a, | |
| 1775 | + 0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c, | |
| 1776 | + 0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1, | |
| 1777 | + 0xd62cf140, 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65, | |
| 1778 | + 0xdb5dc897, 0x75355906, 0x88cca173, 0x26a430e2, 0x0f6c8410, | |
| 1779 | + 0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649, | |
| 1780 | + 0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a, | |
| 1781 | + 0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c, | |
| 1782 | + 0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946, | |
| 1783 | + 0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450, | |
| 1784 | + 0x4bc29689, 0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e, | |
| 1785 | + 0x319b4b9f, 0x1853ff6d, 0xb63b6efc, 0x38d109c6, 0x96b99857, | |
| 1786 | + 0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022, | |
| 1787 | + 0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5, | |
| 1788 | + 0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758, | |
| 1789 | + 0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e, | |
| 1790 | + 0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d, | |
| 1791 | + 0x5b4baffc, 0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b, | |
| 1792 | + 0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, 0xd5a1c8c6, | |
| 1793 | + 0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401, | |
| 1794 | + 0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74, | |
| 1795 | + 0x695ddde5, 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d, | |
| 1796 | + 0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa, 0x65bc6073, | |
| 1797 | + 0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65, | |
| 1798 | + 0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f, | |
| 1799 | + 0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749, | |
| 1800 | + 0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a, | |
| 1801 | + 0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033, | |
| 1802 | + 0x7728e4c1, 0xd9407550, 0x24b98d25, 0x8ad11cb4, 0xa319a846, | |
| 1803 | + 0x0d7139d7}, | |
| 1804 | + {0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563, | |
| 1805 | + 0x3387be8b, 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f, | |
| 1806 | + 0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c, 0xed731875, | |
| 1807 | + 0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536, | |
| 1808 | + 0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8, | |
| 1809 | + 0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43, | |
| 1810 | + 0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f, | |
| 1811 | + 0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184, | |
| 1812 | + 0x474cf219, 0xfeb729f1, 0xefca4388, 0x56319860, 0xcd30977a, | |
| 1813 | + 0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1, 0x755c7a39, | |
| 1814 | + 0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523, | |
| 1815 | + 0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f, | |
| 1816 | + 0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d, | |
| 1817 | + 0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6, | |
| 1818 | + 0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b, | |
| 1819 | + 0x140fdd83, 0x8f0ed299, 0x36f50971, 0x27886308, 0x9e73b8e0, | |
| 1820 | + 0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, 0x04e58151, | |
| 1821 | + 0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d, | |
| 1822 | + 0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47, | |
| 1823 | + 0xda1127af, 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a, | |
| 1824 | + 0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964, | |
| 1825 | + 0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef, | |
| 1826 | + 0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, 0xaeda6b3d, | |
| 1827 | + 0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6, | |
| 1828 | + 0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348, | |
| 1829 | + 0xfa52a8a0, 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53, | |
| 1830 | + 0xe601412a, 0x5ffa9ac2, 0xc4fb95d8, 0x7d004e30, 0x6c7d2449, | |
| 1831 | + 0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645, | |
| 1832 | + 0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4, | |
| 1833 | + 0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f, | |
| 1834 | + 0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2, | |
| 1835 | + 0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69, | |
| 1836 | + 0xc642ce25, 0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46, | |
| 1837 | + 0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, 0x09cb02a2, 0xb030d94a, | |
| 1838 | + 0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650, | |
| 1839 | + 0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13, | |
| 1840 | + 0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded, | |
| 1841 | + 0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366, | |
| 1842 | + 0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57, | |
| 1843 | + 0x9501e1bf, 0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc, | |
| 1844 | + 0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, 0xc1892222, | |
| 1845 | + 0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61, | |
| 1846 | + 0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b, | |
| 1847 | + 0x5b1f1b93, 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277, | |
| 1848 | + 0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714, 0x0cb9b558, | |
| 1849 | + 0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3, | |
| 1850 | + 0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e, | |
| 1851 | + 0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5, | |
| 1852 | + 0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74, | |
| 1853 | + 0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78, | |
| 1854 | + 0x2fd45701, 0x962f8ce9, 0x0d2e83f3, 0xb4d5581b, 0xa5a83262, | |
| 1855 | + 0x1c53e98a}, | |
| 1856 | + {0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b, | |
| 1857 | + 0x84a36e6d, 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40, | |
| 1858 | + 0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b, 0xcb9b5580, | |
| 1859 | + 0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7, | |
| 1860 | + 0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a, | |
| 1861 | + 0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37, | |
| 1862 | + 0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75, | |
| 1863 | + 0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218, | |
| 1864 | + 0xfe3d66ee, 0x63328798, 0x1f53a243, 0x825c4335, 0xe791e9f5, | |
| 1865 | + 0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4, 0x36d9a5c2, | |
| 1866 | + 0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02, | |
| 1867 | + 0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59, | |
| 1868 | + 0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1, | |
| 1869 | + 0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c, | |
| 1870 | + 0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a, | |
| 1871 | + 0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, 0x8a22a271, 0x172d4307, | |
| 1872 | + 0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, 0x3ea74486, | |
| 1873 | + 0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd, | |
| 1874 | + 0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d, | |
| 1875 | + 0x719f7f6b, 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2, | |
| 1876 | + 0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f, | |
| 1877 | + 0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72, | |
| 1878 | + 0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, 0x0b0177e8, | |
| 1879 | + 0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985, | |
| 1880 | + 0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268, | |
| 1881 | + 0x5d95c31e, 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94, | |
| 1882 | + 0x621d2b4f, 0xff12ca39, 0x9adf60f9, 0x07d0818f, 0x7bb1a454, | |
| 1883 | + 0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f, | |
| 1884 | + 0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e, | |
| 1885 | + 0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3, | |
| 1886 | + 0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915, | |
| 1887 | + 0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778, | |
| 1888 | + 0x4e17973a, 0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821, | |
| 1889 | + 0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, 0x7d4e890c, 0xe041687a, | |
| 1890 | + 0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba, | |
| 1891 | + 0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d, | |
| 1892 | + 0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560, | |
| 1893 | + 0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d, | |
| 1894 | + 0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe, | |
| 1895 | + 0xbeab3dc8, 0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3, | |
| 1896 | + 0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, 0xe83f893e, | |
| 1897 | + 0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509, | |
| 1898 | + 0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9, | |
| 1899 | + 0xc1b58ebf, 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92, | |
| 1900 | + 0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089, 0x0fae60cb, | |
| 1901 | + 0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6, | |
| 1902 | + 0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50, | |
| 1903 | + 0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d, | |
| 1904 | + 0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc, | |
| 1905 | + 0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7, | |
| 1906 | + 0xbb2b863c, 0x2624674a, 0x43e9cd8a, 0xdee62cfc, 0xa2870927, | |
| 1907 | + 0x3f88e851}, | |
| 1908 | + {0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96, | |
| 1909 | + 0x1d2fb313, 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8, | |
| 1910 | + 0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e, 0xfae60cb0, | |
| 1911 | + 0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14, | |
| 1912 | + 0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7, | |
| 1913 | + 0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4, | |
| 1914 | + 0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe, | |
| 1915 | + 0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad, | |
| 1916 | + 0xe97d9898, 0x34eb411d, 0x89212dd3, 0x54b7f456, 0x29c4f20e, | |
| 1917 | + 0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f, 0xdaef34aa, | |
| 1918 | + 0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2, | |
| 1919 | + 0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c, | |
| 1920 | + 0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab, | |
| 1921 | + 0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8, | |
| 1922 | + 0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d, | |
| 1923 | + 0x5a442e08, 0x27372850, 0xfaa1f1d5, 0x476b9d1b, 0x9afd449e, | |
| 1924 | + 0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, 0xc9335de7, | |
| 1925 | + 0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99, | |
| 1926 | + 0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1, | |
| 1927 | + 0x2efae244, 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690, | |
| 1928 | + 0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933, | |
| 1929 | + 0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20, | |
| 1930 | + 0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, 0xdaa8c9cf, | |
| 1931 | + 0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc, | |
| 1932 | + 0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f, | |
| 1933 | + 0xfdd81cfa, 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92, | |
| 1934 | + 0xc036905c, 0x1da049d9, 0x60d34f81, 0xbd459604, 0x008ffaca, | |
| 1935 | + 0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4, | |
| 1936 | + 0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd, | |
| 1937 | + 0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de, | |
| 1938 | + 0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb, | |
| 1939 | + 0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8, | |
| 1940 | + 0x13146ee2, 0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474, | |
| 1941 | + 0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, 0x4917bd8f, 0x9481640a, | |
| 1942 | + 0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252, | |
| 1943 | + 0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6, | |
| 1944 | + 0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55, | |
| 1945 | + 0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846, | |
| 1946 | + 0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7, | |
| 1947 | + 0xa02dd872, 0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4, | |
| 1948 | + 0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, 0x875d0d47, | |
| 1949 | + 0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3, | |
| 1950 | + 0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb, | |
| 1951 | + 0xd493143e, 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5, | |
| 1952 | + 0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753, 0xae99ff49, | |
| 1953 | + 0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a, | |
| 1954 | + 0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f, | |
| 1955 | + 0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c, | |
| 1956 | + 0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305, | |
| 1957 | + 0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b, | |
| 1958 | + 0x20c13fb5, 0xfd57e630, 0x8024e068, 0x5db239ed, 0xe0785523, | |
| 1959 | + 0x3dee8ca6}, | |
| 1960 | + {0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f, | |
| 1961 | + 0x98a37710, 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91, | |
| 1962 | + 0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee, 0xe931d31e, | |
| 1963 | + 0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c, | |
| 1964 | + 0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02, | |
| 1965 | + 0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12, | |
| 1966 | + 0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567, | |
| 1967 | + 0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277, | |
| 1968 | + 0x1e3dad06, 0x8598e169, 0xf2063399, 0x69a37ff6, 0x1d3b9679, | |
| 1969 | + 0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604, 0x8f8c7a6b, | |
| 1970 | + 0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4, | |
| 1971 | + 0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a, | |
| 1972 | + 0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0, | |
| 1973 | + 0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0, | |
| 1974 | + 0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91, | |
| 1975 | + 0x41f113fe, 0x3569fa71, 0xaeccb61e, 0xd95264ee, 0x42f72881, | |
| 1976 | + 0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, 0x3f7d6173, | |
| 1977 | + 0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d, | |
| 1978 | + 0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912, | |
| 1979 | + 0x4eefc57d, 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8, | |
| 1980 | + 0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6, | |
| 1981 | + 0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6, | |
| 1982 | + 0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, 0xc8711f6b, | |
| 1983 | + 0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b, | |
| 1984 | + 0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75, | |
| 1985 | + 0xbae5801a, 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f, | |
| 1986 | + 0x8cfcf17f, 0x1759bd10, 0x63c1549f, 0xf86418f0, 0x8ffaca00, | |
| 1987 | + 0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee, | |
| 1988 | + 0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c, | |
| 1989 | + 0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c, | |
| 1990 | + 0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d, | |
| 1991 | + 0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d, | |
| 1992 | + 0x78f6b418, 0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67, | |
| 1993 | + 0xe055c308, 0x97cb11f8, 0x0c6e5d97, 0x7efac2e6, 0xe55f8e89, | |
| 1994 | + 0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706, | |
| 1995 | + 0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14, | |
| 1996 | + 0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a, | |
| 1997 | + 0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a, | |
| 1998 | + 0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f, | |
| 1999 | + 0x273a0ae0, 0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f, | |
| 2000 | + 0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, 0x55ae9591, | |
| 2001 | + 0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983, | |
| 2002 | + 0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c, | |
| 2003 | + 0x2824dc63, 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2, | |
| 2004 | + 0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d, 0x489503e8, | |
| 2005 | + 0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8, | |
| 2006 | + 0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89, | |
| 2007 | + 0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99, | |
| 2008 | + 0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b, | |
| 2009 | + 0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485, | |
| 2010 | + 0xaeba0675, 0x351f4a1a, 0x4187a395, 0xda22effa, 0xadbc3d0a, | |
| 2011 | + 0x36197165}, | |
| 2012 | + {0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382, | |
| 2013 | + 0x7157ac42, 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85, | |
| 2014 | + 0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07, 0x52762b06, | |
| 2015 | + 0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca, | |
| 2016 | + 0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e, | |
| 2017 | + 0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc, | |
| 2018 | + 0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616, | |
| 2019 | + 0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54, | |
| 2020 | + 0x3c5f6e92, 0xfdd1b152, 0x6433d753, 0xa5bd0893, 0x8c861d10, | |
| 2021 | + 0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c, 0xe9e494dc, | |
| 2022 | + 0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f, | |
| 2023 | + 0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58, | |
| 2024 | + 0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef, | |
| 2025 | + 0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad, | |
| 2026 | + 0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b, | |
| 2027 | + 0xf5699eab, 0xdc528b28, 0x1ddc54e8, 0x843e32e9, 0x45b0ed29, | |
| 2028 | + 0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, 0xc867aea6, | |
| 2029 | + 0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1, | |
| 2030 | + 0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622, | |
| 2031 | + 0xeb4629e2, 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039, | |
| 2032 | + 0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d, | |
| 2033 | + 0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f, | |
| 2034 | + 0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, 0xa64eeb32, | |
| 2035 | + 0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770, | |
| 2036 | + 0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034, | |
| 2037 | + 0x35b61ff4, 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f, | |
| 2038 | + 0x2f8d8c5e, 0xee03539e, 0xc738461d, 0x06b699dd, 0x9f54ffdc, | |
| 2039 | + 0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db, | |
| 2040 | + 0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154, | |
| 2041 | + 0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16, | |
| 2042 | + 0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0, | |
| 2043 | + 0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592, | |
| 2044 | + 0xf17dba48, 0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca, | |
| 2045 | + 0x802a160a, 0x19c8700b, 0xd846afcb, 0x4bbe5b0d, 0x8a3084cd, | |
| 2046 | + 0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e, | |
| 2047 | + 0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882, | |
| 2048 | + 0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6, | |
| 2049 | + 0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384, | |
| 2050 | + 0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1, | |
| 2051 | + 0x384b4a71, 0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3, | |
| 2052 | + 0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, 0xabb3beb7, | |
| 2053 | + 0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b, | |
| 2054 | + 0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8, | |
| 2055 | + 0x2664fd38, 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff, | |
| 2056 | + 0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7, | |
| 2057 | + 0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5, | |
| 2058 | + 0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23, | |
| 2059 | + 0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761, | |
| 2060 | + 0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee, | |
| 2061 | + 0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9, | |
| 2062 | + 0x6b6c3fe8, 0xaae2e028, 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a, | |
| 2063 | + 0x1a3b93aa}, | |
| 2064 | + {0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a, | |
| 2065 | + 0xe629cb44, 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca, | |
| 2066 | + 0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3, | |
| 2067 | + 0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb, | |
| 2068 | + 0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c, | |
| 2069 | + 0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58, | |
| 2070 | + 0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed, | |
| 2071 | + 0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9, | |
| 2072 | + 0x5c8a4324, 0xb348281a, 0x587f9319, 0xb7bdf827, 0x5561e35e, | |
| 2073 | + 0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238, 0x8731e906, | |
| 2074 | + 0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f, | |
| 2075 | + 0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf, | |
| 2076 | + 0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0, | |
| 2077 | + 0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4, | |
| 2078 | + 0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769, | |
| 2079 | + 0x665afc57, 0x8486e72e, 0x6b448c10, 0x80733713, 0x6fb15c2d, | |
| 2080 | + 0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, 0xb0ff2632, | |
| 2081 | + 0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82, | |
| 2082 | + 0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb, | |
| 2083 | + 0x481fddc5, 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73, | |
| 2084 | + 0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484, | |
| 2085 | + 0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0, | |
| 2086 | + 0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, 0xf2bc55a5, | |
| 2087 | + 0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1, | |
| 2088 | + 0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516, | |
| 2089 | + 0x03b70e28, 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f, | |
| 2090 | + 0xe2f0d93c, 0x0d32b202, 0xefeea97b, 0x002cc245, 0xeb1b7946, | |
| 2091 | + 0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6, | |
| 2092 | + 0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9, | |
| 2093 | + 0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad, | |
| 2094 | + 0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820, | |
| 2095 | + 0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364, | |
| 2096 | + 0xa9580ad1, 0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab, | |
| 2097 | + 0x4f71c195, 0xa4467a96, 0x4b8411a8, 0xba8f4a25, 0x554d211b, | |
| 2098 | + 0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62, | |
| 2099 | + 0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a, | |
| 2100 | + 0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd, | |
| 2101 | + 0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089, | |
| 2102 | + 0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c, | |
| 2103 | + 0x9388b5a2, 0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8, | |
| 2104 | + 0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, 0x6283ee2f, | |
| 2105 | + 0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477, | |
| 2106 | + 0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e, | |
| 2107 | + 0xbdcd9430, 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be, | |
| 2108 | + 0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4, 0x37e20d71, | |
| 2109 | + 0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635, | |
| 2110 | + 0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8, | |
| 2111 | + 0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc, | |
| 2112 | + 0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3, | |
| 2113 | + 0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753, | |
| 2114 | + 0x076e1c50, 0xe8ac776e, 0x0a706c17, 0xe5b20729, 0x0e85bc2a, | |
| 2115 | + 0xe147d714}, | |
| 2116 | + {0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c, | |
| 2117 | + 0x4a97454f, 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b, | |
| 2118 | + 0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757, 0xc8c2db92, | |
| 2119 | + 0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4, | |
| 2120 | + 0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069, | |
| 2121 | + 0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526, | |
| 2122 | + 0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25, | |
| 2123 | + 0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a, | |
| 2124 | + 0x392920bb, 0x2e5234f8, 0x17df083d, 0x00a41c7e, 0x64c571b7, | |
| 2125 | + 0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2, 0x394ad491, | |
| 2126 | + 0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958, | |
| 2127 | + 0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f, | |
| 2128 | + 0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307, | |
| 2129 | + 0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648, | |
| 2130 | + 0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999, | |
| 2131 | + 0x5cc79dda, 0x38a6f013, 0x2fdde450, 0x1650d895, 0x012bccd6, | |
| 2132 | + 0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, 0x2fbe107a, | |
| 2133 | + 0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d, | |
| 2134 | + 0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4, | |
| 2135 | + 0xadeb8ea7, 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61, | |
| 2136 | + 0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc, | |
| 2137 | + 0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3, | |
| 2138 | + 0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, 0xde55eb53, | |
| 2139 | + 0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c, | |
| 2140 | + 0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1, | |
| 2141 | + 0x01ec2482, 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c, | |
| 2142 | + 0x48a328c9, 0x5fd83c8a, 0x3bb95143, 0x2cc24500, 0x154f79c5, | |
| 2143 | + 0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92, | |
| 2144 | + 0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e, | |
| 2145 | + 0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771, | |
| 2146 | + 0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0, | |
| 2147 | + 0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def, | |
| 2148 | + 0xe4a482ec, 0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0, | |
| 2149 | + 0xae33c7a3, 0x97befb66, 0x80c5ef25, 0x5f7c20f4, 0x480734b7, | |
| 2150 | + 0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e, | |
| 2151 | + 0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58, | |
| 2152 | + 0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285, | |
| 2153 | + 0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca, | |
| 2154 | + 0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce, | |
| 2155 | + 0x814a3f8d, 0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81, | |
| 2156 | + 0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, 0x5ef3f05c, | |
| 2157 | + 0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a, | |
| 2158 | + 0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3, | |
| 2159 | + 0x70662cf0, 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4, | |
| 2160 | + 0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb, | |
| 2161 | + 0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4, | |
| 2162 | + 0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75, | |
| 2163 | + 0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a, | |
| 2164 | + 0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296, | |
| 2165 | + 0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1, | |
| 2166 | + 0x03d84904, 0x14a35d47, 0x70c2308e, 0x67b924cd, 0x5e341808, | |
| 2167 | + 0x494f0c4b}}; | |
| 2168 | + | |
| 2169 | +local const z_word_t FAR crc_braid_big_table[][256] = { | |
| 2170 | + {0x0000000000000000, 0x43147b1700000000, 0x8628f62e00000000, | |
| 2171 | + 0xc53c8d3900000000, 0x0c51ec5d00000000, 0x4f45974a00000000, | |
| 2172 | + 0x8a791a7300000000, 0xc96d616400000000, 0x18a2d8bb00000000, | |
| 2173 | + 0x5bb6a3ac00000000, 0x9e8a2e9500000000, 0xdd9e558200000000, | |
| 2174 | + 0x14f334e600000000, 0x57e74ff100000000, 0x92dbc2c800000000, | |
| 2175 | + 0xd1cfb9df00000000, 0x7142c0ac00000000, 0x3256bbbb00000000, | |
| 2176 | + 0xf76a368200000000, 0xb47e4d9500000000, 0x7d132cf100000000, | |
| 2177 | + 0x3e0757e600000000, 0xfb3bdadf00000000, 0xb82fa1c800000000, | |
| 2178 | + 0x69e0181700000000, 0x2af4630000000000, 0xefc8ee3900000000, | |
| 2179 | + 0xacdc952e00000000, 0x65b1f44a00000000, 0x26a58f5d00000000, | |
| 2180 | + 0xe399026400000000, 0xa08d797300000000, 0xa382f18200000000, | |
| 2181 | + 0xe0968a9500000000, 0x25aa07ac00000000, 0x66be7cbb00000000, | |
| 2182 | + 0xafd31ddf00000000, 0xecc766c800000000, 0x29fbebf100000000, | |
| 2183 | + 0x6aef90e600000000, 0xbb20293900000000, 0xf834522e00000000, | |
| 2184 | + 0x3d08df1700000000, 0x7e1ca40000000000, 0xb771c56400000000, | |
| 2185 | + 0xf465be7300000000, 0x3159334a00000000, 0x724d485d00000000, | |
| 2186 | + 0xd2c0312e00000000, 0x91d44a3900000000, 0x54e8c70000000000, | |
| 2187 | + 0x17fcbc1700000000, 0xde91dd7300000000, 0x9d85a66400000000, | |
| 2188 | + 0x58b92b5d00000000, 0x1bad504a00000000, 0xca62e99500000000, | |
| 2189 | + 0x8976928200000000, 0x4c4a1fbb00000000, 0x0f5e64ac00000000, | |
| 2190 | + 0xc63305c800000000, 0x85277edf00000000, 0x401bf3e600000000, | |
| 2191 | + 0x030f88f100000000, 0x070392de00000000, 0x4417e9c900000000, | |
| 2192 | + 0x812b64f000000000, 0xc23f1fe700000000, 0x0b527e8300000000, | |
| 2193 | + 0x4846059400000000, 0x8d7a88ad00000000, 0xce6ef3ba00000000, | |
| 2194 | + 0x1fa14a6500000000, 0x5cb5317200000000, 0x9989bc4b00000000, | |
| 2195 | + 0xda9dc75c00000000, 0x13f0a63800000000, 0x50e4dd2f00000000, | |
| 2196 | + 0x95d8501600000000, 0xd6cc2b0100000000, 0x7641527200000000, | |
| 2197 | + 0x3555296500000000, 0xf069a45c00000000, 0xb37ddf4b00000000, | |
| 2198 | + 0x7a10be2f00000000, 0x3904c53800000000, 0xfc38480100000000, | |
| 2199 | + 0xbf2c331600000000, 0x6ee38ac900000000, 0x2df7f1de00000000, | |
| 2200 | + 0xe8cb7ce700000000, 0xabdf07f000000000, 0x62b2669400000000, | |
| 2201 | + 0x21a61d8300000000, 0xe49a90ba00000000, 0xa78eebad00000000, | |
| 2202 | + 0xa481635c00000000, 0xe795184b00000000, 0x22a9957200000000, | |
| 2203 | + 0x61bdee6500000000, 0xa8d08f0100000000, 0xebc4f41600000000, | |
| 2204 | + 0x2ef8792f00000000, 0x6dec023800000000, 0xbc23bbe700000000, | |
| 2205 | + 0xff37c0f000000000, 0x3a0b4dc900000000, 0x791f36de00000000, | |
| 2206 | + 0xb07257ba00000000, 0xf3662cad00000000, 0x365aa19400000000, | |
| 2207 | + 0x754eda8300000000, 0xd5c3a3f000000000, 0x96d7d8e700000000, | |
| 2208 | + 0x53eb55de00000000, 0x10ff2ec900000000, 0xd9924fad00000000, | |
| 2209 | + 0x9a8634ba00000000, 0x5fbab98300000000, 0x1caec29400000000, | |
| 2210 | + 0xcd617b4b00000000, 0x8e75005c00000000, 0x4b498d6500000000, | |
| 2211 | + 0x085df67200000000, 0xc130971600000000, 0x8224ec0100000000, | |
| 2212 | + 0x4718613800000000, 0x040c1a2f00000000, 0x4f00556600000000, | |
| 2213 | + 0x0c142e7100000000, 0xc928a34800000000, 0x8a3cd85f00000000, | |
| 2214 | + 0x4351b93b00000000, 0x0045c22c00000000, 0xc5794f1500000000, | |
| 2215 | + 0x866d340200000000, 0x57a28ddd00000000, 0x14b6f6ca00000000, | |
| 2216 | + 0xd18a7bf300000000, 0x929e00e400000000, 0x5bf3618000000000, | |
| 2217 | + 0x18e71a9700000000, 0xdddb97ae00000000, 0x9ecfecb900000000, | |
| 2218 | + 0x3e4295ca00000000, 0x7d56eedd00000000, 0xb86a63e400000000, | |
| 2219 | + 0xfb7e18f300000000, 0x3213799700000000, 0x7107028000000000, | |
| 2220 | + 0xb43b8fb900000000, 0xf72ff4ae00000000, 0x26e04d7100000000, | |
| 2221 | + 0x65f4366600000000, 0xa0c8bb5f00000000, 0xe3dcc04800000000, | |
| 2222 | + 0x2ab1a12c00000000, 0x69a5da3b00000000, 0xac99570200000000, | |
| 2223 | + 0xef8d2c1500000000, 0xec82a4e400000000, 0xaf96dff300000000, | |
| 2224 | + 0x6aaa52ca00000000, 0x29be29dd00000000, 0xe0d348b900000000, | |
| 2225 | + 0xa3c733ae00000000, 0x66fbbe9700000000, 0x25efc58000000000, | |
| 2226 | + 0xf4207c5f00000000, 0xb734074800000000, 0x72088a7100000000, | |
| 2227 | + 0x311cf16600000000, 0xf871900200000000, 0xbb65eb1500000000, | |
| 2228 | + 0x7e59662c00000000, 0x3d4d1d3b00000000, 0x9dc0644800000000, | |
| 2229 | + 0xded41f5f00000000, 0x1be8926600000000, 0x58fce97100000000, | |
| 2230 | + 0x9191881500000000, 0xd285f30200000000, 0x17b97e3b00000000, | |
| 2231 | + 0x54ad052c00000000, 0x8562bcf300000000, 0xc676c7e400000000, | |
| 2232 | + 0x034a4add00000000, 0x405e31ca00000000, 0x893350ae00000000, | |
| 2233 | + 0xca272bb900000000, 0x0f1ba68000000000, 0x4c0fdd9700000000, | |
| 2234 | + 0x4803c7b800000000, 0x0b17bcaf00000000, 0xce2b319600000000, | |
| 2235 | + 0x8d3f4a8100000000, 0x44522be500000000, 0x074650f200000000, | |
| 2236 | + 0xc27addcb00000000, 0x816ea6dc00000000, 0x50a11f0300000000, | |
| 2237 | + 0x13b5641400000000, 0xd689e92d00000000, 0x959d923a00000000, | |
| 2238 | + 0x5cf0f35e00000000, 0x1fe4884900000000, 0xdad8057000000000, | |
| 2239 | + 0x99cc7e6700000000, 0x3941071400000000, 0x7a557c0300000000, | |
| 2240 | + 0xbf69f13a00000000, 0xfc7d8a2d00000000, 0x3510eb4900000000, | |
| 2241 | + 0x7604905e00000000, 0xb3381d6700000000, 0xf02c667000000000, | |
| 2242 | + 0x21e3dfaf00000000, 0x62f7a4b800000000, 0xa7cb298100000000, | |
| 2243 | + 0xe4df529600000000, 0x2db233f200000000, 0x6ea648e500000000, | |
| 2244 | + 0xab9ac5dc00000000, 0xe88ebecb00000000, 0xeb81363a00000000, | |
| 2245 | + 0xa8954d2d00000000, 0x6da9c01400000000, 0x2ebdbb0300000000, | |
| 2246 | + 0xe7d0da6700000000, 0xa4c4a17000000000, 0x61f82c4900000000, | |
| 2247 | + 0x22ec575e00000000, 0xf323ee8100000000, 0xb037959600000000, | |
| 2248 | + 0x750b18af00000000, 0x361f63b800000000, 0xff7202dc00000000, | |
| 2249 | + 0xbc6679cb00000000, 0x795af4f200000000, 0x3a4e8fe500000000, | |
| 2250 | + 0x9ac3f69600000000, 0xd9d78d8100000000, 0x1ceb00b800000000, | |
| 2251 | + 0x5fff7baf00000000, 0x96921acb00000000, 0xd58661dc00000000, | |
| 2252 | + 0x10baece500000000, 0x53ae97f200000000, 0x82612e2d00000000, | |
| 2253 | + 0xc175553a00000000, 0x0449d80300000000, 0x475da31400000000, | |
| 2254 | + 0x8e30c27000000000, 0xcd24b96700000000, 0x0818345e00000000, | |
| 2255 | + 0x4b0c4f4900000000}, | |
| 2256 | + {0x0000000000000000, 0x3e6bc2ef00000000, 0x3dd0f50400000000, | |
| 2257 | + 0x03bb37eb00000000, 0x7aa0eb0900000000, 0x44cb29e600000000, | |
| 2258 | + 0x47701e0d00000000, 0x791bdce200000000, 0xf440d71300000000, | |
| 2259 | + 0xca2b15fc00000000, 0xc990221700000000, 0xf7fbe0f800000000, | |
| 2260 | + 0x8ee03c1a00000000, 0xb08bfef500000000, 0xb330c91e00000000, | |
| 2261 | + 0x8d5b0bf100000000, 0xe881ae2700000000, 0xd6ea6cc800000000, | |
| 2262 | + 0xd5515b2300000000, 0xeb3a99cc00000000, 0x9221452e00000000, | |
| 2263 | + 0xac4a87c100000000, 0xaff1b02a00000000, 0x919a72c500000000, | |
| 2264 | + 0x1cc1793400000000, 0x22aabbdb00000000, 0x21118c3000000000, | |
| 2265 | + 0x1f7a4edf00000000, 0x6661923d00000000, 0x580a50d200000000, | |
| 2266 | + 0x5bb1673900000000, 0x65daa5d600000000, 0xd0035d4f00000000, | |
| 2267 | + 0xee689fa000000000, 0xedd3a84b00000000, 0xd3b86aa400000000, | |
| 2268 | + 0xaaa3b64600000000, 0x94c874a900000000, 0x9773434200000000, | |
| 2269 | + 0xa91881ad00000000, 0x24438a5c00000000, 0x1a2848b300000000, | |
| 2270 | + 0x19937f5800000000, 0x27f8bdb700000000, 0x5ee3615500000000, | |
| 2271 | + 0x6088a3ba00000000, 0x6333945100000000, 0x5d5856be00000000, | |
| 2272 | + 0x3882f36800000000, 0x06e9318700000000, 0x0552066c00000000, | |
| 2273 | + 0x3b39c48300000000, 0x4222186100000000, 0x7c49da8e00000000, | |
| 2274 | + 0x7ff2ed6500000000, 0x41992f8a00000000, 0xccc2247b00000000, | |
| 2275 | + 0xf2a9e69400000000, 0xf112d17f00000000, 0xcf79139000000000, | |
| 2276 | + 0xb662cf7200000000, 0x88090d9d00000000, 0x8bb23a7600000000, | |
| 2277 | + 0xb5d9f89900000000, 0xa007ba9e00000000, 0x9e6c787100000000, | |
| 2278 | + 0x9dd74f9a00000000, 0xa3bc8d7500000000, 0xdaa7519700000000, | |
| 2279 | + 0xe4cc937800000000, 0xe777a49300000000, 0xd91c667c00000000, | |
| 2280 | + 0x54476d8d00000000, 0x6a2caf6200000000, 0x6997988900000000, | |
| 2281 | + 0x57fc5a6600000000, 0x2ee7868400000000, 0x108c446b00000000, | |
| 2282 | + 0x1337738000000000, 0x2d5cb16f00000000, 0x488614b900000000, | |
| 2283 | + 0x76edd65600000000, 0x7556e1bd00000000, 0x4b3d235200000000, | |
| 2284 | + 0x3226ffb000000000, 0x0c4d3d5f00000000, 0x0ff60ab400000000, | |
| 2285 | + 0x319dc85b00000000, 0xbcc6c3aa00000000, 0x82ad014500000000, | |
| 2286 | + 0x811636ae00000000, 0xbf7df44100000000, 0xc66628a300000000, | |
| 2287 | + 0xf80dea4c00000000, 0xfbb6dda700000000, 0xc5dd1f4800000000, | |
| 2288 | + 0x7004e7d100000000, 0x4e6f253e00000000, 0x4dd412d500000000, | |
| 2289 | + 0x73bfd03a00000000, 0x0aa40cd800000000, 0x34cfce3700000000, | |
| 2290 | + 0x3774f9dc00000000, 0x091f3b3300000000, 0x844430c200000000, | |
| 2291 | + 0xba2ff22d00000000, 0xb994c5c600000000, 0x87ff072900000000, | |
| 2292 | + 0xfee4dbcb00000000, 0xc08f192400000000, 0xc3342ecf00000000, | |
| 2293 | + 0xfd5fec2000000000, 0x988549f600000000, 0xa6ee8b1900000000, | |
| 2294 | + 0xa555bcf200000000, 0x9b3e7e1d00000000, 0xe225a2ff00000000, | |
| 2295 | + 0xdc4e601000000000, 0xdff557fb00000000, 0xe19e951400000000, | |
| 2296 | + 0x6cc59ee500000000, 0x52ae5c0a00000000, 0x51156be100000000, | |
| 2297 | + 0x6f7ea90e00000000, 0x166575ec00000000, 0x280eb70300000000, | |
| 2298 | + 0x2bb580e800000000, 0x15de420700000000, 0x010905e600000000, | |
| 2299 | + 0x3f62c70900000000, 0x3cd9f0e200000000, 0x02b2320d00000000, | |
| 2300 | + 0x7ba9eeef00000000, 0x45c22c0000000000, 0x46791beb00000000, | |
| 2301 | + 0x7812d90400000000, 0xf549d2f500000000, 0xcb22101a00000000, | |
| 2302 | + 0xc89927f100000000, 0xf6f2e51e00000000, 0x8fe939fc00000000, | |
| 2303 | + 0xb182fb1300000000, 0xb239ccf800000000, 0x8c520e1700000000, | |
| 2304 | + 0xe988abc100000000, 0xd7e3692e00000000, 0xd4585ec500000000, | |
| 2305 | + 0xea339c2a00000000, 0x932840c800000000, 0xad43822700000000, | |
| 2306 | + 0xaef8b5cc00000000, 0x9093772300000000, 0x1dc87cd200000000, | |
| 2307 | + 0x23a3be3d00000000, 0x201889d600000000, 0x1e734b3900000000, | |
| 2308 | + 0x676897db00000000, 0x5903553400000000, 0x5ab862df00000000, | |
| 2309 | + 0x64d3a03000000000, 0xd10a58a900000000, 0xef619a4600000000, | |
| 2310 | + 0xecdaadad00000000, 0xd2b16f4200000000, 0xabaab3a000000000, | |
| 2311 | + 0x95c1714f00000000, 0x967a46a400000000, 0xa811844b00000000, | |
| 2312 | + 0x254a8fba00000000, 0x1b214d5500000000, 0x189a7abe00000000, | |
| 2313 | + 0x26f1b85100000000, 0x5fea64b300000000, 0x6181a65c00000000, | |
| 2314 | + 0x623a91b700000000, 0x5c51535800000000, 0x398bf68e00000000, | |
| 2315 | + 0x07e0346100000000, 0x045b038a00000000, 0x3a30c16500000000, | |
| 2316 | + 0x432b1d8700000000, 0x7d40df6800000000, 0x7efbe88300000000, | |
| 2317 | + 0x40902a6c00000000, 0xcdcb219d00000000, 0xf3a0e37200000000, | |
| 2318 | + 0xf01bd49900000000, 0xce70167600000000, 0xb76bca9400000000, | |
| 2319 | + 0x8900087b00000000, 0x8abb3f9000000000, 0xb4d0fd7f00000000, | |
| 2320 | + 0xa10ebf7800000000, 0x9f657d9700000000, 0x9cde4a7c00000000, | |
| 2321 | + 0xa2b5889300000000, 0xdbae547100000000, 0xe5c5969e00000000, | |
| 2322 | + 0xe67ea17500000000, 0xd815639a00000000, 0x554e686b00000000, | |
| 2323 | + 0x6b25aa8400000000, 0x689e9d6f00000000, 0x56f55f8000000000, | |
| 2324 | + 0x2fee836200000000, 0x1185418d00000000, 0x123e766600000000, | |
| 2325 | + 0x2c55b48900000000, 0x498f115f00000000, 0x77e4d3b000000000, | |
| 2326 | + 0x745fe45b00000000, 0x4a3426b400000000, 0x332ffa5600000000, | |
| 2327 | + 0x0d4438b900000000, 0x0eff0f5200000000, 0x3094cdbd00000000, | |
| 2328 | + 0xbdcfc64c00000000, 0x83a404a300000000, 0x801f334800000000, | |
| 2329 | + 0xbe74f1a700000000, 0xc76f2d4500000000, 0xf904efaa00000000, | |
| 2330 | + 0xfabfd84100000000, 0xc4d41aae00000000, 0x710de23700000000, | |
| 2331 | + 0x4f6620d800000000, 0x4cdd173300000000, 0x72b6d5dc00000000, | |
| 2332 | + 0x0bad093e00000000, 0x35c6cbd100000000, 0x367dfc3a00000000, | |
| 2333 | + 0x08163ed500000000, 0x854d352400000000, 0xbb26f7cb00000000, | |
| 2334 | + 0xb89dc02000000000, 0x86f602cf00000000, 0xffedde2d00000000, | |
| 2335 | + 0xc1861cc200000000, 0xc23d2b2900000000, 0xfc56e9c600000000, | |
| 2336 | + 0x998c4c1000000000, 0xa7e78eff00000000, 0xa45cb91400000000, | |
| 2337 | + 0x9a377bfb00000000, 0xe32ca71900000000, 0xdd4765f600000000, | |
| 2338 | + 0xdefc521d00000000, 0xe09790f200000000, 0x6dcc9b0300000000, | |
| 2339 | + 0x53a759ec00000000, 0x501c6e0700000000, 0x6e77ace800000000, | |
| 2340 | + 0x176c700a00000000, 0x2907b2e500000000, 0x2abc850e00000000, | |
| 2341 | + 0x14d747e100000000}, | |
| 2342 | + {0x0000000000000000, 0xc0df8ec100000000, 0xc1b96c5800000000, | |
| 2343 | + 0x0166e29900000000, 0x8273d9b000000000, 0x42ac577100000000, | |
| 2344 | + 0x43cab5e800000000, 0x83153b2900000000, 0x45e1c3ba00000000, | |
| 2345 | + 0x853e4d7b00000000, 0x8458afe200000000, 0x4487212300000000, | |
| 2346 | + 0xc7921a0a00000000, 0x074d94cb00000000, 0x062b765200000000, | |
| 2347 | + 0xc6f4f89300000000, 0xcbc4f6ae00000000, 0x0b1b786f00000000, | |
| 2348 | + 0x0a7d9af600000000, 0xcaa2143700000000, 0x49b72f1e00000000, | |
| 2349 | + 0x8968a1df00000000, 0x880e434600000000, 0x48d1cd8700000000, | |
| 2350 | + 0x8e25351400000000, 0x4efabbd500000000, 0x4f9c594c00000000, | |
| 2351 | + 0x8f43d78d00000000, 0x0c56eca400000000, 0xcc89626500000000, | |
| 2352 | + 0xcdef80fc00000000, 0x0d300e3d00000000, 0xd78f9c8600000000, | |
| 2353 | + 0x1750124700000000, 0x1636f0de00000000, 0xd6e97e1f00000000, | |
| 2354 | + 0x55fc453600000000, 0x9523cbf700000000, 0x9445296e00000000, | |
| 2355 | + 0x549aa7af00000000, 0x926e5f3c00000000, 0x52b1d1fd00000000, | |
| 2356 | + 0x53d7336400000000, 0x9308bda500000000, 0x101d868c00000000, | |
| 2357 | + 0xd0c2084d00000000, 0xd1a4ead400000000, 0x117b641500000000, | |
| 2358 | + 0x1c4b6a2800000000, 0xdc94e4e900000000, 0xddf2067000000000, | |
| 2359 | + 0x1d2d88b100000000, 0x9e38b39800000000, 0x5ee73d5900000000, | |
| 2360 | + 0x5f81dfc000000000, 0x9f5e510100000000, 0x59aaa99200000000, | |
| 2361 | + 0x9975275300000000, 0x9813c5ca00000000, 0x58cc4b0b00000000, | |
| 2362 | + 0xdbd9702200000000, 0x1b06fee300000000, 0x1a601c7a00000000, | |
| 2363 | + 0xdabf92bb00000000, 0xef1948d600000000, 0x2fc6c61700000000, | |
| 2364 | + 0x2ea0248e00000000, 0xee7faa4f00000000, 0x6d6a916600000000, | |
| 2365 | + 0xadb51fa700000000, 0xacd3fd3e00000000, 0x6c0c73ff00000000, | |
| 2366 | + 0xaaf88b6c00000000, 0x6a2705ad00000000, 0x6b41e73400000000, | |
| 2367 | + 0xab9e69f500000000, 0x288b52dc00000000, 0xe854dc1d00000000, | |
| 2368 | + 0xe9323e8400000000, 0x29edb04500000000, 0x24ddbe7800000000, | |
| 2369 | + 0xe40230b900000000, 0xe564d22000000000, 0x25bb5ce100000000, | |
| 2370 | + 0xa6ae67c800000000, 0x6671e90900000000, 0x67170b9000000000, | |
| 2371 | + 0xa7c8855100000000, 0x613c7dc200000000, 0xa1e3f30300000000, | |
| 2372 | + 0xa085119a00000000, 0x605a9f5b00000000, 0xe34fa47200000000, | |
| 2373 | + 0x23902ab300000000, 0x22f6c82a00000000, 0xe22946eb00000000, | |
| 2374 | + 0x3896d45000000000, 0xf8495a9100000000, 0xf92fb80800000000, | |
| 2375 | + 0x39f036c900000000, 0xbae50de000000000, 0x7a3a832100000000, | |
| 2376 | + 0x7b5c61b800000000, 0xbb83ef7900000000, 0x7d7717ea00000000, | |
| 2377 | + 0xbda8992b00000000, 0xbcce7bb200000000, 0x7c11f57300000000, | |
| 2378 | + 0xff04ce5a00000000, 0x3fdb409b00000000, 0x3ebda20200000000, | |
| 2379 | + 0xfe622cc300000000, 0xf35222fe00000000, 0x338dac3f00000000, | |
| 2380 | + 0x32eb4ea600000000, 0xf234c06700000000, 0x7121fb4e00000000, | |
| 2381 | + 0xb1fe758f00000000, 0xb098971600000000, 0x704719d700000000, | |
| 2382 | + 0xb6b3e14400000000, 0x766c6f8500000000, 0x770a8d1c00000000, | |
| 2383 | + 0xb7d503dd00000000, 0x34c038f400000000, 0xf41fb63500000000, | |
| 2384 | + 0xf57954ac00000000, 0x35a6da6d00000000, 0x9f35e17700000000, | |
| 2385 | + 0x5fea6fb600000000, 0x5e8c8d2f00000000, 0x9e5303ee00000000, | |
| 2386 | + 0x1d4638c700000000, 0xdd99b60600000000, 0xdcff549f00000000, | |
| 2387 | + 0x1c20da5e00000000, 0xdad422cd00000000, 0x1a0bac0c00000000, | |
| 2388 | + 0x1b6d4e9500000000, 0xdbb2c05400000000, 0x58a7fb7d00000000, | |
| 2389 | + 0x987875bc00000000, 0x991e972500000000, 0x59c119e400000000, | |
| 2390 | + 0x54f117d900000000, 0x942e991800000000, 0x95487b8100000000, | |
| 2391 | + 0x5597f54000000000, 0xd682ce6900000000, 0x165d40a800000000, | |
| 2392 | + 0x173ba23100000000, 0xd7e42cf000000000, 0x1110d46300000000, | |
| 2393 | + 0xd1cf5aa200000000, 0xd0a9b83b00000000, 0x107636fa00000000, | |
| 2394 | + 0x93630dd300000000, 0x53bc831200000000, 0x52da618b00000000, | |
| 2395 | + 0x9205ef4a00000000, 0x48ba7df100000000, 0x8865f33000000000, | |
| 2396 | + 0x890311a900000000, 0x49dc9f6800000000, 0xcac9a44100000000, | |
| 2397 | + 0x0a162a8000000000, 0x0b70c81900000000, 0xcbaf46d800000000, | |
| 2398 | + 0x0d5bbe4b00000000, 0xcd84308a00000000, 0xcce2d21300000000, | |
| 2399 | + 0x0c3d5cd200000000, 0x8f2867fb00000000, 0x4ff7e93a00000000, | |
| 2400 | + 0x4e910ba300000000, 0x8e4e856200000000, 0x837e8b5f00000000, | |
| 2401 | + 0x43a1059e00000000, 0x42c7e70700000000, 0x821869c600000000, | |
| 2402 | + 0x010d52ef00000000, 0xc1d2dc2e00000000, 0xc0b43eb700000000, | |
| 2403 | + 0x006bb07600000000, 0xc69f48e500000000, 0x0640c62400000000, | |
| 2404 | + 0x072624bd00000000, 0xc7f9aa7c00000000, 0x44ec915500000000, | |
| 2405 | + 0x84331f9400000000, 0x8555fd0d00000000, 0x458a73cc00000000, | |
| 2406 | + 0x702ca9a100000000, 0xb0f3276000000000, 0xb195c5f900000000, | |
| 2407 | + 0x714a4b3800000000, 0xf25f701100000000, 0x3280fed000000000, | |
| 2408 | + 0x33e61c4900000000, 0xf339928800000000, 0x35cd6a1b00000000, | |
| 2409 | + 0xf512e4da00000000, 0xf474064300000000, 0x34ab888200000000, | |
| 2410 | + 0xb7beb3ab00000000, 0x77613d6a00000000, 0x7607dff300000000, | |
| 2411 | + 0xb6d8513200000000, 0xbbe85f0f00000000, 0x7b37d1ce00000000, | |
| 2412 | + 0x7a51335700000000, 0xba8ebd9600000000, 0x399b86bf00000000, | |
| 2413 | + 0xf944087e00000000, 0xf822eae700000000, 0x38fd642600000000, | |
| 2414 | + 0xfe099cb500000000, 0x3ed6127400000000, 0x3fb0f0ed00000000, | |
| 2415 | + 0xff6f7e2c00000000, 0x7c7a450500000000, 0xbca5cbc400000000, | |
| 2416 | + 0xbdc3295d00000000, 0x7d1ca79c00000000, 0xa7a3352700000000, | |
| 2417 | + 0x677cbbe600000000, 0x661a597f00000000, 0xa6c5d7be00000000, | |
| 2418 | + 0x25d0ec9700000000, 0xe50f625600000000, 0xe46980cf00000000, | |
| 2419 | + 0x24b60e0e00000000, 0xe242f69d00000000, 0x229d785c00000000, | |
| 2420 | + 0x23fb9ac500000000, 0xe324140400000000, 0x60312f2d00000000, | |
| 2421 | + 0xa0eea1ec00000000, 0xa188437500000000, 0x6157cdb400000000, | |
| 2422 | + 0x6c67c38900000000, 0xacb84d4800000000, 0xaddeafd100000000, | |
| 2423 | + 0x6d01211000000000, 0xee141a3900000000, 0x2ecb94f800000000, | |
| 2424 | + 0x2fad766100000000, 0xef72f8a000000000, 0x2986003300000000, | |
| 2425 | + 0xe9598ef200000000, 0xe83f6c6b00000000, 0x28e0e2aa00000000, | |
| 2426 | + 0xabf5d98300000000, 0x6b2a574200000000, 0x6a4cb5db00000000, | |
| 2427 | + 0xaa933b1a00000000}, | |
| 2428 | + {0x0000000000000000, 0x6f4ca59b00000000, 0x9f9e3bec00000000, | |
| 2429 | + 0xf0d29e7700000000, 0x7f3b060300000000, 0x1077a39800000000, | |
| 2430 | + 0xe0a53def00000000, 0x8fe9987400000000, 0xfe760c0600000000, | |
| 2431 | + 0x913aa99d00000000, 0x61e837ea00000000, 0x0ea4927100000000, | |
| 2432 | + 0x814d0a0500000000, 0xee01af9e00000000, 0x1ed331e900000000, | |
| 2433 | + 0x719f947200000000, 0xfced180c00000000, 0x93a1bd9700000000, | |
| 2434 | + 0x637323e000000000, 0x0c3f867b00000000, 0x83d61e0f00000000, | |
| 2435 | + 0xec9abb9400000000, 0x1c4825e300000000, 0x7304807800000000, | |
| 2436 | + 0x029b140a00000000, 0x6dd7b19100000000, 0x9d052fe600000000, | |
| 2437 | + 0xf2498a7d00000000, 0x7da0120900000000, 0x12ecb79200000000, | |
| 2438 | + 0xe23e29e500000000, 0x8d728c7e00000000, 0xf8db311800000000, | |
| 2439 | + 0x9797948300000000, 0x67450af400000000, 0x0809af6f00000000, | |
| 2440 | + 0x87e0371b00000000, 0xe8ac928000000000, 0x187e0cf700000000, | |
| 2441 | + 0x7732a96c00000000, 0x06ad3d1e00000000, 0x69e1988500000000, | |
| 2442 | + 0x993306f200000000, 0xf67fa36900000000, 0x79963b1d00000000, | |
| 2443 | + 0x16da9e8600000000, 0xe60800f100000000, 0x8944a56a00000000, | |
| 2444 | + 0x0436291400000000, 0x6b7a8c8f00000000, 0x9ba812f800000000, | |
| 2445 | + 0xf4e4b76300000000, 0x7b0d2f1700000000, 0x14418a8c00000000, | |
| 2446 | + 0xe49314fb00000000, 0x8bdfb16000000000, 0xfa40251200000000, | |
| 2447 | + 0x950c808900000000, 0x65de1efe00000000, 0x0a92bb6500000000, | |
| 2448 | + 0x857b231100000000, 0xea37868a00000000, 0x1ae518fd00000000, | |
| 2449 | + 0x75a9bd6600000000, 0xf0b7633000000000, 0x9ffbc6ab00000000, | |
| 2450 | + 0x6f2958dc00000000, 0x0065fd4700000000, 0x8f8c653300000000, | |
| 2451 | + 0xe0c0c0a800000000, 0x10125edf00000000, 0x7f5efb4400000000, | |
| 2452 | + 0x0ec16f3600000000, 0x618dcaad00000000, 0x915f54da00000000, | |
| 2453 | + 0xfe13f14100000000, 0x71fa693500000000, 0x1eb6ccae00000000, | |
| 2454 | + 0xee6452d900000000, 0x8128f74200000000, 0x0c5a7b3c00000000, | |
| 2455 | + 0x6316dea700000000, 0x93c440d000000000, 0xfc88e54b00000000, | |
| 2456 | + 0x73617d3f00000000, 0x1c2dd8a400000000, 0xecff46d300000000, | |
| 2457 | + 0x83b3e34800000000, 0xf22c773a00000000, 0x9d60d2a100000000, | |
| 2458 | + 0x6db24cd600000000, 0x02fee94d00000000, 0x8d17713900000000, | |
| 2459 | + 0xe25bd4a200000000, 0x12894ad500000000, 0x7dc5ef4e00000000, | |
| 2460 | + 0x086c522800000000, 0x6720f7b300000000, 0x97f269c400000000, | |
| 2461 | + 0xf8becc5f00000000, 0x7757542b00000000, 0x181bf1b000000000, | |
| 2462 | + 0xe8c96fc700000000, 0x8785ca5c00000000, 0xf61a5e2e00000000, | |
| 2463 | + 0x9956fbb500000000, 0x698465c200000000, 0x06c8c05900000000, | |
| 2464 | + 0x8921582d00000000, 0xe66dfdb600000000, 0x16bf63c100000000, | |
| 2465 | + 0x79f3c65a00000000, 0xf4814a2400000000, 0x9bcdefbf00000000, | |
| 2466 | + 0x6b1f71c800000000, 0x0453d45300000000, 0x8bba4c2700000000, | |
| 2467 | + 0xe4f6e9bc00000000, 0x142477cb00000000, 0x7b68d25000000000, | |
| 2468 | + 0x0af7462200000000, 0x65bbe3b900000000, 0x95697dce00000000, | |
| 2469 | + 0xfa25d85500000000, 0x75cc402100000000, 0x1a80e5ba00000000, | |
| 2470 | + 0xea527bcd00000000, 0x851ede5600000000, 0xe06fc76000000000, | |
| 2471 | + 0x8f2362fb00000000, 0x7ff1fc8c00000000, 0x10bd591700000000, | |
| 2472 | + 0x9f54c16300000000, 0xf01864f800000000, 0x00cafa8f00000000, | |
| 2473 | + 0x6f865f1400000000, 0x1e19cb6600000000, 0x71556efd00000000, | |
| 2474 | + 0x8187f08a00000000, 0xeecb551100000000, 0x6122cd6500000000, | |
| 2475 | + 0x0e6e68fe00000000, 0xfebcf68900000000, 0x91f0531200000000, | |
| 2476 | + 0x1c82df6c00000000, 0x73ce7af700000000, 0x831ce48000000000, | |
| 2477 | + 0xec50411b00000000, 0x63b9d96f00000000, 0x0cf57cf400000000, | |
| 2478 | + 0xfc27e28300000000, 0x936b471800000000, 0xe2f4d36a00000000, | |
| 2479 | + 0x8db876f100000000, 0x7d6ae88600000000, 0x12264d1d00000000, | |
| 2480 | + 0x9dcfd56900000000, 0xf28370f200000000, 0x0251ee8500000000, | |
| 2481 | + 0x6d1d4b1e00000000, 0x18b4f67800000000, 0x77f853e300000000, | |
| 2482 | + 0x872acd9400000000, 0xe866680f00000000, 0x678ff07b00000000, | |
| 2483 | + 0x08c355e000000000, 0xf811cb9700000000, 0x975d6e0c00000000, | |
| 2484 | + 0xe6c2fa7e00000000, 0x898e5fe500000000, 0x795cc19200000000, | |
| 2485 | + 0x1610640900000000, 0x99f9fc7d00000000, 0xf6b559e600000000, | |
| 2486 | + 0x0667c79100000000, 0x692b620a00000000, 0xe459ee7400000000, | |
| 2487 | + 0x8b154bef00000000, 0x7bc7d59800000000, 0x148b700300000000, | |
| 2488 | + 0x9b62e87700000000, 0xf42e4dec00000000, 0x04fcd39b00000000, | |
| 2489 | + 0x6bb0760000000000, 0x1a2fe27200000000, 0x756347e900000000, | |
| 2490 | + 0x85b1d99e00000000, 0xeafd7c0500000000, 0x6514e47100000000, | |
| 2491 | + 0x0a5841ea00000000, 0xfa8adf9d00000000, 0x95c67a0600000000, | |
| 2492 | + 0x10d8a45000000000, 0x7f9401cb00000000, 0x8f469fbc00000000, | |
| 2493 | + 0xe00a3a2700000000, 0x6fe3a25300000000, 0x00af07c800000000, | |
| 2494 | + 0xf07d99bf00000000, 0x9f313c2400000000, 0xeeaea85600000000, | |
| 2495 | + 0x81e20dcd00000000, 0x713093ba00000000, 0x1e7c362100000000, | |
| 2496 | + 0x9195ae5500000000, 0xfed90bce00000000, 0x0e0b95b900000000, | |
| 2497 | + 0x6147302200000000, 0xec35bc5c00000000, 0x837919c700000000, | |
| 2498 | + 0x73ab87b000000000, 0x1ce7222b00000000, 0x930eba5f00000000, | |
| 2499 | + 0xfc421fc400000000, 0x0c9081b300000000, 0x63dc242800000000, | |
| 2500 | + 0x1243b05a00000000, 0x7d0f15c100000000, 0x8ddd8bb600000000, | |
| 2501 | + 0xe2912e2d00000000, 0x6d78b65900000000, 0x023413c200000000, | |
| 2502 | + 0xf2e68db500000000, 0x9daa282e00000000, 0xe803954800000000, | |
| 2503 | + 0x874f30d300000000, 0x779daea400000000, 0x18d10b3f00000000, | |
| 2504 | + 0x9738934b00000000, 0xf87436d000000000, 0x08a6a8a700000000, | |
| 2505 | + 0x67ea0d3c00000000, 0x1675994e00000000, 0x79393cd500000000, | |
| 2506 | + 0x89eba2a200000000, 0xe6a7073900000000, 0x694e9f4d00000000, | |
| 2507 | + 0x06023ad600000000, 0xf6d0a4a100000000, 0x999c013a00000000, | |
| 2508 | + 0x14ee8d4400000000, 0x7ba228df00000000, 0x8b70b6a800000000, | |
| 2509 | + 0xe43c133300000000, 0x6bd58b4700000000, 0x04992edc00000000, | |
| 2510 | + 0xf44bb0ab00000000, 0x9b07153000000000, 0xea98814200000000, | |
| 2511 | + 0x85d424d900000000, 0x7506baae00000000, 0x1a4a1f3500000000, | |
| 2512 | + 0x95a3874100000000, 0xfaef22da00000000, 0x0a3dbcad00000000, | |
| 2513 | + 0x6571193600000000}, | |
| 2514 | + {0x0000000000000000, 0x85d996dd00000000, 0x4bb55c6000000000, | |
| 2515 | + 0xce6ccabd00000000, 0x966ab9c000000000, 0x13b32f1d00000000, | |
| 2516 | + 0xdddfe5a000000000, 0x5806737d00000000, 0x6dd3035a00000000, | |
| 2517 | + 0xe80a958700000000, 0x26665f3a00000000, 0xa3bfc9e700000000, | |
| 2518 | + 0xfbb9ba9a00000000, 0x7e602c4700000000, 0xb00ce6fa00000000, | |
| 2519 | + 0x35d5702700000000, 0xdaa607b400000000, 0x5f7f916900000000, | |
| 2520 | + 0x91135bd400000000, 0x14cacd0900000000, 0x4cccbe7400000000, | |
| 2521 | + 0xc91528a900000000, 0x0779e21400000000, 0x82a074c900000000, | |
| 2522 | + 0xb77504ee00000000, 0x32ac923300000000, 0xfcc0588e00000000, | |
| 2523 | + 0x7919ce5300000000, 0x211fbd2e00000000, 0xa4c62bf300000000, | |
| 2524 | + 0x6aaae14e00000000, 0xef73779300000000, 0xf54b7eb300000000, | |
| 2525 | + 0x7092e86e00000000, 0xbefe22d300000000, 0x3b27b40e00000000, | |
| 2526 | + 0x6321c77300000000, 0xe6f851ae00000000, 0x28949b1300000000, | |
| 2527 | + 0xad4d0dce00000000, 0x98987de900000000, 0x1d41eb3400000000, | |
| 2528 | + 0xd32d218900000000, 0x56f4b75400000000, 0x0ef2c42900000000, | |
| 2529 | + 0x8b2b52f400000000, 0x4547984900000000, 0xc09e0e9400000000, | |
| 2530 | + 0x2fed790700000000, 0xaa34efda00000000, 0x6458256700000000, | |
| 2531 | + 0xe181b3ba00000000, 0xb987c0c700000000, 0x3c5e561a00000000, | |
| 2532 | + 0xf2329ca700000000, 0x77eb0a7a00000000, 0x423e7a5d00000000, | |
| 2533 | + 0xc7e7ec8000000000, 0x098b263d00000000, 0x8c52b0e000000000, | |
| 2534 | + 0xd454c39d00000000, 0x518d554000000000, 0x9fe19ffd00000000, | |
| 2535 | + 0x1a38092000000000, 0xab918dbd00000000, 0x2e481b6000000000, | |
| 2536 | + 0xe024d1dd00000000, 0x65fd470000000000, 0x3dfb347d00000000, | |
| 2537 | + 0xb822a2a000000000, 0x764e681d00000000, 0xf397fec000000000, | |
| 2538 | + 0xc6428ee700000000, 0x439b183a00000000, 0x8df7d28700000000, | |
| 2539 | + 0x082e445a00000000, 0x5028372700000000, 0xd5f1a1fa00000000, | |
| 2540 | + 0x1b9d6b4700000000, 0x9e44fd9a00000000, 0x71378a0900000000, | |
| 2541 | + 0xf4ee1cd400000000, 0x3a82d66900000000, 0xbf5b40b400000000, | |
| 2542 | + 0xe75d33c900000000, 0x6284a51400000000, 0xace86fa900000000, | |
| 2543 | + 0x2931f97400000000, 0x1ce4895300000000, 0x993d1f8e00000000, | |
| 2544 | + 0x5751d53300000000, 0xd28843ee00000000, 0x8a8e309300000000, | |
| 2545 | + 0x0f57a64e00000000, 0xc13b6cf300000000, 0x44e2fa2e00000000, | |
| 2546 | + 0x5edaf30e00000000, 0xdb0365d300000000, 0x156faf6e00000000, | |
| 2547 | + 0x90b639b300000000, 0xc8b04ace00000000, 0x4d69dc1300000000, | |
| 2548 | + 0x830516ae00000000, 0x06dc807300000000, 0x3309f05400000000, | |
| 2549 | + 0xb6d0668900000000, 0x78bcac3400000000, 0xfd653ae900000000, | |
| 2550 | + 0xa563499400000000, 0x20badf4900000000, 0xeed615f400000000, | |
| 2551 | + 0x6b0f832900000000, 0x847cf4ba00000000, 0x01a5626700000000, | |
| 2552 | + 0xcfc9a8da00000000, 0x4a103e0700000000, 0x12164d7a00000000, | |
| 2553 | + 0x97cfdba700000000, 0x59a3111a00000000, 0xdc7a87c700000000, | |
| 2554 | + 0xe9aff7e000000000, 0x6c76613d00000000, 0xa21aab8000000000, | |
| 2555 | + 0x27c33d5d00000000, 0x7fc54e2000000000, 0xfa1cd8fd00000000, | |
| 2556 | + 0x3470124000000000, 0xb1a9849d00000000, 0x17256aa000000000, | |
| 2557 | + 0x92fcfc7d00000000, 0x5c9036c000000000, 0xd949a01d00000000, | |
| 2558 | + 0x814fd36000000000, 0x049645bd00000000, 0xcafa8f0000000000, | |
| 2559 | + 0x4f2319dd00000000, 0x7af669fa00000000, 0xff2fff2700000000, | |
| 2560 | + 0x3143359a00000000, 0xb49aa34700000000, 0xec9cd03a00000000, | |
| 2561 | + 0x694546e700000000, 0xa7298c5a00000000, 0x22f01a8700000000, | |
| 2562 | + 0xcd836d1400000000, 0x485afbc900000000, 0x8636317400000000, | |
| 2563 | + 0x03efa7a900000000, 0x5be9d4d400000000, 0xde30420900000000, | |
| 2564 | + 0x105c88b400000000, 0x95851e6900000000, 0xa0506e4e00000000, | |
| 2565 | + 0x2589f89300000000, 0xebe5322e00000000, 0x6e3ca4f300000000, | |
| 2566 | + 0x363ad78e00000000, 0xb3e3415300000000, 0x7d8f8bee00000000, | |
| 2567 | + 0xf8561d3300000000, 0xe26e141300000000, 0x67b782ce00000000, | |
| 2568 | + 0xa9db487300000000, 0x2c02deae00000000, 0x7404add300000000, | |
| 2569 | + 0xf1dd3b0e00000000, 0x3fb1f1b300000000, 0xba68676e00000000, | |
| 2570 | + 0x8fbd174900000000, 0x0a64819400000000, 0xc4084b2900000000, | |
| 2571 | + 0x41d1ddf400000000, 0x19d7ae8900000000, 0x9c0e385400000000, | |
| 2572 | + 0x5262f2e900000000, 0xd7bb643400000000, 0x38c813a700000000, | |
| 2573 | + 0xbd11857a00000000, 0x737d4fc700000000, 0xf6a4d91a00000000, | |
| 2574 | + 0xaea2aa6700000000, 0x2b7b3cba00000000, 0xe517f60700000000, | |
| 2575 | + 0x60ce60da00000000, 0x551b10fd00000000, 0xd0c2862000000000, | |
| 2576 | + 0x1eae4c9d00000000, 0x9b77da4000000000, 0xc371a93d00000000, | |
| 2577 | + 0x46a83fe000000000, 0x88c4f55d00000000, 0x0d1d638000000000, | |
| 2578 | + 0xbcb4e71d00000000, 0x396d71c000000000, 0xf701bb7d00000000, | |
| 2579 | + 0x72d82da000000000, 0x2ade5edd00000000, 0xaf07c80000000000, | |
| 2580 | + 0x616b02bd00000000, 0xe4b2946000000000, 0xd167e44700000000, | |
| 2581 | + 0x54be729a00000000, 0x9ad2b82700000000, 0x1f0b2efa00000000, | |
| 2582 | + 0x470d5d8700000000, 0xc2d4cb5a00000000, 0x0cb801e700000000, | |
| 2583 | + 0x8961973a00000000, 0x6612e0a900000000, 0xe3cb767400000000, | |
| 2584 | + 0x2da7bcc900000000, 0xa87e2a1400000000, 0xf078596900000000, | |
| 2585 | + 0x75a1cfb400000000, 0xbbcd050900000000, 0x3e1493d400000000, | |
| 2586 | + 0x0bc1e3f300000000, 0x8e18752e00000000, 0x4074bf9300000000, | |
| 2587 | + 0xc5ad294e00000000, 0x9dab5a3300000000, 0x1872ccee00000000, | |
| 2588 | + 0xd61e065300000000, 0x53c7908e00000000, 0x49ff99ae00000000, | |
| 2589 | + 0xcc260f7300000000, 0x024ac5ce00000000, 0x8793531300000000, | |
| 2590 | + 0xdf95206e00000000, 0x5a4cb6b300000000, 0x94207c0e00000000, | |
| 2591 | + 0x11f9ead300000000, 0x242c9af400000000, 0xa1f50c2900000000, | |
| 2592 | + 0x6f99c69400000000, 0xea40504900000000, 0xb246233400000000, | |
| 2593 | + 0x379fb5e900000000, 0xf9f37f5400000000, 0x7c2ae98900000000, | |
| 2594 | + 0x93599e1a00000000, 0x168008c700000000, 0xd8ecc27a00000000, | |
| 2595 | + 0x5d3554a700000000, 0x053327da00000000, 0x80eab10700000000, | |
| 2596 | + 0x4e867bba00000000, 0xcb5fed6700000000, 0xfe8a9d4000000000, | |
| 2597 | + 0x7b530b9d00000000, 0xb53fc12000000000, 0x30e657fd00000000, | |
| 2598 | + 0x68e0248000000000, 0xed39b25d00000000, 0x235578e000000000, | |
| 2599 | + 0xa68cee3d00000000}, | |
| 2600 | + {0x0000000000000000, 0x76e10f9d00000000, 0xadc46ee100000000, | |
| 2601 | + 0xdb25617c00000000, 0x1b8fac1900000000, 0x6d6ea38400000000, | |
| 2602 | + 0xb64bc2f800000000, 0xc0aacd6500000000, 0x361e593300000000, | |
| 2603 | + 0x40ff56ae00000000, 0x9bda37d200000000, 0xed3b384f00000000, | |
| 2604 | + 0x2d91f52a00000000, 0x5b70fab700000000, 0x80559bcb00000000, | |
| 2605 | + 0xf6b4945600000000, 0x6c3cb26600000000, 0x1addbdfb00000000, | |
| 2606 | + 0xc1f8dc8700000000, 0xb719d31a00000000, 0x77b31e7f00000000, | |
| 2607 | + 0x015211e200000000, 0xda77709e00000000, 0xac967f0300000000, | |
| 2608 | + 0x5a22eb5500000000, 0x2cc3e4c800000000, 0xf7e685b400000000, | |
| 2609 | + 0x81078a2900000000, 0x41ad474c00000000, 0x374c48d100000000, | |
| 2610 | + 0xec6929ad00000000, 0x9a88263000000000, 0xd87864cd00000000, | |
| 2611 | + 0xae996b5000000000, 0x75bc0a2c00000000, 0x035d05b100000000, | |
| 2612 | + 0xc3f7c8d400000000, 0xb516c74900000000, 0x6e33a63500000000, | |
| 2613 | + 0x18d2a9a800000000, 0xee663dfe00000000, 0x9887326300000000, | |
| 2614 | + 0x43a2531f00000000, 0x35435c8200000000, 0xf5e991e700000000, | |
| 2615 | + 0x83089e7a00000000, 0x582dff0600000000, 0x2eccf09b00000000, | |
| 2616 | + 0xb444d6ab00000000, 0xc2a5d93600000000, 0x1980b84a00000000, | |
| 2617 | + 0x6f61b7d700000000, 0xafcb7ab200000000, 0xd92a752f00000000, | |
| 2618 | + 0x020f145300000000, 0x74ee1bce00000000, 0x825a8f9800000000, | |
| 2619 | + 0xf4bb800500000000, 0x2f9ee17900000000, 0x597feee400000000, | |
| 2620 | + 0x99d5238100000000, 0xef342c1c00000000, 0x34114d6000000000, | |
| 2621 | + 0x42f042fd00000000, 0xf1f7b94100000000, 0x8716b6dc00000000, | |
| 2622 | + 0x5c33d7a000000000, 0x2ad2d83d00000000, 0xea78155800000000, | |
| 2623 | + 0x9c991ac500000000, 0x47bc7bb900000000, 0x315d742400000000, | |
| 2624 | + 0xc7e9e07200000000, 0xb108efef00000000, 0x6a2d8e9300000000, | |
| 2625 | + 0x1ccc810e00000000, 0xdc664c6b00000000, 0xaa8743f600000000, | |
| 2626 | + 0x71a2228a00000000, 0x07432d1700000000, 0x9dcb0b2700000000, | |
| 2627 | + 0xeb2a04ba00000000, 0x300f65c600000000, 0x46ee6a5b00000000, | |
| 2628 | + 0x8644a73e00000000, 0xf0a5a8a300000000, 0x2b80c9df00000000, | |
| 2629 | + 0x5d61c64200000000, 0xabd5521400000000, 0xdd345d8900000000, | |
| 2630 | + 0x06113cf500000000, 0x70f0336800000000, 0xb05afe0d00000000, | |
| 2631 | + 0xc6bbf19000000000, 0x1d9e90ec00000000, 0x6b7f9f7100000000, | |
| 2632 | + 0x298fdd8c00000000, 0x5f6ed21100000000, 0x844bb36d00000000, | |
| 2633 | + 0xf2aabcf000000000, 0x3200719500000000, 0x44e17e0800000000, | |
| 2634 | + 0x9fc41f7400000000, 0xe92510e900000000, 0x1f9184bf00000000, | |
| 2635 | + 0x69708b2200000000, 0xb255ea5e00000000, 0xc4b4e5c300000000, | |
| 2636 | + 0x041e28a600000000, 0x72ff273b00000000, 0xa9da464700000000, | |
| 2637 | + 0xdf3b49da00000000, 0x45b36fea00000000, 0x3352607700000000, | |
| 2638 | + 0xe877010b00000000, 0x9e960e9600000000, 0x5e3cc3f300000000, | |
| 2639 | + 0x28ddcc6e00000000, 0xf3f8ad1200000000, 0x8519a28f00000000, | |
| 2640 | + 0x73ad36d900000000, 0x054c394400000000, 0xde69583800000000, | |
| 2641 | + 0xa88857a500000000, 0x68229ac000000000, 0x1ec3955d00000000, | |
| 2642 | + 0xc5e6f42100000000, 0xb307fbbc00000000, 0xe2ef738300000000, | |
| 2643 | + 0x940e7c1e00000000, 0x4f2b1d6200000000, 0x39ca12ff00000000, | |
| 2644 | + 0xf960df9a00000000, 0x8f81d00700000000, 0x54a4b17b00000000, | |
| 2645 | + 0x2245bee600000000, 0xd4f12ab000000000, 0xa210252d00000000, | |
| 2646 | + 0x7935445100000000, 0x0fd44bcc00000000, 0xcf7e86a900000000, | |
| 2647 | + 0xb99f893400000000, 0x62bae84800000000, 0x145be7d500000000, | |
| 2648 | + 0x8ed3c1e500000000, 0xf832ce7800000000, 0x2317af0400000000, | |
| 2649 | + 0x55f6a09900000000, 0x955c6dfc00000000, 0xe3bd626100000000, | |
| 2650 | + 0x3898031d00000000, 0x4e790c8000000000, 0xb8cd98d600000000, | |
| 2651 | + 0xce2c974b00000000, 0x1509f63700000000, 0x63e8f9aa00000000, | |
| 2652 | + 0xa34234cf00000000, 0xd5a33b5200000000, 0x0e865a2e00000000, | |
| 2653 | + 0x786755b300000000, 0x3a97174e00000000, 0x4c7618d300000000, | |
| 2654 | + 0x975379af00000000, 0xe1b2763200000000, 0x2118bb5700000000, | |
| 2655 | + 0x57f9b4ca00000000, 0x8cdcd5b600000000, 0xfa3dda2b00000000, | |
| 2656 | + 0x0c894e7d00000000, 0x7a6841e000000000, 0xa14d209c00000000, | |
| 2657 | + 0xd7ac2f0100000000, 0x1706e26400000000, 0x61e7edf900000000, | |
| 2658 | + 0xbac28c8500000000, 0xcc23831800000000, 0x56aba52800000000, | |
| 2659 | + 0x204aaab500000000, 0xfb6fcbc900000000, 0x8d8ec45400000000, | |
| 2660 | + 0x4d24093100000000, 0x3bc506ac00000000, 0xe0e067d000000000, | |
| 2661 | + 0x9601684d00000000, 0x60b5fc1b00000000, 0x1654f38600000000, | |
| 2662 | + 0xcd7192fa00000000, 0xbb909d6700000000, 0x7b3a500200000000, | |
| 2663 | + 0x0ddb5f9f00000000, 0xd6fe3ee300000000, 0xa01f317e00000000, | |
| 2664 | + 0x1318cac200000000, 0x65f9c55f00000000, 0xbedca42300000000, | |
| 2665 | + 0xc83dabbe00000000, 0x089766db00000000, 0x7e76694600000000, | |
| 2666 | + 0xa553083a00000000, 0xd3b207a700000000, 0x250693f100000000, | |
| 2667 | + 0x53e79c6c00000000, 0x88c2fd1000000000, 0xfe23f28d00000000, | |
| 2668 | + 0x3e893fe800000000, 0x4868307500000000, 0x934d510900000000, | |
| 2669 | + 0xe5ac5e9400000000, 0x7f2478a400000000, 0x09c5773900000000, | |
| 2670 | + 0xd2e0164500000000, 0xa40119d800000000, 0x64abd4bd00000000, | |
| 2671 | + 0x124adb2000000000, 0xc96fba5c00000000, 0xbf8eb5c100000000, | |
| 2672 | + 0x493a219700000000, 0x3fdb2e0a00000000, 0xe4fe4f7600000000, | |
| 2673 | + 0x921f40eb00000000, 0x52b58d8e00000000, 0x2454821300000000, | |
| 2674 | + 0xff71e36f00000000, 0x8990ecf200000000, 0xcb60ae0f00000000, | |
| 2675 | + 0xbd81a19200000000, 0x66a4c0ee00000000, 0x1045cf7300000000, | |
| 2676 | + 0xd0ef021600000000, 0xa60e0d8b00000000, 0x7d2b6cf700000000, | |
| 2677 | + 0x0bca636a00000000, 0xfd7ef73c00000000, 0x8b9ff8a100000000, | |
| 2678 | + 0x50ba99dd00000000, 0x265b964000000000, 0xe6f15b2500000000, | |
| 2679 | + 0x901054b800000000, 0x4b3535c400000000, 0x3dd43a5900000000, | |
| 2680 | + 0xa75c1c6900000000, 0xd1bd13f400000000, 0x0a98728800000000, | |
| 2681 | + 0x7c797d1500000000, 0xbcd3b07000000000, 0xca32bfed00000000, | |
| 2682 | + 0x1117de9100000000, 0x67f6d10c00000000, 0x9142455a00000000, | |
| 2683 | + 0xe7a34ac700000000, 0x3c862bbb00000000, 0x4a67242600000000, | |
| 2684 | + 0x8acde94300000000, 0xfc2ce6de00000000, 0x270987a200000000, | |
| 2685 | + 0x51e8883f00000000}, | |
| 2686 | + {0x0000000000000000, 0xe8dbfbb900000000, 0x91b186a800000000, | |
| 2687 | + 0x796a7d1100000000, 0x63657c8a00000000, 0x8bbe873300000000, | |
| 2688 | + 0xf2d4fa2200000000, 0x1a0f019b00000000, 0x87cc89cf00000000, | |
| 2689 | + 0x6f17727600000000, 0x167d0f6700000000, 0xfea6f4de00000000, | |
| 2690 | + 0xe4a9f54500000000, 0x0c720efc00000000, 0x751873ed00000000, | |
| 2691 | + 0x9dc3885400000000, 0x4f9f624400000000, 0xa74499fd00000000, | |
| 2692 | + 0xde2ee4ec00000000, 0x36f51f5500000000, 0x2cfa1ece00000000, | |
| 2693 | + 0xc421e57700000000, 0xbd4b986600000000, 0x559063df00000000, | |
| 2694 | + 0xc853eb8b00000000, 0x2088103200000000, 0x59e26d2300000000, | |
| 2695 | + 0xb139969a00000000, 0xab36970100000000, 0x43ed6cb800000000, | |
| 2696 | + 0x3a8711a900000000, 0xd25cea1000000000, 0x9e3ec58800000000, | |
| 2697 | + 0x76e53e3100000000, 0x0f8f432000000000, 0xe754b89900000000, | |
| 2698 | + 0xfd5bb90200000000, 0x158042bb00000000, 0x6cea3faa00000000, | |
| 2699 | + 0x8431c41300000000, 0x19f24c4700000000, 0xf129b7fe00000000, | |
| 2700 | + 0x8843caef00000000, 0x6098315600000000, 0x7a9730cd00000000, | |
| 2701 | + 0x924ccb7400000000, 0xeb26b66500000000, 0x03fd4ddc00000000, | |
| 2702 | + 0xd1a1a7cc00000000, 0x397a5c7500000000, 0x4010216400000000, | |
| 2703 | + 0xa8cbdadd00000000, 0xb2c4db4600000000, 0x5a1f20ff00000000, | |
| 2704 | + 0x23755dee00000000, 0xcbaea65700000000, 0x566d2e0300000000, | |
| 2705 | + 0xbeb6d5ba00000000, 0xc7dca8ab00000000, 0x2f07531200000000, | |
| 2706 | + 0x3508528900000000, 0xddd3a93000000000, 0xa4b9d42100000000, | |
| 2707 | + 0x4c622f9800000000, 0x7d7bfbca00000000, 0x95a0007300000000, | |
| 2708 | + 0xecca7d6200000000, 0x041186db00000000, 0x1e1e874000000000, | |
| 2709 | + 0xf6c57cf900000000, 0x8faf01e800000000, 0x6774fa5100000000, | |
| 2710 | + 0xfab7720500000000, 0x126c89bc00000000, 0x6b06f4ad00000000, | |
| 2711 | + 0x83dd0f1400000000, 0x99d20e8f00000000, 0x7109f53600000000, | |
| 2712 | + 0x0863882700000000, 0xe0b8739e00000000, 0x32e4998e00000000, | |
| 2713 | + 0xda3f623700000000, 0xa3551f2600000000, 0x4b8ee49f00000000, | |
| 2714 | + 0x5181e50400000000, 0xb95a1ebd00000000, 0xc03063ac00000000, | |
| 2715 | + 0x28eb981500000000, 0xb528104100000000, 0x5df3ebf800000000, | |
| 2716 | + 0x249996e900000000, 0xcc426d5000000000, 0xd64d6ccb00000000, | |
| 2717 | + 0x3e96977200000000, 0x47fcea6300000000, 0xaf2711da00000000, | |
| 2718 | + 0xe3453e4200000000, 0x0b9ec5fb00000000, 0x72f4b8ea00000000, | |
| 2719 | + 0x9a2f435300000000, 0x802042c800000000, 0x68fbb97100000000, | |
| 2720 | + 0x1191c46000000000, 0xf94a3fd900000000, 0x6489b78d00000000, | |
| 2721 | + 0x8c524c3400000000, 0xf538312500000000, 0x1de3ca9c00000000, | |
| 2722 | + 0x07eccb0700000000, 0xef3730be00000000, 0x965d4daf00000000, | |
| 2723 | + 0x7e86b61600000000, 0xacda5c0600000000, 0x4401a7bf00000000, | |
| 2724 | + 0x3d6bdaae00000000, 0xd5b0211700000000, 0xcfbf208c00000000, | |
| 2725 | + 0x2764db3500000000, 0x5e0ea62400000000, 0xb6d55d9d00000000, | |
| 2726 | + 0x2b16d5c900000000, 0xc3cd2e7000000000, 0xbaa7536100000000, | |
| 2727 | + 0x527ca8d800000000, 0x4873a94300000000, 0xa0a852fa00000000, | |
| 2728 | + 0xd9c22feb00000000, 0x3119d45200000000, 0xbbf0874e00000000, | |
| 2729 | + 0x532b7cf700000000, 0x2a4101e600000000, 0xc29afa5f00000000, | |
| 2730 | + 0xd895fbc400000000, 0x304e007d00000000, 0x49247d6c00000000, | |
| 2731 | + 0xa1ff86d500000000, 0x3c3c0e8100000000, 0xd4e7f53800000000, | |
| 2732 | + 0xad8d882900000000, 0x4556739000000000, 0x5f59720b00000000, | |
| 2733 | + 0xb78289b200000000, 0xcee8f4a300000000, 0x26330f1a00000000, | |
| 2734 | + 0xf46fe50a00000000, 0x1cb41eb300000000, 0x65de63a200000000, | |
| 2735 | + 0x8d05981b00000000, 0x970a998000000000, 0x7fd1623900000000, | |
| 2736 | + 0x06bb1f2800000000, 0xee60e49100000000, 0x73a36cc500000000, | |
| 2737 | + 0x9b78977c00000000, 0xe212ea6d00000000, 0x0ac911d400000000, | |
| 2738 | + 0x10c6104f00000000, 0xf81debf600000000, 0x817796e700000000, | |
| 2739 | + 0x69ac6d5e00000000, 0x25ce42c600000000, 0xcd15b97f00000000, | |
| 2740 | + 0xb47fc46e00000000, 0x5ca43fd700000000, 0x46ab3e4c00000000, | |
| 2741 | + 0xae70c5f500000000, 0xd71ab8e400000000, 0x3fc1435d00000000, | |
| 2742 | + 0xa202cb0900000000, 0x4ad930b000000000, 0x33b34da100000000, | |
| 2743 | + 0xdb68b61800000000, 0xc167b78300000000, 0x29bc4c3a00000000, | |
| 2744 | + 0x50d6312b00000000, 0xb80dca9200000000, 0x6a51208200000000, | |
| 2745 | + 0x828adb3b00000000, 0xfbe0a62a00000000, 0x133b5d9300000000, | |
| 2746 | + 0x09345c0800000000, 0xe1efa7b100000000, 0x9885daa000000000, | |
| 2747 | + 0x705e211900000000, 0xed9da94d00000000, 0x054652f400000000, | |
| 2748 | + 0x7c2c2fe500000000, 0x94f7d45c00000000, 0x8ef8d5c700000000, | |
| 2749 | + 0x66232e7e00000000, 0x1f49536f00000000, 0xf792a8d600000000, | |
| 2750 | + 0xc68b7c8400000000, 0x2e50873d00000000, 0x573afa2c00000000, | |
| 2751 | + 0xbfe1019500000000, 0xa5ee000e00000000, 0x4d35fbb700000000, | |
| 2752 | + 0x345f86a600000000, 0xdc847d1f00000000, 0x4147f54b00000000, | |
| 2753 | + 0xa99c0ef200000000, 0xd0f673e300000000, 0x382d885a00000000, | |
| 2754 | + 0x222289c100000000, 0xcaf9727800000000, 0xb3930f6900000000, | |
| 2755 | + 0x5b48f4d000000000, 0x89141ec000000000, 0x61cfe57900000000, | |
| 2756 | + 0x18a5986800000000, 0xf07e63d100000000, 0xea71624a00000000, | |
| 2757 | + 0x02aa99f300000000, 0x7bc0e4e200000000, 0x931b1f5b00000000, | |
| 2758 | + 0x0ed8970f00000000, 0xe6036cb600000000, 0x9f6911a700000000, | |
| 2759 | + 0x77b2ea1e00000000, 0x6dbdeb8500000000, 0x8566103c00000000, | |
| 2760 | + 0xfc0c6d2d00000000, 0x14d7969400000000, 0x58b5b90c00000000, | |
| 2761 | + 0xb06e42b500000000, 0xc9043fa400000000, 0x21dfc41d00000000, | |
| 2762 | + 0x3bd0c58600000000, 0xd30b3e3f00000000, 0xaa61432e00000000, | |
| 2763 | + 0x42bab89700000000, 0xdf7930c300000000, 0x37a2cb7a00000000, | |
| 2764 | + 0x4ec8b66b00000000, 0xa6134dd200000000, 0xbc1c4c4900000000, | |
| 2765 | + 0x54c7b7f000000000, 0x2dadcae100000000, 0xc576315800000000, | |
| 2766 | + 0x172adb4800000000, 0xfff120f100000000, 0x869b5de000000000, | |
| 2767 | + 0x6e40a65900000000, 0x744fa7c200000000, 0x9c945c7b00000000, | |
| 2768 | + 0xe5fe216a00000000, 0x0d25dad300000000, 0x90e6528700000000, | |
| 2769 | + 0x783da93e00000000, 0x0157d42f00000000, 0xe98c2f9600000000, | |
| 2770 | + 0xf3832e0d00000000, 0x1b58d5b400000000, 0x6232a8a500000000, | |
| 2771 | + 0x8ae9531c00000000}, | |
| 2772 | + {0x0000000000000000, 0x919168ae00000000, 0x6325a08700000000, | |
| 2773 | + 0xf2b4c82900000000, 0x874c31d400000000, 0x16dd597a00000000, | |
| 2774 | + 0xe469915300000000, 0x75f8f9fd00000000, 0x4f9f137300000000, | |
| 2775 | + 0xde0e7bdd00000000, 0x2cbab3f400000000, 0xbd2bdb5a00000000, | |
| 2776 | + 0xc8d322a700000000, 0x59424a0900000000, 0xabf6822000000000, | |
| 2777 | + 0x3a67ea8e00000000, 0x9e3e27e600000000, 0x0faf4f4800000000, | |
| 2778 | + 0xfd1b876100000000, 0x6c8aefcf00000000, 0x1972163200000000, | |
| 2779 | + 0x88e37e9c00000000, 0x7a57b6b500000000, 0xebc6de1b00000000, | |
| 2780 | + 0xd1a1349500000000, 0x40305c3b00000000, 0xb284941200000000, | |
| 2781 | + 0x2315fcbc00000000, 0x56ed054100000000, 0xc77c6def00000000, | |
| 2782 | + 0x35c8a5c600000000, 0xa459cd6800000000, 0x7d7b3f1700000000, | |
| 2783 | + 0xecea57b900000000, 0x1e5e9f9000000000, 0x8fcff73e00000000, | |
| 2784 | + 0xfa370ec300000000, 0x6ba6666d00000000, 0x9912ae4400000000, | |
| 2785 | + 0x0883c6ea00000000, 0x32e42c6400000000, 0xa37544ca00000000, | |
| 2786 | + 0x51c18ce300000000, 0xc050e44d00000000, 0xb5a81db000000000, | |
| 2787 | + 0x2439751e00000000, 0xd68dbd3700000000, 0x471cd59900000000, | |
| 2788 | + 0xe34518f100000000, 0x72d4705f00000000, 0x8060b87600000000, | |
| 2789 | + 0x11f1d0d800000000, 0x6409292500000000, 0xf598418b00000000, | |
| 2790 | + 0x072c89a200000000, 0x96bde10c00000000, 0xacda0b8200000000, | |
| 2791 | + 0x3d4b632c00000000, 0xcfffab0500000000, 0x5e6ec3ab00000000, | |
| 2792 | + 0x2b963a5600000000, 0xba0752f800000000, 0x48b39ad100000000, | |
| 2793 | + 0xd922f27f00000000, 0xfaf67e2e00000000, 0x6b67168000000000, | |
| 2794 | + 0x99d3dea900000000, 0x0842b60700000000, 0x7dba4ffa00000000, | |
| 2795 | + 0xec2b275400000000, 0x1e9fef7d00000000, 0x8f0e87d300000000, | |
| 2796 | + 0xb5696d5d00000000, 0x24f805f300000000, 0xd64ccdda00000000, | |
| 2797 | + 0x47dda57400000000, 0x32255c8900000000, 0xa3b4342700000000, | |
| 2798 | + 0x5100fc0e00000000, 0xc09194a000000000, 0x64c859c800000000, | |
| 2799 | + 0xf559316600000000, 0x07edf94f00000000, 0x967c91e100000000, | |
| 2800 | + 0xe384681c00000000, 0x721500b200000000, 0x80a1c89b00000000, | |
| 2801 | + 0x1130a03500000000, 0x2b574abb00000000, 0xbac6221500000000, | |
| 2802 | + 0x4872ea3c00000000, 0xd9e3829200000000, 0xac1b7b6f00000000, | |
| 2803 | + 0x3d8a13c100000000, 0xcf3edbe800000000, 0x5eafb34600000000, | |
| 2804 | + 0x878d413900000000, 0x161c299700000000, 0xe4a8e1be00000000, | |
| 2805 | + 0x7539891000000000, 0x00c170ed00000000, 0x9150184300000000, | |
| 2806 | + 0x63e4d06a00000000, 0xf275b8c400000000, 0xc812524a00000000, | |
| 2807 | + 0x59833ae400000000, 0xab37f2cd00000000, 0x3aa69a6300000000, | |
| 2808 | + 0x4f5e639e00000000, 0xdecf0b3000000000, 0x2c7bc31900000000, | |
| 2809 | + 0xbdeaabb700000000, 0x19b366df00000000, 0x88220e7100000000, | |
| 2810 | + 0x7a96c65800000000, 0xeb07aef600000000, 0x9eff570b00000000, | |
| 2811 | + 0x0f6e3fa500000000, 0xfddaf78c00000000, 0x6c4b9f2200000000, | |
| 2812 | + 0x562c75ac00000000, 0xc7bd1d0200000000, 0x3509d52b00000000, | |
| 2813 | + 0xa498bd8500000000, 0xd160447800000000, 0x40f12cd600000000, | |
| 2814 | + 0xb245e4ff00000000, 0x23d48c5100000000, 0xf4edfd5c00000000, | |
| 2815 | + 0x657c95f200000000, 0x97c85ddb00000000, 0x0659357500000000, | |
| 2816 | + 0x73a1cc8800000000, 0xe230a42600000000, 0x10846c0f00000000, | |
| 2817 | + 0x811504a100000000, 0xbb72ee2f00000000, 0x2ae3868100000000, | |
| 2818 | + 0xd8574ea800000000, 0x49c6260600000000, 0x3c3edffb00000000, | |
| 2819 | + 0xadafb75500000000, 0x5f1b7f7c00000000, 0xce8a17d200000000, | |
| 2820 | + 0x6ad3daba00000000, 0xfb42b21400000000, 0x09f67a3d00000000, | |
| 2821 | + 0x9867129300000000, 0xed9feb6e00000000, 0x7c0e83c000000000, | |
| 2822 | + 0x8eba4be900000000, 0x1f2b234700000000, 0x254cc9c900000000, | |
| 2823 | + 0xb4dda16700000000, 0x4669694e00000000, 0xd7f801e000000000, | |
| 2824 | + 0xa200f81d00000000, 0x339190b300000000, 0xc125589a00000000, | |
| 2825 | + 0x50b4303400000000, 0x8996c24b00000000, 0x1807aae500000000, | |
| 2826 | + 0xeab362cc00000000, 0x7b220a6200000000, 0x0edaf39f00000000, | |
| 2827 | + 0x9f4b9b3100000000, 0x6dff531800000000, 0xfc6e3bb600000000, | |
| 2828 | + 0xc609d13800000000, 0x5798b99600000000, 0xa52c71bf00000000, | |
| 2829 | + 0x34bd191100000000, 0x4145e0ec00000000, 0xd0d4884200000000, | |
| 2830 | + 0x2260406b00000000, 0xb3f128c500000000, 0x17a8e5ad00000000, | |
| 2831 | + 0x86398d0300000000, 0x748d452a00000000, 0xe51c2d8400000000, | |
| 2832 | + 0x90e4d47900000000, 0x0175bcd700000000, 0xf3c174fe00000000, | |
| 2833 | + 0x62501c5000000000, 0x5837f6de00000000, 0xc9a69e7000000000, | |
| 2834 | + 0x3b12565900000000, 0xaa833ef700000000, 0xdf7bc70a00000000, | |
| 2835 | + 0x4eeaafa400000000, 0xbc5e678d00000000, 0x2dcf0f2300000000, | |
| 2836 | + 0x0e1b837200000000, 0x9f8aebdc00000000, 0x6d3e23f500000000, | |
| 2837 | + 0xfcaf4b5b00000000, 0x8957b2a600000000, 0x18c6da0800000000, | |
| 2838 | + 0xea72122100000000, 0x7be37a8f00000000, 0x4184900100000000, | |
| 2839 | + 0xd015f8af00000000, 0x22a1308600000000, 0xb330582800000000, | |
| 2840 | + 0xc6c8a1d500000000, 0x5759c97b00000000, 0xa5ed015200000000, | |
| 2841 | + 0x347c69fc00000000, 0x9025a49400000000, 0x01b4cc3a00000000, | |
| 2842 | + 0xf300041300000000, 0x62916cbd00000000, 0x1769954000000000, | |
| 2843 | + 0x86f8fdee00000000, 0x744c35c700000000, 0xe5dd5d6900000000, | |
| 2844 | + 0xdfbab7e700000000, 0x4e2bdf4900000000, 0xbc9f176000000000, | |
| 2845 | + 0x2d0e7fce00000000, 0x58f6863300000000, 0xc967ee9d00000000, | |
| 2846 | + 0x3bd326b400000000, 0xaa424e1a00000000, 0x7360bc6500000000, | |
| 2847 | + 0xe2f1d4cb00000000, 0x10451ce200000000, 0x81d4744c00000000, | |
| 2848 | + 0xf42c8db100000000, 0x65bde51f00000000, 0x97092d3600000000, | |
| 2849 | + 0x0698459800000000, 0x3cffaf1600000000, 0xad6ec7b800000000, | |
| 2850 | + 0x5fda0f9100000000, 0xce4b673f00000000, 0xbbb39ec200000000, | |
| 2851 | + 0x2a22f66c00000000, 0xd8963e4500000000, 0x490756eb00000000, | |
| 2852 | + 0xed5e9b8300000000, 0x7ccff32d00000000, 0x8e7b3b0400000000, | |
| 2853 | + 0x1fea53aa00000000, 0x6a12aa5700000000, 0xfb83c2f900000000, | |
| 2854 | + 0x09370ad000000000, 0x98a6627e00000000, 0xa2c188f000000000, | |
| 2855 | + 0x3350e05e00000000, 0xc1e4287700000000, 0x507540d900000000, | |
| 2856 | + 0x258db92400000000, 0xb41cd18a00000000, 0x46a819a300000000, | |
| 2857 | + 0xd739710d00000000}}; | |
| 2858 | + | |
| 2859 | +#else /* W == 4 */ | |
| 2860 | + | |
| 2861 | +local const z_crc_t FAR crc_braid_table[][256] = { | |
| 2862 | + {0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa, | |
| 2863 | + 0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b, | |
| 2864 | + 0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232, | |
| 2865 | + 0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8, | |
| 2866 | + 0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e, | |
| 2867 | + 0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa, | |
| 2868 | + 0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b, | |
| 2869 | + 0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f, | |
| 2870 | + 0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719, | |
| 2871 | + 0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d, 0x496753e3, | |
| 2872 | + 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa, | |
| 2873 | + 0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b, | |
| 2874 | + 0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed, | |
| 2875 | + 0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89, | |
| 2876 | + 0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25, | |
| 2877 | + 0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041, | |
| 2878 | + 0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c, | |
| 2879 | + 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed, | |
| 2880 | + 0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4, | |
| 2881 | + 0x8c06e16a, 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758, | |
| 2882 | + 0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e, | |
| 2883 | + 0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a, | |
| 2884 | + 0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, 0xee7596ed, | |
| 2885 | + 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889, | |
| 2886 | + 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df, | |
| 2887 | + 0x37558441, 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544, | |
| 2888 | + 0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d, | |
| 2889 | + 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c, | |
| 2890 | + 0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1, | |
| 2891 | + 0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95, | |
| 2892 | + 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839, | |
| 2893 | + 0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d, | |
| 2894 | + 0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976, | |
| 2895 | + 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7, | |
| 2896 | + 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be, | |
| 2897 | + 0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144, | |
| 2898 | + 0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12, | |
| 2899 | + 0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376, | |
| 2900 | + 0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a, | |
| 2901 | + 0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e, | |
| 2902 | + 0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278, | |
| 2903 | + 0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682, | |
| 2904 | + 0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b, | |
| 2905 | + 0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a, | |
| 2906 | + 0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0, 0x83d02561, | |
| 2907 | + 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05, | |
| 2908 | + 0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9, | |
| 2909 | + 0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd, | |
| 2910 | + 0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0, | |
| 2911 | + 0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61, | |
| 2912 | + 0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678, | |
| 2913 | + 0x264b06e6}, | |
| 2914 | + {0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413, | |
| 2915 | + 0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3, | |
| 2916 | + 0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d, | |
| 2917 | + 0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653, | |
| 2918 | + 0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9, | |
| 2919 | + 0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e, | |
| 2920 | + 0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5, | |
| 2921 | + 0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712, | |
| 2922 | + 0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8, | |
| 2923 | + 0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552, 0x0e14aee6, | |
| 2924 | + 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068, | |
| 2925 | + 0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8, | |
| 2926 | + 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579, | |
| 2927 | + 0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade, | |
| 2928 | + 0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37, | |
| 2929 | + 0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590, | |
| 2930 | + 0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4, | |
| 2931 | + 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64, | |
| 2932 | + 0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea, | |
| 2933 | + 0xd59d995e, 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678, | |
| 2934 | + 0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282, | |
| 2935 | + 0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25, | |
| 2936 | + 0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, 0x7bf7c102, | |
| 2937 | + 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5, | |
| 2938 | + 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f, | |
| 2939 | + 0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146, | |
| 2940 | + 0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8, | |
| 2941 | + 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08, | |
| 2942 | + 0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c, | |
| 2943 | + 0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b, | |
| 2944 | + 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972, | |
| 2945 | + 0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5, | |
| 2946 | + 0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d, | |
| 2947 | + 0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd, | |
| 2948 | + 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833, | |
| 2949 | + 0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d, | |
| 2950 | + 0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7, | |
| 2951 | + 0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60, | |
| 2952 | + 0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2, | |
| 2953 | + 0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105, | |
| 2954 | + 0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff, | |
| 2955 | + 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1, | |
| 2956 | + 0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f, | |
| 2957 | + 0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf, | |
| 2958 | + 0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac, 0x03a0a617, | |
| 2959 | + 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0, | |
| 2960 | + 0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959, | |
| 2961 | + 0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe, | |
| 2962 | + 0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca, | |
| 2963 | + 0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a, | |
| 2964 | + 0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184, | |
| 2965 | + 0x92364a30}, | |
| 2966 | + {0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216, | |
| 2967 | + 0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8, | |
| 2968 | + 0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170, | |
| 2969 | + 0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035, | |
| 2970 | + 0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6, | |
| 2971 | + 0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145, | |
| 2972 | + 0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d, | |
| 2973 | + 0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e, | |
| 2974 | + 0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d, | |
| 2975 | + 0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad, 0xcf26d408, | |
| 2976 | + 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0, | |
| 2977 | + 0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e, | |
| 2978 | + 0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c, | |
| 2979 | + 0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf, | |
| 2980 | + 0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a, | |
| 2981 | + 0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9, | |
| 2982 | + 0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1, | |
| 2983 | + 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f, | |
| 2984 | + 0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987, | |
| 2985 | + 0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4, | |
| 2986 | + 0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37, | |
| 2987 | + 0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84, | |
| 2988 | + 0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, 0x46eaacca, | |
| 2989 | + 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79, | |
| 2990 | + 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba, | |
| 2991 | + 0xb7bc1e1f, 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d, | |
| 2992 | + 0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5, | |
| 2993 | + 0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b, | |
| 2994 | + 0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643, | |
| 2995 | + 0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0, | |
| 2996 | + 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525, | |
| 2997 | + 0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496, | |
| 2998 | + 0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8, | |
| 2999 | + 0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026, | |
| 3000 | + 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e, | |
| 3001 | + 0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db, | |
| 3002 | + 0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118, | |
| 3003 | + 0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab, | |
| 3004 | + 0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf, | |
| 3005 | + 0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c, | |
| 3006 | + 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf, | |
| 3007 | + 0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a, | |
| 3008 | + 0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32, | |
| 3009 | + 0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec, | |
| 3010 | + 0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa, 0x16441b82, | |
| 3011 | + 0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31, | |
| 3012 | + 0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4, | |
| 3013 | + 0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957, | |
| 3014 | + 0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f, | |
| 3015 | + 0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1, | |
| 3016 | + 0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869, | |
| 3017 | + 0xe4c4abcc}, | |
| 3018 | + {0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0, | |
| 3019 | + 0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271, | |
| 3020 | + 0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61, | |
| 3021 | + 0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52, | |
| 3022 | + 0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43, | |
| 3023 | + 0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333, | |
| 3024 | + 0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64, | |
| 3025 | + 0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314, | |
| 3026 | + 0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205, | |
| 3027 | + 0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886, 0x9c419136, | |
| 3028 | + 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26, | |
| 3029 | + 0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997, | |
| 3030 | + 0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849, | |
| 3031 | + 0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739, | |
| 3032 | + 0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8, | |
| 3033 | + 0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98, | |
| 3034 | + 0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b, | |
| 3035 | + 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba, | |
| 3036 | + 0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa, | |
| 3037 | + 0xba43581a, 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d, | |
| 3038 | + 0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c, | |
| 3039 | + 0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc, | |
| 3040 | + 0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af, | |
| 3041 | + 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf, | |
| 3042 | + 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce, | |
| 3043 | + 0x0142247e, 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922, | |
| 3044 | + 0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532, | |
| 3045 | + 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183, | |
| 3046 | + 0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710, | |
| 3047 | + 0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860, | |
| 3048 | + 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1, | |
| 3049 | + 0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1, | |
| 3050 | + 0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956, | |
| 3051 | + 0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7, | |
| 3052 | + 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7, | |
| 3053 | + 0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4, | |
| 3054 | + 0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5, | |
| 3055 | + 0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5, | |
| 3056 | + 0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb, | |
| 3057 | + 0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb, | |
| 3058 | + 0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da, | |
| 3059 | + 0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9, | |
| 3060 | + 0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9, | |
| 3061 | + 0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48, | |
| 3062 | + 0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888, 0x28d4c7df, | |
| 3063 | + 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af, | |
| 3064 | + 0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e, | |
| 3065 | + 0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e, | |
| 3066 | + 0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d, | |
| 3067 | + 0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c, | |
| 3068 | + 0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c, | |
| 3069 | + 0xca64c78c}}; | |
| 3070 | + | |
| 3071 | +local const z_word_t FAR crc_braid_big_table[][256] = { | |
| 3072 | + {0x00000000, 0xb029603d, 0x6053c07a, 0xd07aa047, 0xc0a680f5, | |
| 3073 | + 0x708fe0c8, 0xa0f5408f, 0x10dc20b2, 0xc14b7030, 0x7162100d, | |
| 3074 | + 0xa118b04a, 0x1131d077, 0x01edf0c5, 0xb1c490f8, 0x61be30bf, | |
| 3075 | + 0xd1975082, 0x8297e060, 0x32be805d, 0xe2c4201a, 0x52ed4027, | |
| 3076 | + 0x42316095, 0xf21800a8, 0x2262a0ef, 0x924bc0d2, 0x43dc9050, | |
| 3077 | + 0xf3f5f06d, 0x238f502a, 0x93a63017, 0x837a10a5, 0x33537098, | |
| 3078 | + 0xe329d0df, 0x5300b0e2, 0x042fc1c1, 0xb406a1fc, 0x647c01bb, | |
| 3079 | + 0xd4556186, 0xc4894134, 0x74a02109, 0xa4da814e, 0x14f3e173, | |
| 3080 | + 0xc564b1f1, 0x754dd1cc, 0xa537718b, 0x151e11b6, 0x05c23104, | |
| 3081 | + 0xb5eb5139, 0x6591f17e, 0xd5b89143, 0x86b821a1, 0x3691419c, | |
| 3082 | + 0xe6ebe1db, 0x56c281e6, 0x461ea154, 0xf637c169, 0x264d612e, | |
| 3083 | + 0x96640113, 0x47f35191, 0xf7da31ac, 0x27a091eb, 0x9789f1d6, | |
| 3084 | + 0x8755d164, 0x377cb159, 0xe706111e, 0x572f7123, 0x4958f358, | |
| 3085 | + 0xf9719365, 0x290b3322, 0x9922531f, 0x89fe73ad, 0x39d71390, | |
| 3086 | + 0xe9adb3d7, 0x5984d3ea, 0x88138368, 0x383ae355, 0xe8404312, | |
| 3087 | + 0x5869232f, 0x48b5039d, 0xf89c63a0, 0x28e6c3e7, 0x98cfa3da, | |
| 3088 | + 0xcbcf1338, 0x7be67305, 0xab9cd342, 0x1bb5b37f, 0x0b6993cd, | |
| 3089 | + 0xbb40f3f0, 0x6b3a53b7, 0xdb13338a, 0x0a846308, 0xbaad0335, | |
| 3090 | + 0x6ad7a372, 0xdafec34f, 0xca22e3fd, 0x7a0b83c0, 0xaa712387, | |
| 3091 | + 0x1a5843ba, 0x4d773299, 0xfd5e52a4, 0x2d24f2e3, 0x9d0d92de, | |
| 3092 | + 0x8dd1b26c, 0x3df8d251, 0xed827216, 0x5dab122b, 0x8c3c42a9, | |
| 3093 | + 0x3c152294, 0xec6f82d3, 0x5c46e2ee, 0x4c9ac25c, 0xfcb3a261, | |
| 3094 | + 0x2cc90226, 0x9ce0621b, 0xcfe0d2f9, 0x7fc9b2c4, 0xafb31283, | |
| 3095 | + 0x1f9a72be, 0x0f46520c, 0xbf6f3231, 0x6f159276, 0xdf3cf24b, | |
| 3096 | + 0x0eaba2c9, 0xbe82c2f4, 0x6ef862b3, 0xded1028e, 0xce0d223c, | |
| 3097 | + 0x7e244201, 0xae5ee246, 0x1e77827b, 0x92b0e6b1, 0x2299868c, | |
| 3098 | + 0xf2e326cb, 0x42ca46f6, 0x52166644, 0xe23f0679, 0x3245a63e, | |
| 3099 | + 0x826cc603, 0x53fb9681, 0xe3d2f6bc, 0x33a856fb, 0x838136c6, | |
| 3100 | + 0x935d1674, 0x23747649, 0xf30ed60e, 0x4327b633, 0x102706d1, | |
| 3101 | + 0xa00e66ec, 0x7074c6ab, 0xc05da696, 0xd0818624, 0x60a8e619, | |
| 3102 | + 0xb0d2465e, 0x00fb2663, 0xd16c76e1, 0x614516dc, 0xb13fb69b, | |
| 3103 | + 0x0116d6a6, 0x11caf614, 0xa1e39629, 0x7199366e, 0xc1b05653, | |
| 3104 | + 0x969f2770, 0x26b6474d, 0xf6cce70a, 0x46e58737, 0x5639a785, | |
| 3105 | + 0xe610c7b8, 0x366a67ff, 0x864307c2, 0x57d45740, 0xe7fd377d, | |
| 3106 | + 0x3787973a, 0x87aef707, 0x9772d7b5, 0x275bb788, 0xf72117cf, | |
| 3107 | + 0x470877f2, 0x1408c710, 0xa421a72d, 0x745b076a, 0xc4726757, | |
| 3108 | + 0xd4ae47e5, 0x648727d8, 0xb4fd879f, 0x04d4e7a2, 0xd543b720, | |
| 3109 | + 0x656ad71d, 0xb510775a, 0x05391767, 0x15e537d5, 0xa5cc57e8, | |
| 3110 | + 0x75b6f7af, 0xc59f9792, 0xdbe815e9, 0x6bc175d4, 0xbbbbd593, | |
| 3111 | + 0x0b92b5ae, 0x1b4e951c, 0xab67f521, 0x7b1d5566, 0xcb34355b, | |
| 3112 | + 0x1aa365d9, 0xaa8a05e4, 0x7af0a5a3, 0xcad9c59e, 0xda05e52c, | |
| 3113 | + 0x6a2c8511, 0xba562556, 0x0a7f456b, 0x597ff589, 0xe95695b4, | |
| 3114 | + 0x392c35f3, 0x890555ce, 0x99d9757c, 0x29f01541, 0xf98ab506, | |
| 3115 | + 0x49a3d53b, 0x983485b9, 0x281de584, 0xf86745c3, 0x484e25fe, | |
| 3116 | + 0x5892054c, 0xe8bb6571, 0x38c1c536, 0x88e8a50b, 0xdfc7d428, | |
| 3117 | + 0x6feeb415, 0xbf941452, 0x0fbd746f, 0x1f6154dd, 0xaf4834e0, | |
| 3118 | + 0x7f3294a7, 0xcf1bf49a, 0x1e8ca418, 0xaea5c425, 0x7edf6462, | |
| 3119 | + 0xcef6045f, 0xde2a24ed, 0x6e0344d0, 0xbe79e497, 0x0e5084aa, | |
| 3120 | + 0x5d503448, 0xed795475, 0x3d03f432, 0x8d2a940f, 0x9df6b4bd, | |
| 3121 | + 0x2ddfd480, 0xfda574c7, 0x4d8c14fa, 0x9c1b4478, 0x2c322445, | |
| 3122 | + 0xfc488402, 0x4c61e43f, 0x5cbdc48d, 0xec94a4b0, 0x3cee04f7, | |
| 3123 | + 0x8cc764ca}, | |
| 3124 | + {0x00000000, 0xa5d35ccb, 0x0ba1c84d, 0xae729486, 0x1642919b, | |
| 3125 | + 0xb391cd50, 0x1de359d6, 0xb830051d, 0x6d8253ec, 0xc8510f27, | |
| 3126 | + 0x66239ba1, 0xc3f0c76a, 0x7bc0c277, 0xde139ebc, 0x70610a3a, | |
| 3127 | + 0xd5b256f1, 0x9b02d603, 0x3ed18ac8, 0x90a31e4e, 0x35704285, | |
| 3128 | + 0x8d404798, 0x28931b53, 0x86e18fd5, 0x2332d31e, 0xf68085ef, | |
| 3129 | + 0x5353d924, 0xfd214da2, 0x58f21169, 0xe0c21474, 0x451148bf, | |
| 3130 | + 0xeb63dc39, 0x4eb080f2, 0x3605ac07, 0x93d6f0cc, 0x3da4644a, | |
| 3131 | + 0x98773881, 0x20473d9c, 0x85946157, 0x2be6f5d1, 0x8e35a91a, | |
| 3132 | + 0x5b87ffeb, 0xfe54a320, 0x502637a6, 0xf5f56b6d, 0x4dc56e70, | |
| 3133 | + 0xe81632bb, 0x4664a63d, 0xe3b7faf6, 0xad077a04, 0x08d426cf, | |
| 3134 | + 0xa6a6b249, 0x0375ee82, 0xbb45eb9f, 0x1e96b754, 0xb0e423d2, | |
| 3135 | + 0x15377f19, 0xc08529e8, 0x65567523, 0xcb24e1a5, 0x6ef7bd6e, | |
| 3136 | + 0xd6c7b873, 0x7314e4b8, 0xdd66703e, 0x78b52cf5, 0x6c0a580f, | |
| 3137 | + 0xc9d904c4, 0x67ab9042, 0xc278cc89, 0x7a48c994, 0xdf9b955f, | |
| 3138 | + 0x71e901d9, 0xd43a5d12, 0x01880be3, 0xa45b5728, 0x0a29c3ae, | |
| 3139 | + 0xaffa9f65, 0x17ca9a78, 0xb219c6b3, 0x1c6b5235, 0xb9b80efe, | |
| 3140 | + 0xf7088e0c, 0x52dbd2c7, 0xfca94641, 0x597a1a8a, 0xe14a1f97, | |
| 3141 | + 0x4499435c, 0xeaebd7da, 0x4f388b11, 0x9a8adde0, 0x3f59812b, | |
| 3142 | + 0x912b15ad, 0x34f84966, 0x8cc84c7b, 0x291b10b0, 0x87698436, | |
| 3143 | + 0x22bad8fd, 0x5a0ff408, 0xffdca8c3, 0x51ae3c45, 0xf47d608e, | |
| 3144 | + 0x4c4d6593, 0xe99e3958, 0x47ecadde, 0xe23ff115, 0x378da7e4, | |
| 3145 | + 0x925efb2f, 0x3c2c6fa9, 0x99ff3362, 0x21cf367f, 0x841c6ab4, | |
| 3146 | + 0x2a6efe32, 0x8fbda2f9, 0xc10d220b, 0x64de7ec0, 0xcaacea46, | |
| 3147 | + 0x6f7fb68d, 0xd74fb390, 0x729cef5b, 0xdcee7bdd, 0x793d2716, | |
| 3148 | + 0xac8f71e7, 0x095c2d2c, 0xa72eb9aa, 0x02fde561, 0xbacde07c, | |
| 3149 | + 0x1f1ebcb7, 0xb16c2831, 0x14bf74fa, 0xd814b01e, 0x7dc7ecd5, | |
| 3150 | + 0xd3b57853, 0x76662498, 0xce562185, 0x6b857d4e, 0xc5f7e9c8, | |
| 3151 | + 0x6024b503, 0xb596e3f2, 0x1045bf39, 0xbe372bbf, 0x1be47774, | |
| 3152 | + 0xa3d47269, 0x06072ea2, 0xa875ba24, 0x0da6e6ef, 0x4316661d, | |
| 3153 | + 0xe6c53ad6, 0x48b7ae50, 0xed64f29b, 0x5554f786, 0xf087ab4d, | |
| 3154 | + 0x5ef53fcb, 0xfb266300, 0x2e9435f1, 0x8b47693a, 0x2535fdbc, | |
| 3155 | + 0x80e6a177, 0x38d6a46a, 0x9d05f8a1, 0x33776c27, 0x96a430ec, | |
| 3156 | + 0xee111c19, 0x4bc240d2, 0xe5b0d454, 0x4063889f, 0xf8538d82, | |
| 3157 | + 0x5d80d149, 0xf3f245cf, 0x56211904, 0x83934ff5, 0x2640133e, | |
| 3158 | + 0x883287b8, 0x2de1db73, 0x95d1de6e, 0x300282a5, 0x9e701623, | |
| 3159 | + 0x3ba34ae8, 0x7513ca1a, 0xd0c096d1, 0x7eb20257, 0xdb615e9c, | |
| 3160 | + 0x63515b81, 0xc682074a, 0x68f093cc, 0xcd23cf07, 0x189199f6, | |
| 3161 | + 0xbd42c53d, 0x133051bb, 0xb6e30d70, 0x0ed3086d, 0xab0054a6, | |
| 3162 | + 0x0572c020, 0xa0a19ceb, 0xb41ee811, 0x11cdb4da, 0xbfbf205c, | |
| 3163 | + 0x1a6c7c97, 0xa25c798a, 0x078f2541, 0xa9fdb1c7, 0x0c2eed0c, | |
| 3164 | + 0xd99cbbfd, 0x7c4fe736, 0xd23d73b0, 0x77ee2f7b, 0xcfde2a66, | |
| 3165 | + 0x6a0d76ad, 0xc47fe22b, 0x61acbee0, 0x2f1c3e12, 0x8acf62d9, | |
| 3166 | + 0x24bdf65f, 0x816eaa94, 0x395eaf89, 0x9c8df342, 0x32ff67c4, | |
| 3167 | + 0x972c3b0f, 0x429e6dfe, 0xe74d3135, 0x493fa5b3, 0xececf978, | |
| 3168 | + 0x54dcfc65, 0xf10fa0ae, 0x5f7d3428, 0xfaae68e3, 0x821b4416, | |
| 3169 | + 0x27c818dd, 0x89ba8c5b, 0x2c69d090, 0x9459d58d, 0x318a8946, | |
| 3170 | + 0x9ff81dc0, 0x3a2b410b, 0xef9917fa, 0x4a4a4b31, 0xe438dfb7, | |
| 3171 | + 0x41eb837c, 0xf9db8661, 0x5c08daaa, 0xf27a4e2c, 0x57a912e7, | |
| 3172 | + 0x19199215, 0xbccacede, 0x12b85a58, 0xb76b0693, 0x0f5b038e, | |
| 3173 | + 0xaa885f45, 0x04facbc3, 0xa1299708, 0x749bc1f9, 0xd1489d32, | |
| 3174 | + 0x7f3a09b4, 0xdae9557f, 0x62d95062, 0xc70a0ca9, 0x6978982f, | |
| 3175 | + 0xccabc4e4}, | |
| 3176 | + {0x00000000, 0xb40b77a6, 0x29119f97, 0x9d1ae831, 0x13244ff4, | |
| 3177 | + 0xa72f3852, 0x3a35d063, 0x8e3ea7c5, 0x674eef33, 0xd3459895, | |
| 3178 | + 0x4e5f70a4, 0xfa540702, 0x746aa0c7, 0xc061d761, 0x5d7b3f50, | |
| 3179 | + 0xe97048f6, 0xce9cde67, 0x7a97a9c1, 0xe78d41f0, 0x53863656, | |
| 3180 | + 0xddb89193, 0x69b3e635, 0xf4a90e04, 0x40a279a2, 0xa9d23154, | |
| 3181 | + 0x1dd946f2, 0x80c3aec3, 0x34c8d965, 0xbaf67ea0, 0x0efd0906, | |
| 3182 | + 0x93e7e137, 0x27ec9691, 0x9c39bdcf, 0x2832ca69, 0xb5282258, | |
| 3183 | + 0x012355fe, 0x8f1df23b, 0x3b16859d, 0xa60c6dac, 0x12071a0a, | |
| 3184 | + 0xfb7752fc, 0x4f7c255a, 0xd266cd6b, 0x666dbacd, 0xe8531d08, | |
| 3185 | + 0x5c586aae, 0xc142829f, 0x7549f539, 0x52a563a8, 0xe6ae140e, | |
| 3186 | + 0x7bb4fc3f, 0xcfbf8b99, 0x41812c5c, 0xf58a5bfa, 0x6890b3cb, | |
| 3187 | + 0xdc9bc46d, 0x35eb8c9b, 0x81e0fb3d, 0x1cfa130c, 0xa8f164aa, | |
| 3188 | + 0x26cfc36f, 0x92c4b4c9, 0x0fde5cf8, 0xbbd52b5e, 0x79750b44, | |
| 3189 | + 0xcd7e7ce2, 0x506494d3, 0xe46fe375, 0x6a5144b0, 0xde5a3316, | |
| 3190 | + 0x4340db27, 0xf74bac81, 0x1e3be477, 0xaa3093d1, 0x372a7be0, | |
| 3191 | + 0x83210c46, 0x0d1fab83, 0xb914dc25, 0x240e3414, 0x900543b2, | |
| 3192 | + 0xb7e9d523, 0x03e2a285, 0x9ef84ab4, 0x2af33d12, 0xa4cd9ad7, | |
| 3193 | + 0x10c6ed71, 0x8ddc0540, 0x39d772e6, 0xd0a73a10, 0x64ac4db6, | |
| 3194 | + 0xf9b6a587, 0x4dbdd221, 0xc38375e4, 0x77880242, 0xea92ea73, | |
| 3195 | + 0x5e999dd5, 0xe54cb68b, 0x5147c12d, 0xcc5d291c, 0x78565eba, | |
| 3196 | + 0xf668f97f, 0x42638ed9, 0xdf7966e8, 0x6b72114e, 0x820259b8, | |
| 3197 | + 0x36092e1e, 0xab13c62f, 0x1f18b189, 0x9126164c, 0x252d61ea, | |
| 3198 | + 0xb83789db, 0x0c3cfe7d, 0x2bd068ec, 0x9fdb1f4a, 0x02c1f77b, | |
| 3199 | + 0xb6ca80dd, 0x38f42718, 0x8cff50be, 0x11e5b88f, 0xa5eecf29, | |
| 3200 | + 0x4c9e87df, 0xf895f079, 0x658f1848, 0xd1846fee, 0x5fbac82b, | |
| 3201 | + 0xebb1bf8d, 0x76ab57bc, 0xc2a0201a, 0xf2ea1688, 0x46e1612e, | |
| 3202 | + 0xdbfb891f, 0x6ff0feb9, 0xe1ce597c, 0x55c52eda, 0xc8dfc6eb, | |
| 3203 | + 0x7cd4b14d, 0x95a4f9bb, 0x21af8e1d, 0xbcb5662c, 0x08be118a, | |
| 3204 | + 0x8680b64f, 0x328bc1e9, 0xaf9129d8, 0x1b9a5e7e, 0x3c76c8ef, | |
| 3205 | + 0x887dbf49, 0x15675778, 0xa16c20de, 0x2f52871b, 0x9b59f0bd, | |
| 3206 | + 0x0643188c, 0xb2486f2a, 0x5b3827dc, 0xef33507a, 0x7229b84b, | |
| 3207 | + 0xc622cfed, 0x481c6828, 0xfc171f8e, 0x610df7bf, 0xd5068019, | |
| 3208 | + 0x6ed3ab47, 0xdad8dce1, 0x47c234d0, 0xf3c94376, 0x7df7e4b3, | |
| 3209 | + 0xc9fc9315, 0x54e67b24, 0xe0ed0c82, 0x099d4474, 0xbd9633d2, | |
| 3210 | + 0x208cdbe3, 0x9487ac45, 0x1ab90b80, 0xaeb27c26, 0x33a89417, | |
| 3211 | + 0x87a3e3b1, 0xa04f7520, 0x14440286, 0x895eeab7, 0x3d559d11, | |
| 3212 | + 0xb36b3ad4, 0x07604d72, 0x9a7aa543, 0x2e71d2e5, 0xc7019a13, | |
| 3213 | + 0x730aedb5, 0xee100584, 0x5a1b7222, 0xd425d5e7, 0x602ea241, | |
| 3214 | + 0xfd344a70, 0x493f3dd6, 0x8b9f1dcc, 0x3f946a6a, 0xa28e825b, | |
| 3215 | + 0x1685f5fd, 0x98bb5238, 0x2cb0259e, 0xb1aacdaf, 0x05a1ba09, | |
| 3216 | + 0xecd1f2ff, 0x58da8559, 0xc5c06d68, 0x71cb1ace, 0xfff5bd0b, | |
| 3217 | + 0x4bfecaad, 0xd6e4229c, 0x62ef553a, 0x4503c3ab, 0xf108b40d, | |
| 3218 | + 0x6c125c3c, 0xd8192b9a, 0x56278c5f, 0xe22cfbf9, 0x7f3613c8, | |
| 3219 | + 0xcb3d646e, 0x224d2c98, 0x96465b3e, 0x0b5cb30f, 0xbf57c4a9, | |
| 3220 | + 0x3169636c, 0x856214ca, 0x1878fcfb, 0xac738b5d, 0x17a6a003, | |
| 3221 | + 0xa3add7a5, 0x3eb73f94, 0x8abc4832, 0x0482eff7, 0xb0899851, | |
| 3222 | + 0x2d937060, 0x999807c6, 0x70e84f30, 0xc4e33896, 0x59f9d0a7, | |
| 3223 | + 0xedf2a701, 0x63cc00c4, 0xd7c77762, 0x4add9f53, 0xfed6e8f5, | |
| 3224 | + 0xd93a7e64, 0x6d3109c2, 0xf02be1f3, 0x44209655, 0xca1e3190, | |
| 3225 | + 0x7e154636, 0xe30fae07, 0x5704d9a1, 0xbe749157, 0x0a7fe6f1, | |
| 3226 | + 0x97650ec0, 0x236e7966, 0xad50dea3, 0x195ba905, 0x84414134, | |
| 3227 | + 0x304a3692}, | |
| 3228 | + {0x00000000, 0x9e00aacc, 0x7d072542, 0xe3078f8e, 0xfa0e4a84, | |
| 3229 | + 0x640ee048, 0x87096fc6, 0x1909c50a, 0xb51be5d3, 0x2b1b4f1f, | |
| 3230 | + 0xc81cc091, 0x561c6a5d, 0x4f15af57, 0xd115059b, 0x32128a15, | |
| 3231 | + 0xac1220d9, 0x2b31bb7c, 0xb53111b0, 0x56369e3e, 0xc83634f2, | |
| 3232 | + 0xd13ff1f8, 0x4f3f5b34, 0xac38d4ba, 0x32387e76, 0x9e2a5eaf, | |
| 3233 | + 0x002af463, 0xe32d7bed, 0x7d2dd121, 0x6424142b, 0xfa24bee7, | |
| 3234 | + 0x19233169, 0x87239ba5, 0x566276f9, 0xc862dc35, 0x2b6553bb, | |
| 3235 | + 0xb565f977, 0xac6c3c7d, 0x326c96b1, 0xd16b193f, 0x4f6bb3f3, | |
| 3236 | + 0xe379932a, 0x7d7939e6, 0x9e7eb668, 0x007e1ca4, 0x1977d9ae, | |
| 3237 | + 0x87777362, 0x6470fcec, 0xfa705620, 0x7d53cd85, 0xe3536749, | |
| 3238 | + 0x0054e8c7, 0x9e54420b, 0x875d8701, 0x195d2dcd, 0xfa5aa243, | |
| 3239 | + 0x645a088f, 0xc8482856, 0x5648829a, 0xb54f0d14, 0x2b4fa7d8, | |
| 3240 | + 0x324662d2, 0xac46c81e, 0x4f414790, 0xd141ed5c, 0xedc29d29, | |
| 3241 | + 0x73c237e5, 0x90c5b86b, 0x0ec512a7, 0x17ccd7ad, 0x89cc7d61, | |
| 3242 | + 0x6acbf2ef, 0xf4cb5823, 0x58d978fa, 0xc6d9d236, 0x25de5db8, | |
| 3243 | + 0xbbdef774, 0xa2d7327e, 0x3cd798b2, 0xdfd0173c, 0x41d0bdf0, | |
| 3244 | + 0xc6f32655, 0x58f38c99, 0xbbf40317, 0x25f4a9db, 0x3cfd6cd1, | |
| 3245 | + 0xa2fdc61d, 0x41fa4993, 0xdffae35f, 0x73e8c386, 0xede8694a, | |
| 3246 | + 0x0eefe6c4, 0x90ef4c08, 0x89e68902, 0x17e623ce, 0xf4e1ac40, | |
| 3247 | + 0x6ae1068c, 0xbba0ebd0, 0x25a0411c, 0xc6a7ce92, 0x58a7645e, | |
| 3248 | + 0x41aea154, 0xdfae0b98, 0x3ca98416, 0xa2a92eda, 0x0ebb0e03, | |
| 3249 | + 0x90bba4cf, 0x73bc2b41, 0xedbc818d, 0xf4b54487, 0x6ab5ee4b, | |
| 3250 | + 0x89b261c5, 0x17b2cb09, 0x909150ac, 0x0e91fa60, 0xed9675ee, | |
| 3251 | + 0x7396df22, 0x6a9f1a28, 0xf49fb0e4, 0x17983f6a, 0x899895a6, | |
| 3252 | + 0x258ab57f, 0xbb8a1fb3, 0x588d903d, 0xc68d3af1, 0xdf84fffb, | |
| 3253 | + 0x41845537, 0xa283dab9, 0x3c837075, 0xda853b53, 0x4485919f, | |
| 3254 | + 0xa7821e11, 0x3982b4dd, 0x208b71d7, 0xbe8bdb1b, 0x5d8c5495, | |
| 3255 | + 0xc38cfe59, 0x6f9ede80, 0xf19e744c, 0x1299fbc2, 0x8c99510e, | |
| 3256 | + 0x95909404, 0x0b903ec8, 0xe897b146, 0x76971b8a, 0xf1b4802f, | |
| 3257 | + 0x6fb42ae3, 0x8cb3a56d, 0x12b30fa1, 0x0bbacaab, 0x95ba6067, | |
| 3258 | + 0x76bdefe9, 0xe8bd4525, 0x44af65fc, 0xdaafcf30, 0x39a840be, | |
| 3259 | + 0xa7a8ea72, 0xbea12f78, 0x20a185b4, 0xc3a60a3a, 0x5da6a0f6, | |
| 3260 | + 0x8ce74daa, 0x12e7e766, 0xf1e068e8, 0x6fe0c224, 0x76e9072e, | |
| 3261 | + 0xe8e9ade2, 0x0bee226c, 0x95ee88a0, 0x39fca879, 0xa7fc02b5, | |
| 3262 | + 0x44fb8d3b, 0xdafb27f7, 0xc3f2e2fd, 0x5df24831, 0xbef5c7bf, | |
| 3263 | + 0x20f56d73, 0xa7d6f6d6, 0x39d65c1a, 0xdad1d394, 0x44d17958, | |
| 3264 | + 0x5dd8bc52, 0xc3d8169e, 0x20df9910, 0xbedf33dc, 0x12cd1305, | |
| 3265 | + 0x8ccdb9c9, 0x6fca3647, 0xf1ca9c8b, 0xe8c35981, 0x76c3f34d, | |
| 3266 | + 0x95c47cc3, 0x0bc4d60f, 0x3747a67a, 0xa9470cb6, 0x4a408338, | |
| 3267 | + 0xd44029f4, 0xcd49ecfe, 0x53494632, 0xb04ec9bc, 0x2e4e6370, | |
| 3268 | + 0x825c43a9, 0x1c5ce965, 0xff5b66eb, 0x615bcc27, 0x7852092d, | |
| 3269 | + 0xe652a3e1, 0x05552c6f, 0x9b5586a3, 0x1c761d06, 0x8276b7ca, | |
| 3270 | + 0x61713844, 0xff719288, 0xe6785782, 0x7878fd4e, 0x9b7f72c0, | |
| 3271 | + 0x057fd80c, 0xa96df8d5, 0x376d5219, 0xd46add97, 0x4a6a775b, | |
| 3272 | + 0x5363b251, 0xcd63189d, 0x2e649713, 0xb0643ddf, 0x6125d083, | |
| 3273 | + 0xff257a4f, 0x1c22f5c1, 0x82225f0d, 0x9b2b9a07, 0x052b30cb, | |
| 3274 | + 0xe62cbf45, 0x782c1589, 0xd43e3550, 0x4a3e9f9c, 0xa9391012, | |
| 3275 | + 0x3739bade, 0x2e307fd4, 0xb030d518, 0x53375a96, 0xcd37f05a, | |
| 3276 | + 0x4a146bff, 0xd414c133, 0x37134ebd, 0xa913e471, 0xb01a217b, | |
| 3277 | + 0x2e1a8bb7, 0xcd1d0439, 0x531daef5, 0xff0f8e2c, 0x610f24e0, | |
| 3278 | + 0x8208ab6e, 0x1c0801a2, 0x0501c4a8, 0x9b016e64, 0x7806e1ea, | |
| 3279 | + 0xe6064b26}}; | |
| 3280 | + | |
| 3281 | +#endif | |
| 3282 | + | |
| 3283 | +#endif | |
| 3284 | + | |
| 3285 | +#if N == 3 | |
| 3286 | + | |
| 3287 | +#if W == 8 | |
| 3288 | + | |
| 3289 | +local const z_crc_t FAR crc_braid_table[][256] = { | |
| 3290 | + {0x00000000, 0x81256527, 0xd93bcc0f, 0x581ea928, 0x69069e5f, | |
| 3291 | + 0xe823fb78, 0xb03d5250, 0x31183777, 0xd20d3cbe, 0x53285999, | |
| 3292 | + 0x0b36f0b1, 0x8a139596, 0xbb0ba2e1, 0x3a2ec7c6, 0x62306eee, | |
| 3293 | + 0xe3150bc9, 0x7f6b7f3d, 0xfe4e1a1a, 0xa650b332, 0x2775d615, | |
| 3294 | + 0x166de162, 0x97488445, 0xcf562d6d, 0x4e73484a, 0xad664383, | |
| 3295 | + 0x2c4326a4, 0x745d8f8c, 0xf578eaab, 0xc460dddc, 0x4545b8fb, | |
| 3296 | + 0x1d5b11d3, 0x9c7e74f4, 0xfed6fe7a, 0x7ff39b5d, 0x27ed3275, | |
| 3297 | + 0xa6c85752, 0x97d06025, 0x16f50502, 0x4eebac2a, 0xcfcec90d, | |
| 3298 | + 0x2cdbc2c4, 0xadfea7e3, 0xf5e00ecb, 0x74c56bec, 0x45dd5c9b, | |
| 3299 | + 0xc4f839bc, 0x9ce69094, 0x1dc3f5b3, 0x81bd8147, 0x0098e460, | |
| 3300 | + 0x58864d48, 0xd9a3286f, 0xe8bb1f18, 0x699e7a3f, 0x3180d317, | |
| 3301 | + 0xb0a5b630, 0x53b0bdf9, 0xd295d8de, 0x8a8b71f6, 0x0bae14d1, | |
| 3302 | + 0x3ab623a6, 0xbb934681, 0xe38defa9, 0x62a88a8e, 0x26dcfab5, | |
| 3303 | + 0xa7f99f92, 0xffe736ba, 0x7ec2539d, 0x4fda64ea, 0xceff01cd, | |
| 3304 | + 0x96e1a8e5, 0x17c4cdc2, 0xf4d1c60b, 0x75f4a32c, 0x2dea0a04, | |
| 3305 | + 0xaccf6f23, 0x9dd75854, 0x1cf23d73, 0x44ec945b, 0xc5c9f17c, | |
| 3306 | + 0x59b78588, 0xd892e0af, 0x808c4987, 0x01a92ca0, 0x30b11bd7, | |
| 3307 | + 0xb1947ef0, 0xe98ad7d8, 0x68afb2ff, 0x8bbab936, 0x0a9fdc11, | |
| 3308 | + 0x52817539, 0xd3a4101e, 0xe2bc2769, 0x6399424e, 0x3b87eb66, | |
| 3309 | + 0xbaa28e41, 0xd80a04cf, 0x592f61e8, 0x0131c8c0, 0x8014ade7, | |
| 3310 | + 0xb10c9a90, 0x3029ffb7, 0x6837569f, 0xe91233b8, 0x0a073871, | |
| 3311 | + 0x8b225d56, 0xd33cf47e, 0x52199159, 0x6301a62e, 0xe224c309, | |
| 3312 | + 0xba3a6a21, 0x3b1f0f06, 0xa7617bf2, 0x26441ed5, 0x7e5ab7fd, | |
| 3313 | + 0xff7fd2da, 0xce67e5ad, 0x4f42808a, 0x175c29a2, 0x96794c85, | |
| 3314 | + 0x756c474c, 0xf449226b, 0xac578b43, 0x2d72ee64, 0x1c6ad913, | |
| 3315 | + 0x9d4fbc34, 0xc551151c, 0x4474703b, 0x4db9f56a, 0xcc9c904d, | |
| 3316 | + 0x94823965, 0x15a75c42, 0x24bf6b35, 0xa59a0e12, 0xfd84a73a, | |
| 3317 | + 0x7ca1c21d, 0x9fb4c9d4, 0x1e91acf3, 0x468f05db, 0xc7aa60fc, | |
| 3318 | + 0xf6b2578b, 0x779732ac, 0x2f899b84, 0xaeacfea3, 0x32d28a57, | |
| 3319 | + 0xb3f7ef70, 0xebe94658, 0x6acc237f, 0x5bd41408, 0xdaf1712f, | |
| 3320 | + 0x82efd807, 0x03cabd20, 0xe0dfb6e9, 0x61fad3ce, 0x39e47ae6, | |
| 3321 | + 0xb8c11fc1, 0x89d928b6, 0x08fc4d91, 0x50e2e4b9, 0xd1c7819e, | |
| 3322 | + 0xb36f0b10, 0x324a6e37, 0x6a54c71f, 0xeb71a238, 0xda69954f, | |
| 3323 | + 0x5b4cf068, 0x03525940, 0x82773c67, 0x616237ae, 0xe0475289, | |
| 3324 | + 0xb859fba1, 0x397c9e86, 0x0864a9f1, 0x8941ccd6, 0xd15f65fe, | |
| 3325 | + 0x507a00d9, 0xcc04742d, 0x4d21110a, 0x153fb822, 0x941add05, | |
| 3326 | + 0xa502ea72, 0x24278f55, 0x7c39267d, 0xfd1c435a, 0x1e094893, | |
| 3327 | + 0x9f2c2db4, 0xc732849c, 0x4617e1bb, 0x770fd6cc, 0xf62ab3eb, | |
| 3328 | + 0xae341ac3, 0x2f117fe4, 0x6b650fdf, 0xea406af8, 0xb25ec3d0, | |
| 3329 | + 0x337ba6f7, 0x02639180, 0x8346f4a7, 0xdb585d8f, 0x5a7d38a8, | |
| 3330 | + 0xb9683361, 0x384d5646, 0x6053ff6e, 0xe1769a49, 0xd06ead3e, | |
| 3331 | + 0x514bc819, 0x09556131, 0x88700416, 0x140e70e2, 0x952b15c5, | |
| 3332 | + 0xcd35bced, 0x4c10d9ca, 0x7d08eebd, 0xfc2d8b9a, 0xa43322b2, | |
| 3333 | + 0x25164795, 0xc6034c5c, 0x4726297b, 0x1f388053, 0x9e1de574, | |
| 3334 | + 0xaf05d203, 0x2e20b724, 0x763e1e0c, 0xf71b7b2b, 0x95b3f1a5, | |
| 3335 | + 0x14969482, 0x4c883daa, 0xcdad588d, 0xfcb56ffa, 0x7d900add, | |
| 3336 | + 0x258ea3f5, 0xa4abc6d2, 0x47becd1b, 0xc69ba83c, 0x9e850114, | |
| 3337 | + 0x1fa06433, 0x2eb85344, 0xaf9d3663, 0xf7839f4b, 0x76a6fa6c, | |
| 3338 | + 0xead88e98, 0x6bfdebbf, 0x33e34297, 0xb2c627b0, 0x83de10c7, | |
| 3339 | + 0x02fb75e0, 0x5ae5dcc8, 0xdbc0b9ef, 0x38d5b226, 0xb9f0d701, | |
| 3340 | + 0xe1ee7e29, 0x60cb1b0e, 0x51d32c79, 0xd0f6495e, 0x88e8e076, | |
| 3341 | + 0x09cd8551}, | |
| 3342 | + {0x00000000, 0x9b73ead4, 0xed96d3e9, 0x76e5393d, 0x005ca193, | |
| 3343 | + 0x9b2f4b47, 0xedca727a, 0x76b998ae, 0x00b94326, 0x9bcaa9f2, | |
| 3344 | + 0xed2f90cf, 0x765c7a1b, 0x00e5e2b5, 0x9b960861, 0xed73315c, | |
| 3345 | + 0x7600db88, 0x0172864c, 0x9a016c98, 0xece455a5, 0x7797bf71, | |
| 3346 | + 0x012e27df, 0x9a5dcd0b, 0xecb8f436, 0x77cb1ee2, 0x01cbc56a, | |
| 3347 | + 0x9ab82fbe, 0xec5d1683, 0x772efc57, 0x019764f9, 0x9ae48e2d, | |
| 3348 | + 0xec01b710, 0x77725dc4, 0x02e50c98, 0x9996e64c, 0xef73df71, | |
| 3349 | + 0x740035a5, 0x02b9ad0b, 0x99ca47df, 0xef2f7ee2, 0x745c9436, | |
| 3350 | + 0x025c4fbe, 0x992fa56a, 0xefca9c57, 0x74b97683, 0x0200ee2d, | |
| 3351 | + 0x997304f9, 0xef963dc4, 0x74e5d710, 0x03978ad4, 0x98e46000, | |
| 3352 | + 0xee01593d, 0x7572b3e9, 0x03cb2b47, 0x98b8c193, 0xee5df8ae, | |
| 3353 | + 0x752e127a, 0x032ec9f2, 0x985d2326, 0xeeb81a1b, 0x75cbf0cf, | |
| 3354 | + 0x03726861, 0x980182b5, 0xeee4bb88, 0x7597515c, 0x05ca1930, | |
| 3355 | + 0x9eb9f3e4, 0xe85ccad9, 0x732f200d, 0x0596b8a3, 0x9ee55277, | |
| 3356 | + 0xe8006b4a, 0x7373819e, 0x05735a16, 0x9e00b0c2, 0xe8e589ff, | |
| 3357 | + 0x7396632b, 0x052ffb85, 0x9e5c1151, 0xe8b9286c, 0x73cac2b8, | |
| 3358 | + 0x04b89f7c, 0x9fcb75a8, 0xe92e4c95, 0x725da641, 0x04e43eef, | |
| 3359 | + 0x9f97d43b, 0xe972ed06, 0x720107d2, 0x0401dc5a, 0x9f72368e, | |
| 3360 | + 0xe9970fb3, 0x72e4e567, 0x045d7dc9, 0x9f2e971d, 0xe9cbae20, | |
| 3361 | + 0x72b844f4, 0x072f15a8, 0x9c5cff7c, 0xeab9c641, 0x71ca2c95, | |
| 3362 | + 0x0773b43b, 0x9c005eef, 0xeae567d2, 0x71968d06, 0x0796568e, | |
| 3363 | + 0x9ce5bc5a, 0xea008567, 0x71736fb3, 0x07caf71d, 0x9cb91dc9, | |
| 3364 | + 0xea5c24f4, 0x712fce20, 0x065d93e4, 0x9d2e7930, 0xebcb400d, | |
| 3365 | + 0x70b8aad9, 0x06013277, 0x9d72d8a3, 0xeb97e19e, 0x70e40b4a, | |
| 3366 | + 0x06e4d0c2, 0x9d973a16, 0xeb72032b, 0x7001e9ff, 0x06b87151, | |
| 3367 | + 0x9dcb9b85, 0xeb2ea2b8, 0x705d486c, 0x0b943260, 0x90e7d8b4, | |
| 3368 | + 0xe602e189, 0x7d710b5d, 0x0bc893f3, 0x90bb7927, 0xe65e401a, | |
| 3369 | + 0x7d2daace, 0x0b2d7146, 0x905e9b92, 0xe6bba2af, 0x7dc8487b, | |
| 3370 | + 0x0b71d0d5, 0x90023a01, 0xe6e7033c, 0x7d94e9e8, 0x0ae6b42c, | |
| 3371 | + 0x91955ef8, 0xe77067c5, 0x7c038d11, 0x0aba15bf, 0x91c9ff6b, | |
| 3372 | + 0xe72cc656, 0x7c5f2c82, 0x0a5ff70a, 0x912c1dde, 0xe7c924e3, | |
| 3373 | + 0x7cbace37, 0x0a035699, 0x9170bc4d, 0xe7958570, 0x7ce66fa4, | |
| 3374 | + 0x09713ef8, 0x9202d42c, 0xe4e7ed11, 0x7f9407c5, 0x092d9f6b, | |
| 3375 | + 0x925e75bf, 0xe4bb4c82, 0x7fc8a656, 0x09c87dde, 0x92bb970a, | |
| 3376 | + 0xe45eae37, 0x7f2d44e3, 0x0994dc4d, 0x92e73699, 0xe4020fa4, | |
| 3377 | + 0x7f71e570, 0x0803b8b4, 0x93705260, 0xe5956b5d, 0x7ee68189, | |
| 3378 | + 0x085f1927, 0x932cf3f3, 0xe5c9cace, 0x7eba201a, 0x08bafb92, | |
| 3379 | + 0x93c91146, 0xe52c287b, 0x7e5fc2af, 0x08e65a01, 0x9395b0d5, | |
| 3380 | + 0xe57089e8, 0x7e03633c, 0x0e5e2b50, 0x952dc184, 0xe3c8f8b9, | |
| 3381 | + 0x78bb126d, 0x0e028ac3, 0x95716017, 0xe394592a, 0x78e7b3fe, | |
| 3382 | + 0x0ee76876, 0x959482a2, 0xe371bb9f, 0x7802514b, 0x0ebbc9e5, | |
| 3383 | + 0x95c82331, 0xe32d1a0c, 0x785ef0d8, 0x0f2cad1c, 0x945f47c8, | |
| 3384 | + 0xe2ba7ef5, 0x79c99421, 0x0f700c8f, 0x9403e65b, 0xe2e6df66, | |
| 3385 | + 0x799535b2, 0x0f95ee3a, 0x94e604ee, 0xe2033dd3, 0x7970d707, | |
| 3386 | + 0x0fc94fa9, 0x94baa57d, 0xe25f9c40, 0x792c7694, 0x0cbb27c8, | |
| 3387 | + 0x97c8cd1c, 0xe12df421, 0x7a5e1ef5, 0x0ce7865b, 0x97946c8f, | |
| 3388 | + 0xe17155b2, 0x7a02bf66, 0x0c0264ee, 0x97718e3a, 0xe194b707, | |
| 3389 | + 0x7ae75dd3, 0x0c5ec57d, 0x972d2fa9, 0xe1c81694, 0x7abbfc40, | |
| 3390 | + 0x0dc9a184, 0x96ba4b50, 0xe05f726d, 0x7b2c98b9, 0x0d950017, | |
| 3391 | + 0x96e6eac3, 0xe003d3fe, 0x7b70392a, 0x0d70e2a2, 0x96030876, | |
| 3392 | + 0xe0e6314b, 0x7b95db9f, 0x0d2c4331, 0x965fa9e5, 0xe0ba90d8, | |
| 3393 | + 0x7bc97a0c}, | |
| 3394 | + {0x00000000, 0x172864c0, 0x2e50c980, 0x3978ad40, 0x5ca19300, | |
| 3395 | + 0x4b89f7c0, 0x72f15a80, 0x65d93e40, 0xb9432600, 0xae6b42c0, | |
| 3396 | + 0x9713ef80, 0x803b8b40, 0xe5e2b500, 0xf2cad1c0, 0xcbb27c80, | |
| 3397 | + 0xdc9a1840, 0xa9f74a41, 0xbedf2e81, 0x87a783c1, 0x908fe701, | |
| 3398 | + 0xf556d941, 0xe27ebd81, 0xdb0610c1, 0xcc2e7401, 0x10b46c41, | |
| 3399 | + 0x079c0881, 0x3ee4a5c1, 0x29ccc101, 0x4c15ff41, 0x5b3d9b81, | |
| 3400 | + 0x624536c1, 0x756d5201, 0x889f92c3, 0x9fb7f603, 0xa6cf5b43, | |
| 3401 | + 0xb1e73f83, 0xd43e01c3, 0xc3166503, 0xfa6ec843, 0xed46ac83, | |
| 3402 | + 0x31dcb4c3, 0x26f4d003, 0x1f8c7d43, 0x08a41983, 0x6d7d27c3, | |
| 3403 | + 0x7a554303, 0x432dee43, 0x54058a83, 0x2168d882, 0x3640bc42, | |
| 3404 | + 0x0f381102, 0x181075c2, 0x7dc94b82, 0x6ae12f42, 0x53998202, | |
| 3405 | + 0x44b1e6c2, 0x982bfe82, 0x8f039a42, 0xb67b3702, 0xa15353c2, | |
| 3406 | + 0xc48a6d82, 0xd3a20942, 0xeadaa402, 0xfdf2c0c2, 0xca4e23c7, | |
| 3407 | + 0xdd664707, 0xe41eea47, 0xf3368e87, 0x96efb0c7, 0x81c7d407, | |
| 3408 | + 0xb8bf7947, 0xaf971d87, 0x730d05c7, 0x64256107, 0x5d5dcc47, | |
| 3409 | + 0x4a75a887, 0x2fac96c7, 0x3884f207, 0x01fc5f47, 0x16d43b87, | |
| 3410 | + 0x63b96986, 0x74910d46, 0x4de9a006, 0x5ac1c4c6, 0x3f18fa86, | |
| 3411 | + 0x28309e46, 0x11483306, 0x066057c6, 0xdafa4f86, 0xcdd22b46, | |
| 3412 | + 0xf4aa8606, 0xe382e2c6, 0x865bdc86, 0x9173b846, 0xa80b1506, | |
| 3413 | + 0xbf2371c6, 0x42d1b104, 0x55f9d5c4, 0x6c817884, 0x7ba91c44, | |
| 3414 | + 0x1e702204, 0x095846c4, 0x3020eb84, 0x27088f44, 0xfb929704, | |
| 3415 | + 0xecbaf3c4, 0xd5c25e84, 0xc2ea3a44, 0xa7330404, 0xb01b60c4, | |
| 3416 | + 0x8963cd84, 0x9e4ba944, 0xeb26fb45, 0xfc0e9f85, 0xc57632c5, | |
| 3417 | + 0xd25e5605, 0xb7876845, 0xa0af0c85, 0x99d7a1c5, 0x8effc505, | |
| 3418 | + 0x5265dd45, 0x454db985, 0x7c3514c5, 0x6b1d7005, 0x0ec44e45, | |
| 3419 | + 0x19ec2a85, 0x209487c5, 0x37bce305, 0x4fed41cf, 0x58c5250f, | |
| 3420 | + 0x61bd884f, 0x7695ec8f, 0x134cd2cf, 0x0464b60f, 0x3d1c1b4f, | |
| 3421 | + 0x2a347f8f, 0xf6ae67cf, 0xe186030f, 0xd8feae4f, 0xcfd6ca8f, | |
| 3422 | + 0xaa0ff4cf, 0xbd27900f, 0x845f3d4f, 0x9377598f, 0xe61a0b8e, | |
| 3423 | + 0xf1326f4e, 0xc84ac20e, 0xdf62a6ce, 0xbabb988e, 0xad93fc4e, | |
| 3424 | + 0x94eb510e, 0x83c335ce, 0x5f592d8e, 0x4871494e, 0x7109e40e, | |
| 3425 | + 0x662180ce, 0x03f8be8e, 0x14d0da4e, 0x2da8770e, 0x3a8013ce, | |
| 3426 | + 0xc772d30c, 0xd05ab7cc, 0xe9221a8c, 0xfe0a7e4c, 0x9bd3400c, | |
| 3427 | + 0x8cfb24cc, 0xb583898c, 0xa2abed4c, 0x7e31f50c, 0x691991cc, | |
| 3428 | + 0x50613c8c, 0x4749584c, 0x2290660c, 0x35b802cc, 0x0cc0af8c, | |
| 3429 | + 0x1be8cb4c, 0x6e85994d, 0x79adfd8d, 0x40d550cd, 0x57fd340d, | |
| 3430 | + 0x32240a4d, 0x250c6e8d, 0x1c74c3cd, 0x0b5ca70d, 0xd7c6bf4d, | |
| 3431 | + 0xc0eedb8d, 0xf99676cd, 0xeebe120d, 0x8b672c4d, 0x9c4f488d, | |
| 3432 | + 0xa537e5cd, 0xb21f810d, 0x85a36208, 0x928b06c8, 0xabf3ab88, | |
| 3433 | + 0xbcdbcf48, 0xd902f108, 0xce2a95c8, 0xf7523888, 0xe07a5c48, | |
| 3434 | + 0x3ce04408, 0x2bc820c8, 0x12b08d88, 0x0598e948, 0x6041d708, | |
| 3435 | + 0x7769b3c8, 0x4e111e88, 0x59397a48, 0x2c542849, 0x3b7c4c89, | |
| 3436 | + 0x0204e1c9, 0x152c8509, 0x70f5bb49, 0x67dddf89, 0x5ea572c9, | |
| 3437 | + 0x498d1609, 0x95170e49, 0x823f6a89, 0xbb47c7c9, 0xac6fa309, | |
| 3438 | + 0xc9b69d49, 0xde9ef989, 0xe7e654c9, 0xf0ce3009, 0x0d3cf0cb, | |
| 3439 | + 0x1a14940b, 0x236c394b, 0x34445d8b, 0x519d63cb, 0x46b5070b, | |
| 3440 | + 0x7fcdaa4b, 0x68e5ce8b, 0xb47fd6cb, 0xa357b20b, 0x9a2f1f4b, | |
| 3441 | + 0x8d077b8b, 0xe8de45cb, 0xfff6210b, 0xc68e8c4b, 0xd1a6e88b, | |
| 3442 | + 0xa4cbba8a, 0xb3e3de4a, 0x8a9b730a, 0x9db317ca, 0xf86a298a, | |
| 3443 | + 0xef424d4a, 0xd63ae00a, 0xc11284ca, 0x1d889c8a, 0x0aa0f84a, | |
| 3444 | + 0x33d8550a, 0x24f031ca, 0x41290f8a, 0x56016b4a, 0x6f79c60a, | |
| 3445 | + 0x7851a2ca}, | |
| 3446 | + {0x00000000, 0x9fda839e, 0xe4c4017d, 0x7b1e82e3, 0x12f904bb, | |
| 3447 | + 0x8d238725, 0xf63d05c6, 0x69e78658, 0x25f20976, 0xba288ae8, | |
| 3448 | + 0xc136080b, 0x5eec8b95, 0x370b0dcd, 0xa8d18e53, 0xd3cf0cb0, | |
| 3449 | + 0x4c158f2e, 0x4be412ec, 0xd43e9172, 0xaf201391, 0x30fa900f, | |
| 3450 | + 0x591d1657, 0xc6c795c9, 0xbdd9172a, 0x220394b4, 0x6e161b9a, | |
| 3451 | + 0xf1cc9804, 0x8ad21ae7, 0x15089979, 0x7cef1f21, 0xe3359cbf, | |
| 3452 | + 0x982b1e5c, 0x07f19dc2, 0x97c825d8, 0x0812a646, 0x730c24a5, | |
| 3453 | + 0xecd6a73b, 0x85312163, 0x1aeba2fd, 0x61f5201e, 0xfe2fa380, | |
| 3454 | + 0xb23a2cae, 0x2de0af30, 0x56fe2dd3, 0xc924ae4d, 0xa0c32815, | |
| 3455 | + 0x3f19ab8b, 0x44072968, 0xdbddaaf6, 0xdc2c3734, 0x43f6b4aa, | |
| 3456 | + 0x38e83649, 0xa732b5d7, 0xced5338f, 0x510fb011, 0x2a1132f2, | |
| 3457 | + 0xb5cbb16c, 0xf9de3e42, 0x6604bddc, 0x1d1a3f3f, 0x82c0bca1, | |
| 3458 | + 0xeb273af9, 0x74fdb967, 0x0fe33b84, 0x9039b81a, 0xf4e14df1, | |
| 3459 | + 0x6b3bce6f, 0x10254c8c, 0x8fffcf12, 0xe618494a, 0x79c2cad4, | |
| 3460 | + 0x02dc4837, 0x9d06cba9, 0xd1134487, 0x4ec9c719, 0x35d745fa, | |
| 3461 | + 0xaa0dc664, 0xc3ea403c, 0x5c30c3a2, 0x272e4141, 0xb8f4c2df, | |
| 3462 | + 0xbf055f1d, 0x20dfdc83, 0x5bc15e60, 0xc41bddfe, 0xadfc5ba6, | |
| 3463 | + 0x3226d838, 0x49385adb, 0xd6e2d945, 0x9af7566b, 0x052dd5f5, | |
| 3464 | + 0x7e335716, 0xe1e9d488, 0x880e52d0, 0x17d4d14e, 0x6cca53ad, | |
| 3465 | + 0xf310d033, 0x63296829, 0xfcf3ebb7, 0x87ed6954, 0x1837eaca, | |
| 3466 | + 0x71d06c92, 0xee0aef0c, 0x95146def, 0x0aceee71, 0x46db615f, | |
| 3467 | + 0xd901e2c1, 0xa21f6022, 0x3dc5e3bc, 0x542265e4, 0xcbf8e67a, | |
| 3468 | + 0xb0e66499, 0x2f3ce707, 0x28cd7ac5, 0xb717f95b, 0xcc097bb8, | |
| 3469 | + 0x53d3f826, 0x3a347e7e, 0xa5eefde0, 0xdef07f03, 0x412afc9d, | |
| 3470 | + 0x0d3f73b3, 0x92e5f02d, 0xe9fb72ce, 0x7621f150, 0x1fc67708, | |
| 3471 | + 0x801cf496, 0xfb027675, 0x64d8f5eb, 0x32b39da3, 0xad691e3d, | |
| 3472 | + 0xd6779cde, 0x49ad1f40, 0x204a9918, 0xbf901a86, 0xc48e9865, | |
| 3473 | + 0x5b541bfb, 0x174194d5, 0x889b174b, 0xf38595a8, 0x6c5f1636, | |
| 3474 | + 0x05b8906e, 0x9a6213f0, 0xe17c9113, 0x7ea6128d, 0x79578f4f, | |
| 3475 | + 0xe68d0cd1, 0x9d938e32, 0x02490dac, 0x6bae8bf4, 0xf474086a, | |
| 3476 | + 0x8f6a8a89, 0x10b00917, 0x5ca58639, 0xc37f05a7, 0xb8618744, | |
| 3477 | + 0x27bb04da, 0x4e5c8282, 0xd186011c, 0xaa9883ff, 0x35420061, | |
| 3478 | + 0xa57bb87b, 0x3aa13be5, 0x41bfb906, 0xde653a98, 0xb782bcc0, | |
| 3479 | + 0x28583f5e, 0x5346bdbd, 0xcc9c3e23, 0x8089b10d, 0x1f533293, | |
| 3480 | + 0x644db070, 0xfb9733ee, 0x9270b5b6, 0x0daa3628, 0x76b4b4cb, | |
| 3481 | + 0xe96e3755, 0xee9faa97, 0x71452909, 0x0a5babea, 0x95812874, | |
| 3482 | + 0xfc66ae2c, 0x63bc2db2, 0x18a2af51, 0x87782ccf, 0xcb6da3e1, | |
| 3483 | + 0x54b7207f, 0x2fa9a29c, 0xb0732102, 0xd994a75a, 0x464e24c4, | |
| 3484 | + 0x3d50a627, 0xa28a25b9, 0xc652d052, 0x598853cc, 0x2296d12f, | |
| 3485 | + 0xbd4c52b1, 0xd4abd4e9, 0x4b715777, 0x306fd594, 0xafb5560a, | |
| 3486 | + 0xe3a0d924, 0x7c7a5aba, 0x0764d859, 0x98be5bc7, 0xf159dd9f, | |
| 3487 | + 0x6e835e01, 0x159ddce2, 0x8a475f7c, 0x8db6c2be, 0x126c4120, | |
| 3488 | + 0x6972c3c3, 0xf6a8405d, 0x9f4fc605, 0x0095459b, 0x7b8bc778, | |
| 3489 | + 0xe45144e6, 0xa844cbc8, 0x379e4856, 0x4c80cab5, 0xd35a492b, | |
| 3490 | + 0xbabdcf73, 0x25674ced, 0x5e79ce0e, 0xc1a34d90, 0x519af58a, | |
| 3491 | + 0xce407614, 0xb55ef4f7, 0x2a847769, 0x4363f131, 0xdcb972af, | |
| 3492 | + 0xa7a7f04c, 0x387d73d2, 0x7468fcfc, 0xebb27f62, 0x90acfd81, | |
| 3493 | + 0x0f767e1f, 0x6691f847, 0xf94b7bd9, 0x8255f93a, 0x1d8f7aa4, | |
| 3494 | + 0x1a7ee766, 0x85a464f8, 0xfebae61b, 0x61606585, 0x0887e3dd, | |
| 3495 | + 0x975d6043, 0xec43e2a0, 0x7399613e, 0x3f8cee10, 0xa0566d8e, | |
| 3496 | + 0xdb48ef6d, 0x44926cf3, 0x2d75eaab, 0xb2af6935, 0xc9b1ebd6, | |
| 3497 | + 0x566b6848}, | |
| 3498 | + {0x00000000, 0x65673b46, 0xcace768c, 0xafa94dca, 0x4eedeb59, | |
| 3499 | + 0x2b8ad01f, 0x84239dd5, 0xe144a693, 0x9ddbd6b2, 0xf8bcedf4, | |
| 3500 | + 0x5715a03e, 0x32729b78, 0xd3363deb, 0xb65106ad, 0x19f84b67, | |
| 3501 | + 0x7c9f7021, 0xe0c6ab25, 0x85a19063, 0x2a08dda9, 0x4f6fe6ef, | |
| 3502 | + 0xae2b407c, 0xcb4c7b3a, 0x64e536f0, 0x01820db6, 0x7d1d7d97, | |
| 3503 | + 0x187a46d1, 0xb7d30b1b, 0xd2b4305d, 0x33f096ce, 0x5697ad88, | |
| 3504 | + 0xf93ee042, 0x9c59db04, 0x1afc500b, 0x7f9b6b4d, 0xd0322687, | |
| 3505 | + 0xb5551dc1, 0x5411bb52, 0x31768014, 0x9edfcdde, 0xfbb8f698, | |
| 3506 | + 0x872786b9, 0xe240bdff, 0x4de9f035, 0x288ecb73, 0xc9ca6de0, | |
| 3507 | + 0xacad56a6, 0x03041b6c, 0x6663202a, 0xfa3afb2e, 0x9f5dc068, | |
| 3508 | + 0x30f48da2, 0x5593b6e4, 0xb4d71077, 0xd1b02b31, 0x7e1966fb, | |
| 3509 | + 0x1b7e5dbd, 0x67e12d9c, 0x028616da, 0xad2f5b10, 0xc8486056, | |
| 3510 | + 0x290cc6c5, 0x4c6bfd83, 0xe3c2b049, 0x86a58b0f, 0x35f8a016, | |
| 3511 | + 0x509f9b50, 0xff36d69a, 0x9a51eddc, 0x7b154b4f, 0x1e727009, | |
| 3512 | + 0xb1db3dc3, 0xd4bc0685, 0xa82376a4, 0xcd444de2, 0x62ed0028, | |
| 3513 | + 0x078a3b6e, 0xe6ce9dfd, 0x83a9a6bb, 0x2c00eb71, 0x4967d037, | |
| 3514 | + 0xd53e0b33, 0xb0593075, 0x1ff07dbf, 0x7a9746f9, 0x9bd3e06a, | |
| 3515 | + 0xfeb4db2c, 0x511d96e6, 0x347aada0, 0x48e5dd81, 0x2d82e6c7, | |
| 3516 | + 0x822bab0d, 0xe74c904b, 0x060836d8, 0x636f0d9e, 0xccc64054, | |
| 3517 | + 0xa9a17b12, 0x2f04f01d, 0x4a63cb5b, 0xe5ca8691, 0x80adbdd7, | |
| 3518 | + 0x61e91b44, 0x048e2002, 0xab276dc8, 0xce40568e, 0xb2df26af, | |
| 3519 | + 0xd7b81de9, 0x78115023, 0x1d766b65, 0xfc32cdf6, 0x9955f6b0, | |
| 3520 | + 0x36fcbb7a, 0x539b803c, 0xcfc25b38, 0xaaa5607e, 0x050c2db4, | |
| 3521 | + 0x606b16f2, 0x812fb061, 0xe4488b27, 0x4be1c6ed, 0x2e86fdab, | |
| 3522 | + 0x52198d8a, 0x377eb6cc, 0x98d7fb06, 0xfdb0c040, 0x1cf466d3, | |
| 3523 | + 0x79935d95, 0xd63a105f, 0xb35d2b19, 0x6bf1402c, 0x0e967b6a, | |
| 3524 | + 0xa13f36a0, 0xc4580de6, 0x251cab75, 0x407b9033, 0xefd2ddf9, | |
| 3525 | + 0x8ab5e6bf, 0xf62a969e, 0x934dadd8, 0x3ce4e012, 0x5983db54, | |
| 3526 | + 0xb8c77dc7, 0xdda04681, 0x72090b4b, 0x176e300d, 0x8b37eb09, | |
| 3527 | + 0xee50d04f, 0x41f99d85, 0x249ea6c3, 0xc5da0050, 0xa0bd3b16, | |
| 3528 | + 0x0f1476dc, 0x6a734d9a, 0x16ec3dbb, 0x738b06fd, 0xdc224b37, | |
| 3529 | + 0xb9457071, 0x5801d6e2, 0x3d66eda4, 0x92cfa06e, 0xf7a89b28, | |
| 3530 | + 0x710d1027, 0x146a2b61, 0xbbc366ab, 0xdea45ded, 0x3fe0fb7e, | |
| 3531 | + 0x5a87c038, 0xf52e8df2, 0x9049b6b4, 0xecd6c695, 0x89b1fdd3, | |
| 3532 | + 0x2618b019, 0x437f8b5f, 0xa23b2dcc, 0xc75c168a, 0x68f55b40, | |
| 3533 | + 0x0d926006, 0x91cbbb02, 0xf4ac8044, 0x5b05cd8e, 0x3e62f6c8, | |
| 3534 | + 0xdf26505b, 0xba416b1d, 0x15e826d7, 0x708f1d91, 0x0c106db0, | |
| 3535 | + 0x697756f6, 0xc6de1b3c, 0xa3b9207a, 0x42fd86e9, 0x279abdaf, | |
| 3536 | + 0x8833f065, 0xed54cb23, 0x5e09e03a, 0x3b6edb7c, 0x94c796b6, | |
| 3537 | + 0xf1a0adf0, 0x10e40b63, 0x75833025, 0xda2a7def, 0xbf4d46a9, | |
| 3538 | + 0xc3d23688, 0xa6b50dce, 0x091c4004, 0x6c7b7b42, 0x8d3fddd1, | |
| 3539 | + 0xe858e697, 0x47f1ab5d, 0x2296901b, 0xbecf4b1f, 0xdba87059, | |
| 3540 | + 0x74013d93, 0x116606d5, 0xf022a046, 0x95459b00, 0x3aecd6ca, | |
| 3541 | + 0x5f8bed8c, 0x23149dad, 0x4673a6eb, 0xe9daeb21, 0x8cbdd067, | |
| 3542 | + 0x6df976f4, 0x089e4db2, 0xa7370078, 0xc2503b3e, 0x44f5b031, | |
| 3543 | + 0x21928b77, 0x8e3bc6bd, 0xeb5cfdfb, 0x0a185b68, 0x6f7f602e, | |
| 3544 | + 0xc0d62de4, 0xa5b116a2, 0xd92e6683, 0xbc495dc5, 0x13e0100f, | |
| 3545 | + 0x76872b49, 0x97c38dda, 0xf2a4b69c, 0x5d0dfb56, 0x386ac010, | |
| 3546 | + 0xa4331b14, 0xc1542052, 0x6efd6d98, 0x0b9a56de, 0xeadef04d, | |
| 3547 | + 0x8fb9cb0b, 0x201086c1, 0x4577bd87, 0x39e8cda6, 0x5c8ff6e0, | |
| 3548 | + 0xf326bb2a, 0x9641806c, 0x770526ff, 0x12621db9, 0xbdcb5073, | |
| 3549 | + 0xd8ac6b35}, | |
| 3550 | + {0x00000000, 0xd7e28058, 0x74b406f1, 0xa35686a9, 0xe9680de2, | |
| 3551 | + 0x3e8a8dba, 0x9ddc0b13, 0x4a3e8b4b, 0x09a11d85, 0xde439ddd, | |
| 3552 | + 0x7d151b74, 0xaaf79b2c, 0xe0c91067, 0x372b903f, 0x947d1696, | |
| 3553 | + 0x439f96ce, 0x13423b0a, 0xc4a0bb52, 0x67f63dfb, 0xb014bda3, | |
| 3554 | + 0xfa2a36e8, 0x2dc8b6b0, 0x8e9e3019, 0x597cb041, 0x1ae3268f, | |
| 3555 | + 0xcd01a6d7, 0x6e57207e, 0xb9b5a026, 0xf38b2b6d, 0x2469ab35, | |
| 3556 | + 0x873f2d9c, 0x50ddadc4, 0x26847614, 0xf166f64c, 0x523070e5, | |
| 3557 | + 0x85d2f0bd, 0xcfec7bf6, 0x180efbae, 0xbb587d07, 0x6cbafd5f, | |
| 3558 | + 0x2f256b91, 0xf8c7ebc9, 0x5b916d60, 0x8c73ed38, 0xc64d6673, | |
| 3559 | + 0x11afe62b, 0xb2f96082, 0x651be0da, 0x35c64d1e, 0xe224cd46, | |
| 3560 | + 0x41724bef, 0x9690cbb7, 0xdcae40fc, 0x0b4cc0a4, 0xa81a460d, | |
| 3561 | + 0x7ff8c655, 0x3c67509b, 0xeb85d0c3, 0x48d3566a, 0x9f31d632, | |
| 3562 | + 0xd50f5d79, 0x02eddd21, 0xa1bb5b88, 0x7659dbd0, 0x4d08ec28, | |
| 3563 | + 0x9aea6c70, 0x39bcead9, 0xee5e6a81, 0xa460e1ca, 0x73826192, | |
| 3564 | + 0xd0d4e73b, 0x07366763, 0x44a9f1ad, 0x934b71f5, 0x301df75c, | |
| 3565 | + 0xe7ff7704, 0xadc1fc4f, 0x7a237c17, 0xd975fabe, 0x0e977ae6, | |
| 3566 | + 0x5e4ad722, 0x89a8577a, 0x2afed1d3, 0xfd1c518b, 0xb722dac0, | |
| 3567 | + 0x60c05a98, 0xc396dc31, 0x14745c69, 0x57ebcaa7, 0x80094aff, | |
| 3568 | + 0x235fcc56, 0xf4bd4c0e, 0xbe83c745, 0x6961471d, 0xca37c1b4, | |
| 3569 | + 0x1dd541ec, 0x6b8c9a3c, 0xbc6e1a64, 0x1f389ccd, 0xc8da1c95, | |
| 3570 | + 0x82e497de, 0x55061786, 0xf650912f, 0x21b21177, 0x622d87b9, | |
| 3571 | + 0xb5cf07e1, 0x16998148, 0xc17b0110, 0x8b458a5b, 0x5ca70a03, | |
| 3572 | + 0xfff18caa, 0x28130cf2, 0x78cea136, 0xaf2c216e, 0x0c7aa7c7, | |
| 3573 | + 0xdb98279f, 0x91a6acd4, 0x46442c8c, 0xe512aa25, 0x32f02a7d, | |
| 3574 | + 0x716fbcb3, 0xa68d3ceb, 0x05dbba42, 0xd2393a1a, 0x9807b151, | |
| 3575 | + 0x4fe53109, 0xecb3b7a0, 0x3b5137f8, 0x9a11d850, 0x4df35808, | |
| 3576 | + 0xeea5dea1, 0x39475ef9, 0x7379d5b2, 0xa49b55ea, 0x07cdd343, | |
| 3577 | + 0xd02f531b, 0x93b0c5d5, 0x4452458d, 0xe704c324, 0x30e6437c, | |
| 3578 | + 0x7ad8c837, 0xad3a486f, 0x0e6ccec6, 0xd98e4e9e, 0x8953e35a, | |
| 3579 | + 0x5eb16302, 0xfde7e5ab, 0x2a0565f3, 0x603beeb8, 0xb7d96ee0, | |
| 3580 | + 0x148fe849, 0xc36d6811, 0x80f2fedf, 0x57107e87, 0xf446f82e, | |
| 3581 | + 0x23a47876, 0x699af33d, 0xbe787365, 0x1d2ef5cc, 0xcacc7594, | |
| 3582 | + 0xbc95ae44, 0x6b772e1c, 0xc821a8b5, 0x1fc328ed, 0x55fda3a6, | |
| 3583 | + 0x821f23fe, 0x2149a557, 0xf6ab250f, 0xb534b3c1, 0x62d63399, | |
| 3584 | + 0xc180b530, 0x16623568, 0x5c5cbe23, 0x8bbe3e7b, 0x28e8b8d2, | |
| 3585 | + 0xff0a388a, 0xafd7954e, 0x78351516, 0xdb6393bf, 0x0c8113e7, | |
| 3586 | + 0x46bf98ac, 0x915d18f4, 0x320b9e5d, 0xe5e91e05, 0xa67688cb, | |
| 3587 | + 0x71940893, 0xd2c28e3a, 0x05200e62, 0x4f1e8529, 0x98fc0571, | |
| 3588 | + 0x3baa83d8, 0xec480380, 0xd7193478, 0x00fbb420, 0xa3ad3289, | |
| 3589 | + 0x744fb2d1, 0x3e71399a, 0xe993b9c2, 0x4ac53f6b, 0x9d27bf33, | |
| 3590 | + 0xdeb829fd, 0x095aa9a5, 0xaa0c2f0c, 0x7deeaf54, 0x37d0241f, | |
| 3591 | + 0xe032a447, 0x436422ee, 0x9486a2b6, 0xc45b0f72, 0x13b98f2a, | |
| 3592 | + 0xb0ef0983, 0x670d89db, 0x2d330290, 0xfad182c8, 0x59870461, | |
| 3593 | + 0x8e658439, 0xcdfa12f7, 0x1a1892af, 0xb94e1406, 0x6eac945e, | |
| 3594 | + 0x24921f15, 0xf3709f4d, 0x502619e4, 0x87c499bc, 0xf19d426c, | |
| 3595 | + 0x267fc234, 0x8529449d, 0x52cbc4c5, 0x18f54f8e, 0xcf17cfd6, | |
| 3596 | + 0x6c41497f, 0xbba3c927, 0xf83c5fe9, 0x2fdedfb1, 0x8c885918, | |
| 3597 | + 0x5b6ad940, 0x1154520b, 0xc6b6d253, 0x65e054fa, 0xb202d4a2, | |
| 3598 | + 0xe2df7966, 0x353df93e, 0x966b7f97, 0x4189ffcf, 0x0bb77484, | |
| 3599 | + 0xdc55f4dc, 0x7f037275, 0xa8e1f22d, 0xeb7e64e3, 0x3c9ce4bb, | |
| 3600 | + 0x9fca6212, 0x4828e24a, 0x02166901, 0xd5f4e959, 0x76a26ff0, | |
| 3601 | + 0xa140efa8}, | |
| 3602 | + {0x00000000, 0xef52b6e1, 0x05d46b83, 0xea86dd62, 0x0ba8d706, | |
| 3603 | + 0xe4fa61e7, 0x0e7cbc85, 0xe12e0a64, 0x1751ae0c, 0xf80318ed, | |
| 3604 | + 0x1285c58f, 0xfdd7736e, 0x1cf9790a, 0xf3abcfeb, 0x192d1289, | |
| 3605 | + 0xf67fa468, 0x2ea35c18, 0xc1f1eaf9, 0x2b77379b, 0xc425817a, | |
| 3606 | + 0x250b8b1e, 0xca593dff, 0x20dfe09d, 0xcf8d567c, 0x39f2f214, | |
| 3607 | + 0xd6a044f5, 0x3c269997, 0xd3742f76, 0x325a2512, 0xdd0893f3, | |
| 3608 | + 0x378e4e91, 0xd8dcf870, 0x5d46b830, 0xb2140ed1, 0x5892d3b3, | |
| 3609 | + 0xb7c06552, 0x56ee6f36, 0xb9bcd9d7, 0x533a04b5, 0xbc68b254, | |
| 3610 | + 0x4a17163c, 0xa545a0dd, 0x4fc37dbf, 0xa091cb5e, 0x41bfc13a, | |
| 3611 | + 0xaeed77db, 0x446baab9, 0xab391c58, 0x73e5e428, 0x9cb752c9, | |
| 3612 | + 0x76318fab, 0x9963394a, 0x784d332e, 0x971f85cf, 0x7d9958ad, | |
| 3613 | + 0x92cbee4c, 0x64b44a24, 0x8be6fcc5, 0x616021a7, 0x8e329746, | |
| 3614 | + 0x6f1c9d22, 0x804e2bc3, 0x6ac8f6a1, 0x859a4040, 0xba8d7060, | |
| 3615 | + 0x55dfc681, 0xbf591be3, 0x500bad02, 0xb125a766, 0x5e771187, | |
| 3616 | + 0xb4f1cce5, 0x5ba37a04, 0xaddcde6c, 0x428e688d, 0xa808b5ef, | |
| 3617 | + 0x475a030e, 0xa674096a, 0x4926bf8b, 0xa3a062e9, 0x4cf2d408, | |
| 3618 | + 0x942e2c78, 0x7b7c9a99, 0x91fa47fb, 0x7ea8f11a, 0x9f86fb7e, | |
| 3619 | + 0x70d44d9f, 0x9a5290fd, 0x7500261c, 0x837f8274, 0x6c2d3495, | |
| 3620 | + 0x86abe9f7, 0x69f95f16, 0x88d75572, 0x6785e393, 0x8d033ef1, | |
| 3621 | + 0x62518810, 0xe7cbc850, 0x08997eb1, 0xe21fa3d3, 0x0d4d1532, | |
| 3622 | + 0xec631f56, 0x0331a9b7, 0xe9b774d5, 0x06e5c234, 0xf09a665c, | |
| 3623 | + 0x1fc8d0bd, 0xf54e0ddf, 0x1a1cbb3e, 0xfb32b15a, 0x146007bb, | |
| 3624 | + 0xfee6dad9, 0x11b46c38, 0xc9689448, 0x263a22a9, 0xccbcffcb, | |
| 3625 | + 0x23ee492a, 0xc2c0434e, 0x2d92f5af, 0xc71428cd, 0x28469e2c, | |
| 3626 | + 0xde393a44, 0x316b8ca5, 0xdbed51c7, 0x34bfe726, 0xd591ed42, | |
| 3627 | + 0x3ac35ba3, 0xd04586c1, 0x3f173020, 0xae6be681, 0x41395060, | |
| 3628 | + 0xabbf8d02, 0x44ed3be3, 0xa5c33187, 0x4a918766, 0xa0175a04, | |
| 3629 | + 0x4f45ece5, 0xb93a488d, 0x5668fe6c, 0xbcee230e, 0x53bc95ef, | |
| 3630 | + 0xb2929f8b, 0x5dc0296a, 0xb746f408, 0x581442e9, 0x80c8ba99, | |
| 3631 | + 0x6f9a0c78, 0x851cd11a, 0x6a4e67fb, 0x8b606d9f, 0x6432db7e, | |
| 3632 | + 0x8eb4061c, 0x61e6b0fd, 0x97991495, 0x78cba274, 0x924d7f16, | |
| 3633 | + 0x7d1fc9f7, 0x9c31c393, 0x73637572, 0x99e5a810, 0x76b71ef1, | |
| 3634 | + 0xf32d5eb1, 0x1c7fe850, 0xf6f93532, 0x19ab83d3, 0xf88589b7, | |
| 3635 | + 0x17d73f56, 0xfd51e234, 0x120354d5, 0xe47cf0bd, 0x0b2e465c, | |
| 3636 | + 0xe1a89b3e, 0x0efa2ddf, 0xefd427bb, 0x0086915a, 0xea004c38, | |
| 3637 | + 0x0552fad9, 0xdd8e02a9, 0x32dcb448, 0xd85a692a, 0x3708dfcb, | |
| 3638 | + 0xd626d5af, 0x3974634e, 0xd3f2be2c, 0x3ca008cd, 0xcadfaca5, | |
| 3639 | + 0x258d1a44, 0xcf0bc726, 0x205971c7, 0xc1777ba3, 0x2e25cd42, | |
| 3640 | + 0xc4a31020, 0x2bf1a6c1, 0x14e696e1, 0xfbb42000, 0x1132fd62, | |
| 3641 | + 0xfe604b83, 0x1f4e41e7, 0xf01cf706, 0x1a9a2a64, 0xf5c89c85, | |
| 3642 | + 0x03b738ed, 0xece58e0c, 0x0663536e, 0xe931e58f, 0x081fefeb, | |
| 3643 | + 0xe74d590a, 0x0dcb8468, 0xe2993289, 0x3a45caf9, 0xd5177c18, | |
| 3644 | + 0x3f91a17a, 0xd0c3179b, 0x31ed1dff, 0xdebfab1e, 0x3439767c, | |
| 3645 | + 0xdb6bc09d, 0x2d1464f5, 0xc246d214, 0x28c00f76, 0xc792b997, | |
| 3646 | + 0x26bcb3f3, 0xc9ee0512, 0x2368d870, 0xcc3a6e91, 0x49a02ed1, | |
| 3647 | + 0xa6f29830, 0x4c744552, 0xa326f3b3, 0x4208f9d7, 0xad5a4f36, | |
| 3648 | + 0x47dc9254, 0xa88e24b5, 0x5ef180dd, 0xb1a3363c, 0x5b25eb5e, | |
| 3649 | + 0xb4775dbf, 0x555957db, 0xba0be13a, 0x508d3c58, 0xbfdf8ab9, | |
| 3650 | + 0x670372c9, 0x8851c428, 0x62d7194a, 0x8d85afab, 0x6caba5cf, | |
| 3651 | + 0x83f9132e, 0x697fce4c, 0x862d78ad, 0x7052dcc5, 0x9f006a24, | |
| 3652 | + 0x7586b746, 0x9ad401a7, 0x7bfa0bc3, 0x94a8bd22, 0x7e2e6040, | |
| 3653 | + 0x917cd6a1}, | |
| 3654 | + {0x00000000, 0x87a6cb43, 0xd43c90c7, 0x539a5b84, 0x730827cf, | |
| 3655 | + 0xf4aeec8c, 0xa734b708, 0x20927c4b, 0xe6104f9e, 0x61b684dd, | |
| 3656 | + 0x322cdf59, 0xb58a141a, 0x95186851, 0x12bea312, 0x4124f896, | |
| 3657 | + 0xc68233d5, 0x1751997d, 0x90f7523e, 0xc36d09ba, 0x44cbc2f9, | |
| 3658 | + 0x6459beb2, 0xe3ff75f1, 0xb0652e75, 0x37c3e536, 0xf141d6e3, | |
| 3659 | + 0x76e71da0, 0x257d4624, 0xa2db8d67, 0x8249f12c, 0x05ef3a6f, | |
| 3660 | + 0x567561eb, 0xd1d3aaa8, 0x2ea332fa, 0xa905f9b9, 0xfa9fa23d, | |
| 3661 | + 0x7d39697e, 0x5dab1535, 0xda0dde76, 0x899785f2, 0x0e314eb1, | |
| 3662 | + 0xc8b37d64, 0x4f15b627, 0x1c8feda3, 0x9b2926e0, 0xbbbb5aab, | |
| 3663 | + 0x3c1d91e8, 0x6f87ca6c, 0xe821012f, 0x39f2ab87, 0xbe5460c4, | |
| 3664 | + 0xedce3b40, 0x6a68f003, 0x4afa8c48, 0xcd5c470b, 0x9ec61c8f, | |
| 3665 | + 0x1960d7cc, 0xdfe2e419, 0x58442f5a, 0x0bde74de, 0x8c78bf9d, | |
| 3666 | + 0xaceac3d6, 0x2b4c0895, 0x78d65311, 0xff709852, 0x5d4665f4, | |
| 3667 | + 0xdae0aeb7, 0x897af533, 0x0edc3e70, 0x2e4e423b, 0xa9e88978, | |
| 3668 | + 0xfa72d2fc, 0x7dd419bf, 0xbb562a6a, 0x3cf0e129, 0x6f6abaad, | |
| 3669 | + 0xe8cc71ee, 0xc85e0da5, 0x4ff8c6e6, 0x1c629d62, 0x9bc45621, | |
| 3670 | + 0x4a17fc89, 0xcdb137ca, 0x9e2b6c4e, 0x198da70d, 0x391fdb46, | |
| 3671 | + 0xbeb91005, 0xed234b81, 0x6a8580c2, 0xac07b317, 0x2ba17854, | |
| 3672 | + 0x783b23d0, 0xff9de893, 0xdf0f94d8, 0x58a95f9b, 0x0b33041f, | |
| 3673 | + 0x8c95cf5c, 0x73e5570e, 0xf4439c4d, 0xa7d9c7c9, 0x207f0c8a, | |
| 3674 | + 0x00ed70c1, 0x874bbb82, 0xd4d1e006, 0x53772b45, 0x95f51890, | |
| 3675 | + 0x1253d3d3, 0x41c98857, 0xc66f4314, 0xe6fd3f5f, 0x615bf41c, | |
| 3676 | + 0x32c1af98, 0xb56764db, 0x64b4ce73, 0xe3120530, 0xb0885eb4, | |
| 3677 | + 0x372e95f7, 0x17bce9bc, 0x901a22ff, 0xc380797b, 0x4426b238, | |
| 3678 | + 0x82a481ed, 0x05024aae, 0x5698112a, 0xd13eda69, 0xf1aca622, | |
| 3679 | + 0x760a6d61, 0x259036e5, 0xa236fda6, 0xba8ccbe8, 0x3d2a00ab, | |
| 3680 | + 0x6eb05b2f, 0xe916906c, 0xc984ec27, 0x4e222764, 0x1db87ce0, | |
| 3681 | + 0x9a1eb7a3, 0x5c9c8476, 0xdb3a4f35, 0x88a014b1, 0x0f06dff2, | |
| 3682 | + 0x2f94a3b9, 0xa83268fa, 0xfba8337e, 0x7c0ef83d, 0xaddd5295, | |
| 3683 | + 0x2a7b99d6, 0x79e1c252, 0xfe470911, 0xded5755a, 0x5973be19, | |
| 3684 | + 0x0ae9e59d, 0x8d4f2ede, 0x4bcd1d0b, 0xcc6bd648, 0x9ff18dcc, | |
| 3685 | + 0x1857468f, 0x38c53ac4, 0xbf63f187, 0xecf9aa03, 0x6b5f6140, | |
| 3686 | + 0x942ff912, 0x13893251, 0x401369d5, 0xc7b5a296, 0xe727dedd, | |
| 3687 | + 0x6081159e, 0x331b4e1a, 0xb4bd8559, 0x723fb68c, 0xf5997dcf, | |
| 3688 | + 0xa603264b, 0x21a5ed08, 0x01379143, 0x86915a00, 0xd50b0184, | |
| 3689 | + 0x52adcac7, 0x837e606f, 0x04d8ab2c, 0x5742f0a8, 0xd0e43beb, | |
| 3690 | + 0xf07647a0, 0x77d08ce3, 0x244ad767, 0xa3ec1c24, 0x656e2ff1, | |
| 3691 | + 0xe2c8e4b2, 0xb152bf36, 0x36f47475, 0x1666083e, 0x91c0c37d, | |
| 3692 | + 0xc25a98f9, 0x45fc53ba, 0xe7caae1c, 0x606c655f, 0x33f63edb, | |
| 3693 | + 0xb450f598, 0x94c289d3, 0x13644290, 0x40fe1914, 0xc758d257, | |
| 3694 | + 0x01dae182, 0x867c2ac1, 0xd5e67145, 0x5240ba06, 0x72d2c64d, | |
| 3695 | + 0xf5740d0e, 0xa6ee568a, 0x21489dc9, 0xf09b3761, 0x773dfc22, | |
| 3696 | + 0x24a7a7a6, 0xa3016ce5, 0x839310ae, 0x0435dbed, 0x57af8069, | |
| 3697 | + 0xd0094b2a, 0x168b78ff, 0x912db3bc, 0xc2b7e838, 0x4511237b, | |
| 3698 | + 0x65835f30, 0xe2259473, 0xb1bfcff7, 0x361904b4, 0xc9699ce6, | |
| 3699 | + 0x4ecf57a5, 0x1d550c21, 0x9af3c762, 0xba61bb29, 0x3dc7706a, | |
| 3700 | + 0x6e5d2bee, 0xe9fbe0ad, 0x2f79d378, 0xa8df183b, 0xfb4543bf, | |
| 3701 | + 0x7ce388fc, 0x5c71f4b7, 0xdbd73ff4, 0x884d6470, 0x0febaf33, | |
| 3702 | + 0xde38059b, 0x599eced8, 0x0a04955c, 0x8da25e1f, 0xad302254, | |
| 3703 | + 0x2a96e917, 0x790cb293, 0xfeaa79d0, 0x38284a05, 0xbf8e8146, | |
| 3704 | + 0xec14dac2, 0x6bb21181, 0x4b206dca, 0xcc86a689, 0x9f1cfd0d, | |
| 3705 | + 0x18ba364e}}; | |
| 3706 | + | |
| 3707 | +local const z_word_t FAR crc_braid_big_table[][256] = { | |
| 3708 | + {0x0000000000000000, 0x43cba68700000000, 0xc7903cd400000000, | |
| 3709 | + 0x845b9a5300000000, 0xcf27087300000000, 0x8cecaef400000000, | |
| 3710 | + 0x08b734a700000000, 0x4b7c922000000000, 0x9e4f10e600000000, | |
| 3711 | + 0xdd84b66100000000, 0x59df2c3200000000, 0x1a148ab500000000, | |
| 3712 | + 0x5168189500000000, 0x12a3be1200000000, 0x96f8244100000000, | |
| 3713 | + 0xd53382c600000000, 0x7d99511700000000, 0x3e52f79000000000, | |
| 3714 | + 0xba096dc300000000, 0xf9c2cb4400000000, 0xb2be596400000000, | |
| 3715 | + 0xf175ffe300000000, 0x752e65b000000000, 0x36e5c33700000000, | |
| 3716 | + 0xe3d641f100000000, 0xa01de77600000000, 0x24467d2500000000, | |
| 3717 | + 0x678ddba200000000, 0x2cf1498200000000, 0x6f3aef0500000000, | |
| 3718 | + 0xeb61755600000000, 0xa8aad3d100000000, 0xfa32a32e00000000, | |
| 3719 | + 0xb9f905a900000000, 0x3da29ffa00000000, 0x7e69397d00000000, | |
| 3720 | + 0x3515ab5d00000000, 0x76de0dda00000000, 0xf285978900000000, | |
| 3721 | + 0xb14e310e00000000, 0x647db3c800000000, 0x27b6154f00000000, | |
| 3722 | + 0xa3ed8f1c00000000, 0xe026299b00000000, 0xab5abbbb00000000, | |
| 3723 | + 0xe8911d3c00000000, 0x6cca876f00000000, 0x2f0121e800000000, | |
| 3724 | + 0x87abf23900000000, 0xc46054be00000000, 0x403bceed00000000, | |
| 3725 | + 0x03f0686a00000000, 0x488cfa4a00000000, 0x0b475ccd00000000, | |
| 3726 | + 0x8f1cc69e00000000, 0xccd7601900000000, 0x19e4e2df00000000, | |
| 3727 | + 0x5a2f445800000000, 0xde74de0b00000000, 0x9dbf788c00000000, | |
| 3728 | + 0xd6c3eaac00000000, 0x95084c2b00000000, 0x1153d67800000000, | |
| 3729 | + 0x529870ff00000000, 0xf465465d00000000, 0xb7aee0da00000000, | |
| 3730 | + 0x33f57a8900000000, 0x703edc0e00000000, 0x3b424e2e00000000, | |
| 3731 | + 0x7889e8a900000000, 0xfcd272fa00000000, 0xbf19d47d00000000, | |
| 3732 | + 0x6a2a56bb00000000, 0x29e1f03c00000000, 0xadba6a6f00000000, | |
| 3733 | + 0xee71cce800000000, 0xa50d5ec800000000, 0xe6c6f84f00000000, | |
| 3734 | + 0x629d621c00000000, 0x2156c49b00000000, 0x89fc174a00000000, | |
| 3735 | + 0xca37b1cd00000000, 0x4e6c2b9e00000000, 0x0da78d1900000000, | |
| 3736 | + 0x46db1f3900000000, 0x0510b9be00000000, 0x814b23ed00000000, | |
| 3737 | + 0xc280856a00000000, 0x17b307ac00000000, 0x5478a12b00000000, | |
| 3738 | + 0xd0233b7800000000, 0x93e89dff00000000, 0xd8940fdf00000000, | |
| 3739 | + 0x9b5fa95800000000, 0x1f04330b00000000, 0x5ccf958c00000000, | |
| 3740 | + 0x0e57e57300000000, 0x4d9c43f400000000, 0xc9c7d9a700000000, | |
| 3741 | + 0x8a0c7f2000000000, 0xc170ed0000000000, 0x82bb4b8700000000, | |
| 3742 | + 0x06e0d1d400000000, 0x452b775300000000, 0x9018f59500000000, | |
| 3743 | + 0xd3d3531200000000, 0x5788c94100000000, 0x14436fc600000000, | |
| 3744 | + 0x5f3ffde600000000, 0x1cf45b6100000000, 0x98afc13200000000, | |
| 3745 | + 0xdb6467b500000000, 0x73ceb46400000000, 0x300512e300000000, | |
| 3746 | + 0xb45e88b000000000, 0xf7952e3700000000, 0xbce9bc1700000000, | |
| 3747 | + 0xff221a9000000000, 0x7b7980c300000000, 0x38b2264400000000, | |
| 3748 | + 0xed81a48200000000, 0xae4a020500000000, 0x2a11985600000000, | |
| 3749 | + 0x69da3ed100000000, 0x22a6acf100000000, 0x616d0a7600000000, | |
| 3750 | + 0xe536902500000000, 0xa6fd36a200000000, 0xe8cb8cba00000000, | |
| 3751 | + 0xab002a3d00000000, 0x2f5bb06e00000000, 0x6c9016e900000000, | |
| 3752 | + 0x27ec84c900000000, 0x6427224e00000000, 0xe07cb81d00000000, | |
| 3753 | + 0xa3b71e9a00000000, 0x76849c5c00000000, 0x354f3adb00000000, | |
| 3754 | + 0xb114a08800000000, 0xf2df060f00000000, 0xb9a3942f00000000, | |
| 3755 | + 0xfa6832a800000000, 0x7e33a8fb00000000, 0x3df80e7c00000000, | |
| 3756 | + 0x9552ddad00000000, 0xd6997b2a00000000, 0x52c2e17900000000, | |
| 3757 | + 0x110947fe00000000, 0x5a75d5de00000000, 0x19be735900000000, | |
| 3758 | + 0x9de5e90a00000000, 0xde2e4f8d00000000, 0x0b1dcd4b00000000, | |
| 3759 | + 0x48d66bcc00000000, 0xcc8df19f00000000, 0x8f46571800000000, | |
| 3760 | + 0xc43ac53800000000, 0x87f163bf00000000, 0x03aaf9ec00000000, | |
| 3761 | + 0x40615f6b00000000, 0x12f92f9400000000, 0x5132891300000000, | |
| 3762 | + 0xd569134000000000, 0x96a2b5c700000000, 0xddde27e700000000, | |
| 3763 | + 0x9e15816000000000, 0x1a4e1b3300000000, 0x5985bdb400000000, | |
| 3764 | + 0x8cb63f7200000000, 0xcf7d99f500000000, 0x4b2603a600000000, | |
| 3765 | + 0x08eda52100000000, 0x4391370100000000, 0x005a918600000000, | |
| 3766 | + 0x84010bd500000000, 0xc7caad5200000000, 0x6f607e8300000000, | |
| 3767 | + 0x2cabd80400000000, 0xa8f0425700000000, 0xeb3be4d000000000, | |
| 3768 | + 0xa04776f000000000, 0xe38cd07700000000, 0x67d74a2400000000, | |
| 3769 | + 0x241ceca300000000, 0xf12f6e6500000000, 0xb2e4c8e200000000, | |
| 3770 | + 0x36bf52b100000000, 0x7574f43600000000, 0x3e08661600000000, | |
| 3771 | + 0x7dc3c09100000000, 0xf9985ac200000000, 0xba53fc4500000000, | |
| 3772 | + 0x1caecae700000000, 0x5f656c6000000000, 0xdb3ef63300000000, | |
| 3773 | + 0x98f550b400000000, 0xd389c29400000000, 0x9042641300000000, | |
| 3774 | + 0x1419fe4000000000, 0x57d258c700000000, 0x82e1da0100000000, | |
| 3775 | + 0xc12a7c8600000000, 0x4571e6d500000000, 0x06ba405200000000, | |
| 3776 | + 0x4dc6d27200000000, 0x0e0d74f500000000, 0x8a56eea600000000, | |
| 3777 | + 0xc99d482100000000, 0x61379bf000000000, 0x22fc3d7700000000, | |
| 3778 | + 0xa6a7a72400000000, 0xe56c01a300000000, 0xae10938300000000, | |
| 3779 | + 0xeddb350400000000, 0x6980af5700000000, 0x2a4b09d000000000, | |
| 3780 | + 0xff788b1600000000, 0xbcb32d9100000000, 0x38e8b7c200000000, | |
| 3781 | + 0x7b23114500000000, 0x305f836500000000, 0x739425e200000000, | |
| 3782 | + 0xf7cfbfb100000000, 0xb404193600000000, 0xe69c69c900000000, | |
| 3783 | + 0xa557cf4e00000000, 0x210c551d00000000, 0x62c7f39a00000000, | |
| 3784 | + 0x29bb61ba00000000, 0x6a70c73d00000000, 0xee2b5d6e00000000, | |
| 3785 | + 0xade0fbe900000000, 0x78d3792f00000000, 0x3b18dfa800000000, | |
| 3786 | + 0xbf4345fb00000000, 0xfc88e37c00000000, 0xb7f4715c00000000, | |
| 3787 | + 0xf43fd7db00000000, 0x70644d8800000000, 0x33afeb0f00000000, | |
| 3788 | + 0x9b0538de00000000, 0xd8ce9e5900000000, 0x5c95040a00000000, | |
| 3789 | + 0x1f5ea28d00000000, 0x542230ad00000000, 0x17e9962a00000000, | |
| 3790 | + 0x93b20c7900000000, 0xd079aafe00000000, 0x054a283800000000, | |
| 3791 | + 0x46818ebf00000000, 0xc2da14ec00000000, 0x8111b26b00000000, | |
| 3792 | + 0xca6d204b00000000, 0x89a686cc00000000, 0x0dfd1c9f00000000, | |
| 3793 | + 0x4e36ba1800000000}, | |
| 3794 | + {0x0000000000000000, 0xe1b652ef00000000, 0x836bd40500000000, | |
| 3795 | + 0x62dd86ea00000000, 0x06d7a80b00000000, 0xe761fae400000000, | |
| 3796 | + 0x85bc7c0e00000000, 0x640a2ee100000000, 0x0cae511700000000, | |
| 3797 | + 0xed1803f800000000, 0x8fc5851200000000, 0x6e73d7fd00000000, | |
| 3798 | + 0x0a79f91c00000000, 0xebcfabf300000000, 0x89122d1900000000, | |
| 3799 | + 0x68a47ff600000000, 0x185ca32e00000000, 0xf9eaf1c100000000, | |
| 3800 | + 0x9b37772b00000000, 0x7a8125c400000000, 0x1e8b0b2500000000, | |
| 3801 | + 0xff3d59ca00000000, 0x9de0df2000000000, 0x7c568dcf00000000, | |
| 3802 | + 0x14f2f23900000000, 0xf544a0d600000000, 0x9799263c00000000, | |
| 3803 | + 0x762f74d300000000, 0x12255a3200000000, 0xf39308dd00000000, | |
| 3804 | + 0x914e8e3700000000, 0x70f8dcd800000000, 0x30b8465d00000000, | |
| 3805 | + 0xd10e14b200000000, 0xb3d3925800000000, 0x5265c0b700000000, | |
| 3806 | + 0x366fee5600000000, 0xd7d9bcb900000000, 0xb5043a5300000000, | |
| 3807 | + 0x54b268bc00000000, 0x3c16174a00000000, 0xdda045a500000000, | |
| 3808 | + 0xbf7dc34f00000000, 0x5ecb91a000000000, 0x3ac1bf4100000000, | |
| 3809 | + 0xdb77edae00000000, 0xb9aa6b4400000000, 0x581c39ab00000000, | |
| 3810 | + 0x28e4e57300000000, 0xc952b79c00000000, 0xab8f317600000000, | |
| 3811 | + 0x4a39639900000000, 0x2e334d7800000000, 0xcf851f9700000000, | |
| 3812 | + 0xad58997d00000000, 0x4ceecb9200000000, 0x244ab46400000000, | |
| 3813 | + 0xc5fce68b00000000, 0xa721606100000000, 0x4697328e00000000, | |
| 3814 | + 0x229d1c6f00000000, 0xc32b4e8000000000, 0xa1f6c86a00000000, | |
| 3815 | + 0x40409a8500000000, 0x60708dba00000000, 0x81c6df5500000000, | |
| 3816 | + 0xe31b59bf00000000, 0x02ad0b5000000000, 0x66a725b100000000, | |
| 3817 | + 0x8711775e00000000, 0xe5ccf1b400000000, 0x047aa35b00000000, | |
| 3818 | + 0x6cdedcad00000000, 0x8d688e4200000000, 0xefb508a800000000, | |
| 3819 | + 0x0e035a4700000000, 0x6a0974a600000000, 0x8bbf264900000000, | |
| 3820 | + 0xe962a0a300000000, 0x08d4f24c00000000, 0x782c2e9400000000, | |
| 3821 | + 0x999a7c7b00000000, 0xfb47fa9100000000, 0x1af1a87e00000000, | |
| 3822 | + 0x7efb869f00000000, 0x9f4dd47000000000, 0xfd90529a00000000, | |
| 3823 | + 0x1c26007500000000, 0x74827f8300000000, 0x95342d6c00000000, | |
| 3824 | + 0xf7e9ab8600000000, 0x165ff96900000000, 0x7255d78800000000, | |
| 3825 | + 0x93e3856700000000, 0xf13e038d00000000, 0x1088516200000000, | |
| 3826 | + 0x50c8cbe700000000, 0xb17e990800000000, 0xd3a31fe200000000, | |
| 3827 | + 0x32154d0d00000000, 0x561f63ec00000000, 0xb7a9310300000000, | |
| 3828 | + 0xd574b7e900000000, 0x34c2e50600000000, 0x5c669af000000000, | |
| 3829 | + 0xbdd0c81f00000000, 0xdf0d4ef500000000, 0x3ebb1c1a00000000, | |
| 3830 | + 0x5ab132fb00000000, 0xbb07601400000000, 0xd9dae6fe00000000, | |
| 3831 | + 0x386cb41100000000, 0x489468c900000000, 0xa9223a2600000000, | |
| 3832 | + 0xcbffbccc00000000, 0x2a49ee2300000000, 0x4e43c0c200000000, | |
| 3833 | + 0xaff5922d00000000, 0xcd2814c700000000, 0x2c9e462800000000, | |
| 3834 | + 0x443a39de00000000, 0xa58c6b3100000000, 0xc751eddb00000000, | |
| 3835 | + 0x26e7bf3400000000, 0x42ed91d500000000, 0xa35bc33a00000000, | |
| 3836 | + 0xc18645d000000000, 0x2030173f00000000, 0x81e66bae00000000, | |
| 3837 | + 0x6050394100000000, 0x028dbfab00000000, 0xe33bed4400000000, | |
| 3838 | + 0x8731c3a500000000, 0x6687914a00000000, 0x045a17a000000000, | |
| 3839 | + 0xe5ec454f00000000, 0x8d483ab900000000, 0x6cfe685600000000, | |
| 3840 | + 0x0e23eebc00000000, 0xef95bc5300000000, 0x8b9f92b200000000, | |
| 3841 | + 0x6a29c05d00000000, 0x08f446b700000000, 0xe942145800000000, | |
| 3842 | + 0x99bac88000000000, 0x780c9a6f00000000, 0x1ad11c8500000000, | |
| 3843 | + 0xfb674e6a00000000, 0x9f6d608b00000000, 0x7edb326400000000, | |
| 3844 | + 0x1c06b48e00000000, 0xfdb0e66100000000, 0x9514999700000000, | |
| 3845 | + 0x74a2cb7800000000, 0x167f4d9200000000, 0xf7c91f7d00000000, | |
| 3846 | + 0x93c3319c00000000, 0x7275637300000000, 0x10a8e59900000000, | |
| 3847 | + 0xf11eb77600000000, 0xb15e2df300000000, 0x50e87f1c00000000, | |
| 3848 | + 0x3235f9f600000000, 0xd383ab1900000000, 0xb78985f800000000, | |
| 3849 | + 0x563fd71700000000, 0x34e251fd00000000, 0xd554031200000000, | |
| 3850 | + 0xbdf07ce400000000, 0x5c462e0b00000000, 0x3e9ba8e100000000, | |
| 3851 | + 0xdf2dfa0e00000000, 0xbb27d4ef00000000, 0x5a91860000000000, | |
| 3852 | + 0x384c00ea00000000, 0xd9fa520500000000, 0xa9028edd00000000, | |
| 3853 | + 0x48b4dc3200000000, 0x2a695ad800000000, 0xcbdf083700000000, | |
| 3854 | + 0xafd526d600000000, 0x4e63743900000000, 0x2cbef2d300000000, | |
| 3855 | + 0xcd08a03c00000000, 0xa5acdfca00000000, 0x441a8d2500000000, | |
| 3856 | + 0x26c70bcf00000000, 0xc771592000000000, 0xa37b77c100000000, | |
| 3857 | + 0x42cd252e00000000, 0x2010a3c400000000, 0xc1a6f12b00000000, | |
| 3858 | + 0xe196e61400000000, 0x0020b4fb00000000, 0x62fd321100000000, | |
| 3859 | + 0x834b60fe00000000, 0xe7414e1f00000000, 0x06f71cf000000000, | |
| 3860 | + 0x642a9a1a00000000, 0x859cc8f500000000, 0xed38b70300000000, | |
| 3861 | + 0x0c8ee5ec00000000, 0x6e53630600000000, 0x8fe531e900000000, | |
| 3862 | + 0xebef1f0800000000, 0x0a594de700000000, 0x6884cb0d00000000, | |
| 3863 | + 0x893299e200000000, 0xf9ca453a00000000, 0x187c17d500000000, | |
| 3864 | + 0x7aa1913f00000000, 0x9b17c3d000000000, 0xff1ded3100000000, | |
| 3865 | + 0x1eabbfde00000000, 0x7c76393400000000, 0x9dc06bdb00000000, | |
| 3866 | + 0xf564142d00000000, 0x14d246c200000000, 0x760fc02800000000, | |
| 3867 | + 0x97b992c700000000, 0xf3b3bc2600000000, 0x1205eec900000000, | |
| 3868 | + 0x70d8682300000000, 0x916e3acc00000000, 0xd12ea04900000000, | |
| 3869 | + 0x3098f2a600000000, 0x5245744c00000000, 0xb3f326a300000000, | |
| 3870 | + 0xd7f9084200000000, 0x364f5aad00000000, 0x5492dc4700000000, | |
| 3871 | + 0xb5248ea800000000, 0xdd80f15e00000000, 0x3c36a3b100000000, | |
| 3872 | + 0x5eeb255b00000000, 0xbf5d77b400000000, 0xdb57595500000000, | |
| 3873 | + 0x3ae10bba00000000, 0x583c8d5000000000, 0xb98adfbf00000000, | |
| 3874 | + 0xc972036700000000, 0x28c4518800000000, 0x4a19d76200000000, | |
| 3875 | + 0xabaf858d00000000, 0xcfa5ab6c00000000, 0x2e13f98300000000, | |
| 3876 | + 0x4cce7f6900000000, 0xad782d8600000000, 0xc5dc527000000000, | |
| 3877 | + 0x246a009f00000000, 0x46b7867500000000, 0xa701d49a00000000, | |
| 3878 | + 0xc30bfa7b00000000, 0x22bda89400000000, 0x40602e7e00000000, | |
| 3879 | + 0xa1d67c9100000000}, | |
| 3880 | + {0x0000000000000000, 0x5880e2d700000000, 0xf106b47400000000, | |
| 3881 | + 0xa98656a300000000, 0xe20d68e900000000, 0xba8d8a3e00000000, | |
| 3882 | + 0x130bdc9d00000000, 0x4b8b3e4a00000000, 0x851da10900000000, | |
| 3883 | + 0xdd9d43de00000000, 0x741b157d00000000, 0x2c9bf7aa00000000, | |
| 3884 | + 0x6710c9e000000000, 0x3f902b3700000000, 0x96167d9400000000, | |
| 3885 | + 0xce969f4300000000, 0x0a3b421300000000, 0x52bba0c400000000, | |
| 3886 | + 0xfb3df66700000000, 0xa3bd14b000000000, 0xe8362afa00000000, | |
| 3887 | + 0xb0b6c82d00000000, 0x19309e8e00000000, 0x41b07c5900000000, | |
| 3888 | + 0x8f26e31a00000000, 0xd7a601cd00000000, 0x7e20576e00000000, | |
| 3889 | + 0x26a0b5b900000000, 0x6d2b8bf300000000, 0x35ab692400000000, | |
| 3890 | + 0x9c2d3f8700000000, 0xc4addd5000000000, 0x1476842600000000, | |
| 3891 | + 0x4cf666f100000000, 0xe570305200000000, 0xbdf0d28500000000, | |
| 3892 | + 0xf67beccf00000000, 0xaefb0e1800000000, 0x077d58bb00000000, | |
| 3893 | + 0x5ffdba6c00000000, 0x916b252f00000000, 0xc9ebc7f800000000, | |
| 3894 | + 0x606d915b00000000, 0x38ed738c00000000, 0x73664dc600000000, | |
| 3895 | + 0x2be6af1100000000, 0x8260f9b200000000, 0xdae01b6500000000, | |
| 3896 | + 0x1e4dc63500000000, 0x46cd24e200000000, 0xef4b724100000000, | |
| 3897 | + 0xb7cb909600000000, 0xfc40aedc00000000, 0xa4c04c0b00000000, | |
| 3898 | + 0x0d461aa800000000, 0x55c6f87f00000000, 0x9b50673c00000000, | |
| 3899 | + 0xc3d085eb00000000, 0x6a56d34800000000, 0x32d6319f00000000, | |
| 3900 | + 0x795d0fd500000000, 0x21dded0200000000, 0x885bbba100000000, | |
| 3901 | + 0xd0db597600000000, 0x28ec084d00000000, 0x706cea9a00000000, | |
| 3902 | + 0xd9eabc3900000000, 0x816a5eee00000000, 0xcae160a400000000, | |
| 3903 | + 0x9261827300000000, 0x3be7d4d000000000, 0x6367360700000000, | |
| 3904 | + 0xadf1a94400000000, 0xf5714b9300000000, 0x5cf71d3000000000, | |
| 3905 | + 0x0477ffe700000000, 0x4ffcc1ad00000000, 0x177c237a00000000, | |
| 3906 | + 0xbefa75d900000000, 0xe67a970e00000000, 0x22d74a5e00000000, | |
| 3907 | + 0x7a57a88900000000, 0xd3d1fe2a00000000, 0x8b511cfd00000000, | |
| 3908 | + 0xc0da22b700000000, 0x985ac06000000000, 0x31dc96c300000000, | |
| 3909 | + 0x695c741400000000, 0xa7caeb5700000000, 0xff4a098000000000, | |
| 3910 | + 0x56cc5f2300000000, 0x0e4cbdf400000000, 0x45c783be00000000, | |
| 3911 | + 0x1d47616900000000, 0xb4c137ca00000000, 0xec41d51d00000000, | |
| 3912 | + 0x3c9a8c6b00000000, 0x641a6ebc00000000, 0xcd9c381f00000000, | |
| 3913 | + 0x951cdac800000000, 0xde97e48200000000, 0x8617065500000000, | |
| 3914 | + 0x2f9150f600000000, 0x7711b22100000000, 0xb9872d6200000000, | |
| 3915 | + 0xe107cfb500000000, 0x4881991600000000, 0x10017bc100000000, | |
| 3916 | + 0x5b8a458b00000000, 0x030aa75c00000000, 0xaa8cf1ff00000000, | |
| 3917 | + 0xf20c132800000000, 0x36a1ce7800000000, 0x6e212caf00000000, | |
| 3918 | + 0xc7a77a0c00000000, 0x9f2798db00000000, 0xd4aca69100000000, | |
| 3919 | + 0x8c2c444600000000, 0x25aa12e500000000, 0x7d2af03200000000, | |
| 3920 | + 0xb3bc6f7100000000, 0xeb3c8da600000000, 0x42badb0500000000, | |
| 3921 | + 0x1a3a39d200000000, 0x51b1079800000000, 0x0931e54f00000000, | |
| 3922 | + 0xa0b7b3ec00000000, 0xf837513b00000000, 0x50d8119a00000000, | |
| 3923 | + 0x0858f34d00000000, 0xa1dea5ee00000000, 0xf95e473900000000, | |
| 3924 | + 0xb2d5797300000000, 0xea559ba400000000, 0x43d3cd0700000000, | |
| 3925 | + 0x1b532fd000000000, 0xd5c5b09300000000, 0x8d45524400000000, | |
| 3926 | + 0x24c304e700000000, 0x7c43e63000000000, 0x37c8d87a00000000, | |
| 3927 | + 0x6f483aad00000000, 0xc6ce6c0e00000000, 0x9e4e8ed900000000, | |
| 3928 | + 0x5ae3538900000000, 0x0263b15e00000000, 0xabe5e7fd00000000, | |
| 3929 | + 0xf365052a00000000, 0xb8ee3b6000000000, 0xe06ed9b700000000, | |
| 3930 | + 0x49e88f1400000000, 0x11686dc300000000, 0xdffef28000000000, | |
| 3931 | + 0x877e105700000000, 0x2ef846f400000000, 0x7678a42300000000, | |
| 3932 | + 0x3df39a6900000000, 0x657378be00000000, 0xccf52e1d00000000, | |
| 3933 | + 0x9475ccca00000000, 0x44ae95bc00000000, 0x1c2e776b00000000, | |
| 3934 | + 0xb5a821c800000000, 0xed28c31f00000000, 0xa6a3fd5500000000, | |
| 3935 | + 0xfe231f8200000000, 0x57a5492100000000, 0x0f25abf600000000, | |
| 3936 | + 0xc1b334b500000000, 0x9933d66200000000, 0x30b580c100000000, | |
| 3937 | + 0x6835621600000000, 0x23be5c5c00000000, 0x7b3ebe8b00000000, | |
| 3938 | + 0xd2b8e82800000000, 0x8a380aff00000000, 0x4e95d7af00000000, | |
| 3939 | + 0x1615357800000000, 0xbf9363db00000000, 0xe713810c00000000, | |
| 3940 | + 0xac98bf4600000000, 0xf4185d9100000000, 0x5d9e0b3200000000, | |
| 3941 | + 0x051ee9e500000000, 0xcb8876a600000000, 0x9308947100000000, | |
| 3942 | + 0x3a8ec2d200000000, 0x620e200500000000, 0x29851e4f00000000, | |
| 3943 | + 0x7105fc9800000000, 0xd883aa3b00000000, 0x800348ec00000000, | |
| 3944 | + 0x783419d700000000, 0x20b4fb0000000000, 0x8932ada300000000, | |
| 3945 | + 0xd1b24f7400000000, 0x9a39713e00000000, 0xc2b993e900000000, | |
| 3946 | + 0x6b3fc54a00000000, 0x33bf279d00000000, 0xfd29b8de00000000, | |
| 3947 | + 0xa5a95a0900000000, 0x0c2f0caa00000000, 0x54afee7d00000000, | |
| 3948 | + 0x1f24d03700000000, 0x47a432e000000000, 0xee22644300000000, | |
| 3949 | + 0xb6a2869400000000, 0x720f5bc400000000, 0x2a8fb91300000000, | |
| 3950 | + 0x8309efb000000000, 0xdb890d6700000000, 0x9002332d00000000, | |
| 3951 | + 0xc882d1fa00000000, 0x6104875900000000, 0x3984658e00000000, | |
| 3952 | + 0xf712facd00000000, 0xaf92181a00000000, 0x06144eb900000000, | |
| 3953 | + 0x5e94ac6e00000000, 0x151f922400000000, 0x4d9f70f300000000, | |
| 3954 | + 0xe419265000000000, 0xbc99c48700000000, 0x6c429df100000000, | |
| 3955 | + 0x34c27f2600000000, 0x9d44298500000000, 0xc5c4cb5200000000, | |
| 3956 | + 0x8e4ff51800000000, 0xd6cf17cf00000000, 0x7f49416c00000000, | |
| 3957 | + 0x27c9a3bb00000000, 0xe95f3cf800000000, 0xb1dfde2f00000000, | |
| 3958 | + 0x1859888c00000000, 0x40d96a5b00000000, 0x0b52541100000000, | |
| 3959 | + 0x53d2b6c600000000, 0xfa54e06500000000, 0xa2d402b200000000, | |
| 3960 | + 0x6679dfe200000000, 0x3ef93d3500000000, 0x977f6b9600000000, | |
| 3961 | + 0xcfff894100000000, 0x8474b70b00000000, 0xdcf455dc00000000, | |
| 3962 | + 0x7572037f00000000, 0x2df2e1a800000000, 0xe3647eeb00000000, | |
| 3963 | + 0xbbe49c3c00000000, 0x1262ca9f00000000, 0x4ae2284800000000, | |
| 3964 | + 0x0169160200000000, 0x59e9f4d500000000, 0xf06fa27600000000, | |
| 3965 | + 0xa8ef40a100000000}, | |
| 3966 | + {0x0000000000000000, 0x463b676500000000, 0x8c76ceca00000000, | |
| 3967 | + 0xca4da9af00000000, 0x59ebed4e00000000, 0x1fd08a2b00000000, | |
| 3968 | + 0xd59d238400000000, 0x93a644e100000000, 0xb2d6db9d00000000, | |
| 3969 | + 0xf4edbcf800000000, 0x3ea0155700000000, 0x789b723200000000, | |
| 3970 | + 0xeb3d36d300000000, 0xad0651b600000000, 0x674bf81900000000, | |
| 3971 | + 0x21709f7c00000000, 0x25abc6e000000000, 0x6390a18500000000, | |
| 3972 | + 0xa9dd082a00000000, 0xefe66f4f00000000, 0x7c402bae00000000, | |
| 3973 | + 0x3a7b4ccb00000000, 0xf036e56400000000, 0xb60d820100000000, | |
| 3974 | + 0x977d1d7d00000000, 0xd1467a1800000000, 0x1b0bd3b700000000, | |
| 3975 | + 0x5d30b4d200000000, 0xce96f03300000000, 0x88ad975600000000, | |
| 3976 | + 0x42e03ef900000000, 0x04db599c00000000, 0x0b50fc1a00000000, | |
| 3977 | + 0x4d6b9b7f00000000, 0x872632d000000000, 0xc11d55b500000000, | |
| 3978 | + 0x52bb115400000000, 0x1480763100000000, 0xdecddf9e00000000, | |
| 3979 | + 0x98f6b8fb00000000, 0xb986278700000000, 0xffbd40e200000000, | |
| 3980 | + 0x35f0e94d00000000, 0x73cb8e2800000000, 0xe06dcac900000000, | |
| 3981 | + 0xa656adac00000000, 0x6c1b040300000000, 0x2a20636600000000, | |
| 3982 | + 0x2efb3afa00000000, 0x68c05d9f00000000, 0xa28df43000000000, | |
| 3983 | + 0xe4b6935500000000, 0x7710d7b400000000, 0x312bb0d100000000, | |
| 3984 | + 0xfb66197e00000000, 0xbd5d7e1b00000000, 0x9c2de16700000000, | |
| 3985 | + 0xda16860200000000, 0x105b2fad00000000, 0x566048c800000000, | |
| 3986 | + 0xc5c60c2900000000, 0x83fd6b4c00000000, 0x49b0c2e300000000, | |
| 3987 | + 0x0f8ba58600000000, 0x16a0f83500000000, 0x509b9f5000000000, | |
| 3988 | + 0x9ad636ff00000000, 0xdced519a00000000, 0x4f4b157b00000000, | |
| 3989 | + 0x0970721e00000000, 0xc33ddbb100000000, 0x8506bcd400000000, | |
| 3990 | + 0xa47623a800000000, 0xe24d44cd00000000, 0x2800ed6200000000, | |
| 3991 | + 0x6e3b8a0700000000, 0xfd9dcee600000000, 0xbba6a98300000000, | |
| 3992 | + 0x71eb002c00000000, 0x37d0674900000000, 0x330b3ed500000000, | |
| 3993 | + 0x753059b000000000, 0xbf7df01f00000000, 0xf946977a00000000, | |
| 3994 | + 0x6ae0d39b00000000, 0x2cdbb4fe00000000, 0xe6961d5100000000, | |
| 3995 | + 0xa0ad7a3400000000, 0x81dde54800000000, 0xc7e6822d00000000, | |
| 3996 | + 0x0dab2b8200000000, 0x4b904ce700000000, 0xd836080600000000, | |
| 3997 | + 0x9e0d6f6300000000, 0x5440c6cc00000000, 0x127ba1a900000000, | |
| 3998 | + 0x1df0042f00000000, 0x5bcb634a00000000, 0x9186cae500000000, | |
| 3999 | + 0xd7bdad8000000000, 0x441be96100000000, 0x02208e0400000000, | |
| 4000 | + 0xc86d27ab00000000, 0x8e5640ce00000000, 0xaf26dfb200000000, | |
| 4001 | + 0xe91db8d700000000, 0x2350117800000000, 0x656b761d00000000, | |
| 4002 | + 0xf6cd32fc00000000, 0xb0f6559900000000, 0x7abbfc3600000000, | |
| 4003 | + 0x3c809b5300000000, 0x385bc2cf00000000, 0x7e60a5aa00000000, | |
| 4004 | + 0xb42d0c0500000000, 0xf2166b6000000000, 0x61b02f8100000000, | |
| 4005 | + 0x278b48e400000000, 0xedc6e14b00000000, 0xabfd862e00000000, | |
| 4006 | + 0x8a8d195200000000, 0xccb67e3700000000, 0x06fbd79800000000, | |
| 4007 | + 0x40c0b0fd00000000, 0xd366f41c00000000, 0x955d937900000000, | |
| 4008 | + 0x5f103ad600000000, 0x192b5db300000000, 0x2c40f16b00000000, | |
| 4009 | + 0x6a7b960e00000000, 0xa0363fa100000000, 0xe60d58c400000000, | |
| 4010 | + 0x75ab1c2500000000, 0x33907b4000000000, 0xf9ddd2ef00000000, | |
| 4011 | + 0xbfe6b58a00000000, 0x9e962af600000000, 0xd8ad4d9300000000, | |
| 4012 | + 0x12e0e43c00000000, 0x54db835900000000, 0xc77dc7b800000000, | |
| 4013 | + 0x8146a0dd00000000, 0x4b0b097200000000, 0x0d306e1700000000, | |
| 4014 | + 0x09eb378b00000000, 0x4fd050ee00000000, 0x859df94100000000, | |
| 4015 | + 0xc3a69e2400000000, 0x5000dac500000000, 0x163bbda000000000, | |
| 4016 | + 0xdc76140f00000000, 0x9a4d736a00000000, 0xbb3dec1600000000, | |
| 4017 | + 0xfd068b7300000000, 0x374b22dc00000000, 0x717045b900000000, | |
| 4018 | + 0xe2d6015800000000, 0xa4ed663d00000000, 0x6ea0cf9200000000, | |
| 4019 | + 0x289ba8f700000000, 0x27100d7100000000, 0x612b6a1400000000, | |
| 4020 | + 0xab66c3bb00000000, 0xed5da4de00000000, 0x7efbe03f00000000, | |
| 4021 | + 0x38c0875a00000000, 0xf28d2ef500000000, 0xb4b6499000000000, | |
| 4022 | + 0x95c6d6ec00000000, 0xd3fdb18900000000, 0x19b0182600000000, | |
| 4023 | + 0x5f8b7f4300000000, 0xcc2d3ba200000000, 0x8a165cc700000000, | |
| 4024 | + 0x405bf56800000000, 0x0660920d00000000, 0x02bbcb9100000000, | |
| 4025 | + 0x4480acf400000000, 0x8ecd055b00000000, 0xc8f6623e00000000, | |
| 4026 | + 0x5b5026df00000000, 0x1d6b41ba00000000, 0xd726e81500000000, | |
| 4027 | + 0x911d8f7000000000, 0xb06d100c00000000, 0xf656776900000000, | |
| 4028 | + 0x3c1bdec600000000, 0x7a20b9a300000000, 0xe986fd4200000000, | |
| 4029 | + 0xafbd9a2700000000, 0x65f0338800000000, 0x23cb54ed00000000, | |
| 4030 | + 0x3ae0095e00000000, 0x7cdb6e3b00000000, 0xb696c79400000000, | |
| 4031 | + 0xf0ada0f100000000, 0x630be41000000000, 0x2530837500000000, | |
| 4032 | + 0xef7d2ada00000000, 0xa9464dbf00000000, 0x8836d2c300000000, | |
| 4033 | + 0xce0db5a600000000, 0x04401c0900000000, 0x427b7b6c00000000, | |
| 4034 | + 0xd1dd3f8d00000000, 0x97e658e800000000, 0x5dabf14700000000, | |
| 4035 | + 0x1b90962200000000, 0x1f4bcfbe00000000, 0x5970a8db00000000, | |
| 4036 | + 0x933d017400000000, 0xd506661100000000, 0x46a022f000000000, | |
| 4037 | + 0x009b459500000000, 0xcad6ec3a00000000, 0x8ced8b5f00000000, | |
| 4038 | + 0xad9d142300000000, 0xeba6734600000000, 0x21ebdae900000000, | |
| 4039 | + 0x67d0bd8c00000000, 0xf476f96d00000000, 0xb24d9e0800000000, | |
| 4040 | + 0x780037a700000000, 0x3e3b50c200000000, 0x31b0f54400000000, | |
| 4041 | + 0x778b922100000000, 0xbdc63b8e00000000, 0xfbfd5ceb00000000, | |
| 4042 | + 0x685b180a00000000, 0x2e607f6f00000000, 0xe42dd6c000000000, | |
| 4043 | + 0xa216b1a500000000, 0x83662ed900000000, 0xc55d49bc00000000, | |
| 4044 | + 0x0f10e01300000000, 0x492b877600000000, 0xda8dc39700000000, | |
| 4045 | + 0x9cb6a4f200000000, 0x56fb0d5d00000000, 0x10c06a3800000000, | |
| 4046 | + 0x141b33a400000000, 0x522054c100000000, 0x986dfd6e00000000, | |
| 4047 | + 0xde569a0b00000000, 0x4df0deea00000000, 0x0bcbb98f00000000, | |
| 4048 | + 0xc186102000000000, 0x87bd774500000000, 0xa6cde83900000000, | |
| 4049 | + 0xe0f68f5c00000000, 0x2abb26f300000000, 0x6c80419600000000, | |
| 4050 | + 0xff26057700000000, 0xb91d621200000000, 0x7350cbbd00000000, | |
| 4051 | + 0x356bacd800000000}, | |
| 4052 | + {0x0000000000000000, 0x9e83da9f00000000, 0x7d01c4e400000000, | |
| 4053 | + 0xe3821e7b00000000, 0xbb04f91200000000, 0x2587238d00000000, | |
| 4054 | + 0xc6053df600000000, 0x5886e76900000000, 0x7609f22500000000, | |
| 4055 | + 0xe88a28ba00000000, 0x0b0836c100000000, 0x958bec5e00000000, | |
| 4056 | + 0xcd0d0b3700000000, 0x538ed1a800000000, 0xb00ccfd300000000, | |
| 4057 | + 0x2e8f154c00000000, 0xec12e44b00000000, 0x72913ed400000000, | |
| 4058 | + 0x911320af00000000, 0x0f90fa3000000000, 0x57161d5900000000, | |
| 4059 | + 0xc995c7c600000000, 0x2a17d9bd00000000, 0xb494032200000000, | |
| 4060 | + 0x9a1b166e00000000, 0x0498ccf100000000, 0xe71ad28a00000000, | |
| 4061 | + 0x7999081500000000, 0x211fef7c00000000, 0xbf9c35e300000000, | |
| 4062 | + 0x5c1e2b9800000000, 0xc29df10700000000, 0xd825c89700000000, | |
| 4063 | + 0x46a6120800000000, 0xa5240c7300000000, 0x3ba7d6ec00000000, | |
| 4064 | + 0x6321318500000000, 0xfda2eb1a00000000, 0x1e20f56100000000, | |
| 4065 | + 0x80a32ffe00000000, 0xae2c3ab200000000, 0x30afe02d00000000, | |
| 4066 | + 0xd32dfe5600000000, 0x4dae24c900000000, 0x1528c3a000000000, | |
| 4067 | + 0x8bab193f00000000, 0x6829074400000000, 0xf6aadddb00000000, | |
| 4068 | + 0x34372cdc00000000, 0xaab4f64300000000, 0x4936e83800000000, | |
| 4069 | + 0xd7b532a700000000, 0x8f33d5ce00000000, 0x11b00f5100000000, | |
| 4070 | + 0xf232112a00000000, 0x6cb1cbb500000000, 0x423edef900000000, | |
| 4071 | + 0xdcbd046600000000, 0x3f3f1a1d00000000, 0xa1bcc08200000000, | |
| 4072 | + 0xf93a27eb00000000, 0x67b9fd7400000000, 0x843be30f00000000, | |
| 4073 | + 0x1ab8399000000000, 0xf14de1f400000000, 0x6fce3b6b00000000, | |
| 4074 | + 0x8c4c251000000000, 0x12cfff8f00000000, 0x4a4918e600000000, | |
| 4075 | + 0xd4cac27900000000, 0x3748dc0200000000, 0xa9cb069d00000000, | |
| 4076 | + 0x874413d100000000, 0x19c7c94e00000000, 0xfa45d73500000000, | |
| 4077 | + 0x64c60daa00000000, 0x3c40eac300000000, 0xa2c3305c00000000, | |
| 4078 | + 0x41412e2700000000, 0xdfc2f4b800000000, 0x1d5f05bf00000000, | |
| 4079 | + 0x83dcdf2000000000, 0x605ec15b00000000, 0xfedd1bc400000000, | |
| 4080 | + 0xa65bfcad00000000, 0x38d8263200000000, 0xdb5a384900000000, | |
| 4081 | + 0x45d9e2d600000000, 0x6b56f79a00000000, 0xf5d52d0500000000, | |
| 4082 | + 0x1657337e00000000, 0x88d4e9e100000000, 0xd0520e8800000000, | |
| 4083 | + 0x4ed1d41700000000, 0xad53ca6c00000000, 0x33d010f300000000, | |
| 4084 | + 0x2968296300000000, 0xb7ebf3fc00000000, 0x5469ed8700000000, | |
| 4085 | + 0xcaea371800000000, 0x926cd07100000000, 0x0cef0aee00000000, | |
| 4086 | + 0xef6d149500000000, 0x71eece0a00000000, 0x5f61db4600000000, | |
| 4087 | + 0xc1e201d900000000, 0x22601fa200000000, 0xbce3c53d00000000, | |
| 4088 | + 0xe465225400000000, 0x7ae6f8cb00000000, 0x9964e6b000000000, | |
| 4089 | + 0x07e73c2f00000000, 0xc57acd2800000000, 0x5bf917b700000000, | |
| 4090 | + 0xb87b09cc00000000, 0x26f8d35300000000, 0x7e7e343a00000000, | |
| 4091 | + 0xe0fdeea500000000, 0x037ff0de00000000, 0x9dfc2a4100000000, | |
| 4092 | + 0xb3733f0d00000000, 0x2df0e59200000000, 0xce72fbe900000000, | |
| 4093 | + 0x50f1217600000000, 0x0877c61f00000000, 0x96f41c8000000000, | |
| 4094 | + 0x757602fb00000000, 0xebf5d86400000000, 0xa39db33200000000, | |
| 4095 | + 0x3d1e69ad00000000, 0xde9c77d600000000, 0x401fad4900000000, | |
| 4096 | + 0x18994a2000000000, 0x861a90bf00000000, 0x65988ec400000000, | |
| 4097 | + 0xfb1b545b00000000, 0xd594411700000000, 0x4b179b8800000000, | |
| 4098 | + 0xa89585f300000000, 0x36165f6c00000000, 0x6e90b80500000000, | |
| 4099 | + 0xf013629a00000000, 0x13917ce100000000, 0x8d12a67e00000000, | |
| 4100 | + 0x4f8f577900000000, 0xd10c8de600000000, 0x328e939d00000000, | |
| 4101 | + 0xac0d490200000000, 0xf48bae6b00000000, 0x6a0874f400000000, | |
| 4102 | + 0x898a6a8f00000000, 0x1709b01000000000, 0x3986a55c00000000, | |
| 4103 | + 0xa7057fc300000000, 0x448761b800000000, 0xda04bb2700000000, | |
| 4104 | + 0x82825c4e00000000, 0x1c0186d100000000, 0xff8398aa00000000, | |
| 4105 | + 0x6100423500000000, 0x7bb87ba500000000, 0xe53ba13a00000000, | |
| 4106 | + 0x06b9bf4100000000, 0x983a65de00000000, 0xc0bc82b700000000, | |
| 4107 | + 0x5e3f582800000000, 0xbdbd465300000000, 0x233e9ccc00000000, | |
| 4108 | + 0x0db1898000000000, 0x9332531f00000000, 0x70b04d6400000000, | |
| 4109 | + 0xee3397fb00000000, 0xb6b5709200000000, 0x2836aa0d00000000, | |
| 4110 | + 0xcbb4b47600000000, 0x55376ee900000000, 0x97aa9fee00000000, | |
| 4111 | + 0x0929457100000000, 0xeaab5b0a00000000, 0x7428819500000000, | |
| 4112 | + 0x2cae66fc00000000, 0xb22dbc6300000000, 0x51afa21800000000, | |
| 4113 | + 0xcf2c788700000000, 0xe1a36dcb00000000, 0x7f20b75400000000, | |
| 4114 | + 0x9ca2a92f00000000, 0x022173b000000000, 0x5aa794d900000000, | |
| 4115 | + 0xc4244e4600000000, 0x27a6503d00000000, 0xb9258aa200000000, | |
| 4116 | + 0x52d052c600000000, 0xcc53885900000000, 0x2fd1962200000000, | |
| 4117 | + 0xb1524cbd00000000, 0xe9d4abd400000000, 0x7757714b00000000, | |
| 4118 | + 0x94d56f3000000000, 0x0a56b5af00000000, 0x24d9a0e300000000, | |
| 4119 | + 0xba5a7a7c00000000, 0x59d8640700000000, 0xc75bbe9800000000, | |
| 4120 | + 0x9fdd59f100000000, 0x015e836e00000000, 0xe2dc9d1500000000, | |
| 4121 | + 0x7c5f478a00000000, 0xbec2b68d00000000, 0x20416c1200000000, | |
| 4122 | + 0xc3c3726900000000, 0x5d40a8f600000000, 0x05c64f9f00000000, | |
| 4123 | + 0x9b45950000000000, 0x78c78b7b00000000, 0xe64451e400000000, | |
| 4124 | + 0xc8cb44a800000000, 0x56489e3700000000, 0xb5ca804c00000000, | |
| 4125 | + 0x2b495ad300000000, 0x73cfbdba00000000, 0xed4c672500000000, | |
| 4126 | + 0x0ece795e00000000, 0x904da3c100000000, 0x8af59a5100000000, | |
| 4127 | + 0x147640ce00000000, 0xf7f45eb500000000, 0x6977842a00000000, | |
| 4128 | + 0x31f1634300000000, 0xaf72b9dc00000000, 0x4cf0a7a700000000, | |
| 4129 | + 0xd2737d3800000000, 0xfcfc687400000000, 0x627fb2eb00000000, | |
| 4130 | + 0x81fdac9000000000, 0x1f7e760f00000000, 0x47f8916600000000, | |
| 4131 | + 0xd97b4bf900000000, 0x3af9558200000000, 0xa47a8f1d00000000, | |
| 4132 | + 0x66e77e1a00000000, 0xf864a48500000000, 0x1be6bafe00000000, | |
| 4133 | + 0x8565606100000000, 0xdde3870800000000, 0x43605d9700000000, | |
| 4134 | + 0xa0e243ec00000000, 0x3e61997300000000, 0x10ee8c3f00000000, | |
| 4135 | + 0x8e6d56a000000000, 0x6def48db00000000, 0xf36c924400000000, | |
| 4136 | + 0xabea752d00000000, 0x3569afb200000000, 0xd6ebb1c900000000, | |
| 4137 | + 0x48686b5600000000}, | |
| 4138 | + {0x0000000000000000, 0xc064281700000000, 0x80c9502e00000000, | |
| 4139 | + 0x40ad783900000000, 0x0093a15c00000000, 0xc0f7894b00000000, | |
| 4140 | + 0x805af17200000000, 0x403ed96500000000, 0x002643b900000000, | |
| 4141 | + 0xc0426bae00000000, 0x80ef139700000000, 0x408b3b8000000000, | |
| 4142 | + 0x00b5e2e500000000, 0xc0d1caf200000000, 0x807cb2cb00000000, | |
| 4143 | + 0x40189adc00000000, 0x414af7a900000000, 0x812edfbe00000000, | |
| 4144 | + 0xc183a78700000000, 0x01e78f9000000000, 0x41d956f500000000, | |
| 4145 | + 0x81bd7ee200000000, 0xc11006db00000000, 0x01742ecc00000000, | |
| 4146 | + 0x416cb41000000000, 0x81089c0700000000, 0xc1a5e43e00000000, | |
| 4147 | + 0x01c1cc2900000000, 0x41ff154c00000000, 0x819b3d5b00000000, | |
| 4148 | + 0xc136456200000000, 0x01526d7500000000, 0xc3929f8800000000, | |
| 4149 | + 0x03f6b79f00000000, 0x435bcfa600000000, 0x833fe7b100000000, | |
| 4150 | + 0xc3013ed400000000, 0x036516c300000000, 0x43c86efa00000000, | |
| 4151 | + 0x83ac46ed00000000, 0xc3b4dc3100000000, 0x03d0f42600000000, | |
| 4152 | + 0x437d8c1f00000000, 0x8319a40800000000, 0xc3277d6d00000000, | |
| 4153 | + 0x0343557a00000000, 0x43ee2d4300000000, 0x838a055400000000, | |
| 4154 | + 0x82d8682100000000, 0x42bc403600000000, 0x0211380f00000000, | |
| 4155 | + 0xc275101800000000, 0x824bc97d00000000, 0x422fe16a00000000, | |
| 4156 | + 0x0282995300000000, 0xc2e6b14400000000, 0x82fe2b9800000000, | |
| 4157 | + 0x429a038f00000000, 0x02377bb600000000, 0xc25353a100000000, | |
| 4158 | + 0x826d8ac400000000, 0x4209a2d300000000, 0x02a4daea00000000, | |
| 4159 | + 0xc2c0f2fd00000000, 0xc7234eca00000000, 0x074766dd00000000, | |
| 4160 | + 0x47ea1ee400000000, 0x878e36f300000000, 0xc7b0ef9600000000, | |
| 4161 | + 0x07d4c78100000000, 0x4779bfb800000000, 0x871d97af00000000, | |
| 4162 | + 0xc7050d7300000000, 0x0761256400000000, 0x47cc5d5d00000000, | |
| 4163 | + 0x87a8754a00000000, 0xc796ac2f00000000, 0x07f2843800000000, | |
| 4164 | + 0x475ffc0100000000, 0x873bd41600000000, 0x8669b96300000000, | |
| 4165 | + 0x460d917400000000, 0x06a0e94d00000000, 0xc6c4c15a00000000, | |
| 4166 | + 0x86fa183f00000000, 0x469e302800000000, 0x0633481100000000, | |
| 4167 | + 0xc657600600000000, 0x864ffada00000000, 0x462bd2cd00000000, | |
| 4168 | + 0x0686aaf400000000, 0xc6e282e300000000, 0x86dc5b8600000000, | |
| 4169 | + 0x46b8739100000000, 0x06150ba800000000, 0xc67123bf00000000, | |
| 4170 | + 0x04b1d14200000000, 0xc4d5f95500000000, 0x8478816c00000000, | |
| 4171 | + 0x441ca97b00000000, 0x0422701e00000000, 0xc446580900000000, | |
| 4172 | + 0x84eb203000000000, 0x448f082700000000, 0x049792fb00000000, | |
| 4173 | + 0xc4f3baec00000000, 0x845ec2d500000000, 0x443aeac200000000, | |
| 4174 | + 0x040433a700000000, 0xc4601bb000000000, 0x84cd638900000000, | |
| 4175 | + 0x44a94b9e00000000, 0x45fb26eb00000000, 0x859f0efc00000000, | |
| 4176 | + 0xc53276c500000000, 0x05565ed200000000, 0x456887b700000000, | |
| 4177 | + 0x850cafa000000000, 0xc5a1d79900000000, 0x05c5ff8e00000000, | |
| 4178 | + 0x45dd655200000000, 0x85b94d4500000000, 0xc514357c00000000, | |
| 4179 | + 0x05701d6b00000000, 0x454ec40e00000000, 0x852aec1900000000, | |
| 4180 | + 0xc587942000000000, 0x05e3bc3700000000, 0xcf41ed4f00000000, | |
| 4181 | + 0x0f25c55800000000, 0x4f88bd6100000000, 0x8fec957600000000, | |
| 4182 | + 0xcfd24c1300000000, 0x0fb6640400000000, 0x4f1b1c3d00000000, | |
| 4183 | + 0x8f7f342a00000000, 0xcf67aef600000000, 0x0f0386e100000000, | |
| 4184 | + 0x4faefed800000000, 0x8fcad6cf00000000, 0xcff40faa00000000, | |
| 4185 | + 0x0f9027bd00000000, 0x4f3d5f8400000000, 0x8f59779300000000, | |
| 4186 | + 0x8e0b1ae600000000, 0x4e6f32f100000000, 0x0ec24ac800000000, | |
| 4187 | + 0xcea662df00000000, 0x8e98bbba00000000, 0x4efc93ad00000000, | |
| 4188 | + 0x0e51eb9400000000, 0xce35c38300000000, 0x8e2d595f00000000, | |
| 4189 | + 0x4e49714800000000, 0x0ee4097100000000, 0xce80216600000000, | |
| 4190 | + 0x8ebef80300000000, 0x4edad01400000000, 0x0e77a82d00000000, | |
| 4191 | + 0xce13803a00000000, 0x0cd372c700000000, 0xccb75ad000000000, | |
| 4192 | + 0x8c1a22e900000000, 0x4c7e0afe00000000, 0x0c40d39b00000000, | |
| 4193 | + 0xcc24fb8c00000000, 0x8c8983b500000000, 0x4cedaba200000000, | |
| 4194 | + 0x0cf5317e00000000, 0xcc91196900000000, 0x8c3c615000000000, | |
| 4195 | + 0x4c58494700000000, 0x0c66902200000000, 0xcc02b83500000000, | |
| 4196 | + 0x8cafc00c00000000, 0x4ccbe81b00000000, 0x4d99856e00000000, | |
| 4197 | + 0x8dfdad7900000000, 0xcd50d54000000000, 0x0d34fd5700000000, | |
| 4198 | + 0x4d0a243200000000, 0x8d6e0c2500000000, 0xcdc3741c00000000, | |
| 4199 | + 0x0da75c0b00000000, 0x4dbfc6d700000000, 0x8ddbeec000000000, | |
| 4200 | + 0xcd7696f900000000, 0x0d12beee00000000, 0x4d2c678b00000000, | |
| 4201 | + 0x8d484f9c00000000, 0xcde537a500000000, 0x0d811fb200000000, | |
| 4202 | + 0x0862a38500000000, 0xc8068b9200000000, 0x88abf3ab00000000, | |
| 4203 | + 0x48cfdbbc00000000, 0x08f102d900000000, 0xc8952ace00000000, | |
| 4204 | + 0x883852f700000000, 0x485c7ae000000000, 0x0844e03c00000000, | |
| 4205 | + 0xc820c82b00000000, 0x888db01200000000, 0x48e9980500000000, | |
| 4206 | + 0x08d7416000000000, 0xc8b3697700000000, 0x881e114e00000000, | |
| 4207 | + 0x487a395900000000, 0x4928542c00000000, 0x894c7c3b00000000, | |
| 4208 | + 0xc9e1040200000000, 0x09852c1500000000, 0x49bbf57000000000, | |
| 4209 | + 0x89dfdd6700000000, 0xc972a55e00000000, 0x09168d4900000000, | |
| 4210 | + 0x490e179500000000, 0x896a3f8200000000, 0xc9c747bb00000000, | |
| 4211 | + 0x09a36fac00000000, 0x499db6c900000000, 0x89f99ede00000000, | |
| 4212 | + 0xc954e6e700000000, 0x0930cef000000000, 0xcbf03c0d00000000, | |
| 4213 | + 0x0b94141a00000000, 0x4b396c2300000000, 0x8b5d443400000000, | |
| 4214 | + 0xcb639d5100000000, 0x0b07b54600000000, 0x4baacd7f00000000, | |
| 4215 | + 0x8bcee56800000000, 0xcbd67fb400000000, 0x0bb257a300000000, | |
| 4216 | + 0x4b1f2f9a00000000, 0x8b7b078d00000000, 0xcb45dee800000000, | |
| 4217 | + 0x0b21f6ff00000000, 0x4b8c8ec600000000, 0x8be8a6d100000000, | |
| 4218 | + 0x8abacba400000000, 0x4adee3b300000000, 0x0a739b8a00000000, | |
| 4219 | + 0xca17b39d00000000, 0x8a296af800000000, 0x4a4d42ef00000000, | |
| 4220 | + 0x0ae03ad600000000, 0xca8412c100000000, 0x8a9c881d00000000, | |
| 4221 | + 0x4af8a00a00000000, 0x0a55d83300000000, 0xca31f02400000000, | |
| 4222 | + 0x8a0f294100000000, 0x4a6b015600000000, 0x0ac6796f00000000, | |
| 4223 | + 0xcaa2517800000000}, | |
| 4224 | + {0x0000000000000000, 0xd4ea739b00000000, 0xe9d396ed00000000, | |
| 4225 | + 0x3d39e57600000000, 0x93a15c0000000000, 0x474b2f9b00000000, | |
| 4226 | + 0x7a72caed00000000, 0xae98b97600000000, 0x2643b90000000000, | |
| 4227 | + 0xf2a9ca9b00000000, 0xcf902fed00000000, 0x1b7a5c7600000000, | |
| 4228 | + 0xb5e2e50000000000, 0x6108969b00000000, 0x5c3173ed00000000, | |
| 4229 | + 0x88db007600000000, 0x4c86720100000000, 0x986c019a00000000, | |
| 4230 | + 0xa555e4ec00000000, 0x71bf977700000000, 0xdf272e0100000000, | |
| 4231 | + 0x0bcd5d9a00000000, 0x36f4b8ec00000000, 0xe21ecb7700000000, | |
| 4232 | + 0x6ac5cb0100000000, 0xbe2fb89a00000000, 0x83165dec00000000, | |
| 4233 | + 0x57fc2e7700000000, 0xf964970100000000, 0x2d8ee49a00000000, | |
| 4234 | + 0x10b701ec00000000, 0xc45d727700000000, 0x980ce50200000000, | |
| 4235 | + 0x4ce6969900000000, 0x71df73ef00000000, 0xa535007400000000, | |
| 4236 | + 0x0badb90200000000, 0xdf47ca9900000000, 0xe27e2fef00000000, | |
| 4237 | + 0x36945c7400000000, 0xbe4f5c0200000000, 0x6aa52f9900000000, | |
| 4238 | + 0x579ccaef00000000, 0x8376b97400000000, 0x2dee000200000000, | |
| 4239 | + 0xf904739900000000, 0xc43d96ef00000000, 0x10d7e57400000000, | |
| 4240 | + 0xd48a970300000000, 0x0060e49800000000, 0x3d5901ee00000000, | |
| 4241 | + 0xe9b3727500000000, 0x472bcb0300000000, 0x93c1b89800000000, | |
| 4242 | + 0xaef85dee00000000, 0x7a122e7500000000, 0xf2c92e0300000000, | |
| 4243 | + 0x26235d9800000000, 0x1b1ab8ee00000000, 0xcff0cb7500000000, | |
| 4244 | + 0x6168720300000000, 0xb582019800000000, 0x88bbe4ee00000000, | |
| 4245 | + 0x5c51977500000000, 0x3019ca0500000000, 0xe4f3b99e00000000, | |
| 4246 | + 0xd9ca5ce800000000, 0x0d202f7300000000, 0xa3b8960500000000, | |
| 4247 | + 0x7752e59e00000000, 0x4a6b00e800000000, 0x9e81737300000000, | |
| 4248 | + 0x165a730500000000, 0xc2b0009e00000000, 0xff89e5e800000000, | |
| 4249 | + 0x2b63967300000000, 0x85fb2f0500000000, 0x51115c9e00000000, | |
| 4250 | + 0x6c28b9e800000000, 0xb8c2ca7300000000, 0x7c9fb80400000000, | |
| 4251 | + 0xa875cb9f00000000, 0x954c2ee900000000, 0x41a65d7200000000, | |
| 4252 | + 0xef3ee40400000000, 0x3bd4979f00000000, 0x06ed72e900000000, | |
| 4253 | + 0xd207017200000000, 0x5adc010400000000, 0x8e36729f00000000, | |
| 4254 | + 0xb30f97e900000000, 0x67e5e47200000000, 0xc97d5d0400000000, | |
| 4255 | + 0x1d972e9f00000000, 0x20aecbe900000000, 0xf444b87200000000, | |
| 4256 | + 0xa8152f0700000000, 0x7cff5c9c00000000, 0x41c6b9ea00000000, | |
| 4257 | + 0x952cca7100000000, 0x3bb4730700000000, 0xef5e009c00000000, | |
| 4258 | + 0xd267e5ea00000000, 0x068d967100000000, 0x8e56960700000000, | |
| 4259 | + 0x5abce59c00000000, 0x678500ea00000000, 0xb36f737100000000, | |
| 4260 | + 0x1df7ca0700000000, 0xc91db99c00000000, 0xf4245cea00000000, | |
| 4261 | + 0x20ce2f7100000000, 0xe4935d0600000000, 0x30792e9d00000000, | |
| 4262 | + 0x0d40cbeb00000000, 0xd9aab87000000000, 0x7732010600000000, | |
| 4263 | + 0xa3d8729d00000000, 0x9ee197eb00000000, 0x4a0be47000000000, | |
| 4264 | + 0xc2d0e40600000000, 0x163a979d00000000, 0x2b0372eb00000000, | |
| 4265 | + 0xffe9017000000000, 0x5171b80600000000, 0x859bcb9d00000000, | |
| 4266 | + 0xb8a22eeb00000000, 0x6c485d7000000000, 0x6032940b00000000, | |
| 4267 | + 0xb4d8e79000000000, 0x89e102e600000000, 0x5d0b717d00000000, | |
| 4268 | + 0xf393c80b00000000, 0x2779bb9000000000, 0x1a405ee600000000, | |
| 4269 | + 0xceaa2d7d00000000, 0x46712d0b00000000, 0x929b5e9000000000, | |
| 4270 | + 0xafa2bbe600000000, 0x7b48c87d00000000, 0xd5d0710b00000000, | |
| 4271 | + 0x013a029000000000, 0x3c03e7e600000000, 0xe8e9947d00000000, | |
| 4272 | + 0x2cb4e60a00000000, 0xf85e959100000000, 0xc56770e700000000, | |
| 4273 | + 0x118d037c00000000, 0xbf15ba0a00000000, 0x6bffc99100000000, | |
| 4274 | + 0x56c62ce700000000, 0x822c5f7c00000000, 0x0af75f0a00000000, | |
| 4275 | + 0xde1d2c9100000000, 0xe324c9e700000000, 0x37ceba7c00000000, | |
| 4276 | + 0x9956030a00000000, 0x4dbc709100000000, 0x708595e700000000, | |
| 4277 | + 0xa46fe67c00000000, 0xf83e710900000000, 0x2cd4029200000000, | |
| 4278 | + 0x11ede7e400000000, 0xc507947f00000000, 0x6b9f2d0900000000, | |
| 4279 | + 0xbf755e9200000000, 0x824cbbe400000000, 0x56a6c87f00000000, | |
| 4280 | + 0xde7dc80900000000, 0x0a97bb9200000000, 0x37ae5ee400000000, | |
| 4281 | + 0xe3442d7f00000000, 0x4ddc940900000000, 0x9936e79200000000, | |
| 4282 | + 0xa40f02e400000000, 0x70e5717f00000000, 0xb4b8030800000000, | |
| 4283 | + 0x6052709300000000, 0x5d6b95e500000000, 0x8981e67e00000000, | |
| 4284 | + 0x27195f0800000000, 0xf3f32c9300000000, 0xcecac9e500000000, | |
| 4285 | + 0x1a20ba7e00000000, 0x92fbba0800000000, 0x4611c99300000000, | |
| 4286 | + 0x7b282ce500000000, 0xafc25f7e00000000, 0x015ae60800000000, | |
| 4287 | + 0xd5b0959300000000, 0xe88970e500000000, 0x3c63037e00000000, | |
| 4288 | + 0x502b5e0e00000000, 0x84c12d9500000000, 0xb9f8c8e300000000, | |
| 4289 | + 0x6d12bb7800000000, 0xc38a020e00000000, 0x1760719500000000, | |
| 4290 | + 0x2a5994e300000000, 0xfeb3e77800000000, 0x7668e70e00000000, | |
| 4291 | + 0xa282949500000000, 0x9fbb71e300000000, 0x4b51027800000000, | |
| 4292 | + 0xe5c9bb0e00000000, 0x3123c89500000000, 0x0c1a2de300000000, | |
| 4293 | + 0xd8f05e7800000000, 0x1cad2c0f00000000, 0xc8475f9400000000, | |
| 4294 | + 0xf57ebae200000000, 0x2194c97900000000, 0x8f0c700f00000000, | |
| 4295 | + 0x5be6039400000000, 0x66dfe6e200000000, 0xb235957900000000, | |
| 4296 | + 0x3aee950f00000000, 0xee04e69400000000, 0xd33d03e200000000, | |
| 4297 | + 0x07d7707900000000, 0xa94fc90f00000000, 0x7da5ba9400000000, | |
| 4298 | + 0x409c5fe200000000, 0x94762c7900000000, 0xc827bb0c00000000, | |
| 4299 | + 0x1ccdc89700000000, 0x21f42de100000000, 0xf51e5e7a00000000, | |
| 4300 | + 0x5b86e70c00000000, 0x8f6c949700000000, 0xb25571e100000000, | |
| 4301 | + 0x66bf027a00000000, 0xee64020c00000000, 0x3a8e719700000000, | |
| 4302 | + 0x07b794e100000000, 0xd35de77a00000000, 0x7dc55e0c00000000, | |
| 4303 | + 0xa92f2d9700000000, 0x9416c8e100000000, 0x40fcbb7a00000000, | |
| 4304 | + 0x84a1c90d00000000, 0x504bba9600000000, 0x6d725fe000000000, | |
| 4305 | + 0xb9982c7b00000000, 0x1700950d00000000, 0xc3eae69600000000, | |
| 4306 | + 0xfed303e000000000, 0x2a39707b00000000, 0xa2e2700d00000000, | |
| 4307 | + 0x7608039600000000, 0x4b31e6e000000000, 0x9fdb957b00000000, | |
| 4308 | + 0x31432c0d00000000, 0xe5a95f9600000000, 0xd890bae000000000, | |
| 4309 | + 0x0c7ac97b00000000}, | |
| 4310 | + {0x0000000000000000, 0x2765258100000000, 0x0fcc3bd900000000, | |
| 4311 | + 0x28a91e5800000000, 0x5f9e066900000000, 0x78fb23e800000000, | |
| 4312 | + 0x50523db000000000, 0x7737183100000000, 0xbe3c0dd200000000, | |
| 4313 | + 0x9959285300000000, 0xb1f0360b00000000, 0x9695138a00000000, | |
| 4314 | + 0xe1a20bbb00000000, 0xc6c72e3a00000000, 0xee6e306200000000, | |
| 4315 | + 0xc90b15e300000000, 0x3d7f6b7f00000000, 0x1a1a4efe00000000, | |
| 4316 | + 0x32b350a600000000, 0x15d6752700000000, 0x62e16d1600000000, | |
| 4317 | + 0x4584489700000000, 0x6d2d56cf00000000, 0x4a48734e00000000, | |
| 4318 | + 0x834366ad00000000, 0xa426432c00000000, 0x8c8f5d7400000000, | |
| 4319 | + 0xabea78f500000000, 0xdcdd60c400000000, 0xfbb8454500000000, | |
| 4320 | + 0xd3115b1d00000000, 0xf4747e9c00000000, 0x7afed6fe00000000, | |
| 4321 | + 0x5d9bf37f00000000, 0x7532ed2700000000, 0x5257c8a600000000, | |
| 4322 | + 0x2560d09700000000, 0x0205f51600000000, 0x2aaceb4e00000000, | |
| 4323 | + 0x0dc9cecf00000000, 0xc4c2db2c00000000, 0xe3a7fead00000000, | |
| 4324 | + 0xcb0ee0f500000000, 0xec6bc57400000000, 0x9b5cdd4500000000, | |
| 4325 | + 0xbc39f8c400000000, 0x9490e69c00000000, 0xb3f5c31d00000000, | |
| 4326 | + 0x4781bd8100000000, 0x60e4980000000000, 0x484d865800000000, | |
| 4327 | + 0x6f28a3d900000000, 0x181fbbe800000000, 0x3f7a9e6900000000, | |
| 4328 | + 0x17d3803100000000, 0x30b6a5b000000000, 0xf9bdb05300000000, | |
| 4329 | + 0xded895d200000000, 0xf6718b8a00000000, 0xd114ae0b00000000, | |
| 4330 | + 0xa623b63a00000000, 0x814693bb00000000, 0xa9ef8de300000000, | |
| 4331 | + 0x8e8aa86200000000, 0xb5fadc2600000000, 0x929ff9a700000000, | |
| 4332 | + 0xba36e7ff00000000, 0x9d53c27e00000000, 0xea64da4f00000000, | |
| 4333 | + 0xcd01ffce00000000, 0xe5a8e19600000000, 0xc2cdc41700000000, | |
| 4334 | + 0x0bc6d1f400000000, 0x2ca3f47500000000, 0x040aea2d00000000, | |
| 4335 | + 0x236fcfac00000000, 0x5458d79d00000000, 0x733df21c00000000, | |
| 4336 | + 0x5b94ec4400000000, 0x7cf1c9c500000000, 0x8885b75900000000, | |
| 4337 | + 0xafe092d800000000, 0x87498c8000000000, 0xa02ca90100000000, | |
| 4338 | + 0xd71bb13000000000, 0xf07e94b100000000, 0xd8d78ae900000000, | |
| 4339 | + 0xffb2af6800000000, 0x36b9ba8b00000000, 0x11dc9f0a00000000, | |
| 4340 | + 0x3975815200000000, 0x1e10a4d300000000, 0x6927bce200000000, | |
| 4341 | + 0x4e42996300000000, 0x66eb873b00000000, 0x418ea2ba00000000, | |
| 4342 | + 0xcf040ad800000000, 0xe8612f5900000000, 0xc0c8310100000000, | |
| 4343 | + 0xe7ad148000000000, 0x909a0cb100000000, 0xb7ff293000000000, | |
| 4344 | + 0x9f56376800000000, 0xb83312e900000000, 0x7138070a00000000, | |
| 4345 | + 0x565d228b00000000, 0x7ef43cd300000000, 0x5991195200000000, | |
| 4346 | + 0x2ea6016300000000, 0x09c324e200000000, 0x216a3aba00000000, | |
| 4347 | + 0x060f1f3b00000000, 0xf27b61a700000000, 0xd51e442600000000, | |
| 4348 | + 0xfdb75a7e00000000, 0xdad27fff00000000, 0xade567ce00000000, | |
| 4349 | + 0x8a80424f00000000, 0xa2295c1700000000, 0x854c799600000000, | |
| 4350 | + 0x4c476c7500000000, 0x6b2249f400000000, 0x438b57ac00000000, | |
| 4351 | + 0x64ee722d00000000, 0x13d96a1c00000000, 0x34bc4f9d00000000, | |
| 4352 | + 0x1c1551c500000000, 0x3b70744400000000, 0x6af5b94d00000000, | |
| 4353 | + 0x4d909ccc00000000, 0x6539829400000000, 0x425ca71500000000, | |
| 4354 | + 0x356bbf2400000000, 0x120e9aa500000000, 0x3aa784fd00000000, | |
| 4355 | + 0x1dc2a17c00000000, 0xd4c9b49f00000000, 0xf3ac911e00000000, | |
| 4356 | + 0xdb058f4600000000, 0xfc60aac700000000, 0x8b57b2f600000000, | |
| 4357 | + 0xac32977700000000, 0x849b892f00000000, 0xa3feacae00000000, | |
| 4358 | + 0x578ad23200000000, 0x70eff7b300000000, 0x5846e9eb00000000, | |
| 4359 | + 0x7f23cc6a00000000, 0x0814d45b00000000, 0x2f71f1da00000000, | |
| 4360 | + 0x07d8ef8200000000, 0x20bdca0300000000, 0xe9b6dfe000000000, | |
| 4361 | + 0xced3fa6100000000, 0xe67ae43900000000, 0xc11fc1b800000000, | |
| 4362 | + 0xb628d98900000000, 0x914dfc0800000000, 0xb9e4e25000000000, | |
| 4363 | + 0x9e81c7d100000000, 0x100b6fb300000000, 0x376e4a3200000000, | |
| 4364 | + 0x1fc7546a00000000, 0x38a271eb00000000, 0x4f9569da00000000, | |
| 4365 | + 0x68f04c5b00000000, 0x4059520300000000, 0x673c778200000000, | |
| 4366 | + 0xae37626100000000, 0x895247e000000000, 0xa1fb59b800000000, | |
| 4367 | + 0x869e7c3900000000, 0xf1a9640800000000, 0xd6cc418900000000, | |
| 4368 | + 0xfe655fd100000000, 0xd9007a5000000000, 0x2d7404cc00000000, | |
| 4369 | + 0x0a11214d00000000, 0x22b83f1500000000, 0x05dd1a9400000000, | |
| 4370 | + 0x72ea02a500000000, 0x558f272400000000, 0x7d26397c00000000, | |
| 4371 | + 0x5a431cfd00000000, 0x9348091e00000000, 0xb42d2c9f00000000, | |
| 4372 | + 0x9c8432c700000000, 0xbbe1174600000000, 0xccd60f7700000000, | |
| 4373 | + 0xebb32af600000000, 0xc31a34ae00000000, 0xe47f112f00000000, | |
| 4374 | + 0xdf0f656b00000000, 0xf86a40ea00000000, 0xd0c35eb200000000, | |
| 4375 | + 0xf7a67b3300000000, 0x8091630200000000, 0xa7f4468300000000, | |
| 4376 | + 0x8f5d58db00000000, 0xa8387d5a00000000, 0x613368b900000000, | |
| 4377 | + 0x46564d3800000000, 0x6eff536000000000, 0x499a76e100000000, | |
| 4378 | + 0x3ead6ed000000000, 0x19c84b5100000000, 0x3161550900000000, | |
| 4379 | + 0x1604708800000000, 0xe2700e1400000000, 0xc5152b9500000000, | |
| 4380 | + 0xedbc35cd00000000, 0xcad9104c00000000, 0xbdee087d00000000, | |
| 4381 | + 0x9a8b2dfc00000000, 0xb22233a400000000, 0x9547162500000000, | |
| 4382 | + 0x5c4c03c600000000, 0x7b29264700000000, 0x5380381f00000000, | |
| 4383 | + 0x74e51d9e00000000, 0x03d205af00000000, 0x24b7202e00000000, | |
| 4384 | + 0x0c1e3e7600000000, 0x2b7b1bf700000000, 0xa5f1b39500000000, | |
| 4385 | + 0x8294961400000000, 0xaa3d884c00000000, 0x8d58adcd00000000, | |
| 4386 | + 0xfa6fb5fc00000000, 0xdd0a907d00000000, 0xf5a38e2500000000, | |
| 4387 | + 0xd2c6aba400000000, 0x1bcdbe4700000000, 0x3ca89bc600000000, | |
| 4388 | + 0x1401859e00000000, 0x3364a01f00000000, 0x4453b82e00000000, | |
| 4389 | + 0x63369daf00000000, 0x4b9f83f700000000, 0x6cfaa67600000000, | |
| 4390 | + 0x988ed8ea00000000, 0xbfebfd6b00000000, 0x9742e33300000000, | |
| 4391 | + 0xb027c6b200000000, 0xc710de8300000000, 0xe075fb0200000000, | |
| 4392 | + 0xc8dce55a00000000, 0xefb9c0db00000000, 0x26b2d53800000000, | |
| 4393 | + 0x01d7f0b900000000, 0x297eeee100000000, 0x0e1bcb6000000000, | |
| 4394 | + 0x792cd35100000000, 0x5e49f6d000000000, 0x76e0e88800000000, | |
| 4395 | + 0x5185cd0900000000}}; | |
| 4396 | + | |
| 4397 | +#else /* W == 4 */ | |
| 4398 | + | |
| 4399 | +local const z_crc_t FAR crc_braid_table[][256] = { | |
| 4400 | + {0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f, | |
| 4401 | + 0x98a37710, 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91, | |
| 4402 | + 0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee, 0xe931d31e, | |
| 4403 | + 0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c, | |
| 4404 | + 0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02, | |
| 4405 | + 0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12, | |
| 4406 | + 0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567, | |
| 4407 | + 0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277, | |
| 4408 | + 0x1e3dad06, 0x8598e169, 0xf2063399, 0x69a37ff6, 0x1d3b9679, | |
| 4409 | + 0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604, 0x8f8c7a6b, | |
| 4410 | + 0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4, | |
| 4411 | + 0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a, | |
| 4412 | + 0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0, | |
| 4413 | + 0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0, | |
| 4414 | + 0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91, | |
| 4415 | + 0x41f113fe, 0x3569fa71, 0xaeccb61e, 0xd95264ee, 0x42f72881, | |
| 4416 | + 0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, 0x3f7d6173, | |
| 4417 | + 0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d, | |
| 4418 | + 0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912, | |
| 4419 | + 0x4eefc57d, 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8, | |
| 4420 | + 0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6, | |
| 4421 | + 0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6, | |
| 4422 | + 0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, 0xc8711f6b, | |
| 4423 | + 0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b, | |
| 4424 | + 0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75, | |
| 4425 | + 0xbae5801a, 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f, | |
| 4426 | + 0x8cfcf17f, 0x1759bd10, 0x63c1549f, 0xf86418f0, 0x8ffaca00, | |
| 4427 | + 0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee, | |
| 4428 | + 0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c, | |
| 4429 | + 0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c, | |
| 4430 | + 0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d, | |
| 4431 | + 0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d, | |
| 4432 | + 0x78f6b418, 0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67, | |
| 4433 | + 0xe055c308, 0x97cb11f8, 0x0c6e5d97, 0x7efac2e6, 0xe55f8e89, | |
| 4434 | + 0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706, | |
| 4435 | + 0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14, | |
| 4436 | + 0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a, | |
| 4437 | + 0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a, | |
| 4438 | + 0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f, | |
| 4439 | + 0x273a0ae0, 0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f, | |
| 4440 | + 0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, 0x55ae9591, | |
| 4441 | + 0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983, | |
| 4442 | + 0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c, | |
| 4443 | + 0x2824dc63, 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2, | |
| 4444 | + 0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d, 0x489503e8, | |
| 4445 | + 0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8, | |
| 4446 | + 0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89, | |
| 4447 | + 0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99, | |
| 4448 | + 0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b, | |
| 4449 | + 0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485, | |
| 4450 | + 0xaeba0675, 0x351f4a1a, 0x4187a395, 0xda22effa, 0xadbc3d0a, | |
| 4451 | + 0x36197165}, | |
| 4452 | + {0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382, | |
| 4453 | + 0x7157ac42, 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85, | |
| 4454 | + 0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07, 0x52762b06, | |
| 4455 | + 0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca, | |
| 4456 | + 0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e, | |
| 4457 | + 0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc, | |
| 4458 | + 0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616, | |
| 4459 | + 0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54, | |
| 4460 | + 0x3c5f6e92, 0xfdd1b152, 0x6433d753, 0xa5bd0893, 0x8c861d10, | |
| 4461 | + 0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c, 0xe9e494dc, | |
| 4462 | + 0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f, | |
| 4463 | + 0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58, | |
| 4464 | + 0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef, | |
| 4465 | + 0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad, | |
| 4466 | + 0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b, | |
| 4467 | + 0xf5699eab, 0xdc528b28, 0x1ddc54e8, 0x843e32e9, 0x45b0ed29, | |
| 4468 | + 0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, 0xc867aea6, | |
| 4469 | + 0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1, | |
| 4470 | + 0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622, | |
| 4471 | + 0xeb4629e2, 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039, | |
| 4472 | + 0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d, | |
| 4473 | + 0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f, | |
| 4474 | + 0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, 0xa64eeb32, | |
| 4475 | + 0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770, | |
| 4476 | + 0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034, | |
| 4477 | + 0x35b61ff4, 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f, | |
| 4478 | + 0x2f8d8c5e, 0xee03539e, 0xc738461d, 0x06b699dd, 0x9f54ffdc, | |
| 4479 | + 0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db, | |
| 4480 | + 0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154, | |
| 4481 | + 0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16, | |
| 4482 | + 0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0, | |
| 4483 | + 0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592, | |
| 4484 | + 0xf17dba48, 0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca, | |
| 4485 | + 0x802a160a, 0x19c8700b, 0xd846afcb, 0x4bbe5b0d, 0x8a3084cd, | |
| 4486 | + 0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e, | |
| 4487 | + 0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882, | |
| 4488 | + 0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6, | |
| 4489 | + 0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384, | |
| 4490 | + 0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1, | |
| 4491 | + 0x384b4a71, 0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3, | |
| 4492 | + 0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, 0xabb3beb7, | |
| 4493 | + 0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b, | |
| 4494 | + 0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8, | |
| 4495 | + 0x2664fd38, 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff, | |
| 4496 | + 0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7, | |
| 4497 | + 0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5, | |
| 4498 | + 0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23, | |
| 4499 | + 0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761, | |
| 4500 | + 0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee, | |
| 4501 | + 0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9, | |
| 4502 | + 0x6b6c3fe8, 0xaae2e028, 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a, | |
| 4503 | + 0x1a3b93aa}, | |
| 4504 | + {0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a, | |
| 4505 | + 0xe629cb44, 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca, | |
| 4506 | + 0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3, | |
| 4507 | + 0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb, | |
| 4508 | + 0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c, | |
| 4509 | + 0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58, | |
| 4510 | + 0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed, | |
| 4511 | + 0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9, | |
| 4512 | + 0x5c8a4324, 0xb348281a, 0x587f9319, 0xb7bdf827, 0x5561e35e, | |
| 4513 | + 0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238, 0x8731e906, | |
| 4514 | + 0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f, | |
| 4515 | + 0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf, | |
| 4516 | + 0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0, | |
| 4517 | + 0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4, | |
| 4518 | + 0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769, | |
| 4519 | + 0x665afc57, 0x8486e72e, 0x6b448c10, 0x80733713, 0x6fb15c2d, | |
| 4520 | + 0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, 0xb0ff2632, | |
| 4521 | + 0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82, | |
| 4522 | + 0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb, | |
| 4523 | + 0x481fddc5, 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73, | |
| 4524 | + 0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484, | |
| 4525 | + 0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0, | |
| 4526 | + 0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, 0xf2bc55a5, | |
| 4527 | + 0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1, | |
| 4528 | + 0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516, | |
| 4529 | + 0x03b70e28, 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f, | |
| 4530 | + 0xe2f0d93c, 0x0d32b202, 0xefeea97b, 0x002cc245, 0xeb1b7946, | |
| 4531 | + 0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6, | |
| 4532 | + 0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9, | |
| 4533 | + 0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad, | |
| 4534 | + 0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820, | |
| 4535 | + 0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364, | |
| 4536 | + 0xa9580ad1, 0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab, | |
| 4537 | + 0x4f71c195, 0xa4467a96, 0x4b8411a8, 0xba8f4a25, 0x554d211b, | |
| 4538 | + 0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62, | |
| 4539 | + 0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a, | |
| 4540 | + 0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd, | |
| 4541 | + 0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089, | |
| 4542 | + 0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c, | |
| 4543 | + 0x9388b5a2, 0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8, | |
| 4544 | + 0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, 0x6283ee2f, | |
| 4545 | + 0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477, | |
| 4546 | + 0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e, | |
| 4547 | + 0xbdcd9430, 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be, | |
| 4548 | + 0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4, 0x37e20d71, | |
| 4549 | + 0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635, | |
| 4550 | + 0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8, | |
| 4551 | + 0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc, | |
| 4552 | + 0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3, | |
| 4553 | + 0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753, | |
| 4554 | + 0x076e1c50, 0xe8ac776e, 0x0a706c17, 0xe5b20729, 0x0e85bc2a, | |
| 4555 | + 0xe147d714}, | |
| 4556 | + {0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c, | |
| 4557 | + 0x4a97454f, 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b, | |
| 4558 | + 0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757, 0xc8c2db92, | |
| 4559 | + 0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4, | |
| 4560 | + 0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069, | |
| 4561 | + 0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526, | |
| 4562 | + 0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25, | |
| 4563 | + 0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a, | |
| 4564 | + 0x392920bb, 0x2e5234f8, 0x17df083d, 0x00a41c7e, 0x64c571b7, | |
| 4565 | + 0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2, 0x394ad491, | |
| 4566 | + 0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958, | |
| 4567 | + 0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f, | |
| 4568 | + 0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307, | |
| 4569 | + 0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648, | |
| 4570 | + 0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999, | |
| 4571 | + 0x5cc79dda, 0x38a6f013, 0x2fdde450, 0x1650d895, 0x012bccd6, | |
| 4572 | + 0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, 0x2fbe107a, | |
| 4573 | + 0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d, | |
| 4574 | + 0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4, | |
| 4575 | + 0xadeb8ea7, 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61, | |
| 4576 | + 0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc, | |
| 4577 | + 0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3, | |
| 4578 | + 0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, 0xde55eb53, | |
| 4579 | + 0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c, | |
| 4580 | + 0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1, | |
| 4581 | + 0x01ec2482, 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c, | |
| 4582 | + 0x48a328c9, 0x5fd83c8a, 0x3bb95143, 0x2cc24500, 0x154f79c5, | |
| 4583 | + 0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92, | |
| 4584 | + 0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e, | |
| 4585 | + 0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771, | |
| 4586 | + 0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0, | |
| 4587 | + 0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def, | |
| 4588 | + 0xe4a482ec, 0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0, | |
| 4589 | + 0xae33c7a3, 0x97befb66, 0x80c5ef25, 0x5f7c20f4, 0x480734b7, | |
| 4590 | + 0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e, | |
| 4591 | + 0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58, | |
| 4592 | + 0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285, | |
| 4593 | + 0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca, | |
| 4594 | + 0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce, | |
| 4595 | + 0x814a3f8d, 0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81, | |
| 4596 | + 0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, 0x5ef3f05c, | |
| 4597 | + 0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a, | |
| 4598 | + 0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3, | |
| 4599 | + 0x70662cf0, 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4, | |
| 4600 | + 0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb, | |
| 4601 | + 0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4, | |
| 4602 | + 0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75, | |
| 4603 | + 0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a, | |
| 4604 | + 0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296, | |
| 4605 | + 0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1, | |
| 4606 | + 0x03d84904, 0x14a35d47, 0x70c2308e, 0x67b924cd, 0x5e341808, | |
| 4607 | + 0x494f0c4b}}; | |
| 4608 | + | |
| 4609 | +local const z_word_t FAR crc_braid_big_table[][256] = { | |
| 4610 | + {0x00000000, 0x43147b17, 0x8628f62e, 0xc53c8d39, 0x0c51ec5d, | |
| 4611 | + 0x4f45974a, 0x8a791a73, 0xc96d6164, 0x18a2d8bb, 0x5bb6a3ac, | |
| 4612 | + 0x9e8a2e95, 0xdd9e5582, 0x14f334e6, 0x57e74ff1, 0x92dbc2c8, | |
| 4613 | + 0xd1cfb9df, 0x7142c0ac, 0x3256bbbb, 0xf76a3682, 0xb47e4d95, | |
| 4614 | + 0x7d132cf1, 0x3e0757e6, 0xfb3bdadf, 0xb82fa1c8, 0x69e01817, | |
| 4615 | + 0x2af46300, 0xefc8ee39, 0xacdc952e, 0x65b1f44a, 0x26a58f5d, | |
| 4616 | + 0xe3990264, 0xa08d7973, 0xa382f182, 0xe0968a95, 0x25aa07ac, | |
| 4617 | + 0x66be7cbb, 0xafd31ddf, 0xecc766c8, 0x29fbebf1, 0x6aef90e6, | |
| 4618 | + 0xbb202939, 0xf834522e, 0x3d08df17, 0x7e1ca400, 0xb771c564, | |
| 4619 | + 0xf465be73, 0x3159334a, 0x724d485d, 0xd2c0312e, 0x91d44a39, | |
| 4620 | + 0x54e8c700, 0x17fcbc17, 0xde91dd73, 0x9d85a664, 0x58b92b5d, | |
| 4621 | + 0x1bad504a, 0xca62e995, 0x89769282, 0x4c4a1fbb, 0x0f5e64ac, | |
| 4622 | + 0xc63305c8, 0x85277edf, 0x401bf3e6, 0x030f88f1, 0x070392de, | |
| 4623 | + 0x4417e9c9, 0x812b64f0, 0xc23f1fe7, 0x0b527e83, 0x48460594, | |
| 4624 | + 0x8d7a88ad, 0xce6ef3ba, 0x1fa14a65, 0x5cb53172, 0x9989bc4b, | |
| 4625 | + 0xda9dc75c, 0x13f0a638, 0x50e4dd2f, 0x95d85016, 0xd6cc2b01, | |
| 4626 | + 0x76415272, 0x35552965, 0xf069a45c, 0xb37ddf4b, 0x7a10be2f, | |
| 4627 | + 0x3904c538, 0xfc384801, 0xbf2c3316, 0x6ee38ac9, 0x2df7f1de, | |
| 4628 | + 0xe8cb7ce7, 0xabdf07f0, 0x62b26694, 0x21a61d83, 0xe49a90ba, | |
| 4629 | + 0xa78eebad, 0xa481635c, 0xe795184b, 0x22a99572, 0x61bdee65, | |
| 4630 | + 0xa8d08f01, 0xebc4f416, 0x2ef8792f, 0x6dec0238, 0xbc23bbe7, | |
| 4631 | + 0xff37c0f0, 0x3a0b4dc9, 0x791f36de, 0xb07257ba, 0xf3662cad, | |
| 4632 | + 0x365aa194, 0x754eda83, 0xd5c3a3f0, 0x96d7d8e7, 0x53eb55de, | |
| 4633 | + 0x10ff2ec9, 0xd9924fad, 0x9a8634ba, 0x5fbab983, 0x1caec294, | |
| 4634 | + 0xcd617b4b, 0x8e75005c, 0x4b498d65, 0x085df672, 0xc1309716, | |
| 4635 | + 0x8224ec01, 0x47186138, 0x040c1a2f, 0x4f005566, 0x0c142e71, | |
| 4636 | + 0xc928a348, 0x8a3cd85f, 0x4351b93b, 0x0045c22c, 0xc5794f15, | |
| 4637 | + 0x866d3402, 0x57a28ddd, 0x14b6f6ca, 0xd18a7bf3, 0x929e00e4, | |
| 4638 | + 0x5bf36180, 0x18e71a97, 0xdddb97ae, 0x9ecfecb9, 0x3e4295ca, | |
| 4639 | + 0x7d56eedd, 0xb86a63e4, 0xfb7e18f3, 0x32137997, 0x71070280, | |
| 4640 | + 0xb43b8fb9, 0xf72ff4ae, 0x26e04d71, 0x65f43666, 0xa0c8bb5f, | |
| 4641 | + 0xe3dcc048, 0x2ab1a12c, 0x69a5da3b, 0xac995702, 0xef8d2c15, | |
| 4642 | + 0xec82a4e4, 0xaf96dff3, 0x6aaa52ca, 0x29be29dd, 0xe0d348b9, | |
| 4643 | + 0xa3c733ae, 0x66fbbe97, 0x25efc580, 0xf4207c5f, 0xb7340748, | |
| 4644 | + 0x72088a71, 0x311cf166, 0xf8719002, 0xbb65eb15, 0x7e59662c, | |
| 4645 | + 0x3d4d1d3b, 0x9dc06448, 0xded41f5f, 0x1be89266, 0x58fce971, | |
| 4646 | + 0x91918815, 0xd285f302, 0x17b97e3b, 0x54ad052c, 0x8562bcf3, | |
| 4647 | + 0xc676c7e4, 0x034a4add, 0x405e31ca, 0x893350ae, 0xca272bb9, | |
| 4648 | + 0x0f1ba680, 0x4c0fdd97, 0x4803c7b8, 0x0b17bcaf, 0xce2b3196, | |
| 4649 | + 0x8d3f4a81, 0x44522be5, 0x074650f2, 0xc27addcb, 0x816ea6dc, | |
| 4650 | + 0x50a11f03, 0x13b56414, 0xd689e92d, 0x959d923a, 0x5cf0f35e, | |
| 4651 | + 0x1fe48849, 0xdad80570, 0x99cc7e67, 0x39410714, 0x7a557c03, | |
| 4652 | + 0xbf69f13a, 0xfc7d8a2d, 0x3510eb49, 0x7604905e, 0xb3381d67, | |
| 4653 | + 0xf02c6670, 0x21e3dfaf, 0x62f7a4b8, 0xa7cb2981, 0xe4df5296, | |
| 4654 | + 0x2db233f2, 0x6ea648e5, 0xab9ac5dc, 0xe88ebecb, 0xeb81363a, | |
| 4655 | + 0xa8954d2d, 0x6da9c014, 0x2ebdbb03, 0xe7d0da67, 0xa4c4a170, | |
| 4656 | + 0x61f82c49, 0x22ec575e, 0xf323ee81, 0xb0379596, 0x750b18af, | |
| 4657 | + 0x361f63b8, 0xff7202dc, 0xbc6679cb, 0x795af4f2, 0x3a4e8fe5, | |
| 4658 | + 0x9ac3f696, 0xd9d78d81, 0x1ceb00b8, 0x5fff7baf, 0x96921acb, | |
| 4659 | + 0xd58661dc, 0x10baece5, 0x53ae97f2, 0x82612e2d, 0xc175553a, | |
| 4660 | + 0x0449d803, 0x475da314, 0x8e30c270, 0xcd24b967, 0x0818345e, | |
| 4661 | + 0x4b0c4f49}, | |
| 4662 | + {0x00000000, 0x3e6bc2ef, 0x3dd0f504, 0x03bb37eb, 0x7aa0eb09, | |
| 4663 | + 0x44cb29e6, 0x47701e0d, 0x791bdce2, 0xf440d713, 0xca2b15fc, | |
| 4664 | + 0xc9902217, 0xf7fbe0f8, 0x8ee03c1a, 0xb08bfef5, 0xb330c91e, | |
| 4665 | + 0x8d5b0bf1, 0xe881ae27, 0xd6ea6cc8, 0xd5515b23, 0xeb3a99cc, | |
| 4666 | + 0x9221452e, 0xac4a87c1, 0xaff1b02a, 0x919a72c5, 0x1cc17934, | |
| 4667 | + 0x22aabbdb, 0x21118c30, 0x1f7a4edf, 0x6661923d, 0x580a50d2, | |
| 4668 | + 0x5bb16739, 0x65daa5d6, 0xd0035d4f, 0xee689fa0, 0xedd3a84b, | |
| 4669 | + 0xd3b86aa4, 0xaaa3b646, 0x94c874a9, 0x97734342, 0xa91881ad, | |
| 4670 | + 0x24438a5c, 0x1a2848b3, 0x19937f58, 0x27f8bdb7, 0x5ee36155, | |
| 4671 | + 0x6088a3ba, 0x63339451, 0x5d5856be, 0x3882f368, 0x06e93187, | |
| 4672 | + 0x0552066c, 0x3b39c483, 0x42221861, 0x7c49da8e, 0x7ff2ed65, | |
| 4673 | + 0x41992f8a, 0xccc2247b, 0xf2a9e694, 0xf112d17f, 0xcf791390, | |
| 4674 | + 0xb662cf72, 0x88090d9d, 0x8bb23a76, 0xb5d9f899, 0xa007ba9e, | |
| 4675 | + 0x9e6c7871, 0x9dd74f9a, 0xa3bc8d75, 0xdaa75197, 0xe4cc9378, | |
| 4676 | + 0xe777a493, 0xd91c667c, 0x54476d8d, 0x6a2caf62, 0x69979889, | |
| 4677 | + 0x57fc5a66, 0x2ee78684, 0x108c446b, 0x13377380, 0x2d5cb16f, | |
| 4678 | + 0x488614b9, 0x76edd656, 0x7556e1bd, 0x4b3d2352, 0x3226ffb0, | |
| 4679 | + 0x0c4d3d5f, 0x0ff60ab4, 0x319dc85b, 0xbcc6c3aa, 0x82ad0145, | |
| 4680 | + 0x811636ae, 0xbf7df441, 0xc66628a3, 0xf80dea4c, 0xfbb6dda7, | |
| 4681 | + 0xc5dd1f48, 0x7004e7d1, 0x4e6f253e, 0x4dd412d5, 0x73bfd03a, | |
| 4682 | + 0x0aa40cd8, 0x34cfce37, 0x3774f9dc, 0x091f3b33, 0x844430c2, | |
| 4683 | + 0xba2ff22d, 0xb994c5c6, 0x87ff0729, 0xfee4dbcb, 0xc08f1924, | |
| 4684 | + 0xc3342ecf, 0xfd5fec20, 0x988549f6, 0xa6ee8b19, 0xa555bcf2, | |
| 4685 | + 0x9b3e7e1d, 0xe225a2ff, 0xdc4e6010, 0xdff557fb, 0xe19e9514, | |
| 4686 | + 0x6cc59ee5, 0x52ae5c0a, 0x51156be1, 0x6f7ea90e, 0x166575ec, | |
| 4687 | + 0x280eb703, 0x2bb580e8, 0x15de4207, 0x010905e6, 0x3f62c709, | |
| 4688 | + 0x3cd9f0e2, 0x02b2320d, 0x7ba9eeef, 0x45c22c00, 0x46791beb, | |
| 4689 | + 0x7812d904, 0xf549d2f5, 0xcb22101a, 0xc89927f1, 0xf6f2e51e, | |
| 4690 | + 0x8fe939fc, 0xb182fb13, 0xb239ccf8, 0x8c520e17, 0xe988abc1, | |
| 4691 | + 0xd7e3692e, 0xd4585ec5, 0xea339c2a, 0x932840c8, 0xad438227, | |
| 4692 | + 0xaef8b5cc, 0x90937723, 0x1dc87cd2, 0x23a3be3d, 0x201889d6, | |
| 4693 | + 0x1e734b39, 0x676897db, 0x59035534, 0x5ab862df, 0x64d3a030, | |
| 4694 | + 0xd10a58a9, 0xef619a46, 0xecdaadad, 0xd2b16f42, 0xabaab3a0, | |
| 4695 | + 0x95c1714f, 0x967a46a4, 0xa811844b, 0x254a8fba, 0x1b214d55, | |
| 4696 | + 0x189a7abe, 0x26f1b851, 0x5fea64b3, 0x6181a65c, 0x623a91b7, | |
| 4697 | + 0x5c515358, 0x398bf68e, 0x07e03461, 0x045b038a, 0x3a30c165, | |
| 4698 | + 0x432b1d87, 0x7d40df68, 0x7efbe883, 0x40902a6c, 0xcdcb219d, | |
| 4699 | + 0xf3a0e372, 0xf01bd499, 0xce701676, 0xb76bca94, 0x8900087b, | |
| 4700 | + 0x8abb3f90, 0xb4d0fd7f, 0xa10ebf78, 0x9f657d97, 0x9cde4a7c, | |
| 4701 | + 0xa2b58893, 0xdbae5471, 0xe5c5969e, 0xe67ea175, 0xd815639a, | |
| 4702 | + 0x554e686b, 0x6b25aa84, 0x689e9d6f, 0x56f55f80, 0x2fee8362, | |
| 4703 | + 0x1185418d, 0x123e7666, 0x2c55b489, 0x498f115f, 0x77e4d3b0, | |
| 4704 | + 0x745fe45b, 0x4a3426b4, 0x332ffa56, 0x0d4438b9, 0x0eff0f52, | |
| 4705 | + 0x3094cdbd, 0xbdcfc64c, 0x83a404a3, 0x801f3348, 0xbe74f1a7, | |
| 4706 | + 0xc76f2d45, 0xf904efaa, 0xfabfd841, 0xc4d41aae, 0x710de237, | |
| 4707 | + 0x4f6620d8, 0x4cdd1733, 0x72b6d5dc, 0x0bad093e, 0x35c6cbd1, | |
| 4708 | + 0x367dfc3a, 0x08163ed5, 0x854d3524, 0xbb26f7cb, 0xb89dc020, | |
| 4709 | + 0x86f602cf, 0xffedde2d, 0xc1861cc2, 0xc23d2b29, 0xfc56e9c6, | |
| 4710 | + 0x998c4c10, 0xa7e78eff, 0xa45cb914, 0x9a377bfb, 0xe32ca719, | |
| 4711 | + 0xdd4765f6, 0xdefc521d, 0xe09790f2, 0x6dcc9b03, 0x53a759ec, | |
| 4712 | + 0x501c6e07, 0x6e77ace8, 0x176c700a, 0x2907b2e5, 0x2abc850e, | |
| 4713 | + 0x14d747e1}, | |
| 4714 | + {0x00000000, 0xc0df8ec1, 0xc1b96c58, 0x0166e299, 0x8273d9b0, | |
| 4715 | + 0x42ac5771, 0x43cab5e8, 0x83153b29, 0x45e1c3ba, 0x853e4d7b, | |
| 4716 | + 0x8458afe2, 0x44872123, 0xc7921a0a, 0x074d94cb, 0x062b7652, | |
| 4717 | + 0xc6f4f893, 0xcbc4f6ae, 0x0b1b786f, 0x0a7d9af6, 0xcaa21437, | |
| 4718 | + 0x49b72f1e, 0x8968a1df, 0x880e4346, 0x48d1cd87, 0x8e253514, | |
| 4719 | + 0x4efabbd5, 0x4f9c594c, 0x8f43d78d, 0x0c56eca4, 0xcc896265, | |
| 4720 | + 0xcdef80fc, 0x0d300e3d, 0xd78f9c86, 0x17501247, 0x1636f0de, | |
| 4721 | + 0xd6e97e1f, 0x55fc4536, 0x9523cbf7, 0x9445296e, 0x549aa7af, | |
| 4722 | + 0x926e5f3c, 0x52b1d1fd, 0x53d73364, 0x9308bda5, 0x101d868c, | |
| 4723 | + 0xd0c2084d, 0xd1a4ead4, 0x117b6415, 0x1c4b6a28, 0xdc94e4e9, | |
| 4724 | + 0xddf20670, 0x1d2d88b1, 0x9e38b398, 0x5ee73d59, 0x5f81dfc0, | |
| 4725 | + 0x9f5e5101, 0x59aaa992, 0x99752753, 0x9813c5ca, 0x58cc4b0b, | |
| 4726 | + 0xdbd97022, 0x1b06fee3, 0x1a601c7a, 0xdabf92bb, 0xef1948d6, | |
| 4727 | + 0x2fc6c617, 0x2ea0248e, 0xee7faa4f, 0x6d6a9166, 0xadb51fa7, | |
| 4728 | + 0xacd3fd3e, 0x6c0c73ff, 0xaaf88b6c, 0x6a2705ad, 0x6b41e734, | |
| 4729 | + 0xab9e69f5, 0x288b52dc, 0xe854dc1d, 0xe9323e84, 0x29edb045, | |
| 4730 | + 0x24ddbe78, 0xe40230b9, 0xe564d220, 0x25bb5ce1, 0xa6ae67c8, | |
| 4731 | + 0x6671e909, 0x67170b90, 0xa7c88551, 0x613c7dc2, 0xa1e3f303, | |
| 4732 | + 0xa085119a, 0x605a9f5b, 0xe34fa472, 0x23902ab3, 0x22f6c82a, | |
| 4733 | + 0xe22946eb, 0x3896d450, 0xf8495a91, 0xf92fb808, 0x39f036c9, | |
| 4734 | + 0xbae50de0, 0x7a3a8321, 0x7b5c61b8, 0xbb83ef79, 0x7d7717ea, | |
| 4735 | + 0xbda8992b, 0xbcce7bb2, 0x7c11f573, 0xff04ce5a, 0x3fdb409b, | |
| 4736 | + 0x3ebda202, 0xfe622cc3, 0xf35222fe, 0x338dac3f, 0x32eb4ea6, | |
| 4737 | + 0xf234c067, 0x7121fb4e, 0xb1fe758f, 0xb0989716, 0x704719d7, | |
| 4738 | + 0xb6b3e144, 0x766c6f85, 0x770a8d1c, 0xb7d503dd, 0x34c038f4, | |
| 4739 | + 0xf41fb635, 0xf57954ac, 0x35a6da6d, 0x9f35e177, 0x5fea6fb6, | |
| 4740 | + 0x5e8c8d2f, 0x9e5303ee, 0x1d4638c7, 0xdd99b606, 0xdcff549f, | |
| 4741 | + 0x1c20da5e, 0xdad422cd, 0x1a0bac0c, 0x1b6d4e95, 0xdbb2c054, | |
| 4742 | + 0x58a7fb7d, 0x987875bc, 0x991e9725, 0x59c119e4, 0x54f117d9, | |
| 4743 | + 0x942e9918, 0x95487b81, 0x5597f540, 0xd682ce69, 0x165d40a8, | |
| 4744 | + 0x173ba231, 0xd7e42cf0, 0x1110d463, 0xd1cf5aa2, 0xd0a9b83b, | |
| 4745 | + 0x107636fa, 0x93630dd3, 0x53bc8312, 0x52da618b, 0x9205ef4a, | |
| 4746 | + 0x48ba7df1, 0x8865f330, 0x890311a9, 0x49dc9f68, 0xcac9a441, | |
| 4747 | + 0x0a162a80, 0x0b70c819, 0xcbaf46d8, 0x0d5bbe4b, 0xcd84308a, | |
| 4748 | + 0xcce2d213, 0x0c3d5cd2, 0x8f2867fb, 0x4ff7e93a, 0x4e910ba3, | |
| 4749 | + 0x8e4e8562, 0x837e8b5f, 0x43a1059e, 0x42c7e707, 0x821869c6, | |
| 4750 | + 0x010d52ef, 0xc1d2dc2e, 0xc0b43eb7, 0x006bb076, 0xc69f48e5, | |
| 4751 | + 0x0640c624, 0x072624bd, 0xc7f9aa7c, 0x44ec9155, 0x84331f94, | |
| 4752 | + 0x8555fd0d, 0x458a73cc, 0x702ca9a1, 0xb0f32760, 0xb195c5f9, | |
| 4753 | + 0x714a4b38, 0xf25f7011, 0x3280fed0, 0x33e61c49, 0xf3399288, | |
| 4754 | + 0x35cd6a1b, 0xf512e4da, 0xf4740643, 0x34ab8882, 0xb7beb3ab, | |
| 4755 | + 0x77613d6a, 0x7607dff3, 0xb6d85132, 0xbbe85f0f, 0x7b37d1ce, | |
| 4756 | + 0x7a513357, 0xba8ebd96, 0x399b86bf, 0xf944087e, 0xf822eae7, | |
| 4757 | + 0x38fd6426, 0xfe099cb5, 0x3ed61274, 0x3fb0f0ed, 0xff6f7e2c, | |
| 4758 | + 0x7c7a4505, 0xbca5cbc4, 0xbdc3295d, 0x7d1ca79c, 0xa7a33527, | |
| 4759 | + 0x677cbbe6, 0x661a597f, 0xa6c5d7be, 0x25d0ec97, 0xe50f6256, | |
| 4760 | + 0xe46980cf, 0x24b60e0e, 0xe242f69d, 0x229d785c, 0x23fb9ac5, | |
| 4761 | + 0xe3241404, 0x60312f2d, 0xa0eea1ec, 0xa1884375, 0x6157cdb4, | |
| 4762 | + 0x6c67c389, 0xacb84d48, 0xaddeafd1, 0x6d012110, 0xee141a39, | |
| 4763 | + 0x2ecb94f8, 0x2fad7661, 0xef72f8a0, 0x29860033, 0xe9598ef2, | |
| 4764 | + 0xe83f6c6b, 0x28e0e2aa, 0xabf5d983, 0x6b2a5742, 0x6a4cb5db, | |
| 4765 | + 0xaa933b1a}, | |
| 4766 | + {0x00000000, 0x6f4ca59b, 0x9f9e3bec, 0xf0d29e77, 0x7f3b0603, | |
| 4767 | + 0x1077a398, 0xe0a53def, 0x8fe99874, 0xfe760c06, 0x913aa99d, | |
| 4768 | + 0x61e837ea, 0x0ea49271, 0x814d0a05, 0xee01af9e, 0x1ed331e9, | |
| 4769 | + 0x719f9472, 0xfced180c, 0x93a1bd97, 0x637323e0, 0x0c3f867b, | |
| 4770 | + 0x83d61e0f, 0xec9abb94, 0x1c4825e3, 0x73048078, 0x029b140a, | |
| 4771 | + 0x6dd7b191, 0x9d052fe6, 0xf2498a7d, 0x7da01209, 0x12ecb792, | |
| 4772 | + 0xe23e29e5, 0x8d728c7e, 0xf8db3118, 0x97979483, 0x67450af4, | |
| 4773 | + 0x0809af6f, 0x87e0371b, 0xe8ac9280, 0x187e0cf7, 0x7732a96c, | |
| 4774 | + 0x06ad3d1e, 0x69e19885, 0x993306f2, 0xf67fa369, 0x79963b1d, | |
| 4775 | + 0x16da9e86, 0xe60800f1, 0x8944a56a, 0x04362914, 0x6b7a8c8f, | |
| 4776 | + 0x9ba812f8, 0xf4e4b763, 0x7b0d2f17, 0x14418a8c, 0xe49314fb, | |
| 4777 | + 0x8bdfb160, 0xfa402512, 0x950c8089, 0x65de1efe, 0x0a92bb65, | |
| 4778 | + 0x857b2311, 0xea37868a, 0x1ae518fd, 0x75a9bd66, 0xf0b76330, | |
| 4779 | + 0x9ffbc6ab, 0x6f2958dc, 0x0065fd47, 0x8f8c6533, 0xe0c0c0a8, | |
| 4780 | + 0x10125edf, 0x7f5efb44, 0x0ec16f36, 0x618dcaad, 0x915f54da, | |
| 4781 | + 0xfe13f141, 0x71fa6935, 0x1eb6ccae, 0xee6452d9, 0x8128f742, | |
| 4782 | + 0x0c5a7b3c, 0x6316dea7, 0x93c440d0, 0xfc88e54b, 0x73617d3f, | |
| 4783 | + 0x1c2dd8a4, 0xecff46d3, 0x83b3e348, 0xf22c773a, 0x9d60d2a1, | |
| 4784 | + 0x6db24cd6, 0x02fee94d, 0x8d177139, 0xe25bd4a2, 0x12894ad5, | |
| 4785 | + 0x7dc5ef4e, 0x086c5228, 0x6720f7b3, 0x97f269c4, 0xf8becc5f, | |
| 4786 | + 0x7757542b, 0x181bf1b0, 0xe8c96fc7, 0x8785ca5c, 0xf61a5e2e, | |
| 4787 | + 0x9956fbb5, 0x698465c2, 0x06c8c059, 0x8921582d, 0xe66dfdb6, | |
| 4788 | + 0x16bf63c1, 0x79f3c65a, 0xf4814a24, 0x9bcdefbf, 0x6b1f71c8, | |
| 4789 | + 0x0453d453, 0x8bba4c27, 0xe4f6e9bc, 0x142477cb, 0x7b68d250, | |
| 4790 | + 0x0af74622, 0x65bbe3b9, 0x95697dce, 0xfa25d855, 0x75cc4021, | |
| 4791 | + 0x1a80e5ba, 0xea527bcd, 0x851ede56, 0xe06fc760, 0x8f2362fb, | |
| 4792 | + 0x7ff1fc8c, 0x10bd5917, 0x9f54c163, 0xf01864f8, 0x00cafa8f, | |
| 4793 | + 0x6f865f14, 0x1e19cb66, 0x71556efd, 0x8187f08a, 0xeecb5511, | |
| 4794 | + 0x6122cd65, 0x0e6e68fe, 0xfebcf689, 0x91f05312, 0x1c82df6c, | |
| 4795 | + 0x73ce7af7, 0x831ce480, 0xec50411b, 0x63b9d96f, 0x0cf57cf4, | |
| 4796 | + 0xfc27e283, 0x936b4718, 0xe2f4d36a, 0x8db876f1, 0x7d6ae886, | |
| 4797 | + 0x12264d1d, 0x9dcfd569, 0xf28370f2, 0x0251ee85, 0x6d1d4b1e, | |
| 4798 | + 0x18b4f678, 0x77f853e3, 0x872acd94, 0xe866680f, 0x678ff07b, | |
| 4799 | + 0x08c355e0, 0xf811cb97, 0x975d6e0c, 0xe6c2fa7e, 0x898e5fe5, | |
| 4800 | + 0x795cc192, 0x16106409, 0x99f9fc7d, 0xf6b559e6, 0x0667c791, | |
| 4801 | + 0x692b620a, 0xe459ee74, 0x8b154bef, 0x7bc7d598, 0x148b7003, | |
| 4802 | + 0x9b62e877, 0xf42e4dec, 0x04fcd39b, 0x6bb07600, 0x1a2fe272, | |
| 4803 | + 0x756347e9, 0x85b1d99e, 0xeafd7c05, 0x6514e471, 0x0a5841ea, | |
| 4804 | + 0xfa8adf9d, 0x95c67a06, 0x10d8a450, 0x7f9401cb, 0x8f469fbc, | |
| 4805 | + 0xe00a3a27, 0x6fe3a253, 0x00af07c8, 0xf07d99bf, 0x9f313c24, | |
| 4806 | + 0xeeaea856, 0x81e20dcd, 0x713093ba, 0x1e7c3621, 0x9195ae55, | |
| 4807 | + 0xfed90bce, 0x0e0b95b9, 0x61473022, 0xec35bc5c, 0x837919c7, | |
| 4808 | + 0x73ab87b0, 0x1ce7222b, 0x930eba5f, 0xfc421fc4, 0x0c9081b3, | |
| 4809 | + 0x63dc2428, 0x1243b05a, 0x7d0f15c1, 0x8ddd8bb6, 0xe2912e2d, | |
| 4810 | + 0x6d78b659, 0x023413c2, 0xf2e68db5, 0x9daa282e, 0xe8039548, | |
| 4811 | + 0x874f30d3, 0x779daea4, 0x18d10b3f, 0x9738934b, 0xf87436d0, | |
| 4812 | + 0x08a6a8a7, 0x67ea0d3c, 0x1675994e, 0x79393cd5, 0x89eba2a2, | |
| 4813 | + 0xe6a70739, 0x694e9f4d, 0x06023ad6, 0xf6d0a4a1, 0x999c013a, | |
| 4814 | + 0x14ee8d44, 0x7ba228df, 0x8b70b6a8, 0xe43c1333, 0x6bd58b47, | |
| 4815 | + 0x04992edc, 0xf44bb0ab, 0x9b071530, 0xea988142, 0x85d424d9, | |
| 4816 | + 0x7506baae, 0x1a4a1f35, 0x95a38741, 0xfaef22da, 0x0a3dbcad, | |
| 4817 | + 0x65711936}}; | |
| 4818 | + | |
| 4819 | +#endif | |
| 4820 | + | |
| 4821 | +#endif | |
| 4822 | + | |
| 4823 | +#if N == 4 | |
| 4824 | + | |
| 4825 | +#if W == 8 | |
| 4826 | + | |
| 4827 | +local const z_crc_t FAR crc_braid_table[][256] = { | |
| 4828 | + {0x00000000, 0xf1da05aa, 0x38c50d15, 0xc91f08bf, 0x718a1a2a, | |
| 4829 | + 0x80501f80, 0x494f173f, 0xb8951295, 0xe3143454, 0x12ce31fe, | |
| 4830 | + 0xdbd13941, 0x2a0b3ceb, 0x929e2e7e, 0x63442bd4, 0xaa5b236b, | |
| 4831 | + 0x5b8126c1, 0x1d596ee9, 0xec836b43, 0x259c63fc, 0xd4466656, | |
| 4832 | + 0x6cd374c3, 0x9d097169, 0x541679d6, 0xa5cc7c7c, 0xfe4d5abd, | |
| 4833 | + 0x0f975f17, 0xc68857a8, 0x37525202, 0x8fc74097, 0x7e1d453d, | |
| 4834 | + 0xb7024d82, 0x46d84828, 0x3ab2ddd2, 0xcb68d878, 0x0277d0c7, | |
| 4835 | + 0xf3add56d, 0x4b38c7f8, 0xbae2c252, 0x73fdcaed, 0x8227cf47, | |
| 4836 | + 0xd9a6e986, 0x287cec2c, 0xe163e493, 0x10b9e139, 0xa82cf3ac, | |
| 4837 | + 0x59f6f606, 0x90e9feb9, 0x6133fb13, 0x27ebb33b, 0xd631b691, | |
| 4838 | + 0x1f2ebe2e, 0xeef4bb84, 0x5661a911, 0xa7bbacbb, 0x6ea4a404, | |
| 4839 | + 0x9f7ea1ae, 0xc4ff876f, 0x352582c5, 0xfc3a8a7a, 0x0de08fd0, | |
| 4840 | + 0xb5759d45, 0x44af98ef, 0x8db09050, 0x7c6a95fa, 0x7565bba4, | |
| 4841 | + 0x84bfbe0e, 0x4da0b6b1, 0xbc7ab31b, 0x04efa18e, 0xf535a424, | |
| 4842 | + 0x3c2aac9b, 0xcdf0a931, 0x96718ff0, 0x67ab8a5a, 0xaeb482e5, | |
| 4843 | + 0x5f6e874f, 0xe7fb95da, 0x16219070, 0xdf3e98cf, 0x2ee49d65, | |
| 4844 | + 0x683cd54d, 0x99e6d0e7, 0x50f9d858, 0xa123ddf2, 0x19b6cf67, | |
| 4845 | + 0xe86ccacd, 0x2173c272, 0xd0a9c7d8, 0x8b28e119, 0x7af2e4b3, | |
| 4846 | + 0xb3edec0c, 0x4237e9a6, 0xfaa2fb33, 0x0b78fe99, 0xc267f626, | |
| 4847 | + 0x33bdf38c, 0x4fd76676, 0xbe0d63dc, 0x77126b63, 0x86c86ec9, | |
| 4848 | + 0x3e5d7c5c, 0xcf8779f6, 0x06987149, 0xf74274e3, 0xacc35222, | |
| 4849 | + 0x5d195788, 0x94065f37, 0x65dc5a9d, 0xdd494808, 0x2c934da2, | |
| 4850 | + 0xe58c451d, 0x145640b7, 0x528e089f, 0xa3540d35, 0x6a4b058a, | |
| 4851 | + 0x9b910020, 0x230412b5, 0xd2de171f, 0x1bc11fa0, 0xea1b1a0a, | |
| 4852 | + 0xb19a3ccb, 0x40403961, 0x895f31de, 0x78853474, 0xc01026e1, | |
| 4853 | + 0x31ca234b, 0xf8d52bf4, 0x090f2e5e, 0xeacb7748, 0x1b1172e2, | |
| 4854 | + 0xd20e7a5d, 0x23d47ff7, 0x9b416d62, 0x6a9b68c8, 0xa3846077, | |
| 4855 | + 0x525e65dd, 0x09df431c, 0xf80546b6, 0x311a4e09, 0xc0c04ba3, | |
| 4856 | + 0x78555936, 0x898f5c9c, 0x40905423, 0xb14a5189, 0xf79219a1, | |
| 4857 | + 0x06481c0b, 0xcf5714b4, 0x3e8d111e, 0x8618038b, 0x77c20621, | |
| 4858 | + 0xbedd0e9e, 0x4f070b34, 0x14862df5, 0xe55c285f, 0x2c4320e0, | |
| 4859 | + 0xdd99254a, 0x650c37df, 0x94d63275, 0x5dc93aca, 0xac133f60, | |
| 4860 | + 0xd079aa9a, 0x21a3af30, 0xe8bca78f, 0x1966a225, 0xa1f3b0b0, | |
| 4861 | + 0x5029b51a, 0x9936bda5, 0x68ecb80f, 0x336d9ece, 0xc2b79b64, | |
| 4862 | + 0x0ba893db, 0xfa729671, 0x42e784e4, 0xb33d814e, 0x7a2289f1, | |
| 4863 | + 0x8bf88c5b, 0xcd20c473, 0x3cfac1d9, 0xf5e5c966, 0x043fcccc, | |
| 4864 | + 0xbcaade59, 0x4d70dbf3, 0x846fd34c, 0x75b5d6e6, 0x2e34f027, | |
| 4865 | + 0xdfeef58d, 0x16f1fd32, 0xe72bf898, 0x5fbeea0d, 0xae64efa7, | |
| 4866 | + 0x677be718, 0x96a1e2b2, 0x9faeccec, 0x6e74c946, 0xa76bc1f9, | |
| 4867 | + 0x56b1c453, 0xee24d6c6, 0x1ffed36c, 0xd6e1dbd3, 0x273bde79, | |
| 4868 | + 0x7cbaf8b8, 0x8d60fd12, 0x447ff5ad, 0xb5a5f007, 0x0d30e292, | |
| 4869 | + 0xfceae738, 0x35f5ef87, 0xc42fea2d, 0x82f7a205, 0x732da7af, | |
| 4870 | + 0xba32af10, 0x4be8aaba, 0xf37db82f, 0x02a7bd85, 0xcbb8b53a, | |
| 4871 | + 0x3a62b090, 0x61e39651, 0x903993fb, 0x59269b44, 0xa8fc9eee, | |
| 4872 | + 0x10698c7b, 0xe1b389d1, 0x28ac816e, 0xd97684c4, 0xa51c113e, | |
| 4873 | + 0x54c61494, 0x9dd91c2b, 0x6c031981, 0xd4960b14, 0x254c0ebe, | |
| 4874 | + 0xec530601, 0x1d8903ab, 0x4608256a, 0xb7d220c0, 0x7ecd287f, | |
| 4875 | + 0x8f172dd5, 0x37823f40, 0xc6583aea, 0x0f473255, 0xfe9d37ff, | |
| 4876 | + 0xb8457fd7, 0x499f7a7d, 0x808072c2, 0x715a7768, 0xc9cf65fd, | |
| 4877 | + 0x38156057, 0xf10a68e8, 0x00d06d42, 0x5b514b83, 0xaa8b4e29, | |
| 4878 | + 0x63944696, 0x924e433c, 0x2adb51a9, 0xdb015403, 0x121e5cbc, | |
| 4879 | + 0xe3c45916}, | |
| 4880 | + {0x00000000, 0x0ee7e8d1, 0x1dcfd1a2, 0x13283973, 0x3b9fa344, | |
| 4881 | + 0x35784b95, 0x265072e6, 0x28b79a37, 0x773f4688, 0x79d8ae59, | |
| 4882 | + 0x6af0972a, 0x64177ffb, 0x4ca0e5cc, 0x42470d1d, 0x516f346e, | |
| 4883 | + 0x5f88dcbf, 0xee7e8d10, 0xe09965c1, 0xf3b15cb2, 0xfd56b463, | |
| 4884 | + 0xd5e12e54, 0xdb06c685, 0xc82efff6, 0xc6c91727, 0x9941cb98, | |
| 4885 | + 0x97a62349, 0x848e1a3a, 0x8a69f2eb, 0xa2de68dc, 0xac39800d, | |
| 4886 | + 0xbf11b97e, 0xb1f651af, 0x078c1c61, 0x096bf4b0, 0x1a43cdc3, | |
| 4887 | + 0x14a42512, 0x3c13bf25, 0x32f457f4, 0x21dc6e87, 0x2f3b8656, | |
| 4888 | + 0x70b35ae9, 0x7e54b238, 0x6d7c8b4b, 0x639b639a, 0x4b2cf9ad, | |
| 4889 | + 0x45cb117c, 0x56e3280f, 0x5804c0de, 0xe9f29171, 0xe71579a0, | |
| 4890 | + 0xf43d40d3, 0xfadaa802, 0xd26d3235, 0xdc8adae4, 0xcfa2e397, | |
| 4891 | + 0xc1450b46, 0x9ecdd7f9, 0x902a3f28, 0x8302065b, 0x8de5ee8a, | |
| 4892 | + 0xa55274bd, 0xabb59c6c, 0xb89da51f, 0xb67a4dce, 0x0f1838c2, | |
| 4893 | + 0x01ffd013, 0x12d7e960, 0x1c3001b1, 0x34879b86, 0x3a607357, | |
| 4894 | + 0x29484a24, 0x27afa2f5, 0x78277e4a, 0x76c0969b, 0x65e8afe8, | |
| 4895 | + 0x6b0f4739, 0x43b8dd0e, 0x4d5f35df, 0x5e770cac, 0x5090e47d, | |
| 4896 | + 0xe166b5d2, 0xef815d03, 0xfca96470, 0xf24e8ca1, 0xdaf91696, | |
| 4897 | + 0xd41efe47, 0xc736c734, 0xc9d12fe5, 0x9659f35a, 0x98be1b8b, | |
| 4898 | + 0x8b9622f8, 0x8571ca29, 0xadc6501e, 0xa321b8cf, 0xb00981bc, | |
| 4899 | + 0xbeee696d, 0x089424a3, 0x0673cc72, 0x155bf501, 0x1bbc1dd0, | |
| 4900 | + 0x330b87e7, 0x3dec6f36, 0x2ec45645, 0x2023be94, 0x7fab622b, | |
| 4901 | + 0x714c8afa, 0x6264b389, 0x6c835b58, 0x4434c16f, 0x4ad329be, | |
| 4902 | + 0x59fb10cd, 0x571cf81c, 0xe6eaa9b3, 0xe80d4162, 0xfb257811, | |
| 4903 | + 0xf5c290c0, 0xdd750af7, 0xd392e226, 0xc0badb55, 0xce5d3384, | |
| 4904 | + 0x91d5ef3b, 0x9f3207ea, 0x8c1a3e99, 0x82fdd648, 0xaa4a4c7f, | |
| 4905 | + 0xa4ada4ae, 0xb7859ddd, 0xb962750c, 0x1e307184, 0x10d79955, | |
| 4906 | + 0x03ffa026, 0x0d1848f7, 0x25afd2c0, 0x2b483a11, 0x38600362, | |
| 4907 | + 0x3687ebb3, 0x690f370c, 0x67e8dfdd, 0x74c0e6ae, 0x7a270e7f, | |
| 4908 | + 0x52909448, 0x5c777c99, 0x4f5f45ea, 0x41b8ad3b, 0xf04efc94, | |
| 4909 | + 0xfea91445, 0xed812d36, 0xe366c5e7, 0xcbd15fd0, 0xc536b701, | |
| 4910 | + 0xd61e8e72, 0xd8f966a3, 0x8771ba1c, 0x899652cd, 0x9abe6bbe, | |
| 4911 | + 0x9459836f, 0xbcee1958, 0xb209f189, 0xa121c8fa, 0xafc6202b, | |
| 4912 | + 0x19bc6de5, 0x175b8534, 0x0473bc47, 0x0a945496, 0x2223cea1, | |
| 4913 | + 0x2cc42670, 0x3fec1f03, 0x310bf7d2, 0x6e832b6d, 0x6064c3bc, | |
| 4914 | + 0x734cfacf, 0x7dab121e, 0x551c8829, 0x5bfb60f8, 0x48d3598b, | |
| 4915 | + 0x4634b15a, 0xf7c2e0f5, 0xf9250824, 0xea0d3157, 0xe4ead986, | |
| 4916 | + 0xcc5d43b1, 0xc2baab60, 0xd1929213, 0xdf757ac2, 0x80fda67d, | |
| 4917 | + 0x8e1a4eac, 0x9d3277df, 0x93d59f0e, 0xbb620539, 0xb585ede8, | |
| 4918 | + 0xa6add49b, 0xa84a3c4a, 0x11284946, 0x1fcfa197, 0x0ce798e4, | |
| 4919 | + 0x02007035, 0x2ab7ea02, 0x245002d3, 0x37783ba0, 0x399fd371, | |
| 4920 | + 0x66170fce, 0x68f0e71f, 0x7bd8de6c, 0x753f36bd, 0x5d88ac8a, | |
| 4921 | + 0x536f445b, 0x40477d28, 0x4ea095f9, 0xff56c456, 0xf1b12c87, | |
| 4922 | + 0xe29915f4, 0xec7efd25, 0xc4c96712, 0xca2e8fc3, 0xd906b6b0, | |
| 4923 | + 0xd7e15e61, 0x886982de, 0x868e6a0f, 0x95a6537c, 0x9b41bbad, | |
| 4924 | + 0xb3f6219a, 0xbd11c94b, 0xae39f038, 0xa0de18e9, 0x16a45527, | |
| 4925 | + 0x1843bdf6, 0x0b6b8485, 0x058c6c54, 0x2d3bf663, 0x23dc1eb2, | |
| 4926 | + 0x30f427c1, 0x3e13cf10, 0x619b13af, 0x6f7cfb7e, 0x7c54c20d, | |
| 4927 | + 0x72b32adc, 0x5a04b0eb, 0x54e3583a, 0x47cb6149, 0x492c8998, | |
| 4928 | + 0xf8dad837, 0xf63d30e6, 0xe5150995, 0xebf2e144, 0xc3457b73, | |
| 4929 | + 0xcda293a2, 0xde8aaad1, 0xd06d4200, 0x8fe59ebf, 0x8102766e, | |
| 4930 | + 0x922a4f1d, 0x9ccda7cc, 0xb47a3dfb, 0xba9dd52a, 0xa9b5ec59, | |
| 4931 | + 0xa7520488}, | |
| 4932 | + {0x00000000, 0x3c60e308, 0x78c1c610, 0x44a12518, 0xf1838c20, | |
| 4933 | + 0xcde36f28, 0x89424a30, 0xb522a938, 0x38761e01, 0x0416fd09, | |
| 4934 | + 0x40b7d811, 0x7cd73b19, 0xc9f59221, 0xf5957129, 0xb1345431, | |
| 4935 | + 0x8d54b739, 0x70ec3c02, 0x4c8cdf0a, 0x082dfa12, 0x344d191a, | |
| 4936 | + 0x816fb022, 0xbd0f532a, 0xf9ae7632, 0xc5ce953a, 0x489a2203, | |
| 4937 | + 0x74fac10b, 0x305be413, 0x0c3b071b, 0xb919ae23, 0x85794d2b, | |
| 4938 | + 0xc1d86833, 0xfdb88b3b, 0xe1d87804, 0xddb89b0c, 0x9919be14, | |
| 4939 | + 0xa5795d1c, 0x105bf424, 0x2c3b172c, 0x689a3234, 0x54fad13c, | |
| 4940 | + 0xd9ae6605, 0xe5ce850d, 0xa16fa015, 0x9d0f431d, 0x282dea25, | |
| 4941 | + 0x144d092d, 0x50ec2c35, 0x6c8ccf3d, 0x91344406, 0xad54a70e, | |
| 4942 | + 0xe9f58216, 0xd595611e, 0x60b7c826, 0x5cd72b2e, 0x18760e36, | |
| 4943 | + 0x2416ed3e, 0xa9425a07, 0x9522b90f, 0xd1839c17, 0xede37f1f, | |
| 4944 | + 0x58c1d627, 0x64a1352f, 0x20001037, 0x1c60f33f, 0x18c1f649, | |
| 4945 | + 0x24a11541, 0x60003059, 0x5c60d351, 0xe9427a69, 0xd5229961, | |
| 4946 | + 0x9183bc79, 0xade35f71, 0x20b7e848, 0x1cd70b40, 0x58762e58, | |
| 4947 | + 0x6416cd50, 0xd1346468, 0xed548760, 0xa9f5a278, 0x95954170, | |
| 4948 | + 0x682dca4b, 0x544d2943, 0x10ec0c5b, 0x2c8cef53, 0x99ae466b, | |
| 4949 | + 0xa5cea563, 0xe16f807b, 0xdd0f6373, 0x505bd44a, 0x6c3b3742, | |
| 4950 | + 0x289a125a, 0x14faf152, 0xa1d8586a, 0x9db8bb62, 0xd9199e7a, | |
| 4951 | + 0xe5797d72, 0xf9198e4d, 0xc5796d45, 0x81d8485d, 0xbdb8ab55, | |
| 4952 | + 0x089a026d, 0x34fae165, 0x705bc47d, 0x4c3b2775, 0xc16f904c, | |
| 4953 | + 0xfd0f7344, 0xb9ae565c, 0x85ceb554, 0x30ec1c6c, 0x0c8cff64, | |
| 4954 | + 0x482dda7c, 0x744d3974, 0x89f5b24f, 0xb5955147, 0xf134745f, | |
| 4955 | + 0xcd549757, 0x78763e6f, 0x4416dd67, 0x00b7f87f, 0x3cd71b77, | |
| 4956 | + 0xb183ac4e, 0x8de34f46, 0xc9426a5e, 0xf5228956, 0x4000206e, | |
| 4957 | + 0x7c60c366, 0x38c1e67e, 0x04a10576, 0x3183ec92, 0x0de30f9a, | |
| 4958 | + 0x49422a82, 0x7522c98a, 0xc00060b2, 0xfc6083ba, 0xb8c1a6a2, | |
| 4959 | + 0x84a145aa, 0x09f5f293, 0x3595119b, 0x71343483, 0x4d54d78b, | |
| 4960 | + 0xf8767eb3, 0xc4169dbb, 0x80b7b8a3, 0xbcd75bab, 0x416fd090, | |
| 4961 | + 0x7d0f3398, 0x39ae1680, 0x05cef588, 0xb0ec5cb0, 0x8c8cbfb8, | |
| 4962 | + 0xc82d9aa0, 0xf44d79a8, 0x7919ce91, 0x45792d99, 0x01d80881, | |
| 4963 | + 0x3db8eb89, 0x889a42b1, 0xb4faa1b9, 0xf05b84a1, 0xcc3b67a9, | |
| 4964 | + 0xd05b9496, 0xec3b779e, 0xa89a5286, 0x94fab18e, 0x21d818b6, | |
| 4965 | + 0x1db8fbbe, 0x5919dea6, 0x65793dae, 0xe82d8a97, 0xd44d699f, | |
| 4966 | + 0x90ec4c87, 0xac8caf8f, 0x19ae06b7, 0x25cee5bf, 0x616fc0a7, | |
| 4967 | + 0x5d0f23af, 0xa0b7a894, 0x9cd74b9c, 0xd8766e84, 0xe4168d8c, | |
| 4968 | + 0x513424b4, 0x6d54c7bc, 0x29f5e2a4, 0x159501ac, 0x98c1b695, | |
| 4969 | + 0xa4a1559d, 0xe0007085, 0xdc60938d, 0x69423ab5, 0x5522d9bd, | |
| 4970 | + 0x1183fca5, 0x2de31fad, 0x29421adb, 0x1522f9d3, 0x5183dccb, | |
| 4971 | + 0x6de33fc3, 0xd8c196fb, 0xe4a175f3, 0xa00050eb, 0x9c60b3e3, | |
| 4972 | + 0x113404da, 0x2d54e7d2, 0x69f5c2ca, 0x559521c2, 0xe0b788fa, | |
| 4973 | + 0xdcd76bf2, 0x98764eea, 0xa416ade2, 0x59ae26d9, 0x65cec5d1, | |
| 4974 | + 0x216fe0c9, 0x1d0f03c1, 0xa82daaf9, 0x944d49f1, 0xd0ec6ce9, | |
| 4975 | + 0xec8c8fe1, 0x61d838d8, 0x5db8dbd0, 0x1919fec8, 0x25791dc0, | |
| 4976 | + 0x905bb4f8, 0xac3b57f0, 0xe89a72e8, 0xd4fa91e0, 0xc89a62df, | |
| 4977 | + 0xf4fa81d7, 0xb05ba4cf, 0x8c3b47c7, 0x3919eeff, 0x05790df7, | |
| 4978 | + 0x41d828ef, 0x7db8cbe7, 0xf0ec7cde, 0xcc8c9fd6, 0x882dbace, | |
| 4979 | + 0xb44d59c6, 0x016ff0fe, 0x3d0f13f6, 0x79ae36ee, 0x45ced5e6, | |
| 4980 | + 0xb8765edd, 0x8416bdd5, 0xc0b798cd, 0xfcd77bc5, 0x49f5d2fd, | |
| 4981 | + 0x759531f5, 0x313414ed, 0x0d54f7e5, 0x800040dc, 0xbc60a3d4, | |
| 4982 | + 0xf8c186cc, 0xc4a165c4, 0x7183ccfc, 0x4de32ff4, 0x09420aec, | |
| 4983 | + 0x3522e9e4}, | |
| 4984 | + {0x00000000, 0x6307d924, 0xc60fb248, 0xa5086b6c, 0x576e62d1, | |
| 4985 | + 0x3469bbf5, 0x9161d099, 0xf26609bd, 0xaedcc5a2, 0xcddb1c86, | |
| 4986 | + 0x68d377ea, 0x0bd4aece, 0xf9b2a773, 0x9ab57e57, 0x3fbd153b, | |
| 4987 | + 0x5cbacc1f, 0x86c88d05, 0xe5cf5421, 0x40c73f4d, 0x23c0e669, | |
| 4988 | + 0xd1a6efd4, 0xb2a136f0, 0x17a95d9c, 0x74ae84b8, 0x281448a7, | |
| 4989 | + 0x4b139183, 0xee1bfaef, 0x8d1c23cb, 0x7f7a2a76, 0x1c7df352, | |
| 4990 | + 0xb975983e, 0xda72411a, 0xd6e01c4b, 0xb5e7c56f, 0x10efae03, | |
| 4991 | + 0x73e87727, 0x818e7e9a, 0xe289a7be, 0x4781ccd2, 0x248615f6, | |
| 4992 | + 0x783cd9e9, 0x1b3b00cd, 0xbe336ba1, 0xdd34b285, 0x2f52bb38, | |
| 4993 | + 0x4c55621c, 0xe95d0970, 0x8a5ad054, 0x5028914e, 0x332f486a, | |
| 4994 | + 0x96272306, 0xf520fa22, 0x0746f39f, 0x64412abb, 0xc14941d7, | |
| 4995 | + 0xa24e98f3, 0xfef454ec, 0x9df38dc8, 0x38fbe6a4, 0x5bfc3f80, | |
| 4996 | + 0xa99a363d, 0xca9def19, 0x6f958475, 0x0c925d51, 0x76b13ed7, | |
| 4997 | + 0x15b6e7f3, 0xb0be8c9f, 0xd3b955bb, 0x21df5c06, 0x42d88522, | |
| 4998 | + 0xe7d0ee4e, 0x84d7376a, 0xd86dfb75, 0xbb6a2251, 0x1e62493d, | |
| 4999 | + 0x7d659019, 0x8f0399a4, 0xec044080, 0x490c2bec, 0x2a0bf2c8, | |
| 5000 | + 0xf079b3d2, 0x937e6af6, 0x3676019a, 0x5571d8be, 0xa717d103, | |
| 5001 | + 0xc4100827, 0x6118634b, 0x021fba6f, 0x5ea57670, 0x3da2af54, | |
| 5002 | + 0x98aac438, 0xfbad1d1c, 0x09cb14a1, 0x6acccd85, 0xcfc4a6e9, | |
| 5003 | + 0xacc37fcd, 0xa051229c, 0xc356fbb8, 0x665e90d4, 0x055949f0, | |
| 5004 | + 0xf73f404d, 0x94389969, 0x3130f205, 0x52372b21, 0x0e8de73e, | |
| 5005 | + 0x6d8a3e1a, 0xc8825576, 0xab858c52, 0x59e385ef, 0x3ae45ccb, | |
| 5006 | + 0x9fec37a7, 0xfcebee83, 0x2699af99, 0x459e76bd, 0xe0961dd1, | |
| 5007 | + 0x8391c4f5, 0x71f7cd48, 0x12f0146c, 0xb7f87f00, 0xd4ffa624, | |
| 5008 | + 0x88456a3b, 0xeb42b31f, 0x4e4ad873, 0x2d4d0157, 0xdf2b08ea, | |
| 5009 | + 0xbc2cd1ce, 0x1924baa2, 0x7a236386, 0xed627dae, 0x8e65a48a, | |
| 5010 | + 0x2b6dcfe6, 0x486a16c2, 0xba0c1f7f, 0xd90bc65b, 0x7c03ad37, | |
| 5011 | + 0x1f047413, 0x43beb80c, 0x20b96128, 0x85b10a44, 0xe6b6d360, | |
| 5012 | + 0x14d0dadd, 0x77d703f9, 0xd2df6895, 0xb1d8b1b1, 0x6baaf0ab, | |
| 5013 | + 0x08ad298f, 0xada542e3, 0xcea29bc7, 0x3cc4927a, 0x5fc34b5e, | |
| 5014 | + 0xfacb2032, 0x99ccf916, 0xc5763509, 0xa671ec2d, 0x03798741, | |
| 5015 | + 0x607e5e65, 0x921857d8, 0xf11f8efc, 0x5417e590, 0x37103cb4, | |
| 5016 | + 0x3b8261e5, 0x5885b8c1, 0xfd8dd3ad, 0x9e8a0a89, 0x6cec0334, | |
| 5017 | + 0x0febda10, 0xaae3b17c, 0xc9e46858, 0x955ea447, 0xf6597d63, | |
| 5018 | + 0x5351160f, 0x3056cf2b, 0xc230c696, 0xa1371fb2, 0x043f74de, | |
| 5019 | + 0x6738adfa, 0xbd4aece0, 0xde4d35c4, 0x7b455ea8, 0x1842878c, | |
| 5020 | + 0xea248e31, 0x89235715, 0x2c2b3c79, 0x4f2ce55d, 0x13962942, | |
| 5021 | + 0x7091f066, 0xd5999b0a, 0xb69e422e, 0x44f84b93, 0x27ff92b7, | |
| 5022 | + 0x82f7f9db, 0xe1f020ff, 0x9bd34379, 0xf8d49a5d, 0x5ddcf131, | |
| 5023 | + 0x3edb2815, 0xccbd21a8, 0xafbaf88c, 0x0ab293e0, 0x69b54ac4, | |
| 5024 | + 0x350f86db, 0x56085fff, 0xf3003493, 0x9007edb7, 0x6261e40a, | |
| 5025 | + 0x01663d2e, 0xa46e5642, 0xc7698f66, 0x1d1bce7c, 0x7e1c1758, | |
| 5026 | + 0xdb147c34, 0xb813a510, 0x4a75acad, 0x29727589, 0x8c7a1ee5, | |
| 5027 | + 0xef7dc7c1, 0xb3c70bde, 0xd0c0d2fa, 0x75c8b996, 0x16cf60b2, | |
| 5028 | + 0xe4a9690f, 0x87aeb02b, 0x22a6db47, 0x41a10263, 0x4d335f32, | |
| 5029 | + 0x2e348616, 0x8b3ced7a, 0xe83b345e, 0x1a5d3de3, 0x795ae4c7, | |
| 5030 | + 0xdc528fab, 0xbf55568f, 0xe3ef9a90, 0x80e843b4, 0x25e028d8, | |
| 5031 | + 0x46e7f1fc, 0xb481f841, 0xd7862165, 0x728e4a09, 0x1189932d, | |
| 5032 | + 0xcbfbd237, 0xa8fc0b13, 0x0df4607f, 0x6ef3b95b, 0x9c95b0e6, | |
| 5033 | + 0xff9269c2, 0x5a9a02ae, 0x399ddb8a, 0x65271795, 0x0620ceb1, | |
| 5034 | + 0xa328a5dd, 0xc02f7cf9, 0x32497544, 0x514eac60, 0xf446c70c, | |
| 5035 | + 0x97411e28}, | |
| 5036 | + {0x00000000, 0x01b5fd1d, 0x036bfa3a, 0x02de0727, 0x06d7f474, | |
| 5037 | + 0x07620969, 0x05bc0e4e, 0x0409f353, 0x0dafe8e8, 0x0c1a15f5, | |
| 5038 | + 0x0ec412d2, 0x0f71efcf, 0x0b781c9c, 0x0acde181, 0x0813e6a6, | |
| 5039 | + 0x09a61bbb, 0x1b5fd1d0, 0x1aea2ccd, 0x18342bea, 0x1981d6f7, | |
| 5040 | + 0x1d8825a4, 0x1c3dd8b9, 0x1ee3df9e, 0x1f562283, 0x16f03938, | |
| 5041 | + 0x1745c425, 0x159bc302, 0x142e3e1f, 0x1027cd4c, 0x11923051, | |
| 5042 | + 0x134c3776, 0x12f9ca6b, 0x36bfa3a0, 0x370a5ebd, 0x35d4599a, | |
| 5043 | + 0x3461a487, 0x306857d4, 0x31ddaac9, 0x3303adee, 0x32b650f3, | |
| 5044 | + 0x3b104b48, 0x3aa5b655, 0x387bb172, 0x39ce4c6f, 0x3dc7bf3c, | |
| 5045 | + 0x3c724221, 0x3eac4506, 0x3f19b81b, 0x2de07270, 0x2c558f6d, | |
| 5046 | + 0x2e8b884a, 0x2f3e7557, 0x2b378604, 0x2a827b19, 0x285c7c3e, | |
| 5047 | + 0x29e98123, 0x204f9a98, 0x21fa6785, 0x232460a2, 0x22919dbf, | |
| 5048 | + 0x26986eec, 0x272d93f1, 0x25f394d6, 0x244669cb, 0x6d7f4740, | |
| 5049 | + 0x6ccaba5d, 0x6e14bd7a, 0x6fa14067, 0x6ba8b334, 0x6a1d4e29, | |
| 5050 | + 0x68c3490e, 0x6976b413, 0x60d0afa8, 0x616552b5, 0x63bb5592, | |
| 5051 | + 0x620ea88f, 0x66075bdc, 0x67b2a6c1, 0x656ca1e6, 0x64d95cfb, | |
| 5052 | + 0x76209690, 0x77956b8d, 0x754b6caa, 0x74fe91b7, 0x70f762e4, | |
| 5053 | + 0x71429ff9, 0x739c98de, 0x722965c3, 0x7b8f7e78, 0x7a3a8365, | |
| 5054 | + 0x78e48442, 0x7951795f, 0x7d588a0c, 0x7ced7711, 0x7e337036, | |
| 5055 | + 0x7f868d2b, 0x5bc0e4e0, 0x5a7519fd, 0x58ab1eda, 0x591ee3c7, | |
| 5056 | + 0x5d171094, 0x5ca2ed89, 0x5e7ceaae, 0x5fc917b3, 0x566f0c08, | |
| 5057 | + 0x57daf115, 0x5504f632, 0x54b10b2f, 0x50b8f87c, 0x510d0561, | |
| 5058 | + 0x53d30246, 0x5266ff5b, 0x409f3530, 0x412ac82d, 0x43f4cf0a, | |
| 5059 | + 0x42413217, 0x4648c144, 0x47fd3c59, 0x45233b7e, 0x4496c663, | |
| 5060 | + 0x4d30ddd8, 0x4c8520c5, 0x4e5b27e2, 0x4feedaff, 0x4be729ac, | |
| 5061 | + 0x4a52d4b1, 0x488cd396, 0x49392e8b, 0xdafe8e80, 0xdb4b739d, | |
| 5062 | + 0xd99574ba, 0xd82089a7, 0xdc297af4, 0xdd9c87e9, 0xdf4280ce, | |
| 5063 | + 0xdef77dd3, 0xd7516668, 0xd6e49b75, 0xd43a9c52, 0xd58f614f, | |
| 5064 | + 0xd186921c, 0xd0336f01, 0xd2ed6826, 0xd358953b, 0xc1a15f50, | |
| 5065 | + 0xc014a24d, 0xc2caa56a, 0xc37f5877, 0xc776ab24, 0xc6c35639, | |
| 5066 | + 0xc41d511e, 0xc5a8ac03, 0xcc0eb7b8, 0xcdbb4aa5, 0xcf654d82, | |
| 5067 | + 0xced0b09f, 0xcad943cc, 0xcb6cbed1, 0xc9b2b9f6, 0xc80744eb, | |
| 5068 | + 0xec412d20, 0xedf4d03d, 0xef2ad71a, 0xee9f2a07, 0xea96d954, | |
| 5069 | + 0xeb232449, 0xe9fd236e, 0xe848de73, 0xe1eec5c8, 0xe05b38d5, | |
| 5070 | + 0xe2853ff2, 0xe330c2ef, 0xe73931bc, 0xe68ccca1, 0xe452cb86, | |
| 5071 | + 0xe5e7369b, 0xf71efcf0, 0xf6ab01ed, 0xf47506ca, 0xf5c0fbd7, | |
| 5072 | + 0xf1c90884, 0xf07cf599, 0xf2a2f2be, 0xf3170fa3, 0xfab11418, | |
| 5073 | + 0xfb04e905, 0xf9daee22, 0xf86f133f, 0xfc66e06c, 0xfdd31d71, | |
| 5074 | + 0xff0d1a56, 0xfeb8e74b, 0xb781c9c0, 0xb63434dd, 0xb4ea33fa, | |
| 5075 | + 0xb55fcee7, 0xb1563db4, 0xb0e3c0a9, 0xb23dc78e, 0xb3883a93, | |
| 5076 | + 0xba2e2128, 0xbb9bdc35, 0xb945db12, 0xb8f0260f, 0xbcf9d55c, | |
| 5077 | + 0xbd4c2841, 0xbf922f66, 0xbe27d27b, 0xacde1810, 0xad6be50d, | |
| 5078 | + 0xafb5e22a, 0xae001f37, 0xaa09ec64, 0xabbc1179, 0xa962165e, | |
| 5079 | + 0xa8d7eb43, 0xa171f0f8, 0xa0c40de5, 0xa21a0ac2, 0xa3aff7df, | |
| 5080 | + 0xa7a6048c, 0xa613f991, 0xa4cdfeb6, 0xa57803ab, 0x813e6a60, | |
| 5081 | + 0x808b977d, 0x8255905a, 0x83e06d47, 0x87e99e14, 0x865c6309, | |
| 5082 | + 0x8482642e, 0x85379933, 0x8c918288, 0x8d247f95, 0x8ffa78b2, | |
| 5083 | + 0x8e4f85af, 0x8a4676fc, 0x8bf38be1, 0x892d8cc6, 0x889871db, | |
| 5084 | + 0x9a61bbb0, 0x9bd446ad, 0x990a418a, 0x98bfbc97, 0x9cb64fc4, | |
| 5085 | + 0x9d03b2d9, 0x9fddb5fe, 0x9e6848e3, 0x97ce5358, 0x967bae45, | |
| 5086 | + 0x94a5a962, 0x9510547f, 0x9119a72c, 0x90ac5a31, 0x92725d16, | |
| 5087 | + 0x93c7a00b}, | |
| 5088 | + {0x00000000, 0x6e8c1b41, 0xdd183682, 0xb3942dc3, 0x61416b45, | |
| 5089 | + 0x0fcd7004, 0xbc595dc7, 0xd2d54686, 0xc282d68a, 0xac0ecdcb, | |
| 5090 | + 0x1f9ae008, 0x7116fb49, 0xa3c3bdcf, 0xcd4fa68e, 0x7edb8b4d, | |
| 5091 | + 0x1057900c, 0x5e74ab55, 0x30f8b014, 0x836c9dd7, 0xede08696, | |
| 5092 | + 0x3f35c010, 0x51b9db51, 0xe22df692, 0x8ca1edd3, 0x9cf67ddf, | |
| 5093 | + 0xf27a669e, 0x41ee4b5d, 0x2f62501c, 0xfdb7169a, 0x933b0ddb, | |
| 5094 | + 0x20af2018, 0x4e233b59, 0xbce956aa, 0xd2654deb, 0x61f16028, | |
| 5095 | + 0x0f7d7b69, 0xdda83def, 0xb32426ae, 0x00b00b6d, 0x6e3c102c, | |
| 5096 | + 0x7e6b8020, 0x10e79b61, 0xa373b6a2, 0xcdffade3, 0x1f2aeb65, | |
| 5097 | + 0x71a6f024, 0xc232dde7, 0xacbec6a6, 0xe29dfdff, 0x8c11e6be, | |
| 5098 | + 0x3f85cb7d, 0x5109d03c, 0x83dc96ba, 0xed508dfb, 0x5ec4a038, | |
| 5099 | + 0x3048bb79, 0x201f2b75, 0x4e933034, 0xfd071df7, 0x938b06b6, | |
| 5100 | + 0x415e4030, 0x2fd25b71, 0x9c4676b2, 0xf2ca6df3, 0xa2a3ab15, | |
| 5101 | + 0xcc2fb054, 0x7fbb9d97, 0x113786d6, 0xc3e2c050, 0xad6edb11, | |
| 5102 | + 0x1efaf6d2, 0x7076ed93, 0x60217d9f, 0x0ead66de, 0xbd394b1d, | |
| 5103 | + 0xd3b5505c, 0x016016da, 0x6fec0d9b, 0xdc782058, 0xb2f43b19, | |
| 5104 | + 0xfcd70040, 0x925b1b01, 0x21cf36c2, 0x4f432d83, 0x9d966b05, | |
| 5105 | + 0xf31a7044, 0x408e5d87, 0x2e0246c6, 0x3e55d6ca, 0x50d9cd8b, | |
| 5106 | + 0xe34de048, 0x8dc1fb09, 0x5f14bd8f, 0x3198a6ce, 0x820c8b0d, | |
| 5107 | + 0xec80904c, 0x1e4afdbf, 0x70c6e6fe, 0xc352cb3d, 0xadded07c, | |
| 5108 | + 0x7f0b96fa, 0x11878dbb, 0xa213a078, 0xcc9fbb39, 0xdcc82b35, | |
| 5109 | + 0xb2443074, 0x01d01db7, 0x6f5c06f6, 0xbd894070, 0xd3055b31, | |
| 5110 | + 0x609176f2, 0x0e1d6db3, 0x403e56ea, 0x2eb24dab, 0x9d266068, | |
| 5111 | + 0xf3aa7b29, 0x217f3daf, 0x4ff326ee, 0xfc670b2d, 0x92eb106c, | |
| 5112 | + 0x82bc8060, 0xec309b21, 0x5fa4b6e2, 0x3128ada3, 0xe3fdeb25, | |
| 5113 | + 0x8d71f064, 0x3ee5dda7, 0x5069c6e6, 0x9e36506b, 0xf0ba4b2a, | |
| 5114 | + 0x432e66e9, 0x2da27da8, 0xff773b2e, 0x91fb206f, 0x226f0dac, | |
| 5115 | + 0x4ce316ed, 0x5cb486e1, 0x32389da0, 0x81acb063, 0xef20ab22, | |
| 5116 | + 0x3df5eda4, 0x5379f6e5, 0xe0eddb26, 0x8e61c067, 0xc042fb3e, | |
| 5117 | + 0xaecee07f, 0x1d5acdbc, 0x73d6d6fd, 0xa103907b, 0xcf8f8b3a, | |
| 5118 | + 0x7c1ba6f9, 0x1297bdb8, 0x02c02db4, 0x6c4c36f5, 0xdfd81b36, | |
| 5119 | + 0xb1540077, 0x638146f1, 0x0d0d5db0, 0xbe997073, 0xd0156b32, | |
| 5120 | + 0x22df06c1, 0x4c531d80, 0xffc73043, 0x914b2b02, 0x439e6d84, | |
| 5121 | + 0x2d1276c5, 0x9e865b06, 0xf00a4047, 0xe05dd04b, 0x8ed1cb0a, | |
| 5122 | + 0x3d45e6c9, 0x53c9fd88, 0x811cbb0e, 0xef90a04f, 0x5c048d8c, | |
| 5123 | + 0x328896cd, 0x7cabad94, 0x1227b6d5, 0xa1b39b16, 0xcf3f8057, | |
| 5124 | + 0x1deac6d1, 0x7366dd90, 0xc0f2f053, 0xae7eeb12, 0xbe297b1e, | |
| 5125 | + 0xd0a5605f, 0x63314d9c, 0x0dbd56dd, 0xdf68105b, 0xb1e40b1a, | |
| 5126 | + 0x027026d9, 0x6cfc3d98, 0x3c95fb7e, 0x5219e03f, 0xe18dcdfc, | |
| 5127 | + 0x8f01d6bd, 0x5dd4903b, 0x33588b7a, 0x80cca6b9, 0xee40bdf8, | |
| 5128 | + 0xfe172df4, 0x909b36b5, 0x230f1b76, 0x4d830037, 0x9f5646b1, | |
| 5129 | + 0xf1da5df0, 0x424e7033, 0x2cc26b72, 0x62e1502b, 0x0c6d4b6a, | |
| 5130 | + 0xbff966a9, 0xd1757de8, 0x03a03b6e, 0x6d2c202f, 0xdeb80dec, | |
| 5131 | + 0xb03416ad, 0xa06386a1, 0xceef9de0, 0x7d7bb023, 0x13f7ab62, | |
| 5132 | + 0xc122ede4, 0xafaef6a5, 0x1c3adb66, 0x72b6c027, 0x807cadd4, | |
| 5133 | + 0xeef0b695, 0x5d649b56, 0x33e88017, 0xe13dc691, 0x8fb1ddd0, | |
| 5134 | + 0x3c25f013, 0x52a9eb52, 0x42fe7b5e, 0x2c72601f, 0x9fe64ddc, | |
| 5135 | + 0xf16a569d, 0x23bf101b, 0x4d330b5a, 0xfea72699, 0x902b3dd8, | |
| 5136 | + 0xde080681, 0xb0841dc0, 0x03103003, 0x6d9c2b42, 0xbf496dc4, | |
| 5137 | + 0xd1c57685, 0x62515b46, 0x0cdd4007, 0x1c8ad00b, 0x7206cb4a, | |
| 5138 | + 0xc192e689, 0xaf1efdc8, 0x7dcbbb4e, 0x1347a00f, 0xa0d38dcc, | |
| 5139 | + 0xce5f968d}, | |
| 5140 | + {0x00000000, 0xe71da697, 0x154a4b6f, 0xf257edf8, 0x2a9496de, | |
| 5141 | + 0xcd893049, 0x3fdeddb1, 0xd8c37b26, 0x55292dbc, 0xb2348b2b, | |
| 5142 | + 0x406366d3, 0xa77ec044, 0x7fbdbb62, 0x98a01df5, 0x6af7f00d, | |
| 5143 | + 0x8dea569a, 0xaa525b78, 0x4d4ffdef, 0xbf181017, 0x5805b680, | |
| 5144 | + 0x80c6cda6, 0x67db6b31, 0x958c86c9, 0x7291205e, 0xff7b76c4, | |
| 5145 | + 0x1866d053, 0xea313dab, 0x0d2c9b3c, 0xd5efe01a, 0x32f2468d, | |
| 5146 | + 0xc0a5ab75, 0x27b80de2, 0x8fd5b0b1, 0x68c81626, 0x9a9ffbde, | |
| 5147 | + 0x7d825d49, 0xa541266f, 0x425c80f8, 0xb00b6d00, 0x5716cb97, | |
| 5148 | + 0xdafc9d0d, 0x3de13b9a, 0xcfb6d662, 0x28ab70f5, 0xf0680bd3, | |
| 5149 | + 0x1775ad44, 0xe52240bc, 0x023fe62b, 0x2587ebc9, 0xc29a4d5e, | |
| 5150 | + 0x30cda0a6, 0xd7d00631, 0x0f137d17, 0xe80edb80, 0x1a593678, | |
| 5151 | + 0xfd4490ef, 0x70aec675, 0x97b360e2, 0x65e48d1a, 0x82f92b8d, | |
| 5152 | + 0x5a3a50ab, 0xbd27f63c, 0x4f701bc4, 0xa86dbd53, 0xc4da6723, | |
| 5153 | + 0x23c7c1b4, 0xd1902c4c, 0x368d8adb, 0xee4ef1fd, 0x0953576a, | |
| 5154 | + 0xfb04ba92, 0x1c191c05, 0x91f34a9f, 0x76eeec08, 0x84b901f0, | |
| 5155 | + 0x63a4a767, 0xbb67dc41, 0x5c7a7ad6, 0xae2d972e, 0x493031b9, | |
| 5156 | + 0x6e883c5b, 0x89959acc, 0x7bc27734, 0x9cdfd1a3, 0x441caa85, | |
| 5157 | + 0xa3010c12, 0x5156e1ea, 0xb64b477d, 0x3ba111e7, 0xdcbcb770, | |
| 5158 | + 0x2eeb5a88, 0xc9f6fc1f, 0x11358739, 0xf62821ae, 0x047fcc56, | |
| 5159 | + 0xe3626ac1, 0x4b0fd792, 0xac127105, 0x5e459cfd, 0xb9583a6a, | |
| 5160 | + 0x619b414c, 0x8686e7db, 0x74d10a23, 0x93ccacb4, 0x1e26fa2e, | |
| 5161 | + 0xf93b5cb9, 0x0b6cb141, 0xec7117d6, 0x34b26cf0, 0xd3afca67, | |
| 5162 | + 0x21f8279f, 0xc6e58108, 0xe15d8cea, 0x06402a7d, 0xf417c785, | |
| 5163 | + 0x130a6112, 0xcbc91a34, 0x2cd4bca3, 0xde83515b, 0x399ef7cc, | |
| 5164 | + 0xb474a156, 0x536907c1, 0xa13eea39, 0x46234cae, 0x9ee03788, | |
| 5165 | + 0x79fd911f, 0x8baa7ce7, 0x6cb7da70, 0x52c5c807, 0xb5d86e90, | |
| 5166 | + 0x478f8368, 0xa09225ff, 0x78515ed9, 0x9f4cf84e, 0x6d1b15b6, | |
| 5167 | + 0x8a06b321, 0x07ece5bb, 0xe0f1432c, 0x12a6aed4, 0xf5bb0843, | |
| 5168 | + 0x2d787365, 0xca65d5f2, 0x3832380a, 0xdf2f9e9d, 0xf897937f, | |
| 5169 | + 0x1f8a35e8, 0xedddd810, 0x0ac07e87, 0xd20305a1, 0x351ea336, | |
| 5170 | + 0xc7494ece, 0x2054e859, 0xadbebec3, 0x4aa31854, 0xb8f4f5ac, | |
| 5171 | + 0x5fe9533b, 0x872a281d, 0x60378e8a, 0x92606372, 0x757dc5e5, | |
| 5172 | + 0xdd1078b6, 0x3a0dde21, 0xc85a33d9, 0x2f47954e, 0xf784ee68, | |
| 5173 | + 0x109948ff, 0xe2cea507, 0x05d30390, 0x8839550a, 0x6f24f39d, | |
| 5174 | + 0x9d731e65, 0x7a6eb8f2, 0xa2adc3d4, 0x45b06543, 0xb7e788bb, | |
| 5175 | + 0x50fa2e2c, 0x774223ce, 0x905f8559, 0x620868a1, 0x8515ce36, | |
| 5176 | + 0x5dd6b510, 0xbacb1387, 0x489cfe7f, 0xaf8158e8, 0x226b0e72, | |
| 5177 | + 0xc576a8e5, 0x3721451d, 0xd03ce38a, 0x08ff98ac, 0xefe23e3b, | |
| 5178 | + 0x1db5d3c3, 0xfaa87554, 0x961faf24, 0x710209b3, 0x8355e44b, | |
| 5179 | + 0x644842dc, 0xbc8b39fa, 0x5b969f6d, 0xa9c17295, 0x4edcd402, | |
| 5180 | + 0xc3368298, 0x242b240f, 0xd67cc9f7, 0x31616f60, 0xe9a21446, | |
| 5181 | + 0x0ebfb2d1, 0xfce85f29, 0x1bf5f9be, 0x3c4df45c, 0xdb5052cb, | |
| 5182 | + 0x2907bf33, 0xce1a19a4, 0x16d96282, 0xf1c4c415, 0x039329ed, | |
| 5183 | + 0xe48e8f7a, 0x6964d9e0, 0x8e797f77, 0x7c2e928f, 0x9b333418, | |
| 5184 | + 0x43f04f3e, 0xa4ede9a9, 0x56ba0451, 0xb1a7a2c6, 0x19ca1f95, | |
| 5185 | + 0xfed7b902, 0x0c8054fa, 0xeb9df26d, 0x335e894b, 0xd4432fdc, | |
| 5186 | + 0x2614c224, 0xc10964b3, 0x4ce33229, 0xabfe94be, 0x59a97946, | |
| 5187 | + 0xbeb4dfd1, 0x6677a4f7, 0x816a0260, 0x733def98, 0x9420490f, | |
| 5188 | + 0xb39844ed, 0x5485e27a, 0xa6d20f82, 0x41cfa915, 0x990cd233, | |
| 5189 | + 0x7e1174a4, 0x8c46995c, 0x6b5b3fcb, 0xe6b16951, 0x01accfc6, | |
| 5190 | + 0xf3fb223e, 0x14e684a9, 0xcc25ff8f, 0x2b385918, 0xd96fb4e0, | |
| 5191 | + 0x3e721277}, | |
| 5192 | + {0x00000000, 0xa58b900e, 0x9066265d, 0x35edb653, 0xfbbd4afb, | |
| 5193 | + 0x5e36daf5, 0x6bdb6ca6, 0xce50fca8, 0x2c0b93b7, 0x898003b9, | |
| 5194 | + 0xbc6db5ea, 0x19e625e4, 0xd7b6d94c, 0x723d4942, 0x47d0ff11, | |
| 5195 | + 0xe25b6f1f, 0x5817276e, 0xfd9cb760, 0xc8710133, 0x6dfa913d, | |
| 5196 | + 0xa3aa6d95, 0x0621fd9b, 0x33cc4bc8, 0x9647dbc6, 0x741cb4d9, | |
| 5197 | + 0xd19724d7, 0xe47a9284, 0x41f1028a, 0x8fa1fe22, 0x2a2a6e2c, | |
| 5198 | + 0x1fc7d87f, 0xba4c4871, 0xb02e4edc, 0x15a5ded2, 0x20486881, | |
| 5199 | + 0x85c3f88f, 0x4b930427, 0xee189429, 0xdbf5227a, 0x7e7eb274, | |
| 5200 | + 0x9c25dd6b, 0x39ae4d65, 0x0c43fb36, 0xa9c86b38, 0x67989790, | |
| 5201 | + 0xc213079e, 0xf7feb1cd, 0x527521c3, 0xe83969b2, 0x4db2f9bc, | |
| 5202 | + 0x785f4fef, 0xddd4dfe1, 0x13842349, 0xb60fb347, 0x83e20514, | |
| 5203 | + 0x2669951a, 0xc432fa05, 0x61b96a0b, 0x5454dc58, 0xf1df4c56, | |
| 5204 | + 0x3f8fb0fe, 0x9a0420f0, 0xafe996a3, 0x0a6206ad, 0xbb2d9bf9, | |
| 5205 | + 0x1ea60bf7, 0x2b4bbda4, 0x8ec02daa, 0x4090d102, 0xe51b410c, | |
| 5206 | + 0xd0f6f75f, 0x757d6751, 0x9726084e, 0x32ad9840, 0x07402e13, | |
| 5207 | + 0xa2cbbe1d, 0x6c9b42b5, 0xc910d2bb, 0xfcfd64e8, 0x5976f4e6, | |
| 5208 | + 0xe33abc97, 0x46b12c99, 0x735c9aca, 0xd6d70ac4, 0x1887f66c, | |
| 5209 | + 0xbd0c6662, 0x88e1d031, 0x2d6a403f, 0xcf312f20, 0x6ababf2e, | |
| 5210 | + 0x5f57097d, 0xfadc9973, 0x348c65db, 0x9107f5d5, 0xa4ea4386, | |
| 5211 | + 0x0161d388, 0x0b03d525, 0xae88452b, 0x9b65f378, 0x3eee6376, | |
| 5212 | + 0xf0be9fde, 0x55350fd0, 0x60d8b983, 0xc553298d, 0x27084692, | |
| 5213 | + 0x8283d69c, 0xb76e60cf, 0x12e5f0c1, 0xdcb50c69, 0x793e9c67, | |
| 5214 | + 0x4cd32a34, 0xe958ba3a, 0x5314f24b, 0xf69f6245, 0xc372d416, | |
| 5215 | + 0x66f94418, 0xa8a9b8b0, 0x0d2228be, 0x38cf9eed, 0x9d440ee3, | |
| 5216 | + 0x7f1f61fc, 0xda94f1f2, 0xef7947a1, 0x4af2d7af, 0x84a22b07, | |
| 5217 | + 0x2129bb09, 0x14c40d5a, 0xb14f9d54, 0xad2a31b3, 0x08a1a1bd, | |
| 5218 | + 0x3d4c17ee, 0x98c787e0, 0x56977b48, 0xf31ceb46, 0xc6f15d15, | |
| 5219 | + 0x637acd1b, 0x8121a204, 0x24aa320a, 0x11478459, 0xb4cc1457, | |
| 5220 | + 0x7a9ce8ff, 0xdf1778f1, 0xeafacea2, 0x4f715eac, 0xf53d16dd, | |
| 5221 | + 0x50b686d3, 0x655b3080, 0xc0d0a08e, 0x0e805c26, 0xab0bcc28, | |
| 5222 | + 0x9ee67a7b, 0x3b6dea75, 0xd936856a, 0x7cbd1564, 0x4950a337, | |
| 5223 | + 0xecdb3339, 0x228bcf91, 0x87005f9f, 0xb2ede9cc, 0x176679c2, | |
| 5224 | + 0x1d047f6f, 0xb88fef61, 0x8d625932, 0x28e9c93c, 0xe6b93594, | |
| 5225 | + 0x4332a59a, 0x76df13c9, 0xd35483c7, 0x310fecd8, 0x94847cd6, | |
| 5226 | + 0xa169ca85, 0x04e25a8b, 0xcab2a623, 0x6f39362d, 0x5ad4807e, | |
| 5227 | + 0xff5f1070, 0x45135801, 0xe098c80f, 0xd5757e5c, 0x70feee52, | |
| 5228 | + 0xbeae12fa, 0x1b2582f4, 0x2ec834a7, 0x8b43a4a9, 0x6918cbb6, | |
| 5229 | + 0xcc935bb8, 0xf97eedeb, 0x5cf57de5, 0x92a5814d, 0x372e1143, | |
| 5230 | + 0x02c3a710, 0xa748371e, 0x1607aa4a, 0xb38c3a44, 0x86618c17, | |
| 5231 | + 0x23ea1c19, 0xedbae0b1, 0x483170bf, 0x7ddcc6ec, 0xd85756e2, | |
| 5232 | + 0x3a0c39fd, 0x9f87a9f3, 0xaa6a1fa0, 0x0fe18fae, 0xc1b17306, | |
| 5233 | + 0x643ae308, 0x51d7555b, 0xf45cc555, 0x4e108d24, 0xeb9b1d2a, | |
| 5234 | + 0xde76ab79, 0x7bfd3b77, 0xb5adc7df, 0x102657d1, 0x25cbe182, | |
| 5235 | + 0x8040718c, 0x621b1e93, 0xc7908e9d, 0xf27d38ce, 0x57f6a8c0, | |
| 5236 | + 0x99a65468, 0x3c2dc466, 0x09c07235, 0xac4be23b, 0xa629e496, | |
| 5237 | + 0x03a27498, 0x364fc2cb, 0x93c452c5, 0x5d94ae6d, 0xf81f3e63, | |
| 5238 | + 0xcdf28830, 0x6879183e, 0x8a227721, 0x2fa9e72f, 0x1a44517c, | |
| 5239 | + 0xbfcfc172, 0x719f3dda, 0xd414add4, 0xe1f91b87, 0x44728b89, | |
| 5240 | + 0xfe3ec3f8, 0x5bb553f6, 0x6e58e5a5, 0xcbd375ab, 0x05838903, | |
| 5241 | + 0xa008190d, 0x95e5af5e, 0x306e3f50, 0xd235504f, 0x77bec041, | |
| 5242 | + 0x42537612, 0xe7d8e61c, 0x29881ab4, 0x8c038aba, 0xb9ee3ce9, | |
| 5243 | + 0x1c65ace7}}; | |
| 5244 | + | |
| 5245 | +local const z_word_t FAR crc_braid_big_table[][256] = { | |
| 5246 | + {0x0000000000000000, 0x0e908ba500000000, 0x5d26669000000000, | |
| 5247 | + 0x53b6ed3500000000, 0xfb4abdfb00000000, 0xf5da365e00000000, | |
| 5248 | + 0xa66cdb6b00000000, 0xa8fc50ce00000000, 0xb7930b2c00000000, | |
| 5249 | + 0xb903808900000000, 0xeab56dbc00000000, 0xe425e61900000000, | |
| 5250 | + 0x4cd9b6d700000000, 0x42493d7200000000, 0x11ffd04700000000, | |
| 5251 | + 0x1f6f5be200000000, 0x6e27175800000000, 0x60b79cfd00000000, | |
| 5252 | + 0x330171c800000000, 0x3d91fa6d00000000, 0x956daaa300000000, | |
| 5253 | + 0x9bfd210600000000, 0xc84bcc3300000000, 0xc6db479600000000, | |
| 5254 | + 0xd9b41c7400000000, 0xd72497d100000000, 0x84927ae400000000, | |
| 5255 | + 0x8a02f14100000000, 0x22fea18f00000000, 0x2c6e2a2a00000000, | |
| 5256 | + 0x7fd8c71f00000000, 0x71484cba00000000, 0xdc4e2eb000000000, | |
| 5257 | + 0xd2dea51500000000, 0x8168482000000000, 0x8ff8c38500000000, | |
| 5258 | + 0x2704934b00000000, 0x299418ee00000000, 0x7a22f5db00000000, | |
| 5259 | + 0x74b27e7e00000000, 0x6bdd259c00000000, 0x654dae3900000000, | |
| 5260 | + 0x36fb430c00000000, 0x386bc8a900000000, 0x9097986700000000, | |
| 5261 | + 0x9e0713c200000000, 0xcdb1fef700000000, 0xc321755200000000, | |
| 5262 | + 0xb26939e800000000, 0xbcf9b24d00000000, 0xef4f5f7800000000, | |
| 5263 | + 0xe1dfd4dd00000000, 0x4923841300000000, 0x47b30fb600000000, | |
| 5264 | + 0x1405e28300000000, 0x1a95692600000000, 0x05fa32c400000000, | |
| 5265 | + 0x0b6ab96100000000, 0x58dc545400000000, 0x564cdff100000000, | |
| 5266 | + 0xfeb08f3f00000000, 0xf020049a00000000, 0xa396e9af00000000, | |
| 5267 | + 0xad06620a00000000, 0xf99b2dbb00000000, 0xf70ba61e00000000, | |
| 5268 | + 0xa4bd4b2b00000000, 0xaa2dc08e00000000, 0x02d1904000000000, | |
| 5269 | + 0x0c411be500000000, 0x5ff7f6d000000000, 0x51677d7500000000, | |
| 5270 | + 0x4e08269700000000, 0x4098ad3200000000, 0x132e400700000000, | |
| 5271 | + 0x1dbecba200000000, 0xb5429b6c00000000, 0xbbd210c900000000, | |
| 5272 | + 0xe864fdfc00000000, 0xe6f4765900000000, 0x97bc3ae300000000, | |
| 5273 | + 0x992cb14600000000, 0xca9a5c7300000000, 0xc40ad7d600000000, | |
| 5274 | + 0x6cf6871800000000, 0x62660cbd00000000, 0x31d0e18800000000, | |
| 5275 | + 0x3f406a2d00000000, 0x202f31cf00000000, 0x2ebfba6a00000000, | |
| 5276 | + 0x7d09575f00000000, 0x7399dcfa00000000, 0xdb658c3400000000, | |
| 5277 | + 0xd5f5079100000000, 0x8643eaa400000000, 0x88d3610100000000, | |
| 5278 | + 0x25d5030b00000000, 0x2b4588ae00000000, 0x78f3659b00000000, | |
| 5279 | + 0x7663ee3e00000000, 0xde9fbef000000000, 0xd00f355500000000, | |
| 5280 | + 0x83b9d86000000000, 0x8d2953c500000000, 0x9246082700000000, | |
| 5281 | + 0x9cd6838200000000, 0xcf606eb700000000, 0xc1f0e51200000000, | |
| 5282 | + 0x690cb5dc00000000, 0x679c3e7900000000, 0x342ad34c00000000, | |
| 5283 | + 0x3aba58e900000000, 0x4bf2145300000000, 0x45629ff600000000, | |
| 5284 | + 0x16d472c300000000, 0x1844f96600000000, 0xb0b8a9a800000000, | |
| 5285 | + 0xbe28220d00000000, 0xed9ecf3800000000, 0xe30e449d00000000, | |
| 5286 | + 0xfc611f7f00000000, 0xf2f194da00000000, 0xa14779ef00000000, | |
| 5287 | + 0xafd7f24a00000000, 0x072ba28400000000, 0x09bb292100000000, | |
| 5288 | + 0x5a0dc41400000000, 0x549d4fb100000000, 0xb3312aad00000000, | |
| 5289 | + 0xbda1a10800000000, 0xee174c3d00000000, 0xe087c79800000000, | |
| 5290 | + 0x487b975600000000, 0x46eb1cf300000000, 0x155df1c600000000, | |
| 5291 | + 0x1bcd7a6300000000, 0x04a2218100000000, 0x0a32aa2400000000, | |
| 5292 | + 0x5984471100000000, 0x5714ccb400000000, 0xffe89c7a00000000, | |
| 5293 | + 0xf17817df00000000, 0xa2cefaea00000000, 0xac5e714f00000000, | |
| 5294 | + 0xdd163df500000000, 0xd386b65000000000, 0x80305b6500000000, | |
| 5295 | + 0x8ea0d0c000000000, 0x265c800e00000000, 0x28cc0bab00000000, | |
| 5296 | + 0x7b7ae69e00000000, 0x75ea6d3b00000000, 0x6a8536d900000000, | |
| 5297 | + 0x6415bd7c00000000, 0x37a3504900000000, 0x3933dbec00000000, | |
| 5298 | + 0x91cf8b2200000000, 0x9f5f008700000000, 0xcce9edb200000000, | |
| 5299 | + 0xc279661700000000, 0x6f7f041d00000000, 0x61ef8fb800000000, | |
| 5300 | + 0x3259628d00000000, 0x3cc9e92800000000, 0x9435b9e600000000, | |
| 5301 | + 0x9aa5324300000000, 0xc913df7600000000, 0xc78354d300000000, | |
| 5302 | + 0xd8ec0f3100000000, 0xd67c849400000000, 0x85ca69a100000000, | |
| 5303 | + 0x8b5ae20400000000, 0x23a6b2ca00000000, 0x2d36396f00000000, | |
| 5304 | + 0x7e80d45a00000000, 0x70105fff00000000, 0x0158134500000000, | |
| 5305 | + 0x0fc898e000000000, 0x5c7e75d500000000, 0x52eefe7000000000, | |
| 5306 | + 0xfa12aebe00000000, 0xf482251b00000000, 0xa734c82e00000000, | |
| 5307 | + 0xa9a4438b00000000, 0xb6cb186900000000, 0xb85b93cc00000000, | |
| 5308 | + 0xebed7ef900000000, 0xe57df55c00000000, 0x4d81a59200000000, | |
| 5309 | + 0x43112e3700000000, 0x10a7c30200000000, 0x1e3748a700000000, | |
| 5310 | + 0x4aaa071600000000, 0x443a8cb300000000, 0x178c618600000000, | |
| 5311 | + 0x191cea2300000000, 0xb1e0baed00000000, 0xbf70314800000000, | |
| 5312 | + 0xecc6dc7d00000000, 0xe25657d800000000, 0xfd390c3a00000000, | |
| 5313 | + 0xf3a9879f00000000, 0xa01f6aaa00000000, 0xae8fe10f00000000, | |
| 5314 | + 0x0673b1c100000000, 0x08e33a6400000000, 0x5b55d75100000000, | |
| 5315 | + 0x55c55cf400000000, 0x248d104e00000000, 0x2a1d9beb00000000, | |
| 5316 | + 0x79ab76de00000000, 0x773bfd7b00000000, 0xdfc7adb500000000, | |
| 5317 | + 0xd157261000000000, 0x82e1cb2500000000, 0x8c71408000000000, | |
| 5318 | + 0x931e1b6200000000, 0x9d8e90c700000000, 0xce387df200000000, | |
| 5319 | + 0xc0a8f65700000000, 0x6854a69900000000, 0x66c42d3c00000000, | |
| 5320 | + 0x3572c00900000000, 0x3be24bac00000000, 0x96e429a600000000, | |
| 5321 | + 0x9874a20300000000, 0xcbc24f3600000000, 0xc552c49300000000, | |
| 5322 | + 0x6dae945d00000000, 0x633e1ff800000000, 0x3088f2cd00000000, | |
| 5323 | + 0x3e18796800000000, 0x2177228a00000000, 0x2fe7a92f00000000, | |
| 5324 | + 0x7c51441a00000000, 0x72c1cfbf00000000, 0xda3d9f7100000000, | |
| 5325 | + 0xd4ad14d400000000, 0x871bf9e100000000, 0x898b724400000000, | |
| 5326 | + 0xf8c33efe00000000, 0xf653b55b00000000, 0xa5e5586e00000000, | |
| 5327 | + 0xab75d3cb00000000, 0x0389830500000000, 0x0d1908a000000000, | |
| 5328 | + 0x5eafe59500000000, 0x503f6e3000000000, 0x4f5035d200000000, | |
| 5329 | + 0x41c0be7700000000, 0x1276534200000000, 0x1ce6d8e700000000, | |
| 5330 | + 0xb41a882900000000, 0xba8a038c00000000, 0xe93ceeb900000000, | |
| 5331 | + 0xe7ac651c00000000}, | |
| 5332 | + {0x0000000000000000, 0x97a61de700000000, 0x6f4b4a1500000000, | |
| 5333 | + 0xf8ed57f200000000, 0xde96942a00000000, 0x493089cd00000000, | |
| 5334 | + 0xb1ddde3f00000000, 0x267bc3d800000000, 0xbc2d295500000000, | |
| 5335 | + 0x2b8b34b200000000, 0xd366634000000000, 0x44c07ea700000000, | |
| 5336 | + 0x62bbbd7f00000000, 0xf51da09800000000, 0x0df0f76a00000000, | |
| 5337 | + 0x9a56ea8d00000000, 0x785b52aa00000000, 0xeffd4f4d00000000, | |
| 5338 | + 0x171018bf00000000, 0x80b6055800000000, 0xa6cdc68000000000, | |
| 5339 | + 0x316bdb6700000000, 0xc9868c9500000000, 0x5e20917200000000, | |
| 5340 | + 0xc4767bff00000000, 0x53d0661800000000, 0xab3d31ea00000000, | |
| 5341 | + 0x3c9b2c0d00000000, 0x1ae0efd500000000, 0x8d46f23200000000, | |
| 5342 | + 0x75aba5c000000000, 0xe20db82700000000, 0xb1b0d58f00000000, | |
| 5343 | + 0x2616c86800000000, 0xdefb9f9a00000000, 0x495d827d00000000, | |
| 5344 | + 0x6f2641a500000000, 0xf8805c4200000000, 0x006d0bb000000000, | |
| 5345 | + 0x97cb165700000000, 0x0d9dfcda00000000, 0x9a3be13d00000000, | |
| 5346 | + 0x62d6b6cf00000000, 0xf570ab2800000000, 0xd30b68f000000000, | |
| 5347 | + 0x44ad751700000000, 0xbc4022e500000000, 0x2be63f0200000000, | |
| 5348 | + 0xc9eb872500000000, 0x5e4d9ac200000000, 0xa6a0cd3000000000, | |
| 5349 | + 0x3106d0d700000000, 0x177d130f00000000, 0x80db0ee800000000, | |
| 5350 | + 0x7836591a00000000, 0xef9044fd00000000, 0x75c6ae7000000000, | |
| 5351 | + 0xe260b39700000000, 0x1a8de46500000000, 0x8d2bf98200000000, | |
| 5352 | + 0xab503a5a00000000, 0x3cf627bd00000000, 0xc41b704f00000000, | |
| 5353 | + 0x53bd6da800000000, 0x2367dac400000000, 0xb4c1c72300000000, | |
| 5354 | + 0x4c2c90d100000000, 0xdb8a8d3600000000, 0xfdf14eee00000000, | |
| 5355 | + 0x6a57530900000000, 0x92ba04fb00000000, 0x051c191c00000000, | |
| 5356 | + 0x9f4af39100000000, 0x08ecee7600000000, 0xf001b98400000000, | |
| 5357 | + 0x67a7a46300000000, 0x41dc67bb00000000, 0xd67a7a5c00000000, | |
| 5358 | + 0x2e972dae00000000, 0xb931304900000000, 0x5b3c886e00000000, | |
| 5359 | + 0xcc9a958900000000, 0x3477c27b00000000, 0xa3d1df9c00000000, | |
| 5360 | + 0x85aa1c4400000000, 0x120c01a300000000, 0xeae1565100000000, | |
| 5361 | + 0x7d474bb600000000, 0xe711a13b00000000, 0x70b7bcdc00000000, | |
| 5362 | + 0x885aeb2e00000000, 0x1ffcf6c900000000, 0x3987351100000000, | |
| 5363 | + 0xae2128f600000000, 0x56cc7f0400000000, 0xc16a62e300000000, | |
| 5364 | + 0x92d70f4b00000000, 0x057112ac00000000, 0xfd9c455e00000000, | |
| 5365 | + 0x6a3a58b900000000, 0x4c419b6100000000, 0xdbe7868600000000, | |
| 5366 | + 0x230ad17400000000, 0xb4accc9300000000, 0x2efa261e00000000, | |
| 5367 | + 0xb95c3bf900000000, 0x41b16c0b00000000, 0xd61771ec00000000, | |
| 5368 | + 0xf06cb23400000000, 0x67caafd300000000, 0x9f27f82100000000, | |
| 5369 | + 0x0881e5c600000000, 0xea8c5de100000000, 0x7d2a400600000000, | |
| 5370 | + 0x85c717f400000000, 0x12610a1300000000, 0x341ac9cb00000000, | |
| 5371 | + 0xa3bcd42c00000000, 0x5b5183de00000000, 0xccf79e3900000000, | |
| 5372 | + 0x56a174b400000000, 0xc107695300000000, 0x39ea3ea100000000, | |
| 5373 | + 0xae4c234600000000, 0x8837e09e00000000, 0x1f91fd7900000000, | |
| 5374 | + 0xe77caa8b00000000, 0x70dab76c00000000, 0x07c8c55200000000, | |
| 5375 | + 0x906ed8b500000000, 0x68838f4700000000, 0xff2592a000000000, | |
| 5376 | + 0xd95e517800000000, 0x4ef84c9f00000000, 0xb6151b6d00000000, | |
| 5377 | + 0x21b3068a00000000, 0xbbe5ec0700000000, 0x2c43f1e000000000, | |
| 5378 | + 0xd4aea61200000000, 0x4308bbf500000000, 0x6573782d00000000, | |
| 5379 | + 0xf2d565ca00000000, 0x0a38323800000000, 0x9d9e2fdf00000000, | |
| 5380 | + 0x7f9397f800000000, 0xe8358a1f00000000, 0x10d8dded00000000, | |
| 5381 | + 0x877ec00a00000000, 0xa10503d200000000, 0x36a31e3500000000, | |
| 5382 | + 0xce4e49c700000000, 0x59e8542000000000, 0xc3bebead00000000, | |
| 5383 | + 0x5418a34a00000000, 0xacf5f4b800000000, 0x3b53e95f00000000, | |
| 5384 | + 0x1d282a8700000000, 0x8a8e376000000000, 0x7263609200000000, | |
| 5385 | + 0xe5c57d7500000000, 0xb67810dd00000000, 0x21de0d3a00000000, | |
| 5386 | + 0xd9335ac800000000, 0x4e95472f00000000, 0x68ee84f700000000, | |
| 5387 | + 0xff48991000000000, 0x07a5cee200000000, 0x9003d30500000000, | |
| 5388 | + 0x0a55398800000000, 0x9df3246f00000000, 0x651e739d00000000, | |
| 5389 | + 0xf2b86e7a00000000, 0xd4c3ada200000000, 0x4365b04500000000, | |
| 5390 | + 0xbb88e7b700000000, 0x2c2efa5000000000, 0xce23427700000000, | |
| 5391 | + 0x59855f9000000000, 0xa168086200000000, 0x36ce158500000000, | |
| 5392 | + 0x10b5d65d00000000, 0x8713cbba00000000, 0x7ffe9c4800000000, | |
| 5393 | + 0xe85881af00000000, 0x720e6b2200000000, 0xe5a876c500000000, | |
| 5394 | + 0x1d45213700000000, 0x8ae33cd000000000, 0xac98ff0800000000, | |
| 5395 | + 0x3b3ee2ef00000000, 0xc3d3b51d00000000, 0x5475a8fa00000000, | |
| 5396 | + 0x24af1f9600000000, 0xb309027100000000, 0x4be4558300000000, | |
| 5397 | + 0xdc42486400000000, 0xfa398bbc00000000, 0x6d9f965b00000000, | |
| 5398 | + 0x9572c1a900000000, 0x02d4dc4e00000000, 0x988236c300000000, | |
| 5399 | + 0x0f242b2400000000, 0xf7c97cd600000000, 0x606f613100000000, | |
| 5400 | + 0x4614a2e900000000, 0xd1b2bf0e00000000, 0x295fe8fc00000000, | |
| 5401 | + 0xbef9f51b00000000, 0x5cf44d3c00000000, 0xcb5250db00000000, | |
| 5402 | + 0x33bf072900000000, 0xa4191ace00000000, 0x8262d91600000000, | |
| 5403 | + 0x15c4c4f100000000, 0xed29930300000000, 0x7a8f8ee400000000, | |
| 5404 | + 0xe0d9646900000000, 0x777f798e00000000, 0x8f922e7c00000000, | |
| 5405 | + 0x1834339b00000000, 0x3e4ff04300000000, 0xa9e9eda400000000, | |
| 5406 | + 0x5104ba5600000000, 0xc6a2a7b100000000, 0x951fca1900000000, | |
| 5407 | + 0x02b9d7fe00000000, 0xfa54800c00000000, 0x6df29deb00000000, | |
| 5408 | + 0x4b895e3300000000, 0xdc2f43d400000000, 0x24c2142600000000, | |
| 5409 | + 0xb36409c100000000, 0x2932e34c00000000, 0xbe94feab00000000, | |
| 5410 | + 0x4679a95900000000, 0xd1dfb4be00000000, 0xf7a4776600000000, | |
| 5411 | + 0x60026a8100000000, 0x98ef3d7300000000, 0x0f49209400000000, | |
| 5412 | + 0xed4498b300000000, 0x7ae2855400000000, 0x820fd2a600000000, | |
| 5413 | + 0x15a9cf4100000000, 0x33d20c9900000000, 0xa474117e00000000, | |
| 5414 | + 0x5c99468c00000000, 0xcb3f5b6b00000000, 0x5169b1e600000000, | |
| 5415 | + 0xc6cfac0100000000, 0x3e22fbf300000000, 0xa984e61400000000, | |
| 5416 | + 0x8fff25cc00000000, 0x1859382b00000000, 0xe0b46fd900000000, | |
| 5417 | + 0x7712723e00000000}, | |
| 5418 | + {0x0000000000000000, 0x411b8c6e00000000, 0x823618dd00000000, | |
| 5419 | + 0xc32d94b300000000, 0x456b416100000000, 0x0470cd0f00000000, | |
| 5420 | + 0xc75d59bc00000000, 0x8646d5d200000000, 0x8ad682c200000000, | |
| 5421 | + 0xcbcd0eac00000000, 0x08e09a1f00000000, 0x49fb167100000000, | |
| 5422 | + 0xcfbdc3a300000000, 0x8ea64fcd00000000, 0x4d8bdb7e00000000, | |
| 5423 | + 0x0c90571000000000, 0x55ab745e00000000, 0x14b0f83000000000, | |
| 5424 | + 0xd79d6c8300000000, 0x9686e0ed00000000, 0x10c0353f00000000, | |
| 5425 | + 0x51dbb95100000000, 0x92f62de200000000, 0xd3eda18c00000000, | |
| 5426 | + 0xdf7df69c00000000, 0x9e667af200000000, 0x5d4bee4100000000, | |
| 5427 | + 0x1c50622f00000000, 0x9a16b7fd00000000, 0xdb0d3b9300000000, | |
| 5428 | + 0x1820af2000000000, 0x593b234e00000000, 0xaa56e9bc00000000, | |
| 5429 | + 0xeb4d65d200000000, 0x2860f16100000000, 0x697b7d0f00000000, | |
| 5430 | + 0xef3da8dd00000000, 0xae2624b300000000, 0x6d0bb00000000000, | |
| 5431 | + 0x2c103c6e00000000, 0x20806b7e00000000, 0x619be71000000000, | |
| 5432 | + 0xa2b673a300000000, 0xe3adffcd00000000, 0x65eb2a1f00000000, | |
| 5433 | + 0x24f0a67100000000, 0xe7dd32c200000000, 0xa6c6beac00000000, | |
| 5434 | + 0xfffd9de200000000, 0xbee6118c00000000, 0x7dcb853f00000000, | |
| 5435 | + 0x3cd0095100000000, 0xba96dc8300000000, 0xfb8d50ed00000000, | |
| 5436 | + 0x38a0c45e00000000, 0x79bb483000000000, 0x752b1f2000000000, | |
| 5437 | + 0x3430934e00000000, 0xf71d07fd00000000, 0xb6068b9300000000, | |
| 5438 | + 0x30405e4100000000, 0x715bd22f00000000, 0xb276469c00000000, | |
| 5439 | + 0xf36dcaf200000000, 0x15aba3a200000000, 0x54b02fcc00000000, | |
| 5440 | + 0x979dbb7f00000000, 0xd686371100000000, 0x50c0e2c300000000, | |
| 5441 | + 0x11db6ead00000000, 0xd2f6fa1e00000000, 0x93ed767000000000, | |
| 5442 | + 0x9f7d216000000000, 0xde66ad0e00000000, 0x1d4b39bd00000000, | |
| 5443 | + 0x5c50b5d300000000, 0xda16600100000000, 0x9b0dec6f00000000, | |
| 5444 | + 0x582078dc00000000, 0x193bf4b200000000, 0x4000d7fc00000000, | |
| 5445 | + 0x011b5b9200000000, 0xc236cf2100000000, 0x832d434f00000000, | |
| 5446 | + 0x056b969d00000000, 0x44701af300000000, 0x875d8e4000000000, | |
| 5447 | + 0xc646022e00000000, 0xcad6553e00000000, 0x8bcdd95000000000, | |
| 5448 | + 0x48e04de300000000, 0x09fbc18d00000000, 0x8fbd145f00000000, | |
| 5449 | + 0xcea6983100000000, 0x0d8b0c8200000000, 0x4c9080ec00000000, | |
| 5450 | + 0xbffd4a1e00000000, 0xfee6c67000000000, 0x3dcb52c300000000, | |
| 5451 | + 0x7cd0dead00000000, 0xfa960b7f00000000, 0xbb8d871100000000, | |
| 5452 | + 0x78a013a200000000, 0x39bb9fcc00000000, 0x352bc8dc00000000, | |
| 5453 | + 0x743044b200000000, 0xb71dd00100000000, 0xf6065c6f00000000, | |
| 5454 | + 0x704089bd00000000, 0x315b05d300000000, 0xf276916000000000, | |
| 5455 | + 0xb36d1d0e00000000, 0xea563e4000000000, 0xab4db22e00000000, | |
| 5456 | + 0x6860269d00000000, 0x297baaf300000000, 0xaf3d7f2100000000, | |
| 5457 | + 0xee26f34f00000000, 0x2d0b67fc00000000, 0x6c10eb9200000000, | |
| 5458 | + 0x6080bc8200000000, 0x219b30ec00000000, 0xe2b6a45f00000000, | |
| 5459 | + 0xa3ad283100000000, 0x25ebfde300000000, 0x64f0718d00000000, | |
| 5460 | + 0xa7dde53e00000000, 0xe6c6695000000000, 0x6b50369e00000000, | |
| 5461 | + 0x2a4bbaf000000000, 0xe9662e4300000000, 0xa87da22d00000000, | |
| 5462 | + 0x2e3b77ff00000000, 0x6f20fb9100000000, 0xac0d6f2200000000, | |
| 5463 | + 0xed16e34c00000000, 0xe186b45c00000000, 0xa09d383200000000, | |
| 5464 | + 0x63b0ac8100000000, 0x22ab20ef00000000, 0xa4edf53d00000000, | |
| 5465 | + 0xe5f6795300000000, 0x26dbede000000000, 0x67c0618e00000000, | |
| 5466 | + 0x3efb42c000000000, 0x7fe0ceae00000000, 0xbccd5a1d00000000, | |
| 5467 | + 0xfdd6d67300000000, 0x7b9003a100000000, 0x3a8b8fcf00000000, | |
| 5468 | + 0xf9a61b7c00000000, 0xb8bd971200000000, 0xb42dc00200000000, | |
| 5469 | + 0xf5364c6c00000000, 0x361bd8df00000000, 0x770054b100000000, | |
| 5470 | + 0xf146816300000000, 0xb05d0d0d00000000, 0x737099be00000000, | |
| 5471 | + 0x326b15d000000000, 0xc106df2200000000, 0x801d534c00000000, | |
| 5472 | + 0x4330c7ff00000000, 0x022b4b9100000000, 0x846d9e4300000000, | |
| 5473 | + 0xc576122d00000000, 0x065b869e00000000, 0x47400af000000000, | |
| 5474 | + 0x4bd05de000000000, 0x0acbd18e00000000, 0xc9e6453d00000000, | |
| 5475 | + 0x88fdc95300000000, 0x0ebb1c8100000000, 0x4fa090ef00000000, | |
| 5476 | + 0x8c8d045c00000000, 0xcd96883200000000, 0x94adab7c00000000, | |
| 5477 | + 0xd5b6271200000000, 0x169bb3a100000000, 0x57803fcf00000000, | |
| 5478 | + 0xd1c6ea1d00000000, 0x90dd667300000000, 0x53f0f2c000000000, | |
| 5479 | + 0x12eb7eae00000000, 0x1e7b29be00000000, 0x5f60a5d000000000, | |
| 5480 | + 0x9c4d316300000000, 0xdd56bd0d00000000, 0x5b1068df00000000, | |
| 5481 | + 0x1a0be4b100000000, 0xd926700200000000, 0x983dfc6c00000000, | |
| 5482 | + 0x7efb953c00000000, 0x3fe0195200000000, 0xfccd8de100000000, | |
| 5483 | + 0xbdd6018f00000000, 0x3b90d45d00000000, 0x7a8b583300000000, | |
| 5484 | + 0xb9a6cc8000000000, 0xf8bd40ee00000000, 0xf42d17fe00000000, | |
| 5485 | + 0xb5369b9000000000, 0x761b0f2300000000, 0x3700834d00000000, | |
| 5486 | + 0xb146569f00000000, 0xf05ddaf100000000, 0x33704e4200000000, | |
| 5487 | + 0x726bc22c00000000, 0x2b50e16200000000, 0x6a4b6d0c00000000, | |
| 5488 | + 0xa966f9bf00000000, 0xe87d75d100000000, 0x6e3ba00300000000, | |
| 5489 | + 0x2f202c6d00000000, 0xec0db8de00000000, 0xad1634b000000000, | |
| 5490 | + 0xa18663a000000000, 0xe09defce00000000, 0x23b07b7d00000000, | |
| 5491 | + 0x62abf71300000000, 0xe4ed22c100000000, 0xa5f6aeaf00000000, | |
| 5492 | + 0x66db3a1c00000000, 0x27c0b67200000000, 0xd4ad7c8000000000, | |
| 5493 | + 0x95b6f0ee00000000, 0x569b645d00000000, 0x1780e83300000000, | |
| 5494 | + 0x91c63de100000000, 0xd0ddb18f00000000, 0x13f0253c00000000, | |
| 5495 | + 0x52eba95200000000, 0x5e7bfe4200000000, 0x1f60722c00000000, | |
| 5496 | + 0xdc4de69f00000000, 0x9d566af100000000, 0x1b10bf2300000000, | |
| 5497 | + 0x5a0b334d00000000, 0x9926a7fe00000000, 0xd83d2b9000000000, | |
| 5498 | + 0x810608de00000000, 0xc01d84b000000000, 0x0330100300000000, | |
| 5499 | + 0x422b9c6d00000000, 0xc46d49bf00000000, 0x8576c5d100000000, | |
| 5500 | + 0x465b516200000000, 0x0740dd0c00000000, 0x0bd08a1c00000000, | |
| 5501 | + 0x4acb067200000000, 0x89e692c100000000, 0xc8fd1eaf00000000, | |
| 5502 | + 0x4ebbcb7d00000000, 0x0fa0471300000000, 0xcc8dd3a000000000, | |
| 5503 | + 0x8d965fce00000000}, | |
| 5504 | + {0x0000000000000000, 0x1dfdb50100000000, 0x3afa6b0300000000, | |
| 5505 | + 0x2707de0200000000, 0x74f4d70600000000, 0x6909620700000000, | |
| 5506 | + 0x4e0ebc0500000000, 0x53f3090400000000, 0xe8e8af0d00000000, | |
| 5507 | + 0xf5151a0c00000000, 0xd212c40e00000000, 0xcfef710f00000000, | |
| 5508 | + 0x9c1c780b00000000, 0x81e1cd0a00000000, 0xa6e6130800000000, | |
| 5509 | + 0xbb1ba60900000000, 0xd0d15f1b00000000, 0xcd2cea1a00000000, | |
| 5510 | + 0xea2b341800000000, 0xf7d6811900000000, 0xa425881d00000000, | |
| 5511 | + 0xb9d83d1c00000000, 0x9edfe31e00000000, 0x8322561f00000000, | |
| 5512 | + 0x3839f01600000000, 0x25c4451700000000, 0x02c39b1500000000, | |
| 5513 | + 0x1f3e2e1400000000, 0x4ccd271000000000, 0x5130921100000000, | |
| 5514 | + 0x76374c1300000000, 0x6bcaf91200000000, 0xa0a3bf3600000000, | |
| 5515 | + 0xbd5e0a3700000000, 0x9a59d43500000000, 0x87a4613400000000, | |
| 5516 | + 0xd457683000000000, 0xc9aadd3100000000, 0xeead033300000000, | |
| 5517 | + 0xf350b63200000000, 0x484b103b00000000, 0x55b6a53a00000000, | |
| 5518 | + 0x72b17b3800000000, 0x6f4cce3900000000, 0x3cbfc73d00000000, | |
| 5519 | + 0x2142723c00000000, 0x0645ac3e00000000, 0x1bb8193f00000000, | |
| 5520 | + 0x7072e02d00000000, 0x6d8f552c00000000, 0x4a888b2e00000000, | |
| 5521 | + 0x57753e2f00000000, 0x0486372b00000000, 0x197b822a00000000, | |
| 5522 | + 0x3e7c5c2800000000, 0x2381e92900000000, 0x989a4f2000000000, | |
| 5523 | + 0x8567fa2100000000, 0xa260242300000000, 0xbf9d912200000000, | |
| 5524 | + 0xec6e982600000000, 0xf1932d2700000000, 0xd694f32500000000, | |
| 5525 | + 0xcb69462400000000, 0x40477f6d00000000, 0x5dbaca6c00000000, | |
| 5526 | + 0x7abd146e00000000, 0x6740a16f00000000, 0x34b3a86b00000000, | |
| 5527 | + 0x294e1d6a00000000, 0x0e49c36800000000, 0x13b4766900000000, | |
| 5528 | + 0xa8afd06000000000, 0xb552656100000000, 0x9255bb6300000000, | |
| 5529 | + 0x8fa80e6200000000, 0xdc5b076600000000, 0xc1a6b26700000000, | |
| 5530 | + 0xe6a16c6500000000, 0xfb5cd96400000000, 0x9096207600000000, | |
| 5531 | + 0x8d6b957700000000, 0xaa6c4b7500000000, 0xb791fe7400000000, | |
| 5532 | + 0xe462f77000000000, 0xf99f427100000000, 0xde989c7300000000, | |
| 5533 | + 0xc365297200000000, 0x787e8f7b00000000, 0x65833a7a00000000, | |
| 5534 | + 0x4284e47800000000, 0x5f79517900000000, 0x0c8a587d00000000, | |
| 5535 | + 0x1177ed7c00000000, 0x3670337e00000000, 0x2b8d867f00000000, | |
| 5536 | + 0xe0e4c05b00000000, 0xfd19755a00000000, 0xda1eab5800000000, | |
| 5537 | + 0xc7e31e5900000000, 0x9410175d00000000, 0x89eda25c00000000, | |
| 5538 | + 0xaeea7c5e00000000, 0xb317c95f00000000, 0x080c6f5600000000, | |
| 5539 | + 0x15f1da5700000000, 0x32f6045500000000, 0x2f0bb15400000000, | |
| 5540 | + 0x7cf8b85000000000, 0x61050d5100000000, 0x4602d35300000000, | |
| 5541 | + 0x5bff665200000000, 0x30359f4000000000, 0x2dc82a4100000000, | |
| 5542 | + 0x0acff44300000000, 0x1732414200000000, 0x44c1484600000000, | |
| 5543 | + 0x593cfd4700000000, 0x7e3b234500000000, 0x63c6964400000000, | |
| 5544 | + 0xd8dd304d00000000, 0xc520854c00000000, 0xe2275b4e00000000, | |
| 5545 | + 0xffdaee4f00000000, 0xac29e74b00000000, 0xb1d4524a00000000, | |
| 5546 | + 0x96d38c4800000000, 0x8b2e394900000000, 0x808efeda00000000, | |
| 5547 | + 0x9d734bdb00000000, 0xba7495d900000000, 0xa78920d800000000, | |
| 5548 | + 0xf47a29dc00000000, 0xe9879cdd00000000, 0xce8042df00000000, | |
| 5549 | + 0xd37df7de00000000, 0x686651d700000000, 0x759be4d600000000, | |
| 5550 | + 0x529c3ad400000000, 0x4f618fd500000000, 0x1c9286d100000000, | |
| 5551 | + 0x016f33d000000000, 0x2668edd200000000, 0x3b9558d300000000, | |
| 5552 | + 0x505fa1c100000000, 0x4da214c000000000, 0x6aa5cac200000000, | |
| 5553 | + 0x77587fc300000000, 0x24ab76c700000000, 0x3956c3c600000000, | |
| 5554 | + 0x1e511dc400000000, 0x03aca8c500000000, 0xb8b70ecc00000000, | |
| 5555 | + 0xa54abbcd00000000, 0x824d65cf00000000, 0x9fb0d0ce00000000, | |
| 5556 | + 0xcc43d9ca00000000, 0xd1be6ccb00000000, 0xf6b9b2c900000000, | |
| 5557 | + 0xeb4407c800000000, 0x202d41ec00000000, 0x3dd0f4ed00000000, | |
| 5558 | + 0x1ad72aef00000000, 0x072a9fee00000000, 0x54d996ea00000000, | |
| 5559 | + 0x492423eb00000000, 0x6e23fde900000000, 0x73de48e800000000, | |
| 5560 | + 0xc8c5eee100000000, 0xd5385be000000000, 0xf23f85e200000000, | |
| 5561 | + 0xefc230e300000000, 0xbc3139e700000000, 0xa1cc8ce600000000, | |
| 5562 | + 0x86cb52e400000000, 0x9b36e7e500000000, 0xf0fc1ef700000000, | |
| 5563 | + 0xed01abf600000000, 0xca0675f400000000, 0xd7fbc0f500000000, | |
| 5564 | + 0x8408c9f100000000, 0x99f57cf000000000, 0xbef2a2f200000000, | |
| 5565 | + 0xa30f17f300000000, 0x1814b1fa00000000, 0x05e904fb00000000, | |
| 5566 | + 0x22eedaf900000000, 0x3f136ff800000000, 0x6ce066fc00000000, | |
| 5567 | + 0x711dd3fd00000000, 0x561a0dff00000000, 0x4be7b8fe00000000, | |
| 5568 | + 0xc0c981b700000000, 0xdd3434b600000000, 0xfa33eab400000000, | |
| 5569 | + 0xe7ce5fb500000000, 0xb43d56b100000000, 0xa9c0e3b000000000, | |
| 5570 | + 0x8ec73db200000000, 0x933a88b300000000, 0x28212eba00000000, | |
| 5571 | + 0x35dc9bbb00000000, 0x12db45b900000000, 0x0f26f0b800000000, | |
| 5572 | + 0x5cd5f9bc00000000, 0x41284cbd00000000, 0x662f92bf00000000, | |
| 5573 | + 0x7bd227be00000000, 0x1018deac00000000, 0x0de56bad00000000, | |
| 5574 | + 0x2ae2b5af00000000, 0x371f00ae00000000, 0x64ec09aa00000000, | |
| 5575 | + 0x7911bcab00000000, 0x5e1662a900000000, 0x43ebd7a800000000, | |
| 5576 | + 0xf8f071a100000000, 0xe50dc4a000000000, 0xc20a1aa200000000, | |
| 5577 | + 0xdff7afa300000000, 0x8c04a6a700000000, 0x91f913a600000000, | |
| 5578 | + 0xb6fecda400000000, 0xab0378a500000000, 0x606a3e8100000000, | |
| 5579 | + 0x7d978b8000000000, 0x5a90558200000000, 0x476de08300000000, | |
| 5580 | + 0x149ee98700000000, 0x09635c8600000000, 0x2e64828400000000, | |
| 5581 | + 0x3399378500000000, 0x8882918c00000000, 0x957f248d00000000, | |
| 5582 | + 0xb278fa8f00000000, 0xaf854f8e00000000, 0xfc76468a00000000, | |
| 5583 | + 0xe18bf38b00000000, 0xc68c2d8900000000, 0xdb71988800000000, | |
| 5584 | + 0xb0bb619a00000000, 0xad46d49b00000000, 0x8a410a9900000000, | |
| 5585 | + 0x97bcbf9800000000, 0xc44fb69c00000000, 0xd9b2039d00000000, | |
| 5586 | + 0xfeb5dd9f00000000, 0xe348689e00000000, 0x5853ce9700000000, | |
| 5587 | + 0x45ae7b9600000000, 0x62a9a59400000000, 0x7f54109500000000, | |
| 5588 | + 0x2ca7199100000000, 0x315aac9000000000, 0x165d729200000000, | |
| 5589 | + 0x0ba0c79300000000}, | |
| 5590 | + {0x0000000000000000, 0x24d9076300000000, 0x48b20fc600000000, | |
| 5591 | + 0x6c6b08a500000000, 0xd1626e5700000000, 0xf5bb693400000000, | |
| 5592 | + 0x99d0619100000000, 0xbd0966f200000000, 0xa2c5dcae00000000, | |
| 5593 | + 0x861cdbcd00000000, 0xea77d36800000000, 0xceaed40b00000000, | |
| 5594 | + 0x73a7b2f900000000, 0x577eb59a00000000, 0x3b15bd3f00000000, | |
| 5595 | + 0x1fccba5c00000000, 0x058dc88600000000, 0x2154cfe500000000, | |
| 5596 | + 0x4d3fc74000000000, 0x69e6c02300000000, 0xd4efa6d100000000, | |
| 5597 | + 0xf036a1b200000000, 0x9c5da91700000000, 0xb884ae7400000000, | |
| 5598 | + 0xa748142800000000, 0x8391134b00000000, 0xeffa1bee00000000, | |
| 5599 | + 0xcb231c8d00000000, 0x762a7a7f00000000, 0x52f37d1c00000000, | |
| 5600 | + 0x3e9875b900000000, 0x1a4172da00000000, 0x4b1ce0d600000000, | |
| 5601 | + 0x6fc5e7b500000000, 0x03aeef1000000000, 0x2777e87300000000, | |
| 5602 | + 0x9a7e8e8100000000, 0xbea789e200000000, 0xd2cc814700000000, | |
| 5603 | + 0xf615862400000000, 0xe9d93c7800000000, 0xcd003b1b00000000, | |
| 5604 | + 0xa16b33be00000000, 0x85b234dd00000000, 0x38bb522f00000000, | |
| 5605 | + 0x1c62554c00000000, 0x70095de900000000, 0x54d05a8a00000000, | |
| 5606 | + 0x4e91285000000000, 0x6a482f3300000000, 0x0623279600000000, | |
| 5607 | + 0x22fa20f500000000, 0x9ff3460700000000, 0xbb2a416400000000, | |
| 5608 | + 0xd74149c100000000, 0xf3984ea200000000, 0xec54f4fe00000000, | |
| 5609 | + 0xc88df39d00000000, 0xa4e6fb3800000000, 0x803ffc5b00000000, | |
| 5610 | + 0x3d369aa900000000, 0x19ef9dca00000000, 0x7584956f00000000, | |
| 5611 | + 0x515d920c00000000, 0xd73eb17600000000, 0xf3e7b61500000000, | |
| 5612 | + 0x9f8cbeb000000000, 0xbb55b9d300000000, 0x065cdf2100000000, | |
| 5613 | + 0x2285d84200000000, 0x4eeed0e700000000, 0x6a37d78400000000, | |
| 5614 | + 0x75fb6dd800000000, 0x51226abb00000000, 0x3d49621e00000000, | |
| 5615 | + 0x1990657d00000000, 0xa499038f00000000, 0x804004ec00000000, | |
| 5616 | + 0xec2b0c4900000000, 0xc8f20b2a00000000, 0xd2b379f000000000, | |
| 5617 | + 0xf66a7e9300000000, 0x9a01763600000000, 0xbed8715500000000, | |
| 5618 | + 0x03d117a700000000, 0x270810c400000000, 0x4b63186100000000, | |
| 5619 | + 0x6fba1f0200000000, 0x7076a55e00000000, 0x54afa23d00000000, | |
| 5620 | + 0x38c4aa9800000000, 0x1c1dadfb00000000, 0xa114cb0900000000, | |
| 5621 | + 0x85cdcc6a00000000, 0xe9a6c4cf00000000, 0xcd7fc3ac00000000, | |
| 5622 | + 0x9c2251a000000000, 0xb8fb56c300000000, 0xd4905e6600000000, | |
| 5623 | + 0xf049590500000000, 0x4d403ff700000000, 0x6999389400000000, | |
| 5624 | + 0x05f2303100000000, 0x212b375200000000, 0x3ee78d0e00000000, | |
| 5625 | + 0x1a3e8a6d00000000, 0x765582c800000000, 0x528c85ab00000000, | |
| 5626 | + 0xef85e35900000000, 0xcb5ce43a00000000, 0xa737ec9f00000000, | |
| 5627 | + 0x83eeebfc00000000, 0x99af992600000000, 0xbd769e4500000000, | |
| 5628 | + 0xd11d96e000000000, 0xf5c4918300000000, 0x48cdf77100000000, | |
| 5629 | + 0x6c14f01200000000, 0x007ff8b700000000, 0x24a6ffd400000000, | |
| 5630 | + 0x3b6a458800000000, 0x1fb342eb00000000, 0x73d84a4e00000000, | |
| 5631 | + 0x57014d2d00000000, 0xea082bdf00000000, 0xced12cbc00000000, | |
| 5632 | + 0xa2ba241900000000, 0x8663237a00000000, 0xae7d62ed00000000, | |
| 5633 | + 0x8aa4658e00000000, 0xe6cf6d2b00000000, 0xc2166a4800000000, | |
| 5634 | + 0x7f1f0cba00000000, 0x5bc60bd900000000, 0x37ad037c00000000, | |
| 5635 | + 0x1374041f00000000, 0x0cb8be4300000000, 0x2861b92000000000, | |
| 5636 | + 0x440ab18500000000, 0x60d3b6e600000000, 0xdddad01400000000, | |
| 5637 | + 0xf903d77700000000, 0x9568dfd200000000, 0xb1b1d8b100000000, | |
| 5638 | + 0xabf0aa6b00000000, 0x8f29ad0800000000, 0xe342a5ad00000000, | |
| 5639 | + 0xc79ba2ce00000000, 0x7a92c43c00000000, 0x5e4bc35f00000000, | |
| 5640 | + 0x3220cbfa00000000, 0x16f9cc9900000000, 0x093576c500000000, | |
| 5641 | + 0x2dec71a600000000, 0x4187790300000000, 0x655e7e6000000000, | |
| 5642 | + 0xd857189200000000, 0xfc8e1ff100000000, 0x90e5175400000000, | |
| 5643 | + 0xb43c103700000000, 0xe561823b00000000, 0xc1b8855800000000, | |
| 5644 | + 0xadd38dfd00000000, 0x890a8a9e00000000, 0x3403ec6c00000000, | |
| 5645 | + 0x10daeb0f00000000, 0x7cb1e3aa00000000, 0x5868e4c900000000, | |
| 5646 | + 0x47a45e9500000000, 0x637d59f600000000, 0x0f16515300000000, | |
| 5647 | + 0x2bcf563000000000, 0x96c630c200000000, 0xb21f37a100000000, | |
| 5648 | + 0xde743f0400000000, 0xfaad386700000000, 0xe0ec4abd00000000, | |
| 5649 | + 0xc4354dde00000000, 0xa85e457b00000000, 0x8c87421800000000, | |
| 5650 | + 0x318e24ea00000000, 0x1557238900000000, 0x793c2b2c00000000, | |
| 5651 | + 0x5de52c4f00000000, 0x4229961300000000, 0x66f0917000000000, | |
| 5652 | + 0x0a9b99d500000000, 0x2e429eb600000000, 0x934bf84400000000, | |
| 5653 | + 0xb792ff2700000000, 0xdbf9f78200000000, 0xff20f0e100000000, | |
| 5654 | + 0x7943d39b00000000, 0x5d9ad4f800000000, 0x31f1dc5d00000000, | |
| 5655 | + 0x1528db3e00000000, 0xa821bdcc00000000, 0x8cf8baaf00000000, | |
| 5656 | + 0xe093b20a00000000, 0xc44ab56900000000, 0xdb860f3500000000, | |
| 5657 | + 0xff5f085600000000, 0x933400f300000000, 0xb7ed079000000000, | |
| 5658 | + 0x0ae4616200000000, 0x2e3d660100000000, 0x42566ea400000000, | |
| 5659 | + 0x668f69c700000000, 0x7cce1b1d00000000, 0x58171c7e00000000, | |
| 5660 | + 0x347c14db00000000, 0x10a513b800000000, 0xadac754a00000000, | |
| 5661 | + 0x8975722900000000, 0xe51e7a8c00000000, 0xc1c77def00000000, | |
| 5662 | + 0xde0bc7b300000000, 0xfad2c0d000000000, 0x96b9c87500000000, | |
| 5663 | + 0xb260cf1600000000, 0x0f69a9e400000000, 0x2bb0ae8700000000, | |
| 5664 | + 0x47dba62200000000, 0x6302a14100000000, 0x325f334d00000000, | |
| 5665 | + 0x1686342e00000000, 0x7aed3c8b00000000, 0x5e343be800000000, | |
| 5666 | + 0xe33d5d1a00000000, 0xc7e45a7900000000, 0xab8f52dc00000000, | |
| 5667 | + 0x8f5655bf00000000, 0x909aefe300000000, 0xb443e88000000000, | |
| 5668 | + 0xd828e02500000000, 0xfcf1e74600000000, 0x41f881b400000000, | |
| 5669 | + 0x652186d700000000, 0x094a8e7200000000, 0x2d93891100000000, | |
| 5670 | + 0x37d2fbcb00000000, 0x130bfca800000000, 0x7f60f40d00000000, | |
| 5671 | + 0x5bb9f36e00000000, 0xe6b0959c00000000, 0xc26992ff00000000, | |
| 5672 | + 0xae029a5a00000000, 0x8adb9d3900000000, 0x9517276500000000, | |
| 5673 | + 0xb1ce200600000000, 0xdda528a300000000, 0xf97c2fc000000000, | |
| 5674 | + 0x4475493200000000, 0x60ac4e5100000000, 0x0cc746f400000000, | |
| 5675 | + 0x281e419700000000}, | |
| 5676 | + {0x0000000000000000, 0x08e3603c00000000, 0x10c6c17800000000, | |
| 5677 | + 0x1825a14400000000, 0x208c83f100000000, 0x286fe3cd00000000, | |
| 5678 | + 0x304a428900000000, 0x38a922b500000000, 0x011e763800000000, | |
| 5679 | + 0x09fd160400000000, 0x11d8b74000000000, 0x193bd77c00000000, | |
| 5680 | + 0x2192f5c900000000, 0x297195f500000000, 0x315434b100000000, | |
| 5681 | + 0x39b7548d00000000, 0x023cec7000000000, 0x0adf8c4c00000000, | |
| 5682 | + 0x12fa2d0800000000, 0x1a194d3400000000, 0x22b06f8100000000, | |
| 5683 | + 0x2a530fbd00000000, 0x3276aef900000000, 0x3a95cec500000000, | |
| 5684 | + 0x03229a4800000000, 0x0bc1fa7400000000, 0x13e45b3000000000, | |
| 5685 | + 0x1b073b0c00000000, 0x23ae19b900000000, 0x2b4d798500000000, | |
| 5686 | + 0x3368d8c100000000, 0x3b8bb8fd00000000, 0x0478d8e100000000, | |
| 5687 | + 0x0c9bb8dd00000000, 0x14be199900000000, 0x1c5d79a500000000, | |
| 5688 | + 0x24f45b1000000000, 0x2c173b2c00000000, 0x34329a6800000000, | |
| 5689 | + 0x3cd1fa5400000000, 0x0566aed900000000, 0x0d85cee500000000, | |
| 5690 | + 0x15a06fa100000000, 0x1d430f9d00000000, 0x25ea2d2800000000, | |
| 5691 | + 0x2d094d1400000000, 0x352cec5000000000, 0x3dcf8c6c00000000, | |
| 5692 | + 0x0644349100000000, 0x0ea754ad00000000, 0x1682f5e900000000, | |
| 5693 | + 0x1e6195d500000000, 0x26c8b76000000000, 0x2e2bd75c00000000, | |
| 5694 | + 0x360e761800000000, 0x3eed162400000000, 0x075a42a900000000, | |
| 5695 | + 0x0fb9229500000000, 0x179c83d100000000, 0x1f7fe3ed00000000, | |
| 5696 | + 0x27d6c15800000000, 0x2f35a16400000000, 0x3710002000000000, | |
| 5697 | + 0x3ff3601c00000000, 0x49f6c11800000000, 0x4115a12400000000, | |
| 5698 | + 0x5930006000000000, 0x51d3605c00000000, 0x697a42e900000000, | |
| 5699 | + 0x619922d500000000, 0x79bc839100000000, 0x715fe3ad00000000, | |
| 5700 | + 0x48e8b72000000000, 0x400bd71c00000000, 0x582e765800000000, | |
| 5701 | + 0x50cd166400000000, 0x686434d100000000, 0x608754ed00000000, | |
| 5702 | + 0x78a2f5a900000000, 0x7041959500000000, 0x4bca2d6800000000, | |
| 5703 | + 0x43294d5400000000, 0x5b0cec1000000000, 0x53ef8c2c00000000, | |
| 5704 | + 0x6b46ae9900000000, 0x63a5cea500000000, 0x7b806fe100000000, | |
| 5705 | + 0x73630fdd00000000, 0x4ad45b5000000000, 0x42373b6c00000000, | |
| 5706 | + 0x5a129a2800000000, 0x52f1fa1400000000, 0x6a58d8a100000000, | |
| 5707 | + 0x62bbb89d00000000, 0x7a9e19d900000000, 0x727d79e500000000, | |
| 5708 | + 0x4d8e19f900000000, 0x456d79c500000000, 0x5d48d88100000000, | |
| 5709 | + 0x55abb8bd00000000, 0x6d029a0800000000, 0x65e1fa3400000000, | |
| 5710 | + 0x7dc45b7000000000, 0x75273b4c00000000, 0x4c906fc100000000, | |
| 5711 | + 0x44730ffd00000000, 0x5c56aeb900000000, 0x54b5ce8500000000, | |
| 5712 | + 0x6c1cec3000000000, 0x64ff8c0c00000000, 0x7cda2d4800000000, | |
| 5713 | + 0x74394d7400000000, 0x4fb2f58900000000, 0x475195b500000000, | |
| 5714 | + 0x5f7434f100000000, 0x579754cd00000000, 0x6f3e767800000000, | |
| 5715 | + 0x67dd164400000000, 0x7ff8b70000000000, 0x771bd73c00000000, | |
| 5716 | + 0x4eac83b100000000, 0x464fe38d00000000, 0x5e6a42c900000000, | |
| 5717 | + 0x568922f500000000, 0x6e20004000000000, 0x66c3607c00000000, | |
| 5718 | + 0x7ee6c13800000000, 0x7605a10400000000, 0x92ec833100000000, | |
| 5719 | + 0x9a0fe30d00000000, 0x822a424900000000, 0x8ac9227500000000, | |
| 5720 | + 0xb26000c000000000, 0xba8360fc00000000, 0xa2a6c1b800000000, | |
| 5721 | + 0xaa45a18400000000, 0x93f2f50900000000, 0x9b11953500000000, | |
| 5722 | + 0x8334347100000000, 0x8bd7544d00000000, 0xb37e76f800000000, | |
| 5723 | + 0xbb9d16c400000000, 0xa3b8b78000000000, 0xab5bd7bc00000000, | |
| 5724 | + 0x90d06f4100000000, 0x98330f7d00000000, 0x8016ae3900000000, | |
| 5725 | + 0x88f5ce0500000000, 0xb05cecb000000000, 0xb8bf8c8c00000000, | |
| 5726 | + 0xa09a2dc800000000, 0xa8794df400000000, 0x91ce197900000000, | |
| 5727 | + 0x992d794500000000, 0x8108d80100000000, 0x89ebb83d00000000, | |
| 5728 | + 0xb1429a8800000000, 0xb9a1fab400000000, 0xa1845bf000000000, | |
| 5729 | + 0xa9673bcc00000000, 0x96945bd000000000, 0x9e773bec00000000, | |
| 5730 | + 0x86529aa800000000, 0x8eb1fa9400000000, 0xb618d82100000000, | |
| 5731 | + 0xbefbb81d00000000, 0xa6de195900000000, 0xae3d796500000000, | |
| 5732 | + 0x978a2de800000000, 0x9f694dd400000000, 0x874cec9000000000, | |
| 5733 | + 0x8faf8cac00000000, 0xb706ae1900000000, 0xbfe5ce2500000000, | |
| 5734 | + 0xa7c06f6100000000, 0xaf230f5d00000000, 0x94a8b7a000000000, | |
| 5735 | + 0x9c4bd79c00000000, 0x846e76d800000000, 0x8c8d16e400000000, | |
| 5736 | + 0xb424345100000000, 0xbcc7546d00000000, 0xa4e2f52900000000, | |
| 5737 | + 0xac01951500000000, 0x95b6c19800000000, 0x9d55a1a400000000, | |
| 5738 | + 0x857000e000000000, 0x8d9360dc00000000, 0xb53a426900000000, | |
| 5739 | + 0xbdd9225500000000, 0xa5fc831100000000, 0xad1fe32d00000000, | |
| 5740 | + 0xdb1a422900000000, 0xd3f9221500000000, 0xcbdc835100000000, | |
| 5741 | + 0xc33fe36d00000000, 0xfb96c1d800000000, 0xf375a1e400000000, | |
| 5742 | + 0xeb5000a000000000, 0xe3b3609c00000000, 0xda04341100000000, | |
| 5743 | + 0xd2e7542d00000000, 0xcac2f56900000000, 0xc221955500000000, | |
| 5744 | + 0xfa88b7e000000000, 0xf26bd7dc00000000, 0xea4e769800000000, | |
| 5745 | + 0xe2ad16a400000000, 0xd926ae5900000000, 0xd1c5ce6500000000, | |
| 5746 | + 0xc9e06f2100000000, 0xc1030f1d00000000, 0xf9aa2da800000000, | |
| 5747 | + 0xf1494d9400000000, 0xe96cecd000000000, 0xe18f8cec00000000, | |
| 5748 | + 0xd838d86100000000, 0xd0dbb85d00000000, 0xc8fe191900000000, | |
| 5749 | + 0xc01d792500000000, 0xf8b45b9000000000, 0xf0573bac00000000, | |
| 5750 | + 0xe8729ae800000000, 0xe091fad400000000, 0xdf629ac800000000, | |
| 5751 | + 0xd781faf400000000, 0xcfa45bb000000000, 0xc7473b8c00000000, | |
| 5752 | + 0xffee193900000000, 0xf70d790500000000, 0xef28d84100000000, | |
| 5753 | + 0xe7cbb87d00000000, 0xde7cecf000000000, 0xd69f8ccc00000000, | |
| 5754 | + 0xceba2d8800000000, 0xc6594db400000000, 0xfef06f0100000000, | |
| 5755 | + 0xf6130f3d00000000, 0xee36ae7900000000, 0xe6d5ce4500000000, | |
| 5756 | + 0xdd5e76b800000000, 0xd5bd168400000000, 0xcd98b7c000000000, | |
| 5757 | + 0xc57bd7fc00000000, 0xfdd2f54900000000, 0xf531957500000000, | |
| 5758 | + 0xed14343100000000, 0xe5f7540d00000000, 0xdc40008000000000, | |
| 5759 | + 0xd4a360bc00000000, 0xcc86c1f800000000, 0xc465a1c400000000, | |
| 5760 | + 0xfccc837100000000, 0xf42fe34d00000000, 0xec0a420900000000, | |
| 5761 | + 0xe4e9223500000000}, | |
| 5762 | + {0x0000000000000000, 0xd1e8e70e00000000, 0xa2d1cf1d00000000, | |
| 5763 | + 0x7339281300000000, 0x44a39f3b00000000, 0x954b783500000000, | |
| 5764 | + 0xe672502600000000, 0x379ab72800000000, 0x88463f7700000000, | |
| 5765 | + 0x59aed87900000000, 0x2a97f06a00000000, 0xfb7f176400000000, | |
| 5766 | + 0xcce5a04c00000000, 0x1d0d474200000000, 0x6e346f5100000000, | |
| 5767 | + 0xbfdc885f00000000, 0x108d7eee00000000, 0xc16599e000000000, | |
| 5768 | + 0xb25cb1f300000000, 0x63b456fd00000000, 0x542ee1d500000000, | |
| 5769 | + 0x85c606db00000000, 0xf6ff2ec800000000, 0x2717c9c600000000, | |
| 5770 | + 0x98cb419900000000, 0x4923a69700000000, 0x3a1a8e8400000000, | |
| 5771 | + 0xebf2698a00000000, 0xdc68dea200000000, 0x0d8039ac00000000, | |
| 5772 | + 0x7eb911bf00000000, 0xaf51f6b100000000, 0x611c8c0700000000, | |
| 5773 | + 0xb0f46b0900000000, 0xc3cd431a00000000, 0x1225a41400000000, | |
| 5774 | + 0x25bf133c00000000, 0xf457f43200000000, 0x876edc2100000000, | |
| 5775 | + 0x56863b2f00000000, 0xe95ab37000000000, 0x38b2547e00000000, | |
| 5776 | + 0x4b8b7c6d00000000, 0x9a639b6300000000, 0xadf92c4b00000000, | |
| 5777 | + 0x7c11cb4500000000, 0x0f28e35600000000, 0xdec0045800000000, | |
| 5778 | + 0x7191f2e900000000, 0xa07915e700000000, 0xd3403df400000000, | |
| 5779 | + 0x02a8dafa00000000, 0x35326dd200000000, 0xe4da8adc00000000, | |
| 5780 | + 0x97e3a2cf00000000, 0x460b45c100000000, 0xf9d7cd9e00000000, | |
| 5781 | + 0x283f2a9000000000, 0x5b06028300000000, 0x8aeee58d00000000, | |
| 5782 | + 0xbd7452a500000000, 0x6c9cb5ab00000000, 0x1fa59db800000000, | |
| 5783 | + 0xce4d7ab600000000, 0xc238180f00000000, 0x13d0ff0100000000, | |
| 5784 | + 0x60e9d71200000000, 0xb101301c00000000, 0x869b873400000000, | |
| 5785 | + 0x5773603a00000000, 0x244a482900000000, 0xf5a2af2700000000, | |
| 5786 | + 0x4a7e277800000000, 0x9b96c07600000000, 0xe8afe86500000000, | |
| 5787 | + 0x39470f6b00000000, 0x0eddb84300000000, 0xdf355f4d00000000, | |
| 5788 | + 0xac0c775e00000000, 0x7de4905000000000, 0xd2b566e100000000, | |
| 5789 | + 0x035d81ef00000000, 0x7064a9fc00000000, 0xa18c4ef200000000, | |
| 5790 | + 0x9616f9da00000000, 0x47fe1ed400000000, 0x34c736c700000000, | |
| 5791 | + 0xe52fd1c900000000, 0x5af3599600000000, 0x8b1bbe9800000000, | |
| 5792 | + 0xf822968b00000000, 0x29ca718500000000, 0x1e50c6ad00000000, | |
| 5793 | + 0xcfb821a300000000, 0xbc8109b000000000, 0x6d69eebe00000000, | |
| 5794 | + 0xa324940800000000, 0x72cc730600000000, 0x01f55b1500000000, | |
| 5795 | + 0xd01dbc1b00000000, 0xe7870b3300000000, 0x366fec3d00000000, | |
| 5796 | + 0x4556c42e00000000, 0x94be232000000000, 0x2b62ab7f00000000, | |
| 5797 | + 0xfa8a4c7100000000, 0x89b3646200000000, 0x585b836c00000000, | |
| 5798 | + 0x6fc1344400000000, 0xbe29d34a00000000, 0xcd10fb5900000000, | |
| 5799 | + 0x1cf81c5700000000, 0xb3a9eae600000000, 0x62410de800000000, | |
| 5800 | + 0x117825fb00000000, 0xc090c2f500000000, 0xf70a75dd00000000, | |
| 5801 | + 0x26e292d300000000, 0x55dbbac000000000, 0x84335dce00000000, | |
| 5802 | + 0x3befd59100000000, 0xea07329f00000000, 0x993e1a8c00000000, | |
| 5803 | + 0x48d6fd8200000000, 0x7f4c4aaa00000000, 0xaea4ada400000000, | |
| 5804 | + 0xdd9d85b700000000, 0x0c7562b900000000, 0x8471301e00000000, | |
| 5805 | + 0x5599d71000000000, 0x26a0ff0300000000, 0xf748180d00000000, | |
| 5806 | + 0xc0d2af2500000000, 0x113a482b00000000, 0x6203603800000000, | |
| 5807 | + 0xb3eb873600000000, 0x0c370f6900000000, 0xdddfe86700000000, | |
| 5808 | + 0xaee6c07400000000, 0x7f0e277a00000000, 0x4894905200000000, | |
| 5809 | + 0x997c775c00000000, 0xea455f4f00000000, 0x3badb84100000000, | |
| 5810 | + 0x94fc4ef000000000, 0x4514a9fe00000000, 0x362d81ed00000000, | |
| 5811 | + 0xe7c566e300000000, 0xd05fd1cb00000000, 0x01b736c500000000, | |
| 5812 | + 0x728e1ed600000000, 0xa366f9d800000000, 0x1cba718700000000, | |
| 5813 | + 0xcd52968900000000, 0xbe6bbe9a00000000, 0x6f83599400000000, | |
| 5814 | + 0x5819eebc00000000, 0x89f109b200000000, 0xfac821a100000000, | |
| 5815 | + 0x2b20c6af00000000, 0xe56dbc1900000000, 0x34855b1700000000, | |
| 5816 | + 0x47bc730400000000, 0x9654940a00000000, 0xa1ce232200000000, | |
| 5817 | + 0x7026c42c00000000, 0x031fec3f00000000, 0xd2f70b3100000000, | |
| 5818 | + 0x6d2b836e00000000, 0xbcc3646000000000, 0xcffa4c7300000000, | |
| 5819 | + 0x1e12ab7d00000000, 0x29881c5500000000, 0xf860fb5b00000000, | |
| 5820 | + 0x8b59d34800000000, 0x5ab1344600000000, 0xf5e0c2f700000000, | |
| 5821 | + 0x240825f900000000, 0x57310dea00000000, 0x86d9eae400000000, | |
| 5822 | + 0xb1435dcc00000000, 0x60abbac200000000, 0x139292d100000000, | |
| 5823 | + 0xc27a75df00000000, 0x7da6fd8000000000, 0xac4e1a8e00000000, | |
| 5824 | + 0xdf77329d00000000, 0x0e9fd59300000000, 0x390562bb00000000, | |
| 5825 | + 0xe8ed85b500000000, 0x9bd4ada600000000, 0x4a3c4aa800000000, | |
| 5826 | + 0x4649281100000000, 0x97a1cf1f00000000, 0xe498e70c00000000, | |
| 5827 | + 0x3570000200000000, 0x02eab72a00000000, 0xd302502400000000, | |
| 5828 | + 0xa03b783700000000, 0x71d39f3900000000, 0xce0f176600000000, | |
| 5829 | + 0x1fe7f06800000000, 0x6cded87b00000000, 0xbd363f7500000000, | |
| 5830 | + 0x8aac885d00000000, 0x5b446f5300000000, 0x287d474000000000, | |
| 5831 | + 0xf995a04e00000000, 0x56c456ff00000000, 0x872cb1f100000000, | |
| 5832 | + 0xf41599e200000000, 0x25fd7eec00000000, 0x1267c9c400000000, | |
| 5833 | + 0xc38f2eca00000000, 0xb0b606d900000000, 0x615ee1d700000000, | |
| 5834 | + 0xde82698800000000, 0x0f6a8e8600000000, 0x7c53a69500000000, | |
| 5835 | + 0xadbb419b00000000, 0x9a21f6b300000000, 0x4bc911bd00000000, | |
| 5836 | + 0x38f039ae00000000, 0xe918dea000000000, 0x2755a41600000000, | |
| 5837 | + 0xf6bd431800000000, 0x85846b0b00000000, 0x546c8c0500000000, | |
| 5838 | + 0x63f63b2d00000000, 0xb21edc2300000000, 0xc127f43000000000, | |
| 5839 | + 0x10cf133e00000000, 0xaf139b6100000000, 0x7efb7c6f00000000, | |
| 5840 | + 0x0dc2547c00000000, 0xdc2ab37200000000, 0xebb0045a00000000, | |
| 5841 | + 0x3a58e35400000000, 0x4961cb4700000000, 0x98892c4900000000, | |
| 5842 | + 0x37d8daf800000000, 0xe6303df600000000, 0x950915e500000000, | |
| 5843 | + 0x44e1f2eb00000000, 0x737b45c300000000, 0xa293a2cd00000000, | |
| 5844 | + 0xd1aa8ade00000000, 0x00426dd000000000, 0xbf9ee58f00000000, | |
| 5845 | + 0x6e76028100000000, 0x1d4f2a9200000000, 0xcca7cd9c00000000, | |
| 5846 | + 0xfb3d7ab400000000, 0x2ad59dba00000000, 0x59ecb5a900000000, | |
| 5847 | + 0x880452a700000000}, | |
| 5848 | + {0x0000000000000000, 0xaa05daf100000000, 0x150dc53800000000, | |
| 5849 | + 0xbf081fc900000000, 0x2a1a8a7100000000, 0x801f508000000000, | |
| 5850 | + 0x3f174f4900000000, 0x951295b800000000, 0x543414e300000000, | |
| 5851 | + 0xfe31ce1200000000, 0x4139d1db00000000, 0xeb3c0b2a00000000, | |
| 5852 | + 0x7e2e9e9200000000, 0xd42b446300000000, 0x6b235baa00000000, | |
| 5853 | + 0xc126815b00000000, 0xe96e591d00000000, 0x436b83ec00000000, | |
| 5854 | + 0xfc639c2500000000, 0x566646d400000000, 0xc374d36c00000000, | |
| 5855 | + 0x6971099d00000000, 0xd679165400000000, 0x7c7ccca500000000, | |
| 5856 | + 0xbd5a4dfe00000000, 0x175f970f00000000, 0xa85788c600000000, | |
| 5857 | + 0x0252523700000000, 0x9740c78f00000000, 0x3d451d7e00000000, | |
| 5858 | + 0x824d02b700000000, 0x2848d84600000000, 0xd2ddb23a00000000, | |
| 5859 | + 0x78d868cb00000000, 0xc7d0770200000000, 0x6dd5adf300000000, | |
| 5860 | + 0xf8c7384b00000000, 0x52c2e2ba00000000, 0xedcafd7300000000, | |
| 5861 | + 0x47cf278200000000, 0x86e9a6d900000000, 0x2cec7c2800000000, | |
| 5862 | + 0x93e463e100000000, 0x39e1b91000000000, 0xacf32ca800000000, | |
| 5863 | + 0x06f6f65900000000, 0xb9fee99000000000, 0x13fb336100000000, | |
| 5864 | + 0x3bb3eb2700000000, 0x91b631d600000000, 0x2ebe2e1f00000000, | |
| 5865 | + 0x84bbf4ee00000000, 0x11a9615600000000, 0xbbacbba700000000, | |
| 5866 | + 0x04a4a46e00000000, 0xaea17e9f00000000, 0x6f87ffc400000000, | |
| 5867 | + 0xc582253500000000, 0x7a8a3afc00000000, 0xd08fe00d00000000, | |
| 5868 | + 0x459d75b500000000, 0xef98af4400000000, 0x5090b08d00000000, | |
| 5869 | + 0xfa956a7c00000000, 0xa4bb657500000000, 0x0ebebf8400000000, | |
| 5870 | + 0xb1b6a04d00000000, 0x1bb37abc00000000, 0x8ea1ef0400000000, | |
| 5871 | + 0x24a435f500000000, 0x9bac2a3c00000000, 0x31a9f0cd00000000, | |
| 5872 | + 0xf08f719600000000, 0x5a8aab6700000000, 0xe582b4ae00000000, | |
| 5873 | + 0x4f876e5f00000000, 0xda95fbe700000000, 0x7090211600000000, | |
| 5874 | + 0xcf983edf00000000, 0x659de42e00000000, 0x4dd53c6800000000, | |
| 5875 | + 0xe7d0e69900000000, 0x58d8f95000000000, 0xf2dd23a100000000, | |
| 5876 | + 0x67cfb61900000000, 0xcdca6ce800000000, 0x72c2732100000000, | |
| 5877 | + 0xd8c7a9d000000000, 0x19e1288b00000000, 0xb3e4f27a00000000, | |
| 5878 | + 0x0cecedb300000000, 0xa6e9374200000000, 0x33fba2fa00000000, | |
| 5879 | + 0x99fe780b00000000, 0x26f667c200000000, 0x8cf3bd3300000000, | |
| 5880 | + 0x7666d74f00000000, 0xdc630dbe00000000, 0x636b127700000000, | |
| 5881 | + 0xc96ec88600000000, 0x5c7c5d3e00000000, 0xf67987cf00000000, | |
| 5882 | + 0x4971980600000000, 0xe37442f700000000, 0x2252c3ac00000000, | |
| 5883 | + 0x8857195d00000000, 0x375f069400000000, 0x9d5adc6500000000, | |
| 5884 | + 0x084849dd00000000, 0xa24d932c00000000, 0x1d458ce500000000, | |
| 5885 | + 0xb740561400000000, 0x9f088e5200000000, 0x350d54a300000000, | |
| 5886 | + 0x8a054b6a00000000, 0x2000919b00000000, 0xb512042300000000, | |
| 5887 | + 0x1f17ded200000000, 0xa01fc11b00000000, 0x0a1a1bea00000000, | |
| 5888 | + 0xcb3c9ab100000000, 0x6139404000000000, 0xde315f8900000000, | |
| 5889 | + 0x7434857800000000, 0xe12610c000000000, 0x4b23ca3100000000, | |
| 5890 | + 0xf42bd5f800000000, 0x5e2e0f0900000000, 0x4877cbea00000000, | |
| 5891 | + 0xe272111b00000000, 0x5d7a0ed200000000, 0xf77fd42300000000, | |
| 5892 | + 0x626d419b00000000, 0xc8689b6a00000000, 0x776084a300000000, | |
| 5893 | + 0xdd655e5200000000, 0x1c43df0900000000, 0xb64605f800000000, | |
| 5894 | + 0x094e1a3100000000, 0xa34bc0c000000000, 0x3659557800000000, | |
| 5895 | + 0x9c5c8f8900000000, 0x2354904000000000, 0x89514ab100000000, | |
| 5896 | + 0xa11992f700000000, 0x0b1c480600000000, 0xb41457cf00000000, | |
| 5897 | + 0x1e118d3e00000000, 0x8b03188600000000, 0x2106c27700000000, | |
| 5898 | + 0x9e0eddbe00000000, 0x340b074f00000000, 0xf52d861400000000, | |
| 5899 | + 0x5f285ce500000000, 0xe020432c00000000, 0x4a2599dd00000000, | |
| 5900 | + 0xdf370c6500000000, 0x7532d69400000000, 0xca3ac95d00000000, | |
| 5901 | + 0x603f13ac00000000, 0x9aaa79d000000000, 0x30afa32100000000, | |
| 5902 | + 0x8fa7bce800000000, 0x25a2661900000000, 0xb0b0f3a100000000, | |
| 5903 | + 0x1ab5295000000000, 0xa5bd369900000000, 0x0fb8ec6800000000, | |
| 5904 | + 0xce9e6d3300000000, 0x649bb7c200000000, 0xdb93a80b00000000, | |
| 5905 | + 0x719672fa00000000, 0xe484e74200000000, 0x4e813db300000000, | |
| 5906 | + 0xf189227a00000000, 0x5b8cf88b00000000, 0x73c420cd00000000, | |
| 5907 | + 0xd9c1fa3c00000000, 0x66c9e5f500000000, 0xcccc3f0400000000, | |
| 5908 | + 0x59deaabc00000000, 0xf3db704d00000000, 0x4cd36f8400000000, | |
| 5909 | + 0xe6d6b57500000000, 0x27f0342e00000000, 0x8df5eedf00000000, | |
| 5910 | + 0x32fdf11600000000, 0x98f82be700000000, 0x0deabe5f00000000, | |
| 5911 | + 0xa7ef64ae00000000, 0x18e77b6700000000, 0xb2e2a19600000000, | |
| 5912 | + 0xecccae9f00000000, 0x46c9746e00000000, 0xf9c16ba700000000, | |
| 5913 | + 0x53c4b15600000000, 0xc6d624ee00000000, 0x6cd3fe1f00000000, | |
| 5914 | + 0xd3dbe1d600000000, 0x79de3b2700000000, 0xb8f8ba7c00000000, | |
| 5915 | + 0x12fd608d00000000, 0xadf57f4400000000, 0x07f0a5b500000000, | |
| 5916 | + 0x92e2300d00000000, 0x38e7eafc00000000, 0x87eff53500000000, | |
| 5917 | + 0x2dea2fc400000000, 0x05a2f78200000000, 0xafa72d7300000000, | |
| 5918 | + 0x10af32ba00000000, 0xbaaae84b00000000, 0x2fb87df300000000, | |
| 5919 | + 0x85bda70200000000, 0x3ab5b8cb00000000, 0x90b0623a00000000, | |
| 5920 | + 0x5196e36100000000, 0xfb93399000000000, 0x449b265900000000, | |
| 5921 | + 0xee9efca800000000, 0x7b8c691000000000, 0xd189b3e100000000, | |
| 5922 | + 0x6e81ac2800000000, 0xc48476d900000000, 0x3e111ca500000000, | |
| 5923 | + 0x9414c65400000000, 0x2b1cd99d00000000, 0x8119036c00000000, | |
| 5924 | + 0x140b96d400000000, 0xbe0e4c2500000000, 0x010653ec00000000, | |
| 5925 | + 0xab03891d00000000, 0x6a25084600000000, 0xc020d2b700000000, | |
| 5926 | + 0x7f28cd7e00000000, 0xd52d178f00000000, 0x403f823700000000, | |
| 5927 | + 0xea3a58c600000000, 0x5532470f00000000, 0xff379dfe00000000, | |
| 5928 | + 0xd77f45b800000000, 0x7d7a9f4900000000, 0xc272808000000000, | |
| 5929 | + 0x68775a7100000000, 0xfd65cfc900000000, 0x5760153800000000, | |
| 5930 | + 0xe8680af100000000, 0x426dd00000000000, 0x834b515b00000000, | |
| 5931 | + 0x294e8baa00000000, 0x9646946300000000, 0x3c434e9200000000, | |
| 5932 | + 0xa951db2a00000000, 0x035401db00000000, 0xbc5c1e1200000000, | |
| 5933 | + 0x1659c4e300000000}}; | |
| 5934 | + | |
| 5935 | +#else /* W == 4 */ | |
| 5936 | + | |
| 5937 | +local const z_crc_t FAR crc_braid_table[][256] = { | |
| 5938 | + {0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87, | |
| 5939 | + 0x7a59dd16, 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede, | |
| 5940 | + 0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259, 0x2082f6ab, | |
| 5941 | + 0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c, | |
| 5942 | + 0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1, | |
| 5943 | + 0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7, | |
| 5944 | + 0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e, | |
| 5945 | + 0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308, | |
| 5946 | + 0x642ce432, 0xca4475a3, 0xe38cc151, 0x4de450c0, 0xb01da8b5, | |
| 5947 | + 0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3, 0x5f70d472, | |
| 5948 | + 0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07, | |
| 5949 | + 0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e, | |
| 5950 | + 0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa, | |
| 5951 | + 0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec, | |
| 5952 | + 0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6, | |
| 5953 | + 0x74a5dd47, 0x895c2532, 0x2734b4a3, 0x0efc0051, 0xa09491c0, | |
| 5954 | + 0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, 0x1c6884e3, | |
| 5955 | + 0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba, | |
| 5956 | + 0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf, | |
| 5957 | + 0x46b3af5e, 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975, | |
| 5958 | + 0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8, | |
| 5959 | + 0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde, | |
| 5960 | + 0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, 0x58c6967a, | |
| 5961 | + 0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c, | |
| 5962 | + 0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1, | |
| 5963 | + 0xd62cf140, 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65, | |
| 5964 | + 0xdb5dc897, 0x75355906, 0x88cca173, 0x26a430e2, 0x0f6c8410, | |
| 5965 | + 0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649, | |
| 5966 | + 0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a, | |
| 5967 | + 0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c, | |
| 5968 | + 0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946, | |
| 5969 | + 0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450, | |
| 5970 | + 0x4bc29689, 0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e, | |
| 5971 | + 0x319b4b9f, 0x1853ff6d, 0xb63b6efc, 0x38d109c6, 0x96b99857, | |
| 5972 | + 0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022, | |
| 5973 | + 0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5, | |
| 5974 | + 0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758, | |
| 5975 | + 0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e, | |
| 5976 | + 0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d, | |
| 5977 | + 0x5b4baffc, 0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b, | |
| 5978 | + 0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, 0xd5a1c8c6, | |
| 5979 | + 0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401, | |
| 5980 | + 0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74, | |
| 5981 | + 0x695ddde5, 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d, | |
| 5982 | + 0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa, 0x65bc6073, | |
| 5983 | + 0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65, | |
| 5984 | + 0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f, | |
| 5985 | + 0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749, | |
| 5986 | + 0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a, | |
| 5987 | + 0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033, | |
| 5988 | + 0x7728e4c1, 0xd9407550, 0x24b98d25, 0x8ad11cb4, 0xa319a846, | |
| 5989 | + 0x0d7139d7}, | |
| 5990 | + {0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563, | |
| 5991 | + 0x3387be8b, 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f, | |
| 5992 | + 0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c, 0xed731875, | |
| 5993 | + 0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536, | |
| 5994 | + 0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8, | |
| 5995 | + 0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43, | |
| 5996 | + 0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f, | |
| 5997 | + 0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184, | |
| 5998 | + 0x474cf219, 0xfeb729f1, 0xefca4388, 0x56319860, 0xcd30977a, | |
| 5999 | + 0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1, 0x755c7a39, | |
| 6000 | + 0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523, | |
| 6001 | + 0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f, | |
| 6002 | + 0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d, | |
| 6003 | + 0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6, | |
| 6004 | + 0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b, | |
| 6005 | + 0x140fdd83, 0x8f0ed299, 0x36f50971, 0x27886308, 0x9e73b8e0, | |
| 6006 | + 0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, 0x04e58151, | |
| 6007 | + 0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d, | |
| 6008 | + 0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47, | |
| 6009 | + 0xda1127af, 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a, | |
| 6010 | + 0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964, | |
| 6011 | + 0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef, | |
| 6012 | + 0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, 0xaeda6b3d, | |
| 6013 | + 0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6, | |
| 6014 | + 0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348, | |
| 6015 | + 0xfa52a8a0, 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53, | |
| 6016 | + 0xe601412a, 0x5ffa9ac2, 0xc4fb95d8, 0x7d004e30, 0x6c7d2449, | |
| 6017 | + 0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645, | |
| 6018 | + 0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4, | |
| 6019 | + 0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f, | |
| 6020 | + 0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2, | |
| 6021 | + 0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69, | |
| 6022 | + 0xc642ce25, 0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46, | |
| 6023 | + 0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, 0x09cb02a2, 0xb030d94a, | |
| 6024 | + 0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650, | |
| 6025 | + 0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13, | |
| 6026 | + 0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded, | |
| 6027 | + 0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366, | |
| 6028 | + 0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57, | |
| 6029 | + 0x9501e1bf, 0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc, | |
| 6030 | + 0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, 0xc1892222, | |
| 6031 | + 0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61, | |
| 6032 | + 0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b, | |
| 6033 | + 0x5b1f1b93, 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277, | |
| 6034 | + 0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714, 0x0cb9b558, | |
| 6035 | + 0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3, | |
| 6036 | + 0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e, | |
| 6037 | + 0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5, | |
| 6038 | + 0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74, | |
| 6039 | + 0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78, | |
| 6040 | + 0x2fd45701, 0x962f8ce9, 0x0d2e83f3, 0xb4d5581b, 0xa5a83262, | |
| 6041 | + 0x1c53e98a}, | |
| 6042 | + {0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b, | |
| 6043 | + 0x84a36e6d, 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40, | |
| 6044 | + 0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b, 0xcb9b5580, | |
| 6045 | + 0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7, | |
| 6046 | + 0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a, | |
| 6047 | + 0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37, | |
| 6048 | + 0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75, | |
| 6049 | + 0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218, | |
| 6050 | + 0xfe3d66ee, 0x63328798, 0x1f53a243, 0x825c4335, 0xe791e9f5, | |
| 6051 | + 0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4, 0x36d9a5c2, | |
| 6052 | + 0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02, | |
| 6053 | + 0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59, | |
| 6054 | + 0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1, | |
| 6055 | + 0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c, | |
| 6056 | + 0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a, | |
| 6057 | + 0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, 0x8a22a271, 0x172d4307, | |
| 6058 | + 0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, 0x3ea74486, | |
| 6059 | + 0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd, | |
| 6060 | + 0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d, | |
| 6061 | + 0x719f7f6b, 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2, | |
| 6062 | + 0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f, | |
| 6063 | + 0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72, | |
| 6064 | + 0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, 0x0b0177e8, | |
| 6065 | + 0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985, | |
| 6066 | + 0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268, | |
| 6067 | + 0x5d95c31e, 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94, | |
| 6068 | + 0x621d2b4f, 0xff12ca39, 0x9adf60f9, 0x07d0818f, 0x7bb1a454, | |
| 6069 | + 0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f, | |
| 6070 | + 0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e, | |
| 6071 | + 0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3, | |
| 6072 | + 0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915, | |
| 6073 | + 0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778, | |
| 6074 | + 0x4e17973a, 0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821, | |
| 6075 | + 0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, 0x7d4e890c, 0xe041687a, | |
| 6076 | + 0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba, | |
| 6077 | + 0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d, | |
| 6078 | + 0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560, | |
| 6079 | + 0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d, | |
| 6080 | + 0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe, | |
| 6081 | + 0xbeab3dc8, 0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3, | |
| 6082 | + 0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, 0xe83f893e, | |
| 6083 | + 0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509, | |
| 6084 | + 0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9, | |
| 6085 | + 0xc1b58ebf, 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92, | |
| 6086 | + 0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089, 0x0fae60cb, | |
| 6087 | + 0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6, | |
| 6088 | + 0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50, | |
| 6089 | + 0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d, | |
| 6090 | + 0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc, | |
| 6091 | + 0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7, | |
| 6092 | + 0xbb2b863c, 0x2624674a, 0x43e9cd8a, 0xdee62cfc, 0xa2870927, | |
| 6093 | + 0x3f88e851}, | |
| 6094 | + {0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96, | |
| 6095 | + 0x1d2fb313, 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8, | |
| 6096 | + 0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e, 0xfae60cb0, | |
| 6097 | + 0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14, | |
| 6098 | + 0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7, | |
| 6099 | + 0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4, | |
| 6100 | + 0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe, | |
| 6101 | + 0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad, | |
| 6102 | + 0xe97d9898, 0x34eb411d, 0x89212dd3, 0x54b7f456, 0x29c4f20e, | |
| 6103 | + 0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f, 0xdaef34aa, | |
| 6104 | + 0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2, | |
| 6105 | + 0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c, | |
| 6106 | + 0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab, | |
| 6107 | + 0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8, | |
| 6108 | + 0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d, | |
| 6109 | + 0x5a442e08, 0x27372850, 0xfaa1f1d5, 0x476b9d1b, 0x9afd449e, | |
| 6110 | + 0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, 0xc9335de7, | |
| 6111 | + 0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99, | |
| 6112 | + 0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1, | |
| 6113 | + 0x2efae244, 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690, | |
| 6114 | + 0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933, | |
| 6115 | + 0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20, | |
| 6116 | + 0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, 0xdaa8c9cf, | |
| 6117 | + 0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc, | |
| 6118 | + 0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f, | |
| 6119 | + 0xfdd81cfa, 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92, | |
| 6120 | + 0xc036905c, 0x1da049d9, 0x60d34f81, 0xbd459604, 0x008ffaca, | |
| 6121 | + 0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4, | |
| 6122 | + 0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd, | |
| 6123 | + 0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de, | |
| 6124 | + 0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb, | |
| 6125 | + 0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8, | |
| 6126 | + 0x13146ee2, 0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474, | |
| 6127 | + 0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, 0x4917bd8f, 0x9481640a, | |
| 6128 | + 0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252, | |
| 6129 | + 0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6, | |
| 6130 | + 0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55, | |
| 6131 | + 0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846, | |
| 6132 | + 0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7, | |
| 6133 | + 0xa02dd872, 0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4, | |
| 6134 | + 0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, 0x875d0d47, | |
| 6135 | + 0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3, | |
| 6136 | + 0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb, | |
| 6137 | + 0xd493143e, 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5, | |
| 6138 | + 0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753, 0xae99ff49, | |
| 6139 | + 0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a, | |
| 6140 | + 0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f, | |
| 6141 | + 0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c, | |
| 6142 | + 0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305, | |
| 6143 | + 0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b, | |
| 6144 | + 0x20c13fb5, 0xfd57e630, 0x8024e068, 0x5db239ed, 0xe0785523, | |
| 6145 | + 0x3dee8ca6}}; | |
| 6146 | + | |
| 6147 | +local const z_word_t FAR crc_braid_big_table[][256] = { | |
| 6148 | + {0x00000000, 0x85d996dd, 0x4bb55c60, 0xce6ccabd, 0x966ab9c0, | |
| 6149 | + 0x13b32f1d, 0xdddfe5a0, 0x5806737d, 0x6dd3035a, 0xe80a9587, | |
| 6150 | + 0x26665f3a, 0xa3bfc9e7, 0xfbb9ba9a, 0x7e602c47, 0xb00ce6fa, | |
| 6151 | + 0x35d57027, 0xdaa607b4, 0x5f7f9169, 0x91135bd4, 0x14cacd09, | |
| 6152 | + 0x4cccbe74, 0xc91528a9, 0x0779e214, 0x82a074c9, 0xb77504ee, | |
| 6153 | + 0x32ac9233, 0xfcc0588e, 0x7919ce53, 0x211fbd2e, 0xa4c62bf3, | |
| 6154 | + 0x6aaae14e, 0xef737793, 0xf54b7eb3, 0x7092e86e, 0xbefe22d3, | |
| 6155 | + 0x3b27b40e, 0x6321c773, 0xe6f851ae, 0x28949b13, 0xad4d0dce, | |
| 6156 | + 0x98987de9, 0x1d41eb34, 0xd32d2189, 0x56f4b754, 0x0ef2c429, | |
| 6157 | + 0x8b2b52f4, 0x45479849, 0xc09e0e94, 0x2fed7907, 0xaa34efda, | |
| 6158 | + 0x64582567, 0xe181b3ba, 0xb987c0c7, 0x3c5e561a, 0xf2329ca7, | |
| 6159 | + 0x77eb0a7a, 0x423e7a5d, 0xc7e7ec80, 0x098b263d, 0x8c52b0e0, | |
| 6160 | + 0xd454c39d, 0x518d5540, 0x9fe19ffd, 0x1a380920, 0xab918dbd, | |
| 6161 | + 0x2e481b60, 0xe024d1dd, 0x65fd4700, 0x3dfb347d, 0xb822a2a0, | |
| 6162 | + 0x764e681d, 0xf397fec0, 0xc6428ee7, 0x439b183a, 0x8df7d287, | |
| 6163 | + 0x082e445a, 0x50283727, 0xd5f1a1fa, 0x1b9d6b47, 0x9e44fd9a, | |
| 6164 | + 0x71378a09, 0xf4ee1cd4, 0x3a82d669, 0xbf5b40b4, 0xe75d33c9, | |
| 6165 | + 0x6284a514, 0xace86fa9, 0x2931f974, 0x1ce48953, 0x993d1f8e, | |
| 6166 | + 0x5751d533, 0xd28843ee, 0x8a8e3093, 0x0f57a64e, 0xc13b6cf3, | |
| 6167 | + 0x44e2fa2e, 0x5edaf30e, 0xdb0365d3, 0x156faf6e, 0x90b639b3, | |
| 6168 | + 0xc8b04ace, 0x4d69dc13, 0x830516ae, 0x06dc8073, 0x3309f054, | |
| 6169 | + 0xb6d06689, 0x78bcac34, 0xfd653ae9, 0xa5634994, 0x20badf49, | |
| 6170 | + 0xeed615f4, 0x6b0f8329, 0x847cf4ba, 0x01a56267, 0xcfc9a8da, | |
| 6171 | + 0x4a103e07, 0x12164d7a, 0x97cfdba7, 0x59a3111a, 0xdc7a87c7, | |
| 6172 | + 0xe9aff7e0, 0x6c76613d, 0xa21aab80, 0x27c33d5d, 0x7fc54e20, | |
| 6173 | + 0xfa1cd8fd, 0x34701240, 0xb1a9849d, 0x17256aa0, 0x92fcfc7d, | |
| 6174 | + 0x5c9036c0, 0xd949a01d, 0x814fd360, 0x049645bd, 0xcafa8f00, | |
| 6175 | + 0x4f2319dd, 0x7af669fa, 0xff2fff27, 0x3143359a, 0xb49aa347, | |
| 6176 | + 0xec9cd03a, 0x694546e7, 0xa7298c5a, 0x22f01a87, 0xcd836d14, | |
| 6177 | + 0x485afbc9, 0x86363174, 0x03efa7a9, 0x5be9d4d4, 0xde304209, | |
| 6178 | + 0x105c88b4, 0x95851e69, 0xa0506e4e, 0x2589f893, 0xebe5322e, | |
| 6179 | + 0x6e3ca4f3, 0x363ad78e, 0xb3e34153, 0x7d8f8bee, 0xf8561d33, | |
| 6180 | + 0xe26e1413, 0x67b782ce, 0xa9db4873, 0x2c02deae, 0x7404add3, | |
| 6181 | + 0xf1dd3b0e, 0x3fb1f1b3, 0xba68676e, 0x8fbd1749, 0x0a648194, | |
| 6182 | + 0xc4084b29, 0x41d1ddf4, 0x19d7ae89, 0x9c0e3854, 0x5262f2e9, | |
| 6183 | + 0xd7bb6434, 0x38c813a7, 0xbd11857a, 0x737d4fc7, 0xf6a4d91a, | |
| 6184 | + 0xaea2aa67, 0x2b7b3cba, 0xe517f607, 0x60ce60da, 0x551b10fd, | |
| 6185 | + 0xd0c28620, 0x1eae4c9d, 0x9b77da40, 0xc371a93d, 0x46a83fe0, | |
| 6186 | + 0x88c4f55d, 0x0d1d6380, 0xbcb4e71d, 0x396d71c0, 0xf701bb7d, | |
| 6187 | + 0x72d82da0, 0x2ade5edd, 0xaf07c800, 0x616b02bd, 0xe4b29460, | |
| 6188 | + 0xd167e447, 0x54be729a, 0x9ad2b827, 0x1f0b2efa, 0x470d5d87, | |
| 6189 | + 0xc2d4cb5a, 0x0cb801e7, 0x8961973a, 0x6612e0a9, 0xe3cb7674, | |
| 6190 | + 0x2da7bcc9, 0xa87e2a14, 0xf0785969, 0x75a1cfb4, 0xbbcd0509, | |
| 6191 | + 0x3e1493d4, 0x0bc1e3f3, 0x8e18752e, 0x4074bf93, 0xc5ad294e, | |
| 6192 | + 0x9dab5a33, 0x1872ccee, 0xd61e0653, 0x53c7908e, 0x49ff99ae, | |
| 6193 | + 0xcc260f73, 0x024ac5ce, 0x87935313, 0xdf95206e, 0x5a4cb6b3, | |
| 6194 | + 0x94207c0e, 0x11f9ead3, 0x242c9af4, 0xa1f50c29, 0x6f99c694, | |
| 6195 | + 0xea405049, 0xb2462334, 0x379fb5e9, 0xf9f37f54, 0x7c2ae989, | |
| 6196 | + 0x93599e1a, 0x168008c7, 0xd8ecc27a, 0x5d3554a7, 0x053327da, | |
| 6197 | + 0x80eab107, 0x4e867bba, 0xcb5fed67, 0xfe8a9d40, 0x7b530b9d, | |
| 6198 | + 0xb53fc120, 0x30e657fd, 0x68e02480, 0xed39b25d, 0x235578e0, | |
| 6199 | + 0xa68cee3d}, | |
| 6200 | + {0x00000000, 0x76e10f9d, 0xadc46ee1, 0xdb25617c, 0x1b8fac19, | |
| 6201 | + 0x6d6ea384, 0xb64bc2f8, 0xc0aacd65, 0x361e5933, 0x40ff56ae, | |
| 6202 | + 0x9bda37d2, 0xed3b384f, 0x2d91f52a, 0x5b70fab7, 0x80559bcb, | |
| 6203 | + 0xf6b49456, 0x6c3cb266, 0x1addbdfb, 0xc1f8dc87, 0xb719d31a, | |
| 6204 | + 0x77b31e7f, 0x015211e2, 0xda77709e, 0xac967f03, 0x5a22eb55, | |
| 6205 | + 0x2cc3e4c8, 0xf7e685b4, 0x81078a29, 0x41ad474c, 0x374c48d1, | |
| 6206 | + 0xec6929ad, 0x9a882630, 0xd87864cd, 0xae996b50, 0x75bc0a2c, | |
| 6207 | + 0x035d05b1, 0xc3f7c8d4, 0xb516c749, 0x6e33a635, 0x18d2a9a8, | |
| 6208 | + 0xee663dfe, 0x98873263, 0x43a2531f, 0x35435c82, 0xf5e991e7, | |
| 6209 | + 0x83089e7a, 0x582dff06, 0x2eccf09b, 0xb444d6ab, 0xc2a5d936, | |
| 6210 | + 0x1980b84a, 0x6f61b7d7, 0xafcb7ab2, 0xd92a752f, 0x020f1453, | |
| 6211 | + 0x74ee1bce, 0x825a8f98, 0xf4bb8005, 0x2f9ee179, 0x597feee4, | |
| 6212 | + 0x99d52381, 0xef342c1c, 0x34114d60, 0x42f042fd, 0xf1f7b941, | |
| 6213 | + 0x8716b6dc, 0x5c33d7a0, 0x2ad2d83d, 0xea781558, 0x9c991ac5, | |
| 6214 | + 0x47bc7bb9, 0x315d7424, 0xc7e9e072, 0xb108efef, 0x6a2d8e93, | |
| 6215 | + 0x1ccc810e, 0xdc664c6b, 0xaa8743f6, 0x71a2228a, 0x07432d17, | |
| 6216 | + 0x9dcb0b27, 0xeb2a04ba, 0x300f65c6, 0x46ee6a5b, 0x8644a73e, | |
| 6217 | + 0xf0a5a8a3, 0x2b80c9df, 0x5d61c642, 0xabd55214, 0xdd345d89, | |
| 6218 | + 0x06113cf5, 0x70f03368, 0xb05afe0d, 0xc6bbf190, 0x1d9e90ec, | |
| 6219 | + 0x6b7f9f71, 0x298fdd8c, 0x5f6ed211, 0x844bb36d, 0xf2aabcf0, | |
| 6220 | + 0x32007195, 0x44e17e08, 0x9fc41f74, 0xe92510e9, 0x1f9184bf, | |
| 6221 | + 0x69708b22, 0xb255ea5e, 0xc4b4e5c3, 0x041e28a6, 0x72ff273b, | |
| 6222 | + 0xa9da4647, 0xdf3b49da, 0x45b36fea, 0x33526077, 0xe877010b, | |
| 6223 | + 0x9e960e96, 0x5e3cc3f3, 0x28ddcc6e, 0xf3f8ad12, 0x8519a28f, | |
| 6224 | + 0x73ad36d9, 0x054c3944, 0xde695838, 0xa88857a5, 0x68229ac0, | |
| 6225 | + 0x1ec3955d, 0xc5e6f421, 0xb307fbbc, 0xe2ef7383, 0x940e7c1e, | |
| 6226 | + 0x4f2b1d62, 0x39ca12ff, 0xf960df9a, 0x8f81d007, 0x54a4b17b, | |
| 6227 | + 0x2245bee6, 0xd4f12ab0, 0xa210252d, 0x79354451, 0x0fd44bcc, | |
| 6228 | + 0xcf7e86a9, 0xb99f8934, 0x62bae848, 0x145be7d5, 0x8ed3c1e5, | |
| 6229 | + 0xf832ce78, 0x2317af04, 0x55f6a099, 0x955c6dfc, 0xe3bd6261, | |
| 6230 | + 0x3898031d, 0x4e790c80, 0xb8cd98d6, 0xce2c974b, 0x1509f637, | |
| 6231 | + 0x63e8f9aa, 0xa34234cf, 0xd5a33b52, 0x0e865a2e, 0x786755b3, | |
| 6232 | + 0x3a97174e, 0x4c7618d3, 0x975379af, 0xe1b27632, 0x2118bb57, | |
| 6233 | + 0x57f9b4ca, 0x8cdcd5b6, 0xfa3dda2b, 0x0c894e7d, 0x7a6841e0, | |
| 6234 | + 0xa14d209c, 0xd7ac2f01, 0x1706e264, 0x61e7edf9, 0xbac28c85, | |
| 6235 | + 0xcc238318, 0x56aba528, 0x204aaab5, 0xfb6fcbc9, 0x8d8ec454, | |
| 6236 | + 0x4d240931, 0x3bc506ac, 0xe0e067d0, 0x9601684d, 0x60b5fc1b, | |
| 6237 | + 0x1654f386, 0xcd7192fa, 0xbb909d67, 0x7b3a5002, 0x0ddb5f9f, | |
| 6238 | + 0xd6fe3ee3, 0xa01f317e, 0x1318cac2, 0x65f9c55f, 0xbedca423, | |
| 6239 | + 0xc83dabbe, 0x089766db, 0x7e766946, 0xa553083a, 0xd3b207a7, | |
| 6240 | + 0x250693f1, 0x53e79c6c, 0x88c2fd10, 0xfe23f28d, 0x3e893fe8, | |
| 6241 | + 0x48683075, 0x934d5109, 0xe5ac5e94, 0x7f2478a4, 0x09c57739, | |
| 6242 | + 0xd2e01645, 0xa40119d8, 0x64abd4bd, 0x124adb20, 0xc96fba5c, | |
| 6243 | + 0xbf8eb5c1, 0x493a2197, 0x3fdb2e0a, 0xe4fe4f76, 0x921f40eb, | |
| 6244 | + 0x52b58d8e, 0x24548213, 0xff71e36f, 0x8990ecf2, 0xcb60ae0f, | |
| 6245 | + 0xbd81a192, 0x66a4c0ee, 0x1045cf73, 0xd0ef0216, 0xa60e0d8b, | |
| 6246 | + 0x7d2b6cf7, 0x0bca636a, 0xfd7ef73c, 0x8b9ff8a1, 0x50ba99dd, | |
| 6247 | + 0x265b9640, 0xe6f15b25, 0x901054b8, 0x4b3535c4, 0x3dd43a59, | |
| 6248 | + 0xa75c1c69, 0xd1bd13f4, 0x0a987288, 0x7c797d15, 0xbcd3b070, | |
| 6249 | + 0xca32bfed, 0x1117de91, 0x67f6d10c, 0x9142455a, 0xe7a34ac7, | |
| 6250 | + 0x3c862bbb, 0x4a672426, 0x8acde943, 0xfc2ce6de, 0x270987a2, | |
| 6251 | + 0x51e8883f}, | |
| 6252 | + {0x00000000, 0xe8dbfbb9, 0x91b186a8, 0x796a7d11, 0x63657c8a, | |
| 6253 | + 0x8bbe8733, 0xf2d4fa22, 0x1a0f019b, 0x87cc89cf, 0x6f177276, | |
| 6254 | + 0x167d0f67, 0xfea6f4de, 0xe4a9f545, 0x0c720efc, 0x751873ed, | |
| 6255 | + 0x9dc38854, 0x4f9f6244, 0xa74499fd, 0xde2ee4ec, 0x36f51f55, | |
| 6256 | + 0x2cfa1ece, 0xc421e577, 0xbd4b9866, 0x559063df, 0xc853eb8b, | |
| 6257 | + 0x20881032, 0x59e26d23, 0xb139969a, 0xab369701, 0x43ed6cb8, | |
| 6258 | + 0x3a8711a9, 0xd25cea10, 0x9e3ec588, 0x76e53e31, 0x0f8f4320, | |
| 6259 | + 0xe754b899, 0xfd5bb902, 0x158042bb, 0x6cea3faa, 0x8431c413, | |
| 6260 | + 0x19f24c47, 0xf129b7fe, 0x8843caef, 0x60983156, 0x7a9730cd, | |
| 6261 | + 0x924ccb74, 0xeb26b665, 0x03fd4ddc, 0xd1a1a7cc, 0x397a5c75, | |
| 6262 | + 0x40102164, 0xa8cbdadd, 0xb2c4db46, 0x5a1f20ff, 0x23755dee, | |
| 6263 | + 0xcbaea657, 0x566d2e03, 0xbeb6d5ba, 0xc7dca8ab, 0x2f075312, | |
| 6264 | + 0x35085289, 0xddd3a930, 0xa4b9d421, 0x4c622f98, 0x7d7bfbca, | |
| 6265 | + 0x95a00073, 0xecca7d62, 0x041186db, 0x1e1e8740, 0xf6c57cf9, | |
| 6266 | + 0x8faf01e8, 0x6774fa51, 0xfab77205, 0x126c89bc, 0x6b06f4ad, | |
| 6267 | + 0x83dd0f14, 0x99d20e8f, 0x7109f536, 0x08638827, 0xe0b8739e, | |
| 6268 | + 0x32e4998e, 0xda3f6237, 0xa3551f26, 0x4b8ee49f, 0x5181e504, | |
| 6269 | + 0xb95a1ebd, 0xc03063ac, 0x28eb9815, 0xb5281041, 0x5df3ebf8, | |
| 6270 | + 0x249996e9, 0xcc426d50, 0xd64d6ccb, 0x3e969772, 0x47fcea63, | |
| 6271 | + 0xaf2711da, 0xe3453e42, 0x0b9ec5fb, 0x72f4b8ea, 0x9a2f4353, | |
| 6272 | + 0x802042c8, 0x68fbb971, 0x1191c460, 0xf94a3fd9, 0x6489b78d, | |
| 6273 | + 0x8c524c34, 0xf5383125, 0x1de3ca9c, 0x07eccb07, 0xef3730be, | |
| 6274 | + 0x965d4daf, 0x7e86b616, 0xacda5c06, 0x4401a7bf, 0x3d6bdaae, | |
| 6275 | + 0xd5b02117, 0xcfbf208c, 0x2764db35, 0x5e0ea624, 0xb6d55d9d, | |
| 6276 | + 0x2b16d5c9, 0xc3cd2e70, 0xbaa75361, 0x527ca8d8, 0x4873a943, | |
| 6277 | + 0xa0a852fa, 0xd9c22feb, 0x3119d452, 0xbbf0874e, 0x532b7cf7, | |
| 6278 | + 0x2a4101e6, 0xc29afa5f, 0xd895fbc4, 0x304e007d, 0x49247d6c, | |
| 6279 | + 0xa1ff86d5, 0x3c3c0e81, 0xd4e7f538, 0xad8d8829, 0x45567390, | |
| 6280 | + 0x5f59720b, 0xb78289b2, 0xcee8f4a3, 0x26330f1a, 0xf46fe50a, | |
| 6281 | + 0x1cb41eb3, 0x65de63a2, 0x8d05981b, 0x970a9980, 0x7fd16239, | |
| 6282 | + 0x06bb1f28, 0xee60e491, 0x73a36cc5, 0x9b78977c, 0xe212ea6d, | |
| 6283 | + 0x0ac911d4, 0x10c6104f, 0xf81debf6, 0x817796e7, 0x69ac6d5e, | |
| 6284 | + 0x25ce42c6, 0xcd15b97f, 0xb47fc46e, 0x5ca43fd7, 0x46ab3e4c, | |
| 6285 | + 0xae70c5f5, 0xd71ab8e4, 0x3fc1435d, 0xa202cb09, 0x4ad930b0, | |
| 6286 | + 0x33b34da1, 0xdb68b618, 0xc167b783, 0x29bc4c3a, 0x50d6312b, | |
| 6287 | + 0xb80dca92, 0x6a512082, 0x828adb3b, 0xfbe0a62a, 0x133b5d93, | |
| 6288 | + 0x09345c08, 0xe1efa7b1, 0x9885daa0, 0x705e2119, 0xed9da94d, | |
| 6289 | + 0x054652f4, 0x7c2c2fe5, 0x94f7d45c, 0x8ef8d5c7, 0x66232e7e, | |
| 6290 | + 0x1f49536f, 0xf792a8d6, 0xc68b7c84, 0x2e50873d, 0x573afa2c, | |
| 6291 | + 0xbfe10195, 0xa5ee000e, 0x4d35fbb7, 0x345f86a6, 0xdc847d1f, | |
| 6292 | + 0x4147f54b, 0xa99c0ef2, 0xd0f673e3, 0x382d885a, 0x222289c1, | |
| 6293 | + 0xcaf97278, 0xb3930f69, 0x5b48f4d0, 0x89141ec0, 0x61cfe579, | |
| 6294 | + 0x18a59868, 0xf07e63d1, 0xea71624a, 0x02aa99f3, 0x7bc0e4e2, | |
| 6295 | + 0x931b1f5b, 0x0ed8970f, 0xe6036cb6, 0x9f6911a7, 0x77b2ea1e, | |
| 6296 | + 0x6dbdeb85, 0x8566103c, 0xfc0c6d2d, 0x14d79694, 0x58b5b90c, | |
| 6297 | + 0xb06e42b5, 0xc9043fa4, 0x21dfc41d, 0x3bd0c586, 0xd30b3e3f, | |
| 6298 | + 0xaa61432e, 0x42bab897, 0xdf7930c3, 0x37a2cb7a, 0x4ec8b66b, | |
| 6299 | + 0xa6134dd2, 0xbc1c4c49, 0x54c7b7f0, 0x2dadcae1, 0xc5763158, | |
| 6300 | + 0x172adb48, 0xfff120f1, 0x869b5de0, 0x6e40a659, 0x744fa7c2, | |
| 6301 | + 0x9c945c7b, 0xe5fe216a, 0x0d25dad3, 0x90e65287, 0x783da93e, | |
| 6302 | + 0x0157d42f, 0xe98c2f96, 0xf3832e0d, 0x1b58d5b4, 0x6232a8a5, | |
| 6303 | + 0x8ae9531c}, | |
| 6304 | + {0x00000000, 0x919168ae, 0x6325a087, 0xf2b4c829, 0x874c31d4, | |
| 6305 | + 0x16dd597a, 0xe4699153, 0x75f8f9fd, 0x4f9f1373, 0xde0e7bdd, | |
| 6306 | + 0x2cbab3f4, 0xbd2bdb5a, 0xc8d322a7, 0x59424a09, 0xabf68220, | |
| 6307 | + 0x3a67ea8e, 0x9e3e27e6, 0x0faf4f48, 0xfd1b8761, 0x6c8aefcf, | |
| 6308 | + 0x19721632, 0x88e37e9c, 0x7a57b6b5, 0xebc6de1b, 0xd1a13495, | |
| 6309 | + 0x40305c3b, 0xb2849412, 0x2315fcbc, 0x56ed0541, 0xc77c6def, | |
| 6310 | + 0x35c8a5c6, 0xa459cd68, 0x7d7b3f17, 0xecea57b9, 0x1e5e9f90, | |
| 6311 | + 0x8fcff73e, 0xfa370ec3, 0x6ba6666d, 0x9912ae44, 0x0883c6ea, | |
| 6312 | + 0x32e42c64, 0xa37544ca, 0x51c18ce3, 0xc050e44d, 0xb5a81db0, | |
| 6313 | + 0x2439751e, 0xd68dbd37, 0x471cd599, 0xe34518f1, 0x72d4705f, | |
| 6314 | + 0x8060b876, 0x11f1d0d8, 0x64092925, 0xf598418b, 0x072c89a2, | |
| 6315 | + 0x96bde10c, 0xacda0b82, 0x3d4b632c, 0xcfffab05, 0x5e6ec3ab, | |
| 6316 | + 0x2b963a56, 0xba0752f8, 0x48b39ad1, 0xd922f27f, 0xfaf67e2e, | |
| 6317 | + 0x6b671680, 0x99d3dea9, 0x0842b607, 0x7dba4ffa, 0xec2b2754, | |
| 6318 | + 0x1e9fef7d, 0x8f0e87d3, 0xb5696d5d, 0x24f805f3, 0xd64ccdda, | |
| 6319 | + 0x47dda574, 0x32255c89, 0xa3b43427, 0x5100fc0e, 0xc09194a0, | |
| 6320 | + 0x64c859c8, 0xf5593166, 0x07edf94f, 0x967c91e1, 0xe384681c, | |
| 6321 | + 0x721500b2, 0x80a1c89b, 0x1130a035, 0x2b574abb, 0xbac62215, | |
| 6322 | + 0x4872ea3c, 0xd9e38292, 0xac1b7b6f, 0x3d8a13c1, 0xcf3edbe8, | |
| 6323 | + 0x5eafb346, 0x878d4139, 0x161c2997, 0xe4a8e1be, 0x75398910, | |
| 6324 | + 0x00c170ed, 0x91501843, 0x63e4d06a, 0xf275b8c4, 0xc812524a, | |
| 6325 | + 0x59833ae4, 0xab37f2cd, 0x3aa69a63, 0x4f5e639e, 0xdecf0b30, | |
| 6326 | + 0x2c7bc319, 0xbdeaabb7, 0x19b366df, 0x88220e71, 0x7a96c658, | |
| 6327 | + 0xeb07aef6, 0x9eff570b, 0x0f6e3fa5, 0xfddaf78c, 0x6c4b9f22, | |
| 6328 | + 0x562c75ac, 0xc7bd1d02, 0x3509d52b, 0xa498bd85, 0xd1604478, | |
| 6329 | + 0x40f12cd6, 0xb245e4ff, 0x23d48c51, 0xf4edfd5c, 0x657c95f2, | |
| 6330 | + 0x97c85ddb, 0x06593575, 0x73a1cc88, 0xe230a426, 0x10846c0f, | |
| 6331 | + 0x811504a1, 0xbb72ee2f, 0x2ae38681, 0xd8574ea8, 0x49c62606, | |
| 6332 | + 0x3c3edffb, 0xadafb755, 0x5f1b7f7c, 0xce8a17d2, 0x6ad3daba, | |
| 6333 | + 0xfb42b214, 0x09f67a3d, 0x98671293, 0xed9feb6e, 0x7c0e83c0, | |
| 6334 | + 0x8eba4be9, 0x1f2b2347, 0x254cc9c9, 0xb4dda167, 0x4669694e, | |
| 6335 | + 0xd7f801e0, 0xa200f81d, 0x339190b3, 0xc125589a, 0x50b43034, | |
| 6336 | + 0x8996c24b, 0x1807aae5, 0xeab362cc, 0x7b220a62, 0x0edaf39f, | |
| 6337 | + 0x9f4b9b31, 0x6dff5318, 0xfc6e3bb6, 0xc609d138, 0x5798b996, | |
| 6338 | + 0xa52c71bf, 0x34bd1911, 0x4145e0ec, 0xd0d48842, 0x2260406b, | |
| 6339 | + 0xb3f128c5, 0x17a8e5ad, 0x86398d03, 0x748d452a, 0xe51c2d84, | |
| 6340 | + 0x90e4d479, 0x0175bcd7, 0xf3c174fe, 0x62501c50, 0x5837f6de, | |
| 6341 | + 0xc9a69e70, 0x3b125659, 0xaa833ef7, 0xdf7bc70a, 0x4eeaafa4, | |
| 6342 | + 0xbc5e678d, 0x2dcf0f23, 0x0e1b8372, 0x9f8aebdc, 0x6d3e23f5, | |
| 6343 | + 0xfcaf4b5b, 0x8957b2a6, 0x18c6da08, 0xea721221, 0x7be37a8f, | |
| 6344 | + 0x41849001, 0xd015f8af, 0x22a13086, 0xb3305828, 0xc6c8a1d5, | |
| 6345 | + 0x5759c97b, 0xa5ed0152, 0x347c69fc, 0x9025a494, 0x01b4cc3a, | |
| 6346 | + 0xf3000413, 0x62916cbd, 0x17699540, 0x86f8fdee, 0x744c35c7, | |
| 6347 | + 0xe5dd5d69, 0xdfbab7e7, 0x4e2bdf49, 0xbc9f1760, 0x2d0e7fce, | |
| 6348 | + 0x58f68633, 0xc967ee9d, 0x3bd326b4, 0xaa424e1a, 0x7360bc65, | |
| 6349 | + 0xe2f1d4cb, 0x10451ce2, 0x81d4744c, 0xf42c8db1, 0x65bde51f, | |
| 6350 | + 0x97092d36, 0x06984598, 0x3cffaf16, 0xad6ec7b8, 0x5fda0f91, | |
| 6351 | + 0xce4b673f, 0xbbb39ec2, 0x2a22f66c, 0xd8963e45, 0x490756eb, | |
| 6352 | + 0xed5e9b83, 0x7ccff32d, 0x8e7b3b04, 0x1fea53aa, 0x6a12aa57, | |
| 6353 | + 0xfb83c2f9, 0x09370ad0, 0x98a6627e, 0xa2c188f0, 0x3350e05e, | |
| 6354 | + 0xc1e42877, 0x507540d9, 0x258db924, 0xb41cd18a, 0x46a819a3, | |
| 6355 | + 0xd739710d}}; | |
| 6356 | + | |
| 6357 | +#endif | |
| 6358 | + | |
| 6359 | +#endif | |
| 6360 | + | |
| 6361 | +#if N == 5 | |
| 6362 | + | |
| 6363 | +#if W == 8 | |
| 6364 | + | |
| 6365 | +local const z_crc_t FAR crc_braid_table[][256] = { | |
| 6366 | + {0x00000000, 0xaf449247, 0x85f822cf, 0x2abcb088, 0xd08143df, | |
| 6367 | + 0x7fc5d198, 0x55796110, 0xfa3df357, 0x7a7381ff, 0xd53713b8, | |
| 6368 | + 0xff8ba330, 0x50cf3177, 0xaaf2c220, 0x05b65067, 0x2f0ae0ef, | |
| 6369 | + 0x804e72a8, 0xf4e703fe, 0x5ba391b9, 0x711f2131, 0xde5bb376, | |
| 6370 | + 0x24664021, 0x8b22d266, 0xa19e62ee, 0x0edaf0a9, 0x8e948201, | |
| 6371 | + 0x21d01046, 0x0b6ca0ce, 0xa4283289, 0x5e15c1de, 0xf1515399, | |
| 6372 | + 0xdbede311, 0x74a97156, 0x32bf01bd, 0x9dfb93fa, 0xb7472372, | |
| 6373 | + 0x1803b135, 0xe23e4262, 0x4d7ad025, 0x67c660ad, 0xc882f2ea, | |
| 6374 | + 0x48cc8042, 0xe7881205, 0xcd34a28d, 0x627030ca, 0x984dc39d, | |
| 6375 | + 0x370951da, 0x1db5e152, 0xb2f17315, 0xc6580243, 0x691c9004, | |
| 6376 | + 0x43a0208c, 0xece4b2cb, 0x16d9419c, 0xb99dd3db, 0x93216353, | |
| 6377 | + 0x3c65f114, 0xbc2b83bc, 0x136f11fb, 0x39d3a173, 0x96973334, | |
| 6378 | + 0x6caac063, 0xc3ee5224, 0xe952e2ac, 0x461670eb, 0x657e037a, | |
| 6379 | + 0xca3a913d, 0xe08621b5, 0x4fc2b3f2, 0xb5ff40a5, 0x1abbd2e2, | |
| 6380 | + 0x3007626a, 0x9f43f02d, 0x1f0d8285, 0xb04910c2, 0x9af5a04a, | |
| 6381 | + 0x35b1320d, 0xcf8cc15a, 0x60c8531d, 0x4a74e395, 0xe53071d2, | |
| 6382 | + 0x91990084, 0x3edd92c3, 0x1461224b, 0xbb25b00c, 0x4118435b, | |
| 6383 | + 0xee5cd11c, 0xc4e06194, 0x6ba4f3d3, 0xebea817b, 0x44ae133c, | |
| 6384 | + 0x6e12a3b4, 0xc15631f3, 0x3b6bc2a4, 0x942f50e3, 0xbe93e06b, | |
| 6385 | + 0x11d7722c, 0x57c102c7, 0xf8859080, 0xd2392008, 0x7d7db24f, | |
| 6386 | + 0x87404118, 0x2804d35f, 0x02b863d7, 0xadfcf190, 0x2db28338, | |
| 6387 | + 0x82f6117f, 0xa84aa1f7, 0x070e33b0, 0xfd33c0e7, 0x527752a0, | |
| 6388 | + 0x78cbe228, 0xd78f706f, 0xa3260139, 0x0c62937e, 0x26de23f6, | |
| 6389 | + 0x899ab1b1, 0x73a742e6, 0xdce3d0a1, 0xf65f6029, 0x591bf26e, | |
| 6390 | + 0xd95580c6, 0x76111281, 0x5cada209, 0xf3e9304e, 0x09d4c319, | |
| 6391 | + 0xa690515e, 0x8c2ce1d6, 0x23687391, 0xcafc06f4, 0x65b894b3, | |
| 6392 | + 0x4f04243b, 0xe040b67c, 0x1a7d452b, 0xb539d76c, 0x9f8567e4, | |
| 6393 | + 0x30c1f5a3, 0xb08f870b, 0x1fcb154c, 0x3577a5c4, 0x9a333783, | |
| 6394 | + 0x600ec4d4, 0xcf4a5693, 0xe5f6e61b, 0x4ab2745c, 0x3e1b050a, | |
| 6395 | + 0x915f974d, 0xbbe327c5, 0x14a7b582, 0xee9a46d5, 0x41ded492, | |
| 6396 | + 0x6b62641a, 0xc426f65d, 0x446884f5, 0xeb2c16b2, 0xc190a63a, | |
| 6397 | + 0x6ed4347d, 0x94e9c72a, 0x3bad556d, 0x1111e5e5, 0xbe5577a2, | |
| 6398 | + 0xf8430749, 0x5707950e, 0x7dbb2586, 0xd2ffb7c1, 0x28c24496, | |
| 6399 | + 0x8786d6d1, 0xad3a6659, 0x027ef41e, 0x823086b6, 0x2d7414f1, | |
| 6400 | + 0x07c8a479, 0xa88c363e, 0x52b1c569, 0xfdf5572e, 0xd749e7a6, | |
| 6401 | + 0x780d75e1, 0x0ca404b7, 0xa3e096f0, 0x895c2678, 0x2618b43f, | |
| 6402 | + 0xdc254768, 0x7361d52f, 0x59dd65a7, 0xf699f7e0, 0x76d78548, | |
| 6403 | + 0xd993170f, 0xf32fa787, 0x5c6b35c0, 0xa656c697, 0x091254d0, | |
| 6404 | + 0x23aee458, 0x8cea761f, 0xaf82058e, 0x00c697c9, 0x2a7a2741, | |
| 6405 | + 0x853eb506, 0x7f034651, 0xd047d416, 0xfafb649e, 0x55bff6d9, | |
| 6406 | + 0xd5f18471, 0x7ab51636, 0x5009a6be, 0xff4d34f9, 0x0570c7ae, | |
| 6407 | + 0xaa3455e9, 0x8088e561, 0x2fcc7726, 0x5b650670, 0xf4219437, | |
| 6408 | + 0xde9d24bf, 0x71d9b6f8, 0x8be445af, 0x24a0d7e8, 0x0e1c6760, | |
| 6409 | + 0xa158f527, 0x2116878f, 0x8e5215c8, 0xa4eea540, 0x0baa3707, | |
| 6410 | + 0xf197c450, 0x5ed35617, 0x746fe69f, 0xdb2b74d8, 0x9d3d0433, | |
| 6411 | + 0x32799674, 0x18c526fc, 0xb781b4bb, 0x4dbc47ec, 0xe2f8d5ab, | |
| 6412 | + 0xc8446523, 0x6700f764, 0xe74e85cc, 0x480a178b, 0x62b6a703, | |
| 6413 | + 0xcdf23544, 0x37cfc613, 0x988b5454, 0xb237e4dc, 0x1d73769b, | |
| 6414 | + 0x69da07cd, 0xc69e958a, 0xec222502, 0x4366b745, 0xb95b4412, | |
| 6415 | + 0x161fd655, 0x3ca366dd, 0x93e7f49a, 0x13a98632, 0xbced1475, | |
| 6416 | + 0x9651a4fd, 0x391536ba, 0xc328c5ed, 0x6c6c57aa, 0x46d0e722, | |
| 6417 | + 0xe9947565}, | |
| 6418 | + {0x00000000, 0x4e890ba9, 0x9d121752, 0xd39b1cfb, 0xe15528e5, | |
| 6419 | + 0xafdc234c, 0x7c473fb7, 0x32ce341e, 0x19db578b, 0x57525c22, | |
| 6420 | + 0x84c940d9, 0xca404b70, 0xf88e7f6e, 0xb60774c7, 0x659c683c, | |
| 6421 | + 0x2b156395, 0x33b6af16, 0x7d3fa4bf, 0xaea4b844, 0xe02db3ed, | |
| 6422 | + 0xd2e387f3, 0x9c6a8c5a, 0x4ff190a1, 0x01789b08, 0x2a6df89d, | |
| 6423 | + 0x64e4f334, 0xb77fefcf, 0xf9f6e466, 0xcb38d078, 0x85b1dbd1, | |
| 6424 | + 0x562ac72a, 0x18a3cc83, 0x676d5e2c, 0x29e45585, 0xfa7f497e, | |
| 6425 | + 0xb4f642d7, 0x863876c9, 0xc8b17d60, 0x1b2a619b, 0x55a36a32, | |
| 6426 | + 0x7eb609a7, 0x303f020e, 0xe3a41ef5, 0xad2d155c, 0x9fe32142, | |
| 6427 | + 0xd16a2aeb, 0x02f13610, 0x4c783db9, 0x54dbf13a, 0x1a52fa93, | |
| 6428 | + 0xc9c9e668, 0x8740edc1, 0xb58ed9df, 0xfb07d276, 0x289cce8d, | |
| 6429 | + 0x6615c524, 0x4d00a6b1, 0x0389ad18, 0xd012b1e3, 0x9e9bba4a, | |
| 6430 | + 0xac558e54, 0xe2dc85fd, 0x31479906, 0x7fce92af, 0xcedabc58, | |
| 6431 | + 0x8053b7f1, 0x53c8ab0a, 0x1d41a0a3, 0x2f8f94bd, 0x61069f14, | |
| 6432 | + 0xb29d83ef, 0xfc148846, 0xd701ebd3, 0x9988e07a, 0x4a13fc81, | |
| 6433 | + 0x049af728, 0x3654c336, 0x78ddc89f, 0xab46d464, 0xe5cfdfcd, | |
| 6434 | + 0xfd6c134e, 0xb3e518e7, 0x607e041c, 0x2ef70fb5, 0x1c393bab, | |
| 6435 | + 0x52b03002, 0x812b2cf9, 0xcfa22750, 0xe4b744c5, 0xaa3e4f6c, | |
| 6436 | + 0x79a55397, 0x372c583e, 0x05e26c20, 0x4b6b6789, 0x98f07b72, | |
| 6437 | + 0xd67970db, 0xa9b7e274, 0xe73ee9dd, 0x34a5f526, 0x7a2cfe8f, | |
| 6438 | + 0x48e2ca91, 0x066bc138, 0xd5f0ddc3, 0x9b79d66a, 0xb06cb5ff, | |
| 6439 | + 0xfee5be56, 0x2d7ea2ad, 0x63f7a904, 0x51399d1a, 0x1fb096b3, | |
| 6440 | + 0xcc2b8a48, 0x82a281e1, 0x9a014d62, 0xd48846cb, 0x07135a30, | |
| 6441 | + 0x499a5199, 0x7b546587, 0x35dd6e2e, 0xe64672d5, 0xa8cf797c, | |
| 6442 | + 0x83da1ae9, 0xcd531140, 0x1ec80dbb, 0x50410612, 0x628f320c, | |
| 6443 | + 0x2c0639a5, 0xff9d255e, 0xb1142ef7, 0x46c47ef1, 0x084d7558, | |
| 6444 | + 0xdbd669a3, 0x955f620a, 0xa7915614, 0xe9185dbd, 0x3a834146, | |
| 6445 | + 0x740a4aef, 0x5f1f297a, 0x119622d3, 0xc20d3e28, 0x8c843581, | |
| 6446 | + 0xbe4a019f, 0xf0c30a36, 0x235816cd, 0x6dd11d64, 0x7572d1e7, | |
| 6447 | + 0x3bfbda4e, 0xe860c6b5, 0xa6e9cd1c, 0x9427f902, 0xdaaef2ab, | |
| 6448 | + 0x0935ee50, 0x47bce5f9, 0x6ca9866c, 0x22208dc5, 0xf1bb913e, | |
| 6449 | + 0xbf329a97, 0x8dfcae89, 0xc375a520, 0x10eeb9db, 0x5e67b272, | |
| 6450 | + 0x21a920dd, 0x6f202b74, 0xbcbb378f, 0xf2323c26, 0xc0fc0838, | |
| 6451 | + 0x8e750391, 0x5dee1f6a, 0x136714c3, 0x38727756, 0x76fb7cff, | |
| 6452 | + 0xa5606004, 0xebe96bad, 0xd9275fb3, 0x97ae541a, 0x443548e1, | |
| 6453 | + 0x0abc4348, 0x121f8fcb, 0x5c968462, 0x8f0d9899, 0xc1849330, | |
| 6454 | + 0xf34aa72e, 0xbdc3ac87, 0x6e58b07c, 0x20d1bbd5, 0x0bc4d840, | |
| 6455 | + 0x454dd3e9, 0x96d6cf12, 0xd85fc4bb, 0xea91f0a5, 0xa418fb0c, | |
| 6456 | + 0x7783e7f7, 0x390aec5e, 0x881ec2a9, 0xc697c900, 0x150cd5fb, | |
| 6457 | + 0x5b85de52, 0x694bea4c, 0x27c2e1e5, 0xf459fd1e, 0xbad0f6b7, | |
| 6458 | + 0x91c59522, 0xdf4c9e8b, 0x0cd78270, 0x425e89d9, 0x7090bdc7, | |
| 6459 | + 0x3e19b66e, 0xed82aa95, 0xa30ba13c, 0xbba86dbf, 0xf5216616, | |
| 6460 | + 0x26ba7aed, 0x68337144, 0x5afd455a, 0x14744ef3, 0xc7ef5208, | |
| 6461 | + 0x896659a1, 0xa2733a34, 0xecfa319d, 0x3f612d66, 0x71e826cf, | |
| 6462 | + 0x432612d1, 0x0daf1978, 0xde340583, 0x90bd0e2a, 0xef739c85, | |
| 6463 | + 0xa1fa972c, 0x72618bd7, 0x3ce8807e, 0x0e26b460, 0x40afbfc9, | |
| 6464 | + 0x9334a332, 0xddbda89b, 0xf6a8cb0e, 0xb821c0a7, 0x6bbadc5c, | |
| 6465 | + 0x2533d7f5, 0x17fde3eb, 0x5974e842, 0x8aeff4b9, 0xc466ff10, | |
| 6466 | + 0xdcc53393, 0x924c383a, 0x41d724c1, 0x0f5e2f68, 0x3d901b76, | |
| 6467 | + 0x731910df, 0xa0820c24, 0xee0b078d, 0xc51e6418, 0x8b976fb1, | |
| 6468 | + 0x580c734a, 0x168578e3, 0x244b4cfd, 0x6ac24754, 0xb9595baf, | |
| 6469 | + 0xf7d05006}, | |
| 6470 | + {0x00000000, 0x8d88fde2, 0xc060fd85, 0x4de80067, 0x5bb0fd4b, | |
| 6471 | + 0xd63800a9, 0x9bd000ce, 0x1658fd2c, 0xb761fa96, 0x3ae90774, | |
| 6472 | + 0x77010713, 0xfa89faf1, 0xecd107dd, 0x6159fa3f, 0x2cb1fa58, | |
| 6473 | + 0xa13907ba, 0xb5b2f36d, 0x383a0e8f, 0x75d20ee8, 0xf85af30a, | |
| 6474 | + 0xee020e26, 0x638af3c4, 0x2e62f3a3, 0xa3ea0e41, 0x02d309fb, | |
| 6475 | + 0x8f5bf419, 0xc2b3f47e, 0x4f3b099c, 0x5963f4b0, 0xd4eb0952, | |
| 6476 | + 0x99030935, 0x148bf4d7, 0xb014e09b, 0x3d9c1d79, 0x70741d1e, | |
| 6477 | + 0xfdfce0fc, 0xeba41dd0, 0x662ce032, 0x2bc4e055, 0xa64c1db7, | |
| 6478 | + 0x07751a0d, 0x8afde7ef, 0xc715e788, 0x4a9d1a6a, 0x5cc5e746, | |
| 6479 | + 0xd14d1aa4, 0x9ca51ac3, 0x112de721, 0x05a613f6, 0x882eee14, | |
| 6480 | + 0xc5c6ee73, 0x484e1391, 0x5e16eebd, 0xd39e135f, 0x9e761338, | |
| 6481 | + 0x13feeeda, 0xb2c7e960, 0x3f4f1482, 0x72a714e5, 0xff2fe907, | |
| 6482 | + 0xe977142b, 0x64ffe9c9, 0x2917e9ae, 0xa49f144c, 0xbb58c777, | |
| 6483 | + 0x36d03a95, 0x7b383af2, 0xf6b0c710, 0xe0e83a3c, 0x6d60c7de, | |
| 6484 | + 0x2088c7b9, 0xad003a5b, 0x0c393de1, 0x81b1c003, 0xcc59c064, | |
| 6485 | + 0x41d13d86, 0x5789c0aa, 0xda013d48, 0x97e93d2f, 0x1a61c0cd, | |
| 6486 | + 0x0eea341a, 0x8362c9f8, 0xce8ac99f, 0x4302347d, 0x555ac951, | |
| 6487 | + 0xd8d234b3, 0x953a34d4, 0x18b2c936, 0xb98bce8c, 0x3403336e, | |
| 6488 | + 0x79eb3309, 0xf463ceeb, 0xe23b33c7, 0x6fb3ce25, 0x225bce42, | |
| 6489 | + 0xafd333a0, 0x0b4c27ec, 0x86c4da0e, 0xcb2cda69, 0x46a4278b, | |
| 6490 | + 0x50fcdaa7, 0xdd742745, 0x909c2722, 0x1d14dac0, 0xbc2ddd7a, | |
| 6491 | + 0x31a52098, 0x7c4d20ff, 0xf1c5dd1d, 0xe79d2031, 0x6a15ddd3, | |
| 6492 | + 0x27fdddb4, 0xaa752056, 0xbefed481, 0x33762963, 0x7e9e2904, | |
| 6493 | + 0xf316d4e6, 0xe54e29ca, 0x68c6d428, 0x252ed44f, 0xa8a629ad, | |
| 6494 | + 0x099f2e17, 0x8417d3f5, 0xc9ffd392, 0x44772e70, 0x522fd35c, | |
| 6495 | + 0xdfa72ebe, 0x924f2ed9, 0x1fc7d33b, 0xadc088af, 0x2048754d, | |
| 6496 | + 0x6da0752a, 0xe02888c8, 0xf67075e4, 0x7bf88806, 0x36108861, | |
| 6497 | + 0xbb987583, 0x1aa17239, 0x97298fdb, 0xdac18fbc, 0x5749725e, | |
| 6498 | + 0x41118f72, 0xcc997290, 0x817172f7, 0x0cf98f15, 0x18727bc2, | |
| 6499 | + 0x95fa8620, 0xd8128647, 0x559a7ba5, 0x43c28689, 0xce4a7b6b, | |
| 6500 | + 0x83a27b0c, 0x0e2a86ee, 0xaf138154, 0x229b7cb6, 0x6f737cd1, | |
| 6501 | + 0xe2fb8133, 0xf4a37c1f, 0x792b81fd, 0x34c3819a, 0xb94b7c78, | |
| 6502 | + 0x1dd46834, 0x905c95d6, 0xddb495b1, 0x503c6853, 0x4664957f, | |
| 6503 | + 0xcbec689d, 0x860468fa, 0x0b8c9518, 0xaab592a2, 0x273d6f40, | |
| 6504 | + 0x6ad56f27, 0xe75d92c5, 0xf1056fe9, 0x7c8d920b, 0x3165926c, | |
| 6505 | + 0xbced6f8e, 0xa8669b59, 0x25ee66bb, 0x680666dc, 0xe58e9b3e, | |
| 6506 | + 0xf3d66612, 0x7e5e9bf0, 0x33b69b97, 0xbe3e6675, 0x1f0761cf, | |
| 6507 | + 0x928f9c2d, 0xdf679c4a, 0x52ef61a8, 0x44b79c84, 0xc93f6166, | |
| 6508 | + 0x84d76101, 0x095f9ce3, 0x16984fd8, 0x9b10b23a, 0xd6f8b25d, | |
| 6509 | + 0x5b704fbf, 0x4d28b293, 0xc0a04f71, 0x8d484f16, 0x00c0b2f4, | |
| 6510 | + 0xa1f9b54e, 0x2c7148ac, 0x619948cb, 0xec11b529, 0xfa494805, | |
| 6511 | + 0x77c1b5e7, 0x3a29b580, 0xb7a14862, 0xa32abcb5, 0x2ea24157, | |
| 6512 | + 0x634a4130, 0xeec2bcd2, 0xf89a41fe, 0x7512bc1c, 0x38fabc7b, | |
| 6513 | + 0xb5724199, 0x144b4623, 0x99c3bbc1, 0xd42bbba6, 0x59a34644, | |
| 6514 | + 0x4ffbbb68, 0xc273468a, 0x8f9b46ed, 0x0213bb0f, 0xa68caf43, | |
| 6515 | + 0x2b0452a1, 0x66ec52c6, 0xeb64af24, 0xfd3c5208, 0x70b4afea, | |
| 6516 | + 0x3d5caf8d, 0xb0d4526f, 0x11ed55d5, 0x9c65a837, 0xd18da850, | |
| 6517 | + 0x5c0555b2, 0x4a5da89e, 0xc7d5557c, 0x8a3d551b, 0x07b5a8f9, | |
| 6518 | + 0x133e5c2e, 0x9eb6a1cc, 0xd35ea1ab, 0x5ed65c49, 0x488ea165, | |
| 6519 | + 0xc5065c87, 0x88ee5ce0, 0x0566a102, 0xa45fa6b8, 0x29d75b5a, | |
| 6520 | + 0x643f5b3d, 0xe9b7a6df, 0xffef5bf3, 0x7267a611, 0x3f8fa676, | |
| 6521 | + 0xb2075b94}, | |
| 6522 | + {0x00000000, 0x80f0171f, 0xda91287f, 0x5a613f60, 0x6e5356bf, | |
| 6523 | + 0xeea341a0, 0xb4c27ec0, 0x343269df, 0xdca6ad7e, 0x5c56ba61, | |
| 6524 | + 0x06378501, 0x86c7921e, 0xb2f5fbc1, 0x3205ecde, 0x6864d3be, | |
| 6525 | + 0xe894c4a1, 0x623c5cbd, 0xe2cc4ba2, 0xb8ad74c2, 0x385d63dd, | |
| 6526 | + 0x0c6f0a02, 0x8c9f1d1d, 0xd6fe227d, 0x560e3562, 0xbe9af1c3, | |
| 6527 | + 0x3e6ae6dc, 0x640bd9bc, 0xe4fbcea3, 0xd0c9a77c, 0x5039b063, | |
| 6528 | + 0x0a588f03, 0x8aa8981c, 0xc478b97a, 0x4488ae65, 0x1ee99105, | |
| 6529 | + 0x9e19861a, 0xaa2befc5, 0x2adbf8da, 0x70bac7ba, 0xf04ad0a5, | |
| 6530 | + 0x18de1404, 0x982e031b, 0xc24f3c7b, 0x42bf2b64, 0x768d42bb, | |
| 6531 | + 0xf67d55a4, 0xac1c6ac4, 0x2cec7ddb, 0xa644e5c7, 0x26b4f2d8, | |
| 6532 | + 0x7cd5cdb8, 0xfc25daa7, 0xc817b378, 0x48e7a467, 0x12869b07, | |
| 6533 | + 0x92768c18, 0x7ae248b9, 0xfa125fa6, 0xa07360c6, 0x208377d9, | |
| 6534 | + 0x14b11e06, 0x94410919, 0xce203679, 0x4ed02166, 0x538074b5, | |
| 6535 | + 0xd37063aa, 0x89115cca, 0x09e14bd5, 0x3dd3220a, 0xbd233515, | |
| 6536 | + 0xe7420a75, 0x67b21d6a, 0x8f26d9cb, 0x0fd6ced4, 0x55b7f1b4, | |
| 6537 | + 0xd547e6ab, 0xe1758f74, 0x6185986b, 0x3be4a70b, 0xbb14b014, | |
| 6538 | + 0x31bc2808, 0xb14c3f17, 0xeb2d0077, 0x6bdd1768, 0x5fef7eb7, | |
| 6539 | + 0xdf1f69a8, 0x857e56c8, 0x058e41d7, 0xed1a8576, 0x6dea9269, | |
| 6540 | + 0x378bad09, 0xb77bba16, 0x8349d3c9, 0x03b9c4d6, 0x59d8fbb6, | |
| 6541 | + 0xd928eca9, 0x97f8cdcf, 0x1708dad0, 0x4d69e5b0, 0xcd99f2af, | |
| 6542 | + 0xf9ab9b70, 0x795b8c6f, 0x233ab30f, 0xa3caa410, 0x4b5e60b1, | |
| 6543 | + 0xcbae77ae, 0x91cf48ce, 0x113f5fd1, 0x250d360e, 0xa5fd2111, | |
| 6544 | + 0xff9c1e71, 0x7f6c096e, 0xf5c49172, 0x7534866d, 0x2f55b90d, | |
| 6545 | + 0xafa5ae12, 0x9b97c7cd, 0x1b67d0d2, 0x4106efb2, 0xc1f6f8ad, | |
| 6546 | + 0x29623c0c, 0xa9922b13, 0xf3f31473, 0x7303036c, 0x47316ab3, | |
| 6547 | + 0xc7c17dac, 0x9da042cc, 0x1d5055d3, 0xa700e96a, 0x27f0fe75, | |
| 6548 | + 0x7d91c115, 0xfd61d60a, 0xc953bfd5, 0x49a3a8ca, 0x13c297aa, | |
| 6549 | + 0x933280b5, 0x7ba64414, 0xfb56530b, 0xa1376c6b, 0x21c77b74, | |
| 6550 | + 0x15f512ab, 0x950505b4, 0xcf643ad4, 0x4f942dcb, 0xc53cb5d7, | |
| 6551 | + 0x45cca2c8, 0x1fad9da8, 0x9f5d8ab7, 0xab6fe368, 0x2b9ff477, | |
| 6552 | + 0x71fecb17, 0xf10edc08, 0x199a18a9, 0x996a0fb6, 0xc30b30d6, | |
| 6553 | + 0x43fb27c9, 0x77c94e16, 0xf7395909, 0xad586669, 0x2da87176, | |
| 6554 | + 0x63785010, 0xe388470f, 0xb9e9786f, 0x39196f70, 0x0d2b06af, | |
| 6555 | + 0x8ddb11b0, 0xd7ba2ed0, 0x574a39cf, 0xbfdefd6e, 0x3f2eea71, | |
| 6556 | + 0x654fd511, 0xe5bfc20e, 0xd18dabd1, 0x517dbcce, 0x0b1c83ae, | |
| 6557 | + 0x8bec94b1, 0x01440cad, 0x81b41bb2, 0xdbd524d2, 0x5b2533cd, | |
| 6558 | + 0x6f175a12, 0xefe74d0d, 0xb586726d, 0x35766572, 0xdde2a1d3, | |
| 6559 | + 0x5d12b6cc, 0x077389ac, 0x87839eb3, 0xb3b1f76c, 0x3341e073, | |
| 6560 | + 0x6920df13, 0xe9d0c80c, 0xf4809ddf, 0x74708ac0, 0x2e11b5a0, | |
| 6561 | + 0xaee1a2bf, 0x9ad3cb60, 0x1a23dc7f, 0x4042e31f, 0xc0b2f400, | |
| 6562 | + 0x282630a1, 0xa8d627be, 0xf2b718de, 0x72470fc1, 0x4675661e, | |
| 6563 | + 0xc6857101, 0x9ce44e61, 0x1c14597e, 0x96bcc162, 0x164cd67d, | |
| 6564 | + 0x4c2de91d, 0xccddfe02, 0xf8ef97dd, 0x781f80c2, 0x227ebfa2, | |
| 6565 | + 0xa28ea8bd, 0x4a1a6c1c, 0xcaea7b03, 0x908b4463, 0x107b537c, | |
| 6566 | + 0x24493aa3, 0xa4b92dbc, 0xfed812dc, 0x7e2805c3, 0x30f824a5, | |
| 6567 | + 0xb00833ba, 0xea690cda, 0x6a991bc5, 0x5eab721a, 0xde5b6505, | |
| 6568 | + 0x843a5a65, 0x04ca4d7a, 0xec5e89db, 0x6cae9ec4, 0x36cfa1a4, | |
| 6569 | + 0xb63fb6bb, 0x820ddf64, 0x02fdc87b, 0x589cf71b, 0xd86ce004, | |
| 6570 | + 0x52c47818, 0xd2346f07, 0x88555067, 0x08a54778, 0x3c972ea7, | |
| 6571 | + 0xbc6739b8, 0xe60606d8, 0x66f611c7, 0x8e62d566, 0x0e92c279, | |
| 6572 | + 0x54f3fd19, 0xd403ea06, 0xe03183d9, 0x60c194c6, 0x3aa0aba6, | |
| 6573 | + 0xba50bcb9}, | |
| 6574 | + {0x00000000, 0x9570d495, 0xf190af6b, 0x64e07bfe, 0x38505897, | |
| 6575 | + 0xad208c02, 0xc9c0f7fc, 0x5cb02369, 0x70a0b12e, 0xe5d065bb, | |
| 6576 | + 0x81301e45, 0x1440cad0, 0x48f0e9b9, 0xdd803d2c, 0xb96046d2, | |
| 6577 | + 0x2c109247, 0xe141625c, 0x7431b6c9, 0x10d1cd37, 0x85a119a2, | |
| 6578 | + 0xd9113acb, 0x4c61ee5e, 0x288195a0, 0xbdf14135, 0x91e1d372, | |
| 6579 | + 0x049107e7, 0x60717c19, 0xf501a88c, 0xa9b18be5, 0x3cc15f70, | |
| 6580 | + 0x5821248e, 0xcd51f01b, 0x19f3c2f9, 0x8c83166c, 0xe8636d92, | |
| 6581 | + 0x7d13b907, 0x21a39a6e, 0xb4d34efb, 0xd0333505, 0x4543e190, | |
| 6582 | + 0x695373d7, 0xfc23a742, 0x98c3dcbc, 0x0db30829, 0x51032b40, | |
| 6583 | + 0xc473ffd5, 0xa093842b, 0x35e350be, 0xf8b2a0a5, 0x6dc27430, | |
| 6584 | + 0x09220fce, 0x9c52db5b, 0xc0e2f832, 0x55922ca7, 0x31725759, | |
| 6585 | + 0xa40283cc, 0x8812118b, 0x1d62c51e, 0x7982bee0, 0xecf26a75, | |
| 6586 | + 0xb042491c, 0x25329d89, 0x41d2e677, 0xd4a232e2, 0x33e785f2, | |
| 6587 | + 0xa6975167, 0xc2772a99, 0x5707fe0c, 0x0bb7dd65, 0x9ec709f0, | |
| 6588 | + 0xfa27720e, 0x6f57a69b, 0x434734dc, 0xd637e049, 0xb2d79bb7, | |
| 6589 | + 0x27a74f22, 0x7b176c4b, 0xee67b8de, 0x8a87c320, 0x1ff717b5, | |
| 6590 | + 0xd2a6e7ae, 0x47d6333b, 0x233648c5, 0xb6469c50, 0xeaf6bf39, | |
| 6591 | + 0x7f866bac, 0x1b661052, 0x8e16c4c7, 0xa2065680, 0x37768215, | |
| 6592 | + 0x5396f9eb, 0xc6e62d7e, 0x9a560e17, 0x0f26da82, 0x6bc6a17c, | |
| 6593 | + 0xfeb675e9, 0x2a14470b, 0xbf64939e, 0xdb84e860, 0x4ef43cf5, | |
| 6594 | + 0x12441f9c, 0x8734cb09, 0xe3d4b0f7, 0x76a46462, 0x5ab4f625, | |
| 6595 | + 0xcfc422b0, 0xab24594e, 0x3e548ddb, 0x62e4aeb2, 0xf7947a27, | |
| 6596 | + 0x937401d9, 0x0604d54c, 0xcb552557, 0x5e25f1c2, 0x3ac58a3c, | |
| 6597 | + 0xafb55ea9, 0xf3057dc0, 0x6675a955, 0x0295d2ab, 0x97e5063e, | |
| 6598 | + 0xbbf59479, 0x2e8540ec, 0x4a653b12, 0xdf15ef87, 0x83a5ccee, | |
| 6599 | + 0x16d5187b, 0x72356385, 0xe745b710, 0x67cf0be4, 0xf2bfdf71, | |
| 6600 | + 0x965fa48f, 0x032f701a, 0x5f9f5373, 0xcaef87e6, 0xae0ffc18, | |
| 6601 | + 0x3b7f288d, 0x176fbaca, 0x821f6e5f, 0xe6ff15a1, 0x738fc134, | |
| 6602 | + 0x2f3fe25d, 0xba4f36c8, 0xdeaf4d36, 0x4bdf99a3, 0x868e69b8, | |
| 6603 | + 0x13febd2d, 0x771ec6d3, 0xe26e1246, 0xbede312f, 0x2baee5ba, | |
| 6604 | + 0x4f4e9e44, 0xda3e4ad1, 0xf62ed896, 0x635e0c03, 0x07be77fd, | |
| 6605 | + 0x92cea368, 0xce7e8001, 0x5b0e5494, 0x3fee2f6a, 0xaa9efbff, | |
| 6606 | + 0x7e3cc91d, 0xeb4c1d88, 0x8fac6676, 0x1adcb2e3, 0x466c918a, | |
| 6607 | + 0xd31c451f, 0xb7fc3ee1, 0x228cea74, 0x0e9c7833, 0x9becaca6, | |
| 6608 | + 0xff0cd758, 0x6a7c03cd, 0x36cc20a4, 0xa3bcf431, 0xc75c8fcf, | |
| 6609 | + 0x522c5b5a, 0x9f7dab41, 0x0a0d7fd4, 0x6eed042a, 0xfb9dd0bf, | |
| 6610 | + 0xa72df3d6, 0x325d2743, 0x56bd5cbd, 0xc3cd8828, 0xefdd1a6f, | |
| 6611 | + 0x7aadcefa, 0x1e4db504, 0x8b3d6191, 0xd78d42f8, 0x42fd966d, | |
| 6612 | + 0x261ded93, 0xb36d3906, 0x54288e16, 0xc1585a83, 0xa5b8217d, | |
| 6613 | + 0x30c8f5e8, 0x6c78d681, 0xf9080214, 0x9de879ea, 0x0898ad7f, | |
| 6614 | + 0x24883f38, 0xb1f8ebad, 0xd5189053, 0x406844c6, 0x1cd867af, | |
| 6615 | + 0x89a8b33a, 0xed48c8c4, 0x78381c51, 0xb569ec4a, 0x201938df, | |
| 6616 | + 0x44f94321, 0xd18997b4, 0x8d39b4dd, 0x18496048, 0x7ca91bb6, | |
| 6617 | + 0xe9d9cf23, 0xc5c95d64, 0x50b989f1, 0x3459f20f, 0xa129269a, | |
| 6618 | + 0xfd9905f3, 0x68e9d166, 0x0c09aa98, 0x99797e0d, 0x4ddb4cef, | |
| 6619 | + 0xd8ab987a, 0xbc4be384, 0x293b3711, 0x758b1478, 0xe0fbc0ed, | |
| 6620 | + 0x841bbb13, 0x116b6f86, 0x3d7bfdc1, 0xa80b2954, 0xcceb52aa, | |
| 6621 | + 0x599b863f, 0x052ba556, 0x905b71c3, 0xf4bb0a3d, 0x61cbdea8, | |
| 6622 | + 0xac9a2eb3, 0x39eafa26, 0x5d0a81d8, 0xc87a554d, 0x94ca7624, | |
| 6623 | + 0x01baa2b1, 0x655ad94f, 0xf02a0dda, 0xdc3a9f9d, 0x494a4b08, | |
| 6624 | + 0x2daa30f6, 0xb8dae463, 0xe46ac70a, 0x711a139f, 0x15fa6861, | |
| 6625 | + 0x808abcf4}, | |
| 6626 | + {0x00000000, 0xcf9e17c8, 0x444d29d1, 0x8bd33e19, 0x889a53a2, | |
| 6627 | + 0x4704446a, 0xccd77a73, 0x03496dbb, 0xca45a105, 0x05dbb6cd, | |
| 6628 | + 0x8e0888d4, 0x41969f1c, 0x42dff2a7, 0x8d41e56f, 0x0692db76, | |
| 6629 | + 0xc90cccbe, 0x4ffa444b, 0x80645383, 0x0bb76d9a, 0xc4297a52, | |
| 6630 | + 0xc76017e9, 0x08fe0021, 0x832d3e38, 0x4cb329f0, 0x85bfe54e, | |
| 6631 | + 0x4a21f286, 0xc1f2cc9f, 0x0e6cdb57, 0x0d25b6ec, 0xc2bba124, | |
| 6632 | + 0x49689f3d, 0x86f688f5, 0x9ff48896, 0x506a9f5e, 0xdbb9a147, | |
| 6633 | + 0x1427b68f, 0x176edb34, 0xd8f0ccfc, 0x5323f2e5, 0x9cbde52d, | |
| 6634 | + 0x55b12993, 0x9a2f3e5b, 0x11fc0042, 0xde62178a, 0xdd2b7a31, | |
| 6635 | + 0x12b56df9, 0x996653e0, 0x56f84428, 0xd00eccdd, 0x1f90db15, | |
| 6636 | + 0x9443e50c, 0x5bddf2c4, 0x58949f7f, 0x970a88b7, 0x1cd9b6ae, | |
| 6637 | + 0xd347a166, 0x1a4b6dd8, 0xd5d57a10, 0x5e064409, 0x919853c1, | |
| 6638 | + 0x92d13e7a, 0x5d4f29b2, 0xd69c17ab, 0x19020063, 0xe498176d, | |
| 6639 | + 0x2b0600a5, 0xa0d53ebc, 0x6f4b2974, 0x6c0244cf, 0xa39c5307, | |
| 6640 | + 0x284f6d1e, 0xe7d17ad6, 0x2eddb668, 0xe143a1a0, 0x6a909fb9, | |
| 6641 | + 0xa50e8871, 0xa647e5ca, 0x69d9f202, 0xe20acc1b, 0x2d94dbd3, | |
| 6642 | + 0xab625326, 0x64fc44ee, 0xef2f7af7, 0x20b16d3f, 0x23f80084, | |
| 6643 | + 0xec66174c, 0x67b52955, 0xa82b3e9d, 0x6127f223, 0xaeb9e5eb, | |
| 6644 | + 0x256adbf2, 0xeaf4cc3a, 0xe9bda181, 0x2623b649, 0xadf08850, | |
| 6645 | + 0x626e9f98, 0x7b6c9ffb, 0xb4f28833, 0x3f21b62a, 0xf0bfa1e2, | |
| 6646 | + 0xf3f6cc59, 0x3c68db91, 0xb7bbe588, 0x7825f240, 0xb1293efe, | |
| 6647 | + 0x7eb72936, 0xf564172f, 0x3afa00e7, 0x39b36d5c, 0xf62d7a94, | |
| 6648 | + 0x7dfe448d, 0xb2605345, 0x3496dbb0, 0xfb08cc78, 0x70dbf261, | |
| 6649 | + 0xbf45e5a9, 0xbc0c8812, 0x73929fda, 0xf841a1c3, 0x37dfb60b, | |
| 6650 | + 0xfed37ab5, 0x314d6d7d, 0xba9e5364, 0x750044ac, 0x76492917, | |
| 6651 | + 0xb9d73edf, 0x320400c6, 0xfd9a170e, 0x1241289b, 0xdddf3f53, | |
| 6652 | + 0x560c014a, 0x99921682, 0x9adb7b39, 0x55456cf1, 0xde9652e8, | |
| 6653 | + 0x11084520, 0xd804899e, 0x179a9e56, 0x9c49a04f, 0x53d7b787, | |
| 6654 | + 0x509eda3c, 0x9f00cdf4, 0x14d3f3ed, 0xdb4de425, 0x5dbb6cd0, | |
| 6655 | + 0x92257b18, 0x19f64501, 0xd66852c9, 0xd5213f72, 0x1abf28ba, | |
| 6656 | + 0x916c16a3, 0x5ef2016b, 0x97fecdd5, 0x5860da1d, 0xd3b3e404, | |
| 6657 | + 0x1c2df3cc, 0x1f649e77, 0xd0fa89bf, 0x5b29b7a6, 0x94b7a06e, | |
| 6658 | + 0x8db5a00d, 0x422bb7c5, 0xc9f889dc, 0x06669e14, 0x052ff3af, | |
| 6659 | + 0xcab1e467, 0x4162da7e, 0x8efccdb6, 0x47f00108, 0x886e16c0, | |
| 6660 | + 0x03bd28d9, 0xcc233f11, 0xcf6a52aa, 0x00f44562, 0x8b277b7b, | |
| 6661 | + 0x44b96cb3, 0xc24fe446, 0x0dd1f38e, 0x8602cd97, 0x499cda5f, | |
| 6662 | + 0x4ad5b7e4, 0x854ba02c, 0x0e989e35, 0xc10689fd, 0x080a4543, | |
| 6663 | + 0xc794528b, 0x4c476c92, 0x83d97b5a, 0x809016e1, 0x4f0e0129, | |
| 6664 | + 0xc4dd3f30, 0x0b4328f8, 0xf6d93ff6, 0x3947283e, 0xb2941627, | |
| 6665 | + 0x7d0a01ef, 0x7e436c54, 0xb1dd7b9c, 0x3a0e4585, 0xf590524d, | |
| 6666 | + 0x3c9c9ef3, 0xf302893b, 0x78d1b722, 0xb74fa0ea, 0xb406cd51, | |
| 6667 | + 0x7b98da99, 0xf04be480, 0x3fd5f348, 0xb9237bbd, 0x76bd6c75, | |
| 6668 | + 0xfd6e526c, 0x32f045a4, 0x31b9281f, 0xfe273fd7, 0x75f401ce, | |
| 6669 | + 0xba6a1606, 0x7366dab8, 0xbcf8cd70, 0x372bf369, 0xf8b5e4a1, | |
| 6670 | + 0xfbfc891a, 0x34629ed2, 0xbfb1a0cb, 0x702fb703, 0x692db760, | |
| 6671 | + 0xa6b3a0a8, 0x2d609eb1, 0xe2fe8979, 0xe1b7e4c2, 0x2e29f30a, | |
| 6672 | + 0xa5facd13, 0x6a64dadb, 0xa3681665, 0x6cf601ad, 0xe7253fb4, | |
| 6673 | + 0x28bb287c, 0x2bf245c7, 0xe46c520f, 0x6fbf6c16, 0xa0217bde, | |
| 6674 | + 0x26d7f32b, 0xe949e4e3, 0x629adafa, 0xad04cd32, 0xae4da089, | |
| 6675 | + 0x61d3b741, 0xea008958, 0x259e9e90, 0xec92522e, 0x230c45e6, | |
| 6676 | + 0xa8df7bff, 0x67416c37, 0x6408018c, 0xab961644, 0x2045285d, | |
| 6677 | + 0xefdb3f95}, | |
| 6678 | + {0x00000000, 0x24825136, 0x4904a26c, 0x6d86f35a, 0x920944d8, | |
| 6679 | + 0xb68b15ee, 0xdb0de6b4, 0xff8fb782, 0xff638ff1, 0xdbe1dec7, | |
| 6680 | + 0xb6672d9d, 0x92e57cab, 0x6d6acb29, 0x49e89a1f, 0x246e6945, | |
| 6681 | + 0x00ec3873, 0x25b619a3, 0x01344895, 0x6cb2bbcf, 0x4830eaf9, | |
| 6682 | + 0xb7bf5d7b, 0x933d0c4d, 0xfebbff17, 0xda39ae21, 0xdad59652, | |
| 6683 | + 0xfe57c764, 0x93d1343e, 0xb7536508, 0x48dcd28a, 0x6c5e83bc, | |
| 6684 | + 0x01d870e6, 0x255a21d0, 0x4b6c3346, 0x6fee6270, 0x0268912a, | |
| 6685 | + 0x26eac01c, 0xd965779e, 0xfde726a8, 0x9061d5f2, 0xb4e384c4, | |
| 6686 | + 0xb40fbcb7, 0x908ded81, 0xfd0b1edb, 0xd9894fed, 0x2606f86f, | |
| 6687 | + 0x0284a959, 0x6f025a03, 0x4b800b35, 0x6eda2ae5, 0x4a587bd3, | |
| 6688 | + 0x27de8889, 0x035cd9bf, 0xfcd36e3d, 0xd8513f0b, 0xb5d7cc51, | |
| 6689 | + 0x91559d67, 0x91b9a514, 0xb53bf422, 0xd8bd0778, 0xfc3f564e, | |
| 6690 | + 0x03b0e1cc, 0x2732b0fa, 0x4ab443a0, 0x6e361296, 0x96d8668c, | |
| 6691 | + 0xb25a37ba, 0xdfdcc4e0, 0xfb5e95d6, 0x04d12254, 0x20537362, | |
| 6692 | + 0x4dd58038, 0x6957d10e, 0x69bbe97d, 0x4d39b84b, 0x20bf4b11, | |
| 6693 | + 0x043d1a27, 0xfbb2ada5, 0xdf30fc93, 0xb2b60fc9, 0x96345eff, | |
| 6694 | + 0xb36e7f2f, 0x97ec2e19, 0xfa6add43, 0xdee88c75, 0x21673bf7, | |
| 6695 | + 0x05e56ac1, 0x6863999b, 0x4ce1c8ad, 0x4c0df0de, 0x688fa1e8, | |
| 6696 | + 0x050952b2, 0x218b0384, 0xde04b406, 0xfa86e530, 0x9700166a, | |
| 6697 | + 0xb382475c, 0xddb455ca, 0xf93604fc, 0x94b0f7a6, 0xb032a690, | |
| 6698 | + 0x4fbd1112, 0x6b3f4024, 0x06b9b37e, 0x223be248, 0x22d7da3b, | |
| 6699 | + 0x06558b0d, 0x6bd37857, 0x4f512961, 0xb0de9ee3, 0x945ccfd5, | |
| 6700 | + 0xf9da3c8f, 0xdd586db9, 0xf8024c69, 0xdc801d5f, 0xb106ee05, | |
| 6701 | + 0x9584bf33, 0x6a0b08b1, 0x4e895987, 0x230faadd, 0x078dfbeb, | |
| 6702 | + 0x0761c398, 0x23e392ae, 0x4e6561f4, 0x6ae730c2, 0x95688740, | |
| 6703 | + 0xb1ead676, 0xdc6c252c, 0xf8ee741a, 0xf6c1cb59, 0xd2439a6f, | |
| 6704 | + 0xbfc56935, 0x9b473803, 0x64c88f81, 0x404adeb7, 0x2dcc2ded, | |
| 6705 | + 0x094e7cdb, 0x09a244a8, 0x2d20159e, 0x40a6e6c4, 0x6424b7f2, | |
| 6706 | + 0x9bab0070, 0xbf295146, 0xd2afa21c, 0xf62df32a, 0xd377d2fa, | |
| 6707 | + 0xf7f583cc, 0x9a737096, 0xbef121a0, 0x417e9622, 0x65fcc714, | |
| 6708 | + 0x087a344e, 0x2cf86578, 0x2c145d0b, 0x08960c3d, 0x6510ff67, | |
| 6709 | + 0x4192ae51, 0xbe1d19d3, 0x9a9f48e5, 0xf719bbbf, 0xd39bea89, | |
| 6710 | + 0xbdadf81f, 0x992fa929, 0xf4a95a73, 0xd02b0b45, 0x2fa4bcc7, | |
| 6711 | + 0x0b26edf1, 0x66a01eab, 0x42224f9d, 0x42ce77ee, 0x664c26d8, | |
| 6712 | + 0x0bcad582, 0x2f4884b4, 0xd0c73336, 0xf4456200, 0x99c3915a, | |
| 6713 | + 0xbd41c06c, 0x981be1bc, 0xbc99b08a, 0xd11f43d0, 0xf59d12e6, | |
| 6714 | + 0x0a12a564, 0x2e90f452, 0x43160708, 0x6794563e, 0x67786e4d, | |
| 6715 | + 0x43fa3f7b, 0x2e7ccc21, 0x0afe9d17, 0xf5712a95, 0xd1f37ba3, | |
| 6716 | + 0xbc7588f9, 0x98f7d9cf, 0x6019add5, 0x449bfce3, 0x291d0fb9, | |
| 6717 | + 0x0d9f5e8f, 0xf210e90d, 0xd692b83b, 0xbb144b61, 0x9f961a57, | |
| 6718 | + 0x9f7a2224, 0xbbf87312, 0xd67e8048, 0xf2fcd17e, 0x0d7366fc, | |
| 6719 | + 0x29f137ca, 0x4477c490, 0x60f595a6, 0x45afb476, 0x612de540, | |
| 6720 | + 0x0cab161a, 0x2829472c, 0xd7a6f0ae, 0xf324a198, 0x9ea252c2, | |
| 6721 | + 0xba2003f4, 0xbacc3b87, 0x9e4e6ab1, 0xf3c899eb, 0xd74ac8dd, | |
| 6722 | + 0x28c57f5f, 0x0c472e69, 0x61c1dd33, 0x45438c05, 0x2b759e93, | |
| 6723 | + 0x0ff7cfa5, 0x62713cff, 0x46f36dc9, 0xb97cda4b, 0x9dfe8b7d, | |
| 6724 | + 0xf0787827, 0xd4fa2911, 0xd4161162, 0xf0944054, 0x9d12b30e, | |
| 6725 | + 0xb990e238, 0x461f55ba, 0x629d048c, 0x0f1bf7d6, 0x2b99a6e0, | |
| 6726 | + 0x0ec38730, 0x2a41d606, 0x47c7255c, 0x6345746a, 0x9ccac3e8, | |
| 6727 | + 0xb84892de, 0xd5ce6184, 0xf14c30b2, 0xf1a008c1, 0xd52259f7, | |
| 6728 | + 0xb8a4aaad, 0x9c26fb9b, 0x63a94c19, 0x472b1d2f, 0x2aadee75, | |
| 6729 | + 0x0e2fbf43}, | |
| 6730 | + {0x00000000, 0x36f290f3, 0x6de521e6, 0x5b17b115, 0xdbca43cc, | |
| 6731 | + 0xed38d33f, 0xb62f622a, 0x80ddf2d9, 0x6ce581d9, 0x5a17112a, | |
| 6732 | + 0x0100a03f, 0x37f230cc, 0xb72fc215, 0x81dd52e6, 0xdacae3f3, | |
| 6733 | + 0xec387300, 0xd9cb03b2, 0xef399341, 0xb42e2254, 0x82dcb2a7, | |
| 6734 | + 0x0201407e, 0x34f3d08d, 0x6fe46198, 0x5916f16b, 0xb52e826b, | |
| 6735 | + 0x83dc1298, 0xd8cba38d, 0xee39337e, 0x6ee4c1a7, 0x58165154, | |
| 6736 | + 0x0301e041, 0x35f370b2, 0x68e70125, 0x5e1591d6, 0x050220c3, | |
| 6737 | + 0x33f0b030, 0xb32d42e9, 0x85dfd21a, 0xdec8630f, 0xe83af3fc, | |
| 6738 | + 0x040280fc, 0x32f0100f, 0x69e7a11a, 0x5f1531e9, 0xdfc8c330, | |
| 6739 | + 0xe93a53c3, 0xb22de2d6, 0x84df7225, 0xb12c0297, 0x87de9264, | |
| 6740 | + 0xdcc92371, 0xea3bb382, 0x6ae6415b, 0x5c14d1a8, 0x070360bd, | |
| 6741 | + 0x31f1f04e, 0xddc9834e, 0xeb3b13bd, 0xb02ca2a8, 0x86de325b, | |
| 6742 | + 0x0603c082, 0x30f15071, 0x6be6e164, 0x5d147197, 0xd1ce024a, | |
| 6743 | + 0xe73c92b9, 0xbc2b23ac, 0x8ad9b35f, 0x0a044186, 0x3cf6d175, | |
| 6744 | + 0x67e16060, 0x5113f093, 0xbd2b8393, 0x8bd91360, 0xd0cea275, | |
| 6745 | + 0xe63c3286, 0x66e1c05f, 0x501350ac, 0x0b04e1b9, 0x3df6714a, | |
| 6746 | + 0x080501f8, 0x3ef7910b, 0x65e0201e, 0x5312b0ed, 0xd3cf4234, | |
| 6747 | + 0xe53dd2c7, 0xbe2a63d2, 0x88d8f321, 0x64e08021, 0x521210d2, | |
| 6748 | + 0x0905a1c7, 0x3ff73134, 0xbf2ac3ed, 0x89d8531e, 0xd2cfe20b, | |
| 6749 | + 0xe43d72f8, 0xb929036f, 0x8fdb939c, 0xd4cc2289, 0xe23eb27a, | |
| 6750 | + 0x62e340a3, 0x5411d050, 0x0f066145, 0x39f4f1b6, 0xd5cc82b6, | |
| 6751 | + 0xe33e1245, 0xb829a350, 0x8edb33a3, 0x0e06c17a, 0x38f45189, | |
| 6752 | + 0x63e3e09c, 0x5511706f, 0x60e200dd, 0x5610902e, 0x0d07213b, | |
| 6753 | + 0x3bf5b1c8, 0xbb284311, 0x8ddad3e2, 0xd6cd62f7, 0xe03ff204, | |
| 6754 | + 0x0c078104, 0x3af511f7, 0x61e2a0e2, 0x57103011, 0xd7cdc2c8, | |
| 6755 | + 0xe13f523b, 0xba28e32e, 0x8cda73dd, 0x78ed02d5, 0x4e1f9226, | |
| 6756 | + 0x15082333, 0x23fab3c0, 0xa3274119, 0x95d5d1ea, 0xcec260ff, | |
| 6757 | + 0xf830f00c, 0x1408830c, 0x22fa13ff, 0x79eda2ea, 0x4f1f3219, | |
| 6758 | + 0xcfc2c0c0, 0xf9305033, 0xa227e126, 0x94d571d5, 0xa1260167, | |
| 6759 | + 0x97d49194, 0xccc32081, 0xfa31b072, 0x7aec42ab, 0x4c1ed258, | |
| 6760 | + 0x1709634d, 0x21fbf3be, 0xcdc380be, 0xfb31104d, 0xa026a158, | |
| 6761 | + 0x96d431ab, 0x1609c372, 0x20fb5381, 0x7bece294, 0x4d1e7267, | |
| 6762 | + 0x100a03f0, 0x26f89303, 0x7def2216, 0x4b1db2e5, 0xcbc0403c, | |
| 6763 | + 0xfd32d0cf, 0xa62561da, 0x90d7f129, 0x7cef8229, 0x4a1d12da, | |
| 6764 | + 0x110aa3cf, 0x27f8333c, 0xa725c1e5, 0x91d75116, 0xcac0e003, | |
| 6765 | + 0xfc3270f0, 0xc9c10042, 0xff3390b1, 0xa42421a4, 0x92d6b157, | |
| 6766 | + 0x120b438e, 0x24f9d37d, 0x7fee6268, 0x491cf29b, 0xa524819b, | |
| 6767 | + 0x93d61168, 0xc8c1a07d, 0xfe33308e, 0x7eeec257, 0x481c52a4, | |
| 6768 | + 0x130be3b1, 0x25f97342, 0xa923009f, 0x9fd1906c, 0xc4c62179, | |
| 6769 | + 0xf234b18a, 0x72e94353, 0x441bd3a0, 0x1f0c62b5, 0x29fef246, | |
| 6770 | + 0xc5c68146, 0xf33411b5, 0xa823a0a0, 0x9ed13053, 0x1e0cc28a, | |
| 6771 | + 0x28fe5279, 0x73e9e36c, 0x451b739f, 0x70e8032d, 0x461a93de, | |
| 6772 | + 0x1d0d22cb, 0x2bffb238, 0xab2240e1, 0x9dd0d012, 0xc6c76107, | |
| 6773 | + 0xf035f1f4, 0x1c0d82f4, 0x2aff1207, 0x71e8a312, 0x471a33e1, | |
| 6774 | + 0xc7c7c138, 0xf13551cb, 0xaa22e0de, 0x9cd0702d, 0xc1c401ba, | |
| 6775 | + 0xf7369149, 0xac21205c, 0x9ad3b0af, 0x1a0e4276, 0x2cfcd285, | |
| 6776 | + 0x77eb6390, 0x4119f363, 0xad218063, 0x9bd31090, 0xc0c4a185, | |
| 6777 | + 0xf6363176, 0x76ebc3af, 0x4019535c, 0x1b0ee249, 0x2dfc72ba, | |
| 6778 | + 0x180f0208, 0x2efd92fb, 0x75ea23ee, 0x4318b31d, 0xc3c541c4, | |
| 6779 | + 0xf537d137, 0xae206022, 0x98d2f0d1, 0x74ea83d1, 0x42181322, | |
| 6780 | + 0x190fa237, 0x2ffd32c4, 0xaf20c01d, 0x99d250ee, 0xc2c5e1fb, | |
| 6781 | + 0xf4377108}}; | |
| 6782 | + | |
| 6783 | +local const z_word_t FAR crc_braid_big_table[][256] = { | |
| 6784 | + {0x0000000000000000, 0xf390f23600000000, 0xe621e56d00000000, | |
| 6785 | + 0x15b1175b00000000, 0xcc43cadb00000000, 0x3fd338ed00000000, | |
| 6786 | + 0x2a622fb600000000, 0xd9f2dd8000000000, 0xd981e56c00000000, | |
| 6787 | + 0x2a11175a00000000, 0x3fa0000100000000, 0xcc30f23700000000, | |
| 6788 | + 0x15c22fb700000000, 0xe652dd8100000000, 0xf3e3cada00000000, | |
| 6789 | + 0x007338ec00000000, 0xb203cbd900000000, 0x419339ef00000000, | |
| 6790 | + 0x54222eb400000000, 0xa7b2dc8200000000, 0x7e40010200000000, | |
| 6791 | + 0x8dd0f33400000000, 0x9861e46f00000000, 0x6bf1165900000000, | |
| 6792 | + 0x6b822eb500000000, 0x9812dc8300000000, 0x8da3cbd800000000, | |
| 6793 | + 0x7e3339ee00000000, 0xa7c1e46e00000000, 0x5451165800000000, | |
| 6794 | + 0x41e0010300000000, 0xb270f33500000000, 0x2501e76800000000, | |
| 6795 | + 0xd691155e00000000, 0xc320020500000000, 0x30b0f03300000000, | |
| 6796 | + 0xe9422db300000000, 0x1ad2df8500000000, 0x0f63c8de00000000, | |
| 6797 | + 0xfcf33ae800000000, 0xfc80020400000000, 0x0f10f03200000000, | |
| 6798 | + 0x1aa1e76900000000, 0xe931155f00000000, 0x30c3c8df00000000, | |
| 6799 | + 0xc3533ae900000000, 0xd6e22db200000000, 0x2572df8400000000, | |
| 6800 | + 0x97022cb100000000, 0x6492de8700000000, 0x7123c9dc00000000, | |
| 6801 | + 0x82b33bea00000000, 0x5b41e66a00000000, 0xa8d1145c00000000, | |
| 6802 | + 0xbd60030700000000, 0x4ef0f13100000000, 0x4e83c9dd00000000, | |
| 6803 | + 0xbd133beb00000000, 0xa8a22cb000000000, 0x5b32de8600000000, | |
| 6804 | + 0x82c0030600000000, 0x7150f13000000000, 0x64e1e66b00000000, | |
| 6805 | + 0x9771145d00000000, 0x4a02ced100000000, 0xb9923ce700000000, | |
| 6806 | + 0xac232bbc00000000, 0x5fb3d98a00000000, 0x8641040a00000000, | |
| 6807 | + 0x75d1f63c00000000, 0x6060e16700000000, 0x93f0135100000000, | |
| 6808 | + 0x93832bbd00000000, 0x6013d98b00000000, 0x75a2ced000000000, | |
| 6809 | + 0x86323ce600000000, 0x5fc0e16600000000, 0xac50135000000000, | |
| 6810 | + 0xb9e1040b00000000, 0x4a71f63d00000000, 0xf801050800000000, | |
| 6811 | + 0x0b91f73e00000000, 0x1e20e06500000000, 0xedb0125300000000, | |
| 6812 | + 0x3442cfd300000000, 0xc7d23de500000000, 0xd2632abe00000000, | |
| 6813 | + 0x21f3d88800000000, 0x2180e06400000000, 0xd210125200000000, | |
| 6814 | + 0xc7a1050900000000, 0x3431f73f00000000, 0xedc32abf00000000, | |
| 6815 | + 0x1e53d88900000000, 0x0be2cfd200000000, 0xf8723de400000000, | |
| 6816 | + 0x6f0329b900000000, 0x9c93db8f00000000, 0x8922ccd400000000, | |
| 6817 | + 0x7ab23ee200000000, 0xa340e36200000000, 0x50d0115400000000, | |
| 6818 | + 0x4561060f00000000, 0xb6f1f43900000000, 0xb682ccd500000000, | |
| 6819 | + 0x45123ee300000000, 0x50a329b800000000, 0xa333db8e00000000, | |
| 6820 | + 0x7ac1060e00000000, 0x8951f43800000000, 0x9ce0e36300000000, | |
| 6821 | + 0x6f70115500000000, 0xdd00e26000000000, 0x2e90105600000000, | |
| 6822 | + 0x3b21070d00000000, 0xc8b1f53b00000000, 0x114328bb00000000, | |
| 6823 | + 0xe2d3da8d00000000, 0xf762cdd600000000, 0x04f23fe000000000, | |
| 6824 | + 0x0481070c00000000, 0xf711f53a00000000, 0xe2a0e26100000000, | |
| 6825 | + 0x1130105700000000, 0xc8c2cdd700000000, 0x3b523fe100000000, | |
| 6826 | + 0x2ee328ba00000000, 0xdd73da8c00000000, 0xd502ed7800000000, | |
| 6827 | + 0x26921f4e00000000, 0x3323081500000000, 0xc0b3fa2300000000, | |
| 6828 | + 0x194127a300000000, 0xead1d59500000000, 0xff60c2ce00000000, | |
| 6829 | + 0x0cf030f800000000, 0x0c83081400000000, 0xff13fa2200000000, | |
| 6830 | + 0xeaa2ed7900000000, 0x19321f4f00000000, 0xc0c0c2cf00000000, | |
| 6831 | + 0x335030f900000000, 0x26e127a200000000, 0xd571d59400000000, | |
| 6832 | + 0x670126a100000000, 0x9491d49700000000, 0x8120c3cc00000000, | |
| 6833 | + 0x72b031fa00000000, 0xab42ec7a00000000, 0x58d21e4c00000000, | |
| 6834 | + 0x4d63091700000000, 0xbef3fb2100000000, 0xbe80c3cd00000000, | |
| 6835 | + 0x4d1031fb00000000, 0x58a126a000000000, 0xab31d49600000000, | |
| 6836 | + 0x72c3091600000000, 0x8153fb2000000000, 0x94e2ec7b00000000, | |
| 6837 | + 0x67721e4d00000000, 0xf0030a1000000000, 0x0393f82600000000, | |
| 6838 | + 0x1622ef7d00000000, 0xe5b21d4b00000000, 0x3c40c0cb00000000, | |
| 6839 | + 0xcfd032fd00000000, 0xda6125a600000000, 0x29f1d79000000000, | |
| 6840 | + 0x2982ef7c00000000, 0xda121d4a00000000, 0xcfa30a1100000000, | |
| 6841 | + 0x3c33f82700000000, 0xe5c125a700000000, 0x1651d79100000000, | |
| 6842 | + 0x03e0c0ca00000000, 0xf07032fc00000000, 0x4200c1c900000000, | |
| 6843 | + 0xb19033ff00000000, 0xa42124a400000000, 0x57b1d69200000000, | |
| 6844 | + 0x8e430b1200000000, 0x7dd3f92400000000, 0x6862ee7f00000000, | |
| 6845 | + 0x9bf21c4900000000, 0x9b8124a500000000, 0x6811d69300000000, | |
| 6846 | + 0x7da0c1c800000000, 0x8e3033fe00000000, 0x57c2ee7e00000000, | |
| 6847 | + 0xa4521c4800000000, 0xb1e30b1300000000, 0x4273f92500000000, | |
| 6848 | + 0x9f0023a900000000, 0x6c90d19f00000000, 0x7921c6c400000000, | |
| 6849 | + 0x8ab134f200000000, 0x5343e97200000000, 0xa0d31b4400000000, | |
| 6850 | + 0xb5620c1f00000000, 0x46f2fe2900000000, 0x4681c6c500000000, | |
| 6851 | + 0xb51134f300000000, 0xa0a023a800000000, 0x5330d19e00000000, | |
| 6852 | + 0x8ac20c1e00000000, 0x7952fe2800000000, 0x6ce3e97300000000, | |
| 6853 | + 0x9f731b4500000000, 0x2d03e87000000000, 0xde931a4600000000, | |
| 6854 | + 0xcb220d1d00000000, 0x38b2ff2b00000000, 0xe14022ab00000000, | |
| 6855 | + 0x12d0d09d00000000, 0x0761c7c600000000, 0xf4f135f000000000, | |
| 6856 | + 0xf4820d1c00000000, 0x0712ff2a00000000, 0x12a3e87100000000, | |
| 6857 | + 0xe1331a4700000000, 0x38c1c7c700000000, 0xcb5135f100000000, | |
| 6858 | + 0xdee022aa00000000, 0x2d70d09c00000000, 0xba01c4c100000000, | |
| 6859 | + 0x499136f700000000, 0x5c2021ac00000000, 0xafb0d39a00000000, | |
| 6860 | + 0x76420e1a00000000, 0x85d2fc2c00000000, 0x9063eb7700000000, | |
| 6861 | + 0x63f3194100000000, 0x638021ad00000000, 0x9010d39b00000000, | |
| 6862 | + 0x85a1c4c000000000, 0x763136f600000000, 0xafc3eb7600000000, | |
| 6863 | + 0x5c53194000000000, 0x49e20e1b00000000, 0xba72fc2d00000000, | |
| 6864 | + 0x08020f1800000000, 0xfb92fd2e00000000, 0xee23ea7500000000, | |
| 6865 | + 0x1db3184300000000, 0xc441c5c300000000, 0x37d137f500000000, | |
| 6866 | + 0x226020ae00000000, 0xd1f0d29800000000, 0xd183ea7400000000, | |
| 6867 | + 0x2213184200000000, 0x37a20f1900000000, 0xc432fd2f00000000, | |
| 6868 | + 0x1dc020af00000000, 0xee50d29900000000, 0xfbe1c5c200000000, | |
| 6869 | + 0x087137f400000000}, | |
| 6870 | + {0x0000000000000000, 0x3651822400000000, 0x6ca2044900000000, | |
| 6871 | + 0x5af3866d00000000, 0xd844099200000000, 0xee158bb600000000, | |
| 6872 | + 0xb4e60ddb00000000, 0x82b78fff00000000, 0xf18f63ff00000000, | |
| 6873 | + 0xc7dee1db00000000, 0x9d2d67b600000000, 0xab7ce59200000000, | |
| 6874 | + 0x29cb6a6d00000000, 0x1f9ae84900000000, 0x45696e2400000000, | |
| 6875 | + 0x7338ec0000000000, 0xa319b62500000000, 0x9548340100000000, | |
| 6876 | + 0xcfbbb26c00000000, 0xf9ea304800000000, 0x7b5dbfb700000000, | |
| 6877 | + 0x4d0c3d9300000000, 0x17ffbbfe00000000, 0x21ae39da00000000, | |
| 6878 | + 0x5296d5da00000000, 0x64c757fe00000000, 0x3e34d19300000000, | |
| 6879 | + 0x086553b700000000, 0x8ad2dc4800000000, 0xbc835e6c00000000, | |
| 6880 | + 0xe670d80100000000, 0xd0215a2500000000, 0x46336c4b00000000, | |
| 6881 | + 0x7062ee6f00000000, 0x2a91680200000000, 0x1cc0ea2600000000, | |
| 6882 | + 0x9e7765d900000000, 0xa826e7fd00000000, 0xf2d5619000000000, | |
| 6883 | + 0xc484e3b400000000, 0xb7bc0fb400000000, 0x81ed8d9000000000, | |
| 6884 | + 0xdb1e0bfd00000000, 0xed4f89d900000000, 0x6ff8062600000000, | |
| 6885 | + 0x59a9840200000000, 0x035a026f00000000, 0x350b804b00000000, | |
| 6886 | + 0xe52ada6e00000000, 0xd37b584a00000000, 0x8988de2700000000, | |
| 6887 | + 0xbfd95c0300000000, 0x3d6ed3fc00000000, 0x0b3f51d800000000, | |
| 6888 | + 0x51ccd7b500000000, 0x679d559100000000, 0x14a5b99100000000, | |
| 6889 | + 0x22f43bb500000000, 0x7807bdd800000000, 0x4e563ffc00000000, | |
| 6890 | + 0xcce1b00300000000, 0xfab0322700000000, 0xa043b44a00000000, | |
| 6891 | + 0x9612366e00000000, 0x8c66d89600000000, 0xba375ab200000000, | |
| 6892 | + 0xe0c4dcdf00000000, 0xd6955efb00000000, 0x5422d10400000000, | |
| 6893 | + 0x6273532000000000, 0x3880d54d00000000, 0x0ed1576900000000, | |
| 6894 | + 0x7de9bb6900000000, 0x4bb8394d00000000, 0x114bbf2000000000, | |
| 6895 | + 0x271a3d0400000000, 0xa5adb2fb00000000, 0x93fc30df00000000, | |
| 6896 | + 0xc90fb6b200000000, 0xff5e349600000000, 0x2f7f6eb300000000, | |
| 6897 | + 0x192eec9700000000, 0x43dd6afa00000000, 0x758ce8de00000000, | |
| 6898 | + 0xf73b672100000000, 0xc16ae50500000000, 0x9b99636800000000, | |
| 6899 | + 0xadc8e14c00000000, 0xdef00d4c00000000, 0xe8a18f6800000000, | |
| 6900 | + 0xb252090500000000, 0x84038b2100000000, 0x06b404de00000000, | |
| 6901 | + 0x30e586fa00000000, 0x6a16009700000000, 0x5c4782b300000000, | |
| 6902 | + 0xca55b4dd00000000, 0xfc0436f900000000, 0xa6f7b09400000000, | |
| 6903 | + 0x90a632b000000000, 0x1211bd4f00000000, 0x24403f6b00000000, | |
| 6904 | + 0x7eb3b90600000000, 0x48e23b2200000000, 0x3bdad72200000000, | |
| 6905 | + 0x0d8b550600000000, 0x5778d36b00000000, 0x6129514f00000000, | |
| 6906 | + 0xe39edeb000000000, 0xd5cf5c9400000000, 0x8f3cdaf900000000, | |
| 6907 | + 0xb96d58dd00000000, 0x694c02f800000000, 0x5f1d80dc00000000, | |
| 6908 | + 0x05ee06b100000000, 0x33bf849500000000, 0xb1080b6a00000000, | |
| 6909 | + 0x8759894e00000000, 0xddaa0f2300000000, 0xebfb8d0700000000, | |
| 6910 | + 0x98c3610700000000, 0xae92e32300000000, 0xf461654e00000000, | |
| 6911 | + 0xc230e76a00000000, 0x4087689500000000, 0x76d6eab100000000, | |
| 6912 | + 0x2c256cdc00000000, 0x1a74eef800000000, 0x59cbc1f600000000, | |
| 6913 | + 0x6f9a43d200000000, 0x3569c5bf00000000, 0x0338479b00000000, | |
| 6914 | + 0x818fc86400000000, 0xb7de4a4000000000, 0xed2dcc2d00000000, | |
| 6915 | + 0xdb7c4e0900000000, 0xa844a20900000000, 0x9e15202d00000000, | |
| 6916 | + 0xc4e6a64000000000, 0xf2b7246400000000, 0x7000ab9b00000000, | |
| 6917 | + 0x465129bf00000000, 0x1ca2afd200000000, 0x2af32df600000000, | |
| 6918 | + 0xfad277d300000000, 0xcc83f5f700000000, 0x9670739a00000000, | |
| 6919 | + 0xa021f1be00000000, 0x22967e4100000000, 0x14c7fc6500000000, | |
| 6920 | + 0x4e347a0800000000, 0x7865f82c00000000, 0x0b5d142c00000000, | |
| 6921 | + 0x3d0c960800000000, 0x67ff106500000000, 0x51ae924100000000, | |
| 6922 | + 0xd3191dbe00000000, 0xe5489f9a00000000, 0xbfbb19f700000000, | |
| 6923 | + 0x89ea9bd300000000, 0x1ff8adbd00000000, 0x29a92f9900000000, | |
| 6924 | + 0x735aa9f400000000, 0x450b2bd000000000, 0xc7bca42f00000000, | |
| 6925 | + 0xf1ed260b00000000, 0xab1ea06600000000, 0x9d4f224200000000, | |
| 6926 | + 0xee77ce4200000000, 0xd8264c6600000000, 0x82d5ca0b00000000, | |
| 6927 | + 0xb484482f00000000, 0x3633c7d000000000, 0x006245f400000000, | |
| 6928 | + 0x5a91c39900000000, 0x6cc041bd00000000, 0xbce11b9800000000, | |
| 6929 | + 0x8ab099bc00000000, 0xd0431fd100000000, 0xe6129df500000000, | |
| 6930 | + 0x64a5120a00000000, 0x52f4902e00000000, 0x0807164300000000, | |
| 6931 | + 0x3e56946700000000, 0x4d6e786700000000, 0x7b3ffa4300000000, | |
| 6932 | + 0x21cc7c2e00000000, 0x179dfe0a00000000, 0x952a71f500000000, | |
| 6933 | + 0xa37bf3d100000000, 0xf98875bc00000000, 0xcfd9f79800000000, | |
| 6934 | + 0xd5ad196000000000, 0xe3fc9b4400000000, 0xb90f1d2900000000, | |
| 6935 | + 0x8f5e9f0d00000000, 0x0de910f200000000, 0x3bb892d600000000, | |
| 6936 | + 0x614b14bb00000000, 0x571a969f00000000, 0x24227a9f00000000, | |
| 6937 | + 0x1273f8bb00000000, 0x48807ed600000000, 0x7ed1fcf200000000, | |
| 6938 | + 0xfc66730d00000000, 0xca37f12900000000, 0x90c4774400000000, | |
| 6939 | + 0xa695f56000000000, 0x76b4af4500000000, 0x40e52d6100000000, | |
| 6940 | + 0x1a16ab0c00000000, 0x2c47292800000000, 0xaef0a6d700000000, | |
| 6941 | + 0x98a124f300000000, 0xc252a29e00000000, 0xf40320ba00000000, | |
| 6942 | + 0x873bccba00000000, 0xb16a4e9e00000000, 0xeb99c8f300000000, | |
| 6943 | + 0xddc84ad700000000, 0x5f7fc52800000000, 0x692e470c00000000, | |
| 6944 | + 0x33ddc16100000000, 0x058c434500000000, 0x939e752b00000000, | |
| 6945 | + 0xa5cff70f00000000, 0xff3c716200000000, 0xc96df34600000000, | |
| 6946 | + 0x4bda7cb900000000, 0x7d8bfe9d00000000, 0x277878f000000000, | |
| 6947 | + 0x1129fad400000000, 0x621116d400000000, 0x544094f000000000, | |
| 6948 | + 0x0eb3129d00000000, 0x38e290b900000000, 0xba551f4600000000, | |
| 6949 | + 0x8c049d6200000000, 0xd6f71b0f00000000, 0xe0a6992b00000000, | |
| 6950 | + 0x3087c30e00000000, 0x06d6412a00000000, 0x5c25c74700000000, | |
| 6951 | + 0x6a74456300000000, 0xe8c3ca9c00000000, 0xde9248b800000000, | |
| 6952 | + 0x8461ced500000000, 0xb2304cf100000000, 0xc108a0f100000000, | |
| 6953 | + 0xf75922d500000000, 0xadaaa4b800000000, 0x9bfb269c00000000, | |
| 6954 | + 0x194ca96300000000, 0x2f1d2b4700000000, 0x75eead2a00000000, | |
| 6955 | + 0x43bf2f0e00000000}, | |
| 6956 | + {0x0000000000000000, 0xc8179ecf00000000, 0xd1294d4400000000, | |
| 6957 | + 0x193ed38b00000000, 0xa2539a8800000000, 0x6a44044700000000, | |
| 6958 | + 0x737ad7cc00000000, 0xbb6d490300000000, 0x05a145ca00000000, | |
| 6959 | + 0xcdb6db0500000000, 0xd488088e00000000, 0x1c9f964100000000, | |
| 6960 | + 0xa7f2df4200000000, 0x6fe5418d00000000, 0x76db920600000000, | |
| 6961 | + 0xbecc0cc900000000, 0x4b44fa4f00000000, 0x8353648000000000, | |
| 6962 | + 0x9a6db70b00000000, 0x527a29c400000000, 0xe91760c700000000, | |
| 6963 | + 0x2100fe0800000000, 0x383e2d8300000000, 0xf029b34c00000000, | |
| 6964 | + 0x4ee5bf8500000000, 0x86f2214a00000000, 0x9fccf2c100000000, | |
| 6965 | + 0x57db6c0e00000000, 0xecb6250d00000000, 0x24a1bbc200000000, | |
| 6966 | + 0x3d9f684900000000, 0xf588f68600000000, 0x9688f49f00000000, | |
| 6967 | + 0x5e9f6a5000000000, 0x47a1b9db00000000, 0x8fb6271400000000, | |
| 6968 | + 0x34db6e1700000000, 0xfcccf0d800000000, 0xe5f2235300000000, | |
| 6969 | + 0x2de5bd9c00000000, 0x9329b15500000000, 0x5b3e2f9a00000000, | |
| 6970 | + 0x4200fc1100000000, 0x8a1762de00000000, 0x317a2bdd00000000, | |
| 6971 | + 0xf96db51200000000, 0xe053669900000000, 0x2844f85600000000, | |
| 6972 | + 0xddcc0ed000000000, 0x15db901f00000000, 0x0ce5439400000000, | |
| 6973 | + 0xc4f2dd5b00000000, 0x7f9f945800000000, 0xb7880a9700000000, | |
| 6974 | + 0xaeb6d91c00000000, 0x66a147d300000000, 0xd86d4b1a00000000, | |
| 6975 | + 0x107ad5d500000000, 0x0944065e00000000, 0xc153989100000000, | |
| 6976 | + 0x7a3ed19200000000, 0xb2294f5d00000000, 0xab179cd600000000, | |
| 6977 | + 0x6300021900000000, 0x6d1798e400000000, 0xa500062b00000000, | |
| 6978 | + 0xbc3ed5a000000000, 0x74294b6f00000000, 0xcf44026c00000000, | |
| 6979 | + 0x07539ca300000000, 0x1e6d4f2800000000, 0xd67ad1e700000000, | |
| 6980 | + 0x68b6dd2e00000000, 0xa0a143e100000000, 0xb99f906a00000000, | |
| 6981 | + 0x71880ea500000000, 0xcae547a600000000, 0x02f2d96900000000, | |
| 6982 | + 0x1bcc0ae200000000, 0xd3db942d00000000, 0x265362ab00000000, | |
| 6983 | + 0xee44fc6400000000, 0xf77a2fef00000000, 0x3f6db12000000000, | |
| 6984 | + 0x8400f82300000000, 0x4c1766ec00000000, 0x5529b56700000000, | |
| 6985 | + 0x9d3e2ba800000000, 0x23f2276100000000, 0xebe5b9ae00000000, | |
| 6986 | + 0xf2db6a2500000000, 0x3accf4ea00000000, 0x81a1bde900000000, | |
| 6987 | + 0x49b6232600000000, 0x5088f0ad00000000, 0x989f6e6200000000, | |
| 6988 | + 0xfb9f6c7b00000000, 0x3388f2b400000000, 0x2ab6213f00000000, | |
| 6989 | + 0xe2a1bff000000000, 0x59ccf6f300000000, 0x91db683c00000000, | |
| 6990 | + 0x88e5bbb700000000, 0x40f2257800000000, 0xfe3e29b100000000, | |
| 6991 | + 0x3629b77e00000000, 0x2f1764f500000000, 0xe700fa3a00000000, | |
| 6992 | + 0x5c6db33900000000, 0x947a2df600000000, 0x8d44fe7d00000000, | |
| 6993 | + 0x455360b200000000, 0xb0db963400000000, 0x78cc08fb00000000, | |
| 6994 | + 0x61f2db7000000000, 0xa9e545bf00000000, 0x12880cbc00000000, | |
| 6995 | + 0xda9f927300000000, 0xc3a141f800000000, 0x0bb6df3700000000, | |
| 6996 | + 0xb57ad3fe00000000, 0x7d6d4d3100000000, 0x64539eba00000000, | |
| 6997 | + 0xac44007500000000, 0x1729497600000000, 0xdf3ed7b900000000, | |
| 6998 | + 0xc600043200000000, 0x0e179afd00000000, 0x9b28411200000000, | |
| 6999 | + 0x533fdfdd00000000, 0x4a010c5600000000, 0x8216929900000000, | |
| 7000 | + 0x397bdb9a00000000, 0xf16c455500000000, 0xe85296de00000000, | |
| 7001 | + 0x2045081100000000, 0x9e8904d800000000, 0x569e9a1700000000, | |
| 7002 | + 0x4fa0499c00000000, 0x87b7d75300000000, 0x3cda9e5000000000, | |
| 7003 | + 0xf4cd009f00000000, 0xedf3d31400000000, 0x25e44ddb00000000, | |
| 7004 | + 0xd06cbb5d00000000, 0x187b259200000000, 0x0145f61900000000, | |
| 7005 | + 0xc95268d600000000, 0x723f21d500000000, 0xba28bf1a00000000, | |
| 7006 | + 0xa3166c9100000000, 0x6b01f25e00000000, 0xd5cdfe9700000000, | |
| 7007 | + 0x1dda605800000000, 0x04e4b3d300000000, 0xccf32d1c00000000, | |
| 7008 | + 0x779e641f00000000, 0xbf89fad000000000, 0xa6b7295b00000000, | |
| 7009 | + 0x6ea0b79400000000, 0x0da0b58d00000000, 0xc5b72b4200000000, | |
| 7010 | + 0xdc89f8c900000000, 0x149e660600000000, 0xaff32f0500000000, | |
| 7011 | + 0x67e4b1ca00000000, 0x7eda624100000000, 0xb6cdfc8e00000000, | |
| 7012 | + 0x0801f04700000000, 0xc0166e8800000000, 0xd928bd0300000000, | |
| 7013 | + 0x113f23cc00000000, 0xaa526acf00000000, 0x6245f40000000000, | |
| 7014 | + 0x7b7b278b00000000, 0xb36cb94400000000, 0x46e44fc200000000, | |
| 7015 | + 0x8ef3d10d00000000, 0x97cd028600000000, 0x5fda9c4900000000, | |
| 7016 | + 0xe4b7d54a00000000, 0x2ca04b8500000000, 0x359e980e00000000, | |
| 7017 | + 0xfd8906c100000000, 0x43450a0800000000, 0x8b5294c700000000, | |
| 7018 | + 0x926c474c00000000, 0x5a7bd98300000000, 0xe116908000000000, | |
| 7019 | + 0x29010e4f00000000, 0x303fddc400000000, 0xf828430b00000000, | |
| 7020 | + 0xf63fd9f600000000, 0x3e28473900000000, 0x271694b200000000, | |
| 7021 | + 0xef010a7d00000000, 0x546c437e00000000, 0x9c7bddb100000000, | |
| 7022 | + 0x85450e3a00000000, 0x4d5290f500000000, 0xf39e9c3c00000000, | |
| 7023 | + 0x3b8902f300000000, 0x22b7d17800000000, 0xeaa04fb700000000, | |
| 7024 | + 0x51cd06b400000000, 0x99da987b00000000, 0x80e44bf000000000, | |
| 7025 | + 0x48f3d53f00000000, 0xbd7b23b900000000, 0x756cbd7600000000, | |
| 7026 | + 0x6c526efd00000000, 0xa445f03200000000, 0x1f28b93100000000, | |
| 7027 | + 0xd73f27fe00000000, 0xce01f47500000000, 0x06166aba00000000, | |
| 7028 | + 0xb8da667300000000, 0x70cdf8bc00000000, 0x69f32b3700000000, | |
| 7029 | + 0xa1e4b5f800000000, 0x1a89fcfb00000000, 0xd29e623400000000, | |
| 7030 | + 0xcba0b1bf00000000, 0x03b72f7000000000, 0x60b72d6900000000, | |
| 7031 | + 0xa8a0b3a600000000, 0xb19e602d00000000, 0x7989fee200000000, | |
| 7032 | + 0xc2e4b7e100000000, 0x0af3292e00000000, 0x13cdfaa500000000, | |
| 7033 | + 0xdbda646a00000000, 0x651668a300000000, 0xad01f66c00000000, | |
| 7034 | + 0xb43f25e700000000, 0x7c28bb2800000000, 0xc745f22b00000000, | |
| 7035 | + 0x0f526ce400000000, 0x166cbf6f00000000, 0xde7b21a000000000, | |
| 7036 | + 0x2bf3d72600000000, 0xe3e449e900000000, 0xfada9a6200000000, | |
| 7037 | + 0x32cd04ad00000000, 0x89a04dae00000000, 0x41b7d36100000000, | |
| 7038 | + 0x588900ea00000000, 0x909e9e2500000000, 0x2e5292ec00000000, | |
| 7039 | + 0xe6450c2300000000, 0xff7bdfa800000000, 0x376c416700000000, | |
| 7040 | + 0x8c01086400000000, 0x441696ab00000000, 0x5d28452000000000, | |
| 7041 | + 0x953fdbef00000000}, | |
| 7042 | + {0x0000000000000000, 0x95d4709500000000, 0x6baf90f100000000, | |
| 7043 | + 0xfe7be06400000000, 0x9758503800000000, 0x028c20ad00000000, | |
| 7044 | + 0xfcf7c0c900000000, 0x6923b05c00000000, 0x2eb1a07000000000, | |
| 7045 | + 0xbb65d0e500000000, 0x451e308100000000, 0xd0ca401400000000, | |
| 7046 | + 0xb9e9f04800000000, 0x2c3d80dd00000000, 0xd24660b900000000, | |
| 7047 | + 0x4792102c00000000, 0x5c6241e100000000, 0xc9b6317400000000, | |
| 7048 | + 0x37cdd11000000000, 0xa219a18500000000, 0xcb3a11d900000000, | |
| 7049 | + 0x5eee614c00000000, 0xa095812800000000, 0x3541f1bd00000000, | |
| 7050 | + 0x72d3e19100000000, 0xe707910400000000, 0x197c716000000000, | |
| 7051 | + 0x8ca801f500000000, 0xe58bb1a900000000, 0x705fc13c00000000, | |
| 7052 | + 0x8e24215800000000, 0x1bf051cd00000000, 0xf9c2f31900000000, | |
| 7053 | + 0x6c16838c00000000, 0x926d63e800000000, 0x07b9137d00000000, | |
| 7054 | + 0x6e9aa32100000000, 0xfb4ed3b400000000, 0x053533d000000000, | |
| 7055 | + 0x90e1434500000000, 0xd773536900000000, 0x42a723fc00000000, | |
| 7056 | + 0xbcdcc39800000000, 0x2908b30d00000000, 0x402b035100000000, | |
| 7057 | + 0xd5ff73c400000000, 0x2b8493a000000000, 0xbe50e33500000000, | |
| 7058 | + 0xa5a0b2f800000000, 0x3074c26d00000000, 0xce0f220900000000, | |
| 7059 | + 0x5bdb529c00000000, 0x32f8e2c000000000, 0xa72c925500000000, | |
| 7060 | + 0x5957723100000000, 0xcc8302a400000000, 0x8b11128800000000, | |
| 7061 | + 0x1ec5621d00000000, 0xe0be827900000000, 0x756af2ec00000000, | |
| 7062 | + 0x1c4942b000000000, 0x899d322500000000, 0x77e6d24100000000, | |
| 7063 | + 0xe232a2d400000000, 0xf285e73300000000, 0x675197a600000000, | |
| 7064 | + 0x992a77c200000000, 0x0cfe075700000000, 0x65ddb70b00000000, | |
| 7065 | + 0xf009c79e00000000, 0x0e7227fa00000000, 0x9ba6576f00000000, | |
| 7066 | + 0xdc34474300000000, 0x49e037d600000000, 0xb79bd7b200000000, | |
| 7067 | + 0x224fa72700000000, 0x4b6c177b00000000, 0xdeb867ee00000000, | |
| 7068 | + 0x20c3878a00000000, 0xb517f71f00000000, 0xaee7a6d200000000, | |
| 7069 | + 0x3b33d64700000000, 0xc548362300000000, 0x509c46b600000000, | |
| 7070 | + 0x39bff6ea00000000, 0xac6b867f00000000, 0x5210661b00000000, | |
| 7071 | + 0xc7c4168e00000000, 0x805606a200000000, 0x1582763700000000, | |
| 7072 | + 0xebf9965300000000, 0x7e2de6c600000000, 0x170e569a00000000, | |
| 7073 | + 0x82da260f00000000, 0x7ca1c66b00000000, 0xe975b6fe00000000, | |
| 7074 | + 0x0b47142a00000000, 0x9e9364bf00000000, 0x60e884db00000000, | |
| 7075 | + 0xf53cf44e00000000, 0x9c1f441200000000, 0x09cb348700000000, | |
| 7076 | + 0xf7b0d4e300000000, 0x6264a47600000000, 0x25f6b45a00000000, | |
| 7077 | + 0xb022c4cf00000000, 0x4e5924ab00000000, 0xdb8d543e00000000, | |
| 7078 | + 0xb2aee46200000000, 0x277a94f700000000, 0xd901749300000000, | |
| 7079 | + 0x4cd5040600000000, 0x572555cb00000000, 0xc2f1255e00000000, | |
| 7080 | + 0x3c8ac53a00000000, 0xa95eb5af00000000, 0xc07d05f300000000, | |
| 7081 | + 0x55a9756600000000, 0xabd2950200000000, 0x3e06e59700000000, | |
| 7082 | + 0x7994f5bb00000000, 0xec40852e00000000, 0x123b654a00000000, | |
| 7083 | + 0x87ef15df00000000, 0xeecca58300000000, 0x7b18d51600000000, | |
| 7084 | + 0x8563357200000000, 0x10b745e700000000, 0xe40bcf6700000000, | |
| 7085 | + 0x71dfbff200000000, 0x8fa45f9600000000, 0x1a702f0300000000, | |
| 7086 | + 0x73539f5f00000000, 0xe687efca00000000, 0x18fc0fae00000000, | |
| 7087 | + 0x8d287f3b00000000, 0xcaba6f1700000000, 0x5f6e1f8200000000, | |
| 7088 | + 0xa115ffe600000000, 0x34c18f7300000000, 0x5de23f2f00000000, | |
| 7089 | + 0xc8364fba00000000, 0x364dafde00000000, 0xa399df4b00000000, | |
| 7090 | + 0xb8698e8600000000, 0x2dbdfe1300000000, 0xd3c61e7700000000, | |
| 7091 | + 0x46126ee200000000, 0x2f31debe00000000, 0xbae5ae2b00000000, | |
| 7092 | + 0x449e4e4f00000000, 0xd14a3eda00000000, 0x96d82ef600000000, | |
| 7093 | + 0x030c5e6300000000, 0xfd77be0700000000, 0x68a3ce9200000000, | |
| 7094 | + 0x01807ece00000000, 0x94540e5b00000000, 0x6a2fee3f00000000, | |
| 7095 | + 0xfffb9eaa00000000, 0x1dc93c7e00000000, 0x881d4ceb00000000, | |
| 7096 | + 0x7666ac8f00000000, 0xe3b2dc1a00000000, 0x8a916c4600000000, | |
| 7097 | + 0x1f451cd300000000, 0xe13efcb700000000, 0x74ea8c2200000000, | |
| 7098 | + 0x33789c0e00000000, 0xa6acec9b00000000, 0x58d70cff00000000, | |
| 7099 | + 0xcd037c6a00000000, 0xa420cc3600000000, 0x31f4bca300000000, | |
| 7100 | + 0xcf8f5cc700000000, 0x5a5b2c5200000000, 0x41ab7d9f00000000, | |
| 7101 | + 0xd47f0d0a00000000, 0x2a04ed6e00000000, 0xbfd09dfb00000000, | |
| 7102 | + 0xd6f32da700000000, 0x43275d3200000000, 0xbd5cbd5600000000, | |
| 7103 | + 0x2888cdc300000000, 0x6f1addef00000000, 0xfacead7a00000000, | |
| 7104 | + 0x04b54d1e00000000, 0x91613d8b00000000, 0xf8428dd700000000, | |
| 7105 | + 0x6d96fd4200000000, 0x93ed1d2600000000, 0x06396db300000000, | |
| 7106 | + 0x168e285400000000, 0x835a58c100000000, 0x7d21b8a500000000, | |
| 7107 | + 0xe8f5c83000000000, 0x81d6786c00000000, 0x140208f900000000, | |
| 7108 | + 0xea79e89d00000000, 0x7fad980800000000, 0x383f882400000000, | |
| 7109 | + 0xadebf8b100000000, 0x539018d500000000, 0xc644684000000000, | |
| 7110 | + 0xaf67d81c00000000, 0x3ab3a88900000000, 0xc4c848ed00000000, | |
| 7111 | + 0x511c387800000000, 0x4aec69b500000000, 0xdf38192000000000, | |
| 7112 | + 0x2143f94400000000, 0xb49789d100000000, 0xddb4398d00000000, | |
| 7113 | + 0x4860491800000000, 0xb61ba97c00000000, 0x23cfd9e900000000, | |
| 7114 | + 0x645dc9c500000000, 0xf189b95000000000, 0x0ff2593400000000, | |
| 7115 | + 0x9a2629a100000000, 0xf30599fd00000000, 0x66d1e96800000000, | |
| 7116 | + 0x98aa090c00000000, 0x0d7e799900000000, 0xef4cdb4d00000000, | |
| 7117 | + 0x7a98abd800000000, 0x84e34bbc00000000, 0x11373b2900000000, | |
| 7118 | + 0x78148b7500000000, 0xedc0fbe000000000, 0x13bb1b8400000000, | |
| 7119 | + 0x866f6b1100000000, 0xc1fd7b3d00000000, 0x54290ba800000000, | |
| 7120 | + 0xaa52ebcc00000000, 0x3f869b5900000000, 0x56a52b0500000000, | |
| 7121 | + 0xc3715b9000000000, 0x3d0abbf400000000, 0xa8decb6100000000, | |
| 7122 | + 0xb32e9aac00000000, 0x26faea3900000000, 0xd8810a5d00000000, | |
| 7123 | + 0x4d557ac800000000, 0x2476ca9400000000, 0xb1a2ba0100000000, | |
| 7124 | + 0x4fd95a6500000000, 0xda0d2af000000000, 0x9d9f3adc00000000, | |
| 7125 | + 0x084b4a4900000000, 0xf630aa2d00000000, 0x63e4dab800000000, | |
| 7126 | + 0x0ac76ae400000000, 0x9f131a7100000000, 0x6168fa1500000000, | |
| 7127 | + 0xf4bc8a8000000000}, | |
| 7128 | + {0x0000000000000000, 0x1f17f08000000000, 0x7f2891da00000000, | |
| 7129 | + 0x603f615a00000000, 0xbf56536e00000000, 0xa041a3ee00000000, | |
| 7130 | + 0xc07ec2b400000000, 0xdf69323400000000, 0x7eada6dc00000000, | |
| 7131 | + 0x61ba565c00000000, 0x0185370600000000, 0x1e92c78600000000, | |
| 7132 | + 0xc1fbf5b200000000, 0xdeec053200000000, 0xbed3646800000000, | |
| 7133 | + 0xa1c494e800000000, 0xbd5c3c6200000000, 0xa24bcce200000000, | |
| 7134 | + 0xc274adb800000000, 0xdd635d3800000000, 0x020a6f0c00000000, | |
| 7135 | + 0x1d1d9f8c00000000, 0x7d22fed600000000, 0x62350e5600000000, | |
| 7136 | + 0xc3f19abe00000000, 0xdce66a3e00000000, 0xbcd90b6400000000, | |
| 7137 | + 0xa3cefbe400000000, 0x7ca7c9d000000000, 0x63b0395000000000, | |
| 7138 | + 0x038f580a00000000, 0x1c98a88a00000000, 0x7ab978c400000000, | |
| 7139 | + 0x65ae884400000000, 0x0591e91e00000000, 0x1a86199e00000000, | |
| 7140 | + 0xc5ef2baa00000000, 0xdaf8db2a00000000, 0xbac7ba7000000000, | |
| 7141 | + 0xa5d04af000000000, 0x0414de1800000000, 0x1b032e9800000000, | |
| 7142 | + 0x7b3c4fc200000000, 0x642bbf4200000000, 0xbb428d7600000000, | |
| 7143 | + 0xa4557df600000000, 0xc46a1cac00000000, 0xdb7dec2c00000000, | |
| 7144 | + 0xc7e544a600000000, 0xd8f2b42600000000, 0xb8cdd57c00000000, | |
| 7145 | + 0xa7da25fc00000000, 0x78b317c800000000, 0x67a4e74800000000, | |
| 7146 | + 0x079b861200000000, 0x188c769200000000, 0xb948e27a00000000, | |
| 7147 | + 0xa65f12fa00000000, 0xc66073a000000000, 0xd977832000000000, | |
| 7148 | + 0x061eb11400000000, 0x1909419400000000, 0x793620ce00000000, | |
| 7149 | + 0x6621d04e00000000, 0xb574805300000000, 0xaa6370d300000000, | |
| 7150 | + 0xca5c118900000000, 0xd54be10900000000, 0x0a22d33d00000000, | |
| 7151 | + 0x153523bd00000000, 0x750a42e700000000, 0x6a1db26700000000, | |
| 7152 | + 0xcbd9268f00000000, 0xd4ced60f00000000, 0xb4f1b75500000000, | |
| 7153 | + 0xabe647d500000000, 0x748f75e100000000, 0x6b98856100000000, | |
| 7154 | + 0x0ba7e43b00000000, 0x14b014bb00000000, 0x0828bc3100000000, | |
| 7155 | + 0x173f4cb100000000, 0x77002deb00000000, 0x6817dd6b00000000, | |
| 7156 | + 0xb77eef5f00000000, 0xa8691fdf00000000, 0xc8567e8500000000, | |
| 7157 | + 0xd7418e0500000000, 0x76851aed00000000, 0x6992ea6d00000000, | |
| 7158 | + 0x09ad8b3700000000, 0x16ba7bb700000000, 0xc9d3498300000000, | |
| 7159 | + 0xd6c4b90300000000, 0xb6fbd85900000000, 0xa9ec28d900000000, | |
| 7160 | + 0xcfcdf89700000000, 0xd0da081700000000, 0xb0e5694d00000000, | |
| 7161 | + 0xaff299cd00000000, 0x709babf900000000, 0x6f8c5b7900000000, | |
| 7162 | + 0x0fb33a2300000000, 0x10a4caa300000000, 0xb1605e4b00000000, | |
| 7163 | + 0xae77aecb00000000, 0xce48cf9100000000, 0xd15f3f1100000000, | |
| 7164 | + 0x0e360d2500000000, 0x1121fda500000000, 0x711e9cff00000000, | |
| 7165 | + 0x6e096c7f00000000, 0x7291c4f500000000, 0x6d86347500000000, | |
| 7166 | + 0x0db9552f00000000, 0x12aea5af00000000, 0xcdc7979b00000000, | |
| 7167 | + 0xd2d0671b00000000, 0xb2ef064100000000, 0xadf8f6c100000000, | |
| 7168 | + 0x0c3c622900000000, 0x132b92a900000000, 0x7314f3f300000000, | |
| 7169 | + 0x6c03037300000000, 0xb36a314700000000, 0xac7dc1c700000000, | |
| 7170 | + 0xcc42a09d00000000, 0xd355501d00000000, 0x6ae900a700000000, | |
| 7171 | + 0x75fef02700000000, 0x15c1917d00000000, 0x0ad661fd00000000, | |
| 7172 | + 0xd5bf53c900000000, 0xcaa8a34900000000, 0xaa97c21300000000, | |
| 7173 | + 0xb580329300000000, 0x1444a67b00000000, 0x0b5356fb00000000, | |
| 7174 | + 0x6b6c37a100000000, 0x747bc72100000000, 0xab12f51500000000, | |
| 7175 | + 0xb405059500000000, 0xd43a64cf00000000, 0xcb2d944f00000000, | |
| 7176 | + 0xd7b53cc500000000, 0xc8a2cc4500000000, 0xa89dad1f00000000, | |
| 7177 | + 0xb78a5d9f00000000, 0x68e36fab00000000, 0x77f49f2b00000000, | |
| 7178 | + 0x17cbfe7100000000, 0x08dc0ef100000000, 0xa9189a1900000000, | |
| 7179 | + 0xb60f6a9900000000, 0xd6300bc300000000, 0xc927fb4300000000, | |
| 7180 | + 0x164ec97700000000, 0x095939f700000000, 0x696658ad00000000, | |
| 7181 | + 0x7671a82d00000000, 0x1050786300000000, 0x0f4788e300000000, | |
| 7182 | + 0x6f78e9b900000000, 0x706f193900000000, 0xaf062b0d00000000, | |
| 7183 | + 0xb011db8d00000000, 0xd02ebad700000000, 0xcf394a5700000000, | |
| 7184 | + 0x6efddebf00000000, 0x71ea2e3f00000000, 0x11d54f6500000000, | |
| 7185 | + 0x0ec2bfe500000000, 0xd1ab8dd100000000, 0xcebc7d5100000000, | |
| 7186 | + 0xae831c0b00000000, 0xb194ec8b00000000, 0xad0c440100000000, | |
| 7187 | + 0xb21bb48100000000, 0xd224d5db00000000, 0xcd33255b00000000, | |
| 7188 | + 0x125a176f00000000, 0x0d4de7ef00000000, 0x6d7286b500000000, | |
| 7189 | + 0x7265763500000000, 0xd3a1e2dd00000000, 0xccb6125d00000000, | |
| 7190 | + 0xac89730700000000, 0xb39e838700000000, 0x6cf7b1b300000000, | |
| 7191 | + 0x73e0413300000000, 0x13df206900000000, 0x0cc8d0e900000000, | |
| 7192 | + 0xdf9d80f400000000, 0xc08a707400000000, 0xa0b5112e00000000, | |
| 7193 | + 0xbfa2e1ae00000000, 0x60cbd39a00000000, 0x7fdc231a00000000, | |
| 7194 | + 0x1fe3424000000000, 0x00f4b2c000000000, 0xa130262800000000, | |
| 7195 | + 0xbe27d6a800000000, 0xde18b7f200000000, 0xc10f477200000000, | |
| 7196 | + 0x1e66754600000000, 0x017185c600000000, 0x614ee49c00000000, | |
| 7197 | + 0x7e59141c00000000, 0x62c1bc9600000000, 0x7dd64c1600000000, | |
| 7198 | + 0x1de92d4c00000000, 0x02feddcc00000000, 0xdd97eff800000000, | |
| 7199 | + 0xc2801f7800000000, 0xa2bf7e2200000000, 0xbda88ea200000000, | |
| 7200 | + 0x1c6c1a4a00000000, 0x037beaca00000000, 0x63448b9000000000, | |
| 7201 | + 0x7c537b1000000000, 0xa33a492400000000, 0xbc2db9a400000000, | |
| 7202 | + 0xdc12d8fe00000000, 0xc305287e00000000, 0xa524f83000000000, | |
| 7203 | + 0xba3308b000000000, 0xda0c69ea00000000, 0xc51b996a00000000, | |
| 7204 | + 0x1a72ab5e00000000, 0x05655bde00000000, 0x655a3a8400000000, | |
| 7205 | + 0x7a4dca0400000000, 0xdb895eec00000000, 0xc49eae6c00000000, | |
| 7206 | + 0xa4a1cf3600000000, 0xbbb63fb600000000, 0x64df0d8200000000, | |
| 7207 | + 0x7bc8fd0200000000, 0x1bf79c5800000000, 0x04e06cd800000000, | |
| 7208 | + 0x1878c45200000000, 0x076f34d200000000, 0x6750558800000000, | |
| 7209 | + 0x7847a50800000000, 0xa72e973c00000000, 0xb83967bc00000000, | |
| 7210 | + 0xd80606e600000000, 0xc711f66600000000, 0x66d5628e00000000, | |
| 7211 | + 0x79c2920e00000000, 0x19fdf35400000000, 0x06ea03d400000000, | |
| 7212 | + 0xd98331e000000000, 0xc694c16000000000, 0xa6aba03a00000000, | |
| 7213 | + 0xb9bc50ba00000000}, | |
| 7214 | + {0x0000000000000000, 0xe2fd888d00000000, 0x85fd60c000000000, | |
| 7215 | + 0x6700e84d00000000, 0x4bfdb05b00000000, 0xa90038d600000000, | |
| 7216 | + 0xce00d09b00000000, 0x2cfd581600000000, 0x96fa61b700000000, | |
| 7217 | + 0x7407e93a00000000, 0x1307017700000000, 0xf1fa89fa00000000, | |
| 7218 | + 0xdd07d1ec00000000, 0x3ffa596100000000, 0x58fab12c00000000, | |
| 7219 | + 0xba0739a100000000, 0x6df3b2b500000000, 0x8f0e3a3800000000, | |
| 7220 | + 0xe80ed27500000000, 0x0af35af800000000, 0x260e02ee00000000, | |
| 7221 | + 0xc4f38a6300000000, 0xa3f3622e00000000, 0x410eeaa300000000, | |
| 7222 | + 0xfb09d30200000000, 0x19f45b8f00000000, 0x7ef4b3c200000000, | |
| 7223 | + 0x9c093b4f00000000, 0xb0f4635900000000, 0x5209ebd400000000, | |
| 7224 | + 0x3509039900000000, 0xd7f48b1400000000, 0x9be014b000000000, | |
| 7225 | + 0x791d9c3d00000000, 0x1e1d747000000000, 0xfce0fcfd00000000, | |
| 7226 | + 0xd01da4eb00000000, 0x32e02c6600000000, 0x55e0c42b00000000, | |
| 7227 | + 0xb71d4ca600000000, 0x0d1a750700000000, 0xefe7fd8a00000000, | |
| 7228 | + 0x88e715c700000000, 0x6a1a9d4a00000000, 0x46e7c55c00000000, | |
| 7229 | + 0xa41a4dd100000000, 0xc31aa59c00000000, 0x21e72d1100000000, | |
| 7230 | + 0xf613a60500000000, 0x14ee2e8800000000, 0x73eec6c500000000, | |
| 7231 | + 0x91134e4800000000, 0xbdee165e00000000, 0x5f139ed300000000, | |
| 7232 | + 0x3813769e00000000, 0xdaeefe1300000000, 0x60e9c7b200000000, | |
| 7233 | + 0x82144f3f00000000, 0xe514a77200000000, 0x07e92fff00000000, | |
| 7234 | + 0x2b1477e900000000, 0xc9e9ff6400000000, 0xaee9172900000000, | |
| 7235 | + 0x4c149fa400000000, 0x77c758bb00000000, 0x953ad03600000000, | |
| 7236 | + 0xf23a387b00000000, 0x10c7b0f600000000, 0x3c3ae8e000000000, | |
| 7237 | + 0xdec7606d00000000, 0xb9c7882000000000, 0x5b3a00ad00000000, | |
| 7238 | + 0xe13d390c00000000, 0x03c0b18100000000, 0x64c059cc00000000, | |
| 7239 | + 0x863dd14100000000, 0xaac0895700000000, 0x483d01da00000000, | |
| 7240 | + 0x2f3de99700000000, 0xcdc0611a00000000, 0x1a34ea0e00000000, | |
| 7241 | + 0xf8c9628300000000, 0x9fc98ace00000000, 0x7d34024300000000, | |
| 7242 | + 0x51c95a5500000000, 0xb334d2d800000000, 0xd4343a9500000000, | |
| 7243 | + 0x36c9b21800000000, 0x8cce8bb900000000, 0x6e33033400000000, | |
| 7244 | + 0x0933eb7900000000, 0xebce63f400000000, 0xc7333be200000000, | |
| 7245 | + 0x25ceb36f00000000, 0x42ce5b2200000000, 0xa033d3af00000000, | |
| 7246 | + 0xec274c0b00000000, 0x0edac48600000000, 0x69da2ccb00000000, | |
| 7247 | + 0x8b27a44600000000, 0xa7dafc5000000000, 0x452774dd00000000, | |
| 7248 | + 0x22279c9000000000, 0xc0da141d00000000, 0x7add2dbc00000000, | |
| 7249 | + 0x9820a53100000000, 0xff204d7c00000000, 0x1dddc5f100000000, | |
| 7250 | + 0x31209de700000000, 0xd3dd156a00000000, 0xb4ddfd2700000000, | |
| 7251 | + 0x562075aa00000000, 0x81d4febe00000000, 0x6329763300000000, | |
| 7252 | + 0x04299e7e00000000, 0xe6d416f300000000, 0xca294ee500000000, | |
| 7253 | + 0x28d4c66800000000, 0x4fd42e2500000000, 0xad29a6a800000000, | |
| 7254 | + 0x172e9f0900000000, 0xf5d3178400000000, 0x92d3ffc900000000, | |
| 7255 | + 0x702e774400000000, 0x5cd32f5200000000, 0xbe2ea7df00000000, | |
| 7256 | + 0xd92e4f9200000000, 0x3bd3c71f00000000, 0xaf88c0ad00000000, | |
| 7257 | + 0x4d75482000000000, 0x2a75a06d00000000, 0xc88828e000000000, | |
| 7258 | + 0xe47570f600000000, 0x0688f87b00000000, 0x6188103600000000, | |
| 7259 | + 0x837598bb00000000, 0x3972a11a00000000, 0xdb8f299700000000, | |
| 7260 | + 0xbc8fc1da00000000, 0x5e72495700000000, 0x728f114100000000, | |
| 7261 | + 0x907299cc00000000, 0xf772718100000000, 0x158ff90c00000000, | |
| 7262 | + 0xc27b721800000000, 0x2086fa9500000000, 0x478612d800000000, | |
| 7263 | + 0xa57b9a5500000000, 0x8986c24300000000, 0x6b7b4ace00000000, | |
| 7264 | + 0x0c7ba28300000000, 0xee862a0e00000000, 0x548113af00000000, | |
| 7265 | + 0xb67c9b2200000000, 0xd17c736f00000000, 0x3381fbe200000000, | |
| 7266 | + 0x1f7ca3f400000000, 0xfd812b7900000000, 0x9a81c33400000000, | |
| 7267 | + 0x787c4bb900000000, 0x3468d41d00000000, 0xd6955c9000000000, | |
| 7268 | + 0xb195b4dd00000000, 0x53683c5000000000, 0x7f95644600000000, | |
| 7269 | + 0x9d68eccb00000000, 0xfa68048600000000, 0x18958c0b00000000, | |
| 7270 | + 0xa292b5aa00000000, 0x406f3d2700000000, 0x276fd56a00000000, | |
| 7271 | + 0xc5925de700000000, 0xe96f05f100000000, 0x0b928d7c00000000, | |
| 7272 | + 0x6c92653100000000, 0x8e6fedbc00000000, 0x599b66a800000000, | |
| 7273 | + 0xbb66ee2500000000, 0xdc66066800000000, 0x3e9b8ee500000000, | |
| 7274 | + 0x1266d6f300000000, 0xf09b5e7e00000000, 0x979bb63300000000, | |
| 7275 | + 0x75663ebe00000000, 0xcf61071f00000000, 0x2d9c8f9200000000, | |
| 7276 | + 0x4a9c67df00000000, 0xa861ef5200000000, 0x849cb74400000000, | |
| 7277 | + 0x66613fc900000000, 0x0161d78400000000, 0xe39c5f0900000000, | |
| 7278 | + 0xd84f981600000000, 0x3ab2109b00000000, 0x5db2f8d600000000, | |
| 7279 | + 0xbf4f705b00000000, 0x93b2284d00000000, 0x714fa0c000000000, | |
| 7280 | + 0x164f488d00000000, 0xf4b2c00000000000, 0x4eb5f9a100000000, | |
| 7281 | + 0xac48712c00000000, 0xcb48996100000000, 0x29b511ec00000000, | |
| 7282 | + 0x054849fa00000000, 0xe7b5c17700000000, 0x80b5293a00000000, | |
| 7283 | + 0x6248a1b700000000, 0xb5bc2aa300000000, 0x5741a22e00000000, | |
| 7284 | + 0x30414a6300000000, 0xd2bcc2ee00000000, 0xfe419af800000000, | |
| 7285 | + 0x1cbc127500000000, 0x7bbcfa3800000000, 0x994172b500000000, | |
| 7286 | + 0x23464b1400000000, 0xc1bbc39900000000, 0xa6bb2bd400000000, | |
| 7287 | + 0x4446a35900000000, 0x68bbfb4f00000000, 0x8a4673c200000000, | |
| 7288 | + 0xed469b8f00000000, 0x0fbb130200000000, 0x43af8ca600000000, | |
| 7289 | + 0xa152042b00000000, 0xc652ec6600000000, 0x24af64eb00000000, | |
| 7290 | + 0x08523cfd00000000, 0xeaafb47000000000, 0x8daf5c3d00000000, | |
| 7291 | + 0x6f52d4b000000000, 0xd555ed1100000000, 0x37a8659c00000000, | |
| 7292 | + 0x50a88dd100000000, 0xb255055c00000000, 0x9ea85d4a00000000, | |
| 7293 | + 0x7c55d5c700000000, 0x1b553d8a00000000, 0xf9a8b50700000000, | |
| 7294 | + 0x2e5c3e1300000000, 0xcca1b69e00000000, 0xaba15ed300000000, | |
| 7295 | + 0x495cd65e00000000, 0x65a18e4800000000, 0x875c06c500000000, | |
| 7296 | + 0xe05cee8800000000, 0x02a1660500000000, 0xb8a65fa400000000, | |
| 7297 | + 0x5a5bd72900000000, 0x3d5b3f6400000000, 0xdfa6b7e900000000, | |
| 7298 | + 0xf35befff00000000, 0x11a6677200000000, 0x76a68f3f00000000, | |
| 7299 | + 0x945b07b200000000}, | |
| 7300 | + {0x0000000000000000, 0xa90b894e00000000, 0x5217129d00000000, | |
| 7301 | + 0xfb1c9bd300000000, 0xe52855e100000000, 0x4c23dcaf00000000, | |
| 7302 | + 0xb73f477c00000000, 0x1e34ce3200000000, 0x8b57db1900000000, | |
| 7303 | + 0x225c525700000000, 0xd940c98400000000, 0x704b40ca00000000, | |
| 7304 | + 0x6e7f8ef800000000, 0xc77407b600000000, 0x3c689c6500000000, | |
| 7305 | + 0x9563152b00000000, 0x16afb63300000000, 0xbfa43f7d00000000, | |
| 7306 | + 0x44b8a4ae00000000, 0xedb32de000000000, 0xf387e3d200000000, | |
| 7307 | + 0x5a8c6a9c00000000, 0xa190f14f00000000, 0x089b780100000000, | |
| 7308 | + 0x9df86d2a00000000, 0x34f3e46400000000, 0xcfef7fb700000000, | |
| 7309 | + 0x66e4f6f900000000, 0x78d038cb00000000, 0xd1dbb18500000000, | |
| 7310 | + 0x2ac72a5600000000, 0x83cca31800000000, 0x2c5e6d6700000000, | |
| 7311 | + 0x8555e42900000000, 0x7e497ffa00000000, 0xd742f6b400000000, | |
| 7312 | + 0xc976388600000000, 0x607db1c800000000, 0x9b612a1b00000000, | |
| 7313 | + 0x326aa35500000000, 0xa709b67e00000000, 0x0e023f3000000000, | |
| 7314 | + 0xf51ea4e300000000, 0x5c152dad00000000, 0x4221e39f00000000, | |
| 7315 | + 0xeb2a6ad100000000, 0x1036f10200000000, 0xb93d784c00000000, | |
| 7316 | + 0x3af1db5400000000, 0x93fa521a00000000, 0x68e6c9c900000000, | |
| 7317 | + 0xc1ed408700000000, 0xdfd98eb500000000, 0x76d207fb00000000, | |
| 7318 | + 0x8dce9c2800000000, 0x24c5156600000000, 0xb1a6004d00000000, | |
| 7319 | + 0x18ad890300000000, 0xe3b112d000000000, 0x4aba9b9e00000000, | |
| 7320 | + 0x548e55ac00000000, 0xfd85dce200000000, 0x0699473100000000, | |
| 7321 | + 0xaf92ce7f00000000, 0x58bcdace00000000, 0xf1b7538000000000, | |
| 7322 | + 0x0aabc85300000000, 0xa3a0411d00000000, 0xbd948f2f00000000, | |
| 7323 | + 0x149f066100000000, 0xef839db200000000, 0x468814fc00000000, | |
| 7324 | + 0xd3eb01d700000000, 0x7ae0889900000000, 0x81fc134a00000000, | |
| 7325 | + 0x28f79a0400000000, 0x36c3543600000000, 0x9fc8dd7800000000, | |
| 7326 | + 0x64d446ab00000000, 0xcddfcfe500000000, 0x4e136cfd00000000, | |
| 7327 | + 0xe718e5b300000000, 0x1c047e6000000000, 0xb50ff72e00000000, | |
| 7328 | + 0xab3b391c00000000, 0x0230b05200000000, 0xf92c2b8100000000, | |
| 7329 | + 0x5027a2cf00000000, 0xc544b7e400000000, 0x6c4f3eaa00000000, | |
| 7330 | + 0x9753a57900000000, 0x3e582c3700000000, 0x206ce20500000000, | |
| 7331 | + 0x89676b4b00000000, 0x727bf09800000000, 0xdb7079d600000000, | |
| 7332 | + 0x74e2b7a900000000, 0xdde93ee700000000, 0x26f5a53400000000, | |
| 7333 | + 0x8ffe2c7a00000000, 0x91cae24800000000, 0x38c16b0600000000, | |
| 7334 | + 0xc3ddf0d500000000, 0x6ad6799b00000000, 0xffb56cb000000000, | |
| 7335 | + 0x56bee5fe00000000, 0xada27e2d00000000, 0x04a9f76300000000, | |
| 7336 | + 0x1a9d395100000000, 0xb396b01f00000000, 0x488a2bcc00000000, | |
| 7337 | + 0xe181a28200000000, 0x624d019a00000000, 0xcb4688d400000000, | |
| 7338 | + 0x305a130700000000, 0x99519a4900000000, 0x8765547b00000000, | |
| 7339 | + 0x2e6edd3500000000, 0xd57246e600000000, 0x7c79cfa800000000, | |
| 7340 | + 0xe91ada8300000000, 0x401153cd00000000, 0xbb0dc81e00000000, | |
| 7341 | + 0x1206415000000000, 0x0c328f6200000000, 0xa539062c00000000, | |
| 7342 | + 0x5e259dff00000000, 0xf72e14b100000000, 0xf17ec44600000000, | |
| 7343 | + 0x58754d0800000000, 0xa369d6db00000000, 0x0a625f9500000000, | |
| 7344 | + 0x145691a700000000, 0xbd5d18e900000000, 0x4641833a00000000, | |
| 7345 | + 0xef4a0a7400000000, 0x7a291f5f00000000, 0xd322961100000000, | |
| 7346 | + 0x283e0dc200000000, 0x8135848c00000000, 0x9f014abe00000000, | |
| 7347 | + 0x360ac3f000000000, 0xcd16582300000000, 0x641dd16d00000000, | |
| 7348 | + 0xe7d1727500000000, 0x4edafb3b00000000, 0xb5c660e800000000, | |
| 7349 | + 0x1ccde9a600000000, 0x02f9279400000000, 0xabf2aeda00000000, | |
| 7350 | + 0x50ee350900000000, 0xf9e5bc4700000000, 0x6c86a96c00000000, | |
| 7351 | + 0xc58d202200000000, 0x3e91bbf100000000, 0x979a32bf00000000, | |
| 7352 | + 0x89aefc8d00000000, 0x20a575c300000000, 0xdbb9ee1000000000, | |
| 7353 | + 0x72b2675e00000000, 0xdd20a92100000000, 0x742b206f00000000, | |
| 7354 | + 0x8f37bbbc00000000, 0x263c32f200000000, 0x3808fcc000000000, | |
| 7355 | + 0x9103758e00000000, 0x6a1fee5d00000000, 0xc314671300000000, | |
| 7356 | + 0x5677723800000000, 0xff7cfb7600000000, 0x046060a500000000, | |
| 7357 | + 0xad6be9eb00000000, 0xb35f27d900000000, 0x1a54ae9700000000, | |
| 7358 | + 0xe148354400000000, 0x4843bc0a00000000, 0xcb8f1f1200000000, | |
| 7359 | + 0x6284965c00000000, 0x99980d8f00000000, 0x309384c100000000, | |
| 7360 | + 0x2ea74af300000000, 0x87acc3bd00000000, 0x7cb0586e00000000, | |
| 7361 | + 0xd5bbd12000000000, 0x40d8c40b00000000, 0xe9d34d4500000000, | |
| 7362 | + 0x12cfd69600000000, 0xbbc45fd800000000, 0xa5f091ea00000000, | |
| 7363 | + 0x0cfb18a400000000, 0xf7e7837700000000, 0x5eec0a3900000000, | |
| 7364 | + 0xa9c21e8800000000, 0x00c997c600000000, 0xfbd50c1500000000, | |
| 7365 | + 0x52de855b00000000, 0x4cea4b6900000000, 0xe5e1c22700000000, | |
| 7366 | + 0x1efd59f400000000, 0xb7f6d0ba00000000, 0x2295c59100000000, | |
| 7367 | + 0x8b9e4cdf00000000, 0x7082d70c00000000, 0xd9895e4200000000, | |
| 7368 | + 0xc7bd907000000000, 0x6eb6193e00000000, 0x95aa82ed00000000, | |
| 7369 | + 0x3ca10ba300000000, 0xbf6da8bb00000000, 0x166621f500000000, | |
| 7370 | + 0xed7aba2600000000, 0x4471336800000000, 0x5a45fd5a00000000, | |
| 7371 | + 0xf34e741400000000, 0x0852efc700000000, 0xa159668900000000, | |
| 7372 | + 0x343a73a200000000, 0x9d31faec00000000, 0x662d613f00000000, | |
| 7373 | + 0xcf26e87100000000, 0xd112264300000000, 0x7819af0d00000000, | |
| 7374 | + 0x830534de00000000, 0x2a0ebd9000000000, 0x859c73ef00000000, | |
| 7375 | + 0x2c97faa100000000, 0xd78b617200000000, 0x7e80e83c00000000, | |
| 7376 | + 0x60b4260e00000000, 0xc9bfaf4000000000, 0x32a3349300000000, | |
| 7377 | + 0x9ba8bddd00000000, 0x0ecba8f600000000, 0xa7c021b800000000, | |
| 7378 | + 0x5cdcba6b00000000, 0xf5d7332500000000, 0xebe3fd1700000000, | |
| 7379 | + 0x42e8745900000000, 0xb9f4ef8a00000000, 0x10ff66c400000000, | |
| 7380 | + 0x9333c5dc00000000, 0x3a384c9200000000, 0xc124d74100000000, | |
| 7381 | + 0x682f5e0f00000000, 0x761b903d00000000, 0xdf10197300000000, | |
| 7382 | + 0x240c82a000000000, 0x8d070bee00000000, 0x18641ec500000000, | |
| 7383 | + 0xb16f978b00000000, 0x4a730c5800000000, 0xe378851600000000, | |
| 7384 | + 0xfd4c4b2400000000, 0x5447c26a00000000, 0xaf5b59b900000000, | |
| 7385 | + 0x0650d0f700000000}, | |
| 7386 | + {0x0000000000000000, 0x479244af00000000, 0xcf22f88500000000, | |
| 7387 | + 0x88b0bc2a00000000, 0xdf4381d000000000, 0x98d1c57f00000000, | |
| 7388 | + 0x1061795500000000, 0x57f33dfa00000000, 0xff81737a00000000, | |
| 7389 | + 0xb81337d500000000, 0x30a38bff00000000, 0x7731cf5000000000, | |
| 7390 | + 0x20c2f2aa00000000, 0x6750b60500000000, 0xefe00a2f00000000, | |
| 7391 | + 0xa8724e8000000000, 0xfe03e7f400000000, 0xb991a35b00000000, | |
| 7392 | + 0x31211f7100000000, 0x76b35bde00000000, 0x2140662400000000, | |
| 7393 | + 0x66d2228b00000000, 0xee629ea100000000, 0xa9f0da0e00000000, | |
| 7394 | + 0x0182948e00000000, 0x4610d02100000000, 0xcea06c0b00000000, | |
| 7395 | + 0x893228a400000000, 0xdec1155e00000000, 0x995351f100000000, | |
| 7396 | + 0x11e3eddb00000000, 0x5671a97400000000, 0xbd01bf3200000000, | |
| 7397 | + 0xfa93fb9d00000000, 0x722347b700000000, 0x35b1031800000000, | |
| 7398 | + 0x62423ee200000000, 0x25d07a4d00000000, 0xad60c66700000000, | |
| 7399 | + 0xeaf282c800000000, 0x4280cc4800000000, 0x051288e700000000, | |
| 7400 | + 0x8da234cd00000000, 0xca30706200000000, 0x9dc34d9800000000, | |
| 7401 | + 0xda51093700000000, 0x52e1b51d00000000, 0x1573f1b200000000, | |
| 7402 | + 0x430258c600000000, 0x04901c6900000000, 0x8c20a04300000000, | |
| 7403 | + 0xcbb2e4ec00000000, 0x9c41d91600000000, 0xdbd39db900000000, | |
| 7404 | + 0x5363219300000000, 0x14f1653c00000000, 0xbc832bbc00000000, | |
| 7405 | + 0xfb116f1300000000, 0x73a1d33900000000, 0x3433979600000000, | |
| 7406 | + 0x63c0aa6c00000000, 0x2452eec300000000, 0xace252e900000000, | |
| 7407 | + 0xeb70164600000000, 0x7a037e6500000000, 0x3d913aca00000000, | |
| 7408 | + 0xb52186e000000000, 0xf2b3c24f00000000, 0xa540ffb500000000, | |
| 7409 | + 0xe2d2bb1a00000000, 0x6a62073000000000, 0x2df0439f00000000, | |
| 7410 | + 0x85820d1f00000000, 0xc21049b000000000, 0x4aa0f59a00000000, | |
| 7411 | + 0x0d32b13500000000, 0x5ac18ccf00000000, 0x1d53c86000000000, | |
| 7412 | + 0x95e3744a00000000, 0xd27130e500000000, 0x8400999100000000, | |
| 7413 | + 0xc392dd3e00000000, 0x4b22611400000000, 0x0cb025bb00000000, | |
| 7414 | + 0x5b43184100000000, 0x1cd15cee00000000, 0x9461e0c400000000, | |
| 7415 | + 0xd3f3a46b00000000, 0x7b81eaeb00000000, 0x3c13ae4400000000, | |
| 7416 | + 0xb4a3126e00000000, 0xf33156c100000000, 0xa4c26b3b00000000, | |
| 7417 | + 0xe3502f9400000000, 0x6be093be00000000, 0x2c72d71100000000, | |
| 7418 | + 0xc702c15700000000, 0x809085f800000000, 0x082039d200000000, | |
| 7419 | + 0x4fb27d7d00000000, 0x1841408700000000, 0x5fd3042800000000, | |
| 7420 | + 0xd763b80200000000, 0x90f1fcad00000000, 0x3883b22d00000000, | |
| 7421 | + 0x7f11f68200000000, 0xf7a14aa800000000, 0xb0330e0700000000, | |
| 7422 | + 0xe7c033fd00000000, 0xa052775200000000, 0x28e2cb7800000000, | |
| 7423 | + 0x6f708fd700000000, 0x390126a300000000, 0x7e93620c00000000, | |
| 7424 | + 0xf623de2600000000, 0xb1b19a8900000000, 0xe642a77300000000, | |
| 7425 | + 0xa1d0e3dc00000000, 0x29605ff600000000, 0x6ef21b5900000000, | |
| 7426 | + 0xc68055d900000000, 0x8112117600000000, 0x09a2ad5c00000000, | |
| 7427 | + 0x4e30e9f300000000, 0x19c3d40900000000, 0x5e5190a600000000, | |
| 7428 | + 0xd6e12c8c00000000, 0x9173682300000000, 0xf406fcca00000000, | |
| 7429 | + 0xb394b86500000000, 0x3b24044f00000000, 0x7cb640e000000000, | |
| 7430 | + 0x2b457d1a00000000, 0x6cd739b500000000, 0xe467859f00000000, | |
| 7431 | + 0xa3f5c13000000000, 0x0b878fb000000000, 0x4c15cb1f00000000, | |
| 7432 | + 0xc4a5773500000000, 0x8337339a00000000, 0xd4c40e6000000000, | |
| 7433 | + 0x93564acf00000000, 0x1be6f6e500000000, 0x5c74b24a00000000, | |
| 7434 | + 0x0a051b3e00000000, 0x4d975f9100000000, 0xc527e3bb00000000, | |
| 7435 | + 0x82b5a71400000000, 0xd5469aee00000000, 0x92d4de4100000000, | |
| 7436 | + 0x1a64626b00000000, 0x5df626c400000000, 0xf584684400000000, | |
| 7437 | + 0xb2162ceb00000000, 0x3aa690c100000000, 0x7d34d46e00000000, | |
| 7438 | + 0x2ac7e99400000000, 0x6d55ad3b00000000, 0xe5e5111100000000, | |
| 7439 | + 0xa27755be00000000, 0x490743f800000000, 0x0e95075700000000, | |
| 7440 | + 0x8625bb7d00000000, 0xc1b7ffd200000000, 0x9644c22800000000, | |
| 7441 | + 0xd1d6868700000000, 0x59663aad00000000, 0x1ef47e0200000000, | |
| 7442 | + 0xb686308200000000, 0xf114742d00000000, 0x79a4c80700000000, | |
| 7443 | + 0x3e368ca800000000, 0x69c5b15200000000, 0x2e57f5fd00000000, | |
| 7444 | + 0xa6e749d700000000, 0xe1750d7800000000, 0xb704a40c00000000, | |
| 7445 | + 0xf096e0a300000000, 0x78265c8900000000, 0x3fb4182600000000, | |
| 7446 | + 0x684725dc00000000, 0x2fd5617300000000, 0xa765dd5900000000, | |
| 7447 | + 0xe0f799f600000000, 0x4885d77600000000, 0x0f1793d900000000, | |
| 7448 | + 0x87a72ff300000000, 0xc0356b5c00000000, 0x97c656a600000000, | |
| 7449 | + 0xd054120900000000, 0x58e4ae2300000000, 0x1f76ea8c00000000, | |
| 7450 | + 0x8e0582af00000000, 0xc997c60000000000, 0x41277a2a00000000, | |
| 7451 | + 0x06b53e8500000000, 0x5146037f00000000, 0x16d447d000000000, | |
| 7452 | + 0x9e64fbfa00000000, 0xd9f6bf5500000000, 0x7184f1d500000000, | |
| 7453 | + 0x3616b57a00000000, 0xbea6095000000000, 0xf9344dff00000000, | |
| 7454 | + 0xaec7700500000000, 0xe95534aa00000000, 0x61e5888000000000, | |
| 7455 | + 0x2677cc2f00000000, 0x7006655b00000000, 0x379421f400000000, | |
| 7456 | + 0xbf249dde00000000, 0xf8b6d97100000000, 0xaf45e48b00000000, | |
| 7457 | + 0xe8d7a02400000000, 0x60671c0e00000000, 0x27f558a100000000, | |
| 7458 | + 0x8f87162100000000, 0xc815528e00000000, 0x40a5eea400000000, | |
| 7459 | + 0x0737aa0b00000000, 0x50c497f100000000, 0x1756d35e00000000, | |
| 7460 | + 0x9fe66f7400000000, 0xd8742bdb00000000, 0x33043d9d00000000, | |
| 7461 | + 0x7496793200000000, 0xfc26c51800000000, 0xbbb481b700000000, | |
| 7462 | + 0xec47bc4d00000000, 0xabd5f8e200000000, 0x236544c800000000, | |
| 7463 | + 0x64f7006700000000, 0xcc854ee700000000, 0x8b170a4800000000, | |
| 7464 | + 0x03a7b66200000000, 0x4435f2cd00000000, 0x13c6cf3700000000, | |
| 7465 | + 0x54548b9800000000, 0xdce437b200000000, 0x9b76731d00000000, | |
| 7466 | + 0xcd07da6900000000, 0x8a959ec600000000, 0x022522ec00000000, | |
| 7467 | + 0x45b7664300000000, 0x12445bb900000000, 0x55d61f1600000000, | |
| 7468 | + 0xdd66a33c00000000, 0x9af4e79300000000, 0x3286a91300000000, | |
| 7469 | + 0x7514edbc00000000, 0xfda4519600000000, 0xba36153900000000, | |
| 7470 | + 0xedc528c300000000, 0xaa576c6c00000000, 0x22e7d04600000000, | |
| 7471 | + 0x657594e900000000}}; | |
| 7472 | + | |
| 7473 | +#else /* W == 4 */ | |
| 7474 | + | |
| 7475 | +local const z_crc_t FAR crc_braid_table[][256] = { | |
| 7476 | + {0x00000000, 0x65673b46, 0xcace768c, 0xafa94dca, 0x4eedeb59, | |
| 7477 | + 0x2b8ad01f, 0x84239dd5, 0xe144a693, 0x9ddbd6b2, 0xf8bcedf4, | |
| 7478 | + 0x5715a03e, 0x32729b78, 0xd3363deb, 0xb65106ad, 0x19f84b67, | |
| 7479 | + 0x7c9f7021, 0xe0c6ab25, 0x85a19063, 0x2a08dda9, 0x4f6fe6ef, | |
| 7480 | + 0xae2b407c, 0xcb4c7b3a, 0x64e536f0, 0x01820db6, 0x7d1d7d97, | |
| 7481 | + 0x187a46d1, 0xb7d30b1b, 0xd2b4305d, 0x33f096ce, 0x5697ad88, | |
| 7482 | + 0xf93ee042, 0x9c59db04, 0x1afc500b, 0x7f9b6b4d, 0xd0322687, | |
| 7483 | + 0xb5551dc1, 0x5411bb52, 0x31768014, 0x9edfcdde, 0xfbb8f698, | |
| 7484 | + 0x872786b9, 0xe240bdff, 0x4de9f035, 0x288ecb73, 0xc9ca6de0, | |
| 7485 | + 0xacad56a6, 0x03041b6c, 0x6663202a, 0xfa3afb2e, 0x9f5dc068, | |
| 7486 | + 0x30f48da2, 0x5593b6e4, 0xb4d71077, 0xd1b02b31, 0x7e1966fb, | |
| 7487 | + 0x1b7e5dbd, 0x67e12d9c, 0x028616da, 0xad2f5b10, 0xc8486056, | |
| 7488 | + 0x290cc6c5, 0x4c6bfd83, 0xe3c2b049, 0x86a58b0f, 0x35f8a016, | |
| 7489 | + 0x509f9b50, 0xff36d69a, 0x9a51eddc, 0x7b154b4f, 0x1e727009, | |
| 7490 | + 0xb1db3dc3, 0xd4bc0685, 0xa82376a4, 0xcd444de2, 0x62ed0028, | |
| 7491 | + 0x078a3b6e, 0xe6ce9dfd, 0x83a9a6bb, 0x2c00eb71, 0x4967d037, | |
| 7492 | + 0xd53e0b33, 0xb0593075, 0x1ff07dbf, 0x7a9746f9, 0x9bd3e06a, | |
| 7493 | + 0xfeb4db2c, 0x511d96e6, 0x347aada0, 0x48e5dd81, 0x2d82e6c7, | |
| 7494 | + 0x822bab0d, 0xe74c904b, 0x060836d8, 0x636f0d9e, 0xccc64054, | |
| 7495 | + 0xa9a17b12, 0x2f04f01d, 0x4a63cb5b, 0xe5ca8691, 0x80adbdd7, | |
| 7496 | + 0x61e91b44, 0x048e2002, 0xab276dc8, 0xce40568e, 0xb2df26af, | |
| 7497 | + 0xd7b81de9, 0x78115023, 0x1d766b65, 0xfc32cdf6, 0x9955f6b0, | |
| 7498 | + 0x36fcbb7a, 0x539b803c, 0xcfc25b38, 0xaaa5607e, 0x050c2db4, | |
| 7499 | + 0x606b16f2, 0x812fb061, 0xe4488b27, 0x4be1c6ed, 0x2e86fdab, | |
| 7500 | + 0x52198d8a, 0x377eb6cc, 0x98d7fb06, 0xfdb0c040, 0x1cf466d3, | |
| 7501 | + 0x79935d95, 0xd63a105f, 0xb35d2b19, 0x6bf1402c, 0x0e967b6a, | |
| 7502 | + 0xa13f36a0, 0xc4580de6, 0x251cab75, 0x407b9033, 0xefd2ddf9, | |
| 7503 | + 0x8ab5e6bf, 0xf62a969e, 0x934dadd8, 0x3ce4e012, 0x5983db54, | |
| 7504 | + 0xb8c77dc7, 0xdda04681, 0x72090b4b, 0x176e300d, 0x8b37eb09, | |
| 7505 | + 0xee50d04f, 0x41f99d85, 0x249ea6c3, 0xc5da0050, 0xa0bd3b16, | |
| 7506 | + 0x0f1476dc, 0x6a734d9a, 0x16ec3dbb, 0x738b06fd, 0xdc224b37, | |
| 7507 | + 0xb9457071, 0x5801d6e2, 0x3d66eda4, 0x92cfa06e, 0xf7a89b28, | |
| 7508 | + 0x710d1027, 0x146a2b61, 0xbbc366ab, 0xdea45ded, 0x3fe0fb7e, | |
| 7509 | + 0x5a87c038, 0xf52e8df2, 0x9049b6b4, 0xecd6c695, 0x89b1fdd3, | |
| 7510 | + 0x2618b019, 0x437f8b5f, 0xa23b2dcc, 0xc75c168a, 0x68f55b40, | |
| 7511 | + 0x0d926006, 0x91cbbb02, 0xf4ac8044, 0x5b05cd8e, 0x3e62f6c8, | |
| 7512 | + 0xdf26505b, 0xba416b1d, 0x15e826d7, 0x708f1d91, 0x0c106db0, | |
| 7513 | + 0x697756f6, 0xc6de1b3c, 0xa3b9207a, 0x42fd86e9, 0x279abdaf, | |
| 7514 | + 0x8833f065, 0xed54cb23, 0x5e09e03a, 0x3b6edb7c, 0x94c796b6, | |
| 7515 | + 0xf1a0adf0, 0x10e40b63, 0x75833025, 0xda2a7def, 0xbf4d46a9, | |
| 7516 | + 0xc3d23688, 0xa6b50dce, 0x091c4004, 0x6c7b7b42, 0x8d3fddd1, | |
| 7517 | + 0xe858e697, 0x47f1ab5d, 0x2296901b, 0xbecf4b1f, 0xdba87059, | |
| 7518 | + 0x74013d93, 0x116606d5, 0xf022a046, 0x95459b00, 0x3aecd6ca, | |
| 7519 | + 0x5f8bed8c, 0x23149dad, 0x4673a6eb, 0xe9daeb21, 0x8cbdd067, | |
| 7520 | + 0x6df976f4, 0x089e4db2, 0xa7370078, 0xc2503b3e, 0x44f5b031, | |
| 7521 | + 0x21928b77, 0x8e3bc6bd, 0xeb5cfdfb, 0x0a185b68, 0x6f7f602e, | |
| 7522 | + 0xc0d62de4, 0xa5b116a2, 0xd92e6683, 0xbc495dc5, 0x13e0100f, | |
| 7523 | + 0x76872b49, 0x97c38dda, 0xf2a4b69c, 0x5d0dfb56, 0x386ac010, | |
| 7524 | + 0xa4331b14, 0xc1542052, 0x6efd6d98, 0x0b9a56de, 0xeadef04d, | |
| 7525 | + 0x8fb9cb0b, 0x201086c1, 0x4577bd87, 0x39e8cda6, 0x5c8ff6e0, | |
| 7526 | + 0xf326bb2a, 0x9641806c, 0x770526ff, 0x12621db9, 0xbdcb5073, | |
| 7527 | + 0xd8ac6b35}, | |
| 7528 | + {0x00000000, 0xd7e28058, 0x74b406f1, 0xa35686a9, 0xe9680de2, | |
| 7529 | + 0x3e8a8dba, 0x9ddc0b13, 0x4a3e8b4b, 0x09a11d85, 0xde439ddd, | |
| 7530 | + 0x7d151b74, 0xaaf79b2c, 0xe0c91067, 0x372b903f, 0x947d1696, | |
| 7531 | + 0x439f96ce, 0x13423b0a, 0xc4a0bb52, 0x67f63dfb, 0xb014bda3, | |
| 7532 | + 0xfa2a36e8, 0x2dc8b6b0, 0x8e9e3019, 0x597cb041, 0x1ae3268f, | |
| 7533 | + 0xcd01a6d7, 0x6e57207e, 0xb9b5a026, 0xf38b2b6d, 0x2469ab35, | |
| 7534 | + 0x873f2d9c, 0x50ddadc4, 0x26847614, 0xf166f64c, 0x523070e5, | |
| 7535 | + 0x85d2f0bd, 0xcfec7bf6, 0x180efbae, 0xbb587d07, 0x6cbafd5f, | |
| 7536 | + 0x2f256b91, 0xf8c7ebc9, 0x5b916d60, 0x8c73ed38, 0xc64d6673, | |
| 7537 | + 0x11afe62b, 0xb2f96082, 0x651be0da, 0x35c64d1e, 0xe224cd46, | |
| 7538 | + 0x41724bef, 0x9690cbb7, 0xdcae40fc, 0x0b4cc0a4, 0xa81a460d, | |
| 7539 | + 0x7ff8c655, 0x3c67509b, 0xeb85d0c3, 0x48d3566a, 0x9f31d632, | |
| 7540 | + 0xd50f5d79, 0x02eddd21, 0xa1bb5b88, 0x7659dbd0, 0x4d08ec28, | |
| 7541 | + 0x9aea6c70, 0x39bcead9, 0xee5e6a81, 0xa460e1ca, 0x73826192, | |
| 7542 | + 0xd0d4e73b, 0x07366763, 0x44a9f1ad, 0x934b71f5, 0x301df75c, | |
| 7543 | + 0xe7ff7704, 0xadc1fc4f, 0x7a237c17, 0xd975fabe, 0x0e977ae6, | |
| 7544 | + 0x5e4ad722, 0x89a8577a, 0x2afed1d3, 0xfd1c518b, 0xb722dac0, | |
| 7545 | + 0x60c05a98, 0xc396dc31, 0x14745c69, 0x57ebcaa7, 0x80094aff, | |
| 7546 | + 0x235fcc56, 0xf4bd4c0e, 0xbe83c745, 0x6961471d, 0xca37c1b4, | |
| 7547 | + 0x1dd541ec, 0x6b8c9a3c, 0xbc6e1a64, 0x1f389ccd, 0xc8da1c95, | |
| 7548 | + 0x82e497de, 0x55061786, 0xf650912f, 0x21b21177, 0x622d87b9, | |
| 7549 | + 0xb5cf07e1, 0x16998148, 0xc17b0110, 0x8b458a5b, 0x5ca70a03, | |
| 7550 | + 0xfff18caa, 0x28130cf2, 0x78cea136, 0xaf2c216e, 0x0c7aa7c7, | |
| 7551 | + 0xdb98279f, 0x91a6acd4, 0x46442c8c, 0xe512aa25, 0x32f02a7d, | |
| 7552 | + 0x716fbcb3, 0xa68d3ceb, 0x05dbba42, 0xd2393a1a, 0x9807b151, | |
| 7553 | + 0x4fe53109, 0xecb3b7a0, 0x3b5137f8, 0x9a11d850, 0x4df35808, | |
| 7554 | + 0xeea5dea1, 0x39475ef9, 0x7379d5b2, 0xa49b55ea, 0x07cdd343, | |
| 7555 | + 0xd02f531b, 0x93b0c5d5, 0x4452458d, 0xe704c324, 0x30e6437c, | |
| 7556 | + 0x7ad8c837, 0xad3a486f, 0x0e6ccec6, 0xd98e4e9e, 0x8953e35a, | |
| 7557 | + 0x5eb16302, 0xfde7e5ab, 0x2a0565f3, 0x603beeb8, 0xb7d96ee0, | |
| 7558 | + 0x148fe849, 0xc36d6811, 0x80f2fedf, 0x57107e87, 0xf446f82e, | |
| 7559 | + 0x23a47876, 0x699af33d, 0xbe787365, 0x1d2ef5cc, 0xcacc7594, | |
| 7560 | + 0xbc95ae44, 0x6b772e1c, 0xc821a8b5, 0x1fc328ed, 0x55fda3a6, | |
| 7561 | + 0x821f23fe, 0x2149a557, 0xf6ab250f, 0xb534b3c1, 0x62d63399, | |
| 7562 | + 0xc180b530, 0x16623568, 0x5c5cbe23, 0x8bbe3e7b, 0x28e8b8d2, | |
| 7563 | + 0xff0a388a, 0xafd7954e, 0x78351516, 0xdb6393bf, 0x0c8113e7, | |
| 7564 | + 0x46bf98ac, 0x915d18f4, 0x320b9e5d, 0xe5e91e05, 0xa67688cb, | |
| 7565 | + 0x71940893, 0xd2c28e3a, 0x05200e62, 0x4f1e8529, 0x98fc0571, | |
| 7566 | + 0x3baa83d8, 0xec480380, 0xd7193478, 0x00fbb420, 0xa3ad3289, | |
| 7567 | + 0x744fb2d1, 0x3e71399a, 0xe993b9c2, 0x4ac53f6b, 0x9d27bf33, | |
| 7568 | + 0xdeb829fd, 0x095aa9a5, 0xaa0c2f0c, 0x7deeaf54, 0x37d0241f, | |
| 7569 | + 0xe032a447, 0x436422ee, 0x9486a2b6, 0xc45b0f72, 0x13b98f2a, | |
| 7570 | + 0xb0ef0983, 0x670d89db, 0x2d330290, 0xfad182c8, 0x59870461, | |
| 7571 | + 0x8e658439, 0xcdfa12f7, 0x1a1892af, 0xb94e1406, 0x6eac945e, | |
| 7572 | + 0x24921f15, 0xf3709f4d, 0x502619e4, 0x87c499bc, 0xf19d426c, | |
| 7573 | + 0x267fc234, 0x8529449d, 0x52cbc4c5, 0x18f54f8e, 0xcf17cfd6, | |
| 7574 | + 0x6c41497f, 0xbba3c927, 0xf83c5fe9, 0x2fdedfb1, 0x8c885918, | |
| 7575 | + 0x5b6ad940, 0x1154520b, 0xc6b6d253, 0x65e054fa, 0xb202d4a2, | |
| 7576 | + 0xe2df7966, 0x353df93e, 0x966b7f97, 0x4189ffcf, 0x0bb77484, | |
| 7577 | + 0xdc55f4dc, 0x7f037275, 0xa8e1f22d, 0xeb7e64e3, 0x3c9ce4bb, | |
| 7578 | + 0x9fca6212, 0x4828e24a, 0x02166901, 0xd5f4e959, 0x76a26ff0, | |
| 7579 | + 0xa140efa8}, | |
| 7580 | + {0x00000000, 0xef52b6e1, 0x05d46b83, 0xea86dd62, 0x0ba8d706, | |
| 7581 | + 0xe4fa61e7, 0x0e7cbc85, 0xe12e0a64, 0x1751ae0c, 0xf80318ed, | |
| 7582 | + 0x1285c58f, 0xfdd7736e, 0x1cf9790a, 0xf3abcfeb, 0x192d1289, | |
| 7583 | + 0xf67fa468, 0x2ea35c18, 0xc1f1eaf9, 0x2b77379b, 0xc425817a, | |
| 7584 | + 0x250b8b1e, 0xca593dff, 0x20dfe09d, 0xcf8d567c, 0x39f2f214, | |
| 7585 | + 0xd6a044f5, 0x3c269997, 0xd3742f76, 0x325a2512, 0xdd0893f3, | |
| 7586 | + 0x378e4e91, 0xd8dcf870, 0x5d46b830, 0xb2140ed1, 0x5892d3b3, | |
| 7587 | + 0xb7c06552, 0x56ee6f36, 0xb9bcd9d7, 0x533a04b5, 0xbc68b254, | |
| 7588 | + 0x4a17163c, 0xa545a0dd, 0x4fc37dbf, 0xa091cb5e, 0x41bfc13a, | |
| 7589 | + 0xaeed77db, 0x446baab9, 0xab391c58, 0x73e5e428, 0x9cb752c9, | |
| 7590 | + 0x76318fab, 0x9963394a, 0x784d332e, 0x971f85cf, 0x7d9958ad, | |
| 7591 | + 0x92cbee4c, 0x64b44a24, 0x8be6fcc5, 0x616021a7, 0x8e329746, | |
| 7592 | + 0x6f1c9d22, 0x804e2bc3, 0x6ac8f6a1, 0x859a4040, 0xba8d7060, | |
| 7593 | + 0x55dfc681, 0xbf591be3, 0x500bad02, 0xb125a766, 0x5e771187, | |
| 7594 | + 0xb4f1cce5, 0x5ba37a04, 0xaddcde6c, 0x428e688d, 0xa808b5ef, | |
| 7595 | + 0x475a030e, 0xa674096a, 0x4926bf8b, 0xa3a062e9, 0x4cf2d408, | |
| 7596 | + 0x942e2c78, 0x7b7c9a99, 0x91fa47fb, 0x7ea8f11a, 0x9f86fb7e, | |
| 7597 | + 0x70d44d9f, 0x9a5290fd, 0x7500261c, 0x837f8274, 0x6c2d3495, | |
| 7598 | + 0x86abe9f7, 0x69f95f16, 0x88d75572, 0x6785e393, 0x8d033ef1, | |
| 7599 | + 0x62518810, 0xe7cbc850, 0x08997eb1, 0xe21fa3d3, 0x0d4d1532, | |
| 7600 | + 0xec631f56, 0x0331a9b7, 0xe9b774d5, 0x06e5c234, 0xf09a665c, | |
| 7601 | + 0x1fc8d0bd, 0xf54e0ddf, 0x1a1cbb3e, 0xfb32b15a, 0x146007bb, | |
| 7602 | + 0xfee6dad9, 0x11b46c38, 0xc9689448, 0x263a22a9, 0xccbcffcb, | |
| 7603 | + 0x23ee492a, 0xc2c0434e, 0x2d92f5af, 0xc71428cd, 0x28469e2c, | |
| 7604 | + 0xde393a44, 0x316b8ca5, 0xdbed51c7, 0x34bfe726, 0xd591ed42, | |
| 7605 | + 0x3ac35ba3, 0xd04586c1, 0x3f173020, 0xae6be681, 0x41395060, | |
| 7606 | + 0xabbf8d02, 0x44ed3be3, 0xa5c33187, 0x4a918766, 0xa0175a04, | |
| 7607 | + 0x4f45ece5, 0xb93a488d, 0x5668fe6c, 0xbcee230e, 0x53bc95ef, | |
| 7608 | + 0xb2929f8b, 0x5dc0296a, 0xb746f408, 0x581442e9, 0x80c8ba99, | |
| 7609 | + 0x6f9a0c78, 0x851cd11a, 0x6a4e67fb, 0x8b606d9f, 0x6432db7e, | |
| 7610 | + 0x8eb4061c, 0x61e6b0fd, 0x97991495, 0x78cba274, 0x924d7f16, | |
| 7611 | + 0x7d1fc9f7, 0x9c31c393, 0x73637572, 0x99e5a810, 0x76b71ef1, | |
| 7612 | + 0xf32d5eb1, 0x1c7fe850, 0xf6f93532, 0x19ab83d3, 0xf88589b7, | |
| 7613 | + 0x17d73f56, 0xfd51e234, 0x120354d5, 0xe47cf0bd, 0x0b2e465c, | |
| 7614 | + 0xe1a89b3e, 0x0efa2ddf, 0xefd427bb, 0x0086915a, 0xea004c38, | |
| 7615 | + 0x0552fad9, 0xdd8e02a9, 0x32dcb448, 0xd85a692a, 0x3708dfcb, | |
| 7616 | + 0xd626d5af, 0x3974634e, 0xd3f2be2c, 0x3ca008cd, 0xcadfaca5, | |
| 7617 | + 0x258d1a44, 0xcf0bc726, 0x205971c7, 0xc1777ba3, 0x2e25cd42, | |
| 7618 | + 0xc4a31020, 0x2bf1a6c1, 0x14e696e1, 0xfbb42000, 0x1132fd62, | |
| 7619 | + 0xfe604b83, 0x1f4e41e7, 0xf01cf706, 0x1a9a2a64, 0xf5c89c85, | |
| 7620 | + 0x03b738ed, 0xece58e0c, 0x0663536e, 0xe931e58f, 0x081fefeb, | |
| 7621 | + 0xe74d590a, 0x0dcb8468, 0xe2993289, 0x3a45caf9, 0xd5177c18, | |
| 7622 | + 0x3f91a17a, 0xd0c3179b, 0x31ed1dff, 0xdebfab1e, 0x3439767c, | |
| 7623 | + 0xdb6bc09d, 0x2d1464f5, 0xc246d214, 0x28c00f76, 0xc792b997, | |
| 7624 | + 0x26bcb3f3, 0xc9ee0512, 0x2368d870, 0xcc3a6e91, 0x49a02ed1, | |
| 7625 | + 0xa6f29830, 0x4c744552, 0xa326f3b3, 0x4208f9d7, 0xad5a4f36, | |
| 7626 | + 0x47dc9254, 0xa88e24b5, 0x5ef180dd, 0xb1a3363c, 0x5b25eb5e, | |
| 7627 | + 0xb4775dbf, 0x555957db, 0xba0be13a, 0x508d3c58, 0xbfdf8ab9, | |
| 7628 | + 0x670372c9, 0x8851c428, 0x62d7194a, 0x8d85afab, 0x6caba5cf, | |
| 7629 | + 0x83f9132e, 0x697fce4c, 0x862d78ad, 0x7052dcc5, 0x9f006a24, | |
| 7630 | + 0x7586b746, 0x9ad401a7, 0x7bfa0bc3, 0x94a8bd22, 0x7e2e6040, | |
| 7631 | + 0x917cd6a1}, | |
| 7632 | + {0x00000000, 0x87a6cb43, 0xd43c90c7, 0x539a5b84, 0x730827cf, | |
| 7633 | + 0xf4aeec8c, 0xa734b708, 0x20927c4b, 0xe6104f9e, 0x61b684dd, | |
| 7634 | + 0x322cdf59, 0xb58a141a, 0x95186851, 0x12bea312, 0x4124f896, | |
| 7635 | + 0xc68233d5, 0x1751997d, 0x90f7523e, 0xc36d09ba, 0x44cbc2f9, | |
| 7636 | + 0x6459beb2, 0xe3ff75f1, 0xb0652e75, 0x37c3e536, 0xf141d6e3, | |
| 7637 | + 0x76e71da0, 0x257d4624, 0xa2db8d67, 0x8249f12c, 0x05ef3a6f, | |
| 7638 | + 0x567561eb, 0xd1d3aaa8, 0x2ea332fa, 0xa905f9b9, 0xfa9fa23d, | |
| 7639 | + 0x7d39697e, 0x5dab1535, 0xda0dde76, 0x899785f2, 0x0e314eb1, | |
| 7640 | + 0xc8b37d64, 0x4f15b627, 0x1c8feda3, 0x9b2926e0, 0xbbbb5aab, | |
| 7641 | + 0x3c1d91e8, 0x6f87ca6c, 0xe821012f, 0x39f2ab87, 0xbe5460c4, | |
| 7642 | + 0xedce3b40, 0x6a68f003, 0x4afa8c48, 0xcd5c470b, 0x9ec61c8f, | |
| 7643 | + 0x1960d7cc, 0xdfe2e419, 0x58442f5a, 0x0bde74de, 0x8c78bf9d, | |
| 7644 | + 0xaceac3d6, 0x2b4c0895, 0x78d65311, 0xff709852, 0x5d4665f4, | |
| 7645 | + 0xdae0aeb7, 0x897af533, 0x0edc3e70, 0x2e4e423b, 0xa9e88978, | |
| 7646 | + 0xfa72d2fc, 0x7dd419bf, 0xbb562a6a, 0x3cf0e129, 0x6f6abaad, | |
| 7647 | + 0xe8cc71ee, 0xc85e0da5, 0x4ff8c6e6, 0x1c629d62, 0x9bc45621, | |
| 7648 | + 0x4a17fc89, 0xcdb137ca, 0x9e2b6c4e, 0x198da70d, 0x391fdb46, | |
| 7649 | + 0xbeb91005, 0xed234b81, 0x6a8580c2, 0xac07b317, 0x2ba17854, | |
| 7650 | + 0x783b23d0, 0xff9de893, 0xdf0f94d8, 0x58a95f9b, 0x0b33041f, | |
| 7651 | + 0x8c95cf5c, 0x73e5570e, 0xf4439c4d, 0xa7d9c7c9, 0x207f0c8a, | |
| 7652 | + 0x00ed70c1, 0x874bbb82, 0xd4d1e006, 0x53772b45, 0x95f51890, | |
| 7653 | + 0x1253d3d3, 0x41c98857, 0xc66f4314, 0xe6fd3f5f, 0x615bf41c, | |
| 7654 | + 0x32c1af98, 0xb56764db, 0x64b4ce73, 0xe3120530, 0xb0885eb4, | |
| 7655 | + 0x372e95f7, 0x17bce9bc, 0x901a22ff, 0xc380797b, 0x4426b238, | |
| 7656 | + 0x82a481ed, 0x05024aae, 0x5698112a, 0xd13eda69, 0xf1aca622, | |
| 7657 | + 0x760a6d61, 0x259036e5, 0xa236fda6, 0xba8ccbe8, 0x3d2a00ab, | |
| 7658 | + 0x6eb05b2f, 0xe916906c, 0xc984ec27, 0x4e222764, 0x1db87ce0, | |
| 7659 | + 0x9a1eb7a3, 0x5c9c8476, 0xdb3a4f35, 0x88a014b1, 0x0f06dff2, | |
| 7660 | + 0x2f94a3b9, 0xa83268fa, 0xfba8337e, 0x7c0ef83d, 0xaddd5295, | |
| 7661 | + 0x2a7b99d6, 0x79e1c252, 0xfe470911, 0xded5755a, 0x5973be19, | |
| 7662 | + 0x0ae9e59d, 0x8d4f2ede, 0x4bcd1d0b, 0xcc6bd648, 0x9ff18dcc, | |
| 7663 | + 0x1857468f, 0x38c53ac4, 0xbf63f187, 0xecf9aa03, 0x6b5f6140, | |
| 7664 | + 0x942ff912, 0x13893251, 0x401369d5, 0xc7b5a296, 0xe727dedd, | |
| 7665 | + 0x6081159e, 0x331b4e1a, 0xb4bd8559, 0x723fb68c, 0xf5997dcf, | |
| 7666 | + 0xa603264b, 0x21a5ed08, 0x01379143, 0x86915a00, 0xd50b0184, | |
| 7667 | + 0x52adcac7, 0x837e606f, 0x04d8ab2c, 0x5742f0a8, 0xd0e43beb, | |
| 7668 | + 0xf07647a0, 0x77d08ce3, 0x244ad767, 0xa3ec1c24, 0x656e2ff1, | |
| 7669 | + 0xe2c8e4b2, 0xb152bf36, 0x36f47475, 0x1666083e, 0x91c0c37d, | |
| 7670 | + 0xc25a98f9, 0x45fc53ba, 0xe7caae1c, 0x606c655f, 0x33f63edb, | |
| 7671 | + 0xb450f598, 0x94c289d3, 0x13644290, 0x40fe1914, 0xc758d257, | |
| 7672 | + 0x01dae182, 0x867c2ac1, 0xd5e67145, 0x5240ba06, 0x72d2c64d, | |
| 7673 | + 0xf5740d0e, 0xa6ee568a, 0x21489dc9, 0xf09b3761, 0x773dfc22, | |
| 7674 | + 0x24a7a7a6, 0xa3016ce5, 0x839310ae, 0x0435dbed, 0x57af8069, | |
| 7675 | + 0xd0094b2a, 0x168b78ff, 0x912db3bc, 0xc2b7e838, 0x4511237b, | |
| 7676 | + 0x65835f30, 0xe2259473, 0xb1bfcff7, 0x361904b4, 0xc9699ce6, | |
| 7677 | + 0x4ecf57a5, 0x1d550c21, 0x9af3c762, 0xba61bb29, 0x3dc7706a, | |
| 7678 | + 0x6e5d2bee, 0xe9fbe0ad, 0x2f79d378, 0xa8df183b, 0xfb4543bf, | |
| 7679 | + 0x7ce388fc, 0x5c71f4b7, 0xdbd73ff4, 0x884d6470, 0x0febaf33, | |
| 7680 | + 0xde38059b, 0x599eced8, 0x0a04955c, 0x8da25e1f, 0xad302254, | |
| 7681 | + 0x2a96e917, 0x790cb293, 0xfeaa79d0, 0x38284a05, 0xbf8e8146, | |
| 7682 | + 0xec14dac2, 0x6bb21181, 0x4b206dca, 0xcc86a689, 0x9f1cfd0d, | |
| 7683 | + 0x18ba364e}}; | |
| 7684 | + | |
| 7685 | +local const z_word_t FAR crc_braid_big_table[][256] = { | |
| 7686 | + {0x00000000, 0x43cba687, 0xc7903cd4, 0x845b9a53, 0xcf270873, | |
| 7687 | + 0x8cecaef4, 0x08b734a7, 0x4b7c9220, 0x9e4f10e6, 0xdd84b661, | |
| 7688 | + 0x59df2c32, 0x1a148ab5, 0x51681895, 0x12a3be12, 0x96f82441, | |
| 7689 | + 0xd53382c6, 0x7d995117, 0x3e52f790, 0xba096dc3, 0xf9c2cb44, | |
| 7690 | + 0xb2be5964, 0xf175ffe3, 0x752e65b0, 0x36e5c337, 0xe3d641f1, | |
| 7691 | + 0xa01de776, 0x24467d25, 0x678ddba2, 0x2cf14982, 0x6f3aef05, | |
| 7692 | + 0xeb617556, 0xa8aad3d1, 0xfa32a32e, 0xb9f905a9, 0x3da29ffa, | |
| 7693 | + 0x7e69397d, 0x3515ab5d, 0x76de0dda, 0xf2859789, 0xb14e310e, | |
| 7694 | + 0x647db3c8, 0x27b6154f, 0xa3ed8f1c, 0xe026299b, 0xab5abbbb, | |
| 7695 | + 0xe8911d3c, 0x6cca876f, 0x2f0121e8, 0x87abf239, 0xc46054be, | |
| 7696 | + 0x403bceed, 0x03f0686a, 0x488cfa4a, 0x0b475ccd, 0x8f1cc69e, | |
| 7697 | + 0xccd76019, 0x19e4e2df, 0x5a2f4458, 0xde74de0b, 0x9dbf788c, | |
| 7698 | + 0xd6c3eaac, 0x95084c2b, 0x1153d678, 0x529870ff, 0xf465465d, | |
| 7699 | + 0xb7aee0da, 0x33f57a89, 0x703edc0e, 0x3b424e2e, 0x7889e8a9, | |
| 7700 | + 0xfcd272fa, 0xbf19d47d, 0x6a2a56bb, 0x29e1f03c, 0xadba6a6f, | |
| 7701 | + 0xee71cce8, 0xa50d5ec8, 0xe6c6f84f, 0x629d621c, 0x2156c49b, | |
| 7702 | + 0x89fc174a, 0xca37b1cd, 0x4e6c2b9e, 0x0da78d19, 0x46db1f39, | |
| 7703 | + 0x0510b9be, 0x814b23ed, 0xc280856a, 0x17b307ac, 0x5478a12b, | |
| 7704 | + 0xd0233b78, 0x93e89dff, 0xd8940fdf, 0x9b5fa958, 0x1f04330b, | |
| 7705 | + 0x5ccf958c, 0x0e57e573, 0x4d9c43f4, 0xc9c7d9a7, 0x8a0c7f20, | |
| 7706 | + 0xc170ed00, 0x82bb4b87, 0x06e0d1d4, 0x452b7753, 0x9018f595, | |
| 7707 | + 0xd3d35312, 0x5788c941, 0x14436fc6, 0x5f3ffde6, 0x1cf45b61, | |
| 7708 | + 0x98afc132, 0xdb6467b5, 0x73ceb464, 0x300512e3, 0xb45e88b0, | |
| 7709 | + 0xf7952e37, 0xbce9bc17, 0xff221a90, 0x7b7980c3, 0x38b22644, | |
| 7710 | + 0xed81a482, 0xae4a0205, 0x2a119856, 0x69da3ed1, 0x22a6acf1, | |
| 7711 | + 0x616d0a76, 0xe5369025, 0xa6fd36a2, 0xe8cb8cba, 0xab002a3d, | |
| 7712 | + 0x2f5bb06e, 0x6c9016e9, 0x27ec84c9, 0x6427224e, 0xe07cb81d, | |
| 7713 | + 0xa3b71e9a, 0x76849c5c, 0x354f3adb, 0xb114a088, 0xf2df060f, | |
| 7714 | + 0xb9a3942f, 0xfa6832a8, 0x7e33a8fb, 0x3df80e7c, 0x9552ddad, | |
| 7715 | + 0xd6997b2a, 0x52c2e179, 0x110947fe, 0x5a75d5de, 0x19be7359, | |
| 7716 | + 0x9de5e90a, 0xde2e4f8d, 0x0b1dcd4b, 0x48d66bcc, 0xcc8df19f, | |
| 7717 | + 0x8f465718, 0xc43ac538, 0x87f163bf, 0x03aaf9ec, 0x40615f6b, | |
| 7718 | + 0x12f92f94, 0x51328913, 0xd5691340, 0x96a2b5c7, 0xddde27e7, | |
| 7719 | + 0x9e158160, 0x1a4e1b33, 0x5985bdb4, 0x8cb63f72, 0xcf7d99f5, | |
| 7720 | + 0x4b2603a6, 0x08eda521, 0x43913701, 0x005a9186, 0x84010bd5, | |
| 7721 | + 0xc7caad52, 0x6f607e83, 0x2cabd804, 0xa8f04257, 0xeb3be4d0, | |
| 7722 | + 0xa04776f0, 0xe38cd077, 0x67d74a24, 0x241ceca3, 0xf12f6e65, | |
| 7723 | + 0xb2e4c8e2, 0x36bf52b1, 0x7574f436, 0x3e086616, 0x7dc3c091, | |
| 7724 | + 0xf9985ac2, 0xba53fc45, 0x1caecae7, 0x5f656c60, 0xdb3ef633, | |
| 7725 | + 0x98f550b4, 0xd389c294, 0x90426413, 0x1419fe40, 0x57d258c7, | |
| 7726 | + 0x82e1da01, 0xc12a7c86, 0x4571e6d5, 0x06ba4052, 0x4dc6d272, | |
| 7727 | + 0x0e0d74f5, 0x8a56eea6, 0xc99d4821, 0x61379bf0, 0x22fc3d77, | |
| 7728 | + 0xa6a7a724, 0xe56c01a3, 0xae109383, 0xeddb3504, 0x6980af57, | |
| 7729 | + 0x2a4b09d0, 0xff788b16, 0xbcb32d91, 0x38e8b7c2, 0x7b231145, | |
| 7730 | + 0x305f8365, 0x739425e2, 0xf7cfbfb1, 0xb4041936, 0xe69c69c9, | |
| 7731 | + 0xa557cf4e, 0x210c551d, 0x62c7f39a, 0x29bb61ba, 0x6a70c73d, | |
| 7732 | + 0xee2b5d6e, 0xade0fbe9, 0x78d3792f, 0x3b18dfa8, 0xbf4345fb, | |
| 7733 | + 0xfc88e37c, 0xb7f4715c, 0xf43fd7db, 0x70644d88, 0x33afeb0f, | |
| 7734 | + 0x9b0538de, 0xd8ce9e59, 0x5c95040a, 0x1f5ea28d, 0x542230ad, | |
| 7735 | + 0x17e9962a, 0x93b20c79, 0xd079aafe, 0x054a2838, 0x46818ebf, | |
| 7736 | + 0xc2da14ec, 0x8111b26b, 0xca6d204b, 0x89a686cc, 0x0dfd1c9f, | |
| 7737 | + 0x4e36ba18}, | |
| 7738 | + {0x00000000, 0xe1b652ef, 0x836bd405, 0x62dd86ea, 0x06d7a80b, | |
| 7739 | + 0xe761fae4, 0x85bc7c0e, 0x640a2ee1, 0x0cae5117, 0xed1803f8, | |
| 7740 | + 0x8fc58512, 0x6e73d7fd, 0x0a79f91c, 0xebcfabf3, 0x89122d19, | |
| 7741 | + 0x68a47ff6, 0x185ca32e, 0xf9eaf1c1, 0x9b37772b, 0x7a8125c4, | |
| 7742 | + 0x1e8b0b25, 0xff3d59ca, 0x9de0df20, 0x7c568dcf, 0x14f2f239, | |
| 7743 | + 0xf544a0d6, 0x9799263c, 0x762f74d3, 0x12255a32, 0xf39308dd, | |
| 7744 | + 0x914e8e37, 0x70f8dcd8, 0x30b8465d, 0xd10e14b2, 0xb3d39258, | |
| 7745 | + 0x5265c0b7, 0x366fee56, 0xd7d9bcb9, 0xb5043a53, 0x54b268bc, | |
| 7746 | + 0x3c16174a, 0xdda045a5, 0xbf7dc34f, 0x5ecb91a0, 0x3ac1bf41, | |
| 7747 | + 0xdb77edae, 0xb9aa6b44, 0x581c39ab, 0x28e4e573, 0xc952b79c, | |
| 7748 | + 0xab8f3176, 0x4a396399, 0x2e334d78, 0xcf851f97, 0xad58997d, | |
| 7749 | + 0x4ceecb92, 0x244ab464, 0xc5fce68b, 0xa7216061, 0x4697328e, | |
| 7750 | + 0x229d1c6f, 0xc32b4e80, 0xa1f6c86a, 0x40409a85, 0x60708dba, | |
| 7751 | + 0x81c6df55, 0xe31b59bf, 0x02ad0b50, 0x66a725b1, 0x8711775e, | |
| 7752 | + 0xe5ccf1b4, 0x047aa35b, 0x6cdedcad, 0x8d688e42, 0xefb508a8, | |
| 7753 | + 0x0e035a47, 0x6a0974a6, 0x8bbf2649, 0xe962a0a3, 0x08d4f24c, | |
| 7754 | + 0x782c2e94, 0x999a7c7b, 0xfb47fa91, 0x1af1a87e, 0x7efb869f, | |
| 7755 | + 0x9f4dd470, 0xfd90529a, 0x1c260075, 0x74827f83, 0x95342d6c, | |
| 7756 | + 0xf7e9ab86, 0x165ff969, 0x7255d788, 0x93e38567, 0xf13e038d, | |
| 7757 | + 0x10885162, 0x50c8cbe7, 0xb17e9908, 0xd3a31fe2, 0x32154d0d, | |
| 7758 | + 0x561f63ec, 0xb7a93103, 0xd574b7e9, 0x34c2e506, 0x5c669af0, | |
| 7759 | + 0xbdd0c81f, 0xdf0d4ef5, 0x3ebb1c1a, 0x5ab132fb, 0xbb076014, | |
| 7760 | + 0xd9dae6fe, 0x386cb411, 0x489468c9, 0xa9223a26, 0xcbffbccc, | |
| 7761 | + 0x2a49ee23, 0x4e43c0c2, 0xaff5922d, 0xcd2814c7, 0x2c9e4628, | |
| 7762 | + 0x443a39de, 0xa58c6b31, 0xc751eddb, 0x26e7bf34, 0x42ed91d5, | |
| 7763 | + 0xa35bc33a, 0xc18645d0, 0x2030173f, 0x81e66bae, 0x60503941, | |
| 7764 | + 0x028dbfab, 0xe33bed44, 0x8731c3a5, 0x6687914a, 0x045a17a0, | |
| 7765 | + 0xe5ec454f, 0x8d483ab9, 0x6cfe6856, 0x0e23eebc, 0xef95bc53, | |
| 7766 | + 0x8b9f92b2, 0x6a29c05d, 0x08f446b7, 0xe9421458, 0x99bac880, | |
| 7767 | + 0x780c9a6f, 0x1ad11c85, 0xfb674e6a, 0x9f6d608b, 0x7edb3264, | |
| 7768 | + 0x1c06b48e, 0xfdb0e661, 0x95149997, 0x74a2cb78, 0x167f4d92, | |
| 7769 | + 0xf7c91f7d, 0x93c3319c, 0x72756373, 0x10a8e599, 0xf11eb776, | |
| 7770 | + 0xb15e2df3, 0x50e87f1c, 0x3235f9f6, 0xd383ab19, 0xb78985f8, | |
| 7771 | + 0x563fd717, 0x34e251fd, 0xd5540312, 0xbdf07ce4, 0x5c462e0b, | |
| 7772 | + 0x3e9ba8e1, 0xdf2dfa0e, 0xbb27d4ef, 0x5a918600, 0x384c00ea, | |
| 7773 | + 0xd9fa5205, 0xa9028edd, 0x48b4dc32, 0x2a695ad8, 0xcbdf0837, | |
| 7774 | + 0xafd526d6, 0x4e637439, 0x2cbef2d3, 0xcd08a03c, 0xa5acdfca, | |
| 7775 | + 0x441a8d25, 0x26c70bcf, 0xc7715920, 0xa37b77c1, 0x42cd252e, | |
| 7776 | + 0x2010a3c4, 0xc1a6f12b, 0xe196e614, 0x0020b4fb, 0x62fd3211, | |
| 7777 | + 0x834b60fe, 0xe7414e1f, 0x06f71cf0, 0x642a9a1a, 0x859cc8f5, | |
| 7778 | + 0xed38b703, 0x0c8ee5ec, 0x6e536306, 0x8fe531e9, 0xebef1f08, | |
| 7779 | + 0x0a594de7, 0x6884cb0d, 0x893299e2, 0xf9ca453a, 0x187c17d5, | |
| 7780 | + 0x7aa1913f, 0x9b17c3d0, 0xff1ded31, 0x1eabbfde, 0x7c763934, | |
| 7781 | + 0x9dc06bdb, 0xf564142d, 0x14d246c2, 0x760fc028, 0x97b992c7, | |
| 7782 | + 0xf3b3bc26, 0x1205eec9, 0x70d86823, 0x916e3acc, 0xd12ea049, | |
| 7783 | + 0x3098f2a6, 0x5245744c, 0xb3f326a3, 0xd7f90842, 0x364f5aad, | |
| 7784 | + 0x5492dc47, 0xb5248ea8, 0xdd80f15e, 0x3c36a3b1, 0x5eeb255b, | |
| 7785 | + 0xbf5d77b4, 0xdb575955, 0x3ae10bba, 0x583c8d50, 0xb98adfbf, | |
| 7786 | + 0xc9720367, 0x28c45188, 0x4a19d762, 0xabaf858d, 0xcfa5ab6c, | |
| 7787 | + 0x2e13f983, 0x4cce7f69, 0xad782d86, 0xc5dc5270, 0x246a009f, | |
| 7788 | + 0x46b78675, 0xa701d49a, 0xc30bfa7b, 0x22bda894, 0x40602e7e, | |
| 7789 | + 0xa1d67c91}, | |
| 7790 | + {0x00000000, 0x5880e2d7, 0xf106b474, 0xa98656a3, 0xe20d68e9, | |
| 7791 | + 0xba8d8a3e, 0x130bdc9d, 0x4b8b3e4a, 0x851da109, 0xdd9d43de, | |
| 7792 | + 0x741b157d, 0x2c9bf7aa, 0x6710c9e0, 0x3f902b37, 0x96167d94, | |
| 7793 | + 0xce969f43, 0x0a3b4213, 0x52bba0c4, 0xfb3df667, 0xa3bd14b0, | |
| 7794 | + 0xe8362afa, 0xb0b6c82d, 0x19309e8e, 0x41b07c59, 0x8f26e31a, | |
| 7795 | + 0xd7a601cd, 0x7e20576e, 0x26a0b5b9, 0x6d2b8bf3, 0x35ab6924, | |
| 7796 | + 0x9c2d3f87, 0xc4addd50, 0x14768426, 0x4cf666f1, 0xe5703052, | |
| 7797 | + 0xbdf0d285, 0xf67beccf, 0xaefb0e18, 0x077d58bb, 0x5ffdba6c, | |
| 7798 | + 0x916b252f, 0xc9ebc7f8, 0x606d915b, 0x38ed738c, 0x73664dc6, | |
| 7799 | + 0x2be6af11, 0x8260f9b2, 0xdae01b65, 0x1e4dc635, 0x46cd24e2, | |
| 7800 | + 0xef4b7241, 0xb7cb9096, 0xfc40aedc, 0xa4c04c0b, 0x0d461aa8, | |
| 7801 | + 0x55c6f87f, 0x9b50673c, 0xc3d085eb, 0x6a56d348, 0x32d6319f, | |
| 7802 | + 0x795d0fd5, 0x21dded02, 0x885bbba1, 0xd0db5976, 0x28ec084d, | |
| 7803 | + 0x706cea9a, 0xd9eabc39, 0x816a5eee, 0xcae160a4, 0x92618273, | |
| 7804 | + 0x3be7d4d0, 0x63673607, 0xadf1a944, 0xf5714b93, 0x5cf71d30, | |
| 7805 | + 0x0477ffe7, 0x4ffcc1ad, 0x177c237a, 0xbefa75d9, 0xe67a970e, | |
| 7806 | + 0x22d74a5e, 0x7a57a889, 0xd3d1fe2a, 0x8b511cfd, 0xc0da22b7, | |
| 7807 | + 0x985ac060, 0x31dc96c3, 0x695c7414, 0xa7caeb57, 0xff4a0980, | |
| 7808 | + 0x56cc5f23, 0x0e4cbdf4, 0x45c783be, 0x1d476169, 0xb4c137ca, | |
| 7809 | + 0xec41d51d, 0x3c9a8c6b, 0x641a6ebc, 0xcd9c381f, 0x951cdac8, | |
| 7810 | + 0xde97e482, 0x86170655, 0x2f9150f6, 0x7711b221, 0xb9872d62, | |
| 7811 | + 0xe107cfb5, 0x48819916, 0x10017bc1, 0x5b8a458b, 0x030aa75c, | |
| 7812 | + 0xaa8cf1ff, 0xf20c1328, 0x36a1ce78, 0x6e212caf, 0xc7a77a0c, | |
| 7813 | + 0x9f2798db, 0xd4aca691, 0x8c2c4446, 0x25aa12e5, 0x7d2af032, | |
| 7814 | + 0xb3bc6f71, 0xeb3c8da6, 0x42badb05, 0x1a3a39d2, 0x51b10798, | |
| 7815 | + 0x0931e54f, 0xa0b7b3ec, 0xf837513b, 0x50d8119a, 0x0858f34d, | |
| 7816 | + 0xa1dea5ee, 0xf95e4739, 0xb2d57973, 0xea559ba4, 0x43d3cd07, | |
| 7817 | + 0x1b532fd0, 0xd5c5b093, 0x8d455244, 0x24c304e7, 0x7c43e630, | |
| 7818 | + 0x37c8d87a, 0x6f483aad, 0xc6ce6c0e, 0x9e4e8ed9, 0x5ae35389, | |
| 7819 | + 0x0263b15e, 0xabe5e7fd, 0xf365052a, 0xb8ee3b60, 0xe06ed9b7, | |
| 7820 | + 0x49e88f14, 0x11686dc3, 0xdffef280, 0x877e1057, 0x2ef846f4, | |
| 7821 | + 0x7678a423, 0x3df39a69, 0x657378be, 0xccf52e1d, 0x9475ccca, | |
| 7822 | + 0x44ae95bc, 0x1c2e776b, 0xb5a821c8, 0xed28c31f, 0xa6a3fd55, | |
| 7823 | + 0xfe231f82, 0x57a54921, 0x0f25abf6, 0xc1b334b5, 0x9933d662, | |
| 7824 | + 0x30b580c1, 0x68356216, 0x23be5c5c, 0x7b3ebe8b, 0xd2b8e828, | |
| 7825 | + 0x8a380aff, 0x4e95d7af, 0x16153578, 0xbf9363db, 0xe713810c, | |
| 7826 | + 0xac98bf46, 0xf4185d91, 0x5d9e0b32, 0x051ee9e5, 0xcb8876a6, | |
| 7827 | + 0x93089471, 0x3a8ec2d2, 0x620e2005, 0x29851e4f, 0x7105fc98, | |
| 7828 | + 0xd883aa3b, 0x800348ec, 0x783419d7, 0x20b4fb00, 0x8932ada3, | |
| 7829 | + 0xd1b24f74, 0x9a39713e, 0xc2b993e9, 0x6b3fc54a, 0x33bf279d, | |
| 7830 | + 0xfd29b8de, 0xa5a95a09, 0x0c2f0caa, 0x54afee7d, 0x1f24d037, | |
| 7831 | + 0x47a432e0, 0xee226443, 0xb6a28694, 0x720f5bc4, 0x2a8fb913, | |
| 7832 | + 0x8309efb0, 0xdb890d67, 0x9002332d, 0xc882d1fa, 0x61048759, | |
| 7833 | + 0x3984658e, 0xf712facd, 0xaf92181a, 0x06144eb9, 0x5e94ac6e, | |
| 7834 | + 0x151f9224, 0x4d9f70f3, 0xe4192650, 0xbc99c487, 0x6c429df1, | |
| 7835 | + 0x34c27f26, 0x9d442985, 0xc5c4cb52, 0x8e4ff518, 0xd6cf17cf, | |
| 7836 | + 0x7f49416c, 0x27c9a3bb, 0xe95f3cf8, 0xb1dfde2f, 0x1859888c, | |
| 7837 | + 0x40d96a5b, 0x0b525411, 0x53d2b6c6, 0xfa54e065, 0xa2d402b2, | |
| 7838 | + 0x6679dfe2, 0x3ef93d35, 0x977f6b96, 0xcfff8941, 0x8474b70b, | |
| 7839 | + 0xdcf455dc, 0x7572037f, 0x2df2e1a8, 0xe3647eeb, 0xbbe49c3c, | |
| 7840 | + 0x1262ca9f, 0x4ae22848, 0x01691602, 0x59e9f4d5, 0xf06fa276, | |
| 7841 | + 0xa8ef40a1}, | |
| 7842 | + {0x00000000, 0x463b6765, 0x8c76ceca, 0xca4da9af, 0x59ebed4e, | |
| 7843 | + 0x1fd08a2b, 0xd59d2384, 0x93a644e1, 0xb2d6db9d, 0xf4edbcf8, | |
| 7844 | + 0x3ea01557, 0x789b7232, 0xeb3d36d3, 0xad0651b6, 0x674bf819, | |
| 7845 | + 0x21709f7c, 0x25abc6e0, 0x6390a185, 0xa9dd082a, 0xefe66f4f, | |
| 7846 | + 0x7c402bae, 0x3a7b4ccb, 0xf036e564, 0xb60d8201, 0x977d1d7d, | |
| 7847 | + 0xd1467a18, 0x1b0bd3b7, 0x5d30b4d2, 0xce96f033, 0x88ad9756, | |
| 7848 | + 0x42e03ef9, 0x04db599c, 0x0b50fc1a, 0x4d6b9b7f, 0x872632d0, | |
| 7849 | + 0xc11d55b5, 0x52bb1154, 0x14807631, 0xdecddf9e, 0x98f6b8fb, | |
| 7850 | + 0xb9862787, 0xffbd40e2, 0x35f0e94d, 0x73cb8e28, 0xe06dcac9, | |
| 7851 | + 0xa656adac, 0x6c1b0403, 0x2a206366, 0x2efb3afa, 0x68c05d9f, | |
| 7852 | + 0xa28df430, 0xe4b69355, 0x7710d7b4, 0x312bb0d1, 0xfb66197e, | |
| 7853 | + 0xbd5d7e1b, 0x9c2de167, 0xda168602, 0x105b2fad, 0x566048c8, | |
| 7854 | + 0xc5c60c29, 0x83fd6b4c, 0x49b0c2e3, 0x0f8ba586, 0x16a0f835, | |
| 7855 | + 0x509b9f50, 0x9ad636ff, 0xdced519a, 0x4f4b157b, 0x0970721e, | |
| 7856 | + 0xc33ddbb1, 0x8506bcd4, 0xa47623a8, 0xe24d44cd, 0x2800ed62, | |
| 7857 | + 0x6e3b8a07, 0xfd9dcee6, 0xbba6a983, 0x71eb002c, 0x37d06749, | |
| 7858 | + 0x330b3ed5, 0x753059b0, 0xbf7df01f, 0xf946977a, 0x6ae0d39b, | |
| 7859 | + 0x2cdbb4fe, 0xe6961d51, 0xa0ad7a34, 0x81dde548, 0xc7e6822d, | |
| 7860 | + 0x0dab2b82, 0x4b904ce7, 0xd8360806, 0x9e0d6f63, 0x5440c6cc, | |
| 7861 | + 0x127ba1a9, 0x1df0042f, 0x5bcb634a, 0x9186cae5, 0xd7bdad80, | |
| 7862 | + 0x441be961, 0x02208e04, 0xc86d27ab, 0x8e5640ce, 0xaf26dfb2, | |
| 7863 | + 0xe91db8d7, 0x23501178, 0x656b761d, 0xf6cd32fc, 0xb0f65599, | |
| 7864 | + 0x7abbfc36, 0x3c809b53, 0x385bc2cf, 0x7e60a5aa, 0xb42d0c05, | |
| 7865 | + 0xf2166b60, 0x61b02f81, 0x278b48e4, 0xedc6e14b, 0xabfd862e, | |
| 7866 | + 0x8a8d1952, 0xccb67e37, 0x06fbd798, 0x40c0b0fd, 0xd366f41c, | |
| 7867 | + 0x955d9379, 0x5f103ad6, 0x192b5db3, 0x2c40f16b, 0x6a7b960e, | |
| 7868 | + 0xa0363fa1, 0xe60d58c4, 0x75ab1c25, 0x33907b40, 0xf9ddd2ef, | |
| 7869 | + 0xbfe6b58a, 0x9e962af6, 0xd8ad4d93, 0x12e0e43c, 0x54db8359, | |
| 7870 | + 0xc77dc7b8, 0x8146a0dd, 0x4b0b0972, 0x0d306e17, 0x09eb378b, | |
| 7871 | + 0x4fd050ee, 0x859df941, 0xc3a69e24, 0x5000dac5, 0x163bbda0, | |
| 7872 | + 0xdc76140f, 0x9a4d736a, 0xbb3dec16, 0xfd068b73, 0x374b22dc, | |
| 7873 | + 0x717045b9, 0xe2d60158, 0xa4ed663d, 0x6ea0cf92, 0x289ba8f7, | |
| 7874 | + 0x27100d71, 0x612b6a14, 0xab66c3bb, 0xed5da4de, 0x7efbe03f, | |
| 7875 | + 0x38c0875a, 0xf28d2ef5, 0xb4b64990, 0x95c6d6ec, 0xd3fdb189, | |
| 7876 | + 0x19b01826, 0x5f8b7f43, 0xcc2d3ba2, 0x8a165cc7, 0x405bf568, | |
| 7877 | + 0x0660920d, 0x02bbcb91, 0x4480acf4, 0x8ecd055b, 0xc8f6623e, | |
| 7878 | + 0x5b5026df, 0x1d6b41ba, 0xd726e815, 0x911d8f70, 0xb06d100c, | |
| 7879 | + 0xf6567769, 0x3c1bdec6, 0x7a20b9a3, 0xe986fd42, 0xafbd9a27, | |
| 7880 | + 0x65f03388, 0x23cb54ed, 0x3ae0095e, 0x7cdb6e3b, 0xb696c794, | |
| 7881 | + 0xf0ada0f1, 0x630be410, 0x25308375, 0xef7d2ada, 0xa9464dbf, | |
| 7882 | + 0x8836d2c3, 0xce0db5a6, 0x04401c09, 0x427b7b6c, 0xd1dd3f8d, | |
| 7883 | + 0x97e658e8, 0x5dabf147, 0x1b909622, 0x1f4bcfbe, 0x5970a8db, | |
| 7884 | + 0x933d0174, 0xd5066611, 0x46a022f0, 0x009b4595, 0xcad6ec3a, | |
| 7885 | + 0x8ced8b5f, 0xad9d1423, 0xeba67346, 0x21ebdae9, 0x67d0bd8c, | |
| 7886 | + 0xf476f96d, 0xb24d9e08, 0x780037a7, 0x3e3b50c2, 0x31b0f544, | |
| 7887 | + 0x778b9221, 0xbdc63b8e, 0xfbfd5ceb, 0x685b180a, 0x2e607f6f, | |
| 7888 | + 0xe42dd6c0, 0xa216b1a5, 0x83662ed9, 0xc55d49bc, 0x0f10e013, | |
| 7889 | + 0x492b8776, 0xda8dc397, 0x9cb6a4f2, 0x56fb0d5d, 0x10c06a38, | |
| 7890 | + 0x141b33a4, 0x522054c1, 0x986dfd6e, 0xde569a0b, 0x4df0deea, | |
| 7891 | + 0x0bcbb98f, 0xc1861020, 0x87bd7745, 0xa6cde839, 0xe0f68f5c, | |
| 7892 | + 0x2abb26f3, 0x6c804196, 0xff260577, 0xb91d6212, 0x7350cbbd, | |
| 7893 | + 0x356bacd8}}; | |
| 7894 | + | |
| 7895 | +#endif | |
| 7896 | + | |
| 7897 | +#endif | |
| 7898 | + | |
| 7899 | +#if N == 6 | |
| 7900 | + | |
| 7901 | +#if W == 8 | |
| 7902 | + | |
| 7903 | +local const z_crc_t FAR crc_braid_table[][256] = { | |
| 7904 | + {0x00000000, 0x3db1ecdc, 0x7b63d9b8, 0x46d23564, 0xf6c7b370, | |
| 7905 | + 0xcb765fac, 0x8da46ac8, 0xb0158614, 0x36fe60a1, 0x0b4f8c7d, | |
| 7906 | + 0x4d9db919, 0x702c55c5, 0xc039d3d1, 0xfd883f0d, 0xbb5a0a69, | |
| 7907 | + 0x86ebe6b5, 0x6dfcc142, 0x504d2d9e, 0x169f18fa, 0x2b2ef426, | |
| 7908 | + 0x9b3b7232, 0xa68a9eee, 0xe058ab8a, 0xdde94756, 0x5b02a1e3, | |
| 7909 | + 0x66b34d3f, 0x2061785b, 0x1dd09487, 0xadc51293, 0x9074fe4f, | |
| 7910 | + 0xd6a6cb2b, 0xeb1727f7, 0xdbf98284, 0xe6486e58, 0xa09a5b3c, | |
| 7911 | + 0x9d2bb7e0, 0x2d3e31f4, 0x108fdd28, 0x565de84c, 0x6bec0490, | |
| 7912 | + 0xed07e225, 0xd0b60ef9, 0x96643b9d, 0xabd5d741, 0x1bc05155, | |
| 7913 | + 0x2671bd89, 0x60a388ed, 0x5d126431, 0xb60543c6, 0x8bb4af1a, | |
| 7914 | + 0xcd669a7e, 0xf0d776a2, 0x40c2f0b6, 0x7d731c6a, 0x3ba1290e, | |
| 7915 | + 0x0610c5d2, 0x80fb2367, 0xbd4acfbb, 0xfb98fadf, 0xc6291603, | |
| 7916 | + 0x763c9017, 0x4b8d7ccb, 0x0d5f49af, 0x30eea573, 0x6c820349, | |
| 7917 | + 0x5133ef95, 0x17e1daf1, 0x2a50362d, 0x9a45b039, 0xa7f45ce5, | |
| 7918 | + 0xe1266981, 0xdc97855d, 0x5a7c63e8, 0x67cd8f34, 0x211fba50, | |
| 7919 | + 0x1cae568c, 0xacbbd098, 0x910a3c44, 0xd7d80920, 0xea69e5fc, | |
| 7920 | + 0x017ec20b, 0x3ccf2ed7, 0x7a1d1bb3, 0x47acf76f, 0xf7b9717b, | |
| 7921 | + 0xca089da7, 0x8cdaa8c3, 0xb16b441f, 0x3780a2aa, 0x0a314e76, | |
| 7922 | + 0x4ce37b12, 0x715297ce, 0xc14711da, 0xfcf6fd06, 0xba24c862, | |
| 7923 | + 0x879524be, 0xb77b81cd, 0x8aca6d11, 0xcc185875, 0xf1a9b4a9, | |
| 7924 | + 0x41bc32bd, 0x7c0dde61, 0x3adfeb05, 0x076e07d9, 0x8185e16c, | |
| 7925 | + 0xbc340db0, 0xfae638d4, 0xc757d408, 0x7742521c, 0x4af3bec0, | |
| 7926 | + 0x0c218ba4, 0x31906778, 0xda87408f, 0xe736ac53, 0xa1e49937, | |
| 7927 | + 0x9c5575eb, 0x2c40f3ff, 0x11f11f23, 0x57232a47, 0x6a92c69b, | |
| 7928 | + 0xec79202e, 0xd1c8ccf2, 0x971af996, 0xaaab154a, 0x1abe935e, | |
| 7929 | + 0x270f7f82, 0x61dd4ae6, 0x5c6ca63a, 0xd9040692, 0xe4b5ea4e, | |
| 7930 | + 0xa267df2a, 0x9fd633f6, 0x2fc3b5e2, 0x1272593e, 0x54a06c5a, | |
| 7931 | + 0x69118086, 0xeffa6633, 0xd24b8aef, 0x9499bf8b, 0xa9285357, | |
| 7932 | + 0x193dd543, 0x248c399f, 0x625e0cfb, 0x5fefe027, 0xb4f8c7d0, | |
| 7933 | + 0x89492b0c, 0xcf9b1e68, 0xf22af2b4, 0x423f74a0, 0x7f8e987c, | |
| 7934 | + 0x395cad18, 0x04ed41c4, 0x8206a771, 0xbfb74bad, 0xf9657ec9, | |
| 7935 | + 0xc4d49215, 0x74c11401, 0x4970f8dd, 0x0fa2cdb9, 0x32132165, | |
| 7936 | + 0x02fd8416, 0x3f4c68ca, 0x799e5dae, 0x442fb172, 0xf43a3766, | |
| 7937 | + 0xc98bdbba, 0x8f59eede, 0xb2e80202, 0x3403e4b7, 0x09b2086b, | |
| 7938 | + 0x4f603d0f, 0x72d1d1d3, 0xc2c457c7, 0xff75bb1b, 0xb9a78e7f, | |
| 7939 | + 0x841662a3, 0x6f014554, 0x52b0a988, 0x14629cec, 0x29d37030, | |
| 7940 | + 0x99c6f624, 0xa4771af8, 0xe2a52f9c, 0xdf14c340, 0x59ff25f5, | |
| 7941 | + 0x644ec929, 0x229cfc4d, 0x1f2d1091, 0xaf389685, 0x92897a59, | |
| 7942 | + 0xd45b4f3d, 0xe9eaa3e1, 0xb58605db, 0x8837e907, 0xcee5dc63, | |
| 7943 | + 0xf35430bf, 0x4341b6ab, 0x7ef05a77, 0x38226f13, 0x059383cf, | |
| 7944 | + 0x8378657a, 0xbec989a6, 0xf81bbcc2, 0xc5aa501e, 0x75bfd60a, | |
| 7945 | + 0x480e3ad6, 0x0edc0fb2, 0x336de36e, 0xd87ac499, 0xe5cb2845, | |
| 7946 | + 0xa3191d21, 0x9ea8f1fd, 0x2ebd77e9, 0x130c9b35, 0x55deae51, | |
| 7947 | + 0x686f428d, 0xee84a438, 0xd33548e4, 0x95e77d80, 0xa856915c, | |
| 7948 | + 0x18431748, 0x25f2fb94, 0x6320cef0, 0x5e91222c, 0x6e7f875f, | |
| 7949 | + 0x53ce6b83, 0x151c5ee7, 0x28adb23b, 0x98b8342f, 0xa509d8f3, | |
| 7950 | + 0xe3dbed97, 0xde6a014b, 0x5881e7fe, 0x65300b22, 0x23e23e46, | |
| 7951 | + 0x1e53d29a, 0xae46548e, 0x93f7b852, 0xd5258d36, 0xe89461ea, | |
| 7952 | + 0x0383461d, 0x3e32aac1, 0x78e09fa5, 0x45517379, 0xf544f56d, | |
| 7953 | + 0xc8f519b1, 0x8e272cd5, 0xb396c009, 0x357d26bc, 0x08ccca60, | |
| 7954 | + 0x4e1eff04, 0x73af13d8, 0xc3ba95cc, 0xfe0b7910, 0xb8d94c74, | |
| 7955 | + 0x8568a0a8}, | |
| 7956 | + {0x00000000, 0x69790b65, 0xd2f216ca, 0xbb8b1daf, 0x7e952bd5, | |
| 7957 | + 0x17ec20b0, 0xac673d1f, 0xc51e367a, 0xfd2a57aa, 0x94535ccf, | |
| 7958 | + 0x2fd84160, 0x46a14a05, 0x83bf7c7f, 0xeac6771a, 0x514d6ab5, | |
| 7959 | + 0x383461d0, 0x2125a915, 0x485ca270, 0xf3d7bfdf, 0x9aaeb4ba, | |
| 7960 | + 0x5fb082c0, 0x36c989a5, 0x8d42940a, 0xe43b9f6f, 0xdc0ffebf, | |
| 7961 | + 0xb576f5da, 0x0efde875, 0x6784e310, 0xa29ad56a, 0xcbe3de0f, | |
| 7962 | + 0x7068c3a0, 0x1911c8c5, 0x424b522a, 0x2b32594f, 0x90b944e0, | |
| 7963 | + 0xf9c04f85, 0x3cde79ff, 0x55a7729a, 0xee2c6f35, 0x87556450, | |
| 7964 | + 0xbf610580, 0xd6180ee5, 0x6d93134a, 0x04ea182f, 0xc1f42e55, | |
| 7965 | + 0xa88d2530, 0x1306389f, 0x7a7f33fa, 0x636efb3f, 0x0a17f05a, | |
| 7966 | + 0xb19cedf5, 0xd8e5e690, 0x1dfbd0ea, 0x7482db8f, 0xcf09c620, | |
| 7967 | + 0xa670cd45, 0x9e44ac95, 0xf73da7f0, 0x4cb6ba5f, 0x25cfb13a, | |
| 7968 | + 0xe0d18740, 0x89a88c25, 0x3223918a, 0x5b5a9aef, 0x8496a454, | |
| 7969 | + 0xedefaf31, 0x5664b29e, 0x3f1db9fb, 0xfa038f81, 0x937a84e4, | |
| 7970 | + 0x28f1994b, 0x4188922e, 0x79bcf3fe, 0x10c5f89b, 0xab4ee534, | |
| 7971 | + 0xc237ee51, 0x0729d82b, 0x6e50d34e, 0xd5dbcee1, 0xbca2c584, | |
| 7972 | + 0xa5b30d41, 0xccca0624, 0x77411b8b, 0x1e3810ee, 0xdb262694, | |
| 7973 | + 0xb25f2df1, 0x09d4305e, 0x60ad3b3b, 0x58995aeb, 0x31e0518e, | |
| 7974 | + 0x8a6b4c21, 0xe3124744, 0x260c713e, 0x4f757a5b, 0xf4fe67f4, | |
| 7975 | + 0x9d876c91, 0xc6ddf67e, 0xafa4fd1b, 0x142fe0b4, 0x7d56ebd1, | |
| 7976 | + 0xb848ddab, 0xd131d6ce, 0x6abacb61, 0x03c3c004, 0x3bf7a1d4, | |
| 7977 | + 0x528eaab1, 0xe905b71e, 0x807cbc7b, 0x45628a01, 0x2c1b8164, | |
| 7978 | + 0x97909ccb, 0xfee997ae, 0xe7f85f6b, 0x8e81540e, 0x350a49a1, | |
| 7979 | + 0x5c7342c4, 0x996d74be, 0xf0147fdb, 0x4b9f6274, 0x22e66911, | |
| 7980 | + 0x1ad208c1, 0x73ab03a4, 0xc8201e0b, 0xa159156e, 0x64472314, | |
| 7981 | + 0x0d3e2871, 0xb6b535de, 0xdfcc3ebb, 0xd25c4ee9, 0xbb25458c, | |
| 7982 | + 0x00ae5823, 0x69d75346, 0xacc9653c, 0xc5b06e59, 0x7e3b73f6, | |
| 7983 | + 0x17427893, 0x2f761943, 0x460f1226, 0xfd840f89, 0x94fd04ec, | |
| 7984 | + 0x51e33296, 0x389a39f3, 0x8311245c, 0xea682f39, 0xf379e7fc, | |
| 7985 | + 0x9a00ec99, 0x218bf136, 0x48f2fa53, 0x8deccc29, 0xe495c74c, | |
| 7986 | + 0x5f1edae3, 0x3667d186, 0x0e53b056, 0x672abb33, 0xdca1a69c, | |
| 7987 | + 0xb5d8adf9, 0x70c69b83, 0x19bf90e6, 0xa2348d49, 0xcb4d862c, | |
| 7988 | + 0x90171cc3, 0xf96e17a6, 0x42e50a09, 0x2b9c016c, 0xee823716, | |
| 7989 | + 0x87fb3c73, 0x3c7021dc, 0x55092ab9, 0x6d3d4b69, 0x0444400c, | |
| 7990 | + 0xbfcf5da3, 0xd6b656c6, 0x13a860bc, 0x7ad16bd9, 0xc15a7676, | |
| 7991 | + 0xa8237d13, 0xb132b5d6, 0xd84bbeb3, 0x63c0a31c, 0x0ab9a879, | |
| 7992 | + 0xcfa79e03, 0xa6de9566, 0x1d5588c9, 0x742c83ac, 0x4c18e27c, | |
| 7993 | + 0x2561e919, 0x9eeaf4b6, 0xf793ffd3, 0x328dc9a9, 0x5bf4c2cc, | |
| 7994 | + 0xe07fdf63, 0x8906d406, 0x56caeabd, 0x3fb3e1d8, 0x8438fc77, | |
| 7995 | + 0xed41f712, 0x285fc168, 0x4126ca0d, 0xfaadd7a2, 0x93d4dcc7, | |
| 7996 | + 0xabe0bd17, 0xc299b672, 0x7912abdd, 0x106ba0b8, 0xd57596c2, | |
| 7997 | + 0xbc0c9da7, 0x07878008, 0x6efe8b6d, 0x77ef43a8, 0x1e9648cd, | |
| 7998 | + 0xa51d5562, 0xcc645e07, 0x097a687d, 0x60036318, 0xdb887eb7, | |
| 7999 | + 0xb2f175d2, 0x8ac51402, 0xe3bc1f67, 0x583702c8, 0x314e09ad, | |
| 8000 | + 0xf4503fd7, 0x9d2934b2, 0x26a2291d, 0x4fdb2278, 0x1481b897, | |
| 8001 | + 0x7df8b3f2, 0xc673ae5d, 0xaf0aa538, 0x6a149342, 0x036d9827, | |
| 8002 | + 0xb8e68588, 0xd19f8eed, 0xe9abef3d, 0x80d2e458, 0x3b59f9f7, | |
| 8003 | + 0x5220f292, 0x973ec4e8, 0xfe47cf8d, 0x45ccd222, 0x2cb5d947, | |
| 8004 | + 0x35a41182, 0x5cdd1ae7, 0xe7560748, 0x8e2f0c2d, 0x4b313a57, | |
| 8005 | + 0x22483132, 0x99c32c9d, 0xf0ba27f8, 0xc88e4628, 0xa1f74d4d, | |
| 8006 | + 0x1a7c50e2, 0x73055b87, 0xb61b6dfd, 0xdf626698, 0x64e97b37, | |
| 8007 | + 0x0d907052}, | |
| 8008 | + {0x00000000, 0x7fc99b93, 0xff933726, 0x805aacb5, 0x2457680d, | |
| 8009 | + 0x5b9ef39e, 0xdbc45f2b, 0xa40dc4b8, 0x48aed01a, 0x37674b89, | |
| 8010 | + 0xb73de73c, 0xc8f47caf, 0x6cf9b817, 0x13302384, 0x936a8f31, | |
| 8011 | + 0xeca314a2, 0x915da034, 0xee943ba7, 0x6ece9712, 0x11070c81, | |
| 8012 | + 0xb50ac839, 0xcac353aa, 0x4a99ff1f, 0x3550648c, 0xd9f3702e, | |
| 8013 | + 0xa63aebbd, 0x26604708, 0x59a9dc9b, 0xfda41823, 0x826d83b0, | |
| 8014 | + 0x02372f05, 0x7dfeb496, 0xf9ca4629, 0x8603ddba, 0x0659710f, | |
| 8015 | + 0x7990ea9c, 0xdd9d2e24, 0xa254b5b7, 0x220e1902, 0x5dc78291, | |
| 8016 | + 0xb1649633, 0xcead0da0, 0x4ef7a115, 0x313e3a86, 0x9533fe3e, | |
| 8017 | + 0xeafa65ad, 0x6aa0c918, 0x1569528b, 0x6897e61d, 0x175e7d8e, | |
| 8018 | + 0x9704d13b, 0xe8cd4aa8, 0x4cc08e10, 0x33091583, 0xb353b936, | |
| 8019 | + 0xcc9a22a5, 0x20393607, 0x5ff0ad94, 0xdfaa0121, 0xa0639ab2, | |
| 8020 | + 0x046e5e0a, 0x7ba7c599, 0xfbfd692c, 0x8434f2bf, 0x28e58a13, | |
| 8021 | + 0x572c1180, 0xd776bd35, 0xa8bf26a6, 0x0cb2e21e, 0x737b798d, | |
| 8022 | + 0xf321d538, 0x8ce84eab, 0x604b5a09, 0x1f82c19a, 0x9fd86d2f, | |
| 8023 | + 0xe011f6bc, 0x441c3204, 0x3bd5a997, 0xbb8f0522, 0xc4469eb1, | |
| 8024 | + 0xb9b82a27, 0xc671b1b4, 0x462b1d01, 0x39e28692, 0x9def422a, | |
| 8025 | + 0xe226d9b9, 0x627c750c, 0x1db5ee9f, 0xf116fa3d, 0x8edf61ae, | |
| 8026 | + 0x0e85cd1b, 0x714c5688, 0xd5419230, 0xaa8809a3, 0x2ad2a516, | |
| 8027 | + 0x551b3e85, 0xd12fcc3a, 0xaee657a9, 0x2ebcfb1c, 0x5175608f, | |
| 8028 | + 0xf578a437, 0x8ab13fa4, 0x0aeb9311, 0x75220882, 0x99811c20, | |
| 8029 | + 0xe64887b3, 0x66122b06, 0x19dbb095, 0xbdd6742d, 0xc21fefbe, | |
| 8030 | + 0x4245430b, 0x3d8cd898, 0x40726c0e, 0x3fbbf79d, 0xbfe15b28, | |
| 8031 | + 0xc028c0bb, 0x64250403, 0x1bec9f90, 0x9bb63325, 0xe47fa8b6, | |
| 8032 | + 0x08dcbc14, 0x77152787, 0xf74f8b32, 0x888610a1, 0x2c8bd419, | |
| 8033 | + 0x53424f8a, 0xd318e33f, 0xacd178ac, 0x51cb1426, 0x2e028fb5, | |
| 8034 | + 0xae582300, 0xd191b893, 0x759c7c2b, 0x0a55e7b8, 0x8a0f4b0d, | |
| 8035 | + 0xf5c6d09e, 0x1965c43c, 0x66ac5faf, 0xe6f6f31a, 0x993f6889, | |
| 8036 | + 0x3d32ac31, 0x42fb37a2, 0xc2a19b17, 0xbd680084, 0xc096b412, | |
| 8037 | + 0xbf5f2f81, 0x3f058334, 0x40cc18a7, 0xe4c1dc1f, 0x9b08478c, | |
| 8038 | + 0x1b52eb39, 0x649b70aa, 0x88386408, 0xf7f1ff9b, 0x77ab532e, | |
| 8039 | + 0x0862c8bd, 0xac6f0c05, 0xd3a69796, 0x53fc3b23, 0x2c35a0b0, | |
| 8040 | + 0xa801520f, 0xd7c8c99c, 0x57926529, 0x285bfeba, 0x8c563a02, | |
| 8041 | + 0xf39fa191, 0x73c50d24, 0x0c0c96b7, 0xe0af8215, 0x9f661986, | |
| 8042 | + 0x1f3cb533, 0x60f52ea0, 0xc4f8ea18, 0xbb31718b, 0x3b6bdd3e, | |
| 8043 | + 0x44a246ad, 0x395cf23b, 0x469569a8, 0xc6cfc51d, 0xb9065e8e, | |
| 8044 | + 0x1d0b9a36, 0x62c201a5, 0xe298ad10, 0x9d513683, 0x71f22221, | |
| 8045 | + 0x0e3bb9b2, 0x8e611507, 0xf1a88e94, 0x55a54a2c, 0x2a6cd1bf, | |
| 8046 | + 0xaa367d0a, 0xd5ffe699, 0x792e9e35, 0x06e705a6, 0x86bda913, | |
| 8047 | + 0xf9743280, 0x5d79f638, 0x22b06dab, 0xa2eac11e, 0xdd235a8d, | |
| 8048 | + 0x31804e2f, 0x4e49d5bc, 0xce137909, 0xb1dae29a, 0x15d72622, | |
| 8049 | + 0x6a1ebdb1, 0xea441104, 0x958d8a97, 0xe8733e01, 0x97baa592, | |
| 8050 | + 0x17e00927, 0x682992b4, 0xcc24560c, 0xb3edcd9f, 0x33b7612a, | |
| 8051 | + 0x4c7efab9, 0xa0ddee1b, 0xdf147588, 0x5f4ed93d, 0x208742ae, | |
| 8052 | + 0x848a8616, 0xfb431d85, 0x7b19b130, 0x04d02aa3, 0x80e4d81c, | |
| 8053 | + 0xff2d438f, 0x7f77ef3a, 0x00be74a9, 0xa4b3b011, 0xdb7a2b82, | |
| 8054 | + 0x5b208737, 0x24e91ca4, 0xc84a0806, 0xb7839395, 0x37d93f20, | |
| 8055 | + 0x4810a4b3, 0xec1d600b, 0x93d4fb98, 0x138e572d, 0x6c47ccbe, | |
| 8056 | + 0x11b97828, 0x6e70e3bb, 0xee2a4f0e, 0x91e3d49d, 0x35ee1025, | |
| 8057 | + 0x4a278bb6, 0xca7d2703, 0xb5b4bc90, 0x5917a832, 0x26de33a1, | |
| 8058 | + 0xa6849f14, 0xd94d0487, 0x7d40c03f, 0x02895bac, 0x82d3f719, | |
| 8059 | + 0xfd1a6c8a}, | |
| 8060 | + {0x00000000, 0xa396284c, 0x9c5d56d9, 0x3fcb7e95, 0xe3cbabf3, | |
| 8061 | + 0x405d83bf, 0x7f96fd2a, 0xdc00d566, 0x1ce651a7, 0xbf7079eb, | |
| 8062 | + 0x80bb077e, 0x232d2f32, 0xff2dfa54, 0x5cbbd218, 0x6370ac8d, | |
| 8063 | + 0xc0e684c1, 0x39cca34e, 0x9a5a8b02, 0xa591f597, 0x0607dddb, | |
| 8064 | + 0xda0708bd, 0x799120f1, 0x465a5e64, 0xe5cc7628, 0x252af2e9, | |
| 8065 | + 0x86bcdaa5, 0xb977a430, 0x1ae18c7c, 0xc6e1591a, 0x65777156, | |
| 8066 | + 0x5abc0fc3, 0xf92a278f, 0x7399469c, 0xd00f6ed0, 0xefc41045, | |
| 8067 | + 0x4c523809, 0x9052ed6f, 0x33c4c523, 0x0c0fbbb6, 0xaf9993fa, | |
| 8068 | + 0x6f7f173b, 0xcce93f77, 0xf32241e2, 0x50b469ae, 0x8cb4bcc8, | |
| 8069 | + 0x2f229484, 0x10e9ea11, 0xb37fc25d, 0x4a55e5d2, 0xe9c3cd9e, | |
| 8070 | + 0xd608b30b, 0x759e9b47, 0xa99e4e21, 0x0a08666d, 0x35c318f8, | |
| 8071 | + 0x965530b4, 0x56b3b475, 0xf5259c39, 0xcaeee2ac, 0x6978cae0, | |
| 8072 | + 0xb5781f86, 0x16ee37ca, 0x2925495f, 0x8ab36113, 0xe7328d38, | |
| 8073 | + 0x44a4a574, 0x7b6fdbe1, 0xd8f9f3ad, 0x04f926cb, 0xa76f0e87, | |
| 8074 | + 0x98a47012, 0x3b32585e, 0xfbd4dc9f, 0x5842f4d3, 0x67898a46, | |
| 8075 | + 0xc41fa20a, 0x181f776c, 0xbb895f20, 0x844221b5, 0x27d409f9, | |
| 8076 | + 0xdefe2e76, 0x7d68063a, 0x42a378af, 0xe13550e3, 0x3d358585, | |
| 8077 | + 0x9ea3adc9, 0xa168d35c, 0x02fefb10, 0xc2187fd1, 0x618e579d, | |
| 8078 | + 0x5e452908, 0xfdd30144, 0x21d3d422, 0x8245fc6e, 0xbd8e82fb, | |
| 8079 | + 0x1e18aab7, 0x94abcba4, 0x373de3e8, 0x08f69d7d, 0xab60b531, | |
| 8080 | + 0x77606057, 0xd4f6481b, 0xeb3d368e, 0x48ab1ec2, 0x884d9a03, | |
| 8081 | + 0x2bdbb24f, 0x1410ccda, 0xb786e496, 0x6b8631f0, 0xc81019bc, | |
| 8082 | + 0xf7db6729, 0x544d4f65, 0xad6768ea, 0x0ef140a6, 0x313a3e33, | |
| 8083 | + 0x92ac167f, 0x4eacc319, 0xed3aeb55, 0xd2f195c0, 0x7167bd8c, | |
| 8084 | + 0xb181394d, 0x12171101, 0x2ddc6f94, 0x8e4a47d8, 0x524a92be, | |
| 8085 | + 0xf1dcbaf2, 0xce17c467, 0x6d81ec2b, 0x15141c31, 0xb682347d, | |
| 8086 | + 0x89494ae8, 0x2adf62a4, 0xf6dfb7c2, 0x55499f8e, 0x6a82e11b, | |
| 8087 | + 0xc914c957, 0x09f24d96, 0xaa6465da, 0x95af1b4f, 0x36393303, | |
| 8088 | + 0xea39e665, 0x49afce29, 0x7664b0bc, 0xd5f298f0, 0x2cd8bf7f, | |
| 8089 | + 0x8f4e9733, 0xb085e9a6, 0x1313c1ea, 0xcf13148c, 0x6c853cc0, | |
| 8090 | + 0x534e4255, 0xf0d86a19, 0x303eeed8, 0x93a8c694, 0xac63b801, | |
| 8091 | + 0x0ff5904d, 0xd3f5452b, 0x70636d67, 0x4fa813f2, 0xec3e3bbe, | |
| 8092 | + 0x668d5aad, 0xc51b72e1, 0xfad00c74, 0x59462438, 0x8546f15e, | |
| 8093 | + 0x26d0d912, 0x191ba787, 0xba8d8fcb, 0x7a6b0b0a, 0xd9fd2346, | |
| 8094 | + 0xe6365dd3, 0x45a0759f, 0x99a0a0f9, 0x3a3688b5, 0x05fdf620, | |
| 8095 | + 0xa66bde6c, 0x5f41f9e3, 0xfcd7d1af, 0xc31caf3a, 0x608a8776, | |
| 8096 | + 0xbc8a5210, 0x1f1c7a5c, 0x20d704c9, 0x83412c85, 0x43a7a844, | |
| 8097 | + 0xe0318008, 0xdffafe9d, 0x7c6cd6d1, 0xa06c03b7, 0x03fa2bfb, | |
| 8098 | + 0x3c31556e, 0x9fa77d22, 0xf2269109, 0x51b0b945, 0x6e7bc7d0, | |
| 8099 | + 0xcdedef9c, 0x11ed3afa, 0xb27b12b6, 0x8db06c23, 0x2e26446f, | |
| 8100 | + 0xeec0c0ae, 0x4d56e8e2, 0x729d9677, 0xd10bbe3b, 0x0d0b6b5d, | |
| 8101 | + 0xae9d4311, 0x91563d84, 0x32c015c8, 0xcbea3247, 0x687c1a0b, | |
| 8102 | + 0x57b7649e, 0xf4214cd2, 0x282199b4, 0x8bb7b1f8, 0xb47ccf6d, | |
| 8103 | + 0x17eae721, 0xd70c63e0, 0x749a4bac, 0x4b513539, 0xe8c71d75, | |
| 8104 | + 0x34c7c813, 0x9751e05f, 0xa89a9eca, 0x0b0cb686, 0x81bfd795, | |
| 8105 | + 0x2229ffd9, 0x1de2814c, 0xbe74a900, 0x62747c66, 0xc1e2542a, | |
| 8106 | + 0xfe292abf, 0x5dbf02f3, 0x9d598632, 0x3ecfae7e, 0x0104d0eb, | |
| 8107 | + 0xa292f8a7, 0x7e922dc1, 0xdd04058d, 0xe2cf7b18, 0x41595354, | |
| 8108 | + 0xb87374db, 0x1be55c97, 0x242e2202, 0x87b80a4e, 0x5bb8df28, | |
| 8109 | + 0xf82ef764, 0xc7e589f1, 0x6473a1bd, 0xa495257c, 0x07030d30, | |
| 8110 | + 0x38c873a5, 0x9b5e5be9, 0x475e8e8f, 0xe4c8a6c3, 0xdb03d856, | |
| 8111 | + 0x7895f01a}, | |
| 8112 | + {0x00000000, 0x2a283862, 0x545070c4, 0x7e7848a6, 0xa8a0e188, | |
| 8113 | + 0x8288d9ea, 0xfcf0914c, 0xd6d8a92e, 0x8a30c551, 0xa018fd33, | |
| 8114 | + 0xde60b595, 0xf4488df7, 0x229024d9, 0x08b81cbb, 0x76c0541d, | |
| 8115 | + 0x5ce86c7f, 0xcf108ce3, 0xe538b481, 0x9b40fc27, 0xb168c445, | |
| 8116 | + 0x67b06d6b, 0x4d985509, 0x33e01daf, 0x19c825cd, 0x452049b2, | |
| 8117 | + 0x6f0871d0, 0x11703976, 0x3b580114, 0xed80a83a, 0xc7a89058, | |
| 8118 | + 0xb9d0d8fe, 0x93f8e09c, 0x45501f87, 0x6f7827e5, 0x11006f43, | |
| 8119 | + 0x3b285721, 0xedf0fe0f, 0xc7d8c66d, 0xb9a08ecb, 0x9388b6a9, | |
| 8120 | + 0xcf60dad6, 0xe548e2b4, 0x9b30aa12, 0xb1189270, 0x67c03b5e, | |
| 8121 | + 0x4de8033c, 0x33904b9a, 0x19b873f8, 0x8a409364, 0xa068ab06, | |
| 8122 | + 0xde10e3a0, 0xf438dbc2, 0x22e072ec, 0x08c84a8e, 0x76b00228, | |
| 8123 | + 0x5c983a4a, 0x00705635, 0x2a586e57, 0x542026f1, 0x7e081e93, | |
| 8124 | + 0xa8d0b7bd, 0x82f88fdf, 0xfc80c779, 0xd6a8ff1b, 0x8aa03f0e, | |
| 8125 | + 0xa088076c, 0xdef04fca, 0xf4d877a8, 0x2200de86, 0x0828e6e4, | |
| 8126 | + 0x7650ae42, 0x5c789620, 0x0090fa5f, 0x2ab8c23d, 0x54c08a9b, | |
| 8127 | + 0x7ee8b2f9, 0xa8301bd7, 0x821823b5, 0xfc606b13, 0xd6485371, | |
| 8128 | + 0x45b0b3ed, 0x6f988b8f, 0x11e0c329, 0x3bc8fb4b, 0xed105265, | |
| 8129 | + 0xc7386a07, 0xb94022a1, 0x93681ac3, 0xcf8076bc, 0xe5a84ede, | |
| 8130 | + 0x9bd00678, 0xb1f83e1a, 0x67209734, 0x4d08af56, 0x3370e7f0, | |
| 8131 | + 0x1958df92, 0xcff02089, 0xe5d818eb, 0x9ba0504d, 0xb188682f, | |
| 8132 | + 0x6750c101, 0x4d78f963, 0x3300b1c5, 0x192889a7, 0x45c0e5d8, | |
| 8133 | + 0x6fe8ddba, 0x1190951c, 0x3bb8ad7e, 0xed600450, 0xc7483c32, | |
| 8134 | + 0xb9307494, 0x93184cf6, 0x00e0ac6a, 0x2ac89408, 0x54b0dcae, | |
| 8135 | + 0x7e98e4cc, 0xa8404de2, 0x82687580, 0xfc103d26, 0xd6380544, | |
| 8136 | + 0x8ad0693b, 0xa0f85159, 0xde8019ff, 0xf4a8219d, 0x227088b3, | |
| 8137 | + 0x0858b0d1, 0x7620f877, 0x5c08c015, 0xce31785d, 0xe419403f, | |
| 8138 | + 0x9a610899, 0xb04930fb, 0x669199d5, 0x4cb9a1b7, 0x32c1e911, | |
| 8139 | + 0x18e9d173, 0x4401bd0c, 0x6e29856e, 0x1051cdc8, 0x3a79f5aa, | |
| 8140 | + 0xeca15c84, 0xc68964e6, 0xb8f12c40, 0x92d91422, 0x0121f4be, | |
| 8141 | + 0x2b09ccdc, 0x5571847a, 0x7f59bc18, 0xa9811536, 0x83a92d54, | |
| 8142 | + 0xfdd165f2, 0xd7f95d90, 0x8b1131ef, 0xa139098d, 0xdf41412b, | |
| 8143 | + 0xf5697949, 0x23b1d067, 0x0999e805, 0x77e1a0a3, 0x5dc998c1, | |
| 8144 | + 0x8b6167da, 0xa1495fb8, 0xdf31171e, 0xf5192f7c, 0x23c18652, | |
| 8145 | + 0x09e9be30, 0x7791f696, 0x5db9cef4, 0x0151a28b, 0x2b799ae9, | |
| 8146 | + 0x5501d24f, 0x7f29ea2d, 0xa9f14303, 0x83d97b61, 0xfda133c7, | |
| 8147 | + 0xd7890ba5, 0x4471eb39, 0x6e59d35b, 0x10219bfd, 0x3a09a39f, | |
| 8148 | + 0xecd10ab1, 0xc6f932d3, 0xb8817a75, 0x92a94217, 0xce412e68, | |
| 8149 | + 0xe469160a, 0x9a115eac, 0xb03966ce, 0x66e1cfe0, 0x4cc9f782, | |
| 8150 | + 0x32b1bf24, 0x18998746, 0x44914753, 0x6eb97f31, 0x10c13797, | |
| 8151 | + 0x3ae90ff5, 0xec31a6db, 0xc6199eb9, 0xb861d61f, 0x9249ee7d, | |
| 8152 | + 0xcea18202, 0xe489ba60, 0x9af1f2c6, 0xb0d9caa4, 0x6601638a, | |
| 8153 | + 0x4c295be8, 0x3251134e, 0x18792b2c, 0x8b81cbb0, 0xa1a9f3d2, | |
| 8154 | + 0xdfd1bb74, 0xf5f98316, 0x23212a38, 0x0909125a, 0x77715afc, | |
| 8155 | + 0x5d59629e, 0x01b10ee1, 0x2b993683, 0x55e17e25, 0x7fc94647, | |
| 8156 | + 0xa911ef69, 0x8339d70b, 0xfd419fad, 0xd769a7cf, 0x01c158d4, | |
| 8157 | + 0x2be960b6, 0x55912810, 0x7fb91072, 0xa961b95c, 0x8349813e, | |
| 8158 | + 0xfd31c998, 0xd719f1fa, 0x8bf19d85, 0xa1d9a5e7, 0xdfa1ed41, | |
| 8159 | + 0xf589d523, 0x23517c0d, 0x0979446f, 0x77010cc9, 0x5d2934ab, | |
| 8160 | + 0xced1d437, 0xe4f9ec55, 0x9a81a4f3, 0xb0a99c91, 0x667135bf, | |
| 8161 | + 0x4c590ddd, 0x3221457b, 0x18097d19, 0x44e11166, 0x6ec92904, | |
| 8162 | + 0x10b161a2, 0x3a9959c0, 0xec41f0ee, 0xc669c88c, 0xb811802a, | |
| 8163 | + 0x9239b848}, | |
| 8164 | + {0x00000000, 0x4713f6fb, 0x8e27edf6, 0xc9341b0d, 0xc73eddad, | |
| 8165 | + 0x802d2b56, 0x4919305b, 0x0e0ac6a0, 0x550cbd1b, 0x121f4be0, | |
| 8166 | + 0xdb2b50ed, 0x9c38a616, 0x923260b6, 0xd521964d, 0x1c158d40, | |
| 8167 | + 0x5b067bbb, 0xaa197a36, 0xed0a8ccd, 0x243e97c0, 0x632d613b, | |
| 8168 | + 0x6d27a79b, 0x2a345160, 0xe3004a6d, 0xa413bc96, 0xff15c72d, | |
| 8169 | + 0xb80631d6, 0x71322adb, 0x3621dc20, 0x382b1a80, 0x7f38ec7b, | |
| 8170 | + 0xb60cf776, 0xf11f018d, 0x8f43f22d, 0xc85004d6, 0x01641fdb, | |
| 8171 | + 0x4677e920, 0x487d2f80, 0x0f6ed97b, 0xc65ac276, 0x8149348d, | |
| 8172 | + 0xda4f4f36, 0x9d5cb9cd, 0x5468a2c0, 0x137b543b, 0x1d71929b, | |
| 8173 | + 0x5a626460, 0x93567f6d, 0xd4458996, 0x255a881b, 0x62497ee0, | |
| 8174 | + 0xab7d65ed, 0xec6e9316, 0xe26455b6, 0xa577a34d, 0x6c43b840, | |
| 8175 | + 0x2b504ebb, 0x70563500, 0x3745c3fb, 0xfe71d8f6, 0xb9622e0d, | |
| 8176 | + 0xb768e8ad, 0xf07b1e56, 0x394f055b, 0x7e5cf3a0, 0xc5f6e21b, | |
| 8177 | + 0x82e514e0, 0x4bd10fed, 0x0cc2f916, 0x02c83fb6, 0x45dbc94d, | |
| 8178 | + 0x8cefd240, 0xcbfc24bb, 0x90fa5f00, 0xd7e9a9fb, 0x1eddb2f6, | |
| 8179 | + 0x59ce440d, 0x57c482ad, 0x10d77456, 0xd9e36f5b, 0x9ef099a0, | |
| 8180 | + 0x6fef982d, 0x28fc6ed6, 0xe1c875db, 0xa6db8320, 0xa8d14580, | |
| 8181 | + 0xefc2b37b, 0x26f6a876, 0x61e55e8d, 0x3ae32536, 0x7df0d3cd, | |
| 8182 | + 0xb4c4c8c0, 0xf3d73e3b, 0xfdddf89b, 0xbace0e60, 0x73fa156d, | |
| 8183 | + 0x34e9e396, 0x4ab51036, 0x0da6e6cd, 0xc492fdc0, 0x83810b3b, | |
| 8184 | + 0x8d8bcd9b, 0xca983b60, 0x03ac206d, 0x44bfd696, 0x1fb9ad2d, | |
| 8185 | + 0x58aa5bd6, 0x919e40db, 0xd68db620, 0xd8877080, 0x9f94867b, | |
| 8186 | + 0x56a09d76, 0x11b36b8d, 0xe0ac6a00, 0xa7bf9cfb, 0x6e8b87f6, | |
| 8187 | + 0x2998710d, 0x2792b7ad, 0x60814156, 0xa9b55a5b, 0xeea6aca0, | |
| 8188 | + 0xb5a0d71b, 0xf2b321e0, 0x3b873aed, 0x7c94cc16, 0x729e0ab6, | |
| 8189 | + 0x358dfc4d, 0xfcb9e740, 0xbbaa11bb, 0x509cc277, 0x178f348c, | |
| 8190 | + 0xdebb2f81, 0x99a8d97a, 0x97a21fda, 0xd0b1e921, 0x1985f22c, | |
| 8191 | + 0x5e9604d7, 0x05907f6c, 0x42838997, 0x8bb7929a, 0xcca46461, | |
| 8192 | + 0xc2aea2c1, 0x85bd543a, 0x4c894f37, 0x0b9ab9cc, 0xfa85b841, | |
| 8193 | + 0xbd964eba, 0x74a255b7, 0x33b1a34c, 0x3dbb65ec, 0x7aa89317, | |
| 8194 | + 0xb39c881a, 0xf48f7ee1, 0xaf89055a, 0xe89af3a1, 0x21aee8ac, | |
| 8195 | + 0x66bd1e57, 0x68b7d8f7, 0x2fa42e0c, 0xe6903501, 0xa183c3fa, | |
| 8196 | + 0xdfdf305a, 0x98ccc6a1, 0x51f8ddac, 0x16eb2b57, 0x18e1edf7, | |
| 8197 | + 0x5ff21b0c, 0x96c60001, 0xd1d5f6fa, 0x8ad38d41, 0xcdc07bba, | |
| 8198 | + 0x04f460b7, 0x43e7964c, 0x4ded50ec, 0x0afea617, 0xc3cabd1a, | |
| 8199 | + 0x84d94be1, 0x75c64a6c, 0x32d5bc97, 0xfbe1a79a, 0xbcf25161, | |
| 8200 | + 0xb2f897c1, 0xf5eb613a, 0x3cdf7a37, 0x7bcc8ccc, 0x20caf777, | |
| 8201 | + 0x67d9018c, 0xaeed1a81, 0xe9feec7a, 0xe7f42ada, 0xa0e7dc21, | |
| 8202 | + 0x69d3c72c, 0x2ec031d7, 0x956a206c, 0xd279d697, 0x1b4dcd9a, | |
| 8203 | + 0x5c5e3b61, 0x5254fdc1, 0x15470b3a, 0xdc731037, 0x9b60e6cc, | |
| 8204 | + 0xc0669d77, 0x87756b8c, 0x4e417081, 0x0952867a, 0x075840da, | |
| 8205 | + 0x404bb621, 0x897fad2c, 0xce6c5bd7, 0x3f735a5a, 0x7860aca1, | |
| 8206 | + 0xb154b7ac, 0xf6474157, 0xf84d87f7, 0xbf5e710c, 0x766a6a01, | |
| 8207 | + 0x31799cfa, 0x6a7fe741, 0x2d6c11ba, 0xe4580ab7, 0xa34bfc4c, | |
| 8208 | + 0xad413aec, 0xea52cc17, 0x2366d71a, 0x647521e1, 0x1a29d241, | |
| 8209 | + 0x5d3a24ba, 0x940e3fb7, 0xd31dc94c, 0xdd170fec, 0x9a04f917, | |
| 8210 | + 0x5330e21a, 0x142314e1, 0x4f256f5a, 0x083699a1, 0xc10282ac, | |
| 8211 | + 0x86117457, 0x881bb2f7, 0xcf08440c, 0x063c5f01, 0x412fa9fa, | |
| 8212 | + 0xb030a877, 0xf7235e8c, 0x3e174581, 0x7904b37a, 0x770e75da, | |
| 8213 | + 0x301d8321, 0xf929982c, 0xbe3a6ed7, 0xe53c156c, 0xa22fe397, | |
| 8214 | + 0x6b1bf89a, 0x2c080e61, 0x2202c8c1, 0x65113e3a, 0xac252537, | |
| 8215 | + 0xeb36d3cc}, | |
| 8216 | + {0x00000000, 0xa13984ee, 0x99020f9d, 0x383b8b73, 0xe975197b, | |
| 8217 | + 0x484c9d95, 0x707716e6, 0xd14e9208, 0x099b34b7, 0xa8a2b059, | |
| 8218 | + 0x90993b2a, 0x31a0bfc4, 0xe0ee2dcc, 0x41d7a922, 0x79ec2251, | |
| 8219 | + 0xd8d5a6bf, 0x1336696e, 0xb20fed80, 0x8a3466f3, 0x2b0de21d, | |
| 8220 | + 0xfa437015, 0x5b7af4fb, 0x63417f88, 0xc278fb66, 0x1aad5dd9, | |
| 8221 | + 0xbb94d937, 0x83af5244, 0x2296d6aa, 0xf3d844a2, 0x52e1c04c, | |
| 8222 | + 0x6ada4b3f, 0xcbe3cfd1, 0x266cd2dc, 0x87555632, 0xbf6edd41, | |
| 8223 | + 0x1e5759af, 0xcf19cba7, 0x6e204f49, 0x561bc43a, 0xf72240d4, | |
| 8224 | + 0x2ff7e66b, 0x8ece6285, 0xb6f5e9f6, 0x17cc6d18, 0xc682ff10, | |
| 8225 | + 0x67bb7bfe, 0x5f80f08d, 0xfeb97463, 0x355abbb2, 0x94633f5c, | |
| 8226 | + 0xac58b42f, 0x0d6130c1, 0xdc2fa2c9, 0x7d162627, 0x452dad54, | |
| 8227 | + 0xe41429ba, 0x3cc18f05, 0x9df80beb, 0xa5c38098, 0x04fa0476, | |
| 8228 | + 0xd5b4967e, 0x748d1290, 0x4cb699e3, 0xed8f1d0d, 0x4cd9a5b8, | |
| 8229 | + 0xede02156, 0xd5dbaa25, 0x74e22ecb, 0xa5acbcc3, 0x0495382d, | |
| 8230 | + 0x3caeb35e, 0x9d9737b0, 0x4542910f, 0xe47b15e1, 0xdc409e92, | |
| 8231 | + 0x7d791a7c, 0xac378874, 0x0d0e0c9a, 0x353587e9, 0x940c0307, | |
| 8232 | + 0x5fefccd6, 0xfed64838, 0xc6edc34b, 0x67d447a5, 0xb69ad5ad, | |
| 8233 | + 0x17a35143, 0x2f98da30, 0x8ea15ede, 0x5674f861, 0xf74d7c8f, | |
| 8234 | + 0xcf76f7fc, 0x6e4f7312, 0xbf01e11a, 0x1e3865f4, 0x2603ee87, | |
| 8235 | + 0x873a6a69, 0x6ab57764, 0xcb8cf38a, 0xf3b778f9, 0x528efc17, | |
| 8236 | + 0x83c06e1f, 0x22f9eaf1, 0x1ac26182, 0xbbfbe56c, 0x632e43d3, | |
| 8237 | + 0xc217c73d, 0xfa2c4c4e, 0x5b15c8a0, 0x8a5b5aa8, 0x2b62de46, | |
| 8238 | + 0x13595535, 0xb260d1db, 0x79831e0a, 0xd8ba9ae4, 0xe0811197, | |
| 8239 | + 0x41b89579, 0x90f60771, 0x31cf839f, 0x09f408ec, 0xa8cd8c02, | |
| 8240 | + 0x70182abd, 0xd121ae53, 0xe91a2520, 0x4823a1ce, 0x996d33c6, | |
| 8241 | + 0x3854b728, 0x006f3c5b, 0xa156b8b5, 0x99b34b70, 0x388acf9e, | |
| 8242 | + 0x00b144ed, 0xa188c003, 0x70c6520b, 0xd1ffd6e5, 0xe9c45d96, | |
| 8243 | + 0x48fdd978, 0x90287fc7, 0x3111fb29, 0x092a705a, 0xa813f4b4, | |
| 8244 | + 0x795d66bc, 0xd864e252, 0xe05f6921, 0x4166edcf, 0x8a85221e, | |
| 8245 | + 0x2bbca6f0, 0x13872d83, 0xb2bea96d, 0x63f03b65, 0xc2c9bf8b, | |
| 8246 | + 0xfaf234f8, 0x5bcbb016, 0x831e16a9, 0x22279247, 0x1a1c1934, | |
| 8247 | + 0xbb259dda, 0x6a6b0fd2, 0xcb528b3c, 0xf369004f, 0x525084a1, | |
| 8248 | + 0xbfdf99ac, 0x1ee61d42, 0x26dd9631, 0x87e412df, 0x56aa80d7, | |
| 8249 | + 0xf7930439, 0xcfa88f4a, 0x6e910ba4, 0xb644ad1b, 0x177d29f5, | |
| 8250 | + 0x2f46a286, 0x8e7f2668, 0x5f31b460, 0xfe08308e, 0xc633bbfd, | |
| 8251 | + 0x670a3f13, 0xace9f0c2, 0x0dd0742c, 0x35ebff5f, 0x94d27bb1, | |
| 8252 | + 0x459ce9b9, 0xe4a56d57, 0xdc9ee624, 0x7da762ca, 0xa572c475, | |
| 8253 | + 0x044b409b, 0x3c70cbe8, 0x9d494f06, 0x4c07dd0e, 0xed3e59e0, | |
| 8254 | + 0xd505d293, 0x743c567d, 0xd56aeec8, 0x74536a26, 0x4c68e155, | |
| 8255 | + 0xed5165bb, 0x3c1ff7b3, 0x9d26735d, 0xa51df82e, 0x04247cc0, | |
| 8256 | + 0xdcf1da7f, 0x7dc85e91, 0x45f3d5e2, 0xe4ca510c, 0x3584c304, | |
| 8257 | + 0x94bd47ea, 0xac86cc99, 0x0dbf4877, 0xc65c87a6, 0x67650348, | |
| 8258 | + 0x5f5e883b, 0xfe670cd5, 0x2f299edd, 0x8e101a33, 0xb62b9140, | |
| 8259 | + 0x171215ae, 0xcfc7b311, 0x6efe37ff, 0x56c5bc8c, 0xf7fc3862, | |
| 8260 | + 0x26b2aa6a, 0x878b2e84, 0xbfb0a5f7, 0x1e892119, 0xf3063c14, | |
| 8261 | + 0x523fb8fa, 0x6a043389, 0xcb3db767, 0x1a73256f, 0xbb4aa181, | |
| 8262 | + 0x83712af2, 0x2248ae1c, 0xfa9d08a3, 0x5ba48c4d, 0x639f073e, | |
| 8263 | + 0xc2a683d0, 0x13e811d8, 0xb2d19536, 0x8aea1e45, 0x2bd39aab, | |
| 8264 | + 0xe030557a, 0x4109d194, 0x79325ae7, 0xd80bde09, 0x09454c01, | |
| 8265 | + 0xa87cc8ef, 0x9047439c, 0x317ec772, 0xe9ab61cd, 0x4892e523, | |
| 8266 | + 0x70a96e50, 0xd190eabe, 0x00de78b6, 0xa1e7fc58, 0x99dc772b, | |
| 8267 | + 0x38e5f3c5}, | |
| 8268 | + {0x00000000, 0xe81790a1, 0x0b5e2703, 0xe349b7a2, 0x16bc4e06, | |
| 8269 | + 0xfeabdea7, 0x1de26905, 0xf5f5f9a4, 0x2d789c0c, 0xc56f0cad, | |
| 8270 | + 0x2626bb0f, 0xce312bae, 0x3bc4d20a, 0xd3d342ab, 0x309af509, | |
| 8271 | + 0xd88d65a8, 0x5af13818, 0xb2e6a8b9, 0x51af1f1b, 0xb9b88fba, | |
| 8272 | + 0x4c4d761e, 0xa45ae6bf, 0x4713511d, 0xaf04c1bc, 0x7789a414, | |
| 8273 | + 0x9f9e34b5, 0x7cd78317, 0x94c013b6, 0x6135ea12, 0x89227ab3, | |
| 8274 | + 0x6a6bcd11, 0x827c5db0, 0xb5e27030, 0x5df5e091, 0xbebc5733, | |
| 8275 | + 0x56abc792, 0xa35e3e36, 0x4b49ae97, 0xa8001935, 0x40178994, | |
| 8276 | + 0x989aec3c, 0x708d7c9d, 0x93c4cb3f, 0x7bd35b9e, 0x8e26a23a, | |
| 8277 | + 0x6631329b, 0x85788539, 0x6d6f1598, 0xef134828, 0x0704d889, | |
| 8278 | + 0xe44d6f2b, 0x0c5aff8a, 0xf9af062e, 0x11b8968f, 0xf2f1212d, | |
| 8279 | + 0x1ae6b18c, 0xc26bd424, 0x2a7c4485, 0xc935f327, 0x21226386, | |
| 8280 | + 0xd4d79a22, 0x3cc00a83, 0xdf89bd21, 0x379e2d80, 0xb0b5e621, | |
| 8281 | + 0x58a27680, 0xbbebc122, 0x53fc5183, 0xa609a827, 0x4e1e3886, | |
| 8282 | + 0xad578f24, 0x45401f85, 0x9dcd7a2d, 0x75daea8c, 0x96935d2e, | |
| 8283 | + 0x7e84cd8f, 0x8b71342b, 0x6366a48a, 0x802f1328, 0x68388389, | |
| 8284 | + 0xea44de39, 0x02534e98, 0xe11af93a, 0x090d699b, 0xfcf8903f, | |
| 8285 | + 0x14ef009e, 0xf7a6b73c, 0x1fb1279d, 0xc73c4235, 0x2f2bd294, | |
| 8286 | + 0xcc626536, 0x2475f597, 0xd1800c33, 0x39979c92, 0xdade2b30, | |
| 8287 | + 0x32c9bb91, 0x05579611, 0xed4006b0, 0x0e09b112, 0xe61e21b3, | |
| 8288 | + 0x13ebd817, 0xfbfc48b6, 0x18b5ff14, 0xf0a26fb5, 0x282f0a1d, | |
| 8289 | + 0xc0389abc, 0x23712d1e, 0xcb66bdbf, 0x3e93441b, 0xd684d4ba, | |
| 8290 | + 0x35cd6318, 0xdddaf3b9, 0x5fa6ae09, 0xb7b13ea8, 0x54f8890a, | |
| 8291 | + 0xbcef19ab, 0x491ae00f, 0xa10d70ae, 0x4244c70c, 0xaa5357ad, | |
| 8292 | + 0x72de3205, 0x9ac9a2a4, 0x79801506, 0x919785a7, 0x64627c03, | |
| 8293 | + 0x8c75eca2, 0x6f3c5b00, 0x872bcba1, 0xba1aca03, 0x520d5aa2, | |
| 8294 | + 0xb144ed00, 0x59537da1, 0xaca68405, 0x44b114a4, 0xa7f8a306, | |
| 8295 | + 0x4fef33a7, 0x9762560f, 0x7f75c6ae, 0x9c3c710c, 0x742be1ad, | |
| 8296 | + 0x81de1809, 0x69c988a8, 0x8a803f0a, 0x6297afab, 0xe0ebf21b, | |
| 8297 | + 0x08fc62ba, 0xebb5d518, 0x03a245b9, 0xf657bc1d, 0x1e402cbc, | |
| 8298 | + 0xfd099b1e, 0x151e0bbf, 0xcd936e17, 0x2584feb6, 0xc6cd4914, | |
| 8299 | + 0x2edad9b5, 0xdb2f2011, 0x3338b0b0, 0xd0710712, 0x386697b3, | |
| 8300 | + 0x0ff8ba33, 0xe7ef2a92, 0x04a69d30, 0xecb10d91, 0x1944f435, | |
| 8301 | + 0xf1536494, 0x121ad336, 0xfa0d4397, 0x2280263f, 0xca97b69e, | |
| 8302 | + 0x29de013c, 0xc1c9919d, 0x343c6839, 0xdc2bf898, 0x3f624f3a, | |
| 8303 | + 0xd775df9b, 0x5509822b, 0xbd1e128a, 0x5e57a528, 0xb6403589, | |
| 8304 | + 0x43b5cc2d, 0xaba25c8c, 0x48ebeb2e, 0xa0fc7b8f, 0x78711e27, | |
| 8305 | + 0x90668e86, 0x732f3924, 0x9b38a985, 0x6ecd5021, 0x86dac080, | |
| 8306 | + 0x65937722, 0x8d84e783, 0x0aaf2c22, 0xe2b8bc83, 0x01f10b21, | |
| 8307 | + 0xe9e69b80, 0x1c136224, 0xf404f285, 0x174d4527, 0xff5ad586, | |
| 8308 | + 0x27d7b02e, 0xcfc0208f, 0x2c89972d, 0xc49e078c, 0x316bfe28, | |
| 8309 | + 0xd97c6e89, 0x3a35d92b, 0xd222498a, 0x505e143a, 0xb849849b, | |
| 8310 | + 0x5b003339, 0xb317a398, 0x46e25a3c, 0xaef5ca9d, 0x4dbc7d3f, | |
| 8311 | + 0xa5abed9e, 0x7d268836, 0x95311897, 0x7678af35, 0x9e6f3f94, | |
| 8312 | + 0x6b9ac630, 0x838d5691, 0x60c4e133, 0x88d37192, 0xbf4d5c12, | |
| 8313 | + 0x575accb3, 0xb4137b11, 0x5c04ebb0, 0xa9f11214, 0x41e682b5, | |
| 8314 | + 0xa2af3517, 0x4ab8a5b6, 0x9235c01e, 0x7a2250bf, 0x996be71d, | |
| 8315 | + 0x717c77bc, 0x84898e18, 0x6c9e1eb9, 0x8fd7a91b, 0x67c039ba, | |
| 8316 | + 0xe5bc640a, 0x0dabf4ab, 0xeee24309, 0x06f5d3a8, 0xf3002a0c, | |
| 8317 | + 0x1b17baad, 0xf85e0d0f, 0x10499dae, 0xc8c4f806, 0x20d368a7, | |
| 8318 | + 0xc39adf05, 0x2b8d4fa4, 0xde78b600, 0x366f26a1, 0xd5269103, | |
| 8319 | + 0x3d3101a2}}; | |
| 8320 | + | |
| 8321 | +local const z_word_t FAR crc_braid_big_table[][256] = { | |
| 8322 | + {0x0000000000000000, 0xa19017e800000000, 0x03275e0b00000000, | |
| 8323 | + 0xa2b749e300000000, 0x064ebc1600000000, 0xa7deabfe00000000, | |
| 8324 | + 0x0569e21d00000000, 0xa4f9f5f500000000, 0x0c9c782d00000000, | |
| 8325 | + 0xad0c6fc500000000, 0x0fbb262600000000, 0xae2b31ce00000000, | |
| 8326 | + 0x0ad2c43b00000000, 0xab42d3d300000000, 0x09f59a3000000000, | |
| 8327 | + 0xa8658dd800000000, 0x1838f15a00000000, 0xb9a8e6b200000000, | |
| 8328 | + 0x1b1faf5100000000, 0xba8fb8b900000000, 0x1e764d4c00000000, | |
| 8329 | + 0xbfe65aa400000000, 0x1d51134700000000, 0xbcc104af00000000, | |
| 8330 | + 0x14a4897700000000, 0xb5349e9f00000000, 0x1783d77c00000000, | |
| 8331 | + 0xb613c09400000000, 0x12ea356100000000, 0xb37a228900000000, | |
| 8332 | + 0x11cd6b6a00000000, 0xb05d7c8200000000, 0x3070e2b500000000, | |
| 8333 | + 0x91e0f55d00000000, 0x3357bcbe00000000, 0x92c7ab5600000000, | |
| 8334 | + 0x363e5ea300000000, 0x97ae494b00000000, 0x351900a800000000, | |
| 8335 | + 0x9489174000000000, 0x3cec9a9800000000, 0x9d7c8d7000000000, | |
| 8336 | + 0x3fcbc49300000000, 0x9e5bd37b00000000, 0x3aa2268e00000000, | |
| 8337 | + 0x9b32316600000000, 0x3985788500000000, 0x98156f6d00000000, | |
| 8338 | + 0x284813ef00000000, 0x89d8040700000000, 0x2b6f4de400000000, | |
| 8339 | + 0x8aff5a0c00000000, 0x2e06aff900000000, 0x8f96b81100000000, | |
| 8340 | + 0x2d21f1f200000000, 0x8cb1e61a00000000, 0x24d46bc200000000, | |
| 8341 | + 0x85447c2a00000000, 0x27f335c900000000, 0x8663222100000000, | |
| 8342 | + 0x229ad7d400000000, 0x830ac03c00000000, 0x21bd89df00000000, | |
| 8343 | + 0x802d9e3700000000, 0x21e6b5b000000000, 0x8076a25800000000, | |
| 8344 | + 0x22c1ebbb00000000, 0x8351fc5300000000, 0x27a809a600000000, | |
| 8345 | + 0x86381e4e00000000, 0x248f57ad00000000, 0x851f404500000000, | |
| 8346 | + 0x2d7acd9d00000000, 0x8ceada7500000000, 0x2e5d939600000000, | |
| 8347 | + 0x8fcd847e00000000, 0x2b34718b00000000, 0x8aa4666300000000, | |
| 8348 | + 0x28132f8000000000, 0x8983386800000000, 0x39de44ea00000000, | |
| 8349 | + 0x984e530200000000, 0x3af91ae100000000, 0x9b690d0900000000, | |
| 8350 | + 0x3f90f8fc00000000, 0x9e00ef1400000000, 0x3cb7a6f700000000, | |
| 8351 | + 0x9d27b11f00000000, 0x35423cc700000000, 0x94d22b2f00000000, | |
| 8352 | + 0x366562cc00000000, 0x97f5752400000000, 0x330c80d100000000, | |
| 8353 | + 0x929c973900000000, 0x302bdeda00000000, 0x91bbc93200000000, | |
| 8354 | + 0x1196570500000000, 0xb00640ed00000000, 0x12b1090e00000000, | |
| 8355 | + 0xb3211ee600000000, 0x17d8eb1300000000, 0xb648fcfb00000000, | |
| 8356 | + 0x14ffb51800000000, 0xb56fa2f000000000, 0x1d0a2f2800000000, | |
| 8357 | + 0xbc9a38c000000000, 0x1e2d712300000000, 0xbfbd66cb00000000, | |
| 8358 | + 0x1b44933e00000000, 0xbad484d600000000, 0x1863cd3500000000, | |
| 8359 | + 0xb9f3dadd00000000, 0x09aea65f00000000, 0xa83eb1b700000000, | |
| 8360 | + 0x0a89f85400000000, 0xab19efbc00000000, 0x0fe01a4900000000, | |
| 8361 | + 0xae700da100000000, 0x0cc7444200000000, 0xad5753aa00000000, | |
| 8362 | + 0x0532de7200000000, 0xa4a2c99a00000000, 0x0615807900000000, | |
| 8363 | + 0xa785979100000000, 0x037c626400000000, 0xa2ec758c00000000, | |
| 8364 | + 0x005b3c6f00000000, 0xa1cb2b8700000000, 0x03ca1aba00000000, | |
| 8365 | + 0xa25a0d5200000000, 0x00ed44b100000000, 0xa17d535900000000, | |
| 8366 | + 0x0584a6ac00000000, 0xa414b14400000000, 0x06a3f8a700000000, | |
| 8367 | + 0xa733ef4f00000000, 0x0f56629700000000, 0xaec6757f00000000, | |
| 8368 | + 0x0c713c9c00000000, 0xade12b7400000000, 0x0918de8100000000, | |
| 8369 | + 0xa888c96900000000, 0x0a3f808a00000000, 0xabaf976200000000, | |
| 8370 | + 0x1bf2ebe000000000, 0xba62fc0800000000, 0x18d5b5eb00000000, | |
| 8371 | + 0xb945a20300000000, 0x1dbc57f600000000, 0xbc2c401e00000000, | |
| 8372 | + 0x1e9b09fd00000000, 0xbf0b1e1500000000, 0x176e93cd00000000, | |
| 8373 | + 0xb6fe842500000000, 0x1449cdc600000000, 0xb5d9da2e00000000, | |
| 8374 | + 0x11202fdb00000000, 0xb0b0383300000000, 0x120771d000000000, | |
| 8375 | + 0xb397663800000000, 0x33baf80f00000000, 0x922aefe700000000, | |
| 8376 | + 0x309da60400000000, 0x910db1ec00000000, 0x35f4441900000000, | |
| 8377 | + 0x946453f100000000, 0x36d31a1200000000, 0x97430dfa00000000, | |
| 8378 | + 0x3f26802200000000, 0x9eb697ca00000000, 0x3c01de2900000000, | |
| 8379 | + 0x9d91c9c100000000, 0x39683c3400000000, 0x98f82bdc00000000, | |
| 8380 | + 0x3a4f623f00000000, 0x9bdf75d700000000, 0x2b82095500000000, | |
| 8381 | + 0x8a121ebd00000000, 0x28a5575e00000000, 0x893540b600000000, | |
| 8382 | + 0x2dccb54300000000, 0x8c5ca2ab00000000, 0x2eebeb4800000000, | |
| 8383 | + 0x8f7bfca000000000, 0x271e717800000000, 0x868e669000000000, | |
| 8384 | + 0x24392f7300000000, 0x85a9389b00000000, 0x2150cd6e00000000, | |
| 8385 | + 0x80c0da8600000000, 0x2277936500000000, 0x83e7848d00000000, | |
| 8386 | + 0x222caf0a00000000, 0x83bcb8e200000000, 0x210bf10100000000, | |
| 8387 | + 0x809be6e900000000, 0x2462131c00000000, 0x85f204f400000000, | |
| 8388 | + 0x27454d1700000000, 0x86d55aff00000000, 0x2eb0d72700000000, | |
| 8389 | + 0x8f20c0cf00000000, 0x2d97892c00000000, 0x8c079ec400000000, | |
| 8390 | + 0x28fe6b3100000000, 0x896e7cd900000000, 0x2bd9353a00000000, | |
| 8391 | + 0x8a4922d200000000, 0x3a145e5000000000, 0x9b8449b800000000, | |
| 8392 | + 0x3933005b00000000, 0x98a317b300000000, 0x3c5ae24600000000, | |
| 8393 | + 0x9dcaf5ae00000000, 0x3f7dbc4d00000000, 0x9eedaba500000000, | |
| 8394 | + 0x3688267d00000000, 0x9718319500000000, 0x35af787600000000, | |
| 8395 | + 0x943f6f9e00000000, 0x30c69a6b00000000, 0x91568d8300000000, | |
| 8396 | + 0x33e1c46000000000, 0x9271d38800000000, 0x125c4dbf00000000, | |
| 8397 | + 0xb3cc5a5700000000, 0x117b13b400000000, 0xb0eb045c00000000, | |
| 8398 | + 0x1412f1a900000000, 0xb582e64100000000, 0x1735afa200000000, | |
| 8399 | + 0xb6a5b84a00000000, 0x1ec0359200000000, 0xbf50227a00000000, | |
| 8400 | + 0x1de76b9900000000, 0xbc777c7100000000, 0x188e898400000000, | |
| 8401 | + 0xb91e9e6c00000000, 0x1ba9d78f00000000, 0xba39c06700000000, | |
| 8402 | + 0x0a64bce500000000, 0xabf4ab0d00000000, 0x0943e2ee00000000, | |
| 8403 | + 0xa8d3f50600000000, 0x0c2a00f300000000, 0xadba171b00000000, | |
| 8404 | + 0x0f0d5ef800000000, 0xae9d491000000000, 0x06f8c4c800000000, | |
| 8405 | + 0xa768d32000000000, 0x05df9ac300000000, 0xa44f8d2b00000000, | |
| 8406 | + 0x00b678de00000000, 0xa1266f3600000000, 0x039126d500000000, | |
| 8407 | + 0xa201313d00000000}, | |
| 8408 | + {0x0000000000000000, 0xee8439a100000000, 0x9d0f029900000000, | |
| 8409 | + 0x738b3b3800000000, 0x7b1975e900000000, 0x959d4c4800000000, | |
| 8410 | + 0xe616777000000000, 0x08924ed100000000, 0xb7349b0900000000, | |
| 8411 | + 0x59b0a2a800000000, 0x2a3b999000000000, 0xc4bfa03100000000, | |
| 8412 | + 0xcc2deee000000000, 0x22a9d74100000000, 0x5122ec7900000000, | |
| 8413 | + 0xbfa6d5d800000000, 0x6e69361300000000, 0x80ed0fb200000000, | |
| 8414 | + 0xf366348a00000000, 0x1de20d2b00000000, 0x157043fa00000000, | |
| 8415 | + 0xfbf47a5b00000000, 0x887f416300000000, 0x66fb78c200000000, | |
| 8416 | + 0xd95dad1a00000000, 0x37d994bb00000000, 0x4452af8300000000, | |
| 8417 | + 0xaad6962200000000, 0xa244d8f300000000, 0x4cc0e15200000000, | |
| 8418 | + 0x3f4bda6a00000000, 0xd1cfe3cb00000000, 0xdcd26c2600000000, | |
| 8419 | + 0x3256558700000000, 0x41dd6ebf00000000, 0xaf59571e00000000, | |
| 8420 | + 0xa7cb19cf00000000, 0x494f206e00000000, 0x3ac41b5600000000, | |
| 8421 | + 0xd44022f700000000, 0x6be6f72f00000000, 0x8562ce8e00000000, | |
| 8422 | + 0xf6e9f5b600000000, 0x186dcc1700000000, 0x10ff82c600000000, | |
| 8423 | + 0xfe7bbb6700000000, 0x8df0805f00000000, 0x6374b9fe00000000, | |
| 8424 | + 0xb2bb5a3500000000, 0x5c3f639400000000, 0x2fb458ac00000000, | |
| 8425 | + 0xc130610d00000000, 0xc9a22fdc00000000, 0x2726167d00000000, | |
| 8426 | + 0x54ad2d4500000000, 0xba2914e400000000, 0x058fc13c00000000, | |
| 8427 | + 0xeb0bf89d00000000, 0x9880c3a500000000, 0x7604fa0400000000, | |
| 8428 | + 0x7e96b4d500000000, 0x90128d7400000000, 0xe399b64c00000000, | |
| 8429 | + 0x0d1d8fed00000000, 0xb8a5d94c00000000, 0x5621e0ed00000000, | |
| 8430 | + 0x25aadbd500000000, 0xcb2ee27400000000, 0xc3bcaca500000000, | |
| 8431 | + 0x2d38950400000000, 0x5eb3ae3c00000000, 0xb037979d00000000, | |
| 8432 | + 0x0f91424500000000, 0xe1157be400000000, 0x929e40dc00000000, | |
| 8433 | + 0x7c1a797d00000000, 0x748837ac00000000, 0x9a0c0e0d00000000, | |
| 8434 | + 0xe987353500000000, 0x07030c9400000000, 0xd6ccef5f00000000, | |
| 8435 | + 0x3848d6fe00000000, 0x4bc3edc600000000, 0xa547d46700000000, | |
| 8436 | + 0xadd59ab600000000, 0x4351a31700000000, 0x30da982f00000000, | |
| 8437 | + 0xde5ea18e00000000, 0x61f8745600000000, 0x8f7c4df700000000, | |
| 8438 | + 0xfcf776cf00000000, 0x12734f6e00000000, 0x1ae101bf00000000, | |
| 8439 | + 0xf465381e00000000, 0x87ee032600000000, 0x696a3a8700000000, | |
| 8440 | + 0x6477b56a00000000, 0x8af38ccb00000000, 0xf978b7f300000000, | |
| 8441 | + 0x17fc8e5200000000, 0x1f6ec08300000000, 0xf1eaf92200000000, | |
| 8442 | + 0x8261c21a00000000, 0x6ce5fbbb00000000, 0xd3432e6300000000, | |
| 8443 | + 0x3dc717c200000000, 0x4e4c2cfa00000000, 0xa0c8155b00000000, | |
| 8444 | + 0xa85a5b8a00000000, 0x46de622b00000000, 0x3555591300000000, | |
| 8445 | + 0xdbd160b200000000, 0x0a1e837900000000, 0xe49abad800000000, | |
| 8446 | + 0x971181e000000000, 0x7995b84100000000, 0x7107f69000000000, | |
| 8447 | + 0x9f83cf3100000000, 0xec08f40900000000, 0x028ccda800000000, | |
| 8448 | + 0xbd2a187000000000, 0x53ae21d100000000, 0x20251ae900000000, | |
| 8449 | + 0xcea1234800000000, 0xc6336d9900000000, 0x28b7543800000000, | |
| 8450 | + 0x5b3c6f0000000000, 0xb5b856a100000000, 0x704bb39900000000, | |
| 8451 | + 0x9ecf8a3800000000, 0xed44b10000000000, 0x03c088a100000000, | |
| 8452 | + 0x0b52c67000000000, 0xe5d6ffd100000000, 0x965dc4e900000000, | |
| 8453 | + 0x78d9fd4800000000, 0xc77f289000000000, 0x29fb113100000000, | |
| 8454 | + 0x5a702a0900000000, 0xb4f413a800000000, 0xbc665d7900000000, | |
| 8455 | + 0x52e264d800000000, 0x21695fe000000000, 0xcfed664100000000, | |
| 8456 | + 0x1e22858a00000000, 0xf0a6bc2b00000000, 0x832d871300000000, | |
| 8457 | + 0x6da9beb200000000, 0x653bf06300000000, 0x8bbfc9c200000000, | |
| 8458 | + 0xf834f2fa00000000, 0x16b0cb5b00000000, 0xa9161e8300000000, | |
| 8459 | + 0x4792272200000000, 0x34191c1a00000000, 0xda9d25bb00000000, | |
| 8460 | + 0xd20f6b6a00000000, 0x3c8b52cb00000000, 0x4f0069f300000000, | |
| 8461 | + 0xa184505200000000, 0xac99dfbf00000000, 0x421de61e00000000, | |
| 8462 | + 0x3196dd2600000000, 0xdf12e48700000000, 0xd780aa5600000000, | |
| 8463 | + 0x390493f700000000, 0x4a8fa8cf00000000, 0xa40b916e00000000, | |
| 8464 | + 0x1bad44b600000000, 0xf5297d1700000000, 0x86a2462f00000000, | |
| 8465 | + 0x68267f8e00000000, 0x60b4315f00000000, 0x8e3008fe00000000, | |
| 8466 | + 0xfdbb33c600000000, 0x133f0a6700000000, 0xc2f0e9ac00000000, | |
| 8467 | + 0x2c74d00d00000000, 0x5fffeb3500000000, 0xb17bd29400000000, | |
| 8468 | + 0xb9e99c4500000000, 0x576da5e400000000, 0x24e69edc00000000, | |
| 8469 | + 0xca62a77d00000000, 0x75c472a500000000, 0x9b404b0400000000, | |
| 8470 | + 0xe8cb703c00000000, 0x064f499d00000000, 0x0edd074c00000000, | |
| 8471 | + 0xe0593eed00000000, 0x93d205d500000000, 0x7d563c7400000000, | |
| 8472 | + 0xc8ee6ad500000000, 0x266a537400000000, 0x55e1684c00000000, | |
| 8473 | + 0xbb6551ed00000000, 0xb3f71f3c00000000, 0x5d73269d00000000, | |
| 8474 | + 0x2ef81da500000000, 0xc07c240400000000, 0x7fdaf1dc00000000, | |
| 8475 | + 0x915ec87d00000000, 0xe2d5f34500000000, 0x0c51cae400000000, | |
| 8476 | + 0x04c3843500000000, 0xea47bd9400000000, 0x99cc86ac00000000, | |
| 8477 | + 0x7748bf0d00000000, 0xa6875cc600000000, 0x4803656700000000, | |
| 8478 | + 0x3b885e5f00000000, 0xd50c67fe00000000, 0xdd9e292f00000000, | |
| 8479 | + 0x331a108e00000000, 0x40912bb600000000, 0xae15121700000000, | |
| 8480 | + 0x11b3c7cf00000000, 0xff37fe6e00000000, 0x8cbcc55600000000, | |
| 8481 | + 0x6238fcf700000000, 0x6aaab22600000000, 0x842e8b8700000000, | |
| 8482 | + 0xf7a5b0bf00000000, 0x1921891e00000000, 0x143c06f300000000, | |
| 8483 | + 0xfab83f5200000000, 0x8933046a00000000, 0x67b73dcb00000000, | |
| 8484 | + 0x6f25731a00000000, 0x81a14abb00000000, 0xf22a718300000000, | |
| 8485 | + 0x1cae482200000000, 0xa3089dfa00000000, 0x4d8ca45b00000000, | |
| 8486 | + 0x3e079f6300000000, 0xd083a6c200000000, 0xd811e81300000000, | |
| 8487 | + 0x3695d1b200000000, 0x451eea8a00000000, 0xab9ad32b00000000, | |
| 8488 | + 0x7a5530e000000000, 0x94d1094100000000, 0xe75a327900000000, | |
| 8489 | + 0x09de0bd800000000, 0x014c450900000000, 0xefc87ca800000000, | |
| 8490 | + 0x9c43479000000000, 0x72c77e3100000000, 0xcd61abe900000000, | |
| 8491 | + 0x23e5924800000000, 0x506ea97000000000, 0xbeea90d100000000, | |
| 8492 | + 0xb678de0000000000, 0x58fce7a100000000, 0x2b77dc9900000000, | |
| 8493 | + 0xc5f3e53800000000}, | |
| 8494 | + {0x0000000000000000, 0xfbf6134700000000, 0xf6ed278e00000000, | |
| 8495 | + 0x0d1b34c900000000, 0xaddd3ec700000000, 0x562b2d8000000000, | |
| 8496 | + 0x5b30194900000000, 0xa0c60a0e00000000, 0x1bbd0c5500000000, | |
| 8497 | + 0xe04b1f1200000000, 0xed502bdb00000000, 0x16a6389c00000000, | |
| 8498 | + 0xb660329200000000, 0x4d9621d500000000, 0x408d151c00000000, | |
| 8499 | + 0xbb7b065b00000000, 0x367a19aa00000000, 0xcd8c0aed00000000, | |
| 8500 | + 0xc0973e2400000000, 0x3b612d6300000000, 0x9ba7276d00000000, | |
| 8501 | + 0x6051342a00000000, 0x6d4a00e300000000, 0x96bc13a400000000, | |
| 8502 | + 0x2dc715ff00000000, 0xd63106b800000000, 0xdb2a327100000000, | |
| 8503 | + 0x20dc213600000000, 0x801a2b3800000000, 0x7bec387f00000000, | |
| 8504 | + 0x76f70cb600000000, 0x8d011ff100000000, 0x2df2438f00000000, | |
| 8505 | + 0xd60450c800000000, 0xdb1f640100000000, 0x20e9774600000000, | |
| 8506 | + 0x802f7d4800000000, 0x7bd96e0f00000000, 0x76c25ac600000000, | |
| 8507 | + 0x8d34498100000000, 0x364f4fda00000000, 0xcdb95c9d00000000, | |
| 8508 | + 0xc0a2685400000000, 0x3b547b1300000000, 0x9b92711d00000000, | |
| 8509 | + 0x6064625a00000000, 0x6d7f569300000000, 0x968945d400000000, | |
| 8510 | + 0x1b885a2500000000, 0xe07e496200000000, 0xed657dab00000000, | |
| 8511 | + 0x16936eec00000000, 0xb65564e200000000, 0x4da377a500000000, | |
| 8512 | + 0x40b8436c00000000, 0xbb4e502b00000000, 0x0035567000000000, | |
| 8513 | + 0xfbc3453700000000, 0xf6d871fe00000000, 0x0d2e62b900000000, | |
| 8514 | + 0xade868b700000000, 0x561e7bf000000000, 0x5b054f3900000000, | |
| 8515 | + 0xa0f35c7e00000000, 0x1be2f6c500000000, 0xe014e58200000000, | |
| 8516 | + 0xed0fd14b00000000, 0x16f9c20c00000000, 0xb63fc80200000000, | |
| 8517 | + 0x4dc9db4500000000, 0x40d2ef8c00000000, 0xbb24fccb00000000, | |
| 8518 | + 0x005ffa9000000000, 0xfba9e9d700000000, 0xf6b2dd1e00000000, | |
| 8519 | + 0x0d44ce5900000000, 0xad82c45700000000, 0x5674d71000000000, | |
| 8520 | + 0x5b6fe3d900000000, 0xa099f09e00000000, 0x2d98ef6f00000000, | |
| 8521 | + 0xd66efc2800000000, 0xdb75c8e100000000, 0x2083dba600000000, | |
| 8522 | + 0x8045d1a800000000, 0x7bb3c2ef00000000, 0x76a8f62600000000, | |
| 8523 | + 0x8d5ee56100000000, 0x3625e33a00000000, 0xcdd3f07d00000000, | |
| 8524 | + 0xc0c8c4b400000000, 0x3b3ed7f300000000, 0x9bf8ddfd00000000, | |
| 8525 | + 0x600eceba00000000, 0x6d15fa7300000000, 0x96e3e93400000000, | |
| 8526 | + 0x3610b54a00000000, 0xcde6a60d00000000, 0xc0fd92c400000000, | |
| 8527 | + 0x3b0b818300000000, 0x9bcd8b8d00000000, 0x603b98ca00000000, | |
| 8528 | + 0x6d20ac0300000000, 0x96d6bf4400000000, 0x2dadb91f00000000, | |
| 8529 | + 0xd65baa5800000000, 0xdb409e9100000000, 0x20b68dd600000000, | |
| 8530 | + 0x807087d800000000, 0x7b86949f00000000, 0x769da05600000000, | |
| 8531 | + 0x8d6bb31100000000, 0x006aace000000000, 0xfb9cbfa700000000, | |
| 8532 | + 0xf6878b6e00000000, 0x0d71982900000000, 0xadb7922700000000, | |
| 8533 | + 0x5641816000000000, 0x5b5ab5a900000000, 0xa0aca6ee00000000, | |
| 8534 | + 0x1bd7a0b500000000, 0xe021b3f200000000, 0xed3a873b00000000, | |
| 8535 | + 0x16cc947c00000000, 0xb60a9e7200000000, 0x4dfc8d3500000000, | |
| 8536 | + 0x40e7b9fc00000000, 0xbb11aabb00000000, 0x77c29c5000000000, | |
| 8537 | + 0x8c348f1700000000, 0x812fbbde00000000, 0x7ad9a89900000000, | |
| 8538 | + 0xda1fa29700000000, 0x21e9b1d000000000, 0x2cf2851900000000, | |
| 8539 | + 0xd704965e00000000, 0x6c7f900500000000, 0x9789834200000000, | |
| 8540 | + 0x9a92b78b00000000, 0x6164a4cc00000000, 0xc1a2aec200000000, | |
| 8541 | + 0x3a54bd8500000000, 0x374f894c00000000, 0xccb99a0b00000000, | |
| 8542 | + 0x41b885fa00000000, 0xba4e96bd00000000, 0xb755a27400000000, | |
| 8543 | + 0x4ca3b13300000000, 0xec65bb3d00000000, 0x1793a87a00000000, | |
| 8544 | + 0x1a889cb300000000, 0xe17e8ff400000000, 0x5a0589af00000000, | |
| 8545 | + 0xa1f39ae800000000, 0xace8ae2100000000, 0x571ebd6600000000, | |
| 8546 | + 0xf7d8b76800000000, 0x0c2ea42f00000000, 0x013590e600000000, | |
| 8547 | + 0xfac383a100000000, 0x5a30dfdf00000000, 0xa1c6cc9800000000, | |
| 8548 | + 0xacddf85100000000, 0x572beb1600000000, 0xf7ede11800000000, | |
| 8549 | + 0x0c1bf25f00000000, 0x0100c69600000000, 0xfaf6d5d100000000, | |
| 8550 | + 0x418dd38a00000000, 0xba7bc0cd00000000, 0xb760f40400000000, | |
| 8551 | + 0x4c96e74300000000, 0xec50ed4d00000000, 0x17a6fe0a00000000, | |
| 8552 | + 0x1abdcac300000000, 0xe14bd98400000000, 0x6c4ac67500000000, | |
| 8553 | + 0x97bcd53200000000, 0x9aa7e1fb00000000, 0x6151f2bc00000000, | |
| 8554 | + 0xc197f8b200000000, 0x3a61ebf500000000, 0x377adf3c00000000, | |
| 8555 | + 0xcc8ccc7b00000000, 0x77f7ca2000000000, 0x8c01d96700000000, | |
| 8556 | + 0x811aedae00000000, 0x7aecfee900000000, 0xda2af4e700000000, | |
| 8557 | + 0x21dce7a000000000, 0x2cc7d36900000000, 0xd731c02e00000000, | |
| 8558 | + 0x6c206a9500000000, 0x97d679d200000000, 0x9acd4d1b00000000, | |
| 8559 | + 0x613b5e5c00000000, 0xc1fd545200000000, 0x3a0b471500000000, | |
| 8560 | + 0x371073dc00000000, 0xcce6609b00000000, 0x779d66c000000000, | |
| 8561 | + 0x8c6b758700000000, 0x8170414e00000000, 0x7a86520900000000, | |
| 8562 | + 0xda40580700000000, 0x21b64b4000000000, 0x2cad7f8900000000, | |
| 8563 | + 0xd75b6cce00000000, 0x5a5a733f00000000, 0xa1ac607800000000, | |
| 8564 | + 0xacb754b100000000, 0x574147f600000000, 0xf7874df800000000, | |
| 8565 | + 0x0c715ebf00000000, 0x016a6a7600000000, 0xfa9c793100000000, | |
| 8566 | + 0x41e77f6a00000000, 0xba116c2d00000000, 0xb70a58e400000000, | |
| 8567 | + 0x4cfc4ba300000000, 0xec3a41ad00000000, 0x17cc52ea00000000, | |
| 8568 | + 0x1ad7662300000000, 0xe121756400000000, 0x41d2291a00000000, | |
| 8569 | + 0xba243a5d00000000, 0xb73f0e9400000000, 0x4cc91dd300000000, | |
| 8570 | + 0xec0f17dd00000000, 0x17f9049a00000000, 0x1ae2305300000000, | |
| 8571 | + 0xe114231400000000, 0x5a6f254f00000000, 0xa199360800000000, | |
| 8572 | + 0xac8202c100000000, 0x5774118600000000, 0xf7b21b8800000000, | |
| 8573 | + 0x0c4408cf00000000, 0x015f3c0600000000, 0xfaa92f4100000000, | |
| 8574 | + 0x77a830b000000000, 0x8c5e23f700000000, 0x8145173e00000000, | |
| 8575 | + 0x7ab3047900000000, 0xda750e7700000000, 0x21831d3000000000, | |
| 8576 | + 0x2c9829f900000000, 0xd76e3abe00000000, 0x6c153ce500000000, | |
| 8577 | + 0x97e32fa200000000, 0x9af81b6b00000000, 0x610e082c00000000, | |
| 8578 | + 0xc1c8022200000000, 0x3a3e116500000000, 0x372525ac00000000, | |
| 8579 | + 0xccd336eb00000000}, | |
| 8580 | + {0x0000000000000000, 0x6238282a00000000, 0xc470505400000000, | |
| 8581 | + 0xa648787e00000000, 0x88e1a0a800000000, 0xead9888200000000, | |
| 8582 | + 0x4c91f0fc00000000, 0x2ea9d8d600000000, 0x51c5308a00000000, | |
| 8583 | + 0x33fd18a000000000, 0x95b560de00000000, 0xf78d48f400000000, | |
| 8584 | + 0xd924902200000000, 0xbb1cb80800000000, 0x1d54c07600000000, | |
| 8585 | + 0x7f6ce85c00000000, 0xe38c10cf00000000, 0x81b438e500000000, | |
| 8586 | + 0x27fc409b00000000, 0x45c468b100000000, 0x6b6db06700000000, | |
| 8587 | + 0x0955984d00000000, 0xaf1de03300000000, 0xcd25c81900000000, | |
| 8588 | + 0xb249204500000000, 0xd071086f00000000, 0x7639701100000000, | |
| 8589 | + 0x1401583b00000000, 0x3aa880ed00000000, 0x5890a8c700000000, | |
| 8590 | + 0xfed8d0b900000000, 0x9ce0f89300000000, 0x871f504500000000, | |
| 8591 | + 0xe527786f00000000, 0x436f001100000000, 0x2157283b00000000, | |
| 8592 | + 0x0ffef0ed00000000, 0x6dc6d8c700000000, 0xcb8ea0b900000000, | |
| 8593 | + 0xa9b6889300000000, 0xd6da60cf00000000, 0xb4e248e500000000, | |
| 8594 | + 0x12aa309b00000000, 0x709218b100000000, 0x5e3bc06700000000, | |
| 8595 | + 0x3c03e84d00000000, 0x9a4b903300000000, 0xf873b81900000000, | |
| 8596 | + 0x6493408a00000000, 0x06ab68a000000000, 0xa0e310de00000000, | |
| 8597 | + 0xc2db38f400000000, 0xec72e02200000000, 0x8e4ac80800000000, | |
| 8598 | + 0x2802b07600000000, 0x4a3a985c00000000, 0x3556700000000000, | |
| 8599 | + 0x576e582a00000000, 0xf126205400000000, 0x931e087e00000000, | |
| 8600 | + 0xbdb7d0a800000000, 0xdf8ff88200000000, 0x79c780fc00000000, | |
| 8601 | + 0x1bffa8d600000000, 0x0e3fa08a00000000, 0x6c0788a000000000, | |
| 8602 | + 0xca4ff0de00000000, 0xa877d8f400000000, 0x86de002200000000, | |
| 8603 | + 0xe4e6280800000000, 0x42ae507600000000, 0x2096785c00000000, | |
| 8604 | + 0x5ffa900000000000, 0x3dc2b82a00000000, 0x9b8ac05400000000, | |
| 8605 | + 0xf9b2e87e00000000, 0xd71b30a800000000, 0xb523188200000000, | |
| 8606 | + 0x136b60fc00000000, 0x715348d600000000, 0xedb3b04500000000, | |
| 8607 | + 0x8f8b986f00000000, 0x29c3e01100000000, 0x4bfbc83b00000000, | |
| 8608 | + 0x655210ed00000000, 0x076a38c700000000, 0xa12240b900000000, | |
| 8609 | + 0xc31a689300000000, 0xbc7680cf00000000, 0xde4ea8e500000000, | |
| 8610 | + 0x7806d09b00000000, 0x1a3ef8b100000000, 0x3497206700000000, | |
| 8611 | + 0x56af084d00000000, 0xf0e7703300000000, 0x92df581900000000, | |
| 8612 | + 0x8920f0cf00000000, 0xeb18d8e500000000, 0x4d50a09b00000000, | |
| 8613 | + 0x2f6888b100000000, 0x01c1506700000000, 0x63f9784d00000000, | |
| 8614 | + 0xc5b1003300000000, 0xa789281900000000, 0xd8e5c04500000000, | |
| 8615 | + 0xbadde86f00000000, 0x1c95901100000000, 0x7eadb83b00000000, | |
| 8616 | + 0x500460ed00000000, 0x323c48c700000000, 0x947430b900000000, | |
| 8617 | + 0xf64c189300000000, 0x6aace00000000000, 0x0894c82a00000000, | |
| 8618 | + 0xaedcb05400000000, 0xcce4987e00000000, 0xe24d40a800000000, | |
| 8619 | + 0x8075688200000000, 0x263d10fc00000000, 0x440538d600000000, | |
| 8620 | + 0x3b69d08a00000000, 0x5951f8a000000000, 0xff1980de00000000, | |
| 8621 | + 0x9d21a8f400000000, 0xb388702200000000, 0xd1b0580800000000, | |
| 8622 | + 0x77f8207600000000, 0x15c0085c00000000, 0x5d7831ce00000000, | |
| 8623 | + 0x3f4019e400000000, 0x9908619a00000000, 0xfb3049b000000000, | |
| 8624 | + 0xd599916600000000, 0xb7a1b94c00000000, 0x11e9c13200000000, | |
| 8625 | + 0x73d1e91800000000, 0x0cbd014400000000, 0x6e85296e00000000, | |
| 8626 | + 0xc8cd511000000000, 0xaaf5793a00000000, 0x845ca1ec00000000, | |
| 8627 | + 0xe66489c600000000, 0x402cf1b800000000, 0x2214d99200000000, | |
| 8628 | + 0xbef4210100000000, 0xdccc092b00000000, 0x7a84715500000000, | |
| 8629 | + 0x18bc597f00000000, 0x361581a900000000, 0x542da98300000000, | |
| 8630 | + 0xf265d1fd00000000, 0x905df9d700000000, 0xef31118b00000000, | |
| 8631 | + 0x8d0939a100000000, 0x2b4141df00000000, 0x497969f500000000, | |
| 8632 | + 0x67d0b12300000000, 0x05e8990900000000, 0xa3a0e17700000000, | |
| 8633 | + 0xc198c95d00000000, 0xda67618b00000000, 0xb85f49a100000000, | |
| 8634 | + 0x1e1731df00000000, 0x7c2f19f500000000, 0x5286c12300000000, | |
| 8635 | + 0x30bee90900000000, 0x96f6917700000000, 0xf4ceb95d00000000, | |
| 8636 | + 0x8ba2510100000000, 0xe99a792b00000000, 0x4fd2015500000000, | |
| 8637 | + 0x2dea297f00000000, 0x0343f1a900000000, 0x617bd98300000000, | |
| 8638 | + 0xc733a1fd00000000, 0xa50b89d700000000, 0x39eb714400000000, | |
| 8639 | + 0x5bd3596e00000000, 0xfd9b211000000000, 0x9fa3093a00000000, | |
| 8640 | + 0xb10ad1ec00000000, 0xd332f9c600000000, 0x757a81b800000000, | |
| 8641 | + 0x1742a99200000000, 0x682e41ce00000000, 0x0a1669e400000000, | |
| 8642 | + 0xac5e119a00000000, 0xce6639b000000000, 0xe0cfe16600000000, | |
| 8643 | + 0x82f7c94c00000000, 0x24bfb13200000000, 0x4687991800000000, | |
| 8644 | + 0x5347914400000000, 0x317fb96e00000000, 0x9737c11000000000, | |
| 8645 | + 0xf50fe93a00000000, 0xdba631ec00000000, 0xb99e19c600000000, | |
| 8646 | + 0x1fd661b800000000, 0x7dee499200000000, 0x0282a1ce00000000, | |
| 8647 | + 0x60ba89e400000000, 0xc6f2f19a00000000, 0xa4cad9b000000000, | |
| 8648 | + 0x8a63016600000000, 0xe85b294c00000000, 0x4e13513200000000, | |
| 8649 | + 0x2c2b791800000000, 0xb0cb818b00000000, 0xd2f3a9a100000000, | |
| 8650 | + 0x74bbd1df00000000, 0x1683f9f500000000, 0x382a212300000000, | |
| 8651 | + 0x5a12090900000000, 0xfc5a717700000000, 0x9e62595d00000000, | |
| 8652 | + 0xe10eb10100000000, 0x8336992b00000000, 0x257ee15500000000, | |
| 8653 | + 0x4746c97f00000000, 0x69ef11a900000000, 0x0bd7398300000000, | |
| 8654 | + 0xad9f41fd00000000, 0xcfa769d700000000, 0xd458c10100000000, | |
| 8655 | + 0xb660e92b00000000, 0x1028915500000000, 0x7210b97f00000000, | |
| 8656 | + 0x5cb961a900000000, 0x3e81498300000000, 0x98c931fd00000000, | |
| 8657 | + 0xfaf119d700000000, 0x859df18b00000000, 0xe7a5d9a100000000, | |
| 8658 | + 0x41eda1df00000000, 0x23d589f500000000, 0x0d7c512300000000, | |
| 8659 | + 0x6f44790900000000, 0xc90c017700000000, 0xab34295d00000000, | |
| 8660 | + 0x37d4d1ce00000000, 0x55ecf9e400000000, 0xf3a4819a00000000, | |
| 8661 | + 0x919ca9b000000000, 0xbf35716600000000, 0xdd0d594c00000000, | |
| 8662 | + 0x7b45213200000000, 0x197d091800000000, 0x6611e14400000000, | |
| 8663 | + 0x0429c96e00000000, 0xa261b11000000000, 0xc059993a00000000, | |
| 8664 | + 0xeef041ec00000000, 0x8cc869c600000000, 0x2a8011b800000000, | |
| 8665 | + 0x48b8399200000000}, | |
| 8666 | + {0x0000000000000000, 0x4c2896a300000000, 0xd9565d9c00000000, | |
| 8667 | + 0x957ecb3f00000000, 0xf3abcbe300000000, 0xbf835d4000000000, | |
| 8668 | + 0x2afd967f00000000, 0x66d500dc00000000, 0xa751e61c00000000, | |
| 8669 | + 0xeb7970bf00000000, 0x7e07bb8000000000, 0x322f2d2300000000, | |
| 8670 | + 0x54fa2dff00000000, 0x18d2bb5c00000000, 0x8dac706300000000, | |
| 8671 | + 0xc184e6c000000000, 0x4ea3cc3900000000, 0x028b5a9a00000000, | |
| 8672 | + 0x97f591a500000000, 0xdbdd070600000000, 0xbd0807da00000000, | |
| 8673 | + 0xf120917900000000, 0x645e5a4600000000, 0x2876cce500000000, | |
| 8674 | + 0xe9f22a2500000000, 0xa5dabc8600000000, 0x30a477b900000000, | |
| 8675 | + 0x7c8ce11a00000000, 0x1a59e1c600000000, 0x5671776500000000, | |
| 8676 | + 0xc30fbc5a00000000, 0x8f272af900000000, 0x9c46997300000000, | |
| 8677 | + 0xd06e0fd000000000, 0x4510c4ef00000000, 0x0938524c00000000, | |
| 8678 | + 0x6fed529000000000, 0x23c5c43300000000, 0xb6bb0f0c00000000, | |
| 8679 | + 0xfa9399af00000000, 0x3b177f6f00000000, 0x773fe9cc00000000, | |
| 8680 | + 0xe24122f300000000, 0xae69b45000000000, 0xc8bcb48c00000000, | |
| 8681 | + 0x8494222f00000000, 0x11eae91000000000, 0x5dc27fb300000000, | |
| 8682 | + 0xd2e5554a00000000, 0x9ecdc3e900000000, 0x0bb308d600000000, | |
| 8683 | + 0x479b9e7500000000, 0x214e9ea900000000, 0x6d66080a00000000, | |
| 8684 | + 0xf818c33500000000, 0xb430559600000000, 0x75b4b35600000000, | |
| 8685 | + 0x399c25f500000000, 0xace2eeca00000000, 0xe0ca786900000000, | |
| 8686 | + 0x861f78b500000000, 0xca37ee1600000000, 0x5f49252900000000, | |
| 8687 | + 0x1361b38a00000000, 0x388d32e700000000, 0x74a5a44400000000, | |
| 8688 | + 0xe1db6f7b00000000, 0xadf3f9d800000000, 0xcb26f90400000000, | |
| 8689 | + 0x870e6fa700000000, 0x1270a49800000000, 0x5e58323b00000000, | |
| 8690 | + 0x9fdcd4fb00000000, 0xd3f4425800000000, 0x468a896700000000, | |
| 8691 | + 0x0aa21fc400000000, 0x6c771f1800000000, 0x205f89bb00000000, | |
| 8692 | + 0xb521428400000000, 0xf909d42700000000, 0x762efede00000000, | |
| 8693 | + 0x3a06687d00000000, 0xaf78a34200000000, 0xe35035e100000000, | |
| 8694 | + 0x8585353d00000000, 0xc9ada39e00000000, 0x5cd368a100000000, | |
| 8695 | + 0x10fbfe0200000000, 0xd17f18c200000000, 0x9d578e6100000000, | |
| 8696 | + 0x0829455e00000000, 0x4401d3fd00000000, 0x22d4d32100000000, | |
| 8697 | + 0x6efc458200000000, 0xfb828ebd00000000, 0xb7aa181e00000000, | |
| 8698 | + 0xa4cbab9400000000, 0xe8e33d3700000000, 0x7d9df60800000000, | |
| 8699 | + 0x31b560ab00000000, 0x5760607700000000, 0x1b48f6d400000000, | |
| 8700 | + 0x8e363deb00000000, 0xc21eab4800000000, 0x039a4d8800000000, | |
| 8701 | + 0x4fb2db2b00000000, 0xdacc101400000000, 0x96e486b700000000, | |
| 8702 | + 0xf031866b00000000, 0xbc1910c800000000, 0x2967dbf700000000, | |
| 8703 | + 0x654f4d5400000000, 0xea6867ad00000000, 0xa640f10e00000000, | |
| 8704 | + 0x333e3a3100000000, 0x7f16ac9200000000, 0x19c3ac4e00000000, | |
| 8705 | + 0x55eb3aed00000000, 0xc095f1d200000000, 0x8cbd677100000000, | |
| 8706 | + 0x4d3981b100000000, 0x0111171200000000, 0x946fdc2d00000000, | |
| 8707 | + 0xd8474a8e00000000, 0xbe924a5200000000, 0xf2badcf100000000, | |
| 8708 | + 0x67c417ce00000000, 0x2bec816d00000000, 0x311c141500000000, | |
| 8709 | + 0x7d3482b600000000, 0xe84a498900000000, 0xa462df2a00000000, | |
| 8710 | + 0xc2b7dff600000000, 0x8e9f495500000000, 0x1be1826a00000000, | |
| 8711 | + 0x57c914c900000000, 0x964df20900000000, 0xda6564aa00000000, | |
| 8712 | + 0x4f1baf9500000000, 0x0333393600000000, 0x65e639ea00000000, | |
| 8713 | + 0x29ceaf4900000000, 0xbcb0647600000000, 0xf098f2d500000000, | |
| 8714 | + 0x7fbfd82c00000000, 0x33974e8f00000000, 0xa6e985b000000000, | |
| 8715 | + 0xeac1131300000000, 0x8c1413cf00000000, 0xc03c856c00000000, | |
| 8716 | + 0x55424e5300000000, 0x196ad8f000000000, 0xd8ee3e3000000000, | |
| 8717 | + 0x94c6a89300000000, 0x01b863ac00000000, 0x4d90f50f00000000, | |
| 8718 | + 0x2b45f5d300000000, 0x676d637000000000, 0xf213a84f00000000, | |
| 8719 | + 0xbe3b3eec00000000, 0xad5a8d6600000000, 0xe1721bc500000000, | |
| 8720 | + 0x740cd0fa00000000, 0x3824465900000000, 0x5ef1468500000000, | |
| 8721 | + 0x12d9d02600000000, 0x87a71b1900000000, 0xcb8f8dba00000000, | |
| 8722 | + 0x0a0b6b7a00000000, 0x4623fdd900000000, 0xd35d36e600000000, | |
| 8723 | + 0x9f75a04500000000, 0xf9a0a09900000000, 0xb588363a00000000, | |
| 8724 | + 0x20f6fd0500000000, 0x6cde6ba600000000, 0xe3f9415f00000000, | |
| 8725 | + 0xafd1d7fc00000000, 0x3aaf1cc300000000, 0x76878a6000000000, | |
| 8726 | + 0x10528abc00000000, 0x5c7a1c1f00000000, 0xc904d72000000000, | |
| 8727 | + 0x852c418300000000, 0x44a8a74300000000, 0x088031e000000000, | |
| 8728 | + 0x9dfefadf00000000, 0xd1d66c7c00000000, 0xb7036ca000000000, | |
| 8729 | + 0xfb2bfa0300000000, 0x6e55313c00000000, 0x227da79f00000000, | |
| 8730 | + 0x099126f200000000, 0x45b9b05100000000, 0xd0c77b6e00000000, | |
| 8731 | + 0x9cefedcd00000000, 0xfa3aed1100000000, 0xb6127bb200000000, | |
| 8732 | + 0x236cb08d00000000, 0x6f44262e00000000, 0xaec0c0ee00000000, | |
| 8733 | + 0xe2e8564d00000000, 0x77969d7200000000, 0x3bbe0bd100000000, | |
| 8734 | + 0x5d6b0b0d00000000, 0x11439dae00000000, 0x843d569100000000, | |
| 8735 | + 0xc815c03200000000, 0x4732eacb00000000, 0x0b1a7c6800000000, | |
| 8736 | + 0x9e64b75700000000, 0xd24c21f400000000, 0xb499212800000000, | |
| 8737 | + 0xf8b1b78b00000000, 0x6dcf7cb400000000, 0x21e7ea1700000000, | |
| 8738 | + 0xe0630cd700000000, 0xac4b9a7400000000, 0x3935514b00000000, | |
| 8739 | + 0x751dc7e800000000, 0x13c8c73400000000, 0x5fe0519700000000, | |
| 8740 | + 0xca9e9aa800000000, 0x86b60c0b00000000, 0x95d7bf8100000000, | |
| 8741 | + 0xd9ff292200000000, 0x4c81e21d00000000, 0x00a974be00000000, | |
| 8742 | + 0x667c746200000000, 0x2a54e2c100000000, 0xbf2a29fe00000000, | |
| 8743 | + 0xf302bf5d00000000, 0x3286599d00000000, 0x7eaecf3e00000000, | |
| 8744 | + 0xebd0040100000000, 0xa7f892a200000000, 0xc12d927e00000000, | |
| 8745 | + 0x8d0504dd00000000, 0x187bcfe200000000, 0x5453594100000000, | |
| 8746 | + 0xdb7473b800000000, 0x975ce51b00000000, 0x02222e2400000000, | |
| 8747 | + 0x4e0ab88700000000, 0x28dfb85b00000000, 0x64f72ef800000000, | |
| 8748 | + 0xf189e5c700000000, 0xbda1736400000000, 0x7c2595a400000000, | |
| 8749 | + 0x300d030700000000, 0xa573c83800000000, 0xe95b5e9b00000000, | |
| 8750 | + 0x8f8e5e4700000000, 0xc3a6c8e400000000, 0x56d803db00000000, | |
| 8751 | + 0x1af0957800000000}, | |
| 8752 | + {0x0000000000000000, 0x939bc97f00000000, 0x263793ff00000000, | |
| 8753 | + 0xb5ac5a8000000000, 0x0d68572400000000, 0x9ef39e5b00000000, | |
| 8754 | + 0x2b5fc4db00000000, 0xb8c40da400000000, 0x1ad0ae4800000000, | |
| 8755 | + 0x894b673700000000, 0x3ce73db700000000, 0xaf7cf4c800000000, | |
| 8756 | + 0x17b8f96c00000000, 0x8423301300000000, 0x318f6a9300000000, | |
| 8757 | + 0xa214a3ec00000000, 0x34a05d9100000000, 0xa73b94ee00000000, | |
| 8758 | + 0x1297ce6e00000000, 0x810c071100000000, 0x39c80ab500000000, | |
| 8759 | + 0xaa53c3ca00000000, 0x1fff994a00000000, 0x8c64503500000000, | |
| 8760 | + 0x2e70f3d900000000, 0xbdeb3aa600000000, 0x0847602600000000, | |
| 8761 | + 0x9bdca95900000000, 0x2318a4fd00000000, 0xb0836d8200000000, | |
| 8762 | + 0x052f370200000000, 0x96b4fe7d00000000, 0x2946caf900000000, | |
| 8763 | + 0xbadd038600000000, 0x0f71590600000000, 0x9cea907900000000, | |
| 8764 | + 0x242e9ddd00000000, 0xb7b554a200000000, 0x02190e2200000000, | |
| 8765 | + 0x9182c75d00000000, 0x339664b100000000, 0xa00dadce00000000, | |
| 8766 | + 0x15a1f74e00000000, 0x863a3e3100000000, 0x3efe339500000000, | |
| 8767 | + 0xad65faea00000000, 0x18c9a06a00000000, 0x8b52691500000000, | |
| 8768 | + 0x1de6976800000000, 0x8e7d5e1700000000, 0x3bd1049700000000, | |
| 8769 | + 0xa84acde800000000, 0x108ec04c00000000, 0x8315093300000000, | |
| 8770 | + 0x36b953b300000000, 0xa5229acc00000000, 0x0736392000000000, | |
| 8771 | + 0x94adf05f00000000, 0x2101aadf00000000, 0xb29a63a000000000, | |
| 8772 | + 0x0a5e6e0400000000, 0x99c5a77b00000000, 0x2c69fdfb00000000, | |
| 8773 | + 0xbff2348400000000, 0x138ae52800000000, 0x80112c5700000000, | |
| 8774 | + 0x35bd76d700000000, 0xa626bfa800000000, 0x1ee2b20c00000000, | |
| 8775 | + 0x8d797b7300000000, 0x38d521f300000000, 0xab4ee88c00000000, | |
| 8776 | + 0x095a4b6000000000, 0x9ac1821f00000000, 0x2f6dd89f00000000, | |
| 8777 | + 0xbcf611e000000000, 0x04321c4400000000, 0x97a9d53b00000000, | |
| 8778 | + 0x22058fbb00000000, 0xb19e46c400000000, 0x272ab8b900000000, | |
| 8779 | + 0xb4b171c600000000, 0x011d2b4600000000, 0x9286e23900000000, | |
| 8780 | + 0x2a42ef9d00000000, 0xb9d926e200000000, 0x0c757c6200000000, | |
| 8781 | + 0x9feeb51d00000000, 0x3dfa16f100000000, 0xae61df8e00000000, | |
| 8782 | + 0x1bcd850e00000000, 0x88564c7100000000, 0x309241d500000000, | |
| 8783 | + 0xa30988aa00000000, 0x16a5d22a00000000, 0x853e1b5500000000, | |
| 8784 | + 0x3acc2fd100000000, 0xa957e6ae00000000, 0x1cfbbc2e00000000, | |
| 8785 | + 0x8f60755100000000, 0x37a478f500000000, 0xa43fb18a00000000, | |
| 8786 | + 0x1193eb0a00000000, 0x8208227500000000, 0x201c819900000000, | |
| 8787 | + 0xb38748e600000000, 0x062b126600000000, 0x95b0db1900000000, | |
| 8788 | + 0x2d74d6bd00000000, 0xbeef1fc200000000, 0x0b43454200000000, | |
| 8789 | + 0x98d88c3d00000000, 0x0e6c724000000000, 0x9df7bb3f00000000, | |
| 8790 | + 0x285be1bf00000000, 0xbbc028c000000000, 0x0304256400000000, | |
| 8791 | + 0x909fec1b00000000, 0x2533b69b00000000, 0xb6a87fe400000000, | |
| 8792 | + 0x14bcdc0800000000, 0x8727157700000000, 0x328b4ff700000000, | |
| 8793 | + 0xa110868800000000, 0x19d48b2c00000000, 0x8a4f425300000000, | |
| 8794 | + 0x3fe318d300000000, 0xac78d1ac00000000, 0x2614cb5100000000, | |
| 8795 | + 0xb58f022e00000000, 0x002358ae00000000, 0x93b891d100000000, | |
| 8796 | + 0x2b7c9c7500000000, 0xb8e7550a00000000, 0x0d4b0f8a00000000, | |
| 8797 | + 0x9ed0c6f500000000, 0x3cc4651900000000, 0xaf5fac6600000000, | |
| 8798 | + 0x1af3f6e600000000, 0x89683f9900000000, 0x31ac323d00000000, | |
| 8799 | + 0xa237fb4200000000, 0x179ba1c200000000, 0x840068bd00000000, | |
| 8800 | + 0x12b496c000000000, 0x812f5fbf00000000, 0x3483053f00000000, | |
| 8801 | + 0xa718cc4000000000, 0x1fdcc1e400000000, 0x8c47089b00000000, | |
| 8802 | + 0x39eb521b00000000, 0xaa709b6400000000, 0x0864388800000000, | |
| 8803 | + 0x9bfff1f700000000, 0x2e53ab7700000000, 0xbdc8620800000000, | |
| 8804 | + 0x050c6fac00000000, 0x9697a6d300000000, 0x233bfc5300000000, | |
| 8805 | + 0xb0a0352c00000000, 0x0f5201a800000000, 0x9cc9c8d700000000, | |
| 8806 | + 0x2965925700000000, 0xbafe5b2800000000, 0x023a568c00000000, | |
| 8807 | + 0x91a19ff300000000, 0x240dc57300000000, 0xb7960c0c00000000, | |
| 8808 | + 0x1582afe000000000, 0x8619669f00000000, 0x33b53c1f00000000, | |
| 8809 | + 0xa02ef56000000000, 0x18eaf8c400000000, 0x8b7131bb00000000, | |
| 8810 | + 0x3edd6b3b00000000, 0xad46a24400000000, 0x3bf25c3900000000, | |
| 8811 | + 0xa869954600000000, 0x1dc5cfc600000000, 0x8e5e06b900000000, | |
| 8812 | + 0x369a0b1d00000000, 0xa501c26200000000, 0x10ad98e200000000, | |
| 8813 | + 0x8336519d00000000, 0x2122f27100000000, 0xb2b93b0e00000000, | |
| 8814 | + 0x0715618e00000000, 0x948ea8f100000000, 0x2c4aa55500000000, | |
| 8815 | + 0xbfd16c2a00000000, 0x0a7d36aa00000000, 0x99e6ffd500000000, | |
| 8816 | + 0x359e2e7900000000, 0xa605e70600000000, 0x13a9bd8600000000, | |
| 8817 | + 0x803274f900000000, 0x38f6795d00000000, 0xab6db02200000000, | |
| 8818 | + 0x1ec1eaa200000000, 0x8d5a23dd00000000, 0x2f4e803100000000, | |
| 8819 | + 0xbcd5494e00000000, 0x097913ce00000000, 0x9ae2dab100000000, | |
| 8820 | + 0x2226d71500000000, 0xb1bd1e6a00000000, 0x041144ea00000000, | |
| 8821 | + 0x978a8d9500000000, 0x013e73e800000000, 0x92a5ba9700000000, | |
| 8822 | + 0x2709e01700000000, 0xb492296800000000, 0x0c5624cc00000000, | |
| 8823 | + 0x9fcdedb300000000, 0x2a61b73300000000, 0xb9fa7e4c00000000, | |
| 8824 | + 0x1beedda000000000, 0x887514df00000000, 0x3dd94e5f00000000, | |
| 8825 | + 0xae42872000000000, 0x16868a8400000000, 0x851d43fb00000000, | |
| 8826 | + 0x30b1197b00000000, 0xa32ad00400000000, 0x1cd8e48000000000, | |
| 8827 | + 0x8f432dff00000000, 0x3aef777f00000000, 0xa974be0000000000, | |
| 8828 | + 0x11b0b3a400000000, 0x822b7adb00000000, 0x3787205b00000000, | |
| 8829 | + 0xa41ce92400000000, 0x06084ac800000000, 0x959383b700000000, | |
| 8830 | + 0x203fd93700000000, 0xb3a4104800000000, 0x0b601dec00000000, | |
| 8831 | + 0x98fbd49300000000, 0x2d578e1300000000, 0xbecc476c00000000, | |
| 8832 | + 0x2878b91100000000, 0xbbe3706e00000000, 0x0e4f2aee00000000, | |
| 8833 | + 0x9dd4e39100000000, 0x2510ee3500000000, 0xb68b274a00000000, | |
| 8834 | + 0x03277dca00000000, 0x90bcb4b500000000, 0x32a8175900000000, | |
| 8835 | + 0xa133de2600000000, 0x149f84a600000000, 0x87044dd900000000, | |
| 8836 | + 0x3fc0407d00000000, 0xac5b890200000000, 0x19f7d38200000000, | |
| 8837 | + 0x8a6c1afd00000000}, | |
| 8838 | + {0x0000000000000000, 0x650b796900000000, 0xca16f2d200000000, | |
| 8839 | + 0xaf1d8bbb00000000, 0xd52b957e00000000, 0xb020ec1700000000, | |
| 8840 | + 0x1f3d67ac00000000, 0x7a361ec500000000, 0xaa572afd00000000, | |
| 8841 | + 0xcf5c539400000000, 0x6041d82f00000000, 0x054aa14600000000, | |
| 8842 | + 0x7f7cbf8300000000, 0x1a77c6ea00000000, 0xb56a4d5100000000, | |
| 8843 | + 0xd061343800000000, 0x15a9252100000000, 0x70a25c4800000000, | |
| 8844 | + 0xdfbfd7f300000000, 0xbab4ae9a00000000, 0xc082b05f00000000, | |
| 8845 | + 0xa589c93600000000, 0x0a94428d00000000, 0x6f9f3be400000000, | |
| 8846 | + 0xbffe0fdc00000000, 0xdaf576b500000000, 0x75e8fd0e00000000, | |
| 8847 | + 0x10e3846700000000, 0x6ad59aa200000000, 0x0fdee3cb00000000, | |
| 8848 | + 0xa0c3687000000000, 0xc5c8111900000000, 0x2a524b4200000000, | |
| 8849 | + 0x4f59322b00000000, 0xe044b99000000000, 0x854fc0f900000000, | |
| 8850 | + 0xff79de3c00000000, 0x9a72a75500000000, 0x356f2cee00000000, | |
| 8851 | + 0x5064558700000000, 0x800561bf00000000, 0xe50e18d600000000, | |
| 8852 | + 0x4a13936d00000000, 0x2f18ea0400000000, 0x552ef4c100000000, | |
| 8853 | + 0x30258da800000000, 0x9f38061300000000, 0xfa337f7a00000000, | |
| 8854 | + 0x3ffb6e6300000000, 0x5af0170a00000000, 0xf5ed9cb100000000, | |
| 8855 | + 0x90e6e5d800000000, 0xead0fb1d00000000, 0x8fdb827400000000, | |
| 8856 | + 0x20c609cf00000000, 0x45cd70a600000000, 0x95ac449e00000000, | |
| 8857 | + 0xf0a73df700000000, 0x5fbab64c00000000, 0x3ab1cf2500000000, | |
| 8858 | + 0x4087d1e000000000, 0x258ca88900000000, 0x8a91233200000000, | |
| 8859 | + 0xef9a5a5b00000000, 0x54a4968400000000, 0x31afefed00000000, | |
| 8860 | + 0x9eb2645600000000, 0xfbb91d3f00000000, 0x818f03fa00000000, | |
| 8861 | + 0xe4847a9300000000, 0x4b99f12800000000, 0x2e92884100000000, | |
| 8862 | + 0xfef3bc7900000000, 0x9bf8c51000000000, 0x34e54eab00000000, | |
| 8863 | + 0x51ee37c200000000, 0x2bd8290700000000, 0x4ed3506e00000000, | |
| 8864 | + 0xe1cedbd500000000, 0x84c5a2bc00000000, 0x410db3a500000000, | |
| 8865 | + 0x2406cacc00000000, 0x8b1b417700000000, 0xee10381e00000000, | |
| 8866 | + 0x942626db00000000, 0xf12d5fb200000000, 0x5e30d40900000000, | |
| 8867 | + 0x3b3bad6000000000, 0xeb5a995800000000, 0x8e51e03100000000, | |
| 8868 | + 0x214c6b8a00000000, 0x444712e300000000, 0x3e710c2600000000, | |
| 8869 | + 0x5b7a754f00000000, 0xf467fef400000000, 0x916c879d00000000, | |
| 8870 | + 0x7ef6ddc600000000, 0x1bfda4af00000000, 0xb4e02f1400000000, | |
| 8871 | + 0xd1eb567d00000000, 0xabdd48b800000000, 0xced631d100000000, | |
| 8872 | + 0x61cbba6a00000000, 0x04c0c30300000000, 0xd4a1f73b00000000, | |
| 8873 | + 0xb1aa8e5200000000, 0x1eb705e900000000, 0x7bbc7c8000000000, | |
| 8874 | + 0x018a624500000000, 0x64811b2c00000000, 0xcb9c909700000000, | |
| 8875 | + 0xae97e9fe00000000, 0x6b5ff8e700000000, 0x0e54818e00000000, | |
| 8876 | + 0xa1490a3500000000, 0xc442735c00000000, 0xbe746d9900000000, | |
| 8877 | + 0xdb7f14f000000000, 0x74629f4b00000000, 0x1169e62200000000, | |
| 8878 | + 0xc108d21a00000000, 0xa403ab7300000000, 0x0b1e20c800000000, | |
| 8879 | + 0x6e1559a100000000, 0x1423476400000000, 0x71283e0d00000000, | |
| 8880 | + 0xde35b5b600000000, 0xbb3eccdf00000000, 0xe94e5cd200000000, | |
| 8881 | + 0x8c4525bb00000000, 0x2358ae0000000000, 0x4653d76900000000, | |
| 8882 | + 0x3c65c9ac00000000, 0x596eb0c500000000, 0xf6733b7e00000000, | |
| 8883 | + 0x9378421700000000, 0x4319762f00000000, 0x26120f4600000000, | |
| 8884 | + 0x890f84fd00000000, 0xec04fd9400000000, 0x9632e35100000000, | |
| 8885 | + 0xf3399a3800000000, 0x5c24118300000000, 0x392f68ea00000000, | |
| 8886 | + 0xfce779f300000000, 0x99ec009a00000000, 0x36f18b2100000000, | |
| 8887 | + 0x53faf24800000000, 0x29ccec8d00000000, 0x4cc795e400000000, | |
| 8888 | + 0xe3da1e5f00000000, 0x86d1673600000000, 0x56b0530e00000000, | |
| 8889 | + 0x33bb2a6700000000, 0x9ca6a1dc00000000, 0xf9add8b500000000, | |
| 8890 | + 0x839bc67000000000, 0xe690bf1900000000, 0x498d34a200000000, | |
| 8891 | + 0x2c864dcb00000000, 0xc31c179000000000, 0xa6176ef900000000, | |
| 8892 | + 0x090ae54200000000, 0x6c019c2b00000000, 0x163782ee00000000, | |
| 8893 | + 0x733cfb8700000000, 0xdc21703c00000000, 0xb92a095500000000, | |
| 8894 | + 0x694b3d6d00000000, 0x0c40440400000000, 0xa35dcfbf00000000, | |
| 8895 | + 0xc656b6d600000000, 0xbc60a81300000000, 0xd96bd17a00000000, | |
| 8896 | + 0x76765ac100000000, 0x137d23a800000000, 0xd6b532b100000000, | |
| 8897 | + 0xb3be4bd800000000, 0x1ca3c06300000000, 0x79a8b90a00000000, | |
| 8898 | + 0x039ea7cf00000000, 0x6695dea600000000, 0xc988551d00000000, | |
| 8899 | + 0xac832c7400000000, 0x7ce2184c00000000, 0x19e9612500000000, | |
| 8900 | + 0xb6f4ea9e00000000, 0xd3ff93f700000000, 0xa9c98d3200000000, | |
| 8901 | + 0xccc2f45b00000000, 0x63df7fe000000000, 0x06d4068900000000, | |
| 8902 | + 0xbdeaca5600000000, 0xd8e1b33f00000000, 0x77fc388400000000, | |
| 8903 | + 0x12f741ed00000000, 0x68c15f2800000000, 0x0dca264100000000, | |
| 8904 | + 0xa2d7adfa00000000, 0xc7dcd49300000000, 0x17bde0ab00000000, | |
| 8905 | + 0x72b699c200000000, 0xddab127900000000, 0xb8a06b1000000000, | |
| 8906 | + 0xc29675d500000000, 0xa79d0cbc00000000, 0x0880870700000000, | |
| 8907 | + 0x6d8bfe6e00000000, 0xa843ef7700000000, 0xcd48961e00000000, | |
| 8908 | + 0x62551da500000000, 0x075e64cc00000000, 0x7d687a0900000000, | |
| 8909 | + 0x1863036000000000, 0xb77e88db00000000, 0xd275f1b200000000, | |
| 8910 | + 0x0214c58a00000000, 0x671fbce300000000, 0xc802375800000000, | |
| 8911 | + 0xad094e3100000000, 0xd73f50f400000000, 0xb234299d00000000, | |
| 8912 | + 0x1d29a22600000000, 0x7822db4f00000000, 0x97b8811400000000, | |
| 8913 | + 0xf2b3f87d00000000, 0x5dae73c600000000, 0x38a50aaf00000000, | |
| 8914 | + 0x4293146a00000000, 0x27986d0300000000, 0x8885e6b800000000, | |
| 8915 | + 0xed8e9fd100000000, 0x3defabe900000000, 0x58e4d28000000000, | |
| 8916 | + 0xf7f9593b00000000, 0x92f2205200000000, 0xe8c43e9700000000, | |
| 8917 | + 0x8dcf47fe00000000, 0x22d2cc4500000000, 0x47d9b52c00000000, | |
| 8918 | + 0x8211a43500000000, 0xe71add5c00000000, 0x480756e700000000, | |
| 8919 | + 0x2d0c2f8e00000000, 0x573a314b00000000, 0x3231482200000000, | |
| 8920 | + 0x9d2cc39900000000, 0xf827baf000000000, 0x28468ec800000000, | |
| 8921 | + 0x4d4df7a100000000, 0xe2507c1a00000000, 0x875b057300000000, | |
| 8922 | + 0xfd6d1bb600000000, 0x986662df00000000, 0x377be96400000000, | |
| 8923 | + 0x5270900d00000000}, | |
| 8924 | + {0x0000000000000000, 0xdcecb13d00000000, 0xb8d9637b00000000, | |
| 8925 | + 0x6435d24600000000, 0x70b3c7f600000000, 0xac5f76cb00000000, | |
| 8926 | + 0xc86aa48d00000000, 0x148615b000000000, 0xa160fe3600000000, | |
| 8927 | + 0x7d8c4f0b00000000, 0x19b99d4d00000000, 0xc5552c7000000000, | |
| 8928 | + 0xd1d339c000000000, 0x0d3f88fd00000000, 0x690a5abb00000000, | |
| 8929 | + 0xb5e6eb8600000000, 0x42c1fc6d00000000, 0x9e2d4d5000000000, | |
| 8930 | + 0xfa189f1600000000, 0x26f42e2b00000000, 0x32723b9b00000000, | |
| 8931 | + 0xee9e8aa600000000, 0x8aab58e000000000, 0x5647e9dd00000000, | |
| 8932 | + 0xe3a1025b00000000, 0x3f4db36600000000, 0x5b78612000000000, | |
| 8933 | + 0x8794d01d00000000, 0x9312c5ad00000000, 0x4ffe749000000000, | |
| 8934 | + 0x2bcba6d600000000, 0xf72717eb00000000, 0x8482f9db00000000, | |
| 8935 | + 0x586e48e600000000, 0x3c5b9aa000000000, 0xe0b72b9d00000000, | |
| 8936 | + 0xf4313e2d00000000, 0x28dd8f1000000000, 0x4ce85d5600000000, | |
| 8937 | + 0x9004ec6b00000000, 0x25e207ed00000000, 0xf90eb6d000000000, | |
| 8938 | + 0x9d3b649600000000, 0x41d7d5ab00000000, 0x5551c01b00000000, | |
| 8939 | + 0x89bd712600000000, 0xed88a36000000000, 0x3164125d00000000, | |
| 8940 | + 0xc64305b600000000, 0x1aafb48b00000000, 0x7e9a66cd00000000, | |
| 8941 | + 0xa276d7f000000000, 0xb6f0c24000000000, 0x6a1c737d00000000, | |
| 8942 | + 0x0e29a13b00000000, 0xd2c5100600000000, 0x6723fb8000000000, | |
| 8943 | + 0xbbcf4abd00000000, 0xdffa98fb00000000, 0x031629c600000000, | |
| 8944 | + 0x17903c7600000000, 0xcb7c8d4b00000000, 0xaf495f0d00000000, | |
| 8945 | + 0x73a5ee3000000000, 0x4903826c00000000, 0x95ef335100000000, | |
| 8946 | + 0xf1dae11700000000, 0x2d36502a00000000, 0x39b0459a00000000, | |
| 8947 | + 0xe55cf4a700000000, 0x816926e100000000, 0x5d8597dc00000000, | |
| 8948 | + 0xe8637c5a00000000, 0x348fcd6700000000, 0x50ba1f2100000000, | |
| 8949 | + 0x8c56ae1c00000000, 0x98d0bbac00000000, 0x443c0a9100000000, | |
| 8950 | + 0x2009d8d700000000, 0xfce569ea00000000, 0x0bc27e0100000000, | |
| 8951 | + 0xd72ecf3c00000000, 0xb31b1d7a00000000, 0x6ff7ac4700000000, | |
| 8952 | + 0x7b71b9f700000000, 0xa79d08ca00000000, 0xc3a8da8c00000000, | |
| 8953 | + 0x1f446bb100000000, 0xaaa2803700000000, 0x764e310a00000000, | |
| 8954 | + 0x127be34c00000000, 0xce97527100000000, 0xda1147c100000000, | |
| 8955 | + 0x06fdf6fc00000000, 0x62c824ba00000000, 0xbe24958700000000, | |
| 8956 | + 0xcd817bb700000000, 0x116dca8a00000000, 0x755818cc00000000, | |
| 8957 | + 0xa9b4a9f100000000, 0xbd32bc4100000000, 0x61de0d7c00000000, | |
| 8958 | + 0x05ebdf3a00000000, 0xd9076e0700000000, 0x6ce1858100000000, | |
| 8959 | + 0xb00d34bc00000000, 0xd438e6fa00000000, 0x08d457c700000000, | |
| 8960 | + 0x1c52427700000000, 0xc0bef34a00000000, 0xa48b210c00000000, | |
| 8961 | + 0x7867903100000000, 0x8f4087da00000000, 0x53ac36e700000000, | |
| 8962 | + 0x3799e4a100000000, 0xeb75559c00000000, 0xfff3402c00000000, | |
| 8963 | + 0x231ff11100000000, 0x472a235700000000, 0x9bc6926a00000000, | |
| 8964 | + 0x2e2079ec00000000, 0xf2ccc8d100000000, 0x96f91a9700000000, | |
| 8965 | + 0x4a15abaa00000000, 0x5e93be1a00000000, 0x827f0f2700000000, | |
| 8966 | + 0xe64add6100000000, 0x3aa66c5c00000000, 0x920604d900000000, | |
| 8967 | + 0x4eeab5e400000000, 0x2adf67a200000000, 0xf633d69f00000000, | |
| 8968 | + 0xe2b5c32f00000000, 0x3e59721200000000, 0x5a6ca05400000000, | |
| 8969 | + 0x8680116900000000, 0x3366faef00000000, 0xef8a4bd200000000, | |
| 8970 | + 0x8bbf999400000000, 0x575328a900000000, 0x43d53d1900000000, | |
| 8971 | + 0x9f398c2400000000, 0xfb0c5e6200000000, 0x27e0ef5f00000000, | |
| 8972 | + 0xd0c7f8b400000000, 0x0c2b498900000000, 0x681e9bcf00000000, | |
| 8973 | + 0xb4f22af200000000, 0xa0743f4200000000, 0x7c988e7f00000000, | |
| 8974 | + 0x18ad5c3900000000, 0xc441ed0400000000, 0x71a7068200000000, | |
| 8975 | + 0xad4bb7bf00000000, 0xc97e65f900000000, 0x1592d4c400000000, | |
| 8976 | + 0x0114c17400000000, 0xddf8704900000000, 0xb9cda20f00000000, | |
| 8977 | + 0x6521133200000000, 0x1684fd0200000000, 0xca684c3f00000000, | |
| 8978 | + 0xae5d9e7900000000, 0x72b12f4400000000, 0x66373af400000000, | |
| 8979 | + 0xbadb8bc900000000, 0xdeee598f00000000, 0x0202e8b200000000, | |
| 8980 | + 0xb7e4033400000000, 0x6b08b20900000000, 0x0f3d604f00000000, | |
| 8981 | + 0xd3d1d17200000000, 0xc757c4c200000000, 0x1bbb75ff00000000, | |
| 8982 | + 0x7f8ea7b900000000, 0xa362168400000000, 0x5445016f00000000, | |
| 8983 | + 0x88a9b05200000000, 0xec9c621400000000, 0x3070d32900000000, | |
| 8984 | + 0x24f6c69900000000, 0xf81a77a400000000, 0x9c2fa5e200000000, | |
| 8985 | + 0x40c314df00000000, 0xf525ff5900000000, 0x29c94e6400000000, | |
| 8986 | + 0x4dfc9c2200000000, 0x91102d1f00000000, 0x859638af00000000, | |
| 8987 | + 0x597a899200000000, 0x3d4f5bd400000000, 0xe1a3eae900000000, | |
| 8988 | + 0xdb0586b500000000, 0x07e9378800000000, 0x63dce5ce00000000, | |
| 8989 | + 0xbf3054f300000000, 0xabb6414300000000, 0x775af07e00000000, | |
| 8990 | + 0x136f223800000000, 0xcf83930500000000, 0x7a65788300000000, | |
| 8991 | + 0xa689c9be00000000, 0xc2bc1bf800000000, 0x1e50aac500000000, | |
| 8992 | + 0x0ad6bf7500000000, 0xd63a0e4800000000, 0xb20fdc0e00000000, | |
| 8993 | + 0x6ee36d3300000000, 0x99c47ad800000000, 0x4528cbe500000000, | |
| 8994 | + 0x211d19a300000000, 0xfdf1a89e00000000, 0xe977bd2e00000000, | |
| 8995 | + 0x359b0c1300000000, 0x51aede5500000000, 0x8d426f6800000000, | |
| 8996 | + 0x38a484ee00000000, 0xe44835d300000000, 0x807de79500000000, | |
| 8997 | + 0x5c9156a800000000, 0x4817431800000000, 0x94fbf22500000000, | |
| 8998 | + 0xf0ce206300000000, 0x2c22915e00000000, 0x5f877f6e00000000, | |
| 8999 | + 0x836bce5300000000, 0xe75e1c1500000000, 0x3bb2ad2800000000, | |
| 9000 | + 0x2f34b89800000000, 0xf3d809a500000000, 0x97eddbe300000000, | |
| 9001 | + 0x4b016ade00000000, 0xfee7815800000000, 0x220b306500000000, | |
| 9002 | + 0x463ee22300000000, 0x9ad2531e00000000, 0x8e5446ae00000000, | |
| 9003 | + 0x52b8f79300000000, 0x368d25d500000000, 0xea6194e800000000, | |
| 9004 | + 0x1d46830300000000, 0xc1aa323e00000000, 0xa59fe07800000000, | |
| 9005 | + 0x7973514500000000, 0x6df544f500000000, 0xb119f5c800000000, | |
| 9006 | + 0xd52c278e00000000, 0x09c096b300000000, 0xbc267d3500000000, | |
| 9007 | + 0x60cacc0800000000, 0x04ff1e4e00000000, 0xd813af7300000000, | |
| 9008 | + 0xcc95bac300000000, 0x10790bfe00000000, 0x744cd9b800000000, | |
| 9009 | + 0xa8a0688500000000}}; | |
| 9010 | + | |
| 9011 | +#else /* W == 4 */ | |
| 9012 | + | |
| 9013 | +local const z_crc_t FAR crc_braid_table[][256] = { | |
| 9014 | + {0x00000000, 0x81256527, 0xd93bcc0f, 0x581ea928, 0x69069e5f, | |
| 9015 | + 0xe823fb78, 0xb03d5250, 0x31183777, 0xd20d3cbe, 0x53285999, | |
| 9016 | + 0x0b36f0b1, 0x8a139596, 0xbb0ba2e1, 0x3a2ec7c6, 0x62306eee, | |
| 9017 | + 0xe3150bc9, 0x7f6b7f3d, 0xfe4e1a1a, 0xa650b332, 0x2775d615, | |
| 9018 | + 0x166de162, 0x97488445, 0xcf562d6d, 0x4e73484a, 0xad664383, | |
| 9019 | + 0x2c4326a4, 0x745d8f8c, 0xf578eaab, 0xc460dddc, 0x4545b8fb, | |
| 9020 | + 0x1d5b11d3, 0x9c7e74f4, 0xfed6fe7a, 0x7ff39b5d, 0x27ed3275, | |
| 9021 | + 0xa6c85752, 0x97d06025, 0x16f50502, 0x4eebac2a, 0xcfcec90d, | |
| 9022 | + 0x2cdbc2c4, 0xadfea7e3, 0xf5e00ecb, 0x74c56bec, 0x45dd5c9b, | |
| 9023 | + 0xc4f839bc, 0x9ce69094, 0x1dc3f5b3, 0x81bd8147, 0x0098e460, | |
| 9024 | + 0x58864d48, 0xd9a3286f, 0xe8bb1f18, 0x699e7a3f, 0x3180d317, | |
| 9025 | + 0xb0a5b630, 0x53b0bdf9, 0xd295d8de, 0x8a8b71f6, 0x0bae14d1, | |
| 9026 | + 0x3ab623a6, 0xbb934681, 0xe38defa9, 0x62a88a8e, 0x26dcfab5, | |
| 9027 | + 0xa7f99f92, 0xffe736ba, 0x7ec2539d, 0x4fda64ea, 0xceff01cd, | |
| 9028 | + 0x96e1a8e5, 0x17c4cdc2, 0xf4d1c60b, 0x75f4a32c, 0x2dea0a04, | |
| 9029 | + 0xaccf6f23, 0x9dd75854, 0x1cf23d73, 0x44ec945b, 0xc5c9f17c, | |
| 9030 | + 0x59b78588, 0xd892e0af, 0x808c4987, 0x01a92ca0, 0x30b11bd7, | |
| 9031 | + 0xb1947ef0, 0xe98ad7d8, 0x68afb2ff, 0x8bbab936, 0x0a9fdc11, | |
| 9032 | + 0x52817539, 0xd3a4101e, 0xe2bc2769, 0x6399424e, 0x3b87eb66, | |
| 9033 | + 0xbaa28e41, 0xd80a04cf, 0x592f61e8, 0x0131c8c0, 0x8014ade7, | |
| 9034 | + 0xb10c9a90, 0x3029ffb7, 0x6837569f, 0xe91233b8, 0x0a073871, | |
| 9035 | + 0x8b225d56, 0xd33cf47e, 0x52199159, 0x6301a62e, 0xe224c309, | |
| 9036 | + 0xba3a6a21, 0x3b1f0f06, 0xa7617bf2, 0x26441ed5, 0x7e5ab7fd, | |
| 9037 | + 0xff7fd2da, 0xce67e5ad, 0x4f42808a, 0x175c29a2, 0x96794c85, | |
| 9038 | + 0x756c474c, 0xf449226b, 0xac578b43, 0x2d72ee64, 0x1c6ad913, | |
| 9039 | + 0x9d4fbc34, 0xc551151c, 0x4474703b, 0x4db9f56a, 0xcc9c904d, | |
| 9040 | + 0x94823965, 0x15a75c42, 0x24bf6b35, 0xa59a0e12, 0xfd84a73a, | |
| 9041 | + 0x7ca1c21d, 0x9fb4c9d4, 0x1e91acf3, 0x468f05db, 0xc7aa60fc, | |
| 9042 | + 0xf6b2578b, 0x779732ac, 0x2f899b84, 0xaeacfea3, 0x32d28a57, | |
| 9043 | + 0xb3f7ef70, 0xebe94658, 0x6acc237f, 0x5bd41408, 0xdaf1712f, | |
| 9044 | + 0x82efd807, 0x03cabd20, 0xe0dfb6e9, 0x61fad3ce, 0x39e47ae6, | |
| 9045 | + 0xb8c11fc1, 0x89d928b6, 0x08fc4d91, 0x50e2e4b9, 0xd1c7819e, | |
| 9046 | + 0xb36f0b10, 0x324a6e37, 0x6a54c71f, 0xeb71a238, 0xda69954f, | |
| 9047 | + 0x5b4cf068, 0x03525940, 0x82773c67, 0x616237ae, 0xe0475289, | |
| 9048 | + 0xb859fba1, 0x397c9e86, 0x0864a9f1, 0x8941ccd6, 0xd15f65fe, | |
| 9049 | + 0x507a00d9, 0xcc04742d, 0x4d21110a, 0x153fb822, 0x941add05, | |
| 9050 | + 0xa502ea72, 0x24278f55, 0x7c39267d, 0xfd1c435a, 0x1e094893, | |
| 9051 | + 0x9f2c2db4, 0xc732849c, 0x4617e1bb, 0x770fd6cc, 0xf62ab3eb, | |
| 9052 | + 0xae341ac3, 0x2f117fe4, 0x6b650fdf, 0xea406af8, 0xb25ec3d0, | |
| 9053 | + 0x337ba6f7, 0x02639180, 0x8346f4a7, 0xdb585d8f, 0x5a7d38a8, | |
| 9054 | + 0xb9683361, 0x384d5646, 0x6053ff6e, 0xe1769a49, 0xd06ead3e, | |
| 9055 | + 0x514bc819, 0x09556131, 0x88700416, 0x140e70e2, 0x952b15c5, | |
| 9056 | + 0xcd35bced, 0x4c10d9ca, 0x7d08eebd, 0xfc2d8b9a, 0xa43322b2, | |
| 9057 | + 0x25164795, 0xc6034c5c, 0x4726297b, 0x1f388053, 0x9e1de574, | |
| 9058 | + 0xaf05d203, 0x2e20b724, 0x763e1e0c, 0xf71b7b2b, 0x95b3f1a5, | |
| 9059 | + 0x14969482, 0x4c883daa, 0xcdad588d, 0xfcb56ffa, 0x7d900add, | |
| 9060 | + 0x258ea3f5, 0xa4abc6d2, 0x47becd1b, 0xc69ba83c, 0x9e850114, | |
| 9061 | + 0x1fa06433, 0x2eb85344, 0xaf9d3663, 0xf7839f4b, 0x76a6fa6c, | |
| 9062 | + 0xead88e98, 0x6bfdebbf, 0x33e34297, 0xb2c627b0, 0x83de10c7, | |
| 9063 | + 0x02fb75e0, 0x5ae5dcc8, 0xdbc0b9ef, 0x38d5b226, 0xb9f0d701, | |
| 9064 | + 0xe1ee7e29, 0x60cb1b0e, 0x51d32c79, 0xd0f6495e, 0x88e8e076, | |
| 9065 | + 0x09cd8551}, | |
| 9066 | + {0x00000000, 0x9b73ead4, 0xed96d3e9, 0x76e5393d, 0x005ca193, | |
| 9067 | + 0x9b2f4b47, 0xedca727a, 0x76b998ae, 0x00b94326, 0x9bcaa9f2, | |
| 9068 | + 0xed2f90cf, 0x765c7a1b, 0x00e5e2b5, 0x9b960861, 0xed73315c, | |
| 9069 | + 0x7600db88, 0x0172864c, 0x9a016c98, 0xece455a5, 0x7797bf71, | |
| 9070 | + 0x012e27df, 0x9a5dcd0b, 0xecb8f436, 0x77cb1ee2, 0x01cbc56a, | |
| 9071 | + 0x9ab82fbe, 0xec5d1683, 0x772efc57, 0x019764f9, 0x9ae48e2d, | |
| 9072 | + 0xec01b710, 0x77725dc4, 0x02e50c98, 0x9996e64c, 0xef73df71, | |
| 9073 | + 0x740035a5, 0x02b9ad0b, 0x99ca47df, 0xef2f7ee2, 0x745c9436, | |
| 9074 | + 0x025c4fbe, 0x992fa56a, 0xefca9c57, 0x74b97683, 0x0200ee2d, | |
| 9075 | + 0x997304f9, 0xef963dc4, 0x74e5d710, 0x03978ad4, 0x98e46000, | |
| 9076 | + 0xee01593d, 0x7572b3e9, 0x03cb2b47, 0x98b8c193, 0xee5df8ae, | |
| 9077 | + 0x752e127a, 0x032ec9f2, 0x985d2326, 0xeeb81a1b, 0x75cbf0cf, | |
| 9078 | + 0x03726861, 0x980182b5, 0xeee4bb88, 0x7597515c, 0x05ca1930, | |
| 9079 | + 0x9eb9f3e4, 0xe85ccad9, 0x732f200d, 0x0596b8a3, 0x9ee55277, | |
| 9080 | + 0xe8006b4a, 0x7373819e, 0x05735a16, 0x9e00b0c2, 0xe8e589ff, | |
| 9081 | + 0x7396632b, 0x052ffb85, 0x9e5c1151, 0xe8b9286c, 0x73cac2b8, | |
| 9082 | + 0x04b89f7c, 0x9fcb75a8, 0xe92e4c95, 0x725da641, 0x04e43eef, | |
| 9083 | + 0x9f97d43b, 0xe972ed06, 0x720107d2, 0x0401dc5a, 0x9f72368e, | |
| 9084 | + 0xe9970fb3, 0x72e4e567, 0x045d7dc9, 0x9f2e971d, 0xe9cbae20, | |
| 9085 | + 0x72b844f4, 0x072f15a8, 0x9c5cff7c, 0xeab9c641, 0x71ca2c95, | |
| 9086 | + 0x0773b43b, 0x9c005eef, 0xeae567d2, 0x71968d06, 0x0796568e, | |
| 9087 | + 0x9ce5bc5a, 0xea008567, 0x71736fb3, 0x07caf71d, 0x9cb91dc9, | |
| 9088 | + 0xea5c24f4, 0x712fce20, 0x065d93e4, 0x9d2e7930, 0xebcb400d, | |
| 9089 | + 0x70b8aad9, 0x06013277, 0x9d72d8a3, 0xeb97e19e, 0x70e40b4a, | |
| 9090 | + 0x06e4d0c2, 0x9d973a16, 0xeb72032b, 0x7001e9ff, 0x06b87151, | |
| 9091 | + 0x9dcb9b85, 0xeb2ea2b8, 0x705d486c, 0x0b943260, 0x90e7d8b4, | |
| 9092 | + 0xe602e189, 0x7d710b5d, 0x0bc893f3, 0x90bb7927, 0xe65e401a, | |
| 9093 | + 0x7d2daace, 0x0b2d7146, 0x905e9b92, 0xe6bba2af, 0x7dc8487b, | |
| 9094 | + 0x0b71d0d5, 0x90023a01, 0xe6e7033c, 0x7d94e9e8, 0x0ae6b42c, | |
| 9095 | + 0x91955ef8, 0xe77067c5, 0x7c038d11, 0x0aba15bf, 0x91c9ff6b, | |
| 9096 | + 0xe72cc656, 0x7c5f2c82, 0x0a5ff70a, 0x912c1dde, 0xe7c924e3, | |
| 9097 | + 0x7cbace37, 0x0a035699, 0x9170bc4d, 0xe7958570, 0x7ce66fa4, | |
| 9098 | + 0x09713ef8, 0x9202d42c, 0xe4e7ed11, 0x7f9407c5, 0x092d9f6b, | |
| 9099 | + 0x925e75bf, 0xe4bb4c82, 0x7fc8a656, 0x09c87dde, 0x92bb970a, | |
| 9100 | + 0xe45eae37, 0x7f2d44e3, 0x0994dc4d, 0x92e73699, 0xe4020fa4, | |
| 9101 | + 0x7f71e570, 0x0803b8b4, 0x93705260, 0xe5956b5d, 0x7ee68189, | |
| 9102 | + 0x085f1927, 0x932cf3f3, 0xe5c9cace, 0x7eba201a, 0x08bafb92, | |
| 9103 | + 0x93c91146, 0xe52c287b, 0x7e5fc2af, 0x08e65a01, 0x9395b0d5, | |
| 9104 | + 0xe57089e8, 0x7e03633c, 0x0e5e2b50, 0x952dc184, 0xe3c8f8b9, | |
| 9105 | + 0x78bb126d, 0x0e028ac3, 0x95716017, 0xe394592a, 0x78e7b3fe, | |
| 9106 | + 0x0ee76876, 0x959482a2, 0xe371bb9f, 0x7802514b, 0x0ebbc9e5, | |
| 9107 | + 0x95c82331, 0xe32d1a0c, 0x785ef0d8, 0x0f2cad1c, 0x945f47c8, | |
| 9108 | + 0xe2ba7ef5, 0x79c99421, 0x0f700c8f, 0x9403e65b, 0xe2e6df66, | |
| 9109 | + 0x799535b2, 0x0f95ee3a, 0x94e604ee, 0xe2033dd3, 0x7970d707, | |
| 9110 | + 0x0fc94fa9, 0x94baa57d, 0xe25f9c40, 0x792c7694, 0x0cbb27c8, | |
| 9111 | + 0x97c8cd1c, 0xe12df421, 0x7a5e1ef5, 0x0ce7865b, 0x97946c8f, | |
| 9112 | + 0xe17155b2, 0x7a02bf66, 0x0c0264ee, 0x97718e3a, 0xe194b707, | |
| 9113 | + 0x7ae75dd3, 0x0c5ec57d, 0x972d2fa9, 0xe1c81694, 0x7abbfc40, | |
| 9114 | + 0x0dc9a184, 0x96ba4b50, 0xe05f726d, 0x7b2c98b9, 0x0d950017, | |
| 9115 | + 0x96e6eac3, 0xe003d3fe, 0x7b70392a, 0x0d70e2a2, 0x96030876, | |
| 9116 | + 0xe0e6314b, 0x7b95db9f, 0x0d2c4331, 0x965fa9e5, 0xe0ba90d8, | |
| 9117 | + 0x7bc97a0c}, | |
| 9118 | + {0x00000000, 0x172864c0, 0x2e50c980, 0x3978ad40, 0x5ca19300, | |
| 9119 | + 0x4b89f7c0, 0x72f15a80, 0x65d93e40, 0xb9432600, 0xae6b42c0, | |
| 9120 | + 0x9713ef80, 0x803b8b40, 0xe5e2b500, 0xf2cad1c0, 0xcbb27c80, | |
| 9121 | + 0xdc9a1840, 0xa9f74a41, 0xbedf2e81, 0x87a783c1, 0x908fe701, | |
| 9122 | + 0xf556d941, 0xe27ebd81, 0xdb0610c1, 0xcc2e7401, 0x10b46c41, | |
| 9123 | + 0x079c0881, 0x3ee4a5c1, 0x29ccc101, 0x4c15ff41, 0x5b3d9b81, | |
| 9124 | + 0x624536c1, 0x756d5201, 0x889f92c3, 0x9fb7f603, 0xa6cf5b43, | |
| 9125 | + 0xb1e73f83, 0xd43e01c3, 0xc3166503, 0xfa6ec843, 0xed46ac83, | |
| 9126 | + 0x31dcb4c3, 0x26f4d003, 0x1f8c7d43, 0x08a41983, 0x6d7d27c3, | |
| 9127 | + 0x7a554303, 0x432dee43, 0x54058a83, 0x2168d882, 0x3640bc42, | |
| 9128 | + 0x0f381102, 0x181075c2, 0x7dc94b82, 0x6ae12f42, 0x53998202, | |
| 9129 | + 0x44b1e6c2, 0x982bfe82, 0x8f039a42, 0xb67b3702, 0xa15353c2, | |
| 9130 | + 0xc48a6d82, 0xd3a20942, 0xeadaa402, 0xfdf2c0c2, 0xca4e23c7, | |
| 9131 | + 0xdd664707, 0xe41eea47, 0xf3368e87, 0x96efb0c7, 0x81c7d407, | |
| 9132 | + 0xb8bf7947, 0xaf971d87, 0x730d05c7, 0x64256107, 0x5d5dcc47, | |
| 9133 | + 0x4a75a887, 0x2fac96c7, 0x3884f207, 0x01fc5f47, 0x16d43b87, | |
| 9134 | + 0x63b96986, 0x74910d46, 0x4de9a006, 0x5ac1c4c6, 0x3f18fa86, | |
| 9135 | + 0x28309e46, 0x11483306, 0x066057c6, 0xdafa4f86, 0xcdd22b46, | |
| 9136 | + 0xf4aa8606, 0xe382e2c6, 0x865bdc86, 0x9173b846, 0xa80b1506, | |
| 9137 | + 0xbf2371c6, 0x42d1b104, 0x55f9d5c4, 0x6c817884, 0x7ba91c44, | |
| 9138 | + 0x1e702204, 0x095846c4, 0x3020eb84, 0x27088f44, 0xfb929704, | |
| 9139 | + 0xecbaf3c4, 0xd5c25e84, 0xc2ea3a44, 0xa7330404, 0xb01b60c4, | |
| 9140 | + 0x8963cd84, 0x9e4ba944, 0xeb26fb45, 0xfc0e9f85, 0xc57632c5, | |
| 9141 | + 0xd25e5605, 0xb7876845, 0xa0af0c85, 0x99d7a1c5, 0x8effc505, | |
| 9142 | + 0x5265dd45, 0x454db985, 0x7c3514c5, 0x6b1d7005, 0x0ec44e45, | |
| 9143 | + 0x19ec2a85, 0x209487c5, 0x37bce305, 0x4fed41cf, 0x58c5250f, | |
| 9144 | + 0x61bd884f, 0x7695ec8f, 0x134cd2cf, 0x0464b60f, 0x3d1c1b4f, | |
| 9145 | + 0x2a347f8f, 0xf6ae67cf, 0xe186030f, 0xd8feae4f, 0xcfd6ca8f, | |
| 9146 | + 0xaa0ff4cf, 0xbd27900f, 0x845f3d4f, 0x9377598f, 0xe61a0b8e, | |
| 9147 | + 0xf1326f4e, 0xc84ac20e, 0xdf62a6ce, 0xbabb988e, 0xad93fc4e, | |
| 9148 | + 0x94eb510e, 0x83c335ce, 0x5f592d8e, 0x4871494e, 0x7109e40e, | |
| 9149 | + 0x662180ce, 0x03f8be8e, 0x14d0da4e, 0x2da8770e, 0x3a8013ce, | |
| 9150 | + 0xc772d30c, 0xd05ab7cc, 0xe9221a8c, 0xfe0a7e4c, 0x9bd3400c, | |
| 9151 | + 0x8cfb24cc, 0xb583898c, 0xa2abed4c, 0x7e31f50c, 0x691991cc, | |
| 9152 | + 0x50613c8c, 0x4749584c, 0x2290660c, 0x35b802cc, 0x0cc0af8c, | |
| 9153 | + 0x1be8cb4c, 0x6e85994d, 0x79adfd8d, 0x40d550cd, 0x57fd340d, | |
| 9154 | + 0x32240a4d, 0x250c6e8d, 0x1c74c3cd, 0x0b5ca70d, 0xd7c6bf4d, | |
| 9155 | + 0xc0eedb8d, 0xf99676cd, 0xeebe120d, 0x8b672c4d, 0x9c4f488d, | |
| 9156 | + 0xa537e5cd, 0xb21f810d, 0x85a36208, 0x928b06c8, 0xabf3ab88, | |
| 9157 | + 0xbcdbcf48, 0xd902f108, 0xce2a95c8, 0xf7523888, 0xe07a5c48, | |
| 9158 | + 0x3ce04408, 0x2bc820c8, 0x12b08d88, 0x0598e948, 0x6041d708, | |
| 9159 | + 0x7769b3c8, 0x4e111e88, 0x59397a48, 0x2c542849, 0x3b7c4c89, | |
| 9160 | + 0x0204e1c9, 0x152c8509, 0x70f5bb49, 0x67dddf89, 0x5ea572c9, | |
| 9161 | + 0x498d1609, 0x95170e49, 0x823f6a89, 0xbb47c7c9, 0xac6fa309, | |
| 9162 | + 0xc9b69d49, 0xde9ef989, 0xe7e654c9, 0xf0ce3009, 0x0d3cf0cb, | |
| 9163 | + 0x1a14940b, 0x236c394b, 0x34445d8b, 0x519d63cb, 0x46b5070b, | |
| 9164 | + 0x7fcdaa4b, 0x68e5ce8b, 0xb47fd6cb, 0xa357b20b, 0x9a2f1f4b, | |
| 9165 | + 0x8d077b8b, 0xe8de45cb, 0xfff6210b, 0xc68e8c4b, 0xd1a6e88b, | |
| 9166 | + 0xa4cbba8a, 0xb3e3de4a, 0x8a9b730a, 0x9db317ca, 0xf86a298a, | |
| 9167 | + 0xef424d4a, 0xd63ae00a, 0xc11284ca, 0x1d889c8a, 0x0aa0f84a, | |
| 9168 | + 0x33d8550a, 0x24f031ca, 0x41290f8a, 0x56016b4a, 0x6f79c60a, | |
| 9169 | + 0x7851a2ca}, | |
| 9170 | + {0x00000000, 0x9fda839e, 0xe4c4017d, 0x7b1e82e3, 0x12f904bb, | |
| 9171 | + 0x8d238725, 0xf63d05c6, 0x69e78658, 0x25f20976, 0xba288ae8, | |
| 9172 | + 0xc136080b, 0x5eec8b95, 0x370b0dcd, 0xa8d18e53, 0xd3cf0cb0, | |
| 9173 | + 0x4c158f2e, 0x4be412ec, 0xd43e9172, 0xaf201391, 0x30fa900f, | |
| 9174 | + 0x591d1657, 0xc6c795c9, 0xbdd9172a, 0x220394b4, 0x6e161b9a, | |
| 9175 | + 0xf1cc9804, 0x8ad21ae7, 0x15089979, 0x7cef1f21, 0xe3359cbf, | |
| 9176 | + 0x982b1e5c, 0x07f19dc2, 0x97c825d8, 0x0812a646, 0x730c24a5, | |
| 9177 | + 0xecd6a73b, 0x85312163, 0x1aeba2fd, 0x61f5201e, 0xfe2fa380, | |
| 9178 | + 0xb23a2cae, 0x2de0af30, 0x56fe2dd3, 0xc924ae4d, 0xa0c32815, | |
| 9179 | + 0x3f19ab8b, 0x44072968, 0xdbddaaf6, 0xdc2c3734, 0x43f6b4aa, | |
| 9180 | + 0x38e83649, 0xa732b5d7, 0xced5338f, 0x510fb011, 0x2a1132f2, | |
| 9181 | + 0xb5cbb16c, 0xf9de3e42, 0x6604bddc, 0x1d1a3f3f, 0x82c0bca1, | |
| 9182 | + 0xeb273af9, 0x74fdb967, 0x0fe33b84, 0x9039b81a, 0xf4e14df1, | |
| 9183 | + 0x6b3bce6f, 0x10254c8c, 0x8fffcf12, 0xe618494a, 0x79c2cad4, | |
| 9184 | + 0x02dc4837, 0x9d06cba9, 0xd1134487, 0x4ec9c719, 0x35d745fa, | |
| 9185 | + 0xaa0dc664, 0xc3ea403c, 0x5c30c3a2, 0x272e4141, 0xb8f4c2df, | |
| 9186 | + 0xbf055f1d, 0x20dfdc83, 0x5bc15e60, 0xc41bddfe, 0xadfc5ba6, | |
| 9187 | + 0x3226d838, 0x49385adb, 0xd6e2d945, 0x9af7566b, 0x052dd5f5, | |
| 9188 | + 0x7e335716, 0xe1e9d488, 0x880e52d0, 0x17d4d14e, 0x6cca53ad, | |
| 9189 | + 0xf310d033, 0x63296829, 0xfcf3ebb7, 0x87ed6954, 0x1837eaca, | |
| 9190 | + 0x71d06c92, 0xee0aef0c, 0x95146def, 0x0aceee71, 0x46db615f, | |
| 9191 | + 0xd901e2c1, 0xa21f6022, 0x3dc5e3bc, 0x542265e4, 0xcbf8e67a, | |
| 9192 | + 0xb0e66499, 0x2f3ce707, 0x28cd7ac5, 0xb717f95b, 0xcc097bb8, | |
| 9193 | + 0x53d3f826, 0x3a347e7e, 0xa5eefde0, 0xdef07f03, 0x412afc9d, | |
| 9194 | + 0x0d3f73b3, 0x92e5f02d, 0xe9fb72ce, 0x7621f150, 0x1fc67708, | |
| 9195 | + 0x801cf496, 0xfb027675, 0x64d8f5eb, 0x32b39da3, 0xad691e3d, | |
| 9196 | + 0xd6779cde, 0x49ad1f40, 0x204a9918, 0xbf901a86, 0xc48e9865, | |
| 9197 | + 0x5b541bfb, 0x174194d5, 0x889b174b, 0xf38595a8, 0x6c5f1636, | |
| 9198 | + 0x05b8906e, 0x9a6213f0, 0xe17c9113, 0x7ea6128d, 0x79578f4f, | |
| 9199 | + 0xe68d0cd1, 0x9d938e32, 0x02490dac, 0x6bae8bf4, 0xf474086a, | |
| 9200 | + 0x8f6a8a89, 0x10b00917, 0x5ca58639, 0xc37f05a7, 0xb8618744, | |
| 9201 | + 0x27bb04da, 0x4e5c8282, 0xd186011c, 0xaa9883ff, 0x35420061, | |
| 9202 | + 0xa57bb87b, 0x3aa13be5, 0x41bfb906, 0xde653a98, 0xb782bcc0, | |
| 9203 | + 0x28583f5e, 0x5346bdbd, 0xcc9c3e23, 0x8089b10d, 0x1f533293, | |
| 9204 | + 0x644db070, 0xfb9733ee, 0x9270b5b6, 0x0daa3628, 0x76b4b4cb, | |
| 9205 | + 0xe96e3755, 0xee9faa97, 0x71452909, 0x0a5babea, 0x95812874, | |
| 9206 | + 0xfc66ae2c, 0x63bc2db2, 0x18a2af51, 0x87782ccf, 0xcb6da3e1, | |
| 9207 | + 0x54b7207f, 0x2fa9a29c, 0xb0732102, 0xd994a75a, 0x464e24c4, | |
| 9208 | + 0x3d50a627, 0xa28a25b9, 0xc652d052, 0x598853cc, 0x2296d12f, | |
| 9209 | + 0xbd4c52b1, 0xd4abd4e9, 0x4b715777, 0x306fd594, 0xafb5560a, | |
| 9210 | + 0xe3a0d924, 0x7c7a5aba, 0x0764d859, 0x98be5bc7, 0xf159dd9f, | |
| 9211 | + 0x6e835e01, 0x159ddce2, 0x8a475f7c, 0x8db6c2be, 0x126c4120, | |
| 9212 | + 0x6972c3c3, 0xf6a8405d, 0x9f4fc605, 0x0095459b, 0x7b8bc778, | |
| 9213 | + 0xe45144e6, 0xa844cbc8, 0x379e4856, 0x4c80cab5, 0xd35a492b, | |
| 9214 | + 0xbabdcf73, 0x25674ced, 0x5e79ce0e, 0xc1a34d90, 0x519af58a, | |
| 9215 | + 0xce407614, 0xb55ef4f7, 0x2a847769, 0x4363f131, 0xdcb972af, | |
| 9216 | + 0xa7a7f04c, 0x387d73d2, 0x7468fcfc, 0xebb27f62, 0x90acfd81, | |
| 9217 | + 0x0f767e1f, 0x6691f847, 0xf94b7bd9, 0x8255f93a, 0x1d8f7aa4, | |
| 9218 | + 0x1a7ee766, 0x85a464f8, 0xfebae61b, 0x61606585, 0x0887e3dd, | |
| 9219 | + 0x975d6043, 0xec43e2a0, 0x7399613e, 0x3f8cee10, 0xa0566d8e, | |
| 9220 | + 0xdb48ef6d, 0x44926cf3, 0x2d75eaab, 0xb2af6935, 0xc9b1ebd6, | |
| 9221 | + 0x566b6848}}; | |
| 9222 | + | |
| 9223 | +local const z_word_t FAR crc_braid_big_table[][256] = { | |
| 9224 | + {0x00000000, 0x9e83da9f, 0x7d01c4e4, 0xe3821e7b, 0xbb04f912, | |
| 9225 | + 0x2587238d, 0xc6053df6, 0x5886e769, 0x7609f225, 0xe88a28ba, | |
| 9226 | + 0x0b0836c1, 0x958bec5e, 0xcd0d0b37, 0x538ed1a8, 0xb00ccfd3, | |
| 9227 | + 0x2e8f154c, 0xec12e44b, 0x72913ed4, 0x911320af, 0x0f90fa30, | |
| 9228 | + 0x57161d59, 0xc995c7c6, 0x2a17d9bd, 0xb4940322, 0x9a1b166e, | |
| 9229 | + 0x0498ccf1, 0xe71ad28a, 0x79990815, 0x211fef7c, 0xbf9c35e3, | |
| 9230 | + 0x5c1e2b98, 0xc29df107, 0xd825c897, 0x46a61208, 0xa5240c73, | |
| 9231 | + 0x3ba7d6ec, 0x63213185, 0xfda2eb1a, 0x1e20f561, 0x80a32ffe, | |
| 9232 | + 0xae2c3ab2, 0x30afe02d, 0xd32dfe56, 0x4dae24c9, 0x1528c3a0, | |
| 9233 | + 0x8bab193f, 0x68290744, 0xf6aadddb, 0x34372cdc, 0xaab4f643, | |
| 9234 | + 0x4936e838, 0xd7b532a7, 0x8f33d5ce, 0x11b00f51, 0xf232112a, | |
| 9235 | + 0x6cb1cbb5, 0x423edef9, 0xdcbd0466, 0x3f3f1a1d, 0xa1bcc082, | |
| 9236 | + 0xf93a27eb, 0x67b9fd74, 0x843be30f, 0x1ab83990, 0xf14de1f4, | |
| 9237 | + 0x6fce3b6b, 0x8c4c2510, 0x12cfff8f, 0x4a4918e6, 0xd4cac279, | |
| 9238 | + 0x3748dc02, 0xa9cb069d, 0x874413d1, 0x19c7c94e, 0xfa45d735, | |
| 9239 | + 0x64c60daa, 0x3c40eac3, 0xa2c3305c, 0x41412e27, 0xdfc2f4b8, | |
| 9240 | + 0x1d5f05bf, 0x83dcdf20, 0x605ec15b, 0xfedd1bc4, 0xa65bfcad, | |
| 9241 | + 0x38d82632, 0xdb5a3849, 0x45d9e2d6, 0x6b56f79a, 0xf5d52d05, | |
| 9242 | + 0x1657337e, 0x88d4e9e1, 0xd0520e88, 0x4ed1d417, 0xad53ca6c, | |
| 9243 | + 0x33d010f3, 0x29682963, 0xb7ebf3fc, 0x5469ed87, 0xcaea3718, | |
| 9244 | + 0x926cd071, 0x0cef0aee, 0xef6d1495, 0x71eece0a, 0x5f61db46, | |
| 9245 | + 0xc1e201d9, 0x22601fa2, 0xbce3c53d, 0xe4652254, 0x7ae6f8cb, | |
| 9246 | + 0x9964e6b0, 0x07e73c2f, 0xc57acd28, 0x5bf917b7, 0xb87b09cc, | |
| 9247 | + 0x26f8d353, 0x7e7e343a, 0xe0fdeea5, 0x037ff0de, 0x9dfc2a41, | |
| 9248 | + 0xb3733f0d, 0x2df0e592, 0xce72fbe9, 0x50f12176, 0x0877c61f, | |
| 9249 | + 0x96f41c80, 0x757602fb, 0xebf5d864, 0xa39db332, 0x3d1e69ad, | |
| 9250 | + 0xde9c77d6, 0x401fad49, 0x18994a20, 0x861a90bf, 0x65988ec4, | |
| 9251 | + 0xfb1b545b, 0xd5944117, 0x4b179b88, 0xa89585f3, 0x36165f6c, | |
| 9252 | + 0x6e90b805, 0xf013629a, 0x13917ce1, 0x8d12a67e, 0x4f8f5779, | |
| 9253 | + 0xd10c8de6, 0x328e939d, 0xac0d4902, 0xf48bae6b, 0x6a0874f4, | |
| 9254 | + 0x898a6a8f, 0x1709b010, 0x3986a55c, 0xa7057fc3, 0x448761b8, | |
| 9255 | + 0xda04bb27, 0x82825c4e, 0x1c0186d1, 0xff8398aa, 0x61004235, | |
| 9256 | + 0x7bb87ba5, 0xe53ba13a, 0x06b9bf41, 0x983a65de, 0xc0bc82b7, | |
| 9257 | + 0x5e3f5828, 0xbdbd4653, 0x233e9ccc, 0x0db18980, 0x9332531f, | |
| 9258 | + 0x70b04d64, 0xee3397fb, 0xb6b57092, 0x2836aa0d, 0xcbb4b476, | |
| 9259 | + 0x55376ee9, 0x97aa9fee, 0x09294571, 0xeaab5b0a, 0x74288195, | |
| 9260 | + 0x2cae66fc, 0xb22dbc63, 0x51afa218, 0xcf2c7887, 0xe1a36dcb, | |
| 9261 | + 0x7f20b754, 0x9ca2a92f, 0x022173b0, 0x5aa794d9, 0xc4244e46, | |
| 9262 | + 0x27a6503d, 0xb9258aa2, 0x52d052c6, 0xcc538859, 0x2fd19622, | |
| 9263 | + 0xb1524cbd, 0xe9d4abd4, 0x7757714b, 0x94d56f30, 0x0a56b5af, | |
| 9264 | + 0x24d9a0e3, 0xba5a7a7c, 0x59d86407, 0xc75bbe98, 0x9fdd59f1, | |
| 9265 | + 0x015e836e, 0xe2dc9d15, 0x7c5f478a, 0xbec2b68d, 0x20416c12, | |
| 9266 | + 0xc3c37269, 0x5d40a8f6, 0x05c64f9f, 0x9b459500, 0x78c78b7b, | |
| 9267 | + 0xe64451e4, 0xc8cb44a8, 0x56489e37, 0xb5ca804c, 0x2b495ad3, | |
| 9268 | + 0x73cfbdba, 0xed4c6725, 0x0ece795e, 0x904da3c1, 0x8af59a51, | |
| 9269 | + 0x147640ce, 0xf7f45eb5, 0x6977842a, 0x31f16343, 0xaf72b9dc, | |
| 9270 | + 0x4cf0a7a7, 0xd2737d38, 0xfcfc6874, 0x627fb2eb, 0x81fdac90, | |
| 9271 | + 0x1f7e760f, 0x47f89166, 0xd97b4bf9, 0x3af95582, 0xa47a8f1d, | |
| 9272 | + 0x66e77e1a, 0xf864a485, 0x1be6bafe, 0x85656061, 0xdde38708, | |
| 9273 | + 0x43605d97, 0xa0e243ec, 0x3e619973, 0x10ee8c3f, 0x8e6d56a0, | |
| 9274 | + 0x6def48db, 0xf36c9244, 0xabea752d, 0x3569afb2, 0xd6ebb1c9, | |
| 9275 | + 0x48686b56}, | |
| 9276 | + {0x00000000, 0xc0642817, 0x80c9502e, 0x40ad7839, 0x0093a15c, | |
| 9277 | + 0xc0f7894b, 0x805af172, 0x403ed965, 0x002643b9, 0xc0426bae, | |
| 9278 | + 0x80ef1397, 0x408b3b80, 0x00b5e2e5, 0xc0d1caf2, 0x807cb2cb, | |
| 9279 | + 0x40189adc, 0x414af7a9, 0x812edfbe, 0xc183a787, 0x01e78f90, | |
| 9280 | + 0x41d956f5, 0x81bd7ee2, 0xc11006db, 0x01742ecc, 0x416cb410, | |
| 9281 | + 0x81089c07, 0xc1a5e43e, 0x01c1cc29, 0x41ff154c, 0x819b3d5b, | |
| 9282 | + 0xc1364562, 0x01526d75, 0xc3929f88, 0x03f6b79f, 0x435bcfa6, | |
| 9283 | + 0x833fe7b1, 0xc3013ed4, 0x036516c3, 0x43c86efa, 0x83ac46ed, | |
| 9284 | + 0xc3b4dc31, 0x03d0f426, 0x437d8c1f, 0x8319a408, 0xc3277d6d, | |
| 9285 | + 0x0343557a, 0x43ee2d43, 0x838a0554, 0x82d86821, 0x42bc4036, | |
| 9286 | + 0x0211380f, 0xc2751018, 0x824bc97d, 0x422fe16a, 0x02829953, | |
| 9287 | + 0xc2e6b144, 0x82fe2b98, 0x429a038f, 0x02377bb6, 0xc25353a1, | |
| 9288 | + 0x826d8ac4, 0x4209a2d3, 0x02a4daea, 0xc2c0f2fd, 0xc7234eca, | |
| 9289 | + 0x074766dd, 0x47ea1ee4, 0x878e36f3, 0xc7b0ef96, 0x07d4c781, | |
| 9290 | + 0x4779bfb8, 0x871d97af, 0xc7050d73, 0x07612564, 0x47cc5d5d, | |
| 9291 | + 0x87a8754a, 0xc796ac2f, 0x07f28438, 0x475ffc01, 0x873bd416, | |
| 9292 | + 0x8669b963, 0x460d9174, 0x06a0e94d, 0xc6c4c15a, 0x86fa183f, | |
| 9293 | + 0x469e3028, 0x06334811, 0xc6576006, 0x864ffada, 0x462bd2cd, | |
| 9294 | + 0x0686aaf4, 0xc6e282e3, 0x86dc5b86, 0x46b87391, 0x06150ba8, | |
| 9295 | + 0xc67123bf, 0x04b1d142, 0xc4d5f955, 0x8478816c, 0x441ca97b, | |
| 9296 | + 0x0422701e, 0xc4465809, 0x84eb2030, 0x448f0827, 0x049792fb, | |
| 9297 | + 0xc4f3baec, 0x845ec2d5, 0x443aeac2, 0x040433a7, 0xc4601bb0, | |
| 9298 | + 0x84cd6389, 0x44a94b9e, 0x45fb26eb, 0x859f0efc, 0xc53276c5, | |
| 9299 | + 0x05565ed2, 0x456887b7, 0x850cafa0, 0xc5a1d799, 0x05c5ff8e, | |
| 9300 | + 0x45dd6552, 0x85b94d45, 0xc514357c, 0x05701d6b, 0x454ec40e, | |
| 9301 | + 0x852aec19, 0xc5879420, 0x05e3bc37, 0xcf41ed4f, 0x0f25c558, | |
| 9302 | + 0x4f88bd61, 0x8fec9576, 0xcfd24c13, 0x0fb66404, 0x4f1b1c3d, | |
| 9303 | + 0x8f7f342a, 0xcf67aef6, 0x0f0386e1, 0x4faefed8, 0x8fcad6cf, | |
| 9304 | + 0xcff40faa, 0x0f9027bd, 0x4f3d5f84, 0x8f597793, 0x8e0b1ae6, | |
| 9305 | + 0x4e6f32f1, 0x0ec24ac8, 0xcea662df, 0x8e98bbba, 0x4efc93ad, | |
| 9306 | + 0x0e51eb94, 0xce35c383, 0x8e2d595f, 0x4e497148, 0x0ee40971, | |
| 9307 | + 0xce802166, 0x8ebef803, 0x4edad014, 0x0e77a82d, 0xce13803a, | |
| 9308 | + 0x0cd372c7, 0xccb75ad0, 0x8c1a22e9, 0x4c7e0afe, 0x0c40d39b, | |
| 9309 | + 0xcc24fb8c, 0x8c8983b5, 0x4cedaba2, 0x0cf5317e, 0xcc911969, | |
| 9310 | + 0x8c3c6150, 0x4c584947, 0x0c669022, 0xcc02b835, 0x8cafc00c, | |
| 9311 | + 0x4ccbe81b, 0x4d99856e, 0x8dfdad79, 0xcd50d540, 0x0d34fd57, | |
| 9312 | + 0x4d0a2432, 0x8d6e0c25, 0xcdc3741c, 0x0da75c0b, 0x4dbfc6d7, | |
| 9313 | + 0x8ddbeec0, 0xcd7696f9, 0x0d12beee, 0x4d2c678b, 0x8d484f9c, | |
| 9314 | + 0xcde537a5, 0x0d811fb2, 0x0862a385, 0xc8068b92, 0x88abf3ab, | |
| 9315 | + 0x48cfdbbc, 0x08f102d9, 0xc8952ace, 0x883852f7, 0x485c7ae0, | |
| 9316 | + 0x0844e03c, 0xc820c82b, 0x888db012, 0x48e99805, 0x08d74160, | |
| 9317 | + 0xc8b36977, 0x881e114e, 0x487a3959, 0x4928542c, 0x894c7c3b, | |
| 9318 | + 0xc9e10402, 0x09852c15, 0x49bbf570, 0x89dfdd67, 0xc972a55e, | |
| 9319 | + 0x09168d49, 0x490e1795, 0x896a3f82, 0xc9c747bb, 0x09a36fac, | |
| 9320 | + 0x499db6c9, 0x89f99ede, 0xc954e6e7, 0x0930cef0, 0xcbf03c0d, | |
| 9321 | + 0x0b94141a, 0x4b396c23, 0x8b5d4434, 0xcb639d51, 0x0b07b546, | |
| 9322 | + 0x4baacd7f, 0x8bcee568, 0xcbd67fb4, 0x0bb257a3, 0x4b1f2f9a, | |
| 9323 | + 0x8b7b078d, 0xcb45dee8, 0x0b21f6ff, 0x4b8c8ec6, 0x8be8a6d1, | |
| 9324 | + 0x8abacba4, 0x4adee3b3, 0x0a739b8a, 0xca17b39d, 0x8a296af8, | |
| 9325 | + 0x4a4d42ef, 0x0ae03ad6, 0xca8412c1, 0x8a9c881d, 0x4af8a00a, | |
| 9326 | + 0x0a55d833, 0xca31f024, 0x8a0f2941, 0x4a6b0156, 0x0ac6796f, | |
| 9327 | + 0xcaa25178}, | |
| 9328 | + {0x00000000, 0xd4ea739b, 0xe9d396ed, 0x3d39e576, 0x93a15c00, | |
| 9329 | + 0x474b2f9b, 0x7a72caed, 0xae98b976, 0x2643b900, 0xf2a9ca9b, | |
| 9330 | + 0xcf902fed, 0x1b7a5c76, 0xb5e2e500, 0x6108969b, 0x5c3173ed, | |
| 9331 | + 0x88db0076, 0x4c867201, 0x986c019a, 0xa555e4ec, 0x71bf9777, | |
| 9332 | + 0xdf272e01, 0x0bcd5d9a, 0x36f4b8ec, 0xe21ecb77, 0x6ac5cb01, | |
| 9333 | + 0xbe2fb89a, 0x83165dec, 0x57fc2e77, 0xf9649701, 0x2d8ee49a, | |
| 9334 | + 0x10b701ec, 0xc45d7277, 0x980ce502, 0x4ce69699, 0x71df73ef, | |
| 9335 | + 0xa5350074, 0x0badb902, 0xdf47ca99, 0xe27e2fef, 0x36945c74, | |
| 9336 | + 0xbe4f5c02, 0x6aa52f99, 0x579ccaef, 0x8376b974, 0x2dee0002, | |
| 9337 | + 0xf9047399, 0xc43d96ef, 0x10d7e574, 0xd48a9703, 0x0060e498, | |
| 9338 | + 0x3d5901ee, 0xe9b37275, 0x472bcb03, 0x93c1b898, 0xaef85dee, | |
| 9339 | + 0x7a122e75, 0xf2c92e03, 0x26235d98, 0x1b1ab8ee, 0xcff0cb75, | |
| 9340 | + 0x61687203, 0xb5820198, 0x88bbe4ee, 0x5c519775, 0x3019ca05, | |
| 9341 | + 0xe4f3b99e, 0xd9ca5ce8, 0x0d202f73, 0xa3b89605, 0x7752e59e, | |
| 9342 | + 0x4a6b00e8, 0x9e817373, 0x165a7305, 0xc2b0009e, 0xff89e5e8, | |
| 9343 | + 0x2b639673, 0x85fb2f05, 0x51115c9e, 0x6c28b9e8, 0xb8c2ca73, | |
| 9344 | + 0x7c9fb804, 0xa875cb9f, 0x954c2ee9, 0x41a65d72, 0xef3ee404, | |
| 9345 | + 0x3bd4979f, 0x06ed72e9, 0xd2070172, 0x5adc0104, 0x8e36729f, | |
| 9346 | + 0xb30f97e9, 0x67e5e472, 0xc97d5d04, 0x1d972e9f, 0x20aecbe9, | |
| 9347 | + 0xf444b872, 0xa8152f07, 0x7cff5c9c, 0x41c6b9ea, 0x952cca71, | |
| 9348 | + 0x3bb47307, 0xef5e009c, 0xd267e5ea, 0x068d9671, 0x8e569607, | |
| 9349 | + 0x5abce59c, 0x678500ea, 0xb36f7371, 0x1df7ca07, 0xc91db99c, | |
| 9350 | + 0xf4245cea, 0x20ce2f71, 0xe4935d06, 0x30792e9d, 0x0d40cbeb, | |
| 9351 | + 0xd9aab870, 0x77320106, 0xa3d8729d, 0x9ee197eb, 0x4a0be470, | |
| 9352 | + 0xc2d0e406, 0x163a979d, 0x2b0372eb, 0xffe90170, 0x5171b806, | |
| 9353 | + 0x859bcb9d, 0xb8a22eeb, 0x6c485d70, 0x6032940b, 0xb4d8e790, | |
| 9354 | + 0x89e102e6, 0x5d0b717d, 0xf393c80b, 0x2779bb90, 0x1a405ee6, | |
| 9355 | + 0xceaa2d7d, 0x46712d0b, 0x929b5e90, 0xafa2bbe6, 0x7b48c87d, | |
| 9356 | + 0xd5d0710b, 0x013a0290, 0x3c03e7e6, 0xe8e9947d, 0x2cb4e60a, | |
| 9357 | + 0xf85e9591, 0xc56770e7, 0x118d037c, 0xbf15ba0a, 0x6bffc991, | |
| 9358 | + 0x56c62ce7, 0x822c5f7c, 0x0af75f0a, 0xde1d2c91, 0xe324c9e7, | |
| 9359 | + 0x37ceba7c, 0x9956030a, 0x4dbc7091, 0x708595e7, 0xa46fe67c, | |
| 9360 | + 0xf83e7109, 0x2cd40292, 0x11ede7e4, 0xc507947f, 0x6b9f2d09, | |
| 9361 | + 0xbf755e92, 0x824cbbe4, 0x56a6c87f, 0xde7dc809, 0x0a97bb92, | |
| 9362 | + 0x37ae5ee4, 0xe3442d7f, 0x4ddc9409, 0x9936e792, 0xa40f02e4, | |
| 9363 | + 0x70e5717f, 0xb4b80308, 0x60527093, 0x5d6b95e5, 0x8981e67e, | |
| 9364 | + 0x27195f08, 0xf3f32c93, 0xcecac9e5, 0x1a20ba7e, 0x92fbba08, | |
| 9365 | + 0x4611c993, 0x7b282ce5, 0xafc25f7e, 0x015ae608, 0xd5b09593, | |
| 9366 | + 0xe88970e5, 0x3c63037e, 0x502b5e0e, 0x84c12d95, 0xb9f8c8e3, | |
| 9367 | + 0x6d12bb78, 0xc38a020e, 0x17607195, 0x2a5994e3, 0xfeb3e778, | |
| 9368 | + 0x7668e70e, 0xa2829495, 0x9fbb71e3, 0x4b510278, 0xe5c9bb0e, | |
| 9369 | + 0x3123c895, 0x0c1a2de3, 0xd8f05e78, 0x1cad2c0f, 0xc8475f94, | |
| 9370 | + 0xf57ebae2, 0x2194c979, 0x8f0c700f, 0x5be60394, 0x66dfe6e2, | |
| 9371 | + 0xb2359579, 0x3aee950f, 0xee04e694, 0xd33d03e2, 0x07d77079, | |
| 9372 | + 0xa94fc90f, 0x7da5ba94, 0x409c5fe2, 0x94762c79, 0xc827bb0c, | |
| 9373 | + 0x1ccdc897, 0x21f42de1, 0xf51e5e7a, 0x5b86e70c, 0x8f6c9497, | |
| 9374 | + 0xb25571e1, 0x66bf027a, 0xee64020c, 0x3a8e7197, 0x07b794e1, | |
| 9375 | + 0xd35de77a, 0x7dc55e0c, 0xa92f2d97, 0x9416c8e1, 0x40fcbb7a, | |
| 9376 | + 0x84a1c90d, 0x504bba96, 0x6d725fe0, 0xb9982c7b, 0x1700950d, | |
| 9377 | + 0xc3eae696, 0xfed303e0, 0x2a39707b, 0xa2e2700d, 0x76080396, | |
| 9378 | + 0x4b31e6e0, 0x9fdb957b, 0x31432c0d, 0xe5a95f96, 0xd890bae0, | |
| 9379 | + 0x0c7ac97b}, | |
| 9380 | + {0x00000000, 0x27652581, 0x0fcc3bd9, 0x28a91e58, 0x5f9e0669, | |
| 9381 | + 0x78fb23e8, 0x50523db0, 0x77371831, 0xbe3c0dd2, 0x99592853, | |
| 9382 | + 0xb1f0360b, 0x9695138a, 0xe1a20bbb, 0xc6c72e3a, 0xee6e3062, | |
| 9383 | + 0xc90b15e3, 0x3d7f6b7f, 0x1a1a4efe, 0x32b350a6, 0x15d67527, | |
| 9384 | + 0x62e16d16, 0x45844897, 0x6d2d56cf, 0x4a48734e, 0x834366ad, | |
| 9385 | + 0xa426432c, 0x8c8f5d74, 0xabea78f5, 0xdcdd60c4, 0xfbb84545, | |
| 9386 | + 0xd3115b1d, 0xf4747e9c, 0x7afed6fe, 0x5d9bf37f, 0x7532ed27, | |
| 9387 | + 0x5257c8a6, 0x2560d097, 0x0205f516, 0x2aaceb4e, 0x0dc9cecf, | |
| 9388 | + 0xc4c2db2c, 0xe3a7fead, 0xcb0ee0f5, 0xec6bc574, 0x9b5cdd45, | |
| 9389 | + 0xbc39f8c4, 0x9490e69c, 0xb3f5c31d, 0x4781bd81, 0x60e49800, | |
| 9390 | + 0x484d8658, 0x6f28a3d9, 0x181fbbe8, 0x3f7a9e69, 0x17d38031, | |
| 9391 | + 0x30b6a5b0, 0xf9bdb053, 0xded895d2, 0xf6718b8a, 0xd114ae0b, | |
| 9392 | + 0xa623b63a, 0x814693bb, 0xa9ef8de3, 0x8e8aa862, 0xb5fadc26, | |
| 9393 | + 0x929ff9a7, 0xba36e7ff, 0x9d53c27e, 0xea64da4f, 0xcd01ffce, | |
| 9394 | + 0xe5a8e196, 0xc2cdc417, 0x0bc6d1f4, 0x2ca3f475, 0x040aea2d, | |
| 9395 | + 0x236fcfac, 0x5458d79d, 0x733df21c, 0x5b94ec44, 0x7cf1c9c5, | |
| 9396 | + 0x8885b759, 0xafe092d8, 0x87498c80, 0xa02ca901, 0xd71bb130, | |
| 9397 | + 0xf07e94b1, 0xd8d78ae9, 0xffb2af68, 0x36b9ba8b, 0x11dc9f0a, | |
| 9398 | + 0x39758152, 0x1e10a4d3, 0x6927bce2, 0x4e429963, 0x66eb873b, | |
| 9399 | + 0x418ea2ba, 0xcf040ad8, 0xe8612f59, 0xc0c83101, 0xe7ad1480, | |
| 9400 | + 0x909a0cb1, 0xb7ff2930, 0x9f563768, 0xb83312e9, 0x7138070a, | |
| 9401 | + 0x565d228b, 0x7ef43cd3, 0x59911952, 0x2ea60163, 0x09c324e2, | |
| 9402 | + 0x216a3aba, 0x060f1f3b, 0xf27b61a7, 0xd51e4426, 0xfdb75a7e, | |
| 9403 | + 0xdad27fff, 0xade567ce, 0x8a80424f, 0xa2295c17, 0x854c7996, | |
| 9404 | + 0x4c476c75, 0x6b2249f4, 0x438b57ac, 0x64ee722d, 0x13d96a1c, | |
| 9405 | + 0x34bc4f9d, 0x1c1551c5, 0x3b707444, 0x6af5b94d, 0x4d909ccc, | |
| 9406 | + 0x65398294, 0x425ca715, 0x356bbf24, 0x120e9aa5, 0x3aa784fd, | |
| 9407 | + 0x1dc2a17c, 0xd4c9b49f, 0xf3ac911e, 0xdb058f46, 0xfc60aac7, | |
| 9408 | + 0x8b57b2f6, 0xac329777, 0x849b892f, 0xa3feacae, 0x578ad232, | |
| 9409 | + 0x70eff7b3, 0x5846e9eb, 0x7f23cc6a, 0x0814d45b, 0x2f71f1da, | |
| 9410 | + 0x07d8ef82, 0x20bdca03, 0xe9b6dfe0, 0xced3fa61, 0xe67ae439, | |
| 9411 | + 0xc11fc1b8, 0xb628d989, 0x914dfc08, 0xb9e4e250, 0x9e81c7d1, | |
| 9412 | + 0x100b6fb3, 0x376e4a32, 0x1fc7546a, 0x38a271eb, 0x4f9569da, | |
| 9413 | + 0x68f04c5b, 0x40595203, 0x673c7782, 0xae376261, 0x895247e0, | |
| 9414 | + 0xa1fb59b8, 0x869e7c39, 0xf1a96408, 0xd6cc4189, 0xfe655fd1, | |
| 9415 | + 0xd9007a50, 0x2d7404cc, 0x0a11214d, 0x22b83f15, 0x05dd1a94, | |
| 9416 | + 0x72ea02a5, 0x558f2724, 0x7d26397c, 0x5a431cfd, 0x9348091e, | |
| 9417 | + 0xb42d2c9f, 0x9c8432c7, 0xbbe11746, 0xccd60f77, 0xebb32af6, | |
| 9418 | + 0xc31a34ae, 0xe47f112f, 0xdf0f656b, 0xf86a40ea, 0xd0c35eb2, | |
| 9419 | + 0xf7a67b33, 0x80916302, 0xa7f44683, 0x8f5d58db, 0xa8387d5a, | |
| 9420 | + 0x613368b9, 0x46564d38, 0x6eff5360, 0x499a76e1, 0x3ead6ed0, | |
| 9421 | + 0x19c84b51, 0x31615509, 0x16047088, 0xe2700e14, 0xc5152b95, | |
| 9422 | + 0xedbc35cd, 0xcad9104c, 0xbdee087d, 0x9a8b2dfc, 0xb22233a4, | |
| 9423 | + 0x95471625, 0x5c4c03c6, 0x7b292647, 0x5380381f, 0x74e51d9e, | |
| 9424 | + 0x03d205af, 0x24b7202e, 0x0c1e3e76, 0x2b7b1bf7, 0xa5f1b395, | |
| 9425 | + 0x82949614, 0xaa3d884c, 0x8d58adcd, 0xfa6fb5fc, 0xdd0a907d, | |
| 9426 | + 0xf5a38e25, 0xd2c6aba4, 0x1bcdbe47, 0x3ca89bc6, 0x1401859e, | |
| 9427 | + 0x3364a01f, 0x4453b82e, 0x63369daf, 0x4b9f83f7, 0x6cfaa676, | |
| 9428 | + 0x988ed8ea, 0xbfebfd6b, 0x9742e333, 0xb027c6b2, 0xc710de83, | |
| 9429 | + 0xe075fb02, 0xc8dce55a, 0xefb9c0db, 0x26b2d538, 0x01d7f0b9, | |
| 9430 | + 0x297eeee1, 0x0e1bcb60, 0x792cd351, 0x5e49f6d0, 0x76e0e888, | |
| 9431 | + 0x5185cd09}}; | |
| 9432 | + | |
| 9433 | +#endif | |
| 9434 | + | |
| 9435 | +#endif | |
| 9436 | + | |
| 439 | 9437 | #endif |
| 440 | - } | |
| 441 | -}; | |
| 9438 | + | |
| 9439 | +local const z_crc_t FAR x2n_table[] = { | |
| 9440 | + 0x40000000, 0x20000000, 0x08000000, 0x00800000, 0x00008000, | |
| 9441 | + 0xedb88320, 0xb1e6b092, 0xa06a2517, 0xed627dae, 0x88d14467, | |
| 9442 | + 0xd7bbfe6a, 0xec447f11, 0x8e7ea170, 0x6427800e, 0x4d47bae0, | |
| 9443 | + 0x09fe548f, 0x83852d0f, 0x30362f1a, 0x7b5a9cc3, 0x31fec169, | |
| 9444 | + 0x9fec022a, 0x6c8dedc4, 0x15d6874d, 0x5fde7a4e, 0xbad90e37, | |
| 9445 | + 0x2e4e5eef, 0x4eaba214, 0xa8a472c0, 0x429a969e, 0x148d302a, | |
| 9446 | + 0xc40ba6d0, 0xc4e22c3c}; | |
| 442 | 9447 |
| --- compat/zlib/crc32.h | |
| +++ compat/zlib/crc32.h | |
| @@ -1,441 +1,9446 @@ | |
| 1 | /* crc32.h -- tables for rapid CRC calculation |
| 2 | * Generated automatically by crc32.c |
| 3 | */ |
| 4 | |
| 5 | local const z_crc_t FAR crc_table[TBLS][256] = |
| 6 | { |
| 7 | { |
| 8 | 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL, |
| 9 | 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL, |
| 10 | 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL, |
| 11 | 0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL, |
| 12 | 0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL, |
| 13 | 0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL, |
| 14 | 0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL, |
| 15 | 0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL, |
| 16 | 0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL, |
| 17 | 0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL, |
| 18 | 0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL, |
| 19 | 0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL, |
| 20 | 0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL, |
| 21 | 0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL, |
| 22 | 0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL, |
| 23 | 0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL, |
| 24 | 0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL, |
| 25 | 0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL, |
| 26 | 0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL, |
| 27 | 0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL, |
| 28 | 0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL, |
| 29 | 0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL, |
| 30 | 0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL, |
| 31 | 0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL, |
| 32 | 0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL, |
| 33 | 0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL, |
| 34 | 0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL, |
| 35 | 0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL, |
| 36 | 0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL, |
| 37 | 0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL, |
| 38 | 0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL, |
| 39 | 0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL, |
| 40 | 0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL, |
| 41 | 0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL, |
| 42 | 0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL, |
| 43 | 0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL, |
| 44 | 0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL, |
| 45 | 0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL, |
| 46 | 0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL, |
| 47 | 0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL, |
| 48 | 0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL, |
| 49 | 0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL, |
| 50 | 0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL, |
| 51 | 0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL, |
| 52 | 0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL, |
| 53 | 0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL, |
| 54 | 0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL, |
| 55 | 0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL, |
| 56 | 0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL, |
| 57 | 0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL, |
| 58 | 0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL, |
| 59 | 0x2d02ef8dUL |
| 60 | #ifdef BYFOUR |
| 61 | }, |
| 62 | { |
| 63 | 0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL, |
| 64 | 0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL, |
| 65 | 0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL, |
| 66 | 0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL, |
| 67 | 0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL, |
| 68 | 0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL, |
| 69 | 0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL, |
| 70 | 0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL, |
| 71 | 0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL, |
| 72 | 0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL, |
| 73 | 0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL, |
| 74 | 0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL, |
| 75 | 0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL, |
| 76 | 0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL, |
| 77 | 0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL, |
| 78 | 0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL, |
| 79 | 0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL, |
| 80 | 0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL, |
| 81 | 0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL, |
| 82 | 0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL, |
| 83 | 0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL, |
| 84 | 0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL, |
| 85 | 0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL, |
| 86 | 0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL, |
| 87 | 0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL, |
| 88 | 0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL, |
| 89 | 0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL, |
| 90 | 0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL, |
| 91 | 0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL, |
| 92 | 0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL, |
| 93 | 0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL, |
| 94 | 0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL, |
| 95 | 0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL, |
| 96 | 0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL, |
| 97 | 0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL, |
| 98 | 0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL, |
| 99 | 0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL, |
| 100 | 0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL, |
| 101 | 0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL, |
| 102 | 0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL, |
| 103 | 0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL, |
| 104 | 0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL, |
| 105 | 0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL, |
| 106 | 0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL, |
| 107 | 0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL, |
| 108 | 0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL, |
| 109 | 0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL, |
| 110 | 0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL, |
| 111 | 0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL, |
| 112 | 0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL, |
| 113 | 0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL, |
| 114 | 0x9324fd72UL |
| 115 | }, |
| 116 | { |
| 117 | 0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL, |
| 118 | 0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL, |
| 119 | 0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL, |
| 120 | 0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL, |
| 121 | 0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL, |
| 122 | 0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL, |
| 123 | 0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL, |
| 124 | 0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL, |
| 125 | 0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL, |
| 126 | 0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL, |
| 127 | 0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL, |
| 128 | 0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL, |
| 129 | 0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL, |
| 130 | 0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL, |
| 131 | 0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL, |
| 132 | 0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL, |
| 133 | 0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL, |
| 134 | 0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL, |
| 135 | 0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL, |
| 136 | 0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL, |
| 137 | 0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL, |
| 138 | 0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL, |
| 139 | 0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL, |
| 140 | 0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL, |
| 141 | 0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL, |
| 142 | 0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL, |
| 143 | 0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL, |
| 144 | 0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL, |
| 145 | 0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL, |
| 146 | 0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL, |
| 147 | 0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL, |
| 148 | 0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL, |
| 149 | 0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL, |
| 150 | 0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL, |
| 151 | 0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL, |
| 152 | 0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL, |
| 153 | 0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL, |
| 154 | 0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL, |
| 155 | 0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL, |
| 156 | 0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL, |
| 157 | 0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL, |
| 158 | 0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL, |
| 159 | 0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL, |
| 160 | 0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL, |
| 161 | 0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL, |
| 162 | 0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL, |
| 163 | 0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL, |
| 164 | 0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL, |
| 165 | 0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL, |
| 166 | 0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL, |
| 167 | 0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL, |
| 168 | 0xbe9834edUL |
| 169 | }, |
| 170 | { |
| 171 | 0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL, |
| 172 | 0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL, |
| 173 | 0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL, |
| 174 | 0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL, |
| 175 | 0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL, |
| 176 | 0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL, |
| 177 | 0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL, |
| 178 | 0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL, |
| 179 | 0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL, |
| 180 | 0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL, |
| 181 | 0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL, |
| 182 | 0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL, |
| 183 | 0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL, |
| 184 | 0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL, |
| 185 | 0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL, |
| 186 | 0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL, |
| 187 | 0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL, |
| 188 | 0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL, |
| 189 | 0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL, |
| 190 | 0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL, |
| 191 | 0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL, |
| 192 | 0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL, |
| 193 | 0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL, |
| 194 | 0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL, |
| 195 | 0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL, |
| 196 | 0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL, |
| 197 | 0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL, |
| 198 | 0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL, |
| 199 | 0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL, |
| 200 | 0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL, |
| 201 | 0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL, |
| 202 | 0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL, |
| 203 | 0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL, |
| 204 | 0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL, |
| 205 | 0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL, |
| 206 | 0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL, |
| 207 | 0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL, |
| 208 | 0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL, |
| 209 | 0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL, |
| 210 | 0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL, |
| 211 | 0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL, |
| 212 | 0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL, |
| 213 | 0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL, |
| 214 | 0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL, |
| 215 | 0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL, |
| 216 | 0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL, |
| 217 | 0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL, |
| 218 | 0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL, |
| 219 | 0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL, |
| 220 | 0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL, |
| 221 | 0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL, |
| 222 | 0xde0506f1UL |
| 223 | }, |
| 224 | { |
| 225 | 0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL, |
| 226 | 0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL, |
| 227 | 0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL, |
| 228 | 0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL, |
| 229 | 0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL, |
| 230 | 0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL, |
| 231 | 0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL, |
| 232 | 0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL, |
| 233 | 0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL, |
| 234 | 0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL, |
| 235 | 0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL, |
| 236 | 0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL, |
| 237 | 0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL, |
| 238 | 0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL, |
| 239 | 0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL, |
| 240 | 0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL, |
| 241 | 0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL, |
| 242 | 0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL, |
| 243 | 0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL, |
| 244 | 0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL, |
| 245 | 0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL, |
| 246 | 0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL, |
| 247 | 0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL, |
| 248 | 0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL, |
| 249 | 0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL, |
| 250 | 0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL, |
| 251 | 0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL, |
| 252 | 0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL, |
| 253 | 0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL, |
| 254 | 0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL, |
| 255 | 0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL, |
| 256 | 0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL, |
| 257 | 0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL, |
| 258 | 0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL, |
| 259 | 0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL, |
| 260 | 0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL, |
| 261 | 0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL, |
| 262 | 0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL, |
| 263 | 0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL, |
| 264 | 0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL, |
| 265 | 0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL, |
| 266 | 0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL, |
| 267 | 0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL, |
| 268 | 0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL, |
| 269 | 0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL, |
| 270 | 0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL, |
| 271 | 0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL, |
| 272 | 0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL, |
| 273 | 0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL, |
| 274 | 0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL, |
| 275 | 0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL, |
| 276 | 0x8def022dUL |
| 277 | }, |
| 278 | { |
| 279 | 0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL, |
| 280 | 0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL, |
| 281 | 0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL, |
| 282 | 0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL, |
| 283 | 0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL, |
| 284 | 0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL, |
| 285 | 0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL, |
| 286 | 0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL, |
| 287 | 0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL, |
| 288 | 0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL, |
| 289 | 0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL, |
| 290 | 0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL, |
| 291 | 0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL, |
| 292 | 0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL, |
| 293 | 0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL, |
| 294 | 0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL, |
| 295 | 0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL, |
| 296 | 0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL, |
| 297 | 0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL, |
| 298 | 0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL, |
| 299 | 0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL, |
| 300 | 0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL, |
| 301 | 0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL, |
| 302 | 0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL, |
| 303 | 0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL, |
| 304 | 0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL, |
| 305 | 0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL, |
| 306 | 0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL, |
| 307 | 0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL, |
| 308 | 0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL, |
| 309 | 0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL, |
| 310 | 0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL, |
| 311 | 0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL, |
| 312 | 0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL, |
| 313 | 0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL, |
| 314 | 0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL, |
| 315 | 0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL, |
| 316 | 0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL, |
| 317 | 0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL, |
| 318 | 0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL, |
| 319 | 0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL, |
| 320 | 0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL, |
| 321 | 0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL, |
| 322 | 0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL, |
| 323 | 0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL, |
| 324 | 0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL, |
| 325 | 0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL, |
| 326 | 0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL, |
| 327 | 0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL, |
| 328 | 0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL, |
| 329 | 0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL, |
| 330 | 0x72fd2493UL |
| 331 | }, |
| 332 | { |
| 333 | 0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL, |
| 334 | 0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL, |
| 335 | 0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL, |
| 336 | 0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL, |
| 337 | 0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL, |
| 338 | 0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL, |
| 339 | 0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL, |
| 340 | 0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL, |
| 341 | 0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL, |
| 342 | 0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL, |
| 343 | 0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL, |
| 344 | 0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL, |
| 345 | 0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL, |
| 346 | 0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL, |
| 347 | 0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL, |
| 348 | 0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL, |
| 349 | 0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL, |
| 350 | 0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL, |
| 351 | 0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL, |
| 352 | 0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL, |
| 353 | 0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL, |
| 354 | 0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL, |
| 355 | 0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL, |
| 356 | 0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL, |
| 357 | 0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL, |
| 358 | 0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL, |
| 359 | 0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL, |
| 360 | 0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL, |
| 361 | 0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL, |
| 362 | 0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL, |
| 363 | 0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL, |
| 364 | 0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL, |
| 365 | 0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL, |
| 366 | 0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL, |
| 367 | 0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL, |
| 368 | 0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL, |
| 369 | 0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL, |
| 370 | 0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL, |
| 371 | 0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL, |
| 372 | 0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL, |
| 373 | 0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL, |
| 374 | 0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL, |
| 375 | 0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL, |
| 376 | 0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL, |
| 377 | 0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL, |
| 378 | 0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL, |
| 379 | 0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL, |
| 380 | 0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL, |
| 381 | 0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL, |
| 382 | 0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL, |
| 383 | 0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL, |
| 384 | 0xed3498beUL |
| 385 | }, |
| 386 | { |
| 387 | 0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL, |
| 388 | 0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL, |
| 389 | 0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL, |
| 390 | 0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL, |
| 391 | 0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL, |
| 392 | 0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL, |
| 393 | 0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL, |
| 394 | 0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL, |
| 395 | 0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL, |
| 396 | 0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL, |
| 397 | 0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL, |
| 398 | 0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL, |
| 399 | 0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL, |
| 400 | 0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL, |
| 401 | 0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL, |
| 402 | 0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL, |
| 403 | 0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL, |
| 404 | 0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL, |
| 405 | 0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL, |
| 406 | 0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL, |
| 407 | 0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL, |
| 408 | 0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL, |
| 409 | 0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL, |
| 410 | 0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL, |
| 411 | 0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL, |
| 412 | 0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL, |
| 413 | 0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL, |
| 414 | 0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL, |
| 415 | 0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL, |
| 416 | 0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL, |
| 417 | 0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL, |
| 418 | 0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL, |
| 419 | 0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL, |
| 420 | 0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL, |
| 421 | 0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL, |
| 422 | 0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL, |
| 423 | 0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL, |
| 424 | 0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL, |
| 425 | 0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL, |
| 426 | 0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL, |
| 427 | 0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL, |
| 428 | 0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL, |
| 429 | 0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL, |
| 430 | 0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL, |
| 431 | 0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL, |
| 432 | 0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL, |
| 433 | 0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL, |
| 434 | 0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL, |
| 435 | 0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL, |
| 436 | 0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL, |
| 437 | 0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL, |
| 438 | 0xf10605deUL |
| 439 | #endif |
| 440 | } |
| 441 | }; |
| 442 |
| --- compat/zlib/crc32.h | |
| +++ compat/zlib/crc32.h | |
| @@ -1,441 +1,9446 @@ | |
| 1 | /* crc32.h -- tables for rapid CRC calculation |
| 2 | * Generated automatically by crc32.c |
| 3 | */ |
| 4 | |
| 5 | local const z_crc_t FAR crc_table[] = { |
| 6 | 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, |
| 7 | 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, |
| 8 | 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, |
| 9 | 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, |
| 10 | 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, |
| 11 | 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, |
| 12 | 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, |
| 13 | 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, |
| 14 | 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, |
| 15 | 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, |
| 16 | 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, |
| 17 | 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, |
| 18 | 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, |
| 19 | 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, |
| 20 | 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, |
| 21 | 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, |
| 22 | 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, |
| 23 | 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, |
| 24 | 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, |
| 25 | 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, |
| 26 | 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, |
| 27 | 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, |
| 28 | 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, |
| 29 | 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, |
| 30 | 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, |
| 31 | 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, |
| 32 | 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, |
| 33 | 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, |
| 34 | 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, |
| 35 | 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, |
| 36 | 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, |
| 37 | 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, |
| 38 | 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, |
| 39 | 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, |
| 40 | 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, |
| 41 | 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, |
| 42 | 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, |
| 43 | 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, |
| 44 | 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, |
| 45 | 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, |
| 46 | 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, |
| 47 | 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, |
| 48 | 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, |
| 49 | 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, |
| 50 | 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, |
| 51 | 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, |
| 52 | 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, |
| 53 | 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, |
| 54 | 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, |
| 55 | 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, |
| 56 | 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, |
| 57 | 0x2d02ef8d}; |
| 58 | |
| 59 | #ifdef W |
| 60 | |
| 61 | #if W == 8 |
| 62 | |
| 63 | local const z_word_t FAR crc_big_table[] = { |
| 64 | 0x0000000000000000, 0x9630077700000000, 0x2c610eee00000000, |
| 65 | 0xba51099900000000, 0x19c46d0700000000, 0x8ff46a7000000000, |
| 66 | 0x35a563e900000000, 0xa395649e00000000, 0x3288db0e00000000, |
| 67 | 0xa4b8dc7900000000, 0x1ee9d5e000000000, 0x88d9d29700000000, |
| 68 | 0x2b4cb60900000000, 0xbd7cb17e00000000, 0x072db8e700000000, |
| 69 | 0x911dbf9000000000, 0x6410b71d00000000, 0xf220b06a00000000, |
| 70 | 0x4871b9f300000000, 0xde41be8400000000, 0x7dd4da1a00000000, |
| 71 | 0xebe4dd6d00000000, 0x51b5d4f400000000, 0xc785d38300000000, |
| 72 | 0x56986c1300000000, 0xc0a86b6400000000, 0x7af962fd00000000, |
| 73 | 0xecc9658a00000000, 0x4f5c011400000000, 0xd96c066300000000, |
| 74 | 0x633d0ffa00000000, 0xf50d088d00000000, 0xc8206e3b00000000, |
| 75 | 0x5e10694c00000000, 0xe44160d500000000, 0x727167a200000000, |
| 76 | 0xd1e4033c00000000, 0x47d4044b00000000, 0xfd850dd200000000, |
| 77 | 0x6bb50aa500000000, 0xfaa8b53500000000, 0x6c98b24200000000, |
| 78 | 0xd6c9bbdb00000000, 0x40f9bcac00000000, 0xe36cd83200000000, |
| 79 | 0x755cdf4500000000, 0xcf0dd6dc00000000, 0x593dd1ab00000000, |
| 80 | 0xac30d92600000000, 0x3a00de5100000000, 0x8051d7c800000000, |
| 81 | 0x1661d0bf00000000, 0xb5f4b42100000000, 0x23c4b35600000000, |
| 82 | 0x9995bacf00000000, 0x0fa5bdb800000000, 0x9eb8022800000000, |
| 83 | 0x0888055f00000000, 0xb2d90cc600000000, 0x24e90bb100000000, |
| 84 | 0x877c6f2f00000000, 0x114c685800000000, 0xab1d61c100000000, |
| 85 | 0x3d2d66b600000000, 0x9041dc7600000000, 0x0671db0100000000, |
| 86 | 0xbc20d29800000000, 0x2a10d5ef00000000, 0x8985b17100000000, |
| 87 | 0x1fb5b60600000000, 0xa5e4bf9f00000000, 0x33d4b8e800000000, |
| 88 | 0xa2c9077800000000, 0x34f9000f00000000, 0x8ea8099600000000, |
| 89 | 0x18980ee100000000, 0xbb0d6a7f00000000, 0x2d3d6d0800000000, |
| 90 | 0x976c649100000000, 0x015c63e600000000, 0xf4516b6b00000000, |
| 91 | 0x62616c1c00000000, 0xd830658500000000, 0x4e0062f200000000, |
| 92 | 0xed95066c00000000, 0x7ba5011b00000000, 0xc1f4088200000000, |
| 93 | 0x57c40ff500000000, 0xc6d9b06500000000, 0x50e9b71200000000, |
| 94 | 0xeab8be8b00000000, 0x7c88b9fc00000000, 0xdf1ddd6200000000, |
| 95 | 0x492dda1500000000, 0xf37cd38c00000000, 0x654cd4fb00000000, |
| 96 | 0x5861b24d00000000, 0xce51b53a00000000, 0x7400bca300000000, |
| 97 | 0xe230bbd400000000, 0x41a5df4a00000000, 0xd795d83d00000000, |
| 98 | 0x6dc4d1a400000000, 0xfbf4d6d300000000, 0x6ae9694300000000, |
| 99 | 0xfcd96e3400000000, 0x468867ad00000000, 0xd0b860da00000000, |
| 100 | 0x732d044400000000, 0xe51d033300000000, 0x5f4c0aaa00000000, |
| 101 | 0xc97c0ddd00000000, 0x3c71055000000000, 0xaa41022700000000, |
| 102 | 0x10100bbe00000000, 0x86200cc900000000, 0x25b5685700000000, |
| 103 | 0xb3856f2000000000, 0x09d466b900000000, 0x9fe461ce00000000, |
| 104 | 0x0ef9de5e00000000, 0x98c9d92900000000, 0x2298d0b000000000, |
| 105 | 0xb4a8d7c700000000, 0x173db35900000000, 0x810db42e00000000, |
| 106 | 0x3b5cbdb700000000, 0xad6cbac000000000, 0x2083b8ed00000000, |
| 107 | 0xb6b3bf9a00000000, 0x0ce2b60300000000, 0x9ad2b17400000000, |
| 108 | 0x3947d5ea00000000, 0xaf77d29d00000000, 0x1526db0400000000, |
| 109 | 0x8316dc7300000000, 0x120b63e300000000, 0x843b649400000000, |
| 110 | 0x3e6a6d0d00000000, 0xa85a6a7a00000000, 0x0bcf0ee400000000, |
| 111 | 0x9dff099300000000, 0x27ae000a00000000, 0xb19e077d00000000, |
| 112 | 0x44930ff000000000, 0xd2a3088700000000, 0x68f2011e00000000, |
| 113 | 0xfec2066900000000, 0x5d5762f700000000, 0xcb67658000000000, |
| 114 | 0x71366c1900000000, 0xe7066b6e00000000, 0x761bd4fe00000000, |
| 115 | 0xe02bd38900000000, 0x5a7ada1000000000, 0xcc4add6700000000, |
| 116 | 0x6fdfb9f900000000, 0xf9efbe8e00000000, 0x43beb71700000000, |
| 117 | 0xd58eb06000000000, 0xe8a3d6d600000000, 0x7e93d1a100000000, |
| 118 | 0xc4c2d83800000000, 0x52f2df4f00000000, 0xf167bbd100000000, |
| 119 | 0x6757bca600000000, 0xdd06b53f00000000, 0x4b36b24800000000, |
| 120 | 0xda2b0dd800000000, 0x4c1b0aaf00000000, 0xf64a033600000000, |
| 121 | 0x607a044100000000, 0xc3ef60df00000000, 0x55df67a800000000, |
| 122 | 0xef8e6e3100000000, 0x79be694600000000, 0x8cb361cb00000000, |
| 123 | 0x1a8366bc00000000, 0xa0d26f2500000000, 0x36e2685200000000, |
| 124 | 0x95770ccc00000000, 0x03470bbb00000000, 0xb916022200000000, |
| 125 | 0x2f26055500000000, 0xbe3bbac500000000, 0x280bbdb200000000, |
| 126 | 0x925ab42b00000000, 0x046ab35c00000000, 0xa7ffd7c200000000, |
| 127 | 0x31cfd0b500000000, 0x8b9ed92c00000000, 0x1daede5b00000000, |
| 128 | 0xb0c2649b00000000, 0x26f263ec00000000, 0x9ca36a7500000000, |
| 129 | 0x0a936d0200000000, 0xa906099c00000000, 0x3f360eeb00000000, |
| 130 | 0x8567077200000000, 0x1357000500000000, 0x824abf9500000000, |
| 131 | 0x147ab8e200000000, 0xae2bb17b00000000, 0x381bb60c00000000, |
| 132 | 0x9b8ed29200000000, 0x0dbed5e500000000, 0xb7efdc7c00000000, |
| 133 | 0x21dfdb0b00000000, 0xd4d2d38600000000, 0x42e2d4f100000000, |
| 134 | 0xf8b3dd6800000000, 0x6e83da1f00000000, 0xcd16be8100000000, |
| 135 | 0x5b26b9f600000000, 0xe177b06f00000000, 0x7747b71800000000, |
| 136 | 0xe65a088800000000, 0x706a0fff00000000, 0xca3b066600000000, |
| 137 | 0x5c0b011100000000, 0xff9e658f00000000, 0x69ae62f800000000, |
| 138 | 0xd3ff6b6100000000, 0x45cf6c1600000000, 0x78e20aa000000000, |
| 139 | 0xeed20dd700000000, 0x5483044e00000000, 0xc2b3033900000000, |
| 140 | 0x612667a700000000, 0xf71660d000000000, 0x4d47694900000000, |
| 141 | 0xdb776e3e00000000, 0x4a6ad1ae00000000, 0xdc5ad6d900000000, |
| 142 | 0x660bdf4000000000, 0xf03bd83700000000, 0x53aebca900000000, |
| 143 | 0xc59ebbde00000000, 0x7fcfb24700000000, 0xe9ffb53000000000, |
| 144 | 0x1cf2bdbd00000000, 0x8ac2baca00000000, 0x3093b35300000000, |
| 145 | 0xa6a3b42400000000, 0x0536d0ba00000000, 0x9306d7cd00000000, |
| 146 | 0x2957de5400000000, 0xbf67d92300000000, 0x2e7a66b300000000, |
| 147 | 0xb84a61c400000000, 0x021b685d00000000, 0x942b6f2a00000000, |
| 148 | 0x37be0bb400000000, 0xa18e0cc300000000, 0x1bdf055a00000000, |
| 149 | 0x8def022d00000000}; |
| 150 | |
| 151 | #else /* W == 4 */ |
| 152 | |
| 153 | local const z_word_t FAR crc_big_table[] = { |
| 154 | 0x00000000, 0x96300777, 0x2c610eee, 0xba510999, 0x19c46d07, |
| 155 | 0x8ff46a70, 0x35a563e9, 0xa395649e, 0x3288db0e, 0xa4b8dc79, |
| 156 | 0x1ee9d5e0, 0x88d9d297, 0x2b4cb609, 0xbd7cb17e, 0x072db8e7, |
| 157 | 0x911dbf90, 0x6410b71d, 0xf220b06a, 0x4871b9f3, 0xde41be84, |
| 158 | 0x7dd4da1a, 0xebe4dd6d, 0x51b5d4f4, 0xc785d383, 0x56986c13, |
| 159 | 0xc0a86b64, 0x7af962fd, 0xecc9658a, 0x4f5c0114, 0xd96c0663, |
| 160 | 0x633d0ffa, 0xf50d088d, 0xc8206e3b, 0x5e10694c, 0xe44160d5, |
| 161 | 0x727167a2, 0xd1e4033c, 0x47d4044b, 0xfd850dd2, 0x6bb50aa5, |
| 162 | 0xfaa8b535, 0x6c98b242, 0xd6c9bbdb, 0x40f9bcac, 0xe36cd832, |
| 163 | 0x755cdf45, 0xcf0dd6dc, 0x593dd1ab, 0xac30d926, 0x3a00de51, |
| 164 | 0x8051d7c8, 0x1661d0bf, 0xb5f4b421, 0x23c4b356, 0x9995bacf, |
| 165 | 0x0fa5bdb8, 0x9eb80228, 0x0888055f, 0xb2d90cc6, 0x24e90bb1, |
| 166 | 0x877c6f2f, 0x114c6858, 0xab1d61c1, 0x3d2d66b6, 0x9041dc76, |
| 167 | 0x0671db01, 0xbc20d298, 0x2a10d5ef, 0x8985b171, 0x1fb5b606, |
| 168 | 0xa5e4bf9f, 0x33d4b8e8, 0xa2c90778, 0x34f9000f, 0x8ea80996, |
| 169 | 0x18980ee1, 0xbb0d6a7f, 0x2d3d6d08, 0x976c6491, 0x015c63e6, |
| 170 | 0xf4516b6b, 0x62616c1c, 0xd8306585, 0x4e0062f2, 0xed95066c, |
| 171 | 0x7ba5011b, 0xc1f40882, 0x57c40ff5, 0xc6d9b065, 0x50e9b712, |
| 172 | 0xeab8be8b, 0x7c88b9fc, 0xdf1ddd62, 0x492dda15, 0xf37cd38c, |
| 173 | 0x654cd4fb, 0x5861b24d, 0xce51b53a, 0x7400bca3, 0xe230bbd4, |
| 174 | 0x41a5df4a, 0xd795d83d, 0x6dc4d1a4, 0xfbf4d6d3, 0x6ae96943, |
| 175 | 0xfcd96e34, 0x468867ad, 0xd0b860da, 0x732d0444, 0xe51d0333, |
| 176 | 0x5f4c0aaa, 0xc97c0ddd, 0x3c710550, 0xaa410227, 0x10100bbe, |
| 177 | 0x86200cc9, 0x25b56857, 0xb3856f20, 0x09d466b9, 0x9fe461ce, |
| 178 | 0x0ef9de5e, 0x98c9d929, 0x2298d0b0, 0xb4a8d7c7, 0x173db359, |
| 179 | 0x810db42e, 0x3b5cbdb7, 0xad6cbac0, 0x2083b8ed, 0xb6b3bf9a, |
| 180 | 0x0ce2b603, 0x9ad2b174, 0x3947d5ea, 0xaf77d29d, 0x1526db04, |
| 181 | 0x8316dc73, 0x120b63e3, 0x843b6494, 0x3e6a6d0d, 0xa85a6a7a, |
| 182 | 0x0bcf0ee4, 0x9dff0993, 0x27ae000a, 0xb19e077d, 0x44930ff0, |
| 183 | 0xd2a30887, 0x68f2011e, 0xfec20669, 0x5d5762f7, 0xcb676580, |
| 184 | 0x71366c19, 0xe7066b6e, 0x761bd4fe, 0xe02bd389, 0x5a7ada10, |
| 185 | 0xcc4add67, 0x6fdfb9f9, 0xf9efbe8e, 0x43beb717, 0xd58eb060, |
| 186 | 0xe8a3d6d6, 0x7e93d1a1, 0xc4c2d838, 0x52f2df4f, 0xf167bbd1, |
| 187 | 0x6757bca6, 0xdd06b53f, 0x4b36b248, 0xda2b0dd8, 0x4c1b0aaf, |
| 188 | 0xf64a0336, 0x607a0441, 0xc3ef60df, 0x55df67a8, 0xef8e6e31, |
| 189 | 0x79be6946, 0x8cb361cb, 0x1a8366bc, 0xa0d26f25, 0x36e26852, |
| 190 | 0x95770ccc, 0x03470bbb, 0xb9160222, 0x2f260555, 0xbe3bbac5, |
| 191 | 0x280bbdb2, 0x925ab42b, 0x046ab35c, 0xa7ffd7c2, 0x31cfd0b5, |
| 192 | 0x8b9ed92c, 0x1daede5b, 0xb0c2649b, 0x26f263ec, 0x9ca36a75, |
| 193 | 0x0a936d02, 0xa906099c, 0x3f360eeb, 0x85670772, 0x13570005, |
| 194 | 0x824abf95, 0x147ab8e2, 0xae2bb17b, 0x381bb60c, 0x9b8ed292, |
| 195 | 0x0dbed5e5, 0xb7efdc7c, 0x21dfdb0b, 0xd4d2d386, 0x42e2d4f1, |
| 196 | 0xf8b3dd68, 0x6e83da1f, 0xcd16be81, 0x5b26b9f6, 0xe177b06f, |
| 197 | 0x7747b718, 0xe65a0888, 0x706a0fff, 0xca3b0666, 0x5c0b0111, |
| 198 | 0xff9e658f, 0x69ae62f8, 0xd3ff6b61, 0x45cf6c16, 0x78e20aa0, |
| 199 | 0xeed20dd7, 0x5483044e, 0xc2b30339, 0x612667a7, 0xf71660d0, |
| 200 | 0x4d476949, 0xdb776e3e, 0x4a6ad1ae, 0xdc5ad6d9, 0x660bdf40, |
| 201 | 0xf03bd837, 0x53aebca9, 0xc59ebbde, 0x7fcfb247, 0xe9ffb530, |
| 202 | 0x1cf2bdbd, 0x8ac2baca, 0x3093b353, 0xa6a3b424, 0x0536d0ba, |
| 203 | 0x9306d7cd, 0x2957de54, 0xbf67d923, 0x2e7a66b3, 0xb84a61c4, |
| 204 | 0x021b685d, 0x942b6f2a, 0x37be0bb4, 0xa18e0cc3, 0x1bdf055a, |
| 205 | 0x8def022d}; |
| 206 | |
| 207 | #endif |
| 208 | |
| 209 | #if N == 1 |
| 210 | |
| 211 | #if W == 8 |
| 212 | |
| 213 | local const z_crc_t FAR crc_braid_table[][256] = { |
| 214 | {0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa, |
| 215 | 0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b, |
| 216 | 0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232, |
| 217 | 0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8, |
| 218 | 0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e, |
| 219 | 0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa, |
| 220 | 0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b, |
| 221 | 0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f, |
| 222 | 0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719, |
| 223 | 0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d, 0x496753e3, |
| 224 | 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa, |
| 225 | 0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b, |
| 226 | 0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed, |
| 227 | 0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89, |
| 228 | 0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25, |
| 229 | 0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041, |
| 230 | 0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c, |
| 231 | 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed, |
| 232 | 0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4, |
| 233 | 0x8c06e16a, 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758, |
| 234 | 0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e, |
| 235 | 0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a, |
| 236 | 0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, 0xee7596ed, |
| 237 | 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889, |
| 238 | 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df, |
| 239 | 0x37558441, 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544, |
| 240 | 0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d, |
| 241 | 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c, |
| 242 | 0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1, |
| 243 | 0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95, |
| 244 | 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839, |
| 245 | 0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d, |
| 246 | 0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976, |
| 247 | 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7, |
| 248 | 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be, |
| 249 | 0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144, |
| 250 | 0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12, |
| 251 | 0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376, |
| 252 | 0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a, |
| 253 | 0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e, |
| 254 | 0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278, |
| 255 | 0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682, |
| 256 | 0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b, |
| 257 | 0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a, |
| 258 | 0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0, 0x83d02561, |
| 259 | 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05, |
| 260 | 0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9, |
| 261 | 0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd, |
| 262 | 0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0, |
| 263 | 0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61, |
| 264 | 0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678, |
| 265 | 0x264b06e6}, |
| 266 | {0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413, |
| 267 | 0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3, |
| 268 | 0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d, |
| 269 | 0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653, |
| 270 | 0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9, |
| 271 | 0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e, |
| 272 | 0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5, |
| 273 | 0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712, |
| 274 | 0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8, |
| 275 | 0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552, 0x0e14aee6, |
| 276 | 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068, |
| 277 | 0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8, |
| 278 | 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579, |
| 279 | 0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade, |
| 280 | 0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37, |
| 281 | 0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590, |
| 282 | 0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4, |
| 283 | 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64, |
| 284 | 0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea, |
| 285 | 0xd59d995e, 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678, |
| 286 | 0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282, |
| 287 | 0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25, |
| 288 | 0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, 0x7bf7c102, |
| 289 | 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5, |
| 290 | 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f, |
| 291 | 0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146, |
| 292 | 0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8, |
| 293 | 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08, |
| 294 | 0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c, |
| 295 | 0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b, |
| 296 | 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972, |
| 297 | 0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5, |
| 298 | 0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d, |
| 299 | 0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd, |
| 300 | 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833, |
| 301 | 0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d, |
| 302 | 0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7, |
| 303 | 0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60, |
| 304 | 0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2, |
| 305 | 0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105, |
| 306 | 0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff, |
| 307 | 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1, |
| 308 | 0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f, |
| 309 | 0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf, |
| 310 | 0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac, 0x03a0a617, |
| 311 | 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0, |
| 312 | 0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959, |
| 313 | 0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe, |
| 314 | 0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca, |
| 315 | 0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a, |
| 316 | 0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184, |
| 317 | 0x92364a30}, |
| 318 | {0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216, |
| 319 | 0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8, |
| 320 | 0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170, |
| 321 | 0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035, |
| 322 | 0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6, |
| 323 | 0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145, |
| 324 | 0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d, |
| 325 | 0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e, |
| 326 | 0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d, |
| 327 | 0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad, 0xcf26d408, |
| 328 | 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0, |
| 329 | 0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e, |
| 330 | 0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c, |
| 331 | 0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf, |
| 332 | 0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a, |
| 333 | 0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9, |
| 334 | 0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1, |
| 335 | 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f, |
| 336 | 0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987, |
| 337 | 0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4, |
| 338 | 0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37, |
| 339 | 0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84, |
| 340 | 0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, 0x46eaacca, |
| 341 | 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79, |
| 342 | 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba, |
| 343 | 0xb7bc1e1f, 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d, |
| 344 | 0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5, |
| 345 | 0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b, |
| 346 | 0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643, |
| 347 | 0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0, |
| 348 | 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525, |
| 349 | 0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496, |
| 350 | 0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8, |
| 351 | 0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026, |
| 352 | 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e, |
| 353 | 0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db, |
| 354 | 0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118, |
| 355 | 0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab, |
| 356 | 0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf, |
| 357 | 0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c, |
| 358 | 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf, |
| 359 | 0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a, |
| 360 | 0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32, |
| 361 | 0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec, |
| 362 | 0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa, 0x16441b82, |
| 363 | 0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31, |
| 364 | 0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4, |
| 365 | 0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957, |
| 366 | 0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f, |
| 367 | 0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1, |
| 368 | 0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869, |
| 369 | 0xe4c4abcc}, |
| 370 | {0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0, |
| 371 | 0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271, |
| 372 | 0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61, |
| 373 | 0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52, |
| 374 | 0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43, |
| 375 | 0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333, |
| 376 | 0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64, |
| 377 | 0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314, |
| 378 | 0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205, |
| 379 | 0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886, 0x9c419136, |
| 380 | 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26, |
| 381 | 0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997, |
| 382 | 0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849, |
| 383 | 0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739, |
| 384 | 0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8, |
| 385 | 0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98, |
| 386 | 0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b, |
| 387 | 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba, |
| 388 | 0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa, |
| 389 | 0xba43581a, 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d, |
| 390 | 0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c, |
| 391 | 0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc, |
| 392 | 0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af, |
| 393 | 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf, |
| 394 | 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce, |
| 395 | 0x0142247e, 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922, |
| 396 | 0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532, |
| 397 | 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183, |
| 398 | 0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710, |
| 399 | 0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860, |
| 400 | 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1, |
| 401 | 0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1, |
| 402 | 0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956, |
| 403 | 0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7, |
| 404 | 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7, |
| 405 | 0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4, |
| 406 | 0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5, |
| 407 | 0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5, |
| 408 | 0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb, |
| 409 | 0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb, |
| 410 | 0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da, |
| 411 | 0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9, |
| 412 | 0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9, |
| 413 | 0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48, |
| 414 | 0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888, 0x28d4c7df, |
| 415 | 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af, |
| 416 | 0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e, |
| 417 | 0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e, |
| 418 | 0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d, |
| 419 | 0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c, |
| 420 | 0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c, |
| 421 | 0xca64c78c}, |
| 422 | {0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757, |
| 423 | 0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a, |
| 424 | 0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733, |
| 425 | 0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871, |
| 426 | 0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70, |
| 427 | 0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42, |
| 428 | 0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5, |
| 429 | 0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787, |
| 430 | 0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086, |
| 431 | 0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1, 0x48979fc4, |
| 432 | 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d, |
| 433 | 0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0, |
| 434 | 0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d, |
| 435 | 0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f, |
| 436 | 0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859, |
| 437 | 0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b, |
| 438 | 0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5, |
| 439 | 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028, |
| 440 | 0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891, |
| 441 | 0x936e1ff4, 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed, |
| 442 | 0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec, |
| 443 | 0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde, |
| 444 | 0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, 0xc1366817, |
| 445 | 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825, |
| 446 | 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24, |
| 447 | 0x99557841, 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e, |
| 448 | 0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7, |
| 449 | 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a, |
| 450 | 0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4, |
| 451 | 0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196, |
| 452 | 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0, |
| 453 | 0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2, |
| 454 | 0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52, |
| 455 | 0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f, |
| 456 | 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36, |
| 457 | 0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174, |
| 458 | 0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675, |
| 459 | 0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647, |
| 460 | 0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d, |
| 461 | 0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf, |
| 462 | 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be, |
| 463 | 0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc, |
| 464 | 0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645, |
| 465 | 0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98, |
| 466 | 0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf, 0xd67f4138, |
| 467 | 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a, |
| 468 | 0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c, |
| 469 | 0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e, |
| 470 | 0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0, |
| 471 | 0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d, |
| 472 | 0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194, |
| 473 | 0xde0506f1}, |
| 474 | {0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc, |
| 475 | 0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f, |
| 476 | 0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a, |
| 477 | 0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29, |
| 478 | 0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8, |
| 479 | 0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023, |
| 480 | 0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e, |
| 481 | 0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065, |
| 482 | 0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84, |
| 483 | 0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590, 0x25a98fa7, |
| 484 | 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922, |
| 485 | 0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71, |
| 486 | 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0, |
| 487 | 0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b, |
| 488 | 0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816, |
| 489 | 0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd, |
| 490 | 0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c, |
| 491 | 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f, |
| 492 | 0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba, |
| 493 | 0x67e0698d, 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579, |
| 494 | 0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98, |
| 495 | 0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873, |
| 496 | 0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, 0x5775bc3e, |
| 497 | 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5, |
| 498 | 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134, |
| 499 | 0x5c29fb03, 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7, |
| 500 | 0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732, |
| 501 | 0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461, |
| 502 | 0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0, |
| 503 | 0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b, |
| 504 | 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26, |
| 505 | 0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd, |
| 506 | 0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc, |
| 507 | 0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef, |
| 508 | 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a, |
| 509 | 0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049, |
| 510 | 0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8, |
| 511 | 0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43, |
| 512 | 0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e, |
| 513 | 0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5, |
| 514 | 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24, |
| 515 | 0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07, |
| 516 | 0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982, |
| 517 | 0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1, |
| 518 | 0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d, 0xa9e2d0a0, |
| 519 | 0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b, |
| 520 | 0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576, |
| 521 | 0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d, |
| 522 | 0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c, |
| 523 | 0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f, |
| 524 | 0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda, |
| 525 | 0xbe9834ed}, |
| 526 | {0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504, |
| 527 | 0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49, |
| 528 | 0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e, |
| 529 | 0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192, |
| 530 | 0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859, |
| 531 | 0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c, |
| 532 | 0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620, |
| 533 | 0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265, |
| 534 | 0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae, |
| 535 | 0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3, 0xc65d07b2, |
| 536 | 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175, |
| 537 | 0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38, |
| 538 | 0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05, |
| 539 | 0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40, |
| 540 | 0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f, |
| 541 | 0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca, |
| 542 | 0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850, |
| 543 | 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d, |
| 544 | 0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da, |
| 545 | 0x3d23419b, 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864, |
| 546 | 0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af, |
| 547 | 0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea, |
| 548 | 0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, 0x1d091b74, |
| 549 | 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31, |
| 550 | 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa, |
| 551 | 0x9a9107bb, 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a, |
| 552 | 0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd, |
| 553 | 0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180, |
| 554 | 0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a, |
| 555 | 0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f, |
| 556 | 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290, |
| 557 | 0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5, |
| 558 | 0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed, |
| 559 | 0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0, |
| 560 | 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167, |
| 561 | 0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b, |
| 562 | 0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0, |
| 563 | 0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5, |
| 564 | 0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc, |
| 565 | 0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189, |
| 566 | 0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842, |
| 567 | 0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e, |
| 568 | 0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299, |
| 569 | 0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4, |
| 570 | 0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec, |
| 571 | 0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9, |
| 572 | 0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66, |
| 573 | 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23, |
| 574 | 0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9, |
| 575 | 0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4, |
| 576 | 0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33, |
| 577 | 0x9324fd72}, |
| 578 | {0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, |
| 579 | 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, |
| 580 | 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, |
| 581 | 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, |
| 582 | 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, |
| 583 | 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, |
| 584 | 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, |
| 585 | 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, |
| 586 | 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, |
| 587 | 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, |
| 588 | 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, |
| 589 | 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, |
| 590 | 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, |
| 591 | 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, |
| 592 | 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, |
| 593 | 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, |
| 594 | 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, |
| 595 | 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, |
| 596 | 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, |
| 597 | 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, |
| 598 | 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, |
| 599 | 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, |
| 600 | 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, |
| 601 | 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, |
| 602 | 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, |
| 603 | 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, |
| 604 | 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, |
| 605 | 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, |
| 606 | 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, |
| 607 | 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, |
| 608 | 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, |
| 609 | 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, |
| 610 | 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, |
| 611 | 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, |
| 612 | 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, |
| 613 | 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, |
| 614 | 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, |
| 615 | 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, |
| 616 | 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, |
| 617 | 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, |
| 618 | 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, |
| 619 | 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, |
| 620 | 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, |
| 621 | 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, |
| 622 | 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, |
| 623 | 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, |
| 624 | 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, |
| 625 | 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, |
| 626 | 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, |
| 627 | 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, |
| 628 | 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, |
| 629 | 0x2d02ef8d}}; |
| 630 | |
| 631 | local const z_word_t FAR crc_braid_big_table[][256] = { |
| 632 | {0x0000000000000000, 0x9630077700000000, 0x2c610eee00000000, |
| 633 | 0xba51099900000000, 0x19c46d0700000000, 0x8ff46a7000000000, |
| 634 | 0x35a563e900000000, 0xa395649e00000000, 0x3288db0e00000000, |
| 635 | 0xa4b8dc7900000000, 0x1ee9d5e000000000, 0x88d9d29700000000, |
| 636 | 0x2b4cb60900000000, 0xbd7cb17e00000000, 0x072db8e700000000, |
| 637 | 0x911dbf9000000000, 0x6410b71d00000000, 0xf220b06a00000000, |
| 638 | 0x4871b9f300000000, 0xde41be8400000000, 0x7dd4da1a00000000, |
| 639 | 0xebe4dd6d00000000, 0x51b5d4f400000000, 0xc785d38300000000, |
| 640 | 0x56986c1300000000, 0xc0a86b6400000000, 0x7af962fd00000000, |
| 641 | 0xecc9658a00000000, 0x4f5c011400000000, 0xd96c066300000000, |
| 642 | 0x633d0ffa00000000, 0xf50d088d00000000, 0xc8206e3b00000000, |
| 643 | 0x5e10694c00000000, 0xe44160d500000000, 0x727167a200000000, |
| 644 | 0xd1e4033c00000000, 0x47d4044b00000000, 0xfd850dd200000000, |
| 645 | 0x6bb50aa500000000, 0xfaa8b53500000000, 0x6c98b24200000000, |
| 646 | 0xd6c9bbdb00000000, 0x40f9bcac00000000, 0xe36cd83200000000, |
| 647 | 0x755cdf4500000000, 0xcf0dd6dc00000000, 0x593dd1ab00000000, |
| 648 | 0xac30d92600000000, 0x3a00de5100000000, 0x8051d7c800000000, |
| 649 | 0x1661d0bf00000000, 0xb5f4b42100000000, 0x23c4b35600000000, |
| 650 | 0x9995bacf00000000, 0x0fa5bdb800000000, 0x9eb8022800000000, |
| 651 | 0x0888055f00000000, 0xb2d90cc600000000, 0x24e90bb100000000, |
| 652 | 0x877c6f2f00000000, 0x114c685800000000, 0xab1d61c100000000, |
| 653 | 0x3d2d66b600000000, 0x9041dc7600000000, 0x0671db0100000000, |
| 654 | 0xbc20d29800000000, 0x2a10d5ef00000000, 0x8985b17100000000, |
| 655 | 0x1fb5b60600000000, 0xa5e4bf9f00000000, 0x33d4b8e800000000, |
| 656 | 0xa2c9077800000000, 0x34f9000f00000000, 0x8ea8099600000000, |
| 657 | 0x18980ee100000000, 0xbb0d6a7f00000000, 0x2d3d6d0800000000, |
| 658 | 0x976c649100000000, 0x015c63e600000000, 0xf4516b6b00000000, |
| 659 | 0x62616c1c00000000, 0xd830658500000000, 0x4e0062f200000000, |
| 660 | 0xed95066c00000000, 0x7ba5011b00000000, 0xc1f4088200000000, |
| 661 | 0x57c40ff500000000, 0xc6d9b06500000000, 0x50e9b71200000000, |
| 662 | 0xeab8be8b00000000, 0x7c88b9fc00000000, 0xdf1ddd6200000000, |
| 663 | 0x492dda1500000000, 0xf37cd38c00000000, 0x654cd4fb00000000, |
| 664 | 0x5861b24d00000000, 0xce51b53a00000000, 0x7400bca300000000, |
| 665 | 0xe230bbd400000000, 0x41a5df4a00000000, 0xd795d83d00000000, |
| 666 | 0x6dc4d1a400000000, 0xfbf4d6d300000000, 0x6ae9694300000000, |
| 667 | 0xfcd96e3400000000, 0x468867ad00000000, 0xd0b860da00000000, |
| 668 | 0x732d044400000000, 0xe51d033300000000, 0x5f4c0aaa00000000, |
| 669 | 0xc97c0ddd00000000, 0x3c71055000000000, 0xaa41022700000000, |
| 670 | 0x10100bbe00000000, 0x86200cc900000000, 0x25b5685700000000, |
| 671 | 0xb3856f2000000000, 0x09d466b900000000, 0x9fe461ce00000000, |
| 672 | 0x0ef9de5e00000000, 0x98c9d92900000000, 0x2298d0b000000000, |
| 673 | 0xb4a8d7c700000000, 0x173db35900000000, 0x810db42e00000000, |
| 674 | 0x3b5cbdb700000000, 0xad6cbac000000000, 0x2083b8ed00000000, |
| 675 | 0xb6b3bf9a00000000, 0x0ce2b60300000000, 0x9ad2b17400000000, |
| 676 | 0x3947d5ea00000000, 0xaf77d29d00000000, 0x1526db0400000000, |
| 677 | 0x8316dc7300000000, 0x120b63e300000000, 0x843b649400000000, |
| 678 | 0x3e6a6d0d00000000, 0xa85a6a7a00000000, 0x0bcf0ee400000000, |
| 679 | 0x9dff099300000000, 0x27ae000a00000000, 0xb19e077d00000000, |
| 680 | 0x44930ff000000000, 0xd2a3088700000000, 0x68f2011e00000000, |
| 681 | 0xfec2066900000000, 0x5d5762f700000000, 0xcb67658000000000, |
| 682 | 0x71366c1900000000, 0xe7066b6e00000000, 0x761bd4fe00000000, |
| 683 | 0xe02bd38900000000, 0x5a7ada1000000000, 0xcc4add6700000000, |
| 684 | 0x6fdfb9f900000000, 0xf9efbe8e00000000, 0x43beb71700000000, |
| 685 | 0xd58eb06000000000, 0xe8a3d6d600000000, 0x7e93d1a100000000, |
| 686 | 0xc4c2d83800000000, 0x52f2df4f00000000, 0xf167bbd100000000, |
| 687 | 0x6757bca600000000, 0xdd06b53f00000000, 0x4b36b24800000000, |
| 688 | 0xda2b0dd800000000, 0x4c1b0aaf00000000, 0xf64a033600000000, |
| 689 | 0x607a044100000000, 0xc3ef60df00000000, 0x55df67a800000000, |
| 690 | 0xef8e6e3100000000, 0x79be694600000000, 0x8cb361cb00000000, |
| 691 | 0x1a8366bc00000000, 0xa0d26f2500000000, 0x36e2685200000000, |
| 692 | 0x95770ccc00000000, 0x03470bbb00000000, 0xb916022200000000, |
| 693 | 0x2f26055500000000, 0xbe3bbac500000000, 0x280bbdb200000000, |
| 694 | 0x925ab42b00000000, 0x046ab35c00000000, 0xa7ffd7c200000000, |
| 695 | 0x31cfd0b500000000, 0x8b9ed92c00000000, 0x1daede5b00000000, |
| 696 | 0xb0c2649b00000000, 0x26f263ec00000000, 0x9ca36a7500000000, |
| 697 | 0x0a936d0200000000, 0xa906099c00000000, 0x3f360eeb00000000, |
| 698 | 0x8567077200000000, 0x1357000500000000, 0x824abf9500000000, |
| 699 | 0x147ab8e200000000, 0xae2bb17b00000000, 0x381bb60c00000000, |
| 700 | 0x9b8ed29200000000, 0x0dbed5e500000000, 0xb7efdc7c00000000, |
| 701 | 0x21dfdb0b00000000, 0xd4d2d38600000000, 0x42e2d4f100000000, |
| 702 | 0xf8b3dd6800000000, 0x6e83da1f00000000, 0xcd16be8100000000, |
| 703 | 0x5b26b9f600000000, 0xe177b06f00000000, 0x7747b71800000000, |
| 704 | 0xe65a088800000000, 0x706a0fff00000000, 0xca3b066600000000, |
| 705 | 0x5c0b011100000000, 0xff9e658f00000000, 0x69ae62f800000000, |
| 706 | 0xd3ff6b6100000000, 0x45cf6c1600000000, 0x78e20aa000000000, |
| 707 | 0xeed20dd700000000, 0x5483044e00000000, 0xc2b3033900000000, |
| 708 | 0x612667a700000000, 0xf71660d000000000, 0x4d47694900000000, |
| 709 | 0xdb776e3e00000000, 0x4a6ad1ae00000000, 0xdc5ad6d900000000, |
| 710 | 0x660bdf4000000000, 0xf03bd83700000000, 0x53aebca900000000, |
| 711 | 0xc59ebbde00000000, 0x7fcfb24700000000, 0xe9ffb53000000000, |
| 712 | 0x1cf2bdbd00000000, 0x8ac2baca00000000, 0x3093b35300000000, |
| 713 | 0xa6a3b42400000000, 0x0536d0ba00000000, 0x9306d7cd00000000, |
| 714 | 0x2957de5400000000, 0xbf67d92300000000, 0x2e7a66b300000000, |
| 715 | 0xb84a61c400000000, 0x021b685d00000000, 0x942b6f2a00000000, |
| 716 | 0x37be0bb400000000, 0xa18e0cc300000000, 0x1bdf055a00000000, |
| 717 | 0x8def022d00000000}, |
| 718 | {0x0000000000000000, 0x41311b1900000000, 0x8262363200000000, |
| 719 | 0xc3532d2b00000000, 0x04c56c6400000000, 0x45f4777d00000000, |
| 720 | 0x86a75a5600000000, 0xc796414f00000000, 0x088ad9c800000000, |
| 721 | 0x49bbc2d100000000, 0x8ae8effa00000000, 0xcbd9f4e300000000, |
| 722 | 0x0c4fb5ac00000000, 0x4d7eaeb500000000, 0x8e2d839e00000000, |
| 723 | 0xcf1c988700000000, 0x5112c24a00000000, 0x1023d95300000000, |
| 724 | 0xd370f47800000000, 0x9241ef6100000000, 0x55d7ae2e00000000, |
| 725 | 0x14e6b53700000000, 0xd7b5981c00000000, 0x9684830500000000, |
| 726 | 0x59981b8200000000, 0x18a9009b00000000, 0xdbfa2db000000000, |
| 727 | 0x9acb36a900000000, 0x5d5d77e600000000, 0x1c6c6cff00000000, |
| 728 | 0xdf3f41d400000000, 0x9e0e5acd00000000, 0xa224849500000000, |
| 729 | 0xe3159f8c00000000, 0x2046b2a700000000, 0x6177a9be00000000, |
| 730 | 0xa6e1e8f100000000, 0xe7d0f3e800000000, 0x2483dec300000000, |
| 731 | 0x65b2c5da00000000, 0xaaae5d5d00000000, 0xeb9f464400000000, |
| 732 | 0x28cc6b6f00000000, 0x69fd707600000000, 0xae6b313900000000, |
| 733 | 0xef5a2a2000000000, 0x2c09070b00000000, 0x6d381c1200000000, |
| 734 | 0xf33646df00000000, 0xb2075dc600000000, 0x715470ed00000000, |
| 735 | 0x30656bf400000000, 0xf7f32abb00000000, 0xb6c231a200000000, |
| 736 | 0x75911c8900000000, 0x34a0079000000000, 0xfbbc9f1700000000, |
| 737 | 0xba8d840e00000000, 0x79dea92500000000, 0x38efb23c00000000, |
| 738 | 0xff79f37300000000, 0xbe48e86a00000000, 0x7d1bc54100000000, |
| 739 | 0x3c2ade5800000000, 0x054f79f000000000, 0x447e62e900000000, |
| 740 | 0x872d4fc200000000, 0xc61c54db00000000, 0x018a159400000000, |
| 741 | 0x40bb0e8d00000000, 0x83e823a600000000, 0xc2d938bf00000000, |
| 742 | 0x0dc5a03800000000, 0x4cf4bb2100000000, 0x8fa7960a00000000, |
| 743 | 0xce968d1300000000, 0x0900cc5c00000000, 0x4831d74500000000, |
| 744 | 0x8b62fa6e00000000, 0xca53e17700000000, 0x545dbbba00000000, |
| 745 | 0x156ca0a300000000, 0xd63f8d8800000000, 0x970e969100000000, |
| 746 | 0x5098d7de00000000, 0x11a9ccc700000000, 0xd2fae1ec00000000, |
| 747 | 0x93cbfaf500000000, 0x5cd7627200000000, 0x1de6796b00000000, |
| 748 | 0xdeb5544000000000, 0x9f844f5900000000, 0x58120e1600000000, |
| 749 | 0x1923150f00000000, 0xda70382400000000, 0x9b41233d00000000, |
| 750 | 0xa76bfd6500000000, 0xe65ae67c00000000, 0x2509cb5700000000, |
| 751 | 0x6438d04e00000000, 0xa3ae910100000000, 0xe29f8a1800000000, |
| 752 | 0x21cca73300000000, 0x60fdbc2a00000000, 0xafe124ad00000000, |
| 753 | 0xeed03fb400000000, 0x2d83129f00000000, 0x6cb2098600000000, |
| 754 | 0xab2448c900000000, 0xea1553d000000000, 0x29467efb00000000, |
| 755 | 0x687765e200000000, 0xf6793f2f00000000, 0xb748243600000000, |
| 756 | 0x741b091d00000000, 0x352a120400000000, 0xf2bc534b00000000, |
| 757 | 0xb38d485200000000, 0x70de657900000000, 0x31ef7e6000000000, |
| 758 | 0xfef3e6e700000000, 0xbfc2fdfe00000000, 0x7c91d0d500000000, |
| 759 | 0x3da0cbcc00000000, 0xfa368a8300000000, 0xbb07919a00000000, |
| 760 | 0x7854bcb100000000, 0x3965a7a800000000, 0x4b98833b00000000, |
| 761 | 0x0aa9982200000000, 0xc9fab50900000000, 0x88cbae1000000000, |
| 762 | 0x4f5def5f00000000, 0x0e6cf44600000000, 0xcd3fd96d00000000, |
| 763 | 0x8c0ec27400000000, 0x43125af300000000, 0x022341ea00000000, |
| 764 | 0xc1706cc100000000, 0x804177d800000000, 0x47d7369700000000, |
| 765 | 0x06e62d8e00000000, 0xc5b500a500000000, 0x84841bbc00000000, |
| 766 | 0x1a8a417100000000, 0x5bbb5a6800000000, 0x98e8774300000000, |
| 767 | 0xd9d96c5a00000000, 0x1e4f2d1500000000, 0x5f7e360c00000000, |
| 768 | 0x9c2d1b2700000000, 0xdd1c003e00000000, 0x120098b900000000, |
| 769 | 0x533183a000000000, 0x9062ae8b00000000, 0xd153b59200000000, |
| 770 | 0x16c5f4dd00000000, 0x57f4efc400000000, 0x94a7c2ef00000000, |
| 771 | 0xd596d9f600000000, 0xe9bc07ae00000000, 0xa88d1cb700000000, |
| 772 | 0x6bde319c00000000, 0x2aef2a8500000000, 0xed796bca00000000, |
| 773 | 0xac4870d300000000, 0x6f1b5df800000000, 0x2e2a46e100000000, |
| 774 | 0xe136de6600000000, 0xa007c57f00000000, 0x6354e85400000000, |
| 775 | 0x2265f34d00000000, 0xe5f3b20200000000, 0xa4c2a91b00000000, |
| 776 | 0x6791843000000000, 0x26a09f2900000000, 0xb8aec5e400000000, |
| 777 | 0xf99fdefd00000000, 0x3accf3d600000000, 0x7bfde8cf00000000, |
| 778 | 0xbc6ba98000000000, 0xfd5ab29900000000, 0x3e099fb200000000, |
| 779 | 0x7f3884ab00000000, 0xb0241c2c00000000, 0xf115073500000000, |
| 780 | 0x32462a1e00000000, 0x7377310700000000, 0xb4e1704800000000, |
| 781 | 0xf5d06b5100000000, 0x3683467a00000000, 0x77b25d6300000000, |
| 782 | 0x4ed7facb00000000, 0x0fe6e1d200000000, 0xccb5ccf900000000, |
| 783 | 0x8d84d7e000000000, 0x4a1296af00000000, 0x0b238db600000000, |
| 784 | 0xc870a09d00000000, 0x8941bb8400000000, 0x465d230300000000, |
| 785 | 0x076c381a00000000, 0xc43f153100000000, 0x850e0e2800000000, |
| 786 | 0x42984f6700000000, 0x03a9547e00000000, 0xc0fa795500000000, |
| 787 | 0x81cb624c00000000, 0x1fc5388100000000, 0x5ef4239800000000, |
| 788 | 0x9da70eb300000000, 0xdc9615aa00000000, 0x1b0054e500000000, |
| 789 | 0x5a314ffc00000000, 0x996262d700000000, 0xd85379ce00000000, |
| 790 | 0x174fe14900000000, 0x567efa5000000000, 0x952dd77b00000000, |
| 791 | 0xd41ccc6200000000, 0x138a8d2d00000000, 0x52bb963400000000, |
| 792 | 0x91e8bb1f00000000, 0xd0d9a00600000000, 0xecf37e5e00000000, |
| 793 | 0xadc2654700000000, 0x6e91486c00000000, 0x2fa0537500000000, |
| 794 | 0xe836123a00000000, 0xa907092300000000, 0x6a54240800000000, |
| 795 | 0x2b653f1100000000, 0xe479a79600000000, 0xa548bc8f00000000, |
| 796 | 0x661b91a400000000, 0x272a8abd00000000, 0xe0bccbf200000000, |
| 797 | 0xa18dd0eb00000000, 0x62defdc000000000, 0x23efe6d900000000, |
| 798 | 0xbde1bc1400000000, 0xfcd0a70d00000000, 0x3f838a2600000000, |
| 799 | 0x7eb2913f00000000, 0xb924d07000000000, 0xf815cb6900000000, |
| 800 | 0x3b46e64200000000, 0x7a77fd5b00000000, 0xb56b65dc00000000, |
| 801 | 0xf45a7ec500000000, 0x370953ee00000000, 0x763848f700000000, |
| 802 | 0xb1ae09b800000000, 0xf09f12a100000000, 0x33cc3f8a00000000, |
| 803 | 0x72fd249300000000}, |
| 804 | {0x0000000000000000, 0x376ac20100000000, 0x6ed4840300000000, |
| 805 | 0x59be460200000000, 0xdca8090700000000, 0xebc2cb0600000000, |
| 806 | 0xb27c8d0400000000, 0x85164f0500000000, 0xb851130e00000000, |
| 807 | 0x8f3bd10f00000000, 0xd685970d00000000, 0xe1ef550c00000000, |
| 808 | 0x64f91a0900000000, 0x5393d80800000000, 0x0a2d9e0a00000000, |
| 809 | 0x3d475c0b00000000, 0x70a3261c00000000, 0x47c9e41d00000000, |
| 810 | 0x1e77a21f00000000, 0x291d601e00000000, 0xac0b2f1b00000000, |
| 811 | 0x9b61ed1a00000000, 0xc2dfab1800000000, 0xf5b5691900000000, |
| 812 | 0xc8f2351200000000, 0xff98f71300000000, 0xa626b11100000000, |
| 813 | 0x914c731000000000, 0x145a3c1500000000, 0x2330fe1400000000, |
| 814 | 0x7a8eb81600000000, 0x4de47a1700000000, 0xe0464d3800000000, |
| 815 | 0xd72c8f3900000000, 0x8e92c93b00000000, 0xb9f80b3a00000000, |
| 816 | 0x3cee443f00000000, 0x0b84863e00000000, 0x523ac03c00000000, |
| 817 | 0x6550023d00000000, 0x58175e3600000000, 0x6f7d9c3700000000, |
| 818 | 0x36c3da3500000000, 0x01a9183400000000, 0x84bf573100000000, |
| 819 | 0xb3d5953000000000, 0xea6bd33200000000, 0xdd01113300000000, |
| 820 | 0x90e56b2400000000, 0xa78fa92500000000, 0xfe31ef2700000000, |
| 821 | 0xc95b2d2600000000, 0x4c4d622300000000, 0x7b27a02200000000, |
| 822 | 0x2299e62000000000, 0x15f3242100000000, 0x28b4782a00000000, |
| 823 | 0x1fdeba2b00000000, 0x4660fc2900000000, 0x710a3e2800000000, |
| 824 | 0xf41c712d00000000, 0xc376b32c00000000, 0x9ac8f52e00000000, |
| 825 | 0xada2372f00000000, 0xc08d9a7000000000, 0xf7e7587100000000, |
| 826 | 0xae591e7300000000, 0x9933dc7200000000, 0x1c25937700000000, |
| 827 | 0x2b4f517600000000, 0x72f1177400000000, 0x459bd57500000000, |
| 828 | 0x78dc897e00000000, 0x4fb64b7f00000000, 0x16080d7d00000000, |
| 829 | 0x2162cf7c00000000, 0xa474807900000000, 0x931e427800000000, |
| 830 | 0xcaa0047a00000000, 0xfdcac67b00000000, 0xb02ebc6c00000000, |
| 831 | 0x87447e6d00000000, 0xdefa386f00000000, 0xe990fa6e00000000, |
| 832 | 0x6c86b56b00000000, 0x5bec776a00000000, 0x0252316800000000, |
| 833 | 0x3538f36900000000, 0x087faf6200000000, 0x3f156d6300000000, |
| 834 | 0x66ab2b6100000000, 0x51c1e96000000000, 0xd4d7a66500000000, |
| 835 | 0xe3bd646400000000, 0xba03226600000000, 0x8d69e06700000000, |
| 836 | 0x20cbd74800000000, 0x17a1154900000000, 0x4e1f534b00000000, |
| 837 | 0x7975914a00000000, 0xfc63de4f00000000, 0xcb091c4e00000000, |
| 838 | 0x92b75a4c00000000, 0xa5dd984d00000000, 0x989ac44600000000, |
| 839 | 0xaff0064700000000, 0xf64e404500000000, 0xc124824400000000, |
| 840 | 0x4432cd4100000000, 0x73580f4000000000, 0x2ae6494200000000, |
| 841 | 0x1d8c8b4300000000, 0x5068f15400000000, 0x6702335500000000, |
| 842 | 0x3ebc755700000000, 0x09d6b75600000000, 0x8cc0f85300000000, |
| 843 | 0xbbaa3a5200000000, 0xe2147c5000000000, 0xd57ebe5100000000, |
| 844 | 0xe839e25a00000000, 0xdf53205b00000000, 0x86ed665900000000, |
| 845 | 0xb187a45800000000, 0x3491eb5d00000000, 0x03fb295c00000000, |
| 846 | 0x5a456f5e00000000, 0x6d2fad5f00000000, 0x801b35e100000000, |
| 847 | 0xb771f7e000000000, 0xeecfb1e200000000, 0xd9a573e300000000, |
| 848 | 0x5cb33ce600000000, 0x6bd9fee700000000, 0x3267b8e500000000, |
| 849 | 0x050d7ae400000000, 0x384a26ef00000000, 0x0f20e4ee00000000, |
| 850 | 0x569ea2ec00000000, 0x61f460ed00000000, 0xe4e22fe800000000, |
| 851 | 0xd388ede900000000, 0x8a36abeb00000000, 0xbd5c69ea00000000, |
| 852 | 0xf0b813fd00000000, 0xc7d2d1fc00000000, 0x9e6c97fe00000000, |
| 853 | 0xa90655ff00000000, 0x2c101afa00000000, 0x1b7ad8fb00000000, |
| 854 | 0x42c49ef900000000, 0x75ae5cf800000000, 0x48e900f300000000, |
| 855 | 0x7f83c2f200000000, 0x263d84f000000000, 0x115746f100000000, |
| 856 | 0x944109f400000000, 0xa32bcbf500000000, 0xfa958df700000000, |
| 857 | 0xcdff4ff600000000, 0x605d78d900000000, 0x5737bad800000000, |
| 858 | 0x0e89fcda00000000, 0x39e33edb00000000, 0xbcf571de00000000, |
| 859 | 0x8b9fb3df00000000, 0xd221f5dd00000000, 0xe54b37dc00000000, |
| 860 | 0xd80c6bd700000000, 0xef66a9d600000000, 0xb6d8efd400000000, |
| 861 | 0x81b22dd500000000, 0x04a462d000000000, 0x33cea0d100000000, |
| 862 | 0x6a70e6d300000000, 0x5d1a24d200000000, 0x10fe5ec500000000, |
| 863 | 0x27949cc400000000, 0x7e2adac600000000, 0x494018c700000000, |
| 864 | 0xcc5657c200000000, 0xfb3c95c300000000, 0xa282d3c100000000, |
| 865 | 0x95e811c000000000, 0xa8af4dcb00000000, 0x9fc58fca00000000, |
| 866 | 0xc67bc9c800000000, 0xf1110bc900000000, 0x740744cc00000000, |
| 867 | 0x436d86cd00000000, 0x1ad3c0cf00000000, 0x2db902ce00000000, |
| 868 | 0x4096af9100000000, 0x77fc6d9000000000, 0x2e422b9200000000, |
| 869 | 0x1928e99300000000, 0x9c3ea69600000000, 0xab54649700000000, |
| 870 | 0xf2ea229500000000, 0xc580e09400000000, 0xf8c7bc9f00000000, |
| 871 | 0xcfad7e9e00000000, 0x9613389c00000000, 0xa179fa9d00000000, |
| 872 | 0x246fb59800000000, 0x1305779900000000, 0x4abb319b00000000, |
| 873 | 0x7dd1f39a00000000, 0x3035898d00000000, 0x075f4b8c00000000, |
| 874 | 0x5ee10d8e00000000, 0x698bcf8f00000000, 0xec9d808a00000000, |
| 875 | 0xdbf7428b00000000, 0x8249048900000000, 0xb523c68800000000, |
| 876 | 0x88649a8300000000, 0xbf0e588200000000, 0xe6b01e8000000000, |
| 877 | 0xd1dadc8100000000, 0x54cc938400000000, 0x63a6518500000000, |
| 878 | 0x3a18178700000000, 0x0d72d58600000000, 0xa0d0e2a900000000, |
| 879 | 0x97ba20a800000000, 0xce0466aa00000000, 0xf96ea4ab00000000, |
| 880 | 0x7c78ebae00000000, 0x4b1229af00000000, 0x12ac6fad00000000, |
| 881 | 0x25c6adac00000000, 0x1881f1a700000000, 0x2feb33a600000000, |
| 882 | 0x765575a400000000, 0x413fb7a500000000, 0xc429f8a000000000, |
| 883 | 0xf3433aa100000000, 0xaafd7ca300000000, 0x9d97bea200000000, |
| 884 | 0xd073c4b500000000, 0xe71906b400000000, 0xbea740b600000000, |
| 885 | 0x89cd82b700000000, 0x0cdbcdb200000000, 0x3bb10fb300000000, |
| 886 | 0x620f49b100000000, 0x55658bb000000000, 0x6822d7bb00000000, |
| 887 | 0x5f4815ba00000000, 0x06f653b800000000, 0x319c91b900000000, |
| 888 | 0xb48adebc00000000, 0x83e01cbd00000000, 0xda5e5abf00000000, |
| 889 | 0xed3498be00000000}, |
| 890 | {0x0000000000000000, 0x6567bcb800000000, 0x8bc809aa00000000, |
| 891 | 0xeeafb51200000000, 0x5797628f00000000, 0x32f0de3700000000, |
| 892 | 0xdc5f6b2500000000, 0xb938d79d00000000, 0xef28b4c500000000, |
| 893 | 0x8a4f087d00000000, 0x64e0bd6f00000000, 0x018701d700000000, |
| 894 | 0xb8bfd64a00000000, 0xddd86af200000000, 0x3377dfe000000000, |
| 895 | 0x5610635800000000, 0x9f57195000000000, 0xfa30a5e800000000, |
| 896 | 0x149f10fa00000000, 0x71f8ac4200000000, 0xc8c07bdf00000000, |
| 897 | 0xada7c76700000000, 0x4308727500000000, 0x266fcecd00000000, |
| 898 | 0x707fad9500000000, 0x1518112d00000000, 0xfbb7a43f00000000, |
| 899 | 0x9ed0188700000000, 0x27e8cf1a00000000, 0x428f73a200000000, |
| 900 | 0xac20c6b000000000, 0xc9477a0800000000, 0x3eaf32a000000000, |
| 901 | 0x5bc88e1800000000, 0xb5673b0a00000000, 0xd00087b200000000, |
| 902 | 0x6938502f00000000, 0x0c5fec9700000000, 0xe2f0598500000000, |
| 903 | 0x8797e53d00000000, 0xd187866500000000, 0xb4e03add00000000, |
| 904 | 0x5a4f8fcf00000000, 0x3f28337700000000, 0x8610e4ea00000000, |
| 905 | 0xe377585200000000, 0x0dd8ed4000000000, 0x68bf51f800000000, |
| 906 | 0xa1f82bf000000000, 0xc49f974800000000, 0x2a30225a00000000, |
| 907 | 0x4f579ee200000000, 0xf66f497f00000000, 0x9308f5c700000000, |
| 908 | 0x7da740d500000000, 0x18c0fc6d00000000, 0x4ed09f3500000000, |
| 909 | 0x2bb7238d00000000, 0xc518969f00000000, 0xa07f2a2700000000, |
| 910 | 0x1947fdba00000000, 0x7c20410200000000, 0x928ff41000000000, |
| 911 | 0xf7e848a800000000, 0x3d58149b00000000, 0x583fa82300000000, |
| 912 | 0xb6901d3100000000, 0xd3f7a18900000000, 0x6acf761400000000, |
| 913 | 0x0fa8caac00000000, 0xe1077fbe00000000, 0x8460c30600000000, |
| 914 | 0xd270a05e00000000, 0xb7171ce600000000, 0x59b8a9f400000000, |
| 915 | 0x3cdf154c00000000, 0x85e7c2d100000000, 0xe0807e6900000000, |
| 916 | 0x0e2fcb7b00000000, 0x6b4877c300000000, 0xa20f0dcb00000000, |
| 917 | 0xc768b17300000000, 0x29c7046100000000, 0x4ca0b8d900000000, |
| 918 | 0xf5986f4400000000, 0x90ffd3fc00000000, 0x7e5066ee00000000, |
| 919 | 0x1b37da5600000000, 0x4d27b90e00000000, 0x284005b600000000, |
| 920 | 0xc6efb0a400000000, 0xa3880c1c00000000, 0x1ab0db8100000000, |
| 921 | 0x7fd7673900000000, 0x9178d22b00000000, 0xf41f6e9300000000, |
| 922 | 0x03f7263b00000000, 0x66909a8300000000, 0x883f2f9100000000, |
| 923 | 0xed58932900000000, 0x546044b400000000, 0x3107f80c00000000, |
| 924 | 0xdfa84d1e00000000, 0xbacff1a600000000, 0xecdf92fe00000000, |
| 925 | 0x89b82e4600000000, 0x67179b5400000000, 0x027027ec00000000, |
| 926 | 0xbb48f07100000000, 0xde2f4cc900000000, 0x3080f9db00000000, |
| 927 | 0x55e7456300000000, 0x9ca03f6b00000000, 0xf9c783d300000000, |
| 928 | 0x176836c100000000, 0x720f8a7900000000, 0xcb375de400000000, |
| 929 | 0xae50e15c00000000, 0x40ff544e00000000, 0x2598e8f600000000, |
| 930 | 0x73888bae00000000, 0x16ef371600000000, 0xf840820400000000, |
| 931 | 0x9d273ebc00000000, 0x241fe92100000000, 0x4178559900000000, |
| 932 | 0xafd7e08b00000000, 0xcab05c3300000000, 0x3bb659ed00000000, |
| 933 | 0x5ed1e55500000000, 0xb07e504700000000, 0xd519ecff00000000, |
| 934 | 0x6c213b6200000000, 0x094687da00000000, 0xe7e932c800000000, |
| 935 | 0x828e8e7000000000, 0xd49eed2800000000, 0xb1f9519000000000, |
| 936 | 0x5f56e48200000000, 0x3a31583a00000000, 0x83098fa700000000, |
| 937 | 0xe66e331f00000000, 0x08c1860d00000000, 0x6da63ab500000000, |
| 938 | 0xa4e140bd00000000, 0xc186fc0500000000, 0x2f29491700000000, |
| 939 | 0x4a4ef5af00000000, 0xf376223200000000, 0x96119e8a00000000, |
| 940 | 0x78be2b9800000000, 0x1dd9972000000000, 0x4bc9f47800000000, |
| 941 | 0x2eae48c000000000, 0xc001fdd200000000, 0xa566416a00000000, |
| 942 | 0x1c5e96f700000000, 0x79392a4f00000000, 0x97969f5d00000000, |
| 943 | 0xf2f123e500000000, 0x05196b4d00000000, 0x607ed7f500000000, |
| 944 | 0x8ed162e700000000, 0xebb6de5f00000000, 0x528e09c200000000, |
| 945 | 0x37e9b57a00000000, 0xd946006800000000, 0xbc21bcd000000000, |
| 946 | 0xea31df8800000000, 0x8f56633000000000, 0x61f9d62200000000, |
| 947 | 0x049e6a9a00000000, 0xbda6bd0700000000, 0xd8c101bf00000000, |
| 948 | 0x366eb4ad00000000, 0x5309081500000000, 0x9a4e721d00000000, |
| 949 | 0xff29cea500000000, 0x11867bb700000000, 0x74e1c70f00000000, |
| 950 | 0xcdd9109200000000, 0xa8beac2a00000000, 0x4611193800000000, |
| 951 | 0x2376a58000000000, 0x7566c6d800000000, 0x10017a6000000000, |
| 952 | 0xfeaecf7200000000, 0x9bc973ca00000000, 0x22f1a45700000000, |
| 953 | 0x479618ef00000000, 0xa939adfd00000000, 0xcc5e114500000000, |
| 954 | 0x06ee4d7600000000, 0x6389f1ce00000000, 0x8d2644dc00000000, |
| 955 | 0xe841f86400000000, 0x51792ff900000000, 0x341e934100000000, |
| 956 | 0xdab1265300000000, 0xbfd69aeb00000000, 0xe9c6f9b300000000, |
| 957 | 0x8ca1450b00000000, 0x620ef01900000000, 0x07694ca100000000, |
| 958 | 0xbe519b3c00000000, 0xdb36278400000000, 0x3599929600000000, |
| 959 | 0x50fe2e2e00000000, 0x99b9542600000000, 0xfcdee89e00000000, |
| 960 | 0x12715d8c00000000, 0x7716e13400000000, 0xce2e36a900000000, |
| 961 | 0xab498a1100000000, 0x45e63f0300000000, 0x208183bb00000000, |
| 962 | 0x7691e0e300000000, 0x13f65c5b00000000, 0xfd59e94900000000, |
| 963 | 0x983e55f100000000, 0x2106826c00000000, 0x44613ed400000000, |
| 964 | 0xaace8bc600000000, 0xcfa9377e00000000, 0x38417fd600000000, |
| 965 | 0x5d26c36e00000000, 0xb389767c00000000, 0xd6eecac400000000, |
| 966 | 0x6fd61d5900000000, 0x0ab1a1e100000000, 0xe41e14f300000000, |
| 967 | 0x8179a84b00000000, 0xd769cb1300000000, 0xb20e77ab00000000, |
| 968 | 0x5ca1c2b900000000, 0x39c67e0100000000, 0x80fea99c00000000, |
| 969 | 0xe599152400000000, 0x0b36a03600000000, 0x6e511c8e00000000, |
| 970 | 0xa716668600000000, 0xc271da3e00000000, 0x2cde6f2c00000000, |
| 971 | 0x49b9d39400000000, 0xf081040900000000, 0x95e6b8b100000000, |
| 972 | 0x7b490da300000000, 0x1e2eb11b00000000, 0x483ed24300000000, |
| 973 | 0x2d596efb00000000, 0xc3f6dbe900000000, 0xa691675100000000, |
| 974 | 0x1fa9b0cc00000000, 0x7ace0c7400000000, 0x9461b96600000000, |
| 975 | 0xf10605de00000000}, |
| 976 | {0x0000000000000000, 0xb029603d00000000, 0x6053c07a00000000, |
| 977 | 0xd07aa04700000000, 0xc0a680f500000000, 0x708fe0c800000000, |
| 978 | 0xa0f5408f00000000, 0x10dc20b200000000, 0xc14b703000000000, |
| 979 | 0x7162100d00000000, 0xa118b04a00000000, 0x1131d07700000000, |
| 980 | 0x01edf0c500000000, 0xb1c490f800000000, 0x61be30bf00000000, |
| 981 | 0xd197508200000000, 0x8297e06000000000, 0x32be805d00000000, |
| 982 | 0xe2c4201a00000000, 0x52ed402700000000, 0x4231609500000000, |
| 983 | 0xf21800a800000000, 0x2262a0ef00000000, 0x924bc0d200000000, |
| 984 | 0x43dc905000000000, 0xf3f5f06d00000000, 0x238f502a00000000, |
| 985 | 0x93a6301700000000, 0x837a10a500000000, 0x3353709800000000, |
| 986 | 0xe329d0df00000000, 0x5300b0e200000000, 0x042fc1c100000000, |
| 987 | 0xb406a1fc00000000, 0x647c01bb00000000, 0xd455618600000000, |
| 988 | 0xc489413400000000, 0x74a0210900000000, 0xa4da814e00000000, |
| 989 | 0x14f3e17300000000, 0xc564b1f100000000, 0x754dd1cc00000000, |
| 990 | 0xa537718b00000000, 0x151e11b600000000, 0x05c2310400000000, |
| 991 | 0xb5eb513900000000, 0x6591f17e00000000, 0xd5b8914300000000, |
| 992 | 0x86b821a100000000, 0x3691419c00000000, 0xe6ebe1db00000000, |
| 993 | 0x56c281e600000000, 0x461ea15400000000, 0xf637c16900000000, |
| 994 | 0x264d612e00000000, 0x9664011300000000, 0x47f3519100000000, |
| 995 | 0xf7da31ac00000000, 0x27a091eb00000000, 0x9789f1d600000000, |
| 996 | 0x8755d16400000000, 0x377cb15900000000, 0xe706111e00000000, |
| 997 | 0x572f712300000000, 0x4958f35800000000, 0xf971936500000000, |
| 998 | 0x290b332200000000, 0x9922531f00000000, 0x89fe73ad00000000, |
| 999 | 0x39d7139000000000, 0xe9adb3d700000000, 0x5984d3ea00000000, |
| 1000 | 0x8813836800000000, 0x383ae35500000000, 0xe840431200000000, |
| 1001 | 0x5869232f00000000, 0x48b5039d00000000, 0xf89c63a000000000, |
| 1002 | 0x28e6c3e700000000, 0x98cfa3da00000000, 0xcbcf133800000000, |
| 1003 | 0x7be6730500000000, 0xab9cd34200000000, 0x1bb5b37f00000000, |
| 1004 | 0x0b6993cd00000000, 0xbb40f3f000000000, 0x6b3a53b700000000, |
| 1005 | 0xdb13338a00000000, 0x0a84630800000000, 0xbaad033500000000, |
| 1006 | 0x6ad7a37200000000, 0xdafec34f00000000, 0xca22e3fd00000000, |
| 1007 | 0x7a0b83c000000000, 0xaa71238700000000, 0x1a5843ba00000000, |
| 1008 | 0x4d77329900000000, 0xfd5e52a400000000, 0x2d24f2e300000000, |
| 1009 | 0x9d0d92de00000000, 0x8dd1b26c00000000, 0x3df8d25100000000, |
| 1010 | 0xed82721600000000, 0x5dab122b00000000, 0x8c3c42a900000000, |
| 1011 | 0x3c15229400000000, 0xec6f82d300000000, 0x5c46e2ee00000000, |
| 1012 | 0x4c9ac25c00000000, 0xfcb3a26100000000, 0x2cc9022600000000, |
| 1013 | 0x9ce0621b00000000, 0xcfe0d2f900000000, 0x7fc9b2c400000000, |
| 1014 | 0xafb3128300000000, 0x1f9a72be00000000, 0x0f46520c00000000, |
| 1015 | 0xbf6f323100000000, 0x6f15927600000000, 0xdf3cf24b00000000, |
| 1016 | 0x0eaba2c900000000, 0xbe82c2f400000000, 0x6ef862b300000000, |
| 1017 | 0xded1028e00000000, 0xce0d223c00000000, 0x7e24420100000000, |
| 1018 | 0xae5ee24600000000, 0x1e77827b00000000, 0x92b0e6b100000000, |
| 1019 | 0x2299868c00000000, 0xf2e326cb00000000, 0x42ca46f600000000, |
| 1020 | 0x5216664400000000, 0xe23f067900000000, 0x3245a63e00000000, |
| 1021 | 0x826cc60300000000, 0x53fb968100000000, 0xe3d2f6bc00000000, |
| 1022 | 0x33a856fb00000000, 0x838136c600000000, 0x935d167400000000, |
| 1023 | 0x2374764900000000, 0xf30ed60e00000000, 0x4327b63300000000, |
| 1024 | 0x102706d100000000, 0xa00e66ec00000000, 0x7074c6ab00000000, |
| 1025 | 0xc05da69600000000, 0xd081862400000000, 0x60a8e61900000000, |
| 1026 | 0xb0d2465e00000000, 0x00fb266300000000, 0xd16c76e100000000, |
| 1027 | 0x614516dc00000000, 0xb13fb69b00000000, 0x0116d6a600000000, |
| 1028 | 0x11caf61400000000, 0xa1e3962900000000, 0x7199366e00000000, |
| 1029 | 0xc1b0565300000000, 0x969f277000000000, 0x26b6474d00000000, |
| 1030 | 0xf6cce70a00000000, 0x46e5873700000000, 0x5639a78500000000, |
| 1031 | 0xe610c7b800000000, 0x366a67ff00000000, 0x864307c200000000, |
| 1032 | 0x57d4574000000000, 0xe7fd377d00000000, 0x3787973a00000000, |
| 1033 | 0x87aef70700000000, 0x9772d7b500000000, 0x275bb78800000000, |
| 1034 | 0xf72117cf00000000, 0x470877f200000000, 0x1408c71000000000, |
| 1035 | 0xa421a72d00000000, 0x745b076a00000000, 0xc472675700000000, |
| 1036 | 0xd4ae47e500000000, 0x648727d800000000, 0xb4fd879f00000000, |
| 1037 | 0x04d4e7a200000000, 0xd543b72000000000, 0x656ad71d00000000, |
| 1038 | 0xb510775a00000000, 0x0539176700000000, 0x15e537d500000000, |
| 1039 | 0xa5cc57e800000000, 0x75b6f7af00000000, 0xc59f979200000000, |
| 1040 | 0xdbe815e900000000, 0x6bc175d400000000, 0xbbbbd59300000000, |
| 1041 | 0x0b92b5ae00000000, 0x1b4e951c00000000, 0xab67f52100000000, |
| 1042 | 0x7b1d556600000000, 0xcb34355b00000000, 0x1aa365d900000000, |
| 1043 | 0xaa8a05e400000000, 0x7af0a5a300000000, 0xcad9c59e00000000, |
| 1044 | 0xda05e52c00000000, 0x6a2c851100000000, 0xba56255600000000, |
| 1045 | 0x0a7f456b00000000, 0x597ff58900000000, 0xe95695b400000000, |
| 1046 | 0x392c35f300000000, 0x890555ce00000000, 0x99d9757c00000000, |
| 1047 | 0x29f0154100000000, 0xf98ab50600000000, 0x49a3d53b00000000, |
| 1048 | 0x983485b900000000, 0x281de58400000000, 0xf86745c300000000, |
| 1049 | 0x484e25fe00000000, 0x5892054c00000000, 0xe8bb657100000000, |
| 1050 | 0x38c1c53600000000, 0x88e8a50b00000000, 0xdfc7d42800000000, |
| 1051 | 0x6feeb41500000000, 0xbf94145200000000, 0x0fbd746f00000000, |
| 1052 | 0x1f6154dd00000000, 0xaf4834e000000000, 0x7f3294a700000000, |
| 1053 | 0xcf1bf49a00000000, 0x1e8ca41800000000, 0xaea5c42500000000, |
| 1054 | 0x7edf646200000000, 0xcef6045f00000000, 0xde2a24ed00000000, |
| 1055 | 0x6e0344d000000000, 0xbe79e49700000000, 0x0e5084aa00000000, |
| 1056 | 0x5d50344800000000, 0xed79547500000000, 0x3d03f43200000000, |
| 1057 | 0x8d2a940f00000000, 0x9df6b4bd00000000, 0x2ddfd48000000000, |
| 1058 | 0xfda574c700000000, 0x4d8c14fa00000000, 0x9c1b447800000000, |
| 1059 | 0x2c32244500000000, 0xfc48840200000000, 0x4c61e43f00000000, |
| 1060 | 0x5cbdc48d00000000, 0xec94a4b000000000, 0x3cee04f700000000, |
| 1061 | 0x8cc764ca00000000}, |
| 1062 | {0x0000000000000000, 0xa5d35ccb00000000, 0x0ba1c84d00000000, |
| 1063 | 0xae72948600000000, 0x1642919b00000000, 0xb391cd5000000000, |
| 1064 | 0x1de359d600000000, 0xb830051d00000000, 0x6d8253ec00000000, |
| 1065 | 0xc8510f2700000000, 0x66239ba100000000, 0xc3f0c76a00000000, |
| 1066 | 0x7bc0c27700000000, 0xde139ebc00000000, 0x70610a3a00000000, |
| 1067 | 0xd5b256f100000000, 0x9b02d60300000000, 0x3ed18ac800000000, |
| 1068 | 0x90a31e4e00000000, 0x3570428500000000, 0x8d40479800000000, |
| 1069 | 0x28931b5300000000, 0x86e18fd500000000, 0x2332d31e00000000, |
| 1070 | 0xf68085ef00000000, 0x5353d92400000000, 0xfd214da200000000, |
| 1071 | 0x58f2116900000000, 0xe0c2147400000000, 0x451148bf00000000, |
| 1072 | 0xeb63dc3900000000, 0x4eb080f200000000, 0x3605ac0700000000, |
| 1073 | 0x93d6f0cc00000000, 0x3da4644a00000000, 0x9877388100000000, |
| 1074 | 0x20473d9c00000000, 0x8594615700000000, 0x2be6f5d100000000, |
| 1075 | 0x8e35a91a00000000, 0x5b87ffeb00000000, 0xfe54a32000000000, |
| 1076 | 0x502637a600000000, 0xf5f56b6d00000000, 0x4dc56e7000000000, |
| 1077 | 0xe81632bb00000000, 0x4664a63d00000000, 0xe3b7faf600000000, |
| 1078 | 0xad077a0400000000, 0x08d426cf00000000, 0xa6a6b24900000000, |
| 1079 | 0x0375ee8200000000, 0xbb45eb9f00000000, 0x1e96b75400000000, |
| 1080 | 0xb0e423d200000000, 0x15377f1900000000, 0xc08529e800000000, |
| 1081 | 0x6556752300000000, 0xcb24e1a500000000, 0x6ef7bd6e00000000, |
| 1082 | 0xd6c7b87300000000, 0x7314e4b800000000, 0xdd66703e00000000, |
| 1083 | 0x78b52cf500000000, 0x6c0a580f00000000, 0xc9d904c400000000, |
| 1084 | 0x67ab904200000000, 0xc278cc8900000000, 0x7a48c99400000000, |
| 1085 | 0xdf9b955f00000000, 0x71e901d900000000, 0xd43a5d1200000000, |
| 1086 | 0x01880be300000000, 0xa45b572800000000, 0x0a29c3ae00000000, |
| 1087 | 0xaffa9f6500000000, 0x17ca9a7800000000, 0xb219c6b300000000, |
| 1088 | 0x1c6b523500000000, 0xb9b80efe00000000, 0xf7088e0c00000000, |
| 1089 | 0x52dbd2c700000000, 0xfca9464100000000, 0x597a1a8a00000000, |
| 1090 | 0xe14a1f9700000000, 0x4499435c00000000, 0xeaebd7da00000000, |
| 1091 | 0x4f388b1100000000, 0x9a8adde000000000, 0x3f59812b00000000, |
| 1092 | 0x912b15ad00000000, 0x34f8496600000000, 0x8cc84c7b00000000, |
| 1093 | 0x291b10b000000000, 0x8769843600000000, 0x22bad8fd00000000, |
| 1094 | 0x5a0ff40800000000, 0xffdca8c300000000, 0x51ae3c4500000000, |
| 1095 | 0xf47d608e00000000, 0x4c4d659300000000, 0xe99e395800000000, |
| 1096 | 0x47ecadde00000000, 0xe23ff11500000000, 0x378da7e400000000, |
| 1097 | 0x925efb2f00000000, 0x3c2c6fa900000000, 0x99ff336200000000, |
| 1098 | 0x21cf367f00000000, 0x841c6ab400000000, 0x2a6efe3200000000, |
| 1099 | 0x8fbda2f900000000, 0xc10d220b00000000, 0x64de7ec000000000, |
| 1100 | 0xcaacea4600000000, 0x6f7fb68d00000000, 0xd74fb39000000000, |
| 1101 | 0x729cef5b00000000, 0xdcee7bdd00000000, 0x793d271600000000, |
| 1102 | 0xac8f71e700000000, 0x095c2d2c00000000, 0xa72eb9aa00000000, |
| 1103 | 0x02fde56100000000, 0xbacde07c00000000, 0x1f1ebcb700000000, |
| 1104 | 0xb16c283100000000, 0x14bf74fa00000000, 0xd814b01e00000000, |
| 1105 | 0x7dc7ecd500000000, 0xd3b5785300000000, 0x7666249800000000, |
| 1106 | 0xce56218500000000, 0x6b857d4e00000000, 0xc5f7e9c800000000, |
| 1107 | 0x6024b50300000000, 0xb596e3f200000000, 0x1045bf3900000000, |
| 1108 | 0xbe372bbf00000000, 0x1be4777400000000, 0xa3d4726900000000, |
| 1109 | 0x06072ea200000000, 0xa875ba2400000000, 0x0da6e6ef00000000, |
| 1110 | 0x4316661d00000000, 0xe6c53ad600000000, 0x48b7ae5000000000, |
| 1111 | 0xed64f29b00000000, 0x5554f78600000000, 0xf087ab4d00000000, |
| 1112 | 0x5ef53fcb00000000, 0xfb26630000000000, 0x2e9435f100000000, |
| 1113 | 0x8b47693a00000000, 0x2535fdbc00000000, 0x80e6a17700000000, |
| 1114 | 0x38d6a46a00000000, 0x9d05f8a100000000, 0x33776c2700000000, |
| 1115 | 0x96a430ec00000000, 0xee111c1900000000, 0x4bc240d200000000, |
| 1116 | 0xe5b0d45400000000, 0x4063889f00000000, 0xf8538d8200000000, |
| 1117 | 0x5d80d14900000000, 0xf3f245cf00000000, 0x5621190400000000, |
| 1118 | 0x83934ff500000000, 0x2640133e00000000, 0x883287b800000000, |
| 1119 | 0x2de1db7300000000, 0x95d1de6e00000000, 0x300282a500000000, |
| 1120 | 0x9e70162300000000, 0x3ba34ae800000000, 0x7513ca1a00000000, |
| 1121 | 0xd0c096d100000000, 0x7eb2025700000000, 0xdb615e9c00000000, |
| 1122 | 0x63515b8100000000, 0xc682074a00000000, 0x68f093cc00000000, |
| 1123 | 0xcd23cf0700000000, 0x189199f600000000, 0xbd42c53d00000000, |
| 1124 | 0x133051bb00000000, 0xb6e30d7000000000, 0x0ed3086d00000000, |
| 1125 | 0xab0054a600000000, 0x0572c02000000000, 0xa0a19ceb00000000, |
| 1126 | 0xb41ee81100000000, 0x11cdb4da00000000, 0xbfbf205c00000000, |
| 1127 | 0x1a6c7c9700000000, 0xa25c798a00000000, 0x078f254100000000, |
| 1128 | 0xa9fdb1c700000000, 0x0c2eed0c00000000, 0xd99cbbfd00000000, |
| 1129 | 0x7c4fe73600000000, 0xd23d73b000000000, 0x77ee2f7b00000000, |
| 1130 | 0xcfde2a6600000000, 0x6a0d76ad00000000, 0xc47fe22b00000000, |
| 1131 | 0x61acbee000000000, 0x2f1c3e1200000000, 0x8acf62d900000000, |
| 1132 | 0x24bdf65f00000000, 0x816eaa9400000000, 0x395eaf8900000000, |
| 1133 | 0x9c8df34200000000, 0x32ff67c400000000, 0x972c3b0f00000000, |
| 1134 | 0x429e6dfe00000000, 0xe74d313500000000, 0x493fa5b300000000, |
| 1135 | 0xececf97800000000, 0x54dcfc6500000000, 0xf10fa0ae00000000, |
| 1136 | 0x5f7d342800000000, 0xfaae68e300000000, 0x821b441600000000, |
| 1137 | 0x27c818dd00000000, 0x89ba8c5b00000000, 0x2c69d09000000000, |
| 1138 | 0x9459d58d00000000, 0x318a894600000000, 0x9ff81dc000000000, |
| 1139 | 0x3a2b410b00000000, 0xef9917fa00000000, 0x4a4a4b3100000000, |
| 1140 | 0xe438dfb700000000, 0x41eb837c00000000, 0xf9db866100000000, |
| 1141 | 0x5c08daaa00000000, 0xf27a4e2c00000000, 0x57a912e700000000, |
| 1142 | 0x1919921500000000, 0xbccacede00000000, 0x12b85a5800000000, |
| 1143 | 0xb76b069300000000, 0x0f5b038e00000000, 0xaa885f4500000000, |
| 1144 | 0x04facbc300000000, 0xa129970800000000, 0x749bc1f900000000, |
| 1145 | 0xd1489d3200000000, 0x7f3a09b400000000, 0xdae9557f00000000, |
| 1146 | 0x62d9506200000000, 0xc70a0ca900000000, 0x6978982f00000000, |
| 1147 | 0xccabc4e400000000}, |
| 1148 | {0x0000000000000000, 0xb40b77a600000000, 0x29119f9700000000, |
| 1149 | 0x9d1ae83100000000, 0x13244ff400000000, 0xa72f385200000000, |
| 1150 | 0x3a35d06300000000, 0x8e3ea7c500000000, 0x674eef3300000000, |
| 1151 | 0xd345989500000000, 0x4e5f70a400000000, 0xfa54070200000000, |
| 1152 | 0x746aa0c700000000, 0xc061d76100000000, 0x5d7b3f5000000000, |
| 1153 | 0xe97048f600000000, 0xce9cde6700000000, 0x7a97a9c100000000, |
| 1154 | 0xe78d41f000000000, 0x5386365600000000, 0xddb8919300000000, |
| 1155 | 0x69b3e63500000000, 0xf4a90e0400000000, 0x40a279a200000000, |
| 1156 | 0xa9d2315400000000, 0x1dd946f200000000, 0x80c3aec300000000, |
| 1157 | 0x34c8d96500000000, 0xbaf67ea000000000, 0x0efd090600000000, |
| 1158 | 0x93e7e13700000000, 0x27ec969100000000, 0x9c39bdcf00000000, |
| 1159 | 0x2832ca6900000000, 0xb528225800000000, 0x012355fe00000000, |
| 1160 | 0x8f1df23b00000000, 0x3b16859d00000000, 0xa60c6dac00000000, |
| 1161 | 0x12071a0a00000000, 0xfb7752fc00000000, 0x4f7c255a00000000, |
| 1162 | 0xd266cd6b00000000, 0x666dbacd00000000, 0xe8531d0800000000, |
| 1163 | 0x5c586aae00000000, 0xc142829f00000000, 0x7549f53900000000, |
| 1164 | 0x52a563a800000000, 0xe6ae140e00000000, 0x7bb4fc3f00000000, |
| 1165 | 0xcfbf8b9900000000, 0x41812c5c00000000, 0xf58a5bfa00000000, |
| 1166 | 0x6890b3cb00000000, 0xdc9bc46d00000000, 0x35eb8c9b00000000, |
| 1167 | 0x81e0fb3d00000000, 0x1cfa130c00000000, 0xa8f164aa00000000, |
| 1168 | 0x26cfc36f00000000, 0x92c4b4c900000000, 0x0fde5cf800000000, |
| 1169 | 0xbbd52b5e00000000, 0x79750b4400000000, 0xcd7e7ce200000000, |
| 1170 | 0x506494d300000000, 0xe46fe37500000000, 0x6a5144b000000000, |
| 1171 | 0xde5a331600000000, 0x4340db2700000000, 0xf74bac8100000000, |
| 1172 | 0x1e3be47700000000, 0xaa3093d100000000, 0x372a7be000000000, |
| 1173 | 0x83210c4600000000, 0x0d1fab8300000000, 0xb914dc2500000000, |
| 1174 | 0x240e341400000000, 0x900543b200000000, 0xb7e9d52300000000, |
| 1175 | 0x03e2a28500000000, 0x9ef84ab400000000, 0x2af33d1200000000, |
| 1176 | 0xa4cd9ad700000000, 0x10c6ed7100000000, 0x8ddc054000000000, |
| 1177 | 0x39d772e600000000, 0xd0a73a1000000000, 0x64ac4db600000000, |
| 1178 | 0xf9b6a58700000000, 0x4dbdd22100000000, 0xc38375e400000000, |
| 1179 | 0x7788024200000000, 0xea92ea7300000000, 0x5e999dd500000000, |
| 1180 | 0xe54cb68b00000000, 0x5147c12d00000000, 0xcc5d291c00000000, |
| 1181 | 0x78565eba00000000, 0xf668f97f00000000, 0x42638ed900000000, |
| 1182 | 0xdf7966e800000000, 0x6b72114e00000000, 0x820259b800000000, |
| 1183 | 0x36092e1e00000000, 0xab13c62f00000000, 0x1f18b18900000000, |
| 1184 | 0x9126164c00000000, 0x252d61ea00000000, 0xb83789db00000000, |
| 1185 | 0x0c3cfe7d00000000, 0x2bd068ec00000000, 0x9fdb1f4a00000000, |
| 1186 | 0x02c1f77b00000000, 0xb6ca80dd00000000, 0x38f4271800000000, |
| 1187 | 0x8cff50be00000000, 0x11e5b88f00000000, 0xa5eecf2900000000, |
| 1188 | 0x4c9e87df00000000, 0xf895f07900000000, 0x658f184800000000, |
| 1189 | 0xd1846fee00000000, 0x5fbac82b00000000, 0xebb1bf8d00000000, |
| 1190 | 0x76ab57bc00000000, 0xc2a0201a00000000, 0xf2ea168800000000, |
| 1191 | 0x46e1612e00000000, 0xdbfb891f00000000, 0x6ff0feb900000000, |
| 1192 | 0xe1ce597c00000000, 0x55c52eda00000000, 0xc8dfc6eb00000000, |
| 1193 | 0x7cd4b14d00000000, 0x95a4f9bb00000000, 0x21af8e1d00000000, |
| 1194 | 0xbcb5662c00000000, 0x08be118a00000000, 0x8680b64f00000000, |
| 1195 | 0x328bc1e900000000, 0xaf9129d800000000, 0x1b9a5e7e00000000, |
| 1196 | 0x3c76c8ef00000000, 0x887dbf4900000000, 0x1567577800000000, |
| 1197 | 0xa16c20de00000000, 0x2f52871b00000000, 0x9b59f0bd00000000, |
| 1198 | 0x0643188c00000000, 0xb2486f2a00000000, 0x5b3827dc00000000, |
| 1199 | 0xef33507a00000000, 0x7229b84b00000000, 0xc622cfed00000000, |
| 1200 | 0x481c682800000000, 0xfc171f8e00000000, 0x610df7bf00000000, |
| 1201 | 0xd506801900000000, 0x6ed3ab4700000000, 0xdad8dce100000000, |
| 1202 | 0x47c234d000000000, 0xf3c9437600000000, 0x7df7e4b300000000, |
| 1203 | 0xc9fc931500000000, 0x54e67b2400000000, 0xe0ed0c8200000000, |
| 1204 | 0x099d447400000000, 0xbd9633d200000000, 0x208cdbe300000000, |
| 1205 | 0x9487ac4500000000, 0x1ab90b8000000000, 0xaeb27c2600000000, |
| 1206 | 0x33a8941700000000, 0x87a3e3b100000000, 0xa04f752000000000, |
| 1207 | 0x1444028600000000, 0x895eeab700000000, 0x3d559d1100000000, |
| 1208 | 0xb36b3ad400000000, 0x07604d7200000000, 0x9a7aa54300000000, |
| 1209 | 0x2e71d2e500000000, 0xc7019a1300000000, 0x730aedb500000000, |
| 1210 | 0xee10058400000000, 0x5a1b722200000000, 0xd425d5e700000000, |
| 1211 | 0x602ea24100000000, 0xfd344a7000000000, 0x493f3dd600000000, |
| 1212 | 0x8b9f1dcc00000000, 0x3f946a6a00000000, 0xa28e825b00000000, |
| 1213 | 0x1685f5fd00000000, 0x98bb523800000000, 0x2cb0259e00000000, |
| 1214 | 0xb1aacdaf00000000, 0x05a1ba0900000000, 0xecd1f2ff00000000, |
| 1215 | 0x58da855900000000, 0xc5c06d6800000000, 0x71cb1ace00000000, |
| 1216 | 0xfff5bd0b00000000, 0x4bfecaad00000000, 0xd6e4229c00000000, |
| 1217 | 0x62ef553a00000000, 0x4503c3ab00000000, 0xf108b40d00000000, |
| 1218 | 0x6c125c3c00000000, 0xd8192b9a00000000, 0x56278c5f00000000, |
| 1219 | 0xe22cfbf900000000, 0x7f3613c800000000, 0xcb3d646e00000000, |
| 1220 | 0x224d2c9800000000, 0x96465b3e00000000, 0x0b5cb30f00000000, |
| 1221 | 0xbf57c4a900000000, 0x3169636c00000000, 0x856214ca00000000, |
| 1222 | 0x1878fcfb00000000, 0xac738b5d00000000, 0x17a6a00300000000, |
| 1223 | 0xa3add7a500000000, 0x3eb73f9400000000, 0x8abc483200000000, |
| 1224 | 0x0482eff700000000, 0xb089985100000000, 0x2d93706000000000, |
| 1225 | 0x999807c600000000, 0x70e84f3000000000, 0xc4e3389600000000, |
| 1226 | 0x59f9d0a700000000, 0xedf2a70100000000, 0x63cc00c400000000, |
| 1227 | 0xd7c7776200000000, 0x4add9f5300000000, 0xfed6e8f500000000, |
| 1228 | 0xd93a7e6400000000, 0x6d3109c200000000, 0xf02be1f300000000, |
| 1229 | 0x4420965500000000, 0xca1e319000000000, 0x7e15463600000000, |
| 1230 | 0xe30fae0700000000, 0x5704d9a100000000, 0xbe74915700000000, |
| 1231 | 0x0a7fe6f100000000, 0x97650ec000000000, 0x236e796600000000, |
| 1232 | 0xad50dea300000000, 0x195ba90500000000, 0x8441413400000000, |
| 1233 | 0x304a369200000000}, |
| 1234 | {0x0000000000000000, 0x9e00aacc00000000, 0x7d07254200000000, |
| 1235 | 0xe3078f8e00000000, 0xfa0e4a8400000000, 0x640ee04800000000, |
| 1236 | 0x87096fc600000000, 0x1909c50a00000000, 0xb51be5d300000000, |
| 1237 | 0x2b1b4f1f00000000, 0xc81cc09100000000, 0x561c6a5d00000000, |
| 1238 | 0x4f15af5700000000, 0xd115059b00000000, 0x32128a1500000000, |
| 1239 | 0xac1220d900000000, 0x2b31bb7c00000000, 0xb53111b000000000, |
| 1240 | 0x56369e3e00000000, 0xc83634f200000000, 0xd13ff1f800000000, |
| 1241 | 0x4f3f5b3400000000, 0xac38d4ba00000000, 0x32387e7600000000, |
| 1242 | 0x9e2a5eaf00000000, 0x002af46300000000, 0xe32d7bed00000000, |
| 1243 | 0x7d2dd12100000000, 0x6424142b00000000, 0xfa24bee700000000, |
| 1244 | 0x1923316900000000, 0x87239ba500000000, 0x566276f900000000, |
| 1245 | 0xc862dc3500000000, 0x2b6553bb00000000, 0xb565f97700000000, |
| 1246 | 0xac6c3c7d00000000, 0x326c96b100000000, 0xd16b193f00000000, |
| 1247 | 0x4f6bb3f300000000, 0xe379932a00000000, 0x7d7939e600000000, |
| 1248 | 0x9e7eb66800000000, 0x007e1ca400000000, 0x1977d9ae00000000, |
| 1249 | 0x8777736200000000, 0x6470fcec00000000, 0xfa70562000000000, |
| 1250 | 0x7d53cd8500000000, 0xe353674900000000, 0x0054e8c700000000, |
| 1251 | 0x9e54420b00000000, 0x875d870100000000, 0x195d2dcd00000000, |
| 1252 | 0xfa5aa24300000000, 0x645a088f00000000, 0xc848285600000000, |
| 1253 | 0x5648829a00000000, 0xb54f0d1400000000, 0x2b4fa7d800000000, |
| 1254 | 0x324662d200000000, 0xac46c81e00000000, 0x4f41479000000000, |
| 1255 | 0xd141ed5c00000000, 0xedc29d2900000000, 0x73c237e500000000, |
| 1256 | 0x90c5b86b00000000, 0x0ec512a700000000, 0x17ccd7ad00000000, |
| 1257 | 0x89cc7d6100000000, 0x6acbf2ef00000000, 0xf4cb582300000000, |
| 1258 | 0x58d978fa00000000, 0xc6d9d23600000000, 0x25de5db800000000, |
| 1259 | 0xbbdef77400000000, 0xa2d7327e00000000, 0x3cd798b200000000, |
| 1260 | 0xdfd0173c00000000, 0x41d0bdf000000000, 0xc6f3265500000000, |
| 1261 | 0x58f38c9900000000, 0xbbf4031700000000, 0x25f4a9db00000000, |
| 1262 | 0x3cfd6cd100000000, 0xa2fdc61d00000000, 0x41fa499300000000, |
| 1263 | 0xdffae35f00000000, 0x73e8c38600000000, 0xede8694a00000000, |
| 1264 | 0x0eefe6c400000000, 0x90ef4c0800000000, 0x89e6890200000000, |
| 1265 | 0x17e623ce00000000, 0xf4e1ac4000000000, 0x6ae1068c00000000, |
| 1266 | 0xbba0ebd000000000, 0x25a0411c00000000, 0xc6a7ce9200000000, |
| 1267 | 0x58a7645e00000000, 0x41aea15400000000, 0xdfae0b9800000000, |
| 1268 | 0x3ca9841600000000, 0xa2a92eda00000000, 0x0ebb0e0300000000, |
| 1269 | 0x90bba4cf00000000, 0x73bc2b4100000000, 0xedbc818d00000000, |
| 1270 | 0xf4b5448700000000, 0x6ab5ee4b00000000, 0x89b261c500000000, |
| 1271 | 0x17b2cb0900000000, 0x909150ac00000000, 0x0e91fa6000000000, |
| 1272 | 0xed9675ee00000000, 0x7396df2200000000, 0x6a9f1a2800000000, |
| 1273 | 0xf49fb0e400000000, 0x17983f6a00000000, 0x899895a600000000, |
| 1274 | 0x258ab57f00000000, 0xbb8a1fb300000000, 0x588d903d00000000, |
| 1275 | 0xc68d3af100000000, 0xdf84fffb00000000, 0x4184553700000000, |
| 1276 | 0xa283dab900000000, 0x3c83707500000000, 0xda853b5300000000, |
| 1277 | 0x4485919f00000000, 0xa7821e1100000000, 0x3982b4dd00000000, |
| 1278 | 0x208b71d700000000, 0xbe8bdb1b00000000, 0x5d8c549500000000, |
| 1279 | 0xc38cfe5900000000, 0x6f9ede8000000000, 0xf19e744c00000000, |
| 1280 | 0x1299fbc200000000, 0x8c99510e00000000, 0x9590940400000000, |
| 1281 | 0x0b903ec800000000, 0xe897b14600000000, 0x76971b8a00000000, |
| 1282 | 0xf1b4802f00000000, 0x6fb42ae300000000, 0x8cb3a56d00000000, |
| 1283 | 0x12b30fa100000000, 0x0bbacaab00000000, 0x95ba606700000000, |
| 1284 | 0x76bdefe900000000, 0xe8bd452500000000, 0x44af65fc00000000, |
| 1285 | 0xdaafcf3000000000, 0x39a840be00000000, 0xa7a8ea7200000000, |
| 1286 | 0xbea12f7800000000, 0x20a185b400000000, 0xc3a60a3a00000000, |
| 1287 | 0x5da6a0f600000000, 0x8ce74daa00000000, 0x12e7e76600000000, |
| 1288 | 0xf1e068e800000000, 0x6fe0c22400000000, 0x76e9072e00000000, |
| 1289 | 0xe8e9ade200000000, 0x0bee226c00000000, 0x95ee88a000000000, |
| 1290 | 0x39fca87900000000, 0xa7fc02b500000000, 0x44fb8d3b00000000, |
| 1291 | 0xdafb27f700000000, 0xc3f2e2fd00000000, 0x5df2483100000000, |
| 1292 | 0xbef5c7bf00000000, 0x20f56d7300000000, 0xa7d6f6d600000000, |
| 1293 | 0x39d65c1a00000000, 0xdad1d39400000000, 0x44d1795800000000, |
| 1294 | 0x5dd8bc5200000000, 0xc3d8169e00000000, 0x20df991000000000, |
| 1295 | 0xbedf33dc00000000, 0x12cd130500000000, 0x8ccdb9c900000000, |
| 1296 | 0x6fca364700000000, 0xf1ca9c8b00000000, 0xe8c3598100000000, |
| 1297 | 0x76c3f34d00000000, 0x95c47cc300000000, 0x0bc4d60f00000000, |
| 1298 | 0x3747a67a00000000, 0xa9470cb600000000, 0x4a40833800000000, |
| 1299 | 0xd44029f400000000, 0xcd49ecfe00000000, 0x5349463200000000, |
| 1300 | 0xb04ec9bc00000000, 0x2e4e637000000000, 0x825c43a900000000, |
| 1301 | 0x1c5ce96500000000, 0xff5b66eb00000000, 0x615bcc2700000000, |
| 1302 | 0x7852092d00000000, 0xe652a3e100000000, 0x05552c6f00000000, |
| 1303 | 0x9b5586a300000000, 0x1c761d0600000000, 0x8276b7ca00000000, |
| 1304 | 0x6171384400000000, 0xff71928800000000, 0xe678578200000000, |
| 1305 | 0x7878fd4e00000000, 0x9b7f72c000000000, 0x057fd80c00000000, |
| 1306 | 0xa96df8d500000000, 0x376d521900000000, 0xd46add9700000000, |
| 1307 | 0x4a6a775b00000000, 0x5363b25100000000, 0xcd63189d00000000, |
| 1308 | 0x2e64971300000000, 0xb0643ddf00000000, 0x6125d08300000000, |
| 1309 | 0xff257a4f00000000, 0x1c22f5c100000000, 0x82225f0d00000000, |
| 1310 | 0x9b2b9a0700000000, 0x052b30cb00000000, 0xe62cbf4500000000, |
| 1311 | 0x782c158900000000, 0xd43e355000000000, 0x4a3e9f9c00000000, |
| 1312 | 0xa939101200000000, 0x3739bade00000000, 0x2e307fd400000000, |
| 1313 | 0xb030d51800000000, 0x53375a9600000000, 0xcd37f05a00000000, |
| 1314 | 0x4a146bff00000000, 0xd414c13300000000, 0x37134ebd00000000, |
| 1315 | 0xa913e47100000000, 0xb01a217b00000000, 0x2e1a8bb700000000, |
| 1316 | 0xcd1d043900000000, 0x531daef500000000, 0xff0f8e2c00000000, |
| 1317 | 0x610f24e000000000, 0x8208ab6e00000000, 0x1c0801a200000000, |
| 1318 | 0x0501c4a800000000, 0x9b016e6400000000, 0x7806e1ea00000000, |
| 1319 | 0xe6064b2600000000}}; |
| 1320 | |
| 1321 | #else /* W == 4 */ |
| 1322 | |
| 1323 | local const z_crc_t FAR crc_braid_table[][256] = { |
| 1324 | {0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757, |
| 1325 | 0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a, |
| 1326 | 0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733, |
| 1327 | 0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871, |
| 1328 | 0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70, |
| 1329 | 0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42, |
| 1330 | 0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5, |
| 1331 | 0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787, |
| 1332 | 0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086, |
| 1333 | 0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1, 0x48979fc4, |
| 1334 | 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d, |
| 1335 | 0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0, |
| 1336 | 0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d, |
| 1337 | 0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f, |
| 1338 | 0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859, |
| 1339 | 0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b, |
| 1340 | 0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5, |
| 1341 | 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028, |
| 1342 | 0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891, |
| 1343 | 0x936e1ff4, 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed, |
| 1344 | 0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec, |
| 1345 | 0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde, |
| 1346 | 0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, 0xc1366817, |
| 1347 | 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825, |
| 1348 | 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24, |
| 1349 | 0x99557841, 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e, |
| 1350 | 0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7, |
| 1351 | 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a, |
| 1352 | 0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4, |
| 1353 | 0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196, |
| 1354 | 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0, |
| 1355 | 0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2, |
| 1356 | 0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52, |
| 1357 | 0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f, |
| 1358 | 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36, |
| 1359 | 0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174, |
| 1360 | 0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675, |
| 1361 | 0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647, |
| 1362 | 0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d, |
| 1363 | 0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf, |
| 1364 | 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be, |
| 1365 | 0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc, |
| 1366 | 0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645, |
| 1367 | 0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98, |
| 1368 | 0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf, 0xd67f4138, |
| 1369 | 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a, |
| 1370 | 0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c, |
| 1371 | 0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e, |
| 1372 | 0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0, |
| 1373 | 0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d, |
| 1374 | 0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194, |
| 1375 | 0xde0506f1}, |
| 1376 | {0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc, |
| 1377 | 0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f, |
| 1378 | 0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a, |
| 1379 | 0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29, |
| 1380 | 0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8, |
| 1381 | 0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023, |
| 1382 | 0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e, |
| 1383 | 0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065, |
| 1384 | 0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84, |
| 1385 | 0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590, 0x25a98fa7, |
| 1386 | 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922, |
| 1387 | 0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71, |
| 1388 | 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0, |
| 1389 | 0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b, |
| 1390 | 0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816, |
| 1391 | 0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd, |
| 1392 | 0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c, |
| 1393 | 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f, |
| 1394 | 0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba, |
| 1395 | 0x67e0698d, 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579, |
| 1396 | 0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98, |
| 1397 | 0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873, |
| 1398 | 0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, 0x5775bc3e, |
| 1399 | 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5, |
| 1400 | 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134, |
| 1401 | 0x5c29fb03, 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7, |
| 1402 | 0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732, |
| 1403 | 0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461, |
| 1404 | 0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0, |
| 1405 | 0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b, |
| 1406 | 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26, |
| 1407 | 0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd, |
| 1408 | 0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc, |
| 1409 | 0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef, |
| 1410 | 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a, |
| 1411 | 0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049, |
| 1412 | 0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8, |
| 1413 | 0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43, |
| 1414 | 0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e, |
| 1415 | 0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5, |
| 1416 | 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24, |
| 1417 | 0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07, |
| 1418 | 0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982, |
| 1419 | 0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1, |
| 1420 | 0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d, 0xa9e2d0a0, |
| 1421 | 0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b, |
| 1422 | 0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576, |
| 1423 | 0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d, |
| 1424 | 0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c, |
| 1425 | 0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f, |
| 1426 | 0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda, |
| 1427 | 0xbe9834ed}, |
| 1428 | {0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504, |
| 1429 | 0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49, |
| 1430 | 0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e, |
| 1431 | 0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192, |
| 1432 | 0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859, |
| 1433 | 0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c, |
| 1434 | 0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620, |
| 1435 | 0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265, |
| 1436 | 0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae, |
| 1437 | 0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3, 0xc65d07b2, |
| 1438 | 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175, |
| 1439 | 0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38, |
| 1440 | 0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05, |
| 1441 | 0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40, |
| 1442 | 0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f, |
| 1443 | 0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca, |
| 1444 | 0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850, |
| 1445 | 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d, |
| 1446 | 0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da, |
| 1447 | 0x3d23419b, 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864, |
| 1448 | 0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af, |
| 1449 | 0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea, |
| 1450 | 0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, 0x1d091b74, |
| 1451 | 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31, |
| 1452 | 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa, |
| 1453 | 0x9a9107bb, 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a, |
| 1454 | 0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd, |
| 1455 | 0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180, |
| 1456 | 0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a, |
| 1457 | 0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f, |
| 1458 | 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290, |
| 1459 | 0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5, |
| 1460 | 0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed, |
| 1461 | 0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0, |
| 1462 | 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167, |
| 1463 | 0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b, |
| 1464 | 0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0, |
| 1465 | 0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5, |
| 1466 | 0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc, |
| 1467 | 0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189, |
| 1468 | 0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842, |
| 1469 | 0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e, |
| 1470 | 0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299, |
| 1471 | 0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4, |
| 1472 | 0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec, |
| 1473 | 0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9, |
| 1474 | 0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66, |
| 1475 | 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23, |
| 1476 | 0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9, |
| 1477 | 0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4, |
| 1478 | 0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33, |
| 1479 | 0x9324fd72}, |
| 1480 | {0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, |
| 1481 | 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, |
| 1482 | 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, |
| 1483 | 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, |
| 1484 | 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, |
| 1485 | 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, |
| 1486 | 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, |
| 1487 | 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, |
| 1488 | 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, |
| 1489 | 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, |
| 1490 | 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, |
| 1491 | 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, |
| 1492 | 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, |
| 1493 | 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, |
| 1494 | 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, |
| 1495 | 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, |
| 1496 | 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, |
| 1497 | 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, |
| 1498 | 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, |
| 1499 | 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, |
| 1500 | 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, |
| 1501 | 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, |
| 1502 | 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, |
| 1503 | 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, |
| 1504 | 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, |
| 1505 | 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, |
| 1506 | 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, |
| 1507 | 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, |
| 1508 | 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, |
| 1509 | 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, |
| 1510 | 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, |
| 1511 | 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, |
| 1512 | 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, |
| 1513 | 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, |
| 1514 | 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, |
| 1515 | 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, |
| 1516 | 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, |
| 1517 | 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, |
| 1518 | 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, |
| 1519 | 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, |
| 1520 | 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, |
| 1521 | 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, |
| 1522 | 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, |
| 1523 | 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, |
| 1524 | 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, |
| 1525 | 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, |
| 1526 | 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, |
| 1527 | 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, |
| 1528 | 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, |
| 1529 | 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, |
| 1530 | 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, |
| 1531 | 0x2d02ef8d}}; |
| 1532 | |
| 1533 | local const z_word_t FAR crc_braid_big_table[][256] = { |
| 1534 | {0x00000000, 0x96300777, 0x2c610eee, 0xba510999, 0x19c46d07, |
| 1535 | 0x8ff46a70, 0x35a563e9, 0xa395649e, 0x3288db0e, 0xa4b8dc79, |
| 1536 | 0x1ee9d5e0, 0x88d9d297, 0x2b4cb609, 0xbd7cb17e, 0x072db8e7, |
| 1537 | 0x911dbf90, 0x6410b71d, 0xf220b06a, 0x4871b9f3, 0xde41be84, |
| 1538 | 0x7dd4da1a, 0xebe4dd6d, 0x51b5d4f4, 0xc785d383, 0x56986c13, |
| 1539 | 0xc0a86b64, 0x7af962fd, 0xecc9658a, 0x4f5c0114, 0xd96c0663, |
| 1540 | 0x633d0ffa, 0xf50d088d, 0xc8206e3b, 0x5e10694c, 0xe44160d5, |
| 1541 | 0x727167a2, 0xd1e4033c, 0x47d4044b, 0xfd850dd2, 0x6bb50aa5, |
| 1542 | 0xfaa8b535, 0x6c98b242, 0xd6c9bbdb, 0x40f9bcac, 0xe36cd832, |
| 1543 | 0x755cdf45, 0xcf0dd6dc, 0x593dd1ab, 0xac30d926, 0x3a00de51, |
| 1544 | 0x8051d7c8, 0x1661d0bf, 0xb5f4b421, 0x23c4b356, 0x9995bacf, |
| 1545 | 0x0fa5bdb8, 0x9eb80228, 0x0888055f, 0xb2d90cc6, 0x24e90bb1, |
| 1546 | 0x877c6f2f, 0x114c6858, 0xab1d61c1, 0x3d2d66b6, 0x9041dc76, |
| 1547 | 0x0671db01, 0xbc20d298, 0x2a10d5ef, 0x8985b171, 0x1fb5b606, |
| 1548 | 0xa5e4bf9f, 0x33d4b8e8, 0xa2c90778, 0x34f9000f, 0x8ea80996, |
| 1549 | 0x18980ee1, 0xbb0d6a7f, 0x2d3d6d08, 0x976c6491, 0x015c63e6, |
| 1550 | 0xf4516b6b, 0x62616c1c, 0xd8306585, 0x4e0062f2, 0xed95066c, |
| 1551 | 0x7ba5011b, 0xc1f40882, 0x57c40ff5, 0xc6d9b065, 0x50e9b712, |
| 1552 | 0xeab8be8b, 0x7c88b9fc, 0xdf1ddd62, 0x492dda15, 0xf37cd38c, |
| 1553 | 0x654cd4fb, 0x5861b24d, 0xce51b53a, 0x7400bca3, 0xe230bbd4, |
| 1554 | 0x41a5df4a, 0xd795d83d, 0x6dc4d1a4, 0xfbf4d6d3, 0x6ae96943, |
| 1555 | 0xfcd96e34, 0x468867ad, 0xd0b860da, 0x732d0444, 0xe51d0333, |
| 1556 | 0x5f4c0aaa, 0xc97c0ddd, 0x3c710550, 0xaa410227, 0x10100bbe, |
| 1557 | 0x86200cc9, 0x25b56857, 0xb3856f20, 0x09d466b9, 0x9fe461ce, |
| 1558 | 0x0ef9de5e, 0x98c9d929, 0x2298d0b0, 0xb4a8d7c7, 0x173db359, |
| 1559 | 0x810db42e, 0x3b5cbdb7, 0xad6cbac0, 0x2083b8ed, 0xb6b3bf9a, |
| 1560 | 0x0ce2b603, 0x9ad2b174, 0x3947d5ea, 0xaf77d29d, 0x1526db04, |
| 1561 | 0x8316dc73, 0x120b63e3, 0x843b6494, 0x3e6a6d0d, 0xa85a6a7a, |
| 1562 | 0x0bcf0ee4, 0x9dff0993, 0x27ae000a, 0xb19e077d, 0x44930ff0, |
| 1563 | 0xd2a30887, 0x68f2011e, 0xfec20669, 0x5d5762f7, 0xcb676580, |
| 1564 | 0x71366c19, 0xe7066b6e, 0x761bd4fe, 0xe02bd389, 0x5a7ada10, |
| 1565 | 0xcc4add67, 0x6fdfb9f9, 0xf9efbe8e, 0x43beb717, 0xd58eb060, |
| 1566 | 0xe8a3d6d6, 0x7e93d1a1, 0xc4c2d838, 0x52f2df4f, 0xf167bbd1, |
| 1567 | 0x6757bca6, 0xdd06b53f, 0x4b36b248, 0xda2b0dd8, 0x4c1b0aaf, |
| 1568 | 0xf64a0336, 0x607a0441, 0xc3ef60df, 0x55df67a8, 0xef8e6e31, |
| 1569 | 0x79be6946, 0x8cb361cb, 0x1a8366bc, 0xa0d26f25, 0x36e26852, |
| 1570 | 0x95770ccc, 0x03470bbb, 0xb9160222, 0x2f260555, 0xbe3bbac5, |
| 1571 | 0x280bbdb2, 0x925ab42b, 0x046ab35c, 0xa7ffd7c2, 0x31cfd0b5, |
| 1572 | 0x8b9ed92c, 0x1daede5b, 0xb0c2649b, 0x26f263ec, 0x9ca36a75, |
| 1573 | 0x0a936d02, 0xa906099c, 0x3f360eeb, 0x85670772, 0x13570005, |
| 1574 | 0x824abf95, 0x147ab8e2, 0xae2bb17b, 0x381bb60c, 0x9b8ed292, |
| 1575 | 0x0dbed5e5, 0xb7efdc7c, 0x21dfdb0b, 0xd4d2d386, 0x42e2d4f1, |
| 1576 | 0xf8b3dd68, 0x6e83da1f, 0xcd16be81, 0x5b26b9f6, 0xe177b06f, |
| 1577 | 0x7747b718, 0xe65a0888, 0x706a0fff, 0xca3b0666, 0x5c0b0111, |
| 1578 | 0xff9e658f, 0x69ae62f8, 0xd3ff6b61, 0x45cf6c16, 0x78e20aa0, |
| 1579 | 0xeed20dd7, 0x5483044e, 0xc2b30339, 0x612667a7, 0xf71660d0, |
| 1580 | 0x4d476949, 0xdb776e3e, 0x4a6ad1ae, 0xdc5ad6d9, 0x660bdf40, |
| 1581 | 0xf03bd837, 0x53aebca9, 0xc59ebbde, 0x7fcfb247, 0xe9ffb530, |
| 1582 | 0x1cf2bdbd, 0x8ac2baca, 0x3093b353, 0xa6a3b424, 0x0536d0ba, |
| 1583 | 0x9306d7cd, 0x2957de54, 0xbf67d923, 0x2e7a66b3, 0xb84a61c4, |
| 1584 | 0x021b685d, 0x942b6f2a, 0x37be0bb4, 0xa18e0cc3, 0x1bdf055a, |
| 1585 | 0x8def022d}, |
| 1586 | {0x00000000, 0x41311b19, 0x82623632, 0xc3532d2b, 0x04c56c64, |
| 1587 | 0x45f4777d, 0x86a75a56, 0xc796414f, 0x088ad9c8, 0x49bbc2d1, |
| 1588 | 0x8ae8effa, 0xcbd9f4e3, 0x0c4fb5ac, 0x4d7eaeb5, 0x8e2d839e, |
| 1589 | 0xcf1c9887, 0x5112c24a, 0x1023d953, 0xd370f478, 0x9241ef61, |
| 1590 | 0x55d7ae2e, 0x14e6b537, 0xd7b5981c, 0x96848305, 0x59981b82, |
| 1591 | 0x18a9009b, 0xdbfa2db0, 0x9acb36a9, 0x5d5d77e6, 0x1c6c6cff, |
| 1592 | 0xdf3f41d4, 0x9e0e5acd, 0xa2248495, 0xe3159f8c, 0x2046b2a7, |
| 1593 | 0x6177a9be, 0xa6e1e8f1, 0xe7d0f3e8, 0x2483dec3, 0x65b2c5da, |
| 1594 | 0xaaae5d5d, 0xeb9f4644, 0x28cc6b6f, 0x69fd7076, 0xae6b3139, |
| 1595 | 0xef5a2a20, 0x2c09070b, 0x6d381c12, 0xf33646df, 0xb2075dc6, |
| 1596 | 0x715470ed, 0x30656bf4, 0xf7f32abb, 0xb6c231a2, 0x75911c89, |
| 1597 | 0x34a00790, 0xfbbc9f17, 0xba8d840e, 0x79dea925, 0x38efb23c, |
| 1598 | 0xff79f373, 0xbe48e86a, 0x7d1bc541, 0x3c2ade58, 0x054f79f0, |
| 1599 | 0x447e62e9, 0x872d4fc2, 0xc61c54db, 0x018a1594, 0x40bb0e8d, |
| 1600 | 0x83e823a6, 0xc2d938bf, 0x0dc5a038, 0x4cf4bb21, 0x8fa7960a, |
| 1601 | 0xce968d13, 0x0900cc5c, 0x4831d745, 0x8b62fa6e, 0xca53e177, |
| 1602 | 0x545dbbba, 0x156ca0a3, 0xd63f8d88, 0x970e9691, 0x5098d7de, |
| 1603 | 0x11a9ccc7, 0xd2fae1ec, 0x93cbfaf5, 0x5cd76272, 0x1de6796b, |
| 1604 | 0xdeb55440, 0x9f844f59, 0x58120e16, 0x1923150f, 0xda703824, |
| 1605 | 0x9b41233d, 0xa76bfd65, 0xe65ae67c, 0x2509cb57, 0x6438d04e, |
| 1606 | 0xa3ae9101, 0xe29f8a18, 0x21cca733, 0x60fdbc2a, 0xafe124ad, |
| 1607 | 0xeed03fb4, 0x2d83129f, 0x6cb20986, 0xab2448c9, 0xea1553d0, |
| 1608 | 0x29467efb, 0x687765e2, 0xf6793f2f, 0xb7482436, 0x741b091d, |
| 1609 | 0x352a1204, 0xf2bc534b, 0xb38d4852, 0x70de6579, 0x31ef7e60, |
| 1610 | 0xfef3e6e7, 0xbfc2fdfe, 0x7c91d0d5, 0x3da0cbcc, 0xfa368a83, |
| 1611 | 0xbb07919a, 0x7854bcb1, 0x3965a7a8, 0x4b98833b, 0x0aa99822, |
| 1612 | 0xc9fab509, 0x88cbae10, 0x4f5def5f, 0x0e6cf446, 0xcd3fd96d, |
| 1613 | 0x8c0ec274, 0x43125af3, 0x022341ea, 0xc1706cc1, 0x804177d8, |
| 1614 | 0x47d73697, 0x06e62d8e, 0xc5b500a5, 0x84841bbc, 0x1a8a4171, |
| 1615 | 0x5bbb5a68, 0x98e87743, 0xd9d96c5a, 0x1e4f2d15, 0x5f7e360c, |
| 1616 | 0x9c2d1b27, 0xdd1c003e, 0x120098b9, 0x533183a0, 0x9062ae8b, |
| 1617 | 0xd153b592, 0x16c5f4dd, 0x57f4efc4, 0x94a7c2ef, 0xd596d9f6, |
| 1618 | 0xe9bc07ae, 0xa88d1cb7, 0x6bde319c, 0x2aef2a85, 0xed796bca, |
| 1619 | 0xac4870d3, 0x6f1b5df8, 0x2e2a46e1, 0xe136de66, 0xa007c57f, |
| 1620 | 0x6354e854, 0x2265f34d, 0xe5f3b202, 0xa4c2a91b, 0x67918430, |
| 1621 | 0x26a09f29, 0xb8aec5e4, 0xf99fdefd, 0x3accf3d6, 0x7bfde8cf, |
| 1622 | 0xbc6ba980, 0xfd5ab299, 0x3e099fb2, 0x7f3884ab, 0xb0241c2c, |
| 1623 | 0xf1150735, 0x32462a1e, 0x73773107, 0xb4e17048, 0xf5d06b51, |
| 1624 | 0x3683467a, 0x77b25d63, 0x4ed7facb, 0x0fe6e1d2, 0xccb5ccf9, |
| 1625 | 0x8d84d7e0, 0x4a1296af, 0x0b238db6, 0xc870a09d, 0x8941bb84, |
| 1626 | 0x465d2303, 0x076c381a, 0xc43f1531, 0x850e0e28, 0x42984f67, |
| 1627 | 0x03a9547e, 0xc0fa7955, 0x81cb624c, 0x1fc53881, 0x5ef42398, |
| 1628 | 0x9da70eb3, 0xdc9615aa, 0x1b0054e5, 0x5a314ffc, 0x996262d7, |
| 1629 | 0xd85379ce, 0x174fe149, 0x567efa50, 0x952dd77b, 0xd41ccc62, |
| 1630 | 0x138a8d2d, 0x52bb9634, 0x91e8bb1f, 0xd0d9a006, 0xecf37e5e, |
| 1631 | 0xadc26547, 0x6e91486c, 0x2fa05375, 0xe836123a, 0xa9070923, |
| 1632 | 0x6a542408, 0x2b653f11, 0xe479a796, 0xa548bc8f, 0x661b91a4, |
| 1633 | 0x272a8abd, 0xe0bccbf2, 0xa18dd0eb, 0x62defdc0, 0x23efe6d9, |
| 1634 | 0xbde1bc14, 0xfcd0a70d, 0x3f838a26, 0x7eb2913f, 0xb924d070, |
| 1635 | 0xf815cb69, 0x3b46e642, 0x7a77fd5b, 0xb56b65dc, 0xf45a7ec5, |
| 1636 | 0x370953ee, 0x763848f7, 0xb1ae09b8, 0xf09f12a1, 0x33cc3f8a, |
| 1637 | 0x72fd2493}, |
| 1638 | {0x00000000, 0x376ac201, 0x6ed48403, 0x59be4602, 0xdca80907, |
| 1639 | 0xebc2cb06, 0xb27c8d04, 0x85164f05, 0xb851130e, 0x8f3bd10f, |
| 1640 | 0xd685970d, 0xe1ef550c, 0x64f91a09, 0x5393d808, 0x0a2d9e0a, |
| 1641 | 0x3d475c0b, 0x70a3261c, 0x47c9e41d, 0x1e77a21f, 0x291d601e, |
| 1642 | 0xac0b2f1b, 0x9b61ed1a, 0xc2dfab18, 0xf5b56919, 0xc8f23512, |
| 1643 | 0xff98f713, 0xa626b111, 0x914c7310, 0x145a3c15, 0x2330fe14, |
| 1644 | 0x7a8eb816, 0x4de47a17, 0xe0464d38, 0xd72c8f39, 0x8e92c93b, |
| 1645 | 0xb9f80b3a, 0x3cee443f, 0x0b84863e, 0x523ac03c, 0x6550023d, |
| 1646 | 0x58175e36, 0x6f7d9c37, 0x36c3da35, 0x01a91834, 0x84bf5731, |
| 1647 | 0xb3d59530, 0xea6bd332, 0xdd011133, 0x90e56b24, 0xa78fa925, |
| 1648 | 0xfe31ef27, 0xc95b2d26, 0x4c4d6223, 0x7b27a022, 0x2299e620, |
| 1649 | 0x15f32421, 0x28b4782a, 0x1fdeba2b, 0x4660fc29, 0x710a3e28, |
| 1650 | 0xf41c712d, 0xc376b32c, 0x9ac8f52e, 0xada2372f, 0xc08d9a70, |
| 1651 | 0xf7e75871, 0xae591e73, 0x9933dc72, 0x1c259377, 0x2b4f5176, |
| 1652 | 0x72f11774, 0x459bd575, 0x78dc897e, 0x4fb64b7f, 0x16080d7d, |
| 1653 | 0x2162cf7c, 0xa4748079, 0x931e4278, 0xcaa0047a, 0xfdcac67b, |
| 1654 | 0xb02ebc6c, 0x87447e6d, 0xdefa386f, 0xe990fa6e, 0x6c86b56b, |
| 1655 | 0x5bec776a, 0x02523168, 0x3538f369, 0x087faf62, 0x3f156d63, |
| 1656 | 0x66ab2b61, 0x51c1e960, 0xd4d7a665, 0xe3bd6464, 0xba032266, |
| 1657 | 0x8d69e067, 0x20cbd748, 0x17a11549, 0x4e1f534b, 0x7975914a, |
| 1658 | 0xfc63de4f, 0xcb091c4e, 0x92b75a4c, 0xa5dd984d, 0x989ac446, |
| 1659 | 0xaff00647, 0xf64e4045, 0xc1248244, 0x4432cd41, 0x73580f40, |
| 1660 | 0x2ae64942, 0x1d8c8b43, 0x5068f154, 0x67023355, 0x3ebc7557, |
| 1661 | 0x09d6b756, 0x8cc0f853, 0xbbaa3a52, 0xe2147c50, 0xd57ebe51, |
| 1662 | 0xe839e25a, 0xdf53205b, 0x86ed6659, 0xb187a458, 0x3491eb5d, |
| 1663 | 0x03fb295c, 0x5a456f5e, 0x6d2fad5f, 0x801b35e1, 0xb771f7e0, |
| 1664 | 0xeecfb1e2, 0xd9a573e3, 0x5cb33ce6, 0x6bd9fee7, 0x3267b8e5, |
| 1665 | 0x050d7ae4, 0x384a26ef, 0x0f20e4ee, 0x569ea2ec, 0x61f460ed, |
| 1666 | 0xe4e22fe8, 0xd388ede9, 0x8a36abeb, 0xbd5c69ea, 0xf0b813fd, |
| 1667 | 0xc7d2d1fc, 0x9e6c97fe, 0xa90655ff, 0x2c101afa, 0x1b7ad8fb, |
| 1668 | 0x42c49ef9, 0x75ae5cf8, 0x48e900f3, 0x7f83c2f2, 0x263d84f0, |
| 1669 | 0x115746f1, 0x944109f4, 0xa32bcbf5, 0xfa958df7, 0xcdff4ff6, |
| 1670 | 0x605d78d9, 0x5737bad8, 0x0e89fcda, 0x39e33edb, 0xbcf571de, |
| 1671 | 0x8b9fb3df, 0xd221f5dd, 0xe54b37dc, 0xd80c6bd7, 0xef66a9d6, |
| 1672 | 0xb6d8efd4, 0x81b22dd5, 0x04a462d0, 0x33cea0d1, 0x6a70e6d3, |
| 1673 | 0x5d1a24d2, 0x10fe5ec5, 0x27949cc4, 0x7e2adac6, 0x494018c7, |
| 1674 | 0xcc5657c2, 0xfb3c95c3, 0xa282d3c1, 0x95e811c0, 0xa8af4dcb, |
| 1675 | 0x9fc58fca, 0xc67bc9c8, 0xf1110bc9, 0x740744cc, 0x436d86cd, |
| 1676 | 0x1ad3c0cf, 0x2db902ce, 0x4096af91, 0x77fc6d90, 0x2e422b92, |
| 1677 | 0x1928e993, 0x9c3ea696, 0xab546497, 0xf2ea2295, 0xc580e094, |
| 1678 | 0xf8c7bc9f, 0xcfad7e9e, 0x9613389c, 0xa179fa9d, 0x246fb598, |
| 1679 | 0x13057799, 0x4abb319b, 0x7dd1f39a, 0x3035898d, 0x075f4b8c, |
| 1680 | 0x5ee10d8e, 0x698bcf8f, 0xec9d808a, 0xdbf7428b, 0x82490489, |
| 1681 | 0xb523c688, 0x88649a83, 0xbf0e5882, 0xe6b01e80, 0xd1dadc81, |
| 1682 | 0x54cc9384, 0x63a65185, 0x3a181787, 0x0d72d586, 0xa0d0e2a9, |
| 1683 | 0x97ba20a8, 0xce0466aa, 0xf96ea4ab, 0x7c78ebae, 0x4b1229af, |
| 1684 | 0x12ac6fad, 0x25c6adac, 0x1881f1a7, 0x2feb33a6, 0x765575a4, |
| 1685 | 0x413fb7a5, 0xc429f8a0, 0xf3433aa1, 0xaafd7ca3, 0x9d97bea2, |
| 1686 | 0xd073c4b5, 0xe71906b4, 0xbea740b6, 0x89cd82b7, 0x0cdbcdb2, |
| 1687 | 0x3bb10fb3, 0x620f49b1, 0x55658bb0, 0x6822d7bb, 0x5f4815ba, |
| 1688 | 0x06f653b8, 0x319c91b9, 0xb48adebc, 0x83e01cbd, 0xda5e5abf, |
| 1689 | 0xed3498be}, |
| 1690 | {0x00000000, 0x6567bcb8, 0x8bc809aa, 0xeeafb512, 0x5797628f, |
| 1691 | 0x32f0de37, 0xdc5f6b25, 0xb938d79d, 0xef28b4c5, 0x8a4f087d, |
| 1692 | 0x64e0bd6f, 0x018701d7, 0xb8bfd64a, 0xddd86af2, 0x3377dfe0, |
| 1693 | 0x56106358, 0x9f571950, 0xfa30a5e8, 0x149f10fa, 0x71f8ac42, |
| 1694 | 0xc8c07bdf, 0xada7c767, 0x43087275, 0x266fcecd, 0x707fad95, |
| 1695 | 0x1518112d, 0xfbb7a43f, 0x9ed01887, 0x27e8cf1a, 0x428f73a2, |
| 1696 | 0xac20c6b0, 0xc9477a08, 0x3eaf32a0, 0x5bc88e18, 0xb5673b0a, |
| 1697 | 0xd00087b2, 0x6938502f, 0x0c5fec97, 0xe2f05985, 0x8797e53d, |
| 1698 | 0xd1878665, 0xb4e03add, 0x5a4f8fcf, 0x3f283377, 0x8610e4ea, |
| 1699 | 0xe3775852, 0x0dd8ed40, 0x68bf51f8, 0xa1f82bf0, 0xc49f9748, |
| 1700 | 0x2a30225a, 0x4f579ee2, 0xf66f497f, 0x9308f5c7, 0x7da740d5, |
| 1701 | 0x18c0fc6d, 0x4ed09f35, 0x2bb7238d, 0xc518969f, 0xa07f2a27, |
| 1702 | 0x1947fdba, 0x7c204102, 0x928ff410, 0xf7e848a8, 0x3d58149b, |
| 1703 | 0x583fa823, 0xb6901d31, 0xd3f7a189, 0x6acf7614, 0x0fa8caac, |
| 1704 | 0xe1077fbe, 0x8460c306, 0xd270a05e, 0xb7171ce6, 0x59b8a9f4, |
| 1705 | 0x3cdf154c, 0x85e7c2d1, 0xe0807e69, 0x0e2fcb7b, 0x6b4877c3, |
| 1706 | 0xa20f0dcb, 0xc768b173, 0x29c70461, 0x4ca0b8d9, 0xf5986f44, |
| 1707 | 0x90ffd3fc, 0x7e5066ee, 0x1b37da56, 0x4d27b90e, 0x284005b6, |
| 1708 | 0xc6efb0a4, 0xa3880c1c, 0x1ab0db81, 0x7fd76739, 0x9178d22b, |
| 1709 | 0xf41f6e93, 0x03f7263b, 0x66909a83, 0x883f2f91, 0xed589329, |
| 1710 | 0x546044b4, 0x3107f80c, 0xdfa84d1e, 0xbacff1a6, 0xecdf92fe, |
| 1711 | 0x89b82e46, 0x67179b54, 0x027027ec, 0xbb48f071, 0xde2f4cc9, |
| 1712 | 0x3080f9db, 0x55e74563, 0x9ca03f6b, 0xf9c783d3, 0x176836c1, |
| 1713 | 0x720f8a79, 0xcb375de4, 0xae50e15c, 0x40ff544e, 0x2598e8f6, |
| 1714 | 0x73888bae, 0x16ef3716, 0xf8408204, 0x9d273ebc, 0x241fe921, |
| 1715 | 0x41785599, 0xafd7e08b, 0xcab05c33, 0x3bb659ed, 0x5ed1e555, |
| 1716 | 0xb07e5047, 0xd519ecff, 0x6c213b62, 0x094687da, 0xe7e932c8, |
| 1717 | 0x828e8e70, 0xd49eed28, 0xb1f95190, 0x5f56e482, 0x3a31583a, |
| 1718 | 0x83098fa7, 0xe66e331f, 0x08c1860d, 0x6da63ab5, 0xa4e140bd, |
| 1719 | 0xc186fc05, 0x2f294917, 0x4a4ef5af, 0xf3762232, 0x96119e8a, |
| 1720 | 0x78be2b98, 0x1dd99720, 0x4bc9f478, 0x2eae48c0, 0xc001fdd2, |
| 1721 | 0xa566416a, 0x1c5e96f7, 0x79392a4f, 0x97969f5d, 0xf2f123e5, |
| 1722 | 0x05196b4d, 0x607ed7f5, 0x8ed162e7, 0xebb6de5f, 0x528e09c2, |
| 1723 | 0x37e9b57a, 0xd9460068, 0xbc21bcd0, 0xea31df88, 0x8f566330, |
| 1724 | 0x61f9d622, 0x049e6a9a, 0xbda6bd07, 0xd8c101bf, 0x366eb4ad, |
| 1725 | 0x53090815, 0x9a4e721d, 0xff29cea5, 0x11867bb7, 0x74e1c70f, |
| 1726 | 0xcdd91092, 0xa8beac2a, 0x46111938, 0x2376a580, 0x7566c6d8, |
| 1727 | 0x10017a60, 0xfeaecf72, 0x9bc973ca, 0x22f1a457, 0x479618ef, |
| 1728 | 0xa939adfd, 0xcc5e1145, 0x06ee4d76, 0x6389f1ce, 0x8d2644dc, |
| 1729 | 0xe841f864, 0x51792ff9, 0x341e9341, 0xdab12653, 0xbfd69aeb, |
| 1730 | 0xe9c6f9b3, 0x8ca1450b, 0x620ef019, 0x07694ca1, 0xbe519b3c, |
| 1731 | 0xdb362784, 0x35999296, 0x50fe2e2e, 0x99b95426, 0xfcdee89e, |
| 1732 | 0x12715d8c, 0x7716e134, 0xce2e36a9, 0xab498a11, 0x45e63f03, |
| 1733 | 0x208183bb, 0x7691e0e3, 0x13f65c5b, 0xfd59e949, 0x983e55f1, |
| 1734 | 0x2106826c, 0x44613ed4, 0xaace8bc6, 0xcfa9377e, 0x38417fd6, |
| 1735 | 0x5d26c36e, 0xb389767c, 0xd6eecac4, 0x6fd61d59, 0x0ab1a1e1, |
| 1736 | 0xe41e14f3, 0x8179a84b, 0xd769cb13, 0xb20e77ab, 0x5ca1c2b9, |
| 1737 | 0x39c67e01, 0x80fea99c, 0xe5991524, 0x0b36a036, 0x6e511c8e, |
| 1738 | 0xa7166686, 0xc271da3e, 0x2cde6f2c, 0x49b9d394, 0xf0810409, |
| 1739 | 0x95e6b8b1, 0x7b490da3, 0x1e2eb11b, 0x483ed243, 0x2d596efb, |
| 1740 | 0xc3f6dbe9, 0xa6916751, 0x1fa9b0cc, 0x7ace0c74, 0x9461b966, |
| 1741 | 0xf10605de}}; |
| 1742 | |
| 1743 | #endif |
| 1744 | |
| 1745 | #endif |
| 1746 | |
| 1747 | #if N == 2 |
| 1748 | |
| 1749 | #if W == 8 |
| 1750 | |
| 1751 | local const z_crc_t FAR crc_braid_table[][256] = { |
| 1752 | {0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87, |
| 1753 | 0x7a59dd16, 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede, |
| 1754 | 0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259, 0x2082f6ab, |
| 1755 | 0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c, |
| 1756 | 0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1, |
| 1757 | 0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7, |
| 1758 | 0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e, |
| 1759 | 0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308, |
| 1760 | 0x642ce432, 0xca4475a3, 0xe38cc151, 0x4de450c0, 0xb01da8b5, |
| 1761 | 0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3, 0x5f70d472, |
| 1762 | 0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07, |
| 1763 | 0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e, |
| 1764 | 0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa, |
| 1765 | 0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec, |
| 1766 | 0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6, |
| 1767 | 0x74a5dd47, 0x895c2532, 0x2734b4a3, 0x0efc0051, 0xa09491c0, |
| 1768 | 0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, 0x1c6884e3, |
| 1769 | 0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba, |
| 1770 | 0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf, |
| 1771 | 0x46b3af5e, 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975, |
| 1772 | 0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8, |
| 1773 | 0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde, |
| 1774 | 0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, 0x58c6967a, |
| 1775 | 0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c, |
| 1776 | 0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1, |
| 1777 | 0xd62cf140, 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65, |
| 1778 | 0xdb5dc897, 0x75355906, 0x88cca173, 0x26a430e2, 0x0f6c8410, |
| 1779 | 0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649, |
| 1780 | 0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a, |
| 1781 | 0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c, |
| 1782 | 0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946, |
| 1783 | 0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450, |
| 1784 | 0x4bc29689, 0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e, |
| 1785 | 0x319b4b9f, 0x1853ff6d, 0xb63b6efc, 0x38d109c6, 0x96b99857, |
| 1786 | 0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022, |
| 1787 | 0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5, |
| 1788 | 0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758, |
| 1789 | 0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e, |
| 1790 | 0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d, |
| 1791 | 0x5b4baffc, 0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b, |
| 1792 | 0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, 0xd5a1c8c6, |
| 1793 | 0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401, |
| 1794 | 0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74, |
| 1795 | 0x695ddde5, 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d, |
| 1796 | 0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa, 0x65bc6073, |
| 1797 | 0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65, |
| 1798 | 0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f, |
| 1799 | 0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749, |
| 1800 | 0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a, |
| 1801 | 0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033, |
| 1802 | 0x7728e4c1, 0xd9407550, 0x24b98d25, 0x8ad11cb4, 0xa319a846, |
| 1803 | 0x0d7139d7}, |
| 1804 | {0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563, |
| 1805 | 0x3387be8b, 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f, |
| 1806 | 0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c, 0xed731875, |
| 1807 | 0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536, |
| 1808 | 0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8, |
| 1809 | 0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43, |
| 1810 | 0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f, |
| 1811 | 0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184, |
| 1812 | 0x474cf219, 0xfeb729f1, 0xefca4388, 0x56319860, 0xcd30977a, |
| 1813 | 0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1, 0x755c7a39, |
| 1814 | 0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523, |
| 1815 | 0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f, |
| 1816 | 0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d, |
| 1817 | 0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6, |
| 1818 | 0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b, |
| 1819 | 0x140fdd83, 0x8f0ed299, 0x36f50971, 0x27886308, 0x9e73b8e0, |
| 1820 | 0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, 0x04e58151, |
| 1821 | 0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d, |
| 1822 | 0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47, |
| 1823 | 0xda1127af, 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a, |
| 1824 | 0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964, |
| 1825 | 0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef, |
| 1826 | 0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, 0xaeda6b3d, |
| 1827 | 0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6, |
| 1828 | 0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348, |
| 1829 | 0xfa52a8a0, 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53, |
| 1830 | 0xe601412a, 0x5ffa9ac2, 0xc4fb95d8, 0x7d004e30, 0x6c7d2449, |
| 1831 | 0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645, |
| 1832 | 0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4, |
| 1833 | 0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f, |
| 1834 | 0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2, |
| 1835 | 0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69, |
| 1836 | 0xc642ce25, 0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46, |
| 1837 | 0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, 0x09cb02a2, 0xb030d94a, |
| 1838 | 0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650, |
| 1839 | 0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13, |
| 1840 | 0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded, |
| 1841 | 0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366, |
| 1842 | 0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57, |
| 1843 | 0x9501e1bf, 0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc, |
| 1844 | 0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, 0xc1892222, |
| 1845 | 0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61, |
| 1846 | 0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b, |
| 1847 | 0x5b1f1b93, 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277, |
| 1848 | 0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714, 0x0cb9b558, |
| 1849 | 0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3, |
| 1850 | 0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e, |
| 1851 | 0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5, |
| 1852 | 0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74, |
| 1853 | 0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78, |
| 1854 | 0x2fd45701, 0x962f8ce9, 0x0d2e83f3, 0xb4d5581b, 0xa5a83262, |
| 1855 | 0x1c53e98a}, |
| 1856 | {0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b, |
| 1857 | 0x84a36e6d, 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40, |
| 1858 | 0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b, 0xcb9b5580, |
| 1859 | 0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7, |
| 1860 | 0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a, |
| 1861 | 0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37, |
| 1862 | 0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75, |
| 1863 | 0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218, |
| 1864 | 0xfe3d66ee, 0x63328798, 0x1f53a243, 0x825c4335, 0xe791e9f5, |
| 1865 | 0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4, 0x36d9a5c2, |
| 1866 | 0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02, |
| 1867 | 0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59, |
| 1868 | 0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1, |
| 1869 | 0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c, |
| 1870 | 0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a, |
| 1871 | 0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, 0x8a22a271, 0x172d4307, |
| 1872 | 0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, 0x3ea74486, |
| 1873 | 0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd, |
| 1874 | 0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d, |
| 1875 | 0x719f7f6b, 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2, |
| 1876 | 0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f, |
| 1877 | 0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72, |
| 1878 | 0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, 0x0b0177e8, |
| 1879 | 0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985, |
| 1880 | 0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268, |
| 1881 | 0x5d95c31e, 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94, |
| 1882 | 0x621d2b4f, 0xff12ca39, 0x9adf60f9, 0x07d0818f, 0x7bb1a454, |
| 1883 | 0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f, |
| 1884 | 0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e, |
| 1885 | 0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3, |
| 1886 | 0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915, |
| 1887 | 0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778, |
| 1888 | 0x4e17973a, 0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821, |
| 1889 | 0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, 0x7d4e890c, 0xe041687a, |
| 1890 | 0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba, |
| 1891 | 0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d, |
| 1892 | 0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560, |
| 1893 | 0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d, |
| 1894 | 0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe, |
| 1895 | 0xbeab3dc8, 0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3, |
| 1896 | 0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, 0xe83f893e, |
| 1897 | 0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509, |
| 1898 | 0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9, |
| 1899 | 0xc1b58ebf, 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92, |
| 1900 | 0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089, 0x0fae60cb, |
| 1901 | 0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6, |
| 1902 | 0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50, |
| 1903 | 0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d, |
| 1904 | 0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc, |
| 1905 | 0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7, |
| 1906 | 0xbb2b863c, 0x2624674a, 0x43e9cd8a, 0xdee62cfc, 0xa2870927, |
| 1907 | 0x3f88e851}, |
| 1908 | {0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96, |
| 1909 | 0x1d2fb313, 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8, |
| 1910 | 0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e, 0xfae60cb0, |
| 1911 | 0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14, |
| 1912 | 0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7, |
| 1913 | 0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4, |
| 1914 | 0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe, |
| 1915 | 0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad, |
| 1916 | 0xe97d9898, 0x34eb411d, 0x89212dd3, 0x54b7f456, 0x29c4f20e, |
| 1917 | 0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f, 0xdaef34aa, |
| 1918 | 0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2, |
| 1919 | 0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c, |
| 1920 | 0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab, |
| 1921 | 0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8, |
| 1922 | 0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d, |
| 1923 | 0x5a442e08, 0x27372850, 0xfaa1f1d5, 0x476b9d1b, 0x9afd449e, |
| 1924 | 0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, 0xc9335de7, |
| 1925 | 0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99, |
| 1926 | 0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1, |
| 1927 | 0x2efae244, 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690, |
| 1928 | 0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933, |
| 1929 | 0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20, |
| 1930 | 0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, 0xdaa8c9cf, |
| 1931 | 0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc, |
| 1932 | 0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f, |
| 1933 | 0xfdd81cfa, 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92, |
| 1934 | 0xc036905c, 0x1da049d9, 0x60d34f81, 0xbd459604, 0x008ffaca, |
| 1935 | 0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4, |
| 1936 | 0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd, |
| 1937 | 0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de, |
| 1938 | 0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb, |
| 1939 | 0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8, |
| 1940 | 0x13146ee2, 0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474, |
| 1941 | 0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, 0x4917bd8f, 0x9481640a, |
| 1942 | 0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252, |
| 1943 | 0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6, |
| 1944 | 0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55, |
| 1945 | 0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846, |
| 1946 | 0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7, |
| 1947 | 0xa02dd872, 0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4, |
| 1948 | 0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, 0x875d0d47, |
| 1949 | 0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3, |
| 1950 | 0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb, |
| 1951 | 0xd493143e, 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5, |
| 1952 | 0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753, 0xae99ff49, |
| 1953 | 0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a, |
| 1954 | 0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f, |
| 1955 | 0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c, |
| 1956 | 0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305, |
| 1957 | 0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b, |
| 1958 | 0x20c13fb5, 0xfd57e630, 0x8024e068, 0x5db239ed, 0xe0785523, |
| 1959 | 0x3dee8ca6}, |
| 1960 | {0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f, |
| 1961 | 0x98a37710, 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91, |
| 1962 | 0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee, 0xe931d31e, |
| 1963 | 0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c, |
| 1964 | 0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02, |
| 1965 | 0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12, |
| 1966 | 0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567, |
| 1967 | 0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277, |
| 1968 | 0x1e3dad06, 0x8598e169, 0xf2063399, 0x69a37ff6, 0x1d3b9679, |
| 1969 | 0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604, 0x8f8c7a6b, |
| 1970 | 0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4, |
| 1971 | 0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a, |
| 1972 | 0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0, |
| 1973 | 0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0, |
| 1974 | 0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91, |
| 1975 | 0x41f113fe, 0x3569fa71, 0xaeccb61e, 0xd95264ee, 0x42f72881, |
| 1976 | 0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, 0x3f7d6173, |
| 1977 | 0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d, |
| 1978 | 0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912, |
| 1979 | 0x4eefc57d, 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8, |
| 1980 | 0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6, |
| 1981 | 0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6, |
| 1982 | 0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, 0xc8711f6b, |
| 1983 | 0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b, |
| 1984 | 0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75, |
| 1985 | 0xbae5801a, 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f, |
| 1986 | 0x8cfcf17f, 0x1759bd10, 0x63c1549f, 0xf86418f0, 0x8ffaca00, |
| 1987 | 0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee, |
| 1988 | 0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c, |
| 1989 | 0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c, |
| 1990 | 0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d, |
| 1991 | 0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d, |
| 1992 | 0x78f6b418, 0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67, |
| 1993 | 0xe055c308, 0x97cb11f8, 0x0c6e5d97, 0x7efac2e6, 0xe55f8e89, |
| 1994 | 0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706, |
| 1995 | 0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14, |
| 1996 | 0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a, |
| 1997 | 0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a, |
| 1998 | 0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f, |
| 1999 | 0x273a0ae0, 0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f, |
| 2000 | 0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, 0x55ae9591, |
| 2001 | 0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983, |
| 2002 | 0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c, |
| 2003 | 0x2824dc63, 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2, |
| 2004 | 0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d, 0x489503e8, |
| 2005 | 0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8, |
| 2006 | 0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89, |
| 2007 | 0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99, |
| 2008 | 0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b, |
| 2009 | 0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485, |
| 2010 | 0xaeba0675, 0x351f4a1a, 0x4187a395, 0xda22effa, 0xadbc3d0a, |
| 2011 | 0x36197165}, |
| 2012 | {0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382, |
| 2013 | 0x7157ac42, 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85, |
| 2014 | 0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07, 0x52762b06, |
| 2015 | 0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca, |
| 2016 | 0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e, |
| 2017 | 0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc, |
| 2018 | 0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616, |
| 2019 | 0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54, |
| 2020 | 0x3c5f6e92, 0xfdd1b152, 0x6433d753, 0xa5bd0893, 0x8c861d10, |
| 2021 | 0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c, 0xe9e494dc, |
| 2022 | 0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f, |
| 2023 | 0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58, |
| 2024 | 0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef, |
| 2025 | 0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad, |
| 2026 | 0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b, |
| 2027 | 0xf5699eab, 0xdc528b28, 0x1ddc54e8, 0x843e32e9, 0x45b0ed29, |
| 2028 | 0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, 0xc867aea6, |
| 2029 | 0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1, |
| 2030 | 0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622, |
| 2031 | 0xeb4629e2, 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039, |
| 2032 | 0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d, |
| 2033 | 0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f, |
| 2034 | 0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, 0xa64eeb32, |
| 2035 | 0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770, |
| 2036 | 0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034, |
| 2037 | 0x35b61ff4, 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f, |
| 2038 | 0x2f8d8c5e, 0xee03539e, 0xc738461d, 0x06b699dd, 0x9f54ffdc, |
| 2039 | 0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db, |
| 2040 | 0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154, |
| 2041 | 0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16, |
| 2042 | 0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0, |
| 2043 | 0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592, |
| 2044 | 0xf17dba48, 0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca, |
| 2045 | 0x802a160a, 0x19c8700b, 0xd846afcb, 0x4bbe5b0d, 0x8a3084cd, |
| 2046 | 0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e, |
| 2047 | 0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882, |
| 2048 | 0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6, |
| 2049 | 0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384, |
| 2050 | 0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1, |
| 2051 | 0x384b4a71, 0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3, |
| 2052 | 0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, 0xabb3beb7, |
| 2053 | 0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b, |
| 2054 | 0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8, |
| 2055 | 0x2664fd38, 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff, |
| 2056 | 0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7, |
| 2057 | 0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5, |
| 2058 | 0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23, |
| 2059 | 0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761, |
| 2060 | 0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee, |
| 2061 | 0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9, |
| 2062 | 0x6b6c3fe8, 0xaae2e028, 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a, |
| 2063 | 0x1a3b93aa}, |
| 2064 | {0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a, |
| 2065 | 0xe629cb44, 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca, |
| 2066 | 0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3, |
| 2067 | 0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb, |
| 2068 | 0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c, |
| 2069 | 0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58, |
| 2070 | 0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed, |
| 2071 | 0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9, |
| 2072 | 0x5c8a4324, 0xb348281a, 0x587f9319, 0xb7bdf827, 0x5561e35e, |
| 2073 | 0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238, 0x8731e906, |
| 2074 | 0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f, |
| 2075 | 0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf, |
| 2076 | 0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0, |
| 2077 | 0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4, |
| 2078 | 0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769, |
| 2079 | 0x665afc57, 0x8486e72e, 0x6b448c10, 0x80733713, 0x6fb15c2d, |
| 2080 | 0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, 0xb0ff2632, |
| 2081 | 0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82, |
| 2082 | 0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb, |
| 2083 | 0x481fddc5, 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73, |
| 2084 | 0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484, |
| 2085 | 0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0, |
| 2086 | 0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, 0xf2bc55a5, |
| 2087 | 0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1, |
| 2088 | 0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516, |
| 2089 | 0x03b70e28, 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f, |
| 2090 | 0xe2f0d93c, 0x0d32b202, 0xefeea97b, 0x002cc245, 0xeb1b7946, |
| 2091 | 0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6, |
| 2092 | 0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9, |
| 2093 | 0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad, |
| 2094 | 0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820, |
| 2095 | 0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364, |
| 2096 | 0xa9580ad1, 0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab, |
| 2097 | 0x4f71c195, 0xa4467a96, 0x4b8411a8, 0xba8f4a25, 0x554d211b, |
| 2098 | 0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62, |
| 2099 | 0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a, |
| 2100 | 0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd, |
| 2101 | 0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089, |
| 2102 | 0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c, |
| 2103 | 0x9388b5a2, 0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8, |
| 2104 | 0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, 0x6283ee2f, |
| 2105 | 0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477, |
| 2106 | 0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e, |
| 2107 | 0xbdcd9430, 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be, |
| 2108 | 0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4, 0x37e20d71, |
| 2109 | 0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635, |
| 2110 | 0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8, |
| 2111 | 0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc, |
| 2112 | 0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3, |
| 2113 | 0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753, |
| 2114 | 0x076e1c50, 0xe8ac776e, 0x0a706c17, 0xe5b20729, 0x0e85bc2a, |
| 2115 | 0xe147d714}, |
| 2116 | {0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c, |
| 2117 | 0x4a97454f, 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b, |
| 2118 | 0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757, 0xc8c2db92, |
| 2119 | 0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4, |
| 2120 | 0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069, |
| 2121 | 0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526, |
| 2122 | 0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25, |
| 2123 | 0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a, |
| 2124 | 0x392920bb, 0x2e5234f8, 0x17df083d, 0x00a41c7e, 0x64c571b7, |
| 2125 | 0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2, 0x394ad491, |
| 2126 | 0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958, |
| 2127 | 0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f, |
| 2128 | 0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307, |
| 2129 | 0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648, |
| 2130 | 0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999, |
| 2131 | 0x5cc79dda, 0x38a6f013, 0x2fdde450, 0x1650d895, 0x012bccd6, |
| 2132 | 0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, 0x2fbe107a, |
| 2133 | 0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d, |
| 2134 | 0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4, |
| 2135 | 0xadeb8ea7, 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61, |
| 2136 | 0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc, |
| 2137 | 0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3, |
| 2138 | 0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, 0xde55eb53, |
| 2139 | 0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c, |
| 2140 | 0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1, |
| 2141 | 0x01ec2482, 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c, |
| 2142 | 0x48a328c9, 0x5fd83c8a, 0x3bb95143, 0x2cc24500, 0x154f79c5, |
| 2143 | 0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92, |
| 2144 | 0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e, |
| 2145 | 0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771, |
| 2146 | 0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0, |
| 2147 | 0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def, |
| 2148 | 0xe4a482ec, 0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0, |
| 2149 | 0xae33c7a3, 0x97befb66, 0x80c5ef25, 0x5f7c20f4, 0x480734b7, |
| 2150 | 0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e, |
| 2151 | 0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58, |
| 2152 | 0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285, |
| 2153 | 0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca, |
| 2154 | 0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce, |
| 2155 | 0x814a3f8d, 0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81, |
| 2156 | 0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, 0x5ef3f05c, |
| 2157 | 0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a, |
| 2158 | 0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3, |
| 2159 | 0x70662cf0, 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4, |
| 2160 | 0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb, |
| 2161 | 0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4, |
| 2162 | 0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75, |
| 2163 | 0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a, |
| 2164 | 0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296, |
| 2165 | 0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1, |
| 2166 | 0x03d84904, 0x14a35d47, 0x70c2308e, 0x67b924cd, 0x5e341808, |
| 2167 | 0x494f0c4b}}; |
| 2168 | |
| 2169 | local const z_word_t FAR crc_braid_big_table[][256] = { |
| 2170 | {0x0000000000000000, 0x43147b1700000000, 0x8628f62e00000000, |
| 2171 | 0xc53c8d3900000000, 0x0c51ec5d00000000, 0x4f45974a00000000, |
| 2172 | 0x8a791a7300000000, 0xc96d616400000000, 0x18a2d8bb00000000, |
| 2173 | 0x5bb6a3ac00000000, 0x9e8a2e9500000000, 0xdd9e558200000000, |
| 2174 | 0x14f334e600000000, 0x57e74ff100000000, 0x92dbc2c800000000, |
| 2175 | 0xd1cfb9df00000000, 0x7142c0ac00000000, 0x3256bbbb00000000, |
| 2176 | 0xf76a368200000000, 0xb47e4d9500000000, 0x7d132cf100000000, |
| 2177 | 0x3e0757e600000000, 0xfb3bdadf00000000, 0xb82fa1c800000000, |
| 2178 | 0x69e0181700000000, 0x2af4630000000000, 0xefc8ee3900000000, |
| 2179 | 0xacdc952e00000000, 0x65b1f44a00000000, 0x26a58f5d00000000, |
| 2180 | 0xe399026400000000, 0xa08d797300000000, 0xa382f18200000000, |
| 2181 | 0xe0968a9500000000, 0x25aa07ac00000000, 0x66be7cbb00000000, |
| 2182 | 0xafd31ddf00000000, 0xecc766c800000000, 0x29fbebf100000000, |
| 2183 | 0x6aef90e600000000, 0xbb20293900000000, 0xf834522e00000000, |
| 2184 | 0x3d08df1700000000, 0x7e1ca40000000000, 0xb771c56400000000, |
| 2185 | 0xf465be7300000000, 0x3159334a00000000, 0x724d485d00000000, |
| 2186 | 0xd2c0312e00000000, 0x91d44a3900000000, 0x54e8c70000000000, |
| 2187 | 0x17fcbc1700000000, 0xde91dd7300000000, 0x9d85a66400000000, |
| 2188 | 0x58b92b5d00000000, 0x1bad504a00000000, 0xca62e99500000000, |
| 2189 | 0x8976928200000000, 0x4c4a1fbb00000000, 0x0f5e64ac00000000, |
| 2190 | 0xc63305c800000000, 0x85277edf00000000, 0x401bf3e600000000, |
| 2191 | 0x030f88f100000000, 0x070392de00000000, 0x4417e9c900000000, |
| 2192 | 0x812b64f000000000, 0xc23f1fe700000000, 0x0b527e8300000000, |
| 2193 | 0x4846059400000000, 0x8d7a88ad00000000, 0xce6ef3ba00000000, |
| 2194 | 0x1fa14a6500000000, 0x5cb5317200000000, 0x9989bc4b00000000, |
| 2195 | 0xda9dc75c00000000, 0x13f0a63800000000, 0x50e4dd2f00000000, |
| 2196 | 0x95d8501600000000, 0xd6cc2b0100000000, 0x7641527200000000, |
| 2197 | 0x3555296500000000, 0xf069a45c00000000, 0xb37ddf4b00000000, |
| 2198 | 0x7a10be2f00000000, 0x3904c53800000000, 0xfc38480100000000, |
| 2199 | 0xbf2c331600000000, 0x6ee38ac900000000, 0x2df7f1de00000000, |
| 2200 | 0xe8cb7ce700000000, 0xabdf07f000000000, 0x62b2669400000000, |
| 2201 | 0x21a61d8300000000, 0xe49a90ba00000000, 0xa78eebad00000000, |
| 2202 | 0xa481635c00000000, 0xe795184b00000000, 0x22a9957200000000, |
| 2203 | 0x61bdee6500000000, 0xa8d08f0100000000, 0xebc4f41600000000, |
| 2204 | 0x2ef8792f00000000, 0x6dec023800000000, 0xbc23bbe700000000, |
| 2205 | 0xff37c0f000000000, 0x3a0b4dc900000000, 0x791f36de00000000, |
| 2206 | 0xb07257ba00000000, 0xf3662cad00000000, 0x365aa19400000000, |
| 2207 | 0x754eda8300000000, 0xd5c3a3f000000000, 0x96d7d8e700000000, |
| 2208 | 0x53eb55de00000000, 0x10ff2ec900000000, 0xd9924fad00000000, |
| 2209 | 0x9a8634ba00000000, 0x5fbab98300000000, 0x1caec29400000000, |
| 2210 | 0xcd617b4b00000000, 0x8e75005c00000000, 0x4b498d6500000000, |
| 2211 | 0x085df67200000000, 0xc130971600000000, 0x8224ec0100000000, |
| 2212 | 0x4718613800000000, 0x040c1a2f00000000, 0x4f00556600000000, |
| 2213 | 0x0c142e7100000000, 0xc928a34800000000, 0x8a3cd85f00000000, |
| 2214 | 0x4351b93b00000000, 0x0045c22c00000000, 0xc5794f1500000000, |
| 2215 | 0x866d340200000000, 0x57a28ddd00000000, 0x14b6f6ca00000000, |
| 2216 | 0xd18a7bf300000000, 0x929e00e400000000, 0x5bf3618000000000, |
| 2217 | 0x18e71a9700000000, 0xdddb97ae00000000, 0x9ecfecb900000000, |
| 2218 | 0x3e4295ca00000000, 0x7d56eedd00000000, 0xb86a63e400000000, |
| 2219 | 0xfb7e18f300000000, 0x3213799700000000, 0x7107028000000000, |
| 2220 | 0xb43b8fb900000000, 0xf72ff4ae00000000, 0x26e04d7100000000, |
| 2221 | 0x65f4366600000000, 0xa0c8bb5f00000000, 0xe3dcc04800000000, |
| 2222 | 0x2ab1a12c00000000, 0x69a5da3b00000000, 0xac99570200000000, |
| 2223 | 0xef8d2c1500000000, 0xec82a4e400000000, 0xaf96dff300000000, |
| 2224 | 0x6aaa52ca00000000, 0x29be29dd00000000, 0xe0d348b900000000, |
| 2225 | 0xa3c733ae00000000, 0x66fbbe9700000000, 0x25efc58000000000, |
| 2226 | 0xf4207c5f00000000, 0xb734074800000000, 0x72088a7100000000, |
| 2227 | 0x311cf16600000000, 0xf871900200000000, 0xbb65eb1500000000, |
| 2228 | 0x7e59662c00000000, 0x3d4d1d3b00000000, 0x9dc0644800000000, |
| 2229 | 0xded41f5f00000000, 0x1be8926600000000, 0x58fce97100000000, |
| 2230 | 0x9191881500000000, 0xd285f30200000000, 0x17b97e3b00000000, |
| 2231 | 0x54ad052c00000000, 0x8562bcf300000000, 0xc676c7e400000000, |
| 2232 | 0x034a4add00000000, 0x405e31ca00000000, 0x893350ae00000000, |
| 2233 | 0xca272bb900000000, 0x0f1ba68000000000, 0x4c0fdd9700000000, |
| 2234 | 0x4803c7b800000000, 0x0b17bcaf00000000, 0xce2b319600000000, |
| 2235 | 0x8d3f4a8100000000, 0x44522be500000000, 0x074650f200000000, |
| 2236 | 0xc27addcb00000000, 0x816ea6dc00000000, 0x50a11f0300000000, |
| 2237 | 0x13b5641400000000, 0xd689e92d00000000, 0x959d923a00000000, |
| 2238 | 0x5cf0f35e00000000, 0x1fe4884900000000, 0xdad8057000000000, |
| 2239 | 0x99cc7e6700000000, 0x3941071400000000, 0x7a557c0300000000, |
| 2240 | 0xbf69f13a00000000, 0xfc7d8a2d00000000, 0x3510eb4900000000, |
| 2241 | 0x7604905e00000000, 0xb3381d6700000000, 0xf02c667000000000, |
| 2242 | 0x21e3dfaf00000000, 0x62f7a4b800000000, 0xa7cb298100000000, |
| 2243 | 0xe4df529600000000, 0x2db233f200000000, 0x6ea648e500000000, |
| 2244 | 0xab9ac5dc00000000, 0xe88ebecb00000000, 0xeb81363a00000000, |
| 2245 | 0xa8954d2d00000000, 0x6da9c01400000000, 0x2ebdbb0300000000, |
| 2246 | 0xe7d0da6700000000, 0xa4c4a17000000000, 0x61f82c4900000000, |
| 2247 | 0x22ec575e00000000, 0xf323ee8100000000, 0xb037959600000000, |
| 2248 | 0x750b18af00000000, 0x361f63b800000000, 0xff7202dc00000000, |
| 2249 | 0xbc6679cb00000000, 0x795af4f200000000, 0x3a4e8fe500000000, |
| 2250 | 0x9ac3f69600000000, 0xd9d78d8100000000, 0x1ceb00b800000000, |
| 2251 | 0x5fff7baf00000000, 0x96921acb00000000, 0xd58661dc00000000, |
| 2252 | 0x10baece500000000, 0x53ae97f200000000, 0x82612e2d00000000, |
| 2253 | 0xc175553a00000000, 0x0449d80300000000, 0x475da31400000000, |
| 2254 | 0x8e30c27000000000, 0xcd24b96700000000, 0x0818345e00000000, |
| 2255 | 0x4b0c4f4900000000}, |
| 2256 | {0x0000000000000000, 0x3e6bc2ef00000000, 0x3dd0f50400000000, |
| 2257 | 0x03bb37eb00000000, 0x7aa0eb0900000000, 0x44cb29e600000000, |
| 2258 | 0x47701e0d00000000, 0x791bdce200000000, 0xf440d71300000000, |
| 2259 | 0xca2b15fc00000000, 0xc990221700000000, 0xf7fbe0f800000000, |
| 2260 | 0x8ee03c1a00000000, 0xb08bfef500000000, 0xb330c91e00000000, |
| 2261 | 0x8d5b0bf100000000, 0xe881ae2700000000, 0xd6ea6cc800000000, |
| 2262 | 0xd5515b2300000000, 0xeb3a99cc00000000, 0x9221452e00000000, |
| 2263 | 0xac4a87c100000000, 0xaff1b02a00000000, 0x919a72c500000000, |
| 2264 | 0x1cc1793400000000, 0x22aabbdb00000000, 0x21118c3000000000, |
| 2265 | 0x1f7a4edf00000000, 0x6661923d00000000, 0x580a50d200000000, |
| 2266 | 0x5bb1673900000000, 0x65daa5d600000000, 0xd0035d4f00000000, |
| 2267 | 0xee689fa000000000, 0xedd3a84b00000000, 0xd3b86aa400000000, |
| 2268 | 0xaaa3b64600000000, 0x94c874a900000000, 0x9773434200000000, |
| 2269 | 0xa91881ad00000000, 0x24438a5c00000000, 0x1a2848b300000000, |
| 2270 | 0x19937f5800000000, 0x27f8bdb700000000, 0x5ee3615500000000, |
| 2271 | 0x6088a3ba00000000, 0x6333945100000000, 0x5d5856be00000000, |
| 2272 | 0x3882f36800000000, 0x06e9318700000000, 0x0552066c00000000, |
| 2273 | 0x3b39c48300000000, 0x4222186100000000, 0x7c49da8e00000000, |
| 2274 | 0x7ff2ed6500000000, 0x41992f8a00000000, 0xccc2247b00000000, |
| 2275 | 0xf2a9e69400000000, 0xf112d17f00000000, 0xcf79139000000000, |
| 2276 | 0xb662cf7200000000, 0x88090d9d00000000, 0x8bb23a7600000000, |
| 2277 | 0xb5d9f89900000000, 0xa007ba9e00000000, 0x9e6c787100000000, |
| 2278 | 0x9dd74f9a00000000, 0xa3bc8d7500000000, 0xdaa7519700000000, |
| 2279 | 0xe4cc937800000000, 0xe777a49300000000, 0xd91c667c00000000, |
| 2280 | 0x54476d8d00000000, 0x6a2caf6200000000, 0x6997988900000000, |
| 2281 | 0x57fc5a6600000000, 0x2ee7868400000000, 0x108c446b00000000, |
| 2282 | 0x1337738000000000, 0x2d5cb16f00000000, 0x488614b900000000, |
| 2283 | 0x76edd65600000000, 0x7556e1bd00000000, 0x4b3d235200000000, |
| 2284 | 0x3226ffb000000000, 0x0c4d3d5f00000000, 0x0ff60ab400000000, |
| 2285 | 0x319dc85b00000000, 0xbcc6c3aa00000000, 0x82ad014500000000, |
| 2286 | 0x811636ae00000000, 0xbf7df44100000000, 0xc66628a300000000, |
| 2287 | 0xf80dea4c00000000, 0xfbb6dda700000000, 0xc5dd1f4800000000, |
| 2288 | 0x7004e7d100000000, 0x4e6f253e00000000, 0x4dd412d500000000, |
| 2289 | 0x73bfd03a00000000, 0x0aa40cd800000000, 0x34cfce3700000000, |
| 2290 | 0x3774f9dc00000000, 0x091f3b3300000000, 0x844430c200000000, |
| 2291 | 0xba2ff22d00000000, 0xb994c5c600000000, 0x87ff072900000000, |
| 2292 | 0xfee4dbcb00000000, 0xc08f192400000000, 0xc3342ecf00000000, |
| 2293 | 0xfd5fec2000000000, 0x988549f600000000, 0xa6ee8b1900000000, |
| 2294 | 0xa555bcf200000000, 0x9b3e7e1d00000000, 0xe225a2ff00000000, |
| 2295 | 0xdc4e601000000000, 0xdff557fb00000000, 0xe19e951400000000, |
| 2296 | 0x6cc59ee500000000, 0x52ae5c0a00000000, 0x51156be100000000, |
| 2297 | 0x6f7ea90e00000000, 0x166575ec00000000, 0x280eb70300000000, |
| 2298 | 0x2bb580e800000000, 0x15de420700000000, 0x010905e600000000, |
| 2299 | 0x3f62c70900000000, 0x3cd9f0e200000000, 0x02b2320d00000000, |
| 2300 | 0x7ba9eeef00000000, 0x45c22c0000000000, 0x46791beb00000000, |
| 2301 | 0x7812d90400000000, 0xf549d2f500000000, 0xcb22101a00000000, |
| 2302 | 0xc89927f100000000, 0xf6f2e51e00000000, 0x8fe939fc00000000, |
| 2303 | 0xb182fb1300000000, 0xb239ccf800000000, 0x8c520e1700000000, |
| 2304 | 0xe988abc100000000, 0xd7e3692e00000000, 0xd4585ec500000000, |
| 2305 | 0xea339c2a00000000, 0x932840c800000000, 0xad43822700000000, |
| 2306 | 0xaef8b5cc00000000, 0x9093772300000000, 0x1dc87cd200000000, |
| 2307 | 0x23a3be3d00000000, 0x201889d600000000, 0x1e734b3900000000, |
| 2308 | 0x676897db00000000, 0x5903553400000000, 0x5ab862df00000000, |
| 2309 | 0x64d3a03000000000, 0xd10a58a900000000, 0xef619a4600000000, |
| 2310 | 0xecdaadad00000000, 0xd2b16f4200000000, 0xabaab3a000000000, |
| 2311 | 0x95c1714f00000000, 0x967a46a400000000, 0xa811844b00000000, |
| 2312 | 0x254a8fba00000000, 0x1b214d5500000000, 0x189a7abe00000000, |
| 2313 | 0x26f1b85100000000, 0x5fea64b300000000, 0x6181a65c00000000, |
| 2314 | 0x623a91b700000000, 0x5c51535800000000, 0x398bf68e00000000, |
| 2315 | 0x07e0346100000000, 0x045b038a00000000, 0x3a30c16500000000, |
| 2316 | 0x432b1d8700000000, 0x7d40df6800000000, 0x7efbe88300000000, |
| 2317 | 0x40902a6c00000000, 0xcdcb219d00000000, 0xf3a0e37200000000, |
| 2318 | 0xf01bd49900000000, 0xce70167600000000, 0xb76bca9400000000, |
| 2319 | 0x8900087b00000000, 0x8abb3f9000000000, 0xb4d0fd7f00000000, |
| 2320 | 0xa10ebf7800000000, 0x9f657d9700000000, 0x9cde4a7c00000000, |
| 2321 | 0xa2b5889300000000, 0xdbae547100000000, 0xe5c5969e00000000, |
| 2322 | 0xe67ea17500000000, 0xd815639a00000000, 0x554e686b00000000, |
| 2323 | 0x6b25aa8400000000, 0x689e9d6f00000000, 0x56f55f8000000000, |
| 2324 | 0x2fee836200000000, 0x1185418d00000000, 0x123e766600000000, |
| 2325 | 0x2c55b48900000000, 0x498f115f00000000, 0x77e4d3b000000000, |
| 2326 | 0x745fe45b00000000, 0x4a3426b400000000, 0x332ffa5600000000, |
| 2327 | 0x0d4438b900000000, 0x0eff0f5200000000, 0x3094cdbd00000000, |
| 2328 | 0xbdcfc64c00000000, 0x83a404a300000000, 0x801f334800000000, |
| 2329 | 0xbe74f1a700000000, 0xc76f2d4500000000, 0xf904efaa00000000, |
| 2330 | 0xfabfd84100000000, 0xc4d41aae00000000, 0x710de23700000000, |
| 2331 | 0x4f6620d800000000, 0x4cdd173300000000, 0x72b6d5dc00000000, |
| 2332 | 0x0bad093e00000000, 0x35c6cbd100000000, 0x367dfc3a00000000, |
| 2333 | 0x08163ed500000000, 0x854d352400000000, 0xbb26f7cb00000000, |
| 2334 | 0xb89dc02000000000, 0x86f602cf00000000, 0xffedde2d00000000, |
| 2335 | 0xc1861cc200000000, 0xc23d2b2900000000, 0xfc56e9c600000000, |
| 2336 | 0x998c4c1000000000, 0xa7e78eff00000000, 0xa45cb91400000000, |
| 2337 | 0x9a377bfb00000000, 0xe32ca71900000000, 0xdd4765f600000000, |
| 2338 | 0xdefc521d00000000, 0xe09790f200000000, 0x6dcc9b0300000000, |
| 2339 | 0x53a759ec00000000, 0x501c6e0700000000, 0x6e77ace800000000, |
| 2340 | 0x176c700a00000000, 0x2907b2e500000000, 0x2abc850e00000000, |
| 2341 | 0x14d747e100000000}, |
| 2342 | {0x0000000000000000, 0xc0df8ec100000000, 0xc1b96c5800000000, |
| 2343 | 0x0166e29900000000, 0x8273d9b000000000, 0x42ac577100000000, |
| 2344 | 0x43cab5e800000000, 0x83153b2900000000, 0x45e1c3ba00000000, |
| 2345 | 0x853e4d7b00000000, 0x8458afe200000000, 0x4487212300000000, |
| 2346 | 0xc7921a0a00000000, 0x074d94cb00000000, 0x062b765200000000, |
| 2347 | 0xc6f4f89300000000, 0xcbc4f6ae00000000, 0x0b1b786f00000000, |
| 2348 | 0x0a7d9af600000000, 0xcaa2143700000000, 0x49b72f1e00000000, |
| 2349 | 0x8968a1df00000000, 0x880e434600000000, 0x48d1cd8700000000, |
| 2350 | 0x8e25351400000000, 0x4efabbd500000000, 0x4f9c594c00000000, |
| 2351 | 0x8f43d78d00000000, 0x0c56eca400000000, 0xcc89626500000000, |
| 2352 | 0xcdef80fc00000000, 0x0d300e3d00000000, 0xd78f9c8600000000, |
| 2353 | 0x1750124700000000, 0x1636f0de00000000, 0xd6e97e1f00000000, |
| 2354 | 0x55fc453600000000, 0x9523cbf700000000, 0x9445296e00000000, |
| 2355 | 0x549aa7af00000000, 0x926e5f3c00000000, 0x52b1d1fd00000000, |
| 2356 | 0x53d7336400000000, 0x9308bda500000000, 0x101d868c00000000, |
| 2357 | 0xd0c2084d00000000, 0xd1a4ead400000000, 0x117b641500000000, |
| 2358 | 0x1c4b6a2800000000, 0xdc94e4e900000000, 0xddf2067000000000, |
| 2359 | 0x1d2d88b100000000, 0x9e38b39800000000, 0x5ee73d5900000000, |
| 2360 | 0x5f81dfc000000000, 0x9f5e510100000000, 0x59aaa99200000000, |
| 2361 | 0x9975275300000000, 0x9813c5ca00000000, 0x58cc4b0b00000000, |
| 2362 | 0xdbd9702200000000, 0x1b06fee300000000, 0x1a601c7a00000000, |
| 2363 | 0xdabf92bb00000000, 0xef1948d600000000, 0x2fc6c61700000000, |
| 2364 | 0x2ea0248e00000000, 0xee7faa4f00000000, 0x6d6a916600000000, |
| 2365 | 0xadb51fa700000000, 0xacd3fd3e00000000, 0x6c0c73ff00000000, |
| 2366 | 0xaaf88b6c00000000, 0x6a2705ad00000000, 0x6b41e73400000000, |
| 2367 | 0xab9e69f500000000, 0x288b52dc00000000, 0xe854dc1d00000000, |
| 2368 | 0xe9323e8400000000, 0x29edb04500000000, 0x24ddbe7800000000, |
| 2369 | 0xe40230b900000000, 0xe564d22000000000, 0x25bb5ce100000000, |
| 2370 | 0xa6ae67c800000000, 0x6671e90900000000, 0x67170b9000000000, |
| 2371 | 0xa7c8855100000000, 0x613c7dc200000000, 0xa1e3f30300000000, |
| 2372 | 0xa085119a00000000, 0x605a9f5b00000000, 0xe34fa47200000000, |
| 2373 | 0x23902ab300000000, 0x22f6c82a00000000, 0xe22946eb00000000, |
| 2374 | 0x3896d45000000000, 0xf8495a9100000000, 0xf92fb80800000000, |
| 2375 | 0x39f036c900000000, 0xbae50de000000000, 0x7a3a832100000000, |
| 2376 | 0x7b5c61b800000000, 0xbb83ef7900000000, 0x7d7717ea00000000, |
| 2377 | 0xbda8992b00000000, 0xbcce7bb200000000, 0x7c11f57300000000, |
| 2378 | 0xff04ce5a00000000, 0x3fdb409b00000000, 0x3ebda20200000000, |
| 2379 | 0xfe622cc300000000, 0xf35222fe00000000, 0x338dac3f00000000, |
| 2380 | 0x32eb4ea600000000, 0xf234c06700000000, 0x7121fb4e00000000, |
| 2381 | 0xb1fe758f00000000, 0xb098971600000000, 0x704719d700000000, |
| 2382 | 0xb6b3e14400000000, 0x766c6f8500000000, 0x770a8d1c00000000, |
| 2383 | 0xb7d503dd00000000, 0x34c038f400000000, 0xf41fb63500000000, |
| 2384 | 0xf57954ac00000000, 0x35a6da6d00000000, 0x9f35e17700000000, |
| 2385 | 0x5fea6fb600000000, 0x5e8c8d2f00000000, 0x9e5303ee00000000, |
| 2386 | 0x1d4638c700000000, 0xdd99b60600000000, 0xdcff549f00000000, |
| 2387 | 0x1c20da5e00000000, 0xdad422cd00000000, 0x1a0bac0c00000000, |
| 2388 | 0x1b6d4e9500000000, 0xdbb2c05400000000, 0x58a7fb7d00000000, |
| 2389 | 0x987875bc00000000, 0x991e972500000000, 0x59c119e400000000, |
| 2390 | 0x54f117d900000000, 0x942e991800000000, 0x95487b8100000000, |
| 2391 | 0x5597f54000000000, 0xd682ce6900000000, 0x165d40a800000000, |
| 2392 | 0x173ba23100000000, 0xd7e42cf000000000, 0x1110d46300000000, |
| 2393 | 0xd1cf5aa200000000, 0xd0a9b83b00000000, 0x107636fa00000000, |
| 2394 | 0x93630dd300000000, 0x53bc831200000000, 0x52da618b00000000, |
| 2395 | 0x9205ef4a00000000, 0x48ba7df100000000, 0x8865f33000000000, |
| 2396 | 0x890311a900000000, 0x49dc9f6800000000, 0xcac9a44100000000, |
| 2397 | 0x0a162a8000000000, 0x0b70c81900000000, 0xcbaf46d800000000, |
| 2398 | 0x0d5bbe4b00000000, 0xcd84308a00000000, 0xcce2d21300000000, |
| 2399 | 0x0c3d5cd200000000, 0x8f2867fb00000000, 0x4ff7e93a00000000, |
| 2400 | 0x4e910ba300000000, 0x8e4e856200000000, 0x837e8b5f00000000, |
| 2401 | 0x43a1059e00000000, 0x42c7e70700000000, 0x821869c600000000, |
| 2402 | 0x010d52ef00000000, 0xc1d2dc2e00000000, 0xc0b43eb700000000, |
| 2403 | 0x006bb07600000000, 0xc69f48e500000000, 0x0640c62400000000, |
| 2404 | 0x072624bd00000000, 0xc7f9aa7c00000000, 0x44ec915500000000, |
| 2405 | 0x84331f9400000000, 0x8555fd0d00000000, 0x458a73cc00000000, |
| 2406 | 0x702ca9a100000000, 0xb0f3276000000000, 0xb195c5f900000000, |
| 2407 | 0x714a4b3800000000, 0xf25f701100000000, 0x3280fed000000000, |
| 2408 | 0x33e61c4900000000, 0xf339928800000000, 0x35cd6a1b00000000, |
| 2409 | 0xf512e4da00000000, 0xf474064300000000, 0x34ab888200000000, |
| 2410 | 0xb7beb3ab00000000, 0x77613d6a00000000, 0x7607dff300000000, |
| 2411 | 0xb6d8513200000000, 0xbbe85f0f00000000, 0x7b37d1ce00000000, |
| 2412 | 0x7a51335700000000, 0xba8ebd9600000000, 0x399b86bf00000000, |
| 2413 | 0xf944087e00000000, 0xf822eae700000000, 0x38fd642600000000, |
| 2414 | 0xfe099cb500000000, 0x3ed6127400000000, 0x3fb0f0ed00000000, |
| 2415 | 0xff6f7e2c00000000, 0x7c7a450500000000, 0xbca5cbc400000000, |
| 2416 | 0xbdc3295d00000000, 0x7d1ca79c00000000, 0xa7a3352700000000, |
| 2417 | 0x677cbbe600000000, 0x661a597f00000000, 0xa6c5d7be00000000, |
| 2418 | 0x25d0ec9700000000, 0xe50f625600000000, 0xe46980cf00000000, |
| 2419 | 0x24b60e0e00000000, 0xe242f69d00000000, 0x229d785c00000000, |
| 2420 | 0x23fb9ac500000000, 0xe324140400000000, 0x60312f2d00000000, |
| 2421 | 0xa0eea1ec00000000, 0xa188437500000000, 0x6157cdb400000000, |
| 2422 | 0x6c67c38900000000, 0xacb84d4800000000, 0xaddeafd100000000, |
| 2423 | 0x6d01211000000000, 0xee141a3900000000, 0x2ecb94f800000000, |
| 2424 | 0x2fad766100000000, 0xef72f8a000000000, 0x2986003300000000, |
| 2425 | 0xe9598ef200000000, 0xe83f6c6b00000000, 0x28e0e2aa00000000, |
| 2426 | 0xabf5d98300000000, 0x6b2a574200000000, 0x6a4cb5db00000000, |
| 2427 | 0xaa933b1a00000000}, |
| 2428 | {0x0000000000000000, 0x6f4ca59b00000000, 0x9f9e3bec00000000, |
| 2429 | 0xf0d29e7700000000, 0x7f3b060300000000, 0x1077a39800000000, |
| 2430 | 0xe0a53def00000000, 0x8fe9987400000000, 0xfe760c0600000000, |
| 2431 | 0x913aa99d00000000, 0x61e837ea00000000, 0x0ea4927100000000, |
| 2432 | 0x814d0a0500000000, 0xee01af9e00000000, 0x1ed331e900000000, |
| 2433 | 0x719f947200000000, 0xfced180c00000000, 0x93a1bd9700000000, |
| 2434 | 0x637323e000000000, 0x0c3f867b00000000, 0x83d61e0f00000000, |
| 2435 | 0xec9abb9400000000, 0x1c4825e300000000, 0x7304807800000000, |
| 2436 | 0x029b140a00000000, 0x6dd7b19100000000, 0x9d052fe600000000, |
| 2437 | 0xf2498a7d00000000, 0x7da0120900000000, 0x12ecb79200000000, |
| 2438 | 0xe23e29e500000000, 0x8d728c7e00000000, 0xf8db311800000000, |
| 2439 | 0x9797948300000000, 0x67450af400000000, 0x0809af6f00000000, |
| 2440 | 0x87e0371b00000000, 0xe8ac928000000000, 0x187e0cf700000000, |
| 2441 | 0x7732a96c00000000, 0x06ad3d1e00000000, 0x69e1988500000000, |
| 2442 | 0x993306f200000000, 0xf67fa36900000000, 0x79963b1d00000000, |
| 2443 | 0x16da9e8600000000, 0xe60800f100000000, 0x8944a56a00000000, |
| 2444 | 0x0436291400000000, 0x6b7a8c8f00000000, 0x9ba812f800000000, |
| 2445 | 0xf4e4b76300000000, 0x7b0d2f1700000000, 0x14418a8c00000000, |
| 2446 | 0xe49314fb00000000, 0x8bdfb16000000000, 0xfa40251200000000, |
| 2447 | 0x950c808900000000, 0x65de1efe00000000, 0x0a92bb6500000000, |
| 2448 | 0x857b231100000000, 0xea37868a00000000, 0x1ae518fd00000000, |
| 2449 | 0x75a9bd6600000000, 0xf0b7633000000000, 0x9ffbc6ab00000000, |
| 2450 | 0x6f2958dc00000000, 0x0065fd4700000000, 0x8f8c653300000000, |
| 2451 | 0xe0c0c0a800000000, 0x10125edf00000000, 0x7f5efb4400000000, |
| 2452 | 0x0ec16f3600000000, 0x618dcaad00000000, 0x915f54da00000000, |
| 2453 | 0xfe13f14100000000, 0x71fa693500000000, 0x1eb6ccae00000000, |
| 2454 | 0xee6452d900000000, 0x8128f74200000000, 0x0c5a7b3c00000000, |
| 2455 | 0x6316dea700000000, 0x93c440d000000000, 0xfc88e54b00000000, |
| 2456 | 0x73617d3f00000000, 0x1c2dd8a400000000, 0xecff46d300000000, |
| 2457 | 0x83b3e34800000000, 0xf22c773a00000000, 0x9d60d2a100000000, |
| 2458 | 0x6db24cd600000000, 0x02fee94d00000000, 0x8d17713900000000, |
| 2459 | 0xe25bd4a200000000, 0x12894ad500000000, 0x7dc5ef4e00000000, |
| 2460 | 0x086c522800000000, 0x6720f7b300000000, 0x97f269c400000000, |
| 2461 | 0xf8becc5f00000000, 0x7757542b00000000, 0x181bf1b000000000, |
| 2462 | 0xe8c96fc700000000, 0x8785ca5c00000000, 0xf61a5e2e00000000, |
| 2463 | 0x9956fbb500000000, 0x698465c200000000, 0x06c8c05900000000, |
| 2464 | 0x8921582d00000000, 0xe66dfdb600000000, 0x16bf63c100000000, |
| 2465 | 0x79f3c65a00000000, 0xf4814a2400000000, 0x9bcdefbf00000000, |
| 2466 | 0x6b1f71c800000000, 0x0453d45300000000, 0x8bba4c2700000000, |
| 2467 | 0xe4f6e9bc00000000, 0x142477cb00000000, 0x7b68d25000000000, |
| 2468 | 0x0af7462200000000, 0x65bbe3b900000000, 0x95697dce00000000, |
| 2469 | 0xfa25d85500000000, 0x75cc402100000000, 0x1a80e5ba00000000, |
| 2470 | 0xea527bcd00000000, 0x851ede5600000000, 0xe06fc76000000000, |
| 2471 | 0x8f2362fb00000000, 0x7ff1fc8c00000000, 0x10bd591700000000, |
| 2472 | 0x9f54c16300000000, 0xf01864f800000000, 0x00cafa8f00000000, |
| 2473 | 0x6f865f1400000000, 0x1e19cb6600000000, 0x71556efd00000000, |
| 2474 | 0x8187f08a00000000, 0xeecb551100000000, 0x6122cd6500000000, |
| 2475 | 0x0e6e68fe00000000, 0xfebcf68900000000, 0x91f0531200000000, |
| 2476 | 0x1c82df6c00000000, 0x73ce7af700000000, 0x831ce48000000000, |
| 2477 | 0xec50411b00000000, 0x63b9d96f00000000, 0x0cf57cf400000000, |
| 2478 | 0xfc27e28300000000, 0x936b471800000000, 0xe2f4d36a00000000, |
| 2479 | 0x8db876f100000000, 0x7d6ae88600000000, 0x12264d1d00000000, |
| 2480 | 0x9dcfd56900000000, 0xf28370f200000000, 0x0251ee8500000000, |
| 2481 | 0x6d1d4b1e00000000, 0x18b4f67800000000, 0x77f853e300000000, |
| 2482 | 0x872acd9400000000, 0xe866680f00000000, 0x678ff07b00000000, |
| 2483 | 0x08c355e000000000, 0xf811cb9700000000, 0x975d6e0c00000000, |
| 2484 | 0xe6c2fa7e00000000, 0x898e5fe500000000, 0x795cc19200000000, |
| 2485 | 0x1610640900000000, 0x99f9fc7d00000000, 0xf6b559e600000000, |
| 2486 | 0x0667c79100000000, 0x692b620a00000000, 0xe459ee7400000000, |
| 2487 | 0x8b154bef00000000, 0x7bc7d59800000000, 0x148b700300000000, |
| 2488 | 0x9b62e87700000000, 0xf42e4dec00000000, 0x04fcd39b00000000, |
| 2489 | 0x6bb0760000000000, 0x1a2fe27200000000, 0x756347e900000000, |
| 2490 | 0x85b1d99e00000000, 0xeafd7c0500000000, 0x6514e47100000000, |
| 2491 | 0x0a5841ea00000000, 0xfa8adf9d00000000, 0x95c67a0600000000, |
| 2492 | 0x10d8a45000000000, 0x7f9401cb00000000, 0x8f469fbc00000000, |
| 2493 | 0xe00a3a2700000000, 0x6fe3a25300000000, 0x00af07c800000000, |
| 2494 | 0xf07d99bf00000000, 0x9f313c2400000000, 0xeeaea85600000000, |
| 2495 | 0x81e20dcd00000000, 0x713093ba00000000, 0x1e7c362100000000, |
| 2496 | 0x9195ae5500000000, 0xfed90bce00000000, 0x0e0b95b900000000, |
| 2497 | 0x6147302200000000, 0xec35bc5c00000000, 0x837919c700000000, |
| 2498 | 0x73ab87b000000000, 0x1ce7222b00000000, 0x930eba5f00000000, |
| 2499 | 0xfc421fc400000000, 0x0c9081b300000000, 0x63dc242800000000, |
| 2500 | 0x1243b05a00000000, 0x7d0f15c100000000, 0x8ddd8bb600000000, |
| 2501 | 0xe2912e2d00000000, 0x6d78b65900000000, 0x023413c200000000, |
| 2502 | 0xf2e68db500000000, 0x9daa282e00000000, 0xe803954800000000, |
| 2503 | 0x874f30d300000000, 0x779daea400000000, 0x18d10b3f00000000, |
| 2504 | 0x9738934b00000000, 0xf87436d000000000, 0x08a6a8a700000000, |
| 2505 | 0x67ea0d3c00000000, 0x1675994e00000000, 0x79393cd500000000, |
| 2506 | 0x89eba2a200000000, 0xe6a7073900000000, 0x694e9f4d00000000, |
| 2507 | 0x06023ad600000000, 0xf6d0a4a100000000, 0x999c013a00000000, |
| 2508 | 0x14ee8d4400000000, 0x7ba228df00000000, 0x8b70b6a800000000, |
| 2509 | 0xe43c133300000000, 0x6bd58b4700000000, 0x04992edc00000000, |
| 2510 | 0xf44bb0ab00000000, 0x9b07153000000000, 0xea98814200000000, |
| 2511 | 0x85d424d900000000, 0x7506baae00000000, 0x1a4a1f3500000000, |
| 2512 | 0x95a3874100000000, 0xfaef22da00000000, 0x0a3dbcad00000000, |
| 2513 | 0x6571193600000000}, |
| 2514 | {0x0000000000000000, 0x85d996dd00000000, 0x4bb55c6000000000, |
| 2515 | 0xce6ccabd00000000, 0x966ab9c000000000, 0x13b32f1d00000000, |
| 2516 | 0xdddfe5a000000000, 0x5806737d00000000, 0x6dd3035a00000000, |
| 2517 | 0xe80a958700000000, 0x26665f3a00000000, 0xa3bfc9e700000000, |
| 2518 | 0xfbb9ba9a00000000, 0x7e602c4700000000, 0xb00ce6fa00000000, |
| 2519 | 0x35d5702700000000, 0xdaa607b400000000, 0x5f7f916900000000, |
| 2520 | 0x91135bd400000000, 0x14cacd0900000000, 0x4cccbe7400000000, |
| 2521 | 0xc91528a900000000, 0x0779e21400000000, 0x82a074c900000000, |
| 2522 | 0xb77504ee00000000, 0x32ac923300000000, 0xfcc0588e00000000, |
| 2523 | 0x7919ce5300000000, 0x211fbd2e00000000, 0xa4c62bf300000000, |
| 2524 | 0x6aaae14e00000000, 0xef73779300000000, 0xf54b7eb300000000, |
| 2525 | 0x7092e86e00000000, 0xbefe22d300000000, 0x3b27b40e00000000, |
| 2526 | 0x6321c77300000000, 0xe6f851ae00000000, 0x28949b1300000000, |
| 2527 | 0xad4d0dce00000000, 0x98987de900000000, 0x1d41eb3400000000, |
| 2528 | 0xd32d218900000000, 0x56f4b75400000000, 0x0ef2c42900000000, |
| 2529 | 0x8b2b52f400000000, 0x4547984900000000, 0xc09e0e9400000000, |
| 2530 | 0x2fed790700000000, 0xaa34efda00000000, 0x6458256700000000, |
| 2531 | 0xe181b3ba00000000, 0xb987c0c700000000, 0x3c5e561a00000000, |
| 2532 | 0xf2329ca700000000, 0x77eb0a7a00000000, 0x423e7a5d00000000, |
| 2533 | 0xc7e7ec8000000000, 0x098b263d00000000, 0x8c52b0e000000000, |
| 2534 | 0xd454c39d00000000, 0x518d554000000000, 0x9fe19ffd00000000, |
| 2535 | 0x1a38092000000000, 0xab918dbd00000000, 0x2e481b6000000000, |
| 2536 | 0xe024d1dd00000000, 0x65fd470000000000, 0x3dfb347d00000000, |
| 2537 | 0xb822a2a000000000, 0x764e681d00000000, 0xf397fec000000000, |
| 2538 | 0xc6428ee700000000, 0x439b183a00000000, 0x8df7d28700000000, |
| 2539 | 0x082e445a00000000, 0x5028372700000000, 0xd5f1a1fa00000000, |
| 2540 | 0x1b9d6b4700000000, 0x9e44fd9a00000000, 0x71378a0900000000, |
| 2541 | 0xf4ee1cd400000000, 0x3a82d66900000000, 0xbf5b40b400000000, |
| 2542 | 0xe75d33c900000000, 0x6284a51400000000, 0xace86fa900000000, |
| 2543 | 0x2931f97400000000, 0x1ce4895300000000, 0x993d1f8e00000000, |
| 2544 | 0x5751d53300000000, 0xd28843ee00000000, 0x8a8e309300000000, |
| 2545 | 0x0f57a64e00000000, 0xc13b6cf300000000, 0x44e2fa2e00000000, |
| 2546 | 0x5edaf30e00000000, 0xdb0365d300000000, 0x156faf6e00000000, |
| 2547 | 0x90b639b300000000, 0xc8b04ace00000000, 0x4d69dc1300000000, |
| 2548 | 0x830516ae00000000, 0x06dc807300000000, 0x3309f05400000000, |
| 2549 | 0xb6d0668900000000, 0x78bcac3400000000, 0xfd653ae900000000, |
| 2550 | 0xa563499400000000, 0x20badf4900000000, 0xeed615f400000000, |
| 2551 | 0x6b0f832900000000, 0x847cf4ba00000000, 0x01a5626700000000, |
| 2552 | 0xcfc9a8da00000000, 0x4a103e0700000000, 0x12164d7a00000000, |
| 2553 | 0x97cfdba700000000, 0x59a3111a00000000, 0xdc7a87c700000000, |
| 2554 | 0xe9aff7e000000000, 0x6c76613d00000000, 0xa21aab8000000000, |
| 2555 | 0x27c33d5d00000000, 0x7fc54e2000000000, 0xfa1cd8fd00000000, |
| 2556 | 0x3470124000000000, 0xb1a9849d00000000, 0x17256aa000000000, |
| 2557 | 0x92fcfc7d00000000, 0x5c9036c000000000, 0xd949a01d00000000, |
| 2558 | 0x814fd36000000000, 0x049645bd00000000, 0xcafa8f0000000000, |
| 2559 | 0x4f2319dd00000000, 0x7af669fa00000000, 0xff2fff2700000000, |
| 2560 | 0x3143359a00000000, 0xb49aa34700000000, 0xec9cd03a00000000, |
| 2561 | 0x694546e700000000, 0xa7298c5a00000000, 0x22f01a8700000000, |
| 2562 | 0xcd836d1400000000, 0x485afbc900000000, 0x8636317400000000, |
| 2563 | 0x03efa7a900000000, 0x5be9d4d400000000, 0xde30420900000000, |
| 2564 | 0x105c88b400000000, 0x95851e6900000000, 0xa0506e4e00000000, |
| 2565 | 0x2589f89300000000, 0xebe5322e00000000, 0x6e3ca4f300000000, |
| 2566 | 0x363ad78e00000000, 0xb3e3415300000000, 0x7d8f8bee00000000, |
| 2567 | 0xf8561d3300000000, 0xe26e141300000000, 0x67b782ce00000000, |
| 2568 | 0xa9db487300000000, 0x2c02deae00000000, 0x7404add300000000, |
| 2569 | 0xf1dd3b0e00000000, 0x3fb1f1b300000000, 0xba68676e00000000, |
| 2570 | 0x8fbd174900000000, 0x0a64819400000000, 0xc4084b2900000000, |
| 2571 | 0x41d1ddf400000000, 0x19d7ae8900000000, 0x9c0e385400000000, |
| 2572 | 0x5262f2e900000000, 0xd7bb643400000000, 0x38c813a700000000, |
| 2573 | 0xbd11857a00000000, 0x737d4fc700000000, 0xf6a4d91a00000000, |
| 2574 | 0xaea2aa6700000000, 0x2b7b3cba00000000, 0xe517f60700000000, |
| 2575 | 0x60ce60da00000000, 0x551b10fd00000000, 0xd0c2862000000000, |
| 2576 | 0x1eae4c9d00000000, 0x9b77da4000000000, 0xc371a93d00000000, |
| 2577 | 0x46a83fe000000000, 0x88c4f55d00000000, 0x0d1d638000000000, |
| 2578 | 0xbcb4e71d00000000, 0x396d71c000000000, 0xf701bb7d00000000, |
| 2579 | 0x72d82da000000000, 0x2ade5edd00000000, 0xaf07c80000000000, |
| 2580 | 0x616b02bd00000000, 0xe4b2946000000000, 0xd167e44700000000, |
| 2581 | 0x54be729a00000000, 0x9ad2b82700000000, 0x1f0b2efa00000000, |
| 2582 | 0x470d5d8700000000, 0xc2d4cb5a00000000, 0x0cb801e700000000, |
| 2583 | 0x8961973a00000000, 0x6612e0a900000000, 0xe3cb767400000000, |
| 2584 | 0x2da7bcc900000000, 0xa87e2a1400000000, 0xf078596900000000, |
| 2585 | 0x75a1cfb400000000, 0xbbcd050900000000, 0x3e1493d400000000, |
| 2586 | 0x0bc1e3f300000000, 0x8e18752e00000000, 0x4074bf9300000000, |
| 2587 | 0xc5ad294e00000000, 0x9dab5a3300000000, 0x1872ccee00000000, |
| 2588 | 0xd61e065300000000, 0x53c7908e00000000, 0x49ff99ae00000000, |
| 2589 | 0xcc260f7300000000, 0x024ac5ce00000000, 0x8793531300000000, |
| 2590 | 0xdf95206e00000000, 0x5a4cb6b300000000, 0x94207c0e00000000, |
| 2591 | 0x11f9ead300000000, 0x242c9af400000000, 0xa1f50c2900000000, |
| 2592 | 0x6f99c69400000000, 0xea40504900000000, 0xb246233400000000, |
| 2593 | 0x379fb5e900000000, 0xf9f37f5400000000, 0x7c2ae98900000000, |
| 2594 | 0x93599e1a00000000, 0x168008c700000000, 0xd8ecc27a00000000, |
| 2595 | 0x5d3554a700000000, 0x053327da00000000, 0x80eab10700000000, |
| 2596 | 0x4e867bba00000000, 0xcb5fed6700000000, 0xfe8a9d4000000000, |
| 2597 | 0x7b530b9d00000000, 0xb53fc12000000000, 0x30e657fd00000000, |
| 2598 | 0x68e0248000000000, 0xed39b25d00000000, 0x235578e000000000, |
| 2599 | 0xa68cee3d00000000}, |
| 2600 | {0x0000000000000000, 0x76e10f9d00000000, 0xadc46ee100000000, |
| 2601 | 0xdb25617c00000000, 0x1b8fac1900000000, 0x6d6ea38400000000, |
| 2602 | 0xb64bc2f800000000, 0xc0aacd6500000000, 0x361e593300000000, |
| 2603 | 0x40ff56ae00000000, 0x9bda37d200000000, 0xed3b384f00000000, |
| 2604 | 0x2d91f52a00000000, 0x5b70fab700000000, 0x80559bcb00000000, |
| 2605 | 0xf6b4945600000000, 0x6c3cb26600000000, 0x1addbdfb00000000, |
| 2606 | 0xc1f8dc8700000000, 0xb719d31a00000000, 0x77b31e7f00000000, |
| 2607 | 0x015211e200000000, 0xda77709e00000000, 0xac967f0300000000, |
| 2608 | 0x5a22eb5500000000, 0x2cc3e4c800000000, 0xf7e685b400000000, |
| 2609 | 0x81078a2900000000, 0x41ad474c00000000, 0x374c48d100000000, |
| 2610 | 0xec6929ad00000000, 0x9a88263000000000, 0xd87864cd00000000, |
| 2611 | 0xae996b5000000000, 0x75bc0a2c00000000, 0x035d05b100000000, |
| 2612 | 0xc3f7c8d400000000, 0xb516c74900000000, 0x6e33a63500000000, |
| 2613 | 0x18d2a9a800000000, 0xee663dfe00000000, 0x9887326300000000, |
| 2614 | 0x43a2531f00000000, 0x35435c8200000000, 0xf5e991e700000000, |
| 2615 | 0x83089e7a00000000, 0x582dff0600000000, 0x2eccf09b00000000, |
| 2616 | 0xb444d6ab00000000, 0xc2a5d93600000000, 0x1980b84a00000000, |
| 2617 | 0x6f61b7d700000000, 0xafcb7ab200000000, 0xd92a752f00000000, |
| 2618 | 0x020f145300000000, 0x74ee1bce00000000, 0x825a8f9800000000, |
| 2619 | 0xf4bb800500000000, 0x2f9ee17900000000, 0x597feee400000000, |
| 2620 | 0x99d5238100000000, 0xef342c1c00000000, 0x34114d6000000000, |
| 2621 | 0x42f042fd00000000, 0xf1f7b94100000000, 0x8716b6dc00000000, |
| 2622 | 0x5c33d7a000000000, 0x2ad2d83d00000000, 0xea78155800000000, |
| 2623 | 0x9c991ac500000000, 0x47bc7bb900000000, 0x315d742400000000, |
| 2624 | 0xc7e9e07200000000, 0xb108efef00000000, 0x6a2d8e9300000000, |
| 2625 | 0x1ccc810e00000000, 0xdc664c6b00000000, 0xaa8743f600000000, |
| 2626 | 0x71a2228a00000000, 0x07432d1700000000, 0x9dcb0b2700000000, |
| 2627 | 0xeb2a04ba00000000, 0x300f65c600000000, 0x46ee6a5b00000000, |
| 2628 | 0x8644a73e00000000, 0xf0a5a8a300000000, 0x2b80c9df00000000, |
| 2629 | 0x5d61c64200000000, 0xabd5521400000000, 0xdd345d8900000000, |
| 2630 | 0x06113cf500000000, 0x70f0336800000000, 0xb05afe0d00000000, |
| 2631 | 0xc6bbf19000000000, 0x1d9e90ec00000000, 0x6b7f9f7100000000, |
| 2632 | 0x298fdd8c00000000, 0x5f6ed21100000000, 0x844bb36d00000000, |
| 2633 | 0xf2aabcf000000000, 0x3200719500000000, 0x44e17e0800000000, |
| 2634 | 0x9fc41f7400000000, 0xe92510e900000000, 0x1f9184bf00000000, |
| 2635 | 0x69708b2200000000, 0xb255ea5e00000000, 0xc4b4e5c300000000, |
| 2636 | 0x041e28a600000000, 0x72ff273b00000000, 0xa9da464700000000, |
| 2637 | 0xdf3b49da00000000, 0x45b36fea00000000, 0x3352607700000000, |
| 2638 | 0xe877010b00000000, 0x9e960e9600000000, 0x5e3cc3f300000000, |
| 2639 | 0x28ddcc6e00000000, 0xf3f8ad1200000000, 0x8519a28f00000000, |
| 2640 | 0x73ad36d900000000, 0x054c394400000000, 0xde69583800000000, |
| 2641 | 0xa88857a500000000, 0x68229ac000000000, 0x1ec3955d00000000, |
| 2642 | 0xc5e6f42100000000, 0xb307fbbc00000000, 0xe2ef738300000000, |
| 2643 | 0x940e7c1e00000000, 0x4f2b1d6200000000, 0x39ca12ff00000000, |
| 2644 | 0xf960df9a00000000, 0x8f81d00700000000, 0x54a4b17b00000000, |
| 2645 | 0x2245bee600000000, 0xd4f12ab000000000, 0xa210252d00000000, |
| 2646 | 0x7935445100000000, 0x0fd44bcc00000000, 0xcf7e86a900000000, |
| 2647 | 0xb99f893400000000, 0x62bae84800000000, 0x145be7d500000000, |
| 2648 | 0x8ed3c1e500000000, 0xf832ce7800000000, 0x2317af0400000000, |
| 2649 | 0x55f6a09900000000, 0x955c6dfc00000000, 0xe3bd626100000000, |
| 2650 | 0x3898031d00000000, 0x4e790c8000000000, 0xb8cd98d600000000, |
| 2651 | 0xce2c974b00000000, 0x1509f63700000000, 0x63e8f9aa00000000, |
| 2652 | 0xa34234cf00000000, 0xd5a33b5200000000, 0x0e865a2e00000000, |
| 2653 | 0x786755b300000000, 0x3a97174e00000000, 0x4c7618d300000000, |
| 2654 | 0x975379af00000000, 0xe1b2763200000000, 0x2118bb5700000000, |
| 2655 | 0x57f9b4ca00000000, 0x8cdcd5b600000000, 0xfa3dda2b00000000, |
| 2656 | 0x0c894e7d00000000, 0x7a6841e000000000, 0xa14d209c00000000, |
| 2657 | 0xd7ac2f0100000000, 0x1706e26400000000, 0x61e7edf900000000, |
| 2658 | 0xbac28c8500000000, 0xcc23831800000000, 0x56aba52800000000, |
| 2659 | 0x204aaab500000000, 0xfb6fcbc900000000, 0x8d8ec45400000000, |
| 2660 | 0x4d24093100000000, 0x3bc506ac00000000, 0xe0e067d000000000, |
| 2661 | 0x9601684d00000000, 0x60b5fc1b00000000, 0x1654f38600000000, |
| 2662 | 0xcd7192fa00000000, 0xbb909d6700000000, 0x7b3a500200000000, |
| 2663 | 0x0ddb5f9f00000000, 0xd6fe3ee300000000, 0xa01f317e00000000, |
| 2664 | 0x1318cac200000000, 0x65f9c55f00000000, 0xbedca42300000000, |
| 2665 | 0xc83dabbe00000000, 0x089766db00000000, 0x7e76694600000000, |
| 2666 | 0xa553083a00000000, 0xd3b207a700000000, 0x250693f100000000, |
| 2667 | 0x53e79c6c00000000, 0x88c2fd1000000000, 0xfe23f28d00000000, |
| 2668 | 0x3e893fe800000000, 0x4868307500000000, 0x934d510900000000, |
| 2669 | 0xe5ac5e9400000000, 0x7f2478a400000000, 0x09c5773900000000, |
| 2670 | 0xd2e0164500000000, 0xa40119d800000000, 0x64abd4bd00000000, |
| 2671 | 0x124adb2000000000, 0xc96fba5c00000000, 0xbf8eb5c100000000, |
| 2672 | 0x493a219700000000, 0x3fdb2e0a00000000, 0xe4fe4f7600000000, |
| 2673 | 0x921f40eb00000000, 0x52b58d8e00000000, 0x2454821300000000, |
| 2674 | 0xff71e36f00000000, 0x8990ecf200000000, 0xcb60ae0f00000000, |
| 2675 | 0xbd81a19200000000, 0x66a4c0ee00000000, 0x1045cf7300000000, |
| 2676 | 0xd0ef021600000000, 0xa60e0d8b00000000, 0x7d2b6cf700000000, |
| 2677 | 0x0bca636a00000000, 0xfd7ef73c00000000, 0x8b9ff8a100000000, |
| 2678 | 0x50ba99dd00000000, 0x265b964000000000, 0xe6f15b2500000000, |
| 2679 | 0x901054b800000000, 0x4b3535c400000000, 0x3dd43a5900000000, |
| 2680 | 0xa75c1c6900000000, 0xd1bd13f400000000, 0x0a98728800000000, |
| 2681 | 0x7c797d1500000000, 0xbcd3b07000000000, 0xca32bfed00000000, |
| 2682 | 0x1117de9100000000, 0x67f6d10c00000000, 0x9142455a00000000, |
| 2683 | 0xe7a34ac700000000, 0x3c862bbb00000000, 0x4a67242600000000, |
| 2684 | 0x8acde94300000000, 0xfc2ce6de00000000, 0x270987a200000000, |
| 2685 | 0x51e8883f00000000}, |
| 2686 | {0x0000000000000000, 0xe8dbfbb900000000, 0x91b186a800000000, |
| 2687 | 0x796a7d1100000000, 0x63657c8a00000000, 0x8bbe873300000000, |
| 2688 | 0xf2d4fa2200000000, 0x1a0f019b00000000, 0x87cc89cf00000000, |
| 2689 | 0x6f17727600000000, 0x167d0f6700000000, 0xfea6f4de00000000, |
| 2690 | 0xe4a9f54500000000, 0x0c720efc00000000, 0x751873ed00000000, |
| 2691 | 0x9dc3885400000000, 0x4f9f624400000000, 0xa74499fd00000000, |
| 2692 | 0xde2ee4ec00000000, 0x36f51f5500000000, 0x2cfa1ece00000000, |
| 2693 | 0xc421e57700000000, 0xbd4b986600000000, 0x559063df00000000, |
| 2694 | 0xc853eb8b00000000, 0x2088103200000000, 0x59e26d2300000000, |
| 2695 | 0xb139969a00000000, 0xab36970100000000, 0x43ed6cb800000000, |
| 2696 | 0x3a8711a900000000, 0xd25cea1000000000, 0x9e3ec58800000000, |
| 2697 | 0x76e53e3100000000, 0x0f8f432000000000, 0xe754b89900000000, |
| 2698 | 0xfd5bb90200000000, 0x158042bb00000000, 0x6cea3faa00000000, |
| 2699 | 0x8431c41300000000, 0x19f24c4700000000, 0xf129b7fe00000000, |
| 2700 | 0x8843caef00000000, 0x6098315600000000, 0x7a9730cd00000000, |
| 2701 | 0x924ccb7400000000, 0xeb26b66500000000, 0x03fd4ddc00000000, |
| 2702 | 0xd1a1a7cc00000000, 0x397a5c7500000000, 0x4010216400000000, |
| 2703 | 0xa8cbdadd00000000, 0xb2c4db4600000000, 0x5a1f20ff00000000, |
| 2704 | 0x23755dee00000000, 0xcbaea65700000000, 0x566d2e0300000000, |
| 2705 | 0xbeb6d5ba00000000, 0xc7dca8ab00000000, 0x2f07531200000000, |
| 2706 | 0x3508528900000000, 0xddd3a93000000000, 0xa4b9d42100000000, |
| 2707 | 0x4c622f9800000000, 0x7d7bfbca00000000, 0x95a0007300000000, |
| 2708 | 0xecca7d6200000000, 0x041186db00000000, 0x1e1e874000000000, |
| 2709 | 0xf6c57cf900000000, 0x8faf01e800000000, 0x6774fa5100000000, |
| 2710 | 0xfab7720500000000, 0x126c89bc00000000, 0x6b06f4ad00000000, |
| 2711 | 0x83dd0f1400000000, 0x99d20e8f00000000, 0x7109f53600000000, |
| 2712 | 0x0863882700000000, 0xe0b8739e00000000, 0x32e4998e00000000, |
| 2713 | 0xda3f623700000000, 0xa3551f2600000000, 0x4b8ee49f00000000, |
| 2714 | 0x5181e50400000000, 0xb95a1ebd00000000, 0xc03063ac00000000, |
| 2715 | 0x28eb981500000000, 0xb528104100000000, 0x5df3ebf800000000, |
| 2716 | 0x249996e900000000, 0xcc426d5000000000, 0xd64d6ccb00000000, |
| 2717 | 0x3e96977200000000, 0x47fcea6300000000, 0xaf2711da00000000, |
| 2718 | 0xe3453e4200000000, 0x0b9ec5fb00000000, 0x72f4b8ea00000000, |
| 2719 | 0x9a2f435300000000, 0x802042c800000000, 0x68fbb97100000000, |
| 2720 | 0x1191c46000000000, 0xf94a3fd900000000, 0x6489b78d00000000, |
| 2721 | 0x8c524c3400000000, 0xf538312500000000, 0x1de3ca9c00000000, |
| 2722 | 0x07eccb0700000000, 0xef3730be00000000, 0x965d4daf00000000, |
| 2723 | 0x7e86b61600000000, 0xacda5c0600000000, 0x4401a7bf00000000, |
| 2724 | 0x3d6bdaae00000000, 0xd5b0211700000000, 0xcfbf208c00000000, |
| 2725 | 0x2764db3500000000, 0x5e0ea62400000000, 0xb6d55d9d00000000, |
| 2726 | 0x2b16d5c900000000, 0xc3cd2e7000000000, 0xbaa7536100000000, |
| 2727 | 0x527ca8d800000000, 0x4873a94300000000, 0xa0a852fa00000000, |
| 2728 | 0xd9c22feb00000000, 0x3119d45200000000, 0xbbf0874e00000000, |
| 2729 | 0x532b7cf700000000, 0x2a4101e600000000, 0xc29afa5f00000000, |
| 2730 | 0xd895fbc400000000, 0x304e007d00000000, 0x49247d6c00000000, |
| 2731 | 0xa1ff86d500000000, 0x3c3c0e8100000000, 0xd4e7f53800000000, |
| 2732 | 0xad8d882900000000, 0x4556739000000000, 0x5f59720b00000000, |
| 2733 | 0xb78289b200000000, 0xcee8f4a300000000, 0x26330f1a00000000, |
| 2734 | 0xf46fe50a00000000, 0x1cb41eb300000000, 0x65de63a200000000, |
| 2735 | 0x8d05981b00000000, 0x970a998000000000, 0x7fd1623900000000, |
| 2736 | 0x06bb1f2800000000, 0xee60e49100000000, 0x73a36cc500000000, |
| 2737 | 0x9b78977c00000000, 0xe212ea6d00000000, 0x0ac911d400000000, |
| 2738 | 0x10c6104f00000000, 0xf81debf600000000, 0x817796e700000000, |
| 2739 | 0x69ac6d5e00000000, 0x25ce42c600000000, 0xcd15b97f00000000, |
| 2740 | 0xb47fc46e00000000, 0x5ca43fd700000000, 0x46ab3e4c00000000, |
| 2741 | 0xae70c5f500000000, 0xd71ab8e400000000, 0x3fc1435d00000000, |
| 2742 | 0xa202cb0900000000, 0x4ad930b000000000, 0x33b34da100000000, |
| 2743 | 0xdb68b61800000000, 0xc167b78300000000, 0x29bc4c3a00000000, |
| 2744 | 0x50d6312b00000000, 0xb80dca9200000000, 0x6a51208200000000, |
| 2745 | 0x828adb3b00000000, 0xfbe0a62a00000000, 0x133b5d9300000000, |
| 2746 | 0x09345c0800000000, 0xe1efa7b100000000, 0x9885daa000000000, |
| 2747 | 0x705e211900000000, 0xed9da94d00000000, 0x054652f400000000, |
| 2748 | 0x7c2c2fe500000000, 0x94f7d45c00000000, 0x8ef8d5c700000000, |
| 2749 | 0x66232e7e00000000, 0x1f49536f00000000, 0xf792a8d600000000, |
| 2750 | 0xc68b7c8400000000, 0x2e50873d00000000, 0x573afa2c00000000, |
| 2751 | 0xbfe1019500000000, 0xa5ee000e00000000, 0x4d35fbb700000000, |
| 2752 | 0x345f86a600000000, 0xdc847d1f00000000, 0x4147f54b00000000, |
| 2753 | 0xa99c0ef200000000, 0xd0f673e300000000, 0x382d885a00000000, |
| 2754 | 0x222289c100000000, 0xcaf9727800000000, 0xb3930f6900000000, |
| 2755 | 0x5b48f4d000000000, 0x89141ec000000000, 0x61cfe57900000000, |
| 2756 | 0x18a5986800000000, 0xf07e63d100000000, 0xea71624a00000000, |
| 2757 | 0x02aa99f300000000, 0x7bc0e4e200000000, 0x931b1f5b00000000, |
| 2758 | 0x0ed8970f00000000, 0xe6036cb600000000, 0x9f6911a700000000, |
| 2759 | 0x77b2ea1e00000000, 0x6dbdeb8500000000, 0x8566103c00000000, |
| 2760 | 0xfc0c6d2d00000000, 0x14d7969400000000, 0x58b5b90c00000000, |
| 2761 | 0xb06e42b500000000, 0xc9043fa400000000, 0x21dfc41d00000000, |
| 2762 | 0x3bd0c58600000000, 0xd30b3e3f00000000, 0xaa61432e00000000, |
| 2763 | 0x42bab89700000000, 0xdf7930c300000000, 0x37a2cb7a00000000, |
| 2764 | 0x4ec8b66b00000000, 0xa6134dd200000000, 0xbc1c4c4900000000, |
| 2765 | 0x54c7b7f000000000, 0x2dadcae100000000, 0xc576315800000000, |
| 2766 | 0x172adb4800000000, 0xfff120f100000000, 0x869b5de000000000, |
| 2767 | 0x6e40a65900000000, 0x744fa7c200000000, 0x9c945c7b00000000, |
| 2768 | 0xe5fe216a00000000, 0x0d25dad300000000, 0x90e6528700000000, |
| 2769 | 0x783da93e00000000, 0x0157d42f00000000, 0xe98c2f9600000000, |
| 2770 | 0xf3832e0d00000000, 0x1b58d5b400000000, 0x6232a8a500000000, |
| 2771 | 0x8ae9531c00000000}, |
| 2772 | {0x0000000000000000, 0x919168ae00000000, 0x6325a08700000000, |
| 2773 | 0xf2b4c82900000000, 0x874c31d400000000, 0x16dd597a00000000, |
| 2774 | 0xe469915300000000, 0x75f8f9fd00000000, 0x4f9f137300000000, |
| 2775 | 0xde0e7bdd00000000, 0x2cbab3f400000000, 0xbd2bdb5a00000000, |
| 2776 | 0xc8d322a700000000, 0x59424a0900000000, 0xabf6822000000000, |
| 2777 | 0x3a67ea8e00000000, 0x9e3e27e600000000, 0x0faf4f4800000000, |
| 2778 | 0xfd1b876100000000, 0x6c8aefcf00000000, 0x1972163200000000, |
| 2779 | 0x88e37e9c00000000, 0x7a57b6b500000000, 0xebc6de1b00000000, |
| 2780 | 0xd1a1349500000000, 0x40305c3b00000000, 0xb284941200000000, |
| 2781 | 0x2315fcbc00000000, 0x56ed054100000000, 0xc77c6def00000000, |
| 2782 | 0x35c8a5c600000000, 0xa459cd6800000000, 0x7d7b3f1700000000, |
| 2783 | 0xecea57b900000000, 0x1e5e9f9000000000, 0x8fcff73e00000000, |
| 2784 | 0xfa370ec300000000, 0x6ba6666d00000000, 0x9912ae4400000000, |
| 2785 | 0x0883c6ea00000000, 0x32e42c6400000000, 0xa37544ca00000000, |
| 2786 | 0x51c18ce300000000, 0xc050e44d00000000, 0xb5a81db000000000, |
| 2787 | 0x2439751e00000000, 0xd68dbd3700000000, 0x471cd59900000000, |
| 2788 | 0xe34518f100000000, 0x72d4705f00000000, 0x8060b87600000000, |
| 2789 | 0x11f1d0d800000000, 0x6409292500000000, 0xf598418b00000000, |
| 2790 | 0x072c89a200000000, 0x96bde10c00000000, 0xacda0b8200000000, |
| 2791 | 0x3d4b632c00000000, 0xcfffab0500000000, 0x5e6ec3ab00000000, |
| 2792 | 0x2b963a5600000000, 0xba0752f800000000, 0x48b39ad100000000, |
| 2793 | 0xd922f27f00000000, 0xfaf67e2e00000000, 0x6b67168000000000, |
| 2794 | 0x99d3dea900000000, 0x0842b60700000000, 0x7dba4ffa00000000, |
| 2795 | 0xec2b275400000000, 0x1e9fef7d00000000, 0x8f0e87d300000000, |
| 2796 | 0xb5696d5d00000000, 0x24f805f300000000, 0xd64ccdda00000000, |
| 2797 | 0x47dda57400000000, 0x32255c8900000000, 0xa3b4342700000000, |
| 2798 | 0x5100fc0e00000000, 0xc09194a000000000, 0x64c859c800000000, |
| 2799 | 0xf559316600000000, 0x07edf94f00000000, 0x967c91e100000000, |
| 2800 | 0xe384681c00000000, 0x721500b200000000, 0x80a1c89b00000000, |
| 2801 | 0x1130a03500000000, 0x2b574abb00000000, 0xbac6221500000000, |
| 2802 | 0x4872ea3c00000000, 0xd9e3829200000000, 0xac1b7b6f00000000, |
| 2803 | 0x3d8a13c100000000, 0xcf3edbe800000000, 0x5eafb34600000000, |
| 2804 | 0x878d413900000000, 0x161c299700000000, 0xe4a8e1be00000000, |
| 2805 | 0x7539891000000000, 0x00c170ed00000000, 0x9150184300000000, |
| 2806 | 0x63e4d06a00000000, 0xf275b8c400000000, 0xc812524a00000000, |
| 2807 | 0x59833ae400000000, 0xab37f2cd00000000, 0x3aa69a6300000000, |
| 2808 | 0x4f5e639e00000000, 0xdecf0b3000000000, 0x2c7bc31900000000, |
| 2809 | 0xbdeaabb700000000, 0x19b366df00000000, 0x88220e7100000000, |
| 2810 | 0x7a96c65800000000, 0xeb07aef600000000, 0x9eff570b00000000, |
| 2811 | 0x0f6e3fa500000000, 0xfddaf78c00000000, 0x6c4b9f2200000000, |
| 2812 | 0x562c75ac00000000, 0xc7bd1d0200000000, 0x3509d52b00000000, |
| 2813 | 0xa498bd8500000000, 0xd160447800000000, 0x40f12cd600000000, |
| 2814 | 0xb245e4ff00000000, 0x23d48c5100000000, 0xf4edfd5c00000000, |
| 2815 | 0x657c95f200000000, 0x97c85ddb00000000, 0x0659357500000000, |
| 2816 | 0x73a1cc8800000000, 0xe230a42600000000, 0x10846c0f00000000, |
| 2817 | 0x811504a100000000, 0xbb72ee2f00000000, 0x2ae3868100000000, |
| 2818 | 0xd8574ea800000000, 0x49c6260600000000, 0x3c3edffb00000000, |
| 2819 | 0xadafb75500000000, 0x5f1b7f7c00000000, 0xce8a17d200000000, |
| 2820 | 0x6ad3daba00000000, 0xfb42b21400000000, 0x09f67a3d00000000, |
| 2821 | 0x9867129300000000, 0xed9feb6e00000000, 0x7c0e83c000000000, |
| 2822 | 0x8eba4be900000000, 0x1f2b234700000000, 0x254cc9c900000000, |
| 2823 | 0xb4dda16700000000, 0x4669694e00000000, 0xd7f801e000000000, |
| 2824 | 0xa200f81d00000000, 0x339190b300000000, 0xc125589a00000000, |
| 2825 | 0x50b4303400000000, 0x8996c24b00000000, 0x1807aae500000000, |
| 2826 | 0xeab362cc00000000, 0x7b220a6200000000, 0x0edaf39f00000000, |
| 2827 | 0x9f4b9b3100000000, 0x6dff531800000000, 0xfc6e3bb600000000, |
| 2828 | 0xc609d13800000000, 0x5798b99600000000, 0xa52c71bf00000000, |
| 2829 | 0x34bd191100000000, 0x4145e0ec00000000, 0xd0d4884200000000, |
| 2830 | 0x2260406b00000000, 0xb3f128c500000000, 0x17a8e5ad00000000, |
| 2831 | 0x86398d0300000000, 0x748d452a00000000, 0xe51c2d8400000000, |
| 2832 | 0x90e4d47900000000, 0x0175bcd700000000, 0xf3c174fe00000000, |
| 2833 | 0x62501c5000000000, 0x5837f6de00000000, 0xc9a69e7000000000, |
| 2834 | 0x3b12565900000000, 0xaa833ef700000000, 0xdf7bc70a00000000, |
| 2835 | 0x4eeaafa400000000, 0xbc5e678d00000000, 0x2dcf0f2300000000, |
| 2836 | 0x0e1b837200000000, 0x9f8aebdc00000000, 0x6d3e23f500000000, |
| 2837 | 0xfcaf4b5b00000000, 0x8957b2a600000000, 0x18c6da0800000000, |
| 2838 | 0xea72122100000000, 0x7be37a8f00000000, 0x4184900100000000, |
| 2839 | 0xd015f8af00000000, 0x22a1308600000000, 0xb330582800000000, |
| 2840 | 0xc6c8a1d500000000, 0x5759c97b00000000, 0xa5ed015200000000, |
| 2841 | 0x347c69fc00000000, 0x9025a49400000000, 0x01b4cc3a00000000, |
| 2842 | 0xf300041300000000, 0x62916cbd00000000, 0x1769954000000000, |
| 2843 | 0x86f8fdee00000000, 0x744c35c700000000, 0xe5dd5d6900000000, |
| 2844 | 0xdfbab7e700000000, 0x4e2bdf4900000000, 0xbc9f176000000000, |
| 2845 | 0x2d0e7fce00000000, 0x58f6863300000000, 0xc967ee9d00000000, |
| 2846 | 0x3bd326b400000000, 0xaa424e1a00000000, 0x7360bc6500000000, |
| 2847 | 0xe2f1d4cb00000000, 0x10451ce200000000, 0x81d4744c00000000, |
| 2848 | 0xf42c8db100000000, 0x65bde51f00000000, 0x97092d3600000000, |
| 2849 | 0x0698459800000000, 0x3cffaf1600000000, 0xad6ec7b800000000, |
| 2850 | 0x5fda0f9100000000, 0xce4b673f00000000, 0xbbb39ec200000000, |
| 2851 | 0x2a22f66c00000000, 0xd8963e4500000000, 0x490756eb00000000, |
| 2852 | 0xed5e9b8300000000, 0x7ccff32d00000000, 0x8e7b3b0400000000, |
| 2853 | 0x1fea53aa00000000, 0x6a12aa5700000000, 0xfb83c2f900000000, |
| 2854 | 0x09370ad000000000, 0x98a6627e00000000, 0xa2c188f000000000, |
| 2855 | 0x3350e05e00000000, 0xc1e4287700000000, 0x507540d900000000, |
| 2856 | 0x258db92400000000, 0xb41cd18a00000000, 0x46a819a300000000, |
| 2857 | 0xd739710d00000000}}; |
| 2858 | |
| 2859 | #else /* W == 4 */ |
| 2860 | |
| 2861 | local const z_crc_t FAR crc_braid_table[][256] = { |
| 2862 | {0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa, |
| 2863 | 0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b, |
| 2864 | 0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232, |
| 2865 | 0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8, |
| 2866 | 0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e, |
| 2867 | 0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa, |
| 2868 | 0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b, |
| 2869 | 0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f, |
| 2870 | 0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719, |
| 2871 | 0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d, 0x496753e3, |
| 2872 | 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa, |
| 2873 | 0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b, |
| 2874 | 0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed, |
| 2875 | 0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89, |
| 2876 | 0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25, |
| 2877 | 0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041, |
| 2878 | 0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c, |
| 2879 | 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed, |
| 2880 | 0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4, |
| 2881 | 0x8c06e16a, 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758, |
| 2882 | 0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e, |
| 2883 | 0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a, |
| 2884 | 0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, 0xee7596ed, |
| 2885 | 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889, |
| 2886 | 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df, |
| 2887 | 0x37558441, 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544, |
| 2888 | 0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d, |
| 2889 | 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c, |
| 2890 | 0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1, |
| 2891 | 0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95, |
| 2892 | 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839, |
| 2893 | 0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d, |
| 2894 | 0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976, |
| 2895 | 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7, |
| 2896 | 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be, |
| 2897 | 0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144, |
| 2898 | 0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12, |
| 2899 | 0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376, |
| 2900 | 0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a, |
| 2901 | 0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e, |
| 2902 | 0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278, |
| 2903 | 0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682, |
| 2904 | 0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b, |
| 2905 | 0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a, |
| 2906 | 0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0, 0x83d02561, |
| 2907 | 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05, |
| 2908 | 0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9, |
| 2909 | 0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd, |
| 2910 | 0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0, |
| 2911 | 0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61, |
| 2912 | 0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678, |
| 2913 | 0x264b06e6}, |
| 2914 | {0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413, |
| 2915 | 0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3, |
| 2916 | 0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d, |
| 2917 | 0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653, |
| 2918 | 0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9, |
| 2919 | 0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e, |
| 2920 | 0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5, |
| 2921 | 0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712, |
| 2922 | 0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8, |
| 2923 | 0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552, 0x0e14aee6, |
| 2924 | 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068, |
| 2925 | 0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8, |
| 2926 | 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579, |
| 2927 | 0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade, |
| 2928 | 0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37, |
| 2929 | 0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590, |
| 2930 | 0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4, |
| 2931 | 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64, |
| 2932 | 0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea, |
| 2933 | 0xd59d995e, 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678, |
| 2934 | 0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282, |
| 2935 | 0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25, |
| 2936 | 0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, 0x7bf7c102, |
| 2937 | 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5, |
| 2938 | 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f, |
| 2939 | 0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146, |
| 2940 | 0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8, |
| 2941 | 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08, |
| 2942 | 0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c, |
| 2943 | 0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b, |
| 2944 | 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972, |
| 2945 | 0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5, |
| 2946 | 0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d, |
| 2947 | 0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd, |
| 2948 | 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833, |
| 2949 | 0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d, |
| 2950 | 0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7, |
| 2951 | 0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60, |
| 2952 | 0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2, |
| 2953 | 0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105, |
| 2954 | 0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff, |
| 2955 | 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1, |
| 2956 | 0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f, |
| 2957 | 0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf, |
| 2958 | 0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac, 0x03a0a617, |
| 2959 | 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0, |
| 2960 | 0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959, |
| 2961 | 0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe, |
| 2962 | 0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca, |
| 2963 | 0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a, |
| 2964 | 0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184, |
| 2965 | 0x92364a30}, |
| 2966 | {0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216, |
| 2967 | 0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8, |
| 2968 | 0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170, |
| 2969 | 0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035, |
| 2970 | 0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6, |
| 2971 | 0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145, |
| 2972 | 0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d, |
| 2973 | 0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e, |
| 2974 | 0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d, |
| 2975 | 0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad, 0xcf26d408, |
| 2976 | 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0, |
| 2977 | 0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e, |
| 2978 | 0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c, |
| 2979 | 0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf, |
| 2980 | 0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a, |
| 2981 | 0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9, |
| 2982 | 0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1, |
| 2983 | 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f, |
| 2984 | 0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987, |
| 2985 | 0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4, |
| 2986 | 0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37, |
| 2987 | 0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84, |
| 2988 | 0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, 0x46eaacca, |
| 2989 | 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79, |
| 2990 | 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba, |
| 2991 | 0xb7bc1e1f, 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d, |
| 2992 | 0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5, |
| 2993 | 0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b, |
| 2994 | 0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643, |
| 2995 | 0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0, |
| 2996 | 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525, |
| 2997 | 0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496, |
| 2998 | 0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8, |
| 2999 | 0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026, |
| 3000 | 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e, |
| 3001 | 0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db, |
| 3002 | 0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118, |
| 3003 | 0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab, |
| 3004 | 0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf, |
| 3005 | 0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c, |
| 3006 | 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf, |
| 3007 | 0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a, |
| 3008 | 0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32, |
| 3009 | 0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec, |
| 3010 | 0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa, 0x16441b82, |
| 3011 | 0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31, |
| 3012 | 0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4, |
| 3013 | 0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957, |
| 3014 | 0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f, |
| 3015 | 0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1, |
| 3016 | 0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869, |
| 3017 | 0xe4c4abcc}, |
| 3018 | {0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0, |
| 3019 | 0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271, |
| 3020 | 0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61, |
| 3021 | 0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52, |
| 3022 | 0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43, |
| 3023 | 0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333, |
| 3024 | 0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64, |
| 3025 | 0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314, |
| 3026 | 0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205, |
| 3027 | 0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886, 0x9c419136, |
| 3028 | 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26, |
| 3029 | 0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997, |
| 3030 | 0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849, |
| 3031 | 0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739, |
| 3032 | 0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8, |
| 3033 | 0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98, |
| 3034 | 0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b, |
| 3035 | 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba, |
| 3036 | 0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa, |
| 3037 | 0xba43581a, 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d, |
| 3038 | 0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c, |
| 3039 | 0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc, |
| 3040 | 0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af, |
| 3041 | 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf, |
| 3042 | 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce, |
| 3043 | 0x0142247e, 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922, |
| 3044 | 0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532, |
| 3045 | 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183, |
| 3046 | 0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710, |
| 3047 | 0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860, |
| 3048 | 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1, |
| 3049 | 0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1, |
| 3050 | 0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956, |
| 3051 | 0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7, |
| 3052 | 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7, |
| 3053 | 0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4, |
| 3054 | 0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5, |
| 3055 | 0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5, |
| 3056 | 0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb, |
| 3057 | 0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb, |
| 3058 | 0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da, |
| 3059 | 0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9, |
| 3060 | 0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9, |
| 3061 | 0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48, |
| 3062 | 0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888, 0x28d4c7df, |
| 3063 | 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af, |
| 3064 | 0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e, |
| 3065 | 0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e, |
| 3066 | 0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d, |
| 3067 | 0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c, |
| 3068 | 0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c, |
| 3069 | 0xca64c78c}}; |
| 3070 | |
| 3071 | local const z_word_t FAR crc_braid_big_table[][256] = { |
| 3072 | {0x00000000, 0xb029603d, 0x6053c07a, 0xd07aa047, 0xc0a680f5, |
| 3073 | 0x708fe0c8, 0xa0f5408f, 0x10dc20b2, 0xc14b7030, 0x7162100d, |
| 3074 | 0xa118b04a, 0x1131d077, 0x01edf0c5, 0xb1c490f8, 0x61be30bf, |
| 3075 | 0xd1975082, 0x8297e060, 0x32be805d, 0xe2c4201a, 0x52ed4027, |
| 3076 | 0x42316095, 0xf21800a8, 0x2262a0ef, 0x924bc0d2, 0x43dc9050, |
| 3077 | 0xf3f5f06d, 0x238f502a, 0x93a63017, 0x837a10a5, 0x33537098, |
| 3078 | 0xe329d0df, 0x5300b0e2, 0x042fc1c1, 0xb406a1fc, 0x647c01bb, |
| 3079 | 0xd4556186, 0xc4894134, 0x74a02109, 0xa4da814e, 0x14f3e173, |
| 3080 | 0xc564b1f1, 0x754dd1cc, 0xa537718b, 0x151e11b6, 0x05c23104, |
| 3081 | 0xb5eb5139, 0x6591f17e, 0xd5b89143, 0x86b821a1, 0x3691419c, |
| 3082 | 0xe6ebe1db, 0x56c281e6, 0x461ea154, 0xf637c169, 0x264d612e, |
| 3083 | 0x96640113, 0x47f35191, 0xf7da31ac, 0x27a091eb, 0x9789f1d6, |
| 3084 | 0x8755d164, 0x377cb159, 0xe706111e, 0x572f7123, 0x4958f358, |
| 3085 | 0xf9719365, 0x290b3322, 0x9922531f, 0x89fe73ad, 0x39d71390, |
| 3086 | 0xe9adb3d7, 0x5984d3ea, 0x88138368, 0x383ae355, 0xe8404312, |
| 3087 | 0x5869232f, 0x48b5039d, 0xf89c63a0, 0x28e6c3e7, 0x98cfa3da, |
| 3088 | 0xcbcf1338, 0x7be67305, 0xab9cd342, 0x1bb5b37f, 0x0b6993cd, |
| 3089 | 0xbb40f3f0, 0x6b3a53b7, 0xdb13338a, 0x0a846308, 0xbaad0335, |
| 3090 | 0x6ad7a372, 0xdafec34f, 0xca22e3fd, 0x7a0b83c0, 0xaa712387, |
| 3091 | 0x1a5843ba, 0x4d773299, 0xfd5e52a4, 0x2d24f2e3, 0x9d0d92de, |
| 3092 | 0x8dd1b26c, 0x3df8d251, 0xed827216, 0x5dab122b, 0x8c3c42a9, |
| 3093 | 0x3c152294, 0xec6f82d3, 0x5c46e2ee, 0x4c9ac25c, 0xfcb3a261, |
| 3094 | 0x2cc90226, 0x9ce0621b, 0xcfe0d2f9, 0x7fc9b2c4, 0xafb31283, |
| 3095 | 0x1f9a72be, 0x0f46520c, 0xbf6f3231, 0x6f159276, 0xdf3cf24b, |
| 3096 | 0x0eaba2c9, 0xbe82c2f4, 0x6ef862b3, 0xded1028e, 0xce0d223c, |
| 3097 | 0x7e244201, 0xae5ee246, 0x1e77827b, 0x92b0e6b1, 0x2299868c, |
| 3098 | 0xf2e326cb, 0x42ca46f6, 0x52166644, 0xe23f0679, 0x3245a63e, |
| 3099 | 0x826cc603, 0x53fb9681, 0xe3d2f6bc, 0x33a856fb, 0x838136c6, |
| 3100 | 0x935d1674, 0x23747649, 0xf30ed60e, 0x4327b633, 0x102706d1, |
| 3101 | 0xa00e66ec, 0x7074c6ab, 0xc05da696, 0xd0818624, 0x60a8e619, |
| 3102 | 0xb0d2465e, 0x00fb2663, 0xd16c76e1, 0x614516dc, 0xb13fb69b, |
| 3103 | 0x0116d6a6, 0x11caf614, 0xa1e39629, 0x7199366e, 0xc1b05653, |
| 3104 | 0x969f2770, 0x26b6474d, 0xf6cce70a, 0x46e58737, 0x5639a785, |
| 3105 | 0xe610c7b8, 0x366a67ff, 0x864307c2, 0x57d45740, 0xe7fd377d, |
| 3106 | 0x3787973a, 0x87aef707, 0x9772d7b5, 0x275bb788, 0xf72117cf, |
| 3107 | 0x470877f2, 0x1408c710, 0xa421a72d, 0x745b076a, 0xc4726757, |
| 3108 | 0xd4ae47e5, 0x648727d8, 0xb4fd879f, 0x04d4e7a2, 0xd543b720, |
| 3109 | 0x656ad71d, 0xb510775a, 0x05391767, 0x15e537d5, 0xa5cc57e8, |
| 3110 | 0x75b6f7af, 0xc59f9792, 0xdbe815e9, 0x6bc175d4, 0xbbbbd593, |
| 3111 | 0x0b92b5ae, 0x1b4e951c, 0xab67f521, 0x7b1d5566, 0xcb34355b, |
| 3112 | 0x1aa365d9, 0xaa8a05e4, 0x7af0a5a3, 0xcad9c59e, 0xda05e52c, |
| 3113 | 0x6a2c8511, 0xba562556, 0x0a7f456b, 0x597ff589, 0xe95695b4, |
| 3114 | 0x392c35f3, 0x890555ce, 0x99d9757c, 0x29f01541, 0xf98ab506, |
| 3115 | 0x49a3d53b, 0x983485b9, 0x281de584, 0xf86745c3, 0x484e25fe, |
| 3116 | 0x5892054c, 0xe8bb6571, 0x38c1c536, 0x88e8a50b, 0xdfc7d428, |
| 3117 | 0x6feeb415, 0xbf941452, 0x0fbd746f, 0x1f6154dd, 0xaf4834e0, |
| 3118 | 0x7f3294a7, 0xcf1bf49a, 0x1e8ca418, 0xaea5c425, 0x7edf6462, |
| 3119 | 0xcef6045f, 0xde2a24ed, 0x6e0344d0, 0xbe79e497, 0x0e5084aa, |
| 3120 | 0x5d503448, 0xed795475, 0x3d03f432, 0x8d2a940f, 0x9df6b4bd, |
| 3121 | 0x2ddfd480, 0xfda574c7, 0x4d8c14fa, 0x9c1b4478, 0x2c322445, |
| 3122 | 0xfc488402, 0x4c61e43f, 0x5cbdc48d, 0xec94a4b0, 0x3cee04f7, |
| 3123 | 0x8cc764ca}, |
| 3124 | {0x00000000, 0xa5d35ccb, 0x0ba1c84d, 0xae729486, 0x1642919b, |
| 3125 | 0xb391cd50, 0x1de359d6, 0xb830051d, 0x6d8253ec, 0xc8510f27, |
| 3126 | 0x66239ba1, 0xc3f0c76a, 0x7bc0c277, 0xde139ebc, 0x70610a3a, |
| 3127 | 0xd5b256f1, 0x9b02d603, 0x3ed18ac8, 0x90a31e4e, 0x35704285, |
| 3128 | 0x8d404798, 0x28931b53, 0x86e18fd5, 0x2332d31e, 0xf68085ef, |
| 3129 | 0x5353d924, 0xfd214da2, 0x58f21169, 0xe0c21474, 0x451148bf, |
| 3130 | 0xeb63dc39, 0x4eb080f2, 0x3605ac07, 0x93d6f0cc, 0x3da4644a, |
| 3131 | 0x98773881, 0x20473d9c, 0x85946157, 0x2be6f5d1, 0x8e35a91a, |
| 3132 | 0x5b87ffeb, 0xfe54a320, 0x502637a6, 0xf5f56b6d, 0x4dc56e70, |
| 3133 | 0xe81632bb, 0x4664a63d, 0xe3b7faf6, 0xad077a04, 0x08d426cf, |
| 3134 | 0xa6a6b249, 0x0375ee82, 0xbb45eb9f, 0x1e96b754, 0xb0e423d2, |
| 3135 | 0x15377f19, 0xc08529e8, 0x65567523, 0xcb24e1a5, 0x6ef7bd6e, |
| 3136 | 0xd6c7b873, 0x7314e4b8, 0xdd66703e, 0x78b52cf5, 0x6c0a580f, |
| 3137 | 0xc9d904c4, 0x67ab9042, 0xc278cc89, 0x7a48c994, 0xdf9b955f, |
| 3138 | 0x71e901d9, 0xd43a5d12, 0x01880be3, 0xa45b5728, 0x0a29c3ae, |
| 3139 | 0xaffa9f65, 0x17ca9a78, 0xb219c6b3, 0x1c6b5235, 0xb9b80efe, |
| 3140 | 0xf7088e0c, 0x52dbd2c7, 0xfca94641, 0x597a1a8a, 0xe14a1f97, |
| 3141 | 0x4499435c, 0xeaebd7da, 0x4f388b11, 0x9a8adde0, 0x3f59812b, |
| 3142 | 0x912b15ad, 0x34f84966, 0x8cc84c7b, 0x291b10b0, 0x87698436, |
| 3143 | 0x22bad8fd, 0x5a0ff408, 0xffdca8c3, 0x51ae3c45, 0xf47d608e, |
| 3144 | 0x4c4d6593, 0xe99e3958, 0x47ecadde, 0xe23ff115, 0x378da7e4, |
| 3145 | 0x925efb2f, 0x3c2c6fa9, 0x99ff3362, 0x21cf367f, 0x841c6ab4, |
| 3146 | 0x2a6efe32, 0x8fbda2f9, 0xc10d220b, 0x64de7ec0, 0xcaacea46, |
| 3147 | 0x6f7fb68d, 0xd74fb390, 0x729cef5b, 0xdcee7bdd, 0x793d2716, |
| 3148 | 0xac8f71e7, 0x095c2d2c, 0xa72eb9aa, 0x02fde561, 0xbacde07c, |
| 3149 | 0x1f1ebcb7, 0xb16c2831, 0x14bf74fa, 0xd814b01e, 0x7dc7ecd5, |
| 3150 | 0xd3b57853, 0x76662498, 0xce562185, 0x6b857d4e, 0xc5f7e9c8, |
| 3151 | 0x6024b503, 0xb596e3f2, 0x1045bf39, 0xbe372bbf, 0x1be47774, |
| 3152 | 0xa3d47269, 0x06072ea2, 0xa875ba24, 0x0da6e6ef, 0x4316661d, |
| 3153 | 0xe6c53ad6, 0x48b7ae50, 0xed64f29b, 0x5554f786, 0xf087ab4d, |
| 3154 | 0x5ef53fcb, 0xfb266300, 0x2e9435f1, 0x8b47693a, 0x2535fdbc, |
| 3155 | 0x80e6a177, 0x38d6a46a, 0x9d05f8a1, 0x33776c27, 0x96a430ec, |
| 3156 | 0xee111c19, 0x4bc240d2, 0xe5b0d454, 0x4063889f, 0xf8538d82, |
| 3157 | 0x5d80d149, 0xf3f245cf, 0x56211904, 0x83934ff5, 0x2640133e, |
| 3158 | 0x883287b8, 0x2de1db73, 0x95d1de6e, 0x300282a5, 0x9e701623, |
| 3159 | 0x3ba34ae8, 0x7513ca1a, 0xd0c096d1, 0x7eb20257, 0xdb615e9c, |
| 3160 | 0x63515b81, 0xc682074a, 0x68f093cc, 0xcd23cf07, 0x189199f6, |
| 3161 | 0xbd42c53d, 0x133051bb, 0xb6e30d70, 0x0ed3086d, 0xab0054a6, |
| 3162 | 0x0572c020, 0xa0a19ceb, 0xb41ee811, 0x11cdb4da, 0xbfbf205c, |
| 3163 | 0x1a6c7c97, 0xa25c798a, 0x078f2541, 0xa9fdb1c7, 0x0c2eed0c, |
| 3164 | 0xd99cbbfd, 0x7c4fe736, 0xd23d73b0, 0x77ee2f7b, 0xcfde2a66, |
| 3165 | 0x6a0d76ad, 0xc47fe22b, 0x61acbee0, 0x2f1c3e12, 0x8acf62d9, |
| 3166 | 0x24bdf65f, 0x816eaa94, 0x395eaf89, 0x9c8df342, 0x32ff67c4, |
| 3167 | 0x972c3b0f, 0x429e6dfe, 0xe74d3135, 0x493fa5b3, 0xececf978, |
| 3168 | 0x54dcfc65, 0xf10fa0ae, 0x5f7d3428, 0xfaae68e3, 0x821b4416, |
| 3169 | 0x27c818dd, 0x89ba8c5b, 0x2c69d090, 0x9459d58d, 0x318a8946, |
| 3170 | 0x9ff81dc0, 0x3a2b410b, 0xef9917fa, 0x4a4a4b31, 0xe438dfb7, |
| 3171 | 0x41eb837c, 0xf9db8661, 0x5c08daaa, 0xf27a4e2c, 0x57a912e7, |
| 3172 | 0x19199215, 0xbccacede, 0x12b85a58, 0xb76b0693, 0x0f5b038e, |
| 3173 | 0xaa885f45, 0x04facbc3, 0xa1299708, 0x749bc1f9, 0xd1489d32, |
| 3174 | 0x7f3a09b4, 0xdae9557f, 0x62d95062, 0xc70a0ca9, 0x6978982f, |
| 3175 | 0xccabc4e4}, |
| 3176 | {0x00000000, 0xb40b77a6, 0x29119f97, 0x9d1ae831, 0x13244ff4, |
| 3177 | 0xa72f3852, 0x3a35d063, 0x8e3ea7c5, 0x674eef33, 0xd3459895, |
| 3178 | 0x4e5f70a4, 0xfa540702, 0x746aa0c7, 0xc061d761, 0x5d7b3f50, |
| 3179 | 0xe97048f6, 0xce9cde67, 0x7a97a9c1, 0xe78d41f0, 0x53863656, |
| 3180 | 0xddb89193, 0x69b3e635, 0xf4a90e04, 0x40a279a2, 0xa9d23154, |
| 3181 | 0x1dd946f2, 0x80c3aec3, 0x34c8d965, 0xbaf67ea0, 0x0efd0906, |
| 3182 | 0x93e7e137, 0x27ec9691, 0x9c39bdcf, 0x2832ca69, 0xb5282258, |
| 3183 | 0x012355fe, 0x8f1df23b, 0x3b16859d, 0xa60c6dac, 0x12071a0a, |
| 3184 | 0xfb7752fc, 0x4f7c255a, 0xd266cd6b, 0x666dbacd, 0xe8531d08, |
| 3185 | 0x5c586aae, 0xc142829f, 0x7549f539, 0x52a563a8, 0xe6ae140e, |
| 3186 | 0x7bb4fc3f, 0xcfbf8b99, 0x41812c5c, 0xf58a5bfa, 0x6890b3cb, |
| 3187 | 0xdc9bc46d, 0x35eb8c9b, 0x81e0fb3d, 0x1cfa130c, 0xa8f164aa, |
| 3188 | 0x26cfc36f, 0x92c4b4c9, 0x0fde5cf8, 0xbbd52b5e, 0x79750b44, |
| 3189 | 0xcd7e7ce2, 0x506494d3, 0xe46fe375, 0x6a5144b0, 0xde5a3316, |
| 3190 | 0x4340db27, 0xf74bac81, 0x1e3be477, 0xaa3093d1, 0x372a7be0, |
| 3191 | 0x83210c46, 0x0d1fab83, 0xb914dc25, 0x240e3414, 0x900543b2, |
| 3192 | 0xb7e9d523, 0x03e2a285, 0x9ef84ab4, 0x2af33d12, 0xa4cd9ad7, |
| 3193 | 0x10c6ed71, 0x8ddc0540, 0x39d772e6, 0xd0a73a10, 0x64ac4db6, |
| 3194 | 0xf9b6a587, 0x4dbdd221, 0xc38375e4, 0x77880242, 0xea92ea73, |
| 3195 | 0x5e999dd5, 0xe54cb68b, 0x5147c12d, 0xcc5d291c, 0x78565eba, |
| 3196 | 0xf668f97f, 0x42638ed9, 0xdf7966e8, 0x6b72114e, 0x820259b8, |
| 3197 | 0x36092e1e, 0xab13c62f, 0x1f18b189, 0x9126164c, 0x252d61ea, |
| 3198 | 0xb83789db, 0x0c3cfe7d, 0x2bd068ec, 0x9fdb1f4a, 0x02c1f77b, |
| 3199 | 0xb6ca80dd, 0x38f42718, 0x8cff50be, 0x11e5b88f, 0xa5eecf29, |
| 3200 | 0x4c9e87df, 0xf895f079, 0x658f1848, 0xd1846fee, 0x5fbac82b, |
| 3201 | 0xebb1bf8d, 0x76ab57bc, 0xc2a0201a, 0xf2ea1688, 0x46e1612e, |
| 3202 | 0xdbfb891f, 0x6ff0feb9, 0xe1ce597c, 0x55c52eda, 0xc8dfc6eb, |
| 3203 | 0x7cd4b14d, 0x95a4f9bb, 0x21af8e1d, 0xbcb5662c, 0x08be118a, |
| 3204 | 0x8680b64f, 0x328bc1e9, 0xaf9129d8, 0x1b9a5e7e, 0x3c76c8ef, |
| 3205 | 0x887dbf49, 0x15675778, 0xa16c20de, 0x2f52871b, 0x9b59f0bd, |
| 3206 | 0x0643188c, 0xb2486f2a, 0x5b3827dc, 0xef33507a, 0x7229b84b, |
| 3207 | 0xc622cfed, 0x481c6828, 0xfc171f8e, 0x610df7bf, 0xd5068019, |
| 3208 | 0x6ed3ab47, 0xdad8dce1, 0x47c234d0, 0xf3c94376, 0x7df7e4b3, |
| 3209 | 0xc9fc9315, 0x54e67b24, 0xe0ed0c82, 0x099d4474, 0xbd9633d2, |
| 3210 | 0x208cdbe3, 0x9487ac45, 0x1ab90b80, 0xaeb27c26, 0x33a89417, |
| 3211 | 0x87a3e3b1, 0xa04f7520, 0x14440286, 0x895eeab7, 0x3d559d11, |
| 3212 | 0xb36b3ad4, 0x07604d72, 0x9a7aa543, 0x2e71d2e5, 0xc7019a13, |
| 3213 | 0x730aedb5, 0xee100584, 0x5a1b7222, 0xd425d5e7, 0x602ea241, |
| 3214 | 0xfd344a70, 0x493f3dd6, 0x8b9f1dcc, 0x3f946a6a, 0xa28e825b, |
| 3215 | 0x1685f5fd, 0x98bb5238, 0x2cb0259e, 0xb1aacdaf, 0x05a1ba09, |
| 3216 | 0xecd1f2ff, 0x58da8559, 0xc5c06d68, 0x71cb1ace, 0xfff5bd0b, |
| 3217 | 0x4bfecaad, 0xd6e4229c, 0x62ef553a, 0x4503c3ab, 0xf108b40d, |
| 3218 | 0x6c125c3c, 0xd8192b9a, 0x56278c5f, 0xe22cfbf9, 0x7f3613c8, |
| 3219 | 0xcb3d646e, 0x224d2c98, 0x96465b3e, 0x0b5cb30f, 0xbf57c4a9, |
| 3220 | 0x3169636c, 0x856214ca, 0x1878fcfb, 0xac738b5d, 0x17a6a003, |
| 3221 | 0xa3add7a5, 0x3eb73f94, 0x8abc4832, 0x0482eff7, 0xb0899851, |
| 3222 | 0x2d937060, 0x999807c6, 0x70e84f30, 0xc4e33896, 0x59f9d0a7, |
| 3223 | 0xedf2a701, 0x63cc00c4, 0xd7c77762, 0x4add9f53, 0xfed6e8f5, |
| 3224 | 0xd93a7e64, 0x6d3109c2, 0xf02be1f3, 0x44209655, 0xca1e3190, |
| 3225 | 0x7e154636, 0xe30fae07, 0x5704d9a1, 0xbe749157, 0x0a7fe6f1, |
| 3226 | 0x97650ec0, 0x236e7966, 0xad50dea3, 0x195ba905, 0x84414134, |
| 3227 | 0x304a3692}, |
| 3228 | {0x00000000, 0x9e00aacc, 0x7d072542, 0xe3078f8e, 0xfa0e4a84, |
| 3229 | 0x640ee048, 0x87096fc6, 0x1909c50a, 0xb51be5d3, 0x2b1b4f1f, |
| 3230 | 0xc81cc091, 0x561c6a5d, 0x4f15af57, 0xd115059b, 0x32128a15, |
| 3231 | 0xac1220d9, 0x2b31bb7c, 0xb53111b0, 0x56369e3e, 0xc83634f2, |
| 3232 | 0xd13ff1f8, 0x4f3f5b34, 0xac38d4ba, 0x32387e76, 0x9e2a5eaf, |
| 3233 | 0x002af463, 0xe32d7bed, 0x7d2dd121, 0x6424142b, 0xfa24bee7, |
| 3234 | 0x19233169, 0x87239ba5, 0x566276f9, 0xc862dc35, 0x2b6553bb, |
| 3235 | 0xb565f977, 0xac6c3c7d, 0x326c96b1, 0xd16b193f, 0x4f6bb3f3, |
| 3236 | 0xe379932a, 0x7d7939e6, 0x9e7eb668, 0x007e1ca4, 0x1977d9ae, |
| 3237 | 0x87777362, 0x6470fcec, 0xfa705620, 0x7d53cd85, 0xe3536749, |
| 3238 | 0x0054e8c7, 0x9e54420b, 0x875d8701, 0x195d2dcd, 0xfa5aa243, |
| 3239 | 0x645a088f, 0xc8482856, 0x5648829a, 0xb54f0d14, 0x2b4fa7d8, |
| 3240 | 0x324662d2, 0xac46c81e, 0x4f414790, 0xd141ed5c, 0xedc29d29, |
| 3241 | 0x73c237e5, 0x90c5b86b, 0x0ec512a7, 0x17ccd7ad, 0x89cc7d61, |
| 3242 | 0x6acbf2ef, 0xf4cb5823, 0x58d978fa, 0xc6d9d236, 0x25de5db8, |
| 3243 | 0xbbdef774, 0xa2d7327e, 0x3cd798b2, 0xdfd0173c, 0x41d0bdf0, |
| 3244 | 0xc6f32655, 0x58f38c99, 0xbbf40317, 0x25f4a9db, 0x3cfd6cd1, |
| 3245 | 0xa2fdc61d, 0x41fa4993, 0xdffae35f, 0x73e8c386, 0xede8694a, |
| 3246 | 0x0eefe6c4, 0x90ef4c08, 0x89e68902, 0x17e623ce, 0xf4e1ac40, |
| 3247 | 0x6ae1068c, 0xbba0ebd0, 0x25a0411c, 0xc6a7ce92, 0x58a7645e, |
| 3248 | 0x41aea154, 0xdfae0b98, 0x3ca98416, 0xa2a92eda, 0x0ebb0e03, |
| 3249 | 0x90bba4cf, 0x73bc2b41, 0xedbc818d, 0xf4b54487, 0x6ab5ee4b, |
| 3250 | 0x89b261c5, 0x17b2cb09, 0x909150ac, 0x0e91fa60, 0xed9675ee, |
| 3251 | 0x7396df22, 0x6a9f1a28, 0xf49fb0e4, 0x17983f6a, 0x899895a6, |
| 3252 | 0x258ab57f, 0xbb8a1fb3, 0x588d903d, 0xc68d3af1, 0xdf84fffb, |
| 3253 | 0x41845537, 0xa283dab9, 0x3c837075, 0xda853b53, 0x4485919f, |
| 3254 | 0xa7821e11, 0x3982b4dd, 0x208b71d7, 0xbe8bdb1b, 0x5d8c5495, |
| 3255 | 0xc38cfe59, 0x6f9ede80, 0xf19e744c, 0x1299fbc2, 0x8c99510e, |
| 3256 | 0x95909404, 0x0b903ec8, 0xe897b146, 0x76971b8a, 0xf1b4802f, |
| 3257 | 0x6fb42ae3, 0x8cb3a56d, 0x12b30fa1, 0x0bbacaab, 0x95ba6067, |
| 3258 | 0x76bdefe9, 0xe8bd4525, 0x44af65fc, 0xdaafcf30, 0x39a840be, |
| 3259 | 0xa7a8ea72, 0xbea12f78, 0x20a185b4, 0xc3a60a3a, 0x5da6a0f6, |
| 3260 | 0x8ce74daa, 0x12e7e766, 0xf1e068e8, 0x6fe0c224, 0x76e9072e, |
| 3261 | 0xe8e9ade2, 0x0bee226c, 0x95ee88a0, 0x39fca879, 0xa7fc02b5, |
| 3262 | 0x44fb8d3b, 0xdafb27f7, 0xc3f2e2fd, 0x5df24831, 0xbef5c7bf, |
| 3263 | 0x20f56d73, 0xa7d6f6d6, 0x39d65c1a, 0xdad1d394, 0x44d17958, |
| 3264 | 0x5dd8bc52, 0xc3d8169e, 0x20df9910, 0xbedf33dc, 0x12cd1305, |
| 3265 | 0x8ccdb9c9, 0x6fca3647, 0xf1ca9c8b, 0xe8c35981, 0x76c3f34d, |
| 3266 | 0x95c47cc3, 0x0bc4d60f, 0x3747a67a, 0xa9470cb6, 0x4a408338, |
| 3267 | 0xd44029f4, 0xcd49ecfe, 0x53494632, 0xb04ec9bc, 0x2e4e6370, |
| 3268 | 0x825c43a9, 0x1c5ce965, 0xff5b66eb, 0x615bcc27, 0x7852092d, |
| 3269 | 0xe652a3e1, 0x05552c6f, 0x9b5586a3, 0x1c761d06, 0x8276b7ca, |
| 3270 | 0x61713844, 0xff719288, 0xe6785782, 0x7878fd4e, 0x9b7f72c0, |
| 3271 | 0x057fd80c, 0xa96df8d5, 0x376d5219, 0xd46add97, 0x4a6a775b, |
| 3272 | 0x5363b251, 0xcd63189d, 0x2e649713, 0xb0643ddf, 0x6125d083, |
| 3273 | 0xff257a4f, 0x1c22f5c1, 0x82225f0d, 0x9b2b9a07, 0x052b30cb, |
| 3274 | 0xe62cbf45, 0x782c1589, 0xd43e3550, 0x4a3e9f9c, 0xa9391012, |
| 3275 | 0x3739bade, 0x2e307fd4, 0xb030d518, 0x53375a96, 0xcd37f05a, |
| 3276 | 0x4a146bff, 0xd414c133, 0x37134ebd, 0xa913e471, 0xb01a217b, |
| 3277 | 0x2e1a8bb7, 0xcd1d0439, 0x531daef5, 0xff0f8e2c, 0x610f24e0, |
| 3278 | 0x8208ab6e, 0x1c0801a2, 0x0501c4a8, 0x9b016e64, 0x7806e1ea, |
| 3279 | 0xe6064b26}}; |
| 3280 | |
| 3281 | #endif |
| 3282 | |
| 3283 | #endif |
| 3284 | |
| 3285 | #if N == 3 |
| 3286 | |
| 3287 | #if W == 8 |
| 3288 | |
| 3289 | local const z_crc_t FAR crc_braid_table[][256] = { |
| 3290 | {0x00000000, 0x81256527, 0xd93bcc0f, 0x581ea928, 0x69069e5f, |
| 3291 | 0xe823fb78, 0xb03d5250, 0x31183777, 0xd20d3cbe, 0x53285999, |
| 3292 | 0x0b36f0b1, 0x8a139596, 0xbb0ba2e1, 0x3a2ec7c6, 0x62306eee, |
| 3293 | 0xe3150bc9, 0x7f6b7f3d, 0xfe4e1a1a, 0xa650b332, 0x2775d615, |
| 3294 | 0x166de162, 0x97488445, 0xcf562d6d, 0x4e73484a, 0xad664383, |
| 3295 | 0x2c4326a4, 0x745d8f8c, 0xf578eaab, 0xc460dddc, 0x4545b8fb, |
| 3296 | 0x1d5b11d3, 0x9c7e74f4, 0xfed6fe7a, 0x7ff39b5d, 0x27ed3275, |
| 3297 | 0xa6c85752, 0x97d06025, 0x16f50502, 0x4eebac2a, 0xcfcec90d, |
| 3298 | 0x2cdbc2c4, 0xadfea7e3, 0xf5e00ecb, 0x74c56bec, 0x45dd5c9b, |
| 3299 | 0xc4f839bc, 0x9ce69094, 0x1dc3f5b3, 0x81bd8147, 0x0098e460, |
| 3300 | 0x58864d48, 0xd9a3286f, 0xe8bb1f18, 0x699e7a3f, 0x3180d317, |
| 3301 | 0xb0a5b630, 0x53b0bdf9, 0xd295d8de, 0x8a8b71f6, 0x0bae14d1, |
| 3302 | 0x3ab623a6, 0xbb934681, 0xe38defa9, 0x62a88a8e, 0x26dcfab5, |
| 3303 | 0xa7f99f92, 0xffe736ba, 0x7ec2539d, 0x4fda64ea, 0xceff01cd, |
| 3304 | 0x96e1a8e5, 0x17c4cdc2, 0xf4d1c60b, 0x75f4a32c, 0x2dea0a04, |
| 3305 | 0xaccf6f23, 0x9dd75854, 0x1cf23d73, 0x44ec945b, 0xc5c9f17c, |
| 3306 | 0x59b78588, 0xd892e0af, 0x808c4987, 0x01a92ca0, 0x30b11bd7, |
| 3307 | 0xb1947ef0, 0xe98ad7d8, 0x68afb2ff, 0x8bbab936, 0x0a9fdc11, |
| 3308 | 0x52817539, 0xd3a4101e, 0xe2bc2769, 0x6399424e, 0x3b87eb66, |
| 3309 | 0xbaa28e41, 0xd80a04cf, 0x592f61e8, 0x0131c8c0, 0x8014ade7, |
| 3310 | 0xb10c9a90, 0x3029ffb7, 0x6837569f, 0xe91233b8, 0x0a073871, |
| 3311 | 0x8b225d56, 0xd33cf47e, 0x52199159, 0x6301a62e, 0xe224c309, |
| 3312 | 0xba3a6a21, 0x3b1f0f06, 0xa7617bf2, 0x26441ed5, 0x7e5ab7fd, |
| 3313 | 0xff7fd2da, 0xce67e5ad, 0x4f42808a, 0x175c29a2, 0x96794c85, |
| 3314 | 0x756c474c, 0xf449226b, 0xac578b43, 0x2d72ee64, 0x1c6ad913, |
| 3315 | 0x9d4fbc34, 0xc551151c, 0x4474703b, 0x4db9f56a, 0xcc9c904d, |
| 3316 | 0x94823965, 0x15a75c42, 0x24bf6b35, 0xa59a0e12, 0xfd84a73a, |
| 3317 | 0x7ca1c21d, 0x9fb4c9d4, 0x1e91acf3, 0x468f05db, 0xc7aa60fc, |
| 3318 | 0xf6b2578b, 0x779732ac, 0x2f899b84, 0xaeacfea3, 0x32d28a57, |
| 3319 | 0xb3f7ef70, 0xebe94658, 0x6acc237f, 0x5bd41408, 0xdaf1712f, |
| 3320 | 0x82efd807, 0x03cabd20, 0xe0dfb6e9, 0x61fad3ce, 0x39e47ae6, |
| 3321 | 0xb8c11fc1, 0x89d928b6, 0x08fc4d91, 0x50e2e4b9, 0xd1c7819e, |
| 3322 | 0xb36f0b10, 0x324a6e37, 0x6a54c71f, 0xeb71a238, 0xda69954f, |
| 3323 | 0x5b4cf068, 0x03525940, 0x82773c67, 0x616237ae, 0xe0475289, |
| 3324 | 0xb859fba1, 0x397c9e86, 0x0864a9f1, 0x8941ccd6, 0xd15f65fe, |
| 3325 | 0x507a00d9, 0xcc04742d, 0x4d21110a, 0x153fb822, 0x941add05, |
| 3326 | 0xa502ea72, 0x24278f55, 0x7c39267d, 0xfd1c435a, 0x1e094893, |
| 3327 | 0x9f2c2db4, 0xc732849c, 0x4617e1bb, 0x770fd6cc, 0xf62ab3eb, |
| 3328 | 0xae341ac3, 0x2f117fe4, 0x6b650fdf, 0xea406af8, 0xb25ec3d0, |
| 3329 | 0x337ba6f7, 0x02639180, 0x8346f4a7, 0xdb585d8f, 0x5a7d38a8, |
| 3330 | 0xb9683361, 0x384d5646, 0x6053ff6e, 0xe1769a49, 0xd06ead3e, |
| 3331 | 0x514bc819, 0x09556131, 0x88700416, 0x140e70e2, 0x952b15c5, |
| 3332 | 0xcd35bced, 0x4c10d9ca, 0x7d08eebd, 0xfc2d8b9a, 0xa43322b2, |
| 3333 | 0x25164795, 0xc6034c5c, 0x4726297b, 0x1f388053, 0x9e1de574, |
| 3334 | 0xaf05d203, 0x2e20b724, 0x763e1e0c, 0xf71b7b2b, 0x95b3f1a5, |
| 3335 | 0x14969482, 0x4c883daa, 0xcdad588d, 0xfcb56ffa, 0x7d900add, |
| 3336 | 0x258ea3f5, 0xa4abc6d2, 0x47becd1b, 0xc69ba83c, 0x9e850114, |
| 3337 | 0x1fa06433, 0x2eb85344, 0xaf9d3663, 0xf7839f4b, 0x76a6fa6c, |
| 3338 | 0xead88e98, 0x6bfdebbf, 0x33e34297, 0xb2c627b0, 0x83de10c7, |
| 3339 | 0x02fb75e0, 0x5ae5dcc8, 0xdbc0b9ef, 0x38d5b226, 0xb9f0d701, |
| 3340 | 0xe1ee7e29, 0x60cb1b0e, 0x51d32c79, 0xd0f6495e, 0x88e8e076, |
| 3341 | 0x09cd8551}, |
| 3342 | {0x00000000, 0x9b73ead4, 0xed96d3e9, 0x76e5393d, 0x005ca193, |
| 3343 | 0x9b2f4b47, 0xedca727a, 0x76b998ae, 0x00b94326, 0x9bcaa9f2, |
| 3344 | 0xed2f90cf, 0x765c7a1b, 0x00e5e2b5, 0x9b960861, 0xed73315c, |
| 3345 | 0x7600db88, 0x0172864c, 0x9a016c98, 0xece455a5, 0x7797bf71, |
| 3346 | 0x012e27df, 0x9a5dcd0b, 0xecb8f436, 0x77cb1ee2, 0x01cbc56a, |
| 3347 | 0x9ab82fbe, 0xec5d1683, 0x772efc57, 0x019764f9, 0x9ae48e2d, |
| 3348 | 0xec01b710, 0x77725dc4, 0x02e50c98, 0x9996e64c, 0xef73df71, |
| 3349 | 0x740035a5, 0x02b9ad0b, 0x99ca47df, 0xef2f7ee2, 0x745c9436, |
| 3350 | 0x025c4fbe, 0x992fa56a, 0xefca9c57, 0x74b97683, 0x0200ee2d, |
| 3351 | 0x997304f9, 0xef963dc4, 0x74e5d710, 0x03978ad4, 0x98e46000, |
| 3352 | 0xee01593d, 0x7572b3e9, 0x03cb2b47, 0x98b8c193, 0xee5df8ae, |
| 3353 | 0x752e127a, 0x032ec9f2, 0x985d2326, 0xeeb81a1b, 0x75cbf0cf, |
| 3354 | 0x03726861, 0x980182b5, 0xeee4bb88, 0x7597515c, 0x05ca1930, |
| 3355 | 0x9eb9f3e4, 0xe85ccad9, 0x732f200d, 0x0596b8a3, 0x9ee55277, |
| 3356 | 0xe8006b4a, 0x7373819e, 0x05735a16, 0x9e00b0c2, 0xe8e589ff, |
| 3357 | 0x7396632b, 0x052ffb85, 0x9e5c1151, 0xe8b9286c, 0x73cac2b8, |
| 3358 | 0x04b89f7c, 0x9fcb75a8, 0xe92e4c95, 0x725da641, 0x04e43eef, |
| 3359 | 0x9f97d43b, 0xe972ed06, 0x720107d2, 0x0401dc5a, 0x9f72368e, |
| 3360 | 0xe9970fb3, 0x72e4e567, 0x045d7dc9, 0x9f2e971d, 0xe9cbae20, |
| 3361 | 0x72b844f4, 0x072f15a8, 0x9c5cff7c, 0xeab9c641, 0x71ca2c95, |
| 3362 | 0x0773b43b, 0x9c005eef, 0xeae567d2, 0x71968d06, 0x0796568e, |
| 3363 | 0x9ce5bc5a, 0xea008567, 0x71736fb3, 0x07caf71d, 0x9cb91dc9, |
| 3364 | 0xea5c24f4, 0x712fce20, 0x065d93e4, 0x9d2e7930, 0xebcb400d, |
| 3365 | 0x70b8aad9, 0x06013277, 0x9d72d8a3, 0xeb97e19e, 0x70e40b4a, |
| 3366 | 0x06e4d0c2, 0x9d973a16, 0xeb72032b, 0x7001e9ff, 0x06b87151, |
| 3367 | 0x9dcb9b85, 0xeb2ea2b8, 0x705d486c, 0x0b943260, 0x90e7d8b4, |
| 3368 | 0xe602e189, 0x7d710b5d, 0x0bc893f3, 0x90bb7927, 0xe65e401a, |
| 3369 | 0x7d2daace, 0x0b2d7146, 0x905e9b92, 0xe6bba2af, 0x7dc8487b, |
| 3370 | 0x0b71d0d5, 0x90023a01, 0xe6e7033c, 0x7d94e9e8, 0x0ae6b42c, |
| 3371 | 0x91955ef8, 0xe77067c5, 0x7c038d11, 0x0aba15bf, 0x91c9ff6b, |
| 3372 | 0xe72cc656, 0x7c5f2c82, 0x0a5ff70a, 0x912c1dde, 0xe7c924e3, |
| 3373 | 0x7cbace37, 0x0a035699, 0x9170bc4d, 0xe7958570, 0x7ce66fa4, |
| 3374 | 0x09713ef8, 0x9202d42c, 0xe4e7ed11, 0x7f9407c5, 0x092d9f6b, |
| 3375 | 0x925e75bf, 0xe4bb4c82, 0x7fc8a656, 0x09c87dde, 0x92bb970a, |
| 3376 | 0xe45eae37, 0x7f2d44e3, 0x0994dc4d, 0x92e73699, 0xe4020fa4, |
| 3377 | 0x7f71e570, 0x0803b8b4, 0x93705260, 0xe5956b5d, 0x7ee68189, |
| 3378 | 0x085f1927, 0x932cf3f3, 0xe5c9cace, 0x7eba201a, 0x08bafb92, |
| 3379 | 0x93c91146, 0xe52c287b, 0x7e5fc2af, 0x08e65a01, 0x9395b0d5, |
| 3380 | 0xe57089e8, 0x7e03633c, 0x0e5e2b50, 0x952dc184, 0xe3c8f8b9, |
| 3381 | 0x78bb126d, 0x0e028ac3, 0x95716017, 0xe394592a, 0x78e7b3fe, |
| 3382 | 0x0ee76876, 0x959482a2, 0xe371bb9f, 0x7802514b, 0x0ebbc9e5, |
| 3383 | 0x95c82331, 0xe32d1a0c, 0x785ef0d8, 0x0f2cad1c, 0x945f47c8, |
| 3384 | 0xe2ba7ef5, 0x79c99421, 0x0f700c8f, 0x9403e65b, 0xe2e6df66, |
| 3385 | 0x799535b2, 0x0f95ee3a, 0x94e604ee, 0xe2033dd3, 0x7970d707, |
| 3386 | 0x0fc94fa9, 0x94baa57d, 0xe25f9c40, 0x792c7694, 0x0cbb27c8, |
| 3387 | 0x97c8cd1c, 0xe12df421, 0x7a5e1ef5, 0x0ce7865b, 0x97946c8f, |
| 3388 | 0xe17155b2, 0x7a02bf66, 0x0c0264ee, 0x97718e3a, 0xe194b707, |
| 3389 | 0x7ae75dd3, 0x0c5ec57d, 0x972d2fa9, 0xe1c81694, 0x7abbfc40, |
| 3390 | 0x0dc9a184, 0x96ba4b50, 0xe05f726d, 0x7b2c98b9, 0x0d950017, |
| 3391 | 0x96e6eac3, 0xe003d3fe, 0x7b70392a, 0x0d70e2a2, 0x96030876, |
| 3392 | 0xe0e6314b, 0x7b95db9f, 0x0d2c4331, 0x965fa9e5, 0xe0ba90d8, |
| 3393 | 0x7bc97a0c}, |
| 3394 | {0x00000000, 0x172864c0, 0x2e50c980, 0x3978ad40, 0x5ca19300, |
| 3395 | 0x4b89f7c0, 0x72f15a80, 0x65d93e40, 0xb9432600, 0xae6b42c0, |
| 3396 | 0x9713ef80, 0x803b8b40, 0xe5e2b500, 0xf2cad1c0, 0xcbb27c80, |
| 3397 | 0xdc9a1840, 0xa9f74a41, 0xbedf2e81, 0x87a783c1, 0x908fe701, |
| 3398 | 0xf556d941, 0xe27ebd81, 0xdb0610c1, 0xcc2e7401, 0x10b46c41, |
| 3399 | 0x079c0881, 0x3ee4a5c1, 0x29ccc101, 0x4c15ff41, 0x5b3d9b81, |
| 3400 | 0x624536c1, 0x756d5201, 0x889f92c3, 0x9fb7f603, 0xa6cf5b43, |
| 3401 | 0xb1e73f83, 0xd43e01c3, 0xc3166503, 0xfa6ec843, 0xed46ac83, |
| 3402 | 0x31dcb4c3, 0x26f4d003, 0x1f8c7d43, 0x08a41983, 0x6d7d27c3, |
| 3403 | 0x7a554303, 0x432dee43, 0x54058a83, 0x2168d882, 0x3640bc42, |
| 3404 | 0x0f381102, 0x181075c2, 0x7dc94b82, 0x6ae12f42, 0x53998202, |
| 3405 | 0x44b1e6c2, 0x982bfe82, 0x8f039a42, 0xb67b3702, 0xa15353c2, |
| 3406 | 0xc48a6d82, 0xd3a20942, 0xeadaa402, 0xfdf2c0c2, 0xca4e23c7, |
| 3407 | 0xdd664707, 0xe41eea47, 0xf3368e87, 0x96efb0c7, 0x81c7d407, |
| 3408 | 0xb8bf7947, 0xaf971d87, 0x730d05c7, 0x64256107, 0x5d5dcc47, |
| 3409 | 0x4a75a887, 0x2fac96c7, 0x3884f207, 0x01fc5f47, 0x16d43b87, |
| 3410 | 0x63b96986, 0x74910d46, 0x4de9a006, 0x5ac1c4c6, 0x3f18fa86, |
| 3411 | 0x28309e46, 0x11483306, 0x066057c6, 0xdafa4f86, 0xcdd22b46, |
| 3412 | 0xf4aa8606, 0xe382e2c6, 0x865bdc86, 0x9173b846, 0xa80b1506, |
| 3413 | 0xbf2371c6, 0x42d1b104, 0x55f9d5c4, 0x6c817884, 0x7ba91c44, |
| 3414 | 0x1e702204, 0x095846c4, 0x3020eb84, 0x27088f44, 0xfb929704, |
| 3415 | 0xecbaf3c4, 0xd5c25e84, 0xc2ea3a44, 0xa7330404, 0xb01b60c4, |
| 3416 | 0x8963cd84, 0x9e4ba944, 0xeb26fb45, 0xfc0e9f85, 0xc57632c5, |
| 3417 | 0xd25e5605, 0xb7876845, 0xa0af0c85, 0x99d7a1c5, 0x8effc505, |
| 3418 | 0x5265dd45, 0x454db985, 0x7c3514c5, 0x6b1d7005, 0x0ec44e45, |
| 3419 | 0x19ec2a85, 0x209487c5, 0x37bce305, 0x4fed41cf, 0x58c5250f, |
| 3420 | 0x61bd884f, 0x7695ec8f, 0x134cd2cf, 0x0464b60f, 0x3d1c1b4f, |
| 3421 | 0x2a347f8f, 0xf6ae67cf, 0xe186030f, 0xd8feae4f, 0xcfd6ca8f, |
| 3422 | 0xaa0ff4cf, 0xbd27900f, 0x845f3d4f, 0x9377598f, 0xe61a0b8e, |
| 3423 | 0xf1326f4e, 0xc84ac20e, 0xdf62a6ce, 0xbabb988e, 0xad93fc4e, |
| 3424 | 0x94eb510e, 0x83c335ce, 0x5f592d8e, 0x4871494e, 0x7109e40e, |
| 3425 | 0x662180ce, 0x03f8be8e, 0x14d0da4e, 0x2da8770e, 0x3a8013ce, |
| 3426 | 0xc772d30c, 0xd05ab7cc, 0xe9221a8c, 0xfe0a7e4c, 0x9bd3400c, |
| 3427 | 0x8cfb24cc, 0xb583898c, 0xa2abed4c, 0x7e31f50c, 0x691991cc, |
| 3428 | 0x50613c8c, 0x4749584c, 0x2290660c, 0x35b802cc, 0x0cc0af8c, |
| 3429 | 0x1be8cb4c, 0x6e85994d, 0x79adfd8d, 0x40d550cd, 0x57fd340d, |
| 3430 | 0x32240a4d, 0x250c6e8d, 0x1c74c3cd, 0x0b5ca70d, 0xd7c6bf4d, |
| 3431 | 0xc0eedb8d, 0xf99676cd, 0xeebe120d, 0x8b672c4d, 0x9c4f488d, |
| 3432 | 0xa537e5cd, 0xb21f810d, 0x85a36208, 0x928b06c8, 0xabf3ab88, |
| 3433 | 0xbcdbcf48, 0xd902f108, 0xce2a95c8, 0xf7523888, 0xe07a5c48, |
| 3434 | 0x3ce04408, 0x2bc820c8, 0x12b08d88, 0x0598e948, 0x6041d708, |
| 3435 | 0x7769b3c8, 0x4e111e88, 0x59397a48, 0x2c542849, 0x3b7c4c89, |
| 3436 | 0x0204e1c9, 0x152c8509, 0x70f5bb49, 0x67dddf89, 0x5ea572c9, |
| 3437 | 0x498d1609, 0x95170e49, 0x823f6a89, 0xbb47c7c9, 0xac6fa309, |
| 3438 | 0xc9b69d49, 0xde9ef989, 0xe7e654c9, 0xf0ce3009, 0x0d3cf0cb, |
| 3439 | 0x1a14940b, 0x236c394b, 0x34445d8b, 0x519d63cb, 0x46b5070b, |
| 3440 | 0x7fcdaa4b, 0x68e5ce8b, 0xb47fd6cb, 0xa357b20b, 0x9a2f1f4b, |
| 3441 | 0x8d077b8b, 0xe8de45cb, 0xfff6210b, 0xc68e8c4b, 0xd1a6e88b, |
| 3442 | 0xa4cbba8a, 0xb3e3de4a, 0x8a9b730a, 0x9db317ca, 0xf86a298a, |
| 3443 | 0xef424d4a, 0xd63ae00a, 0xc11284ca, 0x1d889c8a, 0x0aa0f84a, |
| 3444 | 0x33d8550a, 0x24f031ca, 0x41290f8a, 0x56016b4a, 0x6f79c60a, |
| 3445 | 0x7851a2ca}, |
| 3446 | {0x00000000, 0x9fda839e, 0xe4c4017d, 0x7b1e82e3, 0x12f904bb, |
| 3447 | 0x8d238725, 0xf63d05c6, 0x69e78658, 0x25f20976, 0xba288ae8, |
| 3448 | 0xc136080b, 0x5eec8b95, 0x370b0dcd, 0xa8d18e53, 0xd3cf0cb0, |
| 3449 | 0x4c158f2e, 0x4be412ec, 0xd43e9172, 0xaf201391, 0x30fa900f, |
| 3450 | 0x591d1657, 0xc6c795c9, 0xbdd9172a, 0x220394b4, 0x6e161b9a, |
| 3451 | 0xf1cc9804, 0x8ad21ae7, 0x15089979, 0x7cef1f21, 0xe3359cbf, |
| 3452 | 0x982b1e5c, 0x07f19dc2, 0x97c825d8, 0x0812a646, 0x730c24a5, |
| 3453 | 0xecd6a73b, 0x85312163, 0x1aeba2fd, 0x61f5201e, 0xfe2fa380, |
| 3454 | 0xb23a2cae, 0x2de0af30, 0x56fe2dd3, 0xc924ae4d, 0xa0c32815, |
| 3455 | 0x3f19ab8b, 0x44072968, 0xdbddaaf6, 0xdc2c3734, 0x43f6b4aa, |
| 3456 | 0x38e83649, 0xa732b5d7, 0xced5338f, 0x510fb011, 0x2a1132f2, |
| 3457 | 0xb5cbb16c, 0xf9de3e42, 0x6604bddc, 0x1d1a3f3f, 0x82c0bca1, |
| 3458 | 0xeb273af9, 0x74fdb967, 0x0fe33b84, 0x9039b81a, 0xf4e14df1, |
| 3459 | 0x6b3bce6f, 0x10254c8c, 0x8fffcf12, 0xe618494a, 0x79c2cad4, |
| 3460 | 0x02dc4837, 0x9d06cba9, 0xd1134487, 0x4ec9c719, 0x35d745fa, |
| 3461 | 0xaa0dc664, 0xc3ea403c, 0x5c30c3a2, 0x272e4141, 0xb8f4c2df, |
| 3462 | 0xbf055f1d, 0x20dfdc83, 0x5bc15e60, 0xc41bddfe, 0xadfc5ba6, |
| 3463 | 0x3226d838, 0x49385adb, 0xd6e2d945, 0x9af7566b, 0x052dd5f5, |
| 3464 | 0x7e335716, 0xe1e9d488, 0x880e52d0, 0x17d4d14e, 0x6cca53ad, |
| 3465 | 0xf310d033, 0x63296829, 0xfcf3ebb7, 0x87ed6954, 0x1837eaca, |
| 3466 | 0x71d06c92, 0xee0aef0c, 0x95146def, 0x0aceee71, 0x46db615f, |
| 3467 | 0xd901e2c1, 0xa21f6022, 0x3dc5e3bc, 0x542265e4, 0xcbf8e67a, |
| 3468 | 0xb0e66499, 0x2f3ce707, 0x28cd7ac5, 0xb717f95b, 0xcc097bb8, |
| 3469 | 0x53d3f826, 0x3a347e7e, 0xa5eefde0, 0xdef07f03, 0x412afc9d, |
| 3470 | 0x0d3f73b3, 0x92e5f02d, 0xe9fb72ce, 0x7621f150, 0x1fc67708, |
| 3471 | 0x801cf496, 0xfb027675, 0x64d8f5eb, 0x32b39da3, 0xad691e3d, |
| 3472 | 0xd6779cde, 0x49ad1f40, 0x204a9918, 0xbf901a86, 0xc48e9865, |
| 3473 | 0x5b541bfb, 0x174194d5, 0x889b174b, 0xf38595a8, 0x6c5f1636, |
| 3474 | 0x05b8906e, 0x9a6213f0, 0xe17c9113, 0x7ea6128d, 0x79578f4f, |
| 3475 | 0xe68d0cd1, 0x9d938e32, 0x02490dac, 0x6bae8bf4, 0xf474086a, |
| 3476 | 0x8f6a8a89, 0x10b00917, 0x5ca58639, 0xc37f05a7, 0xb8618744, |
| 3477 | 0x27bb04da, 0x4e5c8282, 0xd186011c, 0xaa9883ff, 0x35420061, |
| 3478 | 0xa57bb87b, 0x3aa13be5, 0x41bfb906, 0xde653a98, 0xb782bcc0, |
| 3479 | 0x28583f5e, 0x5346bdbd, 0xcc9c3e23, 0x8089b10d, 0x1f533293, |
| 3480 | 0x644db070, 0xfb9733ee, 0x9270b5b6, 0x0daa3628, 0x76b4b4cb, |
| 3481 | 0xe96e3755, 0xee9faa97, 0x71452909, 0x0a5babea, 0x95812874, |
| 3482 | 0xfc66ae2c, 0x63bc2db2, 0x18a2af51, 0x87782ccf, 0xcb6da3e1, |
| 3483 | 0x54b7207f, 0x2fa9a29c, 0xb0732102, 0xd994a75a, 0x464e24c4, |
| 3484 | 0x3d50a627, 0xa28a25b9, 0xc652d052, 0x598853cc, 0x2296d12f, |
| 3485 | 0xbd4c52b1, 0xd4abd4e9, 0x4b715777, 0x306fd594, 0xafb5560a, |
| 3486 | 0xe3a0d924, 0x7c7a5aba, 0x0764d859, 0x98be5bc7, 0xf159dd9f, |
| 3487 | 0x6e835e01, 0x159ddce2, 0x8a475f7c, 0x8db6c2be, 0x126c4120, |
| 3488 | 0x6972c3c3, 0xf6a8405d, 0x9f4fc605, 0x0095459b, 0x7b8bc778, |
| 3489 | 0xe45144e6, 0xa844cbc8, 0x379e4856, 0x4c80cab5, 0xd35a492b, |
| 3490 | 0xbabdcf73, 0x25674ced, 0x5e79ce0e, 0xc1a34d90, 0x519af58a, |
| 3491 | 0xce407614, 0xb55ef4f7, 0x2a847769, 0x4363f131, 0xdcb972af, |
| 3492 | 0xa7a7f04c, 0x387d73d2, 0x7468fcfc, 0xebb27f62, 0x90acfd81, |
| 3493 | 0x0f767e1f, 0x6691f847, 0xf94b7bd9, 0x8255f93a, 0x1d8f7aa4, |
| 3494 | 0x1a7ee766, 0x85a464f8, 0xfebae61b, 0x61606585, 0x0887e3dd, |
| 3495 | 0x975d6043, 0xec43e2a0, 0x7399613e, 0x3f8cee10, 0xa0566d8e, |
| 3496 | 0xdb48ef6d, 0x44926cf3, 0x2d75eaab, 0xb2af6935, 0xc9b1ebd6, |
| 3497 | 0x566b6848}, |
| 3498 | {0x00000000, 0x65673b46, 0xcace768c, 0xafa94dca, 0x4eedeb59, |
| 3499 | 0x2b8ad01f, 0x84239dd5, 0xe144a693, 0x9ddbd6b2, 0xf8bcedf4, |
| 3500 | 0x5715a03e, 0x32729b78, 0xd3363deb, 0xb65106ad, 0x19f84b67, |
| 3501 | 0x7c9f7021, 0xe0c6ab25, 0x85a19063, 0x2a08dda9, 0x4f6fe6ef, |
| 3502 | 0xae2b407c, 0xcb4c7b3a, 0x64e536f0, 0x01820db6, 0x7d1d7d97, |
| 3503 | 0x187a46d1, 0xb7d30b1b, 0xd2b4305d, 0x33f096ce, 0x5697ad88, |
| 3504 | 0xf93ee042, 0x9c59db04, 0x1afc500b, 0x7f9b6b4d, 0xd0322687, |
| 3505 | 0xb5551dc1, 0x5411bb52, 0x31768014, 0x9edfcdde, 0xfbb8f698, |
| 3506 | 0x872786b9, 0xe240bdff, 0x4de9f035, 0x288ecb73, 0xc9ca6de0, |
| 3507 | 0xacad56a6, 0x03041b6c, 0x6663202a, 0xfa3afb2e, 0x9f5dc068, |
| 3508 | 0x30f48da2, 0x5593b6e4, 0xb4d71077, 0xd1b02b31, 0x7e1966fb, |
| 3509 | 0x1b7e5dbd, 0x67e12d9c, 0x028616da, 0xad2f5b10, 0xc8486056, |
| 3510 | 0x290cc6c5, 0x4c6bfd83, 0xe3c2b049, 0x86a58b0f, 0x35f8a016, |
| 3511 | 0x509f9b50, 0xff36d69a, 0x9a51eddc, 0x7b154b4f, 0x1e727009, |
| 3512 | 0xb1db3dc3, 0xd4bc0685, 0xa82376a4, 0xcd444de2, 0x62ed0028, |
| 3513 | 0x078a3b6e, 0xe6ce9dfd, 0x83a9a6bb, 0x2c00eb71, 0x4967d037, |
| 3514 | 0xd53e0b33, 0xb0593075, 0x1ff07dbf, 0x7a9746f9, 0x9bd3e06a, |
| 3515 | 0xfeb4db2c, 0x511d96e6, 0x347aada0, 0x48e5dd81, 0x2d82e6c7, |
| 3516 | 0x822bab0d, 0xe74c904b, 0x060836d8, 0x636f0d9e, 0xccc64054, |
| 3517 | 0xa9a17b12, 0x2f04f01d, 0x4a63cb5b, 0xe5ca8691, 0x80adbdd7, |
| 3518 | 0x61e91b44, 0x048e2002, 0xab276dc8, 0xce40568e, 0xb2df26af, |
| 3519 | 0xd7b81de9, 0x78115023, 0x1d766b65, 0xfc32cdf6, 0x9955f6b0, |
| 3520 | 0x36fcbb7a, 0x539b803c, 0xcfc25b38, 0xaaa5607e, 0x050c2db4, |
| 3521 | 0x606b16f2, 0x812fb061, 0xe4488b27, 0x4be1c6ed, 0x2e86fdab, |
| 3522 | 0x52198d8a, 0x377eb6cc, 0x98d7fb06, 0xfdb0c040, 0x1cf466d3, |
| 3523 | 0x79935d95, 0xd63a105f, 0xb35d2b19, 0x6bf1402c, 0x0e967b6a, |
| 3524 | 0xa13f36a0, 0xc4580de6, 0x251cab75, 0x407b9033, 0xefd2ddf9, |
| 3525 | 0x8ab5e6bf, 0xf62a969e, 0x934dadd8, 0x3ce4e012, 0x5983db54, |
| 3526 | 0xb8c77dc7, 0xdda04681, 0x72090b4b, 0x176e300d, 0x8b37eb09, |
| 3527 | 0xee50d04f, 0x41f99d85, 0x249ea6c3, 0xc5da0050, 0xa0bd3b16, |
| 3528 | 0x0f1476dc, 0x6a734d9a, 0x16ec3dbb, 0x738b06fd, 0xdc224b37, |
| 3529 | 0xb9457071, 0x5801d6e2, 0x3d66eda4, 0x92cfa06e, 0xf7a89b28, |
| 3530 | 0x710d1027, 0x146a2b61, 0xbbc366ab, 0xdea45ded, 0x3fe0fb7e, |
| 3531 | 0x5a87c038, 0xf52e8df2, 0x9049b6b4, 0xecd6c695, 0x89b1fdd3, |
| 3532 | 0x2618b019, 0x437f8b5f, 0xa23b2dcc, 0xc75c168a, 0x68f55b40, |
| 3533 | 0x0d926006, 0x91cbbb02, 0xf4ac8044, 0x5b05cd8e, 0x3e62f6c8, |
| 3534 | 0xdf26505b, 0xba416b1d, 0x15e826d7, 0x708f1d91, 0x0c106db0, |
| 3535 | 0x697756f6, 0xc6de1b3c, 0xa3b9207a, 0x42fd86e9, 0x279abdaf, |
| 3536 | 0x8833f065, 0xed54cb23, 0x5e09e03a, 0x3b6edb7c, 0x94c796b6, |
| 3537 | 0xf1a0adf0, 0x10e40b63, 0x75833025, 0xda2a7def, 0xbf4d46a9, |
| 3538 | 0xc3d23688, 0xa6b50dce, 0x091c4004, 0x6c7b7b42, 0x8d3fddd1, |
| 3539 | 0xe858e697, 0x47f1ab5d, 0x2296901b, 0xbecf4b1f, 0xdba87059, |
| 3540 | 0x74013d93, 0x116606d5, 0xf022a046, 0x95459b00, 0x3aecd6ca, |
| 3541 | 0x5f8bed8c, 0x23149dad, 0x4673a6eb, 0xe9daeb21, 0x8cbdd067, |
| 3542 | 0x6df976f4, 0x089e4db2, 0xa7370078, 0xc2503b3e, 0x44f5b031, |
| 3543 | 0x21928b77, 0x8e3bc6bd, 0xeb5cfdfb, 0x0a185b68, 0x6f7f602e, |
| 3544 | 0xc0d62de4, 0xa5b116a2, 0xd92e6683, 0xbc495dc5, 0x13e0100f, |
| 3545 | 0x76872b49, 0x97c38dda, 0xf2a4b69c, 0x5d0dfb56, 0x386ac010, |
| 3546 | 0xa4331b14, 0xc1542052, 0x6efd6d98, 0x0b9a56de, 0xeadef04d, |
| 3547 | 0x8fb9cb0b, 0x201086c1, 0x4577bd87, 0x39e8cda6, 0x5c8ff6e0, |
| 3548 | 0xf326bb2a, 0x9641806c, 0x770526ff, 0x12621db9, 0xbdcb5073, |
| 3549 | 0xd8ac6b35}, |
| 3550 | {0x00000000, 0xd7e28058, 0x74b406f1, 0xa35686a9, 0xe9680de2, |
| 3551 | 0x3e8a8dba, 0x9ddc0b13, 0x4a3e8b4b, 0x09a11d85, 0xde439ddd, |
| 3552 | 0x7d151b74, 0xaaf79b2c, 0xe0c91067, 0x372b903f, 0x947d1696, |
| 3553 | 0x439f96ce, 0x13423b0a, 0xc4a0bb52, 0x67f63dfb, 0xb014bda3, |
| 3554 | 0xfa2a36e8, 0x2dc8b6b0, 0x8e9e3019, 0x597cb041, 0x1ae3268f, |
| 3555 | 0xcd01a6d7, 0x6e57207e, 0xb9b5a026, 0xf38b2b6d, 0x2469ab35, |
| 3556 | 0x873f2d9c, 0x50ddadc4, 0x26847614, 0xf166f64c, 0x523070e5, |
| 3557 | 0x85d2f0bd, 0xcfec7bf6, 0x180efbae, 0xbb587d07, 0x6cbafd5f, |
| 3558 | 0x2f256b91, 0xf8c7ebc9, 0x5b916d60, 0x8c73ed38, 0xc64d6673, |
| 3559 | 0x11afe62b, 0xb2f96082, 0x651be0da, 0x35c64d1e, 0xe224cd46, |
| 3560 | 0x41724bef, 0x9690cbb7, 0xdcae40fc, 0x0b4cc0a4, 0xa81a460d, |
| 3561 | 0x7ff8c655, 0x3c67509b, 0xeb85d0c3, 0x48d3566a, 0x9f31d632, |
| 3562 | 0xd50f5d79, 0x02eddd21, 0xa1bb5b88, 0x7659dbd0, 0x4d08ec28, |
| 3563 | 0x9aea6c70, 0x39bcead9, 0xee5e6a81, 0xa460e1ca, 0x73826192, |
| 3564 | 0xd0d4e73b, 0x07366763, 0x44a9f1ad, 0x934b71f5, 0x301df75c, |
| 3565 | 0xe7ff7704, 0xadc1fc4f, 0x7a237c17, 0xd975fabe, 0x0e977ae6, |
| 3566 | 0x5e4ad722, 0x89a8577a, 0x2afed1d3, 0xfd1c518b, 0xb722dac0, |
| 3567 | 0x60c05a98, 0xc396dc31, 0x14745c69, 0x57ebcaa7, 0x80094aff, |
| 3568 | 0x235fcc56, 0xf4bd4c0e, 0xbe83c745, 0x6961471d, 0xca37c1b4, |
| 3569 | 0x1dd541ec, 0x6b8c9a3c, 0xbc6e1a64, 0x1f389ccd, 0xc8da1c95, |
| 3570 | 0x82e497de, 0x55061786, 0xf650912f, 0x21b21177, 0x622d87b9, |
| 3571 | 0xb5cf07e1, 0x16998148, 0xc17b0110, 0x8b458a5b, 0x5ca70a03, |
| 3572 | 0xfff18caa, 0x28130cf2, 0x78cea136, 0xaf2c216e, 0x0c7aa7c7, |
| 3573 | 0xdb98279f, 0x91a6acd4, 0x46442c8c, 0xe512aa25, 0x32f02a7d, |
| 3574 | 0x716fbcb3, 0xa68d3ceb, 0x05dbba42, 0xd2393a1a, 0x9807b151, |
| 3575 | 0x4fe53109, 0xecb3b7a0, 0x3b5137f8, 0x9a11d850, 0x4df35808, |
| 3576 | 0xeea5dea1, 0x39475ef9, 0x7379d5b2, 0xa49b55ea, 0x07cdd343, |
| 3577 | 0xd02f531b, 0x93b0c5d5, 0x4452458d, 0xe704c324, 0x30e6437c, |
| 3578 | 0x7ad8c837, 0xad3a486f, 0x0e6ccec6, 0xd98e4e9e, 0x8953e35a, |
| 3579 | 0x5eb16302, 0xfde7e5ab, 0x2a0565f3, 0x603beeb8, 0xb7d96ee0, |
| 3580 | 0x148fe849, 0xc36d6811, 0x80f2fedf, 0x57107e87, 0xf446f82e, |
| 3581 | 0x23a47876, 0x699af33d, 0xbe787365, 0x1d2ef5cc, 0xcacc7594, |
| 3582 | 0xbc95ae44, 0x6b772e1c, 0xc821a8b5, 0x1fc328ed, 0x55fda3a6, |
| 3583 | 0x821f23fe, 0x2149a557, 0xf6ab250f, 0xb534b3c1, 0x62d63399, |
| 3584 | 0xc180b530, 0x16623568, 0x5c5cbe23, 0x8bbe3e7b, 0x28e8b8d2, |
| 3585 | 0xff0a388a, 0xafd7954e, 0x78351516, 0xdb6393bf, 0x0c8113e7, |
| 3586 | 0x46bf98ac, 0x915d18f4, 0x320b9e5d, 0xe5e91e05, 0xa67688cb, |
| 3587 | 0x71940893, 0xd2c28e3a, 0x05200e62, 0x4f1e8529, 0x98fc0571, |
| 3588 | 0x3baa83d8, 0xec480380, 0xd7193478, 0x00fbb420, 0xa3ad3289, |
| 3589 | 0x744fb2d1, 0x3e71399a, 0xe993b9c2, 0x4ac53f6b, 0x9d27bf33, |
| 3590 | 0xdeb829fd, 0x095aa9a5, 0xaa0c2f0c, 0x7deeaf54, 0x37d0241f, |
| 3591 | 0xe032a447, 0x436422ee, 0x9486a2b6, 0xc45b0f72, 0x13b98f2a, |
| 3592 | 0xb0ef0983, 0x670d89db, 0x2d330290, 0xfad182c8, 0x59870461, |
| 3593 | 0x8e658439, 0xcdfa12f7, 0x1a1892af, 0xb94e1406, 0x6eac945e, |
| 3594 | 0x24921f15, 0xf3709f4d, 0x502619e4, 0x87c499bc, 0xf19d426c, |
| 3595 | 0x267fc234, 0x8529449d, 0x52cbc4c5, 0x18f54f8e, 0xcf17cfd6, |
| 3596 | 0x6c41497f, 0xbba3c927, 0xf83c5fe9, 0x2fdedfb1, 0x8c885918, |
| 3597 | 0x5b6ad940, 0x1154520b, 0xc6b6d253, 0x65e054fa, 0xb202d4a2, |
| 3598 | 0xe2df7966, 0x353df93e, 0x966b7f97, 0x4189ffcf, 0x0bb77484, |
| 3599 | 0xdc55f4dc, 0x7f037275, 0xa8e1f22d, 0xeb7e64e3, 0x3c9ce4bb, |
| 3600 | 0x9fca6212, 0x4828e24a, 0x02166901, 0xd5f4e959, 0x76a26ff0, |
| 3601 | 0xa140efa8}, |
| 3602 | {0x00000000, 0xef52b6e1, 0x05d46b83, 0xea86dd62, 0x0ba8d706, |
| 3603 | 0xe4fa61e7, 0x0e7cbc85, 0xe12e0a64, 0x1751ae0c, 0xf80318ed, |
| 3604 | 0x1285c58f, 0xfdd7736e, 0x1cf9790a, 0xf3abcfeb, 0x192d1289, |
| 3605 | 0xf67fa468, 0x2ea35c18, 0xc1f1eaf9, 0x2b77379b, 0xc425817a, |
| 3606 | 0x250b8b1e, 0xca593dff, 0x20dfe09d, 0xcf8d567c, 0x39f2f214, |
| 3607 | 0xd6a044f5, 0x3c269997, 0xd3742f76, 0x325a2512, 0xdd0893f3, |
| 3608 | 0x378e4e91, 0xd8dcf870, 0x5d46b830, 0xb2140ed1, 0x5892d3b3, |
| 3609 | 0xb7c06552, 0x56ee6f36, 0xb9bcd9d7, 0x533a04b5, 0xbc68b254, |
| 3610 | 0x4a17163c, 0xa545a0dd, 0x4fc37dbf, 0xa091cb5e, 0x41bfc13a, |
| 3611 | 0xaeed77db, 0x446baab9, 0xab391c58, 0x73e5e428, 0x9cb752c9, |
| 3612 | 0x76318fab, 0x9963394a, 0x784d332e, 0x971f85cf, 0x7d9958ad, |
| 3613 | 0x92cbee4c, 0x64b44a24, 0x8be6fcc5, 0x616021a7, 0x8e329746, |
| 3614 | 0x6f1c9d22, 0x804e2bc3, 0x6ac8f6a1, 0x859a4040, 0xba8d7060, |
| 3615 | 0x55dfc681, 0xbf591be3, 0x500bad02, 0xb125a766, 0x5e771187, |
| 3616 | 0xb4f1cce5, 0x5ba37a04, 0xaddcde6c, 0x428e688d, 0xa808b5ef, |
| 3617 | 0x475a030e, 0xa674096a, 0x4926bf8b, 0xa3a062e9, 0x4cf2d408, |
| 3618 | 0x942e2c78, 0x7b7c9a99, 0x91fa47fb, 0x7ea8f11a, 0x9f86fb7e, |
| 3619 | 0x70d44d9f, 0x9a5290fd, 0x7500261c, 0x837f8274, 0x6c2d3495, |
| 3620 | 0x86abe9f7, 0x69f95f16, 0x88d75572, 0x6785e393, 0x8d033ef1, |
| 3621 | 0x62518810, 0xe7cbc850, 0x08997eb1, 0xe21fa3d3, 0x0d4d1532, |
| 3622 | 0xec631f56, 0x0331a9b7, 0xe9b774d5, 0x06e5c234, 0xf09a665c, |
| 3623 | 0x1fc8d0bd, 0xf54e0ddf, 0x1a1cbb3e, 0xfb32b15a, 0x146007bb, |
| 3624 | 0xfee6dad9, 0x11b46c38, 0xc9689448, 0x263a22a9, 0xccbcffcb, |
| 3625 | 0x23ee492a, 0xc2c0434e, 0x2d92f5af, 0xc71428cd, 0x28469e2c, |
| 3626 | 0xde393a44, 0x316b8ca5, 0xdbed51c7, 0x34bfe726, 0xd591ed42, |
| 3627 | 0x3ac35ba3, 0xd04586c1, 0x3f173020, 0xae6be681, 0x41395060, |
| 3628 | 0xabbf8d02, 0x44ed3be3, 0xa5c33187, 0x4a918766, 0xa0175a04, |
| 3629 | 0x4f45ece5, 0xb93a488d, 0x5668fe6c, 0xbcee230e, 0x53bc95ef, |
| 3630 | 0xb2929f8b, 0x5dc0296a, 0xb746f408, 0x581442e9, 0x80c8ba99, |
| 3631 | 0x6f9a0c78, 0x851cd11a, 0x6a4e67fb, 0x8b606d9f, 0x6432db7e, |
| 3632 | 0x8eb4061c, 0x61e6b0fd, 0x97991495, 0x78cba274, 0x924d7f16, |
| 3633 | 0x7d1fc9f7, 0x9c31c393, 0x73637572, 0x99e5a810, 0x76b71ef1, |
| 3634 | 0xf32d5eb1, 0x1c7fe850, 0xf6f93532, 0x19ab83d3, 0xf88589b7, |
| 3635 | 0x17d73f56, 0xfd51e234, 0x120354d5, 0xe47cf0bd, 0x0b2e465c, |
| 3636 | 0xe1a89b3e, 0x0efa2ddf, 0xefd427bb, 0x0086915a, 0xea004c38, |
| 3637 | 0x0552fad9, 0xdd8e02a9, 0x32dcb448, 0xd85a692a, 0x3708dfcb, |
| 3638 | 0xd626d5af, 0x3974634e, 0xd3f2be2c, 0x3ca008cd, 0xcadfaca5, |
| 3639 | 0x258d1a44, 0xcf0bc726, 0x205971c7, 0xc1777ba3, 0x2e25cd42, |
| 3640 | 0xc4a31020, 0x2bf1a6c1, 0x14e696e1, 0xfbb42000, 0x1132fd62, |
| 3641 | 0xfe604b83, 0x1f4e41e7, 0xf01cf706, 0x1a9a2a64, 0xf5c89c85, |
| 3642 | 0x03b738ed, 0xece58e0c, 0x0663536e, 0xe931e58f, 0x081fefeb, |
| 3643 | 0xe74d590a, 0x0dcb8468, 0xe2993289, 0x3a45caf9, 0xd5177c18, |
| 3644 | 0x3f91a17a, 0xd0c3179b, 0x31ed1dff, 0xdebfab1e, 0x3439767c, |
| 3645 | 0xdb6bc09d, 0x2d1464f5, 0xc246d214, 0x28c00f76, 0xc792b997, |
| 3646 | 0x26bcb3f3, 0xc9ee0512, 0x2368d870, 0xcc3a6e91, 0x49a02ed1, |
| 3647 | 0xa6f29830, 0x4c744552, 0xa326f3b3, 0x4208f9d7, 0xad5a4f36, |
| 3648 | 0x47dc9254, 0xa88e24b5, 0x5ef180dd, 0xb1a3363c, 0x5b25eb5e, |
| 3649 | 0xb4775dbf, 0x555957db, 0xba0be13a, 0x508d3c58, 0xbfdf8ab9, |
| 3650 | 0x670372c9, 0x8851c428, 0x62d7194a, 0x8d85afab, 0x6caba5cf, |
| 3651 | 0x83f9132e, 0x697fce4c, 0x862d78ad, 0x7052dcc5, 0x9f006a24, |
| 3652 | 0x7586b746, 0x9ad401a7, 0x7bfa0bc3, 0x94a8bd22, 0x7e2e6040, |
| 3653 | 0x917cd6a1}, |
| 3654 | {0x00000000, 0x87a6cb43, 0xd43c90c7, 0x539a5b84, 0x730827cf, |
| 3655 | 0xf4aeec8c, 0xa734b708, 0x20927c4b, 0xe6104f9e, 0x61b684dd, |
| 3656 | 0x322cdf59, 0xb58a141a, 0x95186851, 0x12bea312, 0x4124f896, |
| 3657 | 0xc68233d5, 0x1751997d, 0x90f7523e, 0xc36d09ba, 0x44cbc2f9, |
| 3658 | 0x6459beb2, 0xe3ff75f1, 0xb0652e75, 0x37c3e536, 0xf141d6e3, |
| 3659 | 0x76e71da0, 0x257d4624, 0xa2db8d67, 0x8249f12c, 0x05ef3a6f, |
| 3660 | 0x567561eb, 0xd1d3aaa8, 0x2ea332fa, 0xa905f9b9, 0xfa9fa23d, |
| 3661 | 0x7d39697e, 0x5dab1535, 0xda0dde76, 0x899785f2, 0x0e314eb1, |
| 3662 | 0xc8b37d64, 0x4f15b627, 0x1c8feda3, 0x9b2926e0, 0xbbbb5aab, |
| 3663 | 0x3c1d91e8, 0x6f87ca6c, 0xe821012f, 0x39f2ab87, 0xbe5460c4, |
| 3664 | 0xedce3b40, 0x6a68f003, 0x4afa8c48, 0xcd5c470b, 0x9ec61c8f, |
| 3665 | 0x1960d7cc, 0xdfe2e419, 0x58442f5a, 0x0bde74de, 0x8c78bf9d, |
| 3666 | 0xaceac3d6, 0x2b4c0895, 0x78d65311, 0xff709852, 0x5d4665f4, |
| 3667 | 0xdae0aeb7, 0x897af533, 0x0edc3e70, 0x2e4e423b, 0xa9e88978, |
| 3668 | 0xfa72d2fc, 0x7dd419bf, 0xbb562a6a, 0x3cf0e129, 0x6f6abaad, |
| 3669 | 0xe8cc71ee, 0xc85e0da5, 0x4ff8c6e6, 0x1c629d62, 0x9bc45621, |
| 3670 | 0x4a17fc89, 0xcdb137ca, 0x9e2b6c4e, 0x198da70d, 0x391fdb46, |
| 3671 | 0xbeb91005, 0xed234b81, 0x6a8580c2, 0xac07b317, 0x2ba17854, |
| 3672 | 0x783b23d0, 0xff9de893, 0xdf0f94d8, 0x58a95f9b, 0x0b33041f, |
| 3673 | 0x8c95cf5c, 0x73e5570e, 0xf4439c4d, 0xa7d9c7c9, 0x207f0c8a, |
| 3674 | 0x00ed70c1, 0x874bbb82, 0xd4d1e006, 0x53772b45, 0x95f51890, |
| 3675 | 0x1253d3d3, 0x41c98857, 0xc66f4314, 0xe6fd3f5f, 0x615bf41c, |
| 3676 | 0x32c1af98, 0xb56764db, 0x64b4ce73, 0xe3120530, 0xb0885eb4, |
| 3677 | 0x372e95f7, 0x17bce9bc, 0x901a22ff, 0xc380797b, 0x4426b238, |
| 3678 | 0x82a481ed, 0x05024aae, 0x5698112a, 0xd13eda69, 0xf1aca622, |
| 3679 | 0x760a6d61, 0x259036e5, 0xa236fda6, 0xba8ccbe8, 0x3d2a00ab, |
| 3680 | 0x6eb05b2f, 0xe916906c, 0xc984ec27, 0x4e222764, 0x1db87ce0, |
| 3681 | 0x9a1eb7a3, 0x5c9c8476, 0xdb3a4f35, 0x88a014b1, 0x0f06dff2, |
| 3682 | 0x2f94a3b9, 0xa83268fa, 0xfba8337e, 0x7c0ef83d, 0xaddd5295, |
| 3683 | 0x2a7b99d6, 0x79e1c252, 0xfe470911, 0xded5755a, 0x5973be19, |
| 3684 | 0x0ae9e59d, 0x8d4f2ede, 0x4bcd1d0b, 0xcc6bd648, 0x9ff18dcc, |
| 3685 | 0x1857468f, 0x38c53ac4, 0xbf63f187, 0xecf9aa03, 0x6b5f6140, |
| 3686 | 0x942ff912, 0x13893251, 0x401369d5, 0xc7b5a296, 0xe727dedd, |
| 3687 | 0x6081159e, 0x331b4e1a, 0xb4bd8559, 0x723fb68c, 0xf5997dcf, |
| 3688 | 0xa603264b, 0x21a5ed08, 0x01379143, 0x86915a00, 0xd50b0184, |
| 3689 | 0x52adcac7, 0x837e606f, 0x04d8ab2c, 0x5742f0a8, 0xd0e43beb, |
| 3690 | 0xf07647a0, 0x77d08ce3, 0x244ad767, 0xa3ec1c24, 0x656e2ff1, |
| 3691 | 0xe2c8e4b2, 0xb152bf36, 0x36f47475, 0x1666083e, 0x91c0c37d, |
| 3692 | 0xc25a98f9, 0x45fc53ba, 0xe7caae1c, 0x606c655f, 0x33f63edb, |
| 3693 | 0xb450f598, 0x94c289d3, 0x13644290, 0x40fe1914, 0xc758d257, |
| 3694 | 0x01dae182, 0x867c2ac1, 0xd5e67145, 0x5240ba06, 0x72d2c64d, |
| 3695 | 0xf5740d0e, 0xa6ee568a, 0x21489dc9, 0xf09b3761, 0x773dfc22, |
| 3696 | 0x24a7a7a6, 0xa3016ce5, 0x839310ae, 0x0435dbed, 0x57af8069, |
| 3697 | 0xd0094b2a, 0x168b78ff, 0x912db3bc, 0xc2b7e838, 0x4511237b, |
| 3698 | 0x65835f30, 0xe2259473, 0xb1bfcff7, 0x361904b4, 0xc9699ce6, |
| 3699 | 0x4ecf57a5, 0x1d550c21, 0x9af3c762, 0xba61bb29, 0x3dc7706a, |
| 3700 | 0x6e5d2bee, 0xe9fbe0ad, 0x2f79d378, 0xa8df183b, 0xfb4543bf, |
| 3701 | 0x7ce388fc, 0x5c71f4b7, 0xdbd73ff4, 0x884d6470, 0x0febaf33, |
| 3702 | 0xde38059b, 0x599eced8, 0x0a04955c, 0x8da25e1f, 0xad302254, |
| 3703 | 0x2a96e917, 0x790cb293, 0xfeaa79d0, 0x38284a05, 0xbf8e8146, |
| 3704 | 0xec14dac2, 0x6bb21181, 0x4b206dca, 0xcc86a689, 0x9f1cfd0d, |
| 3705 | 0x18ba364e}}; |
| 3706 | |
| 3707 | local const z_word_t FAR crc_braid_big_table[][256] = { |
| 3708 | {0x0000000000000000, 0x43cba68700000000, 0xc7903cd400000000, |
| 3709 | 0x845b9a5300000000, 0xcf27087300000000, 0x8cecaef400000000, |
| 3710 | 0x08b734a700000000, 0x4b7c922000000000, 0x9e4f10e600000000, |
| 3711 | 0xdd84b66100000000, 0x59df2c3200000000, 0x1a148ab500000000, |
| 3712 | 0x5168189500000000, 0x12a3be1200000000, 0x96f8244100000000, |
| 3713 | 0xd53382c600000000, 0x7d99511700000000, 0x3e52f79000000000, |
| 3714 | 0xba096dc300000000, 0xf9c2cb4400000000, 0xb2be596400000000, |
| 3715 | 0xf175ffe300000000, 0x752e65b000000000, 0x36e5c33700000000, |
| 3716 | 0xe3d641f100000000, 0xa01de77600000000, 0x24467d2500000000, |
| 3717 | 0x678ddba200000000, 0x2cf1498200000000, 0x6f3aef0500000000, |
| 3718 | 0xeb61755600000000, 0xa8aad3d100000000, 0xfa32a32e00000000, |
| 3719 | 0xb9f905a900000000, 0x3da29ffa00000000, 0x7e69397d00000000, |
| 3720 | 0x3515ab5d00000000, 0x76de0dda00000000, 0xf285978900000000, |
| 3721 | 0xb14e310e00000000, 0x647db3c800000000, 0x27b6154f00000000, |
| 3722 | 0xa3ed8f1c00000000, 0xe026299b00000000, 0xab5abbbb00000000, |
| 3723 | 0xe8911d3c00000000, 0x6cca876f00000000, 0x2f0121e800000000, |
| 3724 | 0x87abf23900000000, 0xc46054be00000000, 0x403bceed00000000, |
| 3725 | 0x03f0686a00000000, 0x488cfa4a00000000, 0x0b475ccd00000000, |
| 3726 | 0x8f1cc69e00000000, 0xccd7601900000000, 0x19e4e2df00000000, |
| 3727 | 0x5a2f445800000000, 0xde74de0b00000000, 0x9dbf788c00000000, |
| 3728 | 0xd6c3eaac00000000, 0x95084c2b00000000, 0x1153d67800000000, |
| 3729 | 0x529870ff00000000, 0xf465465d00000000, 0xb7aee0da00000000, |
| 3730 | 0x33f57a8900000000, 0x703edc0e00000000, 0x3b424e2e00000000, |
| 3731 | 0x7889e8a900000000, 0xfcd272fa00000000, 0xbf19d47d00000000, |
| 3732 | 0x6a2a56bb00000000, 0x29e1f03c00000000, 0xadba6a6f00000000, |
| 3733 | 0xee71cce800000000, 0xa50d5ec800000000, 0xe6c6f84f00000000, |
| 3734 | 0x629d621c00000000, 0x2156c49b00000000, 0x89fc174a00000000, |
| 3735 | 0xca37b1cd00000000, 0x4e6c2b9e00000000, 0x0da78d1900000000, |
| 3736 | 0x46db1f3900000000, 0x0510b9be00000000, 0x814b23ed00000000, |
| 3737 | 0xc280856a00000000, 0x17b307ac00000000, 0x5478a12b00000000, |
| 3738 | 0xd0233b7800000000, 0x93e89dff00000000, 0xd8940fdf00000000, |
| 3739 | 0x9b5fa95800000000, 0x1f04330b00000000, 0x5ccf958c00000000, |
| 3740 | 0x0e57e57300000000, 0x4d9c43f400000000, 0xc9c7d9a700000000, |
| 3741 | 0x8a0c7f2000000000, 0xc170ed0000000000, 0x82bb4b8700000000, |
| 3742 | 0x06e0d1d400000000, 0x452b775300000000, 0x9018f59500000000, |
| 3743 | 0xd3d3531200000000, 0x5788c94100000000, 0x14436fc600000000, |
| 3744 | 0x5f3ffde600000000, 0x1cf45b6100000000, 0x98afc13200000000, |
| 3745 | 0xdb6467b500000000, 0x73ceb46400000000, 0x300512e300000000, |
| 3746 | 0xb45e88b000000000, 0xf7952e3700000000, 0xbce9bc1700000000, |
| 3747 | 0xff221a9000000000, 0x7b7980c300000000, 0x38b2264400000000, |
| 3748 | 0xed81a48200000000, 0xae4a020500000000, 0x2a11985600000000, |
| 3749 | 0x69da3ed100000000, 0x22a6acf100000000, 0x616d0a7600000000, |
| 3750 | 0xe536902500000000, 0xa6fd36a200000000, 0xe8cb8cba00000000, |
| 3751 | 0xab002a3d00000000, 0x2f5bb06e00000000, 0x6c9016e900000000, |
| 3752 | 0x27ec84c900000000, 0x6427224e00000000, 0xe07cb81d00000000, |
| 3753 | 0xa3b71e9a00000000, 0x76849c5c00000000, 0x354f3adb00000000, |
| 3754 | 0xb114a08800000000, 0xf2df060f00000000, 0xb9a3942f00000000, |
| 3755 | 0xfa6832a800000000, 0x7e33a8fb00000000, 0x3df80e7c00000000, |
| 3756 | 0x9552ddad00000000, 0xd6997b2a00000000, 0x52c2e17900000000, |
| 3757 | 0x110947fe00000000, 0x5a75d5de00000000, 0x19be735900000000, |
| 3758 | 0x9de5e90a00000000, 0xde2e4f8d00000000, 0x0b1dcd4b00000000, |
| 3759 | 0x48d66bcc00000000, 0xcc8df19f00000000, 0x8f46571800000000, |
| 3760 | 0xc43ac53800000000, 0x87f163bf00000000, 0x03aaf9ec00000000, |
| 3761 | 0x40615f6b00000000, 0x12f92f9400000000, 0x5132891300000000, |
| 3762 | 0xd569134000000000, 0x96a2b5c700000000, 0xddde27e700000000, |
| 3763 | 0x9e15816000000000, 0x1a4e1b3300000000, 0x5985bdb400000000, |
| 3764 | 0x8cb63f7200000000, 0xcf7d99f500000000, 0x4b2603a600000000, |
| 3765 | 0x08eda52100000000, 0x4391370100000000, 0x005a918600000000, |
| 3766 | 0x84010bd500000000, 0xc7caad5200000000, 0x6f607e8300000000, |
| 3767 | 0x2cabd80400000000, 0xa8f0425700000000, 0xeb3be4d000000000, |
| 3768 | 0xa04776f000000000, 0xe38cd07700000000, 0x67d74a2400000000, |
| 3769 | 0x241ceca300000000, 0xf12f6e6500000000, 0xb2e4c8e200000000, |
| 3770 | 0x36bf52b100000000, 0x7574f43600000000, 0x3e08661600000000, |
| 3771 | 0x7dc3c09100000000, 0xf9985ac200000000, 0xba53fc4500000000, |
| 3772 | 0x1caecae700000000, 0x5f656c6000000000, 0xdb3ef63300000000, |
| 3773 | 0x98f550b400000000, 0xd389c29400000000, 0x9042641300000000, |
| 3774 | 0x1419fe4000000000, 0x57d258c700000000, 0x82e1da0100000000, |
| 3775 | 0xc12a7c8600000000, 0x4571e6d500000000, 0x06ba405200000000, |
| 3776 | 0x4dc6d27200000000, 0x0e0d74f500000000, 0x8a56eea600000000, |
| 3777 | 0xc99d482100000000, 0x61379bf000000000, 0x22fc3d7700000000, |
| 3778 | 0xa6a7a72400000000, 0xe56c01a300000000, 0xae10938300000000, |
| 3779 | 0xeddb350400000000, 0x6980af5700000000, 0x2a4b09d000000000, |
| 3780 | 0xff788b1600000000, 0xbcb32d9100000000, 0x38e8b7c200000000, |
| 3781 | 0x7b23114500000000, 0x305f836500000000, 0x739425e200000000, |
| 3782 | 0xf7cfbfb100000000, 0xb404193600000000, 0xe69c69c900000000, |
| 3783 | 0xa557cf4e00000000, 0x210c551d00000000, 0x62c7f39a00000000, |
| 3784 | 0x29bb61ba00000000, 0x6a70c73d00000000, 0xee2b5d6e00000000, |
| 3785 | 0xade0fbe900000000, 0x78d3792f00000000, 0x3b18dfa800000000, |
| 3786 | 0xbf4345fb00000000, 0xfc88e37c00000000, 0xb7f4715c00000000, |
| 3787 | 0xf43fd7db00000000, 0x70644d8800000000, 0x33afeb0f00000000, |
| 3788 | 0x9b0538de00000000, 0xd8ce9e5900000000, 0x5c95040a00000000, |
| 3789 | 0x1f5ea28d00000000, 0x542230ad00000000, 0x17e9962a00000000, |
| 3790 | 0x93b20c7900000000, 0xd079aafe00000000, 0x054a283800000000, |
| 3791 | 0x46818ebf00000000, 0xc2da14ec00000000, 0x8111b26b00000000, |
| 3792 | 0xca6d204b00000000, 0x89a686cc00000000, 0x0dfd1c9f00000000, |
| 3793 | 0x4e36ba1800000000}, |
| 3794 | {0x0000000000000000, 0xe1b652ef00000000, 0x836bd40500000000, |
| 3795 | 0x62dd86ea00000000, 0x06d7a80b00000000, 0xe761fae400000000, |
| 3796 | 0x85bc7c0e00000000, 0x640a2ee100000000, 0x0cae511700000000, |
| 3797 | 0xed1803f800000000, 0x8fc5851200000000, 0x6e73d7fd00000000, |
| 3798 | 0x0a79f91c00000000, 0xebcfabf300000000, 0x89122d1900000000, |
| 3799 | 0x68a47ff600000000, 0x185ca32e00000000, 0xf9eaf1c100000000, |
| 3800 | 0x9b37772b00000000, 0x7a8125c400000000, 0x1e8b0b2500000000, |
| 3801 | 0xff3d59ca00000000, 0x9de0df2000000000, 0x7c568dcf00000000, |
| 3802 | 0x14f2f23900000000, 0xf544a0d600000000, 0x9799263c00000000, |
| 3803 | 0x762f74d300000000, 0x12255a3200000000, 0xf39308dd00000000, |
| 3804 | 0x914e8e3700000000, 0x70f8dcd800000000, 0x30b8465d00000000, |
| 3805 | 0xd10e14b200000000, 0xb3d3925800000000, 0x5265c0b700000000, |
| 3806 | 0x366fee5600000000, 0xd7d9bcb900000000, 0xb5043a5300000000, |
| 3807 | 0x54b268bc00000000, 0x3c16174a00000000, 0xdda045a500000000, |
| 3808 | 0xbf7dc34f00000000, 0x5ecb91a000000000, 0x3ac1bf4100000000, |
| 3809 | 0xdb77edae00000000, 0xb9aa6b4400000000, 0x581c39ab00000000, |
| 3810 | 0x28e4e57300000000, 0xc952b79c00000000, 0xab8f317600000000, |
| 3811 | 0x4a39639900000000, 0x2e334d7800000000, 0xcf851f9700000000, |
| 3812 | 0xad58997d00000000, 0x4ceecb9200000000, 0x244ab46400000000, |
| 3813 | 0xc5fce68b00000000, 0xa721606100000000, 0x4697328e00000000, |
| 3814 | 0x229d1c6f00000000, 0xc32b4e8000000000, 0xa1f6c86a00000000, |
| 3815 | 0x40409a8500000000, 0x60708dba00000000, 0x81c6df5500000000, |
| 3816 | 0xe31b59bf00000000, 0x02ad0b5000000000, 0x66a725b100000000, |
| 3817 | 0x8711775e00000000, 0xe5ccf1b400000000, 0x047aa35b00000000, |
| 3818 | 0x6cdedcad00000000, 0x8d688e4200000000, 0xefb508a800000000, |
| 3819 | 0x0e035a4700000000, 0x6a0974a600000000, 0x8bbf264900000000, |
| 3820 | 0xe962a0a300000000, 0x08d4f24c00000000, 0x782c2e9400000000, |
| 3821 | 0x999a7c7b00000000, 0xfb47fa9100000000, 0x1af1a87e00000000, |
| 3822 | 0x7efb869f00000000, 0x9f4dd47000000000, 0xfd90529a00000000, |
| 3823 | 0x1c26007500000000, 0x74827f8300000000, 0x95342d6c00000000, |
| 3824 | 0xf7e9ab8600000000, 0x165ff96900000000, 0x7255d78800000000, |
| 3825 | 0x93e3856700000000, 0xf13e038d00000000, 0x1088516200000000, |
| 3826 | 0x50c8cbe700000000, 0xb17e990800000000, 0xd3a31fe200000000, |
| 3827 | 0x32154d0d00000000, 0x561f63ec00000000, 0xb7a9310300000000, |
| 3828 | 0xd574b7e900000000, 0x34c2e50600000000, 0x5c669af000000000, |
| 3829 | 0xbdd0c81f00000000, 0xdf0d4ef500000000, 0x3ebb1c1a00000000, |
| 3830 | 0x5ab132fb00000000, 0xbb07601400000000, 0xd9dae6fe00000000, |
| 3831 | 0x386cb41100000000, 0x489468c900000000, 0xa9223a2600000000, |
| 3832 | 0xcbffbccc00000000, 0x2a49ee2300000000, 0x4e43c0c200000000, |
| 3833 | 0xaff5922d00000000, 0xcd2814c700000000, 0x2c9e462800000000, |
| 3834 | 0x443a39de00000000, 0xa58c6b3100000000, 0xc751eddb00000000, |
| 3835 | 0x26e7bf3400000000, 0x42ed91d500000000, 0xa35bc33a00000000, |
| 3836 | 0xc18645d000000000, 0x2030173f00000000, 0x81e66bae00000000, |
| 3837 | 0x6050394100000000, 0x028dbfab00000000, 0xe33bed4400000000, |
| 3838 | 0x8731c3a500000000, 0x6687914a00000000, 0x045a17a000000000, |
| 3839 | 0xe5ec454f00000000, 0x8d483ab900000000, 0x6cfe685600000000, |
| 3840 | 0x0e23eebc00000000, 0xef95bc5300000000, 0x8b9f92b200000000, |
| 3841 | 0x6a29c05d00000000, 0x08f446b700000000, 0xe942145800000000, |
| 3842 | 0x99bac88000000000, 0x780c9a6f00000000, 0x1ad11c8500000000, |
| 3843 | 0xfb674e6a00000000, 0x9f6d608b00000000, 0x7edb326400000000, |
| 3844 | 0x1c06b48e00000000, 0xfdb0e66100000000, 0x9514999700000000, |
| 3845 | 0x74a2cb7800000000, 0x167f4d9200000000, 0xf7c91f7d00000000, |
| 3846 | 0x93c3319c00000000, 0x7275637300000000, 0x10a8e59900000000, |
| 3847 | 0xf11eb77600000000, 0xb15e2df300000000, 0x50e87f1c00000000, |
| 3848 | 0x3235f9f600000000, 0xd383ab1900000000, 0xb78985f800000000, |
| 3849 | 0x563fd71700000000, 0x34e251fd00000000, 0xd554031200000000, |
| 3850 | 0xbdf07ce400000000, 0x5c462e0b00000000, 0x3e9ba8e100000000, |
| 3851 | 0xdf2dfa0e00000000, 0xbb27d4ef00000000, 0x5a91860000000000, |
| 3852 | 0x384c00ea00000000, 0xd9fa520500000000, 0xa9028edd00000000, |
| 3853 | 0x48b4dc3200000000, 0x2a695ad800000000, 0xcbdf083700000000, |
| 3854 | 0xafd526d600000000, 0x4e63743900000000, 0x2cbef2d300000000, |
| 3855 | 0xcd08a03c00000000, 0xa5acdfca00000000, 0x441a8d2500000000, |
| 3856 | 0x26c70bcf00000000, 0xc771592000000000, 0xa37b77c100000000, |
| 3857 | 0x42cd252e00000000, 0x2010a3c400000000, 0xc1a6f12b00000000, |
| 3858 | 0xe196e61400000000, 0x0020b4fb00000000, 0x62fd321100000000, |
| 3859 | 0x834b60fe00000000, 0xe7414e1f00000000, 0x06f71cf000000000, |
| 3860 | 0x642a9a1a00000000, 0x859cc8f500000000, 0xed38b70300000000, |
| 3861 | 0x0c8ee5ec00000000, 0x6e53630600000000, 0x8fe531e900000000, |
| 3862 | 0xebef1f0800000000, 0x0a594de700000000, 0x6884cb0d00000000, |
| 3863 | 0x893299e200000000, 0xf9ca453a00000000, 0x187c17d500000000, |
| 3864 | 0x7aa1913f00000000, 0x9b17c3d000000000, 0xff1ded3100000000, |
| 3865 | 0x1eabbfde00000000, 0x7c76393400000000, 0x9dc06bdb00000000, |
| 3866 | 0xf564142d00000000, 0x14d246c200000000, 0x760fc02800000000, |
| 3867 | 0x97b992c700000000, 0xf3b3bc2600000000, 0x1205eec900000000, |
| 3868 | 0x70d8682300000000, 0x916e3acc00000000, 0xd12ea04900000000, |
| 3869 | 0x3098f2a600000000, 0x5245744c00000000, 0xb3f326a300000000, |
| 3870 | 0xd7f9084200000000, 0x364f5aad00000000, 0x5492dc4700000000, |
| 3871 | 0xb5248ea800000000, 0xdd80f15e00000000, 0x3c36a3b100000000, |
| 3872 | 0x5eeb255b00000000, 0xbf5d77b400000000, 0xdb57595500000000, |
| 3873 | 0x3ae10bba00000000, 0x583c8d5000000000, 0xb98adfbf00000000, |
| 3874 | 0xc972036700000000, 0x28c4518800000000, 0x4a19d76200000000, |
| 3875 | 0xabaf858d00000000, 0xcfa5ab6c00000000, 0x2e13f98300000000, |
| 3876 | 0x4cce7f6900000000, 0xad782d8600000000, 0xc5dc527000000000, |
| 3877 | 0x246a009f00000000, 0x46b7867500000000, 0xa701d49a00000000, |
| 3878 | 0xc30bfa7b00000000, 0x22bda89400000000, 0x40602e7e00000000, |
| 3879 | 0xa1d67c9100000000}, |
| 3880 | {0x0000000000000000, 0x5880e2d700000000, 0xf106b47400000000, |
| 3881 | 0xa98656a300000000, 0xe20d68e900000000, 0xba8d8a3e00000000, |
| 3882 | 0x130bdc9d00000000, 0x4b8b3e4a00000000, 0x851da10900000000, |
| 3883 | 0xdd9d43de00000000, 0x741b157d00000000, 0x2c9bf7aa00000000, |
| 3884 | 0x6710c9e000000000, 0x3f902b3700000000, 0x96167d9400000000, |
| 3885 | 0xce969f4300000000, 0x0a3b421300000000, 0x52bba0c400000000, |
| 3886 | 0xfb3df66700000000, 0xa3bd14b000000000, 0xe8362afa00000000, |
| 3887 | 0xb0b6c82d00000000, 0x19309e8e00000000, 0x41b07c5900000000, |
| 3888 | 0x8f26e31a00000000, 0xd7a601cd00000000, 0x7e20576e00000000, |
| 3889 | 0x26a0b5b900000000, 0x6d2b8bf300000000, 0x35ab692400000000, |
| 3890 | 0x9c2d3f8700000000, 0xc4addd5000000000, 0x1476842600000000, |
| 3891 | 0x4cf666f100000000, 0xe570305200000000, 0xbdf0d28500000000, |
| 3892 | 0xf67beccf00000000, 0xaefb0e1800000000, 0x077d58bb00000000, |
| 3893 | 0x5ffdba6c00000000, 0x916b252f00000000, 0xc9ebc7f800000000, |
| 3894 | 0x606d915b00000000, 0x38ed738c00000000, 0x73664dc600000000, |
| 3895 | 0x2be6af1100000000, 0x8260f9b200000000, 0xdae01b6500000000, |
| 3896 | 0x1e4dc63500000000, 0x46cd24e200000000, 0xef4b724100000000, |
| 3897 | 0xb7cb909600000000, 0xfc40aedc00000000, 0xa4c04c0b00000000, |
| 3898 | 0x0d461aa800000000, 0x55c6f87f00000000, 0x9b50673c00000000, |
| 3899 | 0xc3d085eb00000000, 0x6a56d34800000000, 0x32d6319f00000000, |
| 3900 | 0x795d0fd500000000, 0x21dded0200000000, 0x885bbba100000000, |
| 3901 | 0xd0db597600000000, 0x28ec084d00000000, 0x706cea9a00000000, |
| 3902 | 0xd9eabc3900000000, 0x816a5eee00000000, 0xcae160a400000000, |
| 3903 | 0x9261827300000000, 0x3be7d4d000000000, 0x6367360700000000, |
| 3904 | 0xadf1a94400000000, 0xf5714b9300000000, 0x5cf71d3000000000, |
| 3905 | 0x0477ffe700000000, 0x4ffcc1ad00000000, 0x177c237a00000000, |
| 3906 | 0xbefa75d900000000, 0xe67a970e00000000, 0x22d74a5e00000000, |
| 3907 | 0x7a57a88900000000, 0xd3d1fe2a00000000, 0x8b511cfd00000000, |
| 3908 | 0xc0da22b700000000, 0x985ac06000000000, 0x31dc96c300000000, |
| 3909 | 0x695c741400000000, 0xa7caeb5700000000, 0xff4a098000000000, |
| 3910 | 0x56cc5f2300000000, 0x0e4cbdf400000000, 0x45c783be00000000, |
| 3911 | 0x1d47616900000000, 0xb4c137ca00000000, 0xec41d51d00000000, |
| 3912 | 0x3c9a8c6b00000000, 0x641a6ebc00000000, 0xcd9c381f00000000, |
| 3913 | 0x951cdac800000000, 0xde97e48200000000, 0x8617065500000000, |
| 3914 | 0x2f9150f600000000, 0x7711b22100000000, 0xb9872d6200000000, |
| 3915 | 0xe107cfb500000000, 0x4881991600000000, 0x10017bc100000000, |
| 3916 | 0x5b8a458b00000000, 0x030aa75c00000000, 0xaa8cf1ff00000000, |
| 3917 | 0xf20c132800000000, 0x36a1ce7800000000, 0x6e212caf00000000, |
| 3918 | 0xc7a77a0c00000000, 0x9f2798db00000000, 0xd4aca69100000000, |
| 3919 | 0x8c2c444600000000, 0x25aa12e500000000, 0x7d2af03200000000, |
| 3920 | 0xb3bc6f7100000000, 0xeb3c8da600000000, 0x42badb0500000000, |
| 3921 | 0x1a3a39d200000000, 0x51b1079800000000, 0x0931e54f00000000, |
| 3922 | 0xa0b7b3ec00000000, 0xf837513b00000000, 0x50d8119a00000000, |
| 3923 | 0x0858f34d00000000, 0xa1dea5ee00000000, 0xf95e473900000000, |
| 3924 | 0xb2d5797300000000, 0xea559ba400000000, 0x43d3cd0700000000, |
| 3925 | 0x1b532fd000000000, 0xd5c5b09300000000, 0x8d45524400000000, |
| 3926 | 0x24c304e700000000, 0x7c43e63000000000, 0x37c8d87a00000000, |
| 3927 | 0x6f483aad00000000, 0xc6ce6c0e00000000, 0x9e4e8ed900000000, |
| 3928 | 0x5ae3538900000000, 0x0263b15e00000000, 0xabe5e7fd00000000, |
| 3929 | 0xf365052a00000000, 0xb8ee3b6000000000, 0xe06ed9b700000000, |
| 3930 | 0x49e88f1400000000, 0x11686dc300000000, 0xdffef28000000000, |
| 3931 | 0x877e105700000000, 0x2ef846f400000000, 0x7678a42300000000, |
| 3932 | 0x3df39a6900000000, 0x657378be00000000, 0xccf52e1d00000000, |
| 3933 | 0x9475ccca00000000, 0x44ae95bc00000000, 0x1c2e776b00000000, |
| 3934 | 0xb5a821c800000000, 0xed28c31f00000000, 0xa6a3fd5500000000, |
| 3935 | 0xfe231f8200000000, 0x57a5492100000000, 0x0f25abf600000000, |
| 3936 | 0xc1b334b500000000, 0x9933d66200000000, 0x30b580c100000000, |
| 3937 | 0x6835621600000000, 0x23be5c5c00000000, 0x7b3ebe8b00000000, |
| 3938 | 0xd2b8e82800000000, 0x8a380aff00000000, 0x4e95d7af00000000, |
| 3939 | 0x1615357800000000, 0xbf9363db00000000, 0xe713810c00000000, |
| 3940 | 0xac98bf4600000000, 0xf4185d9100000000, 0x5d9e0b3200000000, |
| 3941 | 0x051ee9e500000000, 0xcb8876a600000000, 0x9308947100000000, |
| 3942 | 0x3a8ec2d200000000, 0x620e200500000000, 0x29851e4f00000000, |
| 3943 | 0x7105fc9800000000, 0xd883aa3b00000000, 0x800348ec00000000, |
| 3944 | 0x783419d700000000, 0x20b4fb0000000000, 0x8932ada300000000, |
| 3945 | 0xd1b24f7400000000, 0x9a39713e00000000, 0xc2b993e900000000, |
| 3946 | 0x6b3fc54a00000000, 0x33bf279d00000000, 0xfd29b8de00000000, |
| 3947 | 0xa5a95a0900000000, 0x0c2f0caa00000000, 0x54afee7d00000000, |
| 3948 | 0x1f24d03700000000, 0x47a432e000000000, 0xee22644300000000, |
| 3949 | 0xb6a2869400000000, 0x720f5bc400000000, 0x2a8fb91300000000, |
| 3950 | 0x8309efb000000000, 0xdb890d6700000000, 0x9002332d00000000, |
| 3951 | 0xc882d1fa00000000, 0x6104875900000000, 0x3984658e00000000, |
| 3952 | 0xf712facd00000000, 0xaf92181a00000000, 0x06144eb900000000, |
| 3953 | 0x5e94ac6e00000000, 0x151f922400000000, 0x4d9f70f300000000, |
| 3954 | 0xe419265000000000, 0xbc99c48700000000, 0x6c429df100000000, |
| 3955 | 0x34c27f2600000000, 0x9d44298500000000, 0xc5c4cb5200000000, |
| 3956 | 0x8e4ff51800000000, 0xd6cf17cf00000000, 0x7f49416c00000000, |
| 3957 | 0x27c9a3bb00000000, 0xe95f3cf800000000, 0xb1dfde2f00000000, |
| 3958 | 0x1859888c00000000, 0x40d96a5b00000000, 0x0b52541100000000, |
| 3959 | 0x53d2b6c600000000, 0xfa54e06500000000, 0xa2d402b200000000, |
| 3960 | 0x6679dfe200000000, 0x3ef93d3500000000, 0x977f6b9600000000, |
| 3961 | 0xcfff894100000000, 0x8474b70b00000000, 0xdcf455dc00000000, |
| 3962 | 0x7572037f00000000, 0x2df2e1a800000000, 0xe3647eeb00000000, |
| 3963 | 0xbbe49c3c00000000, 0x1262ca9f00000000, 0x4ae2284800000000, |
| 3964 | 0x0169160200000000, 0x59e9f4d500000000, 0xf06fa27600000000, |
| 3965 | 0xa8ef40a100000000}, |
| 3966 | {0x0000000000000000, 0x463b676500000000, 0x8c76ceca00000000, |
| 3967 | 0xca4da9af00000000, 0x59ebed4e00000000, 0x1fd08a2b00000000, |
| 3968 | 0xd59d238400000000, 0x93a644e100000000, 0xb2d6db9d00000000, |
| 3969 | 0xf4edbcf800000000, 0x3ea0155700000000, 0x789b723200000000, |
| 3970 | 0xeb3d36d300000000, 0xad0651b600000000, 0x674bf81900000000, |
| 3971 | 0x21709f7c00000000, 0x25abc6e000000000, 0x6390a18500000000, |
| 3972 | 0xa9dd082a00000000, 0xefe66f4f00000000, 0x7c402bae00000000, |
| 3973 | 0x3a7b4ccb00000000, 0xf036e56400000000, 0xb60d820100000000, |
| 3974 | 0x977d1d7d00000000, 0xd1467a1800000000, 0x1b0bd3b700000000, |
| 3975 | 0x5d30b4d200000000, 0xce96f03300000000, 0x88ad975600000000, |
| 3976 | 0x42e03ef900000000, 0x04db599c00000000, 0x0b50fc1a00000000, |
| 3977 | 0x4d6b9b7f00000000, 0x872632d000000000, 0xc11d55b500000000, |
| 3978 | 0x52bb115400000000, 0x1480763100000000, 0xdecddf9e00000000, |
| 3979 | 0x98f6b8fb00000000, 0xb986278700000000, 0xffbd40e200000000, |
| 3980 | 0x35f0e94d00000000, 0x73cb8e2800000000, 0xe06dcac900000000, |
| 3981 | 0xa656adac00000000, 0x6c1b040300000000, 0x2a20636600000000, |
| 3982 | 0x2efb3afa00000000, 0x68c05d9f00000000, 0xa28df43000000000, |
| 3983 | 0xe4b6935500000000, 0x7710d7b400000000, 0x312bb0d100000000, |
| 3984 | 0xfb66197e00000000, 0xbd5d7e1b00000000, 0x9c2de16700000000, |
| 3985 | 0xda16860200000000, 0x105b2fad00000000, 0x566048c800000000, |
| 3986 | 0xc5c60c2900000000, 0x83fd6b4c00000000, 0x49b0c2e300000000, |
| 3987 | 0x0f8ba58600000000, 0x16a0f83500000000, 0x509b9f5000000000, |
| 3988 | 0x9ad636ff00000000, 0xdced519a00000000, 0x4f4b157b00000000, |
| 3989 | 0x0970721e00000000, 0xc33ddbb100000000, 0x8506bcd400000000, |
| 3990 | 0xa47623a800000000, 0xe24d44cd00000000, 0x2800ed6200000000, |
| 3991 | 0x6e3b8a0700000000, 0xfd9dcee600000000, 0xbba6a98300000000, |
| 3992 | 0x71eb002c00000000, 0x37d0674900000000, 0x330b3ed500000000, |
| 3993 | 0x753059b000000000, 0xbf7df01f00000000, 0xf946977a00000000, |
| 3994 | 0x6ae0d39b00000000, 0x2cdbb4fe00000000, 0xe6961d5100000000, |
| 3995 | 0xa0ad7a3400000000, 0x81dde54800000000, 0xc7e6822d00000000, |
| 3996 | 0x0dab2b8200000000, 0x4b904ce700000000, 0xd836080600000000, |
| 3997 | 0x9e0d6f6300000000, 0x5440c6cc00000000, 0x127ba1a900000000, |
| 3998 | 0x1df0042f00000000, 0x5bcb634a00000000, 0x9186cae500000000, |
| 3999 | 0xd7bdad8000000000, 0x441be96100000000, 0x02208e0400000000, |
| 4000 | 0xc86d27ab00000000, 0x8e5640ce00000000, 0xaf26dfb200000000, |
| 4001 | 0xe91db8d700000000, 0x2350117800000000, 0x656b761d00000000, |
| 4002 | 0xf6cd32fc00000000, 0xb0f6559900000000, 0x7abbfc3600000000, |
| 4003 | 0x3c809b5300000000, 0x385bc2cf00000000, 0x7e60a5aa00000000, |
| 4004 | 0xb42d0c0500000000, 0xf2166b6000000000, 0x61b02f8100000000, |
| 4005 | 0x278b48e400000000, 0xedc6e14b00000000, 0xabfd862e00000000, |
| 4006 | 0x8a8d195200000000, 0xccb67e3700000000, 0x06fbd79800000000, |
| 4007 | 0x40c0b0fd00000000, 0xd366f41c00000000, 0x955d937900000000, |
| 4008 | 0x5f103ad600000000, 0x192b5db300000000, 0x2c40f16b00000000, |
| 4009 | 0x6a7b960e00000000, 0xa0363fa100000000, 0xe60d58c400000000, |
| 4010 | 0x75ab1c2500000000, 0x33907b4000000000, 0xf9ddd2ef00000000, |
| 4011 | 0xbfe6b58a00000000, 0x9e962af600000000, 0xd8ad4d9300000000, |
| 4012 | 0x12e0e43c00000000, 0x54db835900000000, 0xc77dc7b800000000, |
| 4013 | 0x8146a0dd00000000, 0x4b0b097200000000, 0x0d306e1700000000, |
| 4014 | 0x09eb378b00000000, 0x4fd050ee00000000, 0x859df94100000000, |
| 4015 | 0xc3a69e2400000000, 0x5000dac500000000, 0x163bbda000000000, |
| 4016 | 0xdc76140f00000000, 0x9a4d736a00000000, 0xbb3dec1600000000, |
| 4017 | 0xfd068b7300000000, 0x374b22dc00000000, 0x717045b900000000, |
| 4018 | 0xe2d6015800000000, 0xa4ed663d00000000, 0x6ea0cf9200000000, |
| 4019 | 0x289ba8f700000000, 0x27100d7100000000, 0x612b6a1400000000, |
| 4020 | 0xab66c3bb00000000, 0xed5da4de00000000, 0x7efbe03f00000000, |
| 4021 | 0x38c0875a00000000, 0xf28d2ef500000000, 0xb4b6499000000000, |
| 4022 | 0x95c6d6ec00000000, 0xd3fdb18900000000, 0x19b0182600000000, |
| 4023 | 0x5f8b7f4300000000, 0xcc2d3ba200000000, 0x8a165cc700000000, |
| 4024 | 0x405bf56800000000, 0x0660920d00000000, 0x02bbcb9100000000, |
| 4025 | 0x4480acf400000000, 0x8ecd055b00000000, 0xc8f6623e00000000, |
| 4026 | 0x5b5026df00000000, 0x1d6b41ba00000000, 0xd726e81500000000, |
| 4027 | 0x911d8f7000000000, 0xb06d100c00000000, 0xf656776900000000, |
| 4028 | 0x3c1bdec600000000, 0x7a20b9a300000000, 0xe986fd4200000000, |
| 4029 | 0xafbd9a2700000000, 0x65f0338800000000, 0x23cb54ed00000000, |
| 4030 | 0x3ae0095e00000000, 0x7cdb6e3b00000000, 0xb696c79400000000, |
| 4031 | 0xf0ada0f100000000, 0x630be41000000000, 0x2530837500000000, |
| 4032 | 0xef7d2ada00000000, 0xa9464dbf00000000, 0x8836d2c300000000, |
| 4033 | 0xce0db5a600000000, 0x04401c0900000000, 0x427b7b6c00000000, |
| 4034 | 0xd1dd3f8d00000000, 0x97e658e800000000, 0x5dabf14700000000, |
| 4035 | 0x1b90962200000000, 0x1f4bcfbe00000000, 0x5970a8db00000000, |
| 4036 | 0x933d017400000000, 0xd506661100000000, 0x46a022f000000000, |
| 4037 | 0x009b459500000000, 0xcad6ec3a00000000, 0x8ced8b5f00000000, |
| 4038 | 0xad9d142300000000, 0xeba6734600000000, 0x21ebdae900000000, |
| 4039 | 0x67d0bd8c00000000, 0xf476f96d00000000, 0xb24d9e0800000000, |
| 4040 | 0x780037a700000000, 0x3e3b50c200000000, 0x31b0f54400000000, |
| 4041 | 0x778b922100000000, 0xbdc63b8e00000000, 0xfbfd5ceb00000000, |
| 4042 | 0x685b180a00000000, 0x2e607f6f00000000, 0xe42dd6c000000000, |
| 4043 | 0xa216b1a500000000, 0x83662ed900000000, 0xc55d49bc00000000, |
| 4044 | 0x0f10e01300000000, 0x492b877600000000, 0xda8dc39700000000, |
| 4045 | 0x9cb6a4f200000000, 0x56fb0d5d00000000, 0x10c06a3800000000, |
| 4046 | 0x141b33a400000000, 0x522054c100000000, 0x986dfd6e00000000, |
| 4047 | 0xde569a0b00000000, 0x4df0deea00000000, 0x0bcbb98f00000000, |
| 4048 | 0xc186102000000000, 0x87bd774500000000, 0xa6cde83900000000, |
| 4049 | 0xe0f68f5c00000000, 0x2abb26f300000000, 0x6c80419600000000, |
| 4050 | 0xff26057700000000, 0xb91d621200000000, 0x7350cbbd00000000, |
| 4051 | 0x356bacd800000000}, |
| 4052 | {0x0000000000000000, 0x9e83da9f00000000, 0x7d01c4e400000000, |
| 4053 | 0xe3821e7b00000000, 0xbb04f91200000000, 0x2587238d00000000, |
| 4054 | 0xc6053df600000000, 0x5886e76900000000, 0x7609f22500000000, |
| 4055 | 0xe88a28ba00000000, 0x0b0836c100000000, 0x958bec5e00000000, |
| 4056 | 0xcd0d0b3700000000, 0x538ed1a800000000, 0xb00ccfd300000000, |
| 4057 | 0x2e8f154c00000000, 0xec12e44b00000000, 0x72913ed400000000, |
| 4058 | 0x911320af00000000, 0x0f90fa3000000000, 0x57161d5900000000, |
| 4059 | 0xc995c7c600000000, 0x2a17d9bd00000000, 0xb494032200000000, |
| 4060 | 0x9a1b166e00000000, 0x0498ccf100000000, 0xe71ad28a00000000, |
| 4061 | 0x7999081500000000, 0x211fef7c00000000, 0xbf9c35e300000000, |
| 4062 | 0x5c1e2b9800000000, 0xc29df10700000000, 0xd825c89700000000, |
| 4063 | 0x46a6120800000000, 0xa5240c7300000000, 0x3ba7d6ec00000000, |
| 4064 | 0x6321318500000000, 0xfda2eb1a00000000, 0x1e20f56100000000, |
| 4065 | 0x80a32ffe00000000, 0xae2c3ab200000000, 0x30afe02d00000000, |
| 4066 | 0xd32dfe5600000000, 0x4dae24c900000000, 0x1528c3a000000000, |
| 4067 | 0x8bab193f00000000, 0x6829074400000000, 0xf6aadddb00000000, |
| 4068 | 0x34372cdc00000000, 0xaab4f64300000000, 0x4936e83800000000, |
| 4069 | 0xd7b532a700000000, 0x8f33d5ce00000000, 0x11b00f5100000000, |
| 4070 | 0xf232112a00000000, 0x6cb1cbb500000000, 0x423edef900000000, |
| 4071 | 0xdcbd046600000000, 0x3f3f1a1d00000000, 0xa1bcc08200000000, |
| 4072 | 0xf93a27eb00000000, 0x67b9fd7400000000, 0x843be30f00000000, |
| 4073 | 0x1ab8399000000000, 0xf14de1f400000000, 0x6fce3b6b00000000, |
| 4074 | 0x8c4c251000000000, 0x12cfff8f00000000, 0x4a4918e600000000, |
| 4075 | 0xd4cac27900000000, 0x3748dc0200000000, 0xa9cb069d00000000, |
| 4076 | 0x874413d100000000, 0x19c7c94e00000000, 0xfa45d73500000000, |
| 4077 | 0x64c60daa00000000, 0x3c40eac300000000, 0xa2c3305c00000000, |
| 4078 | 0x41412e2700000000, 0xdfc2f4b800000000, 0x1d5f05bf00000000, |
| 4079 | 0x83dcdf2000000000, 0x605ec15b00000000, 0xfedd1bc400000000, |
| 4080 | 0xa65bfcad00000000, 0x38d8263200000000, 0xdb5a384900000000, |
| 4081 | 0x45d9e2d600000000, 0x6b56f79a00000000, 0xf5d52d0500000000, |
| 4082 | 0x1657337e00000000, 0x88d4e9e100000000, 0xd0520e8800000000, |
| 4083 | 0x4ed1d41700000000, 0xad53ca6c00000000, 0x33d010f300000000, |
| 4084 | 0x2968296300000000, 0xb7ebf3fc00000000, 0x5469ed8700000000, |
| 4085 | 0xcaea371800000000, 0x926cd07100000000, 0x0cef0aee00000000, |
| 4086 | 0xef6d149500000000, 0x71eece0a00000000, 0x5f61db4600000000, |
| 4087 | 0xc1e201d900000000, 0x22601fa200000000, 0xbce3c53d00000000, |
| 4088 | 0xe465225400000000, 0x7ae6f8cb00000000, 0x9964e6b000000000, |
| 4089 | 0x07e73c2f00000000, 0xc57acd2800000000, 0x5bf917b700000000, |
| 4090 | 0xb87b09cc00000000, 0x26f8d35300000000, 0x7e7e343a00000000, |
| 4091 | 0xe0fdeea500000000, 0x037ff0de00000000, 0x9dfc2a4100000000, |
| 4092 | 0xb3733f0d00000000, 0x2df0e59200000000, 0xce72fbe900000000, |
| 4093 | 0x50f1217600000000, 0x0877c61f00000000, 0x96f41c8000000000, |
| 4094 | 0x757602fb00000000, 0xebf5d86400000000, 0xa39db33200000000, |
| 4095 | 0x3d1e69ad00000000, 0xde9c77d600000000, 0x401fad4900000000, |
| 4096 | 0x18994a2000000000, 0x861a90bf00000000, 0x65988ec400000000, |
| 4097 | 0xfb1b545b00000000, 0xd594411700000000, 0x4b179b8800000000, |
| 4098 | 0xa89585f300000000, 0x36165f6c00000000, 0x6e90b80500000000, |
| 4099 | 0xf013629a00000000, 0x13917ce100000000, 0x8d12a67e00000000, |
| 4100 | 0x4f8f577900000000, 0xd10c8de600000000, 0x328e939d00000000, |
| 4101 | 0xac0d490200000000, 0xf48bae6b00000000, 0x6a0874f400000000, |
| 4102 | 0x898a6a8f00000000, 0x1709b01000000000, 0x3986a55c00000000, |
| 4103 | 0xa7057fc300000000, 0x448761b800000000, 0xda04bb2700000000, |
| 4104 | 0x82825c4e00000000, 0x1c0186d100000000, 0xff8398aa00000000, |
| 4105 | 0x6100423500000000, 0x7bb87ba500000000, 0xe53ba13a00000000, |
| 4106 | 0x06b9bf4100000000, 0x983a65de00000000, 0xc0bc82b700000000, |
| 4107 | 0x5e3f582800000000, 0xbdbd465300000000, 0x233e9ccc00000000, |
| 4108 | 0x0db1898000000000, 0x9332531f00000000, 0x70b04d6400000000, |
| 4109 | 0xee3397fb00000000, 0xb6b5709200000000, 0x2836aa0d00000000, |
| 4110 | 0xcbb4b47600000000, 0x55376ee900000000, 0x97aa9fee00000000, |
| 4111 | 0x0929457100000000, 0xeaab5b0a00000000, 0x7428819500000000, |
| 4112 | 0x2cae66fc00000000, 0xb22dbc6300000000, 0x51afa21800000000, |
| 4113 | 0xcf2c788700000000, 0xe1a36dcb00000000, 0x7f20b75400000000, |
| 4114 | 0x9ca2a92f00000000, 0x022173b000000000, 0x5aa794d900000000, |
| 4115 | 0xc4244e4600000000, 0x27a6503d00000000, 0xb9258aa200000000, |
| 4116 | 0x52d052c600000000, 0xcc53885900000000, 0x2fd1962200000000, |
| 4117 | 0xb1524cbd00000000, 0xe9d4abd400000000, 0x7757714b00000000, |
| 4118 | 0x94d56f3000000000, 0x0a56b5af00000000, 0x24d9a0e300000000, |
| 4119 | 0xba5a7a7c00000000, 0x59d8640700000000, 0xc75bbe9800000000, |
| 4120 | 0x9fdd59f100000000, 0x015e836e00000000, 0xe2dc9d1500000000, |
| 4121 | 0x7c5f478a00000000, 0xbec2b68d00000000, 0x20416c1200000000, |
| 4122 | 0xc3c3726900000000, 0x5d40a8f600000000, 0x05c64f9f00000000, |
| 4123 | 0x9b45950000000000, 0x78c78b7b00000000, 0xe64451e400000000, |
| 4124 | 0xc8cb44a800000000, 0x56489e3700000000, 0xb5ca804c00000000, |
| 4125 | 0x2b495ad300000000, 0x73cfbdba00000000, 0xed4c672500000000, |
| 4126 | 0x0ece795e00000000, 0x904da3c100000000, 0x8af59a5100000000, |
| 4127 | 0x147640ce00000000, 0xf7f45eb500000000, 0x6977842a00000000, |
| 4128 | 0x31f1634300000000, 0xaf72b9dc00000000, 0x4cf0a7a700000000, |
| 4129 | 0xd2737d3800000000, 0xfcfc687400000000, 0x627fb2eb00000000, |
| 4130 | 0x81fdac9000000000, 0x1f7e760f00000000, 0x47f8916600000000, |
| 4131 | 0xd97b4bf900000000, 0x3af9558200000000, 0xa47a8f1d00000000, |
| 4132 | 0x66e77e1a00000000, 0xf864a48500000000, 0x1be6bafe00000000, |
| 4133 | 0x8565606100000000, 0xdde3870800000000, 0x43605d9700000000, |
| 4134 | 0xa0e243ec00000000, 0x3e61997300000000, 0x10ee8c3f00000000, |
| 4135 | 0x8e6d56a000000000, 0x6def48db00000000, 0xf36c924400000000, |
| 4136 | 0xabea752d00000000, 0x3569afb200000000, 0xd6ebb1c900000000, |
| 4137 | 0x48686b5600000000}, |
| 4138 | {0x0000000000000000, 0xc064281700000000, 0x80c9502e00000000, |
| 4139 | 0x40ad783900000000, 0x0093a15c00000000, 0xc0f7894b00000000, |
| 4140 | 0x805af17200000000, 0x403ed96500000000, 0x002643b900000000, |
| 4141 | 0xc0426bae00000000, 0x80ef139700000000, 0x408b3b8000000000, |
| 4142 | 0x00b5e2e500000000, 0xc0d1caf200000000, 0x807cb2cb00000000, |
| 4143 | 0x40189adc00000000, 0x414af7a900000000, 0x812edfbe00000000, |
| 4144 | 0xc183a78700000000, 0x01e78f9000000000, 0x41d956f500000000, |
| 4145 | 0x81bd7ee200000000, 0xc11006db00000000, 0x01742ecc00000000, |
| 4146 | 0x416cb41000000000, 0x81089c0700000000, 0xc1a5e43e00000000, |
| 4147 | 0x01c1cc2900000000, 0x41ff154c00000000, 0x819b3d5b00000000, |
| 4148 | 0xc136456200000000, 0x01526d7500000000, 0xc3929f8800000000, |
| 4149 | 0x03f6b79f00000000, 0x435bcfa600000000, 0x833fe7b100000000, |
| 4150 | 0xc3013ed400000000, 0x036516c300000000, 0x43c86efa00000000, |
| 4151 | 0x83ac46ed00000000, 0xc3b4dc3100000000, 0x03d0f42600000000, |
| 4152 | 0x437d8c1f00000000, 0x8319a40800000000, 0xc3277d6d00000000, |
| 4153 | 0x0343557a00000000, 0x43ee2d4300000000, 0x838a055400000000, |
| 4154 | 0x82d8682100000000, 0x42bc403600000000, 0x0211380f00000000, |
| 4155 | 0xc275101800000000, 0x824bc97d00000000, 0x422fe16a00000000, |
| 4156 | 0x0282995300000000, 0xc2e6b14400000000, 0x82fe2b9800000000, |
| 4157 | 0x429a038f00000000, 0x02377bb600000000, 0xc25353a100000000, |
| 4158 | 0x826d8ac400000000, 0x4209a2d300000000, 0x02a4daea00000000, |
| 4159 | 0xc2c0f2fd00000000, 0xc7234eca00000000, 0x074766dd00000000, |
| 4160 | 0x47ea1ee400000000, 0x878e36f300000000, 0xc7b0ef9600000000, |
| 4161 | 0x07d4c78100000000, 0x4779bfb800000000, 0x871d97af00000000, |
| 4162 | 0xc7050d7300000000, 0x0761256400000000, 0x47cc5d5d00000000, |
| 4163 | 0x87a8754a00000000, 0xc796ac2f00000000, 0x07f2843800000000, |
| 4164 | 0x475ffc0100000000, 0x873bd41600000000, 0x8669b96300000000, |
| 4165 | 0x460d917400000000, 0x06a0e94d00000000, 0xc6c4c15a00000000, |
| 4166 | 0x86fa183f00000000, 0x469e302800000000, 0x0633481100000000, |
| 4167 | 0xc657600600000000, 0x864ffada00000000, 0x462bd2cd00000000, |
| 4168 | 0x0686aaf400000000, 0xc6e282e300000000, 0x86dc5b8600000000, |
| 4169 | 0x46b8739100000000, 0x06150ba800000000, 0xc67123bf00000000, |
| 4170 | 0x04b1d14200000000, 0xc4d5f95500000000, 0x8478816c00000000, |
| 4171 | 0x441ca97b00000000, 0x0422701e00000000, 0xc446580900000000, |
| 4172 | 0x84eb203000000000, 0x448f082700000000, 0x049792fb00000000, |
| 4173 | 0xc4f3baec00000000, 0x845ec2d500000000, 0x443aeac200000000, |
| 4174 | 0x040433a700000000, 0xc4601bb000000000, 0x84cd638900000000, |
| 4175 | 0x44a94b9e00000000, 0x45fb26eb00000000, 0x859f0efc00000000, |
| 4176 | 0xc53276c500000000, 0x05565ed200000000, 0x456887b700000000, |
| 4177 | 0x850cafa000000000, 0xc5a1d79900000000, 0x05c5ff8e00000000, |
| 4178 | 0x45dd655200000000, 0x85b94d4500000000, 0xc514357c00000000, |
| 4179 | 0x05701d6b00000000, 0x454ec40e00000000, 0x852aec1900000000, |
| 4180 | 0xc587942000000000, 0x05e3bc3700000000, 0xcf41ed4f00000000, |
| 4181 | 0x0f25c55800000000, 0x4f88bd6100000000, 0x8fec957600000000, |
| 4182 | 0xcfd24c1300000000, 0x0fb6640400000000, 0x4f1b1c3d00000000, |
| 4183 | 0x8f7f342a00000000, 0xcf67aef600000000, 0x0f0386e100000000, |
| 4184 | 0x4faefed800000000, 0x8fcad6cf00000000, 0xcff40faa00000000, |
| 4185 | 0x0f9027bd00000000, 0x4f3d5f8400000000, 0x8f59779300000000, |
| 4186 | 0x8e0b1ae600000000, 0x4e6f32f100000000, 0x0ec24ac800000000, |
| 4187 | 0xcea662df00000000, 0x8e98bbba00000000, 0x4efc93ad00000000, |
| 4188 | 0x0e51eb9400000000, 0xce35c38300000000, 0x8e2d595f00000000, |
| 4189 | 0x4e49714800000000, 0x0ee4097100000000, 0xce80216600000000, |
| 4190 | 0x8ebef80300000000, 0x4edad01400000000, 0x0e77a82d00000000, |
| 4191 | 0xce13803a00000000, 0x0cd372c700000000, 0xccb75ad000000000, |
| 4192 | 0x8c1a22e900000000, 0x4c7e0afe00000000, 0x0c40d39b00000000, |
| 4193 | 0xcc24fb8c00000000, 0x8c8983b500000000, 0x4cedaba200000000, |
| 4194 | 0x0cf5317e00000000, 0xcc91196900000000, 0x8c3c615000000000, |
| 4195 | 0x4c58494700000000, 0x0c66902200000000, 0xcc02b83500000000, |
| 4196 | 0x8cafc00c00000000, 0x4ccbe81b00000000, 0x4d99856e00000000, |
| 4197 | 0x8dfdad7900000000, 0xcd50d54000000000, 0x0d34fd5700000000, |
| 4198 | 0x4d0a243200000000, 0x8d6e0c2500000000, 0xcdc3741c00000000, |
| 4199 | 0x0da75c0b00000000, 0x4dbfc6d700000000, 0x8ddbeec000000000, |
| 4200 | 0xcd7696f900000000, 0x0d12beee00000000, 0x4d2c678b00000000, |
| 4201 | 0x8d484f9c00000000, 0xcde537a500000000, 0x0d811fb200000000, |
| 4202 | 0x0862a38500000000, 0xc8068b9200000000, 0x88abf3ab00000000, |
| 4203 | 0x48cfdbbc00000000, 0x08f102d900000000, 0xc8952ace00000000, |
| 4204 | 0x883852f700000000, 0x485c7ae000000000, 0x0844e03c00000000, |
| 4205 | 0xc820c82b00000000, 0x888db01200000000, 0x48e9980500000000, |
| 4206 | 0x08d7416000000000, 0xc8b3697700000000, 0x881e114e00000000, |
| 4207 | 0x487a395900000000, 0x4928542c00000000, 0x894c7c3b00000000, |
| 4208 | 0xc9e1040200000000, 0x09852c1500000000, 0x49bbf57000000000, |
| 4209 | 0x89dfdd6700000000, 0xc972a55e00000000, 0x09168d4900000000, |
| 4210 | 0x490e179500000000, 0x896a3f8200000000, 0xc9c747bb00000000, |
| 4211 | 0x09a36fac00000000, 0x499db6c900000000, 0x89f99ede00000000, |
| 4212 | 0xc954e6e700000000, 0x0930cef000000000, 0xcbf03c0d00000000, |
| 4213 | 0x0b94141a00000000, 0x4b396c2300000000, 0x8b5d443400000000, |
| 4214 | 0xcb639d5100000000, 0x0b07b54600000000, 0x4baacd7f00000000, |
| 4215 | 0x8bcee56800000000, 0xcbd67fb400000000, 0x0bb257a300000000, |
| 4216 | 0x4b1f2f9a00000000, 0x8b7b078d00000000, 0xcb45dee800000000, |
| 4217 | 0x0b21f6ff00000000, 0x4b8c8ec600000000, 0x8be8a6d100000000, |
| 4218 | 0x8abacba400000000, 0x4adee3b300000000, 0x0a739b8a00000000, |
| 4219 | 0xca17b39d00000000, 0x8a296af800000000, 0x4a4d42ef00000000, |
| 4220 | 0x0ae03ad600000000, 0xca8412c100000000, 0x8a9c881d00000000, |
| 4221 | 0x4af8a00a00000000, 0x0a55d83300000000, 0xca31f02400000000, |
| 4222 | 0x8a0f294100000000, 0x4a6b015600000000, 0x0ac6796f00000000, |
| 4223 | 0xcaa2517800000000}, |
| 4224 | {0x0000000000000000, 0xd4ea739b00000000, 0xe9d396ed00000000, |
| 4225 | 0x3d39e57600000000, 0x93a15c0000000000, 0x474b2f9b00000000, |
| 4226 | 0x7a72caed00000000, 0xae98b97600000000, 0x2643b90000000000, |
| 4227 | 0xf2a9ca9b00000000, 0xcf902fed00000000, 0x1b7a5c7600000000, |
| 4228 | 0xb5e2e50000000000, 0x6108969b00000000, 0x5c3173ed00000000, |
| 4229 | 0x88db007600000000, 0x4c86720100000000, 0x986c019a00000000, |
| 4230 | 0xa555e4ec00000000, 0x71bf977700000000, 0xdf272e0100000000, |
| 4231 | 0x0bcd5d9a00000000, 0x36f4b8ec00000000, 0xe21ecb7700000000, |
| 4232 | 0x6ac5cb0100000000, 0xbe2fb89a00000000, 0x83165dec00000000, |
| 4233 | 0x57fc2e7700000000, 0xf964970100000000, 0x2d8ee49a00000000, |
| 4234 | 0x10b701ec00000000, 0xc45d727700000000, 0x980ce50200000000, |
| 4235 | 0x4ce6969900000000, 0x71df73ef00000000, 0xa535007400000000, |
| 4236 | 0x0badb90200000000, 0xdf47ca9900000000, 0xe27e2fef00000000, |
| 4237 | 0x36945c7400000000, 0xbe4f5c0200000000, 0x6aa52f9900000000, |
| 4238 | 0x579ccaef00000000, 0x8376b97400000000, 0x2dee000200000000, |
| 4239 | 0xf904739900000000, 0xc43d96ef00000000, 0x10d7e57400000000, |
| 4240 | 0xd48a970300000000, 0x0060e49800000000, 0x3d5901ee00000000, |
| 4241 | 0xe9b3727500000000, 0x472bcb0300000000, 0x93c1b89800000000, |
| 4242 | 0xaef85dee00000000, 0x7a122e7500000000, 0xf2c92e0300000000, |
| 4243 | 0x26235d9800000000, 0x1b1ab8ee00000000, 0xcff0cb7500000000, |
| 4244 | 0x6168720300000000, 0xb582019800000000, 0x88bbe4ee00000000, |
| 4245 | 0x5c51977500000000, 0x3019ca0500000000, 0xe4f3b99e00000000, |
| 4246 | 0xd9ca5ce800000000, 0x0d202f7300000000, 0xa3b8960500000000, |
| 4247 | 0x7752e59e00000000, 0x4a6b00e800000000, 0x9e81737300000000, |
| 4248 | 0x165a730500000000, 0xc2b0009e00000000, 0xff89e5e800000000, |
| 4249 | 0x2b63967300000000, 0x85fb2f0500000000, 0x51115c9e00000000, |
| 4250 | 0x6c28b9e800000000, 0xb8c2ca7300000000, 0x7c9fb80400000000, |
| 4251 | 0xa875cb9f00000000, 0x954c2ee900000000, 0x41a65d7200000000, |
| 4252 | 0xef3ee40400000000, 0x3bd4979f00000000, 0x06ed72e900000000, |
| 4253 | 0xd207017200000000, 0x5adc010400000000, 0x8e36729f00000000, |
| 4254 | 0xb30f97e900000000, 0x67e5e47200000000, 0xc97d5d0400000000, |
| 4255 | 0x1d972e9f00000000, 0x20aecbe900000000, 0xf444b87200000000, |
| 4256 | 0xa8152f0700000000, 0x7cff5c9c00000000, 0x41c6b9ea00000000, |
| 4257 | 0x952cca7100000000, 0x3bb4730700000000, 0xef5e009c00000000, |
| 4258 | 0xd267e5ea00000000, 0x068d967100000000, 0x8e56960700000000, |
| 4259 | 0x5abce59c00000000, 0x678500ea00000000, 0xb36f737100000000, |
| 4260 | 0x1df7ca0700000000, 0xc91db99c00000000, 0xf4245cea00000000, |
| 4261 | 0x20ce2f7100000000, 0xe4935d0600000000, 0x30792e9d00000000, |
| 4262 | 0x0d40cbeb00000000, 0xd9aab87000000000, 0x7732010600000000, |
| 4263 | 0xa3d8729d00000000, 0x9ee197eb00000000, 0x4a0be47000000000, |
| 4264 | 0xc2d0e40600000000, 0x163a979d00000000, 0x2b0372eb00000000, |
| 4265 | 0xffe9017000000000, 0x5171b80600000000, 0x859bcb9d00000000, |
| 4266 | 0xb8a22eeb00000000, 0x6c485d7000000000, 0x6032940b00000000, |
| 4267 | 0xb4d8e79000000000, 0x89e102e600000000, 0x5d0b717d00000000, |
| 4268 | 0xf393c80b00000000, 0x2779bb9000000000, 0x1a405ee600000000, |
| 4269 | 0xceaa2d7d00000000, 0x46712d0b00000000, 0x929b5e9000000000, |
| 4270 | 0xafa2bbe600000000, 0x7b48c87d00000000, 0xd5d0710b00000000, |
| 4271 | 0x013a029000000000, 0x3c03e7e600000000, 0xe8e9947d00000000, |
| 4272 | 0x2cb4e60a00000000, 0xf85e959100000000, 0xc56770e700000000, |
| 4273 | 0x118d037c00000000, 0xbf15ba0a00000000, 0x6bffc99100000000, |
| 4274 | 0x56c62ce700000000, 0x822c5f7c00000000, 0x0af75f0a00000000, |
| 4275 | 0xde1d2c9100000000, 0xe324c9e700000000, 0x37ceba7c00000000, |
| 4276 | 0x9956030a00000000, 0x4dbc709100000000, 0x708595e700000000, |
| 4277 | 0xa46fe67c00000000, 0xf83e710900000000, 0x2cd4029200000000, |
| 4278 | 0x11ede7e400000000, 0xc507947f00000000, 0x6b9f2d0900000000, |
| 4279 | 0xbf755e9200000000, 0x824cbbe400000000, 0x56a6c87f00000000, |
| 4280 | 0xde7dc80900000000, 0x0a97bb9200000000, 0x37ae5ee400000000, |
| 4281 | 0xe3442d7f00000000, 0x4ddc940900000000, 0x9936e79200000000, |
| 4282 | 0xa40f02e400000000, 0x70e5717f00000000, 0xb4b8030800000000, |
| 4283 | 0x6052709300000000, 0x5d6b95e500000000, 0x8981e67e00000000, |
| 4284 | 0x27195f0800000000, 0xf3f32c9300000000, 0xcecac9e500000000, |
| 4285 | 0x1a20ba7e00000000, 0x92fbba0800000000, 0x4611c99300000000, |
| 4286 | 0x7b282ce500000000, 0xafc25f7e00000000, 0x015ae60800000000, |
| 4287 | 0xd5b0959300000000, 0xe88970e500000000, 0x3c63037e00000000, |
| 4288 | 0x502b5e0e00000000, 0x84c12d9500000000, 0xb9f8c8e300000000, |
| 4289 | 0x6d12bb7800000000, 0xc38a020e00000000, 0x1760719500000000, |
| 4290 | 0x2a5994e300000000, 0xfeb3e77800000000, 0x7668e70e00000000, |
| 4291 | 0xa282949500000000, 0x9fbb71e300000000, 0x4b51027800000000, |
| 4292 | 0xe5c9bb0e00000000, 0x3123c89500000000, 0x0c1a2de300000000, |
| 4293 | 0xd8f05e7800000000, 0x1cad2c0f00000000, 0xc8475f9400000000, |
| 4294 | 0xf57ebae200000000, 0x2194c97900000000, 0x8f0c700f00000000, |
| 4295 | 0x5be6039400000000, 0x66dfe6e200000000, 0xb235957900000000, |
| 4296 | 0x3aee950f00000000, 0xee04e69400000000, 0xd33d03e200000000, |
| 4297 | 0x07d7707900000000, 0xa94fc90f00000000, 0x7da5ba9400000000, |
| 4298 | 0x409c5fe200000000, 0x94762c7900000000, 0xc827bb0c00000000, |
| 4299 | 0x1ccdc89700000000, 0x21f42de100000000, 0xf51e5e7a00000000, |
| 4300 | 0x5b86e70c00000000, 0x8f6c949700000000, 0xb25571e100000000, |
| 4301 | 0x66bf027a00000000, 0xee64020c00000000, 0x3a8e719700000000, |
| 4302 | 0x07b794e100000000, 0xd35de77a00000000, 0x7dc55e0c00000000, |
| 4303 | 0xa92f2d9700000000, 0x9416c8e100000000, 0x40fcbb7a00000000, |
| 4304 | 0x84a1c90d00000000, 0x504bba9600000000, 0x6d725fe000000000, |
| 4305 | 0xb9982c7b00000000, 0x1700950d00000000, 0xc3eae69600000000, |
| 4306 | 0xfed303e000000000, 0x2a39707b00000000, 0xa2e2700d00000000, |
| 4307 | 0x7608039600000000, 0x4b31e6e000000000, 0x9fdb957b00000000, |
| 4308 | 0x31432c0d00000000, 0xe5a95f9600000000, 0xd890bae000000000, |
| 4309 | 0x0c7ac97b00000000}, |
| 4310 | {0x0000000000000000, 0x2765258100000000, 0x0fcc3bd900000000, |
| 4311 | 0x28a91e5800000000, 0x5f9e066900000000, 0x78fb23e800000000, |
| 4312 | 0x50523db000000000, 0x7737183100000000, 0xbe3c0dd200000000, |
| 4313 | 0x9959285300000000, 0xb1f0360b00000000, 0x9695138a00000000, |
| 4314 | 0xe1a20bbb00000000, 0xc6c72e3a00000000, 0xee6e306200000000, |
| 4315 | 0xc90b15e300000000, 0x3d7f6b7f00000000, 0x1a1a4efe00000000, |
| 4316 | 0x32b350a600000000, 0x15d6752700000000, 0x62e16d1600000000, |
| 4317 | 0x4584489700000000, 0x6d2d56cf00000000, 0x4a48734e00000000, |
| 4318 | 0x834366ad00000000, 0xa426432c00000000, 0x8c8f5d7400000000, |
| 4319 | 0xabea78f500000000, 0xdcdd60c400000000, 0xfbb8454500000000, |
| 4320 | 0xd3115b1d00000000, 0xf4747e9c00000000, 0x7afed6fe00000000, |
| 4321 | 0x5d9bf37f00000000, 0x7532ed2700000000, 0x5257c8a600000000, |
| 4322 | 0x2560d09700000000, 0x0205f51600000000, 0x2aaceb4e00000000, |
| 4323 | 0x0dc9cecf00000000, 0xc4c2db2c00000000, 0xe3a7fead00000000, |
| 4324 | 0xcb0ee0f500000000, 0xec6bc57400000000, 0x9b5cdd4500000000, |
| 4325 | 0xbc39f8c400000000, 0x9490e69c00000000, 0xb3f5c31d00000000, |
| 4326 | 0x4781bd8100000000, 0x60e4980000000000, 0x484d865800000000, |
| 4327 | 0x6f28a3d900000000, 0x181fbbe800000000, 0x3f7a9e6900000000, |
| 4328 | 0x17d3803100000000, 0x30b6a5b000000000, 0xf9bdb05300000000, |
| 4329 | 0xded895d200000000, 0xf6718b8a00000000, 0xd114ae0b00000000, |
| 4330 | 0xa623b63a00000000, 0x814693bb00000000, 0xa9ef8de300000000, |
| 4331 | 0x8e8aa86200000000, 0xb5fadc2600000000, 0x929ff9a700000000, |
| 4332 | 0xba36e7ff00000000, 0x9d53c27e00000000, 0xea64da4f00000000, |
| 4333 | 0xcd01ffce00000000, 0xe5a8e19600000000, 0xc2cdc41700000000, |
| 4334 | 0x0bc6d1f400000000, 0x2ca3f47500000000, 0x040aea2d00000000, |
| 4335 | 0x236fcfac00000000, 0x5458d79d00000000, 0x733df21c00000000, |
| 4336 | 0x5b94ec4400000000, 0x7cf1c9c500000000, 0x8885b75900000000, |
| 4337 | 0xafe092d800000000, 0x87498c8000000000, 0xa02ca90100000000, |
| 4338 | 0xd71bb13000000000, 0xf07e94b100000000, 0xd8d78ae900000000, |
| 4339 | 0xffb2af6800000000, 0x36b9ba8b00000000, 0x11dc9f0a00000000, |
| 4340 | 0x3975815200000000, 0x1e10a4d300000000, 0x6927bce200000000, |
| 4341 | 0x4e42996300000000, 0x66eb873b00000000, 0x418ea2ba00000000, |
| 4342 | 0xcf040ad800000000, 0xe8612f5900000000, 0xc0c8310100000000, |
| 4343 | 0xe7ad148000000000, 0x909a0cb100000000, 0xb7ff293000000000, |
| 4344 | 0x9f56376800000000, 0xb83312e900000000, 0x7138070a00000000, |
| 4345 | 0x565d228b00000000, 0x7ef43cd300000000, 0x5991195200000000, |
| 4346 | 0x2ea6016300000000, 0x09c324e200000000, 0x216a3aba00000000, |
| 4347 | 0x060f1f3b00000000, 0xf27b61a700000000, 0xd51e442600000000, |
| 4348 | 0xfdb75a7e00000000, 0xdad27fff00000000, 0xade567ce00000000, |
| 4349 | 0x8a80424f00000000, 0xa2295c1700000000, 0x854c799600000000, |
| 4350 | 0x4c476c7500000000, 0x6b2249f400000000, 0x438b57ac00000000, |
| 4351 | 0x64ee722d00000000, 0x13d96a1c00000000, 0x34bc4f9d00000000, |
| 4352 | 0x1c1551c500000000, 0x3b70744400000000, 0x6af5b94d00000000, |
| 4353 | 0x4d909ccc00000000, 0x6539829400000000, 0x425ca71500000000, |
| 4354 | 0x356bbf2400000000, 0x120e9aa500000000, 0x3aa784fd00000000, |
| 4355 | 0x1dc2a17c00000000, 0xd4c9b49f00000000, 0xf3ac911e00000000, |
| 4356 | 0xdb058f4600000000, 0xfc60aac700000000, 0x8b57b2f600000000, |
| 4357 | 0xac32977700000000, 0x849b892f00000000, 0xa3feacae00000000, |
| 4358 | 0x578ad23200000000, 0x70eff7b300000000, 0x5846e9eb00000000, |
| 4359 | 0x7f23cc6a00000000, 0x0814d45b00000000, 0x2f71f1da00000000, |
| 4360 | 0x07d8ef8200000000, 0x20bdca0300000000, 0xe9b6dfe000000000, |
| 4361 | 0xced3fa6100000000, 0xe67ae43900000000, 0xc11fc1b800000000, |
| 4362 | 0xb628d98900000000, 0x914dfc0800000000, 0xb9e4e25000000000, |
| 4363 | 0x9e81c7d100000000, 0x100b6fb300000000, 0x376e4a3200000000, |
| 4364 | 0x1fc7546a00000000, 0x38a271eb00000000, 0x4f9569da00000000, |
| 4365 | 0x68f04c5b00000000, 0x4059520300000000, 0x673c778200000000, |
| 4366 | 0xae37626100000000, 0x895247e000000000, 0xa1fb59b800000000, |
| 4367 | 0x869e7c3900000000, 0xf1a9640800000000, 0xd6cc418900000000, |
| 4368 | 0xfe655fd100000000, 0xd9007a5000000000, 0x2d7404cc00000000, |
| 4369 | 0x0a11214d00000000, 0x22b83f1500000000, 0x05dd1a9400000000, |
| 4370 | 0x72ea02a500000000, 0x558f272400000000, 0x7d26397c00000000, |
| 4371 | 0x5a431cfd00000000, 0x9348091e00000000, 0xb42d2c9f00000000, |
| 4372 | 0x9c8432c700000000, 0xbbe1174600000000, 0xccd60f7700000000, |
| 4373 | 0xebb32af600000000, 0xc31a34ae00000000, 0xe47f112f00000000, |
| 4374 | 0xdf0f656b00000000, 0xf86a40ea00000000, 0xd0c35eb200000000, |
| 4375 | 0xf7a67b3300000000, 0x8091630200000000, 0xa7f4468300000000, |
| 4376 | 0x8f5d58db00000000, 0xa8387d5a00000000, 0x613368b900000000, |
| 4377 | 0x46564d3800000000, 0x6eff536000000000, 0x499a76e100000000, |
| 4378 | 0x3ead6ed000000000, 0x19c84b5100000000, 0x3161550900000000, |
| 4379 | 0x1604708800000000, 0xe2700e1400000000, 0xc5152b9500000000, |
| 4380 | 0xedbc35cd00000000, 0xcad9104c00000000, 0xbdee087d00000000, |
| 4381 | 0x9a8b2dfc00000000, 0xb22233a400000000, 0x9547162500000000, |
| 4382 | 0x5c4c03c600000000, 0x7b29264700000000, 0x5380381f00000000, |
| 4383 | 0x74e51d9e00000000, 0x03d205af00000000, 0x24b7202e00000000, |
| 4384 | 0x0c1e3e7600000000, 0x2b7b1bf700000000, 0xa5f1b39500000000, |
| 4385 | 0x8294961400000000, 0xaa3d884c00000000, 0x8d58adcd00000000, |
| 4386 | 0xfa6fb5fc00000000, 0xdd0a907d00000000, 0xf5a38e2500000000, |
| 4387 | 0xd2c6aba400000000, 0x1bcdbe4700000000, 0x3ca89bc600000000, |
| 4388 | 0x1401859e00000000, 0x3364a01f00000000, 0x4453b82e00000000, |
| 4389 | 0x63369daf00000000, 0x4b9f83f700000000, 0x6cfaa67600000000, |
| 4390 | 0x988ed8ea00000000, 0xbfebfd6b00000000, 0x9742e33300000000, |
| 4391 | 0xb027c6b200000000, 0xc710de8300000000, 0xe075fb0200000000, |
| 4392 | 0xc8dce55a00000000, 0xefb9c0db00000000, 0x26b2d53800000000, |
| 4393 | 0x01d7f0b900000000, 0x297eeee100000000, 0x0e1bcb6000000000, |
| 4394 | 0x792cd35100000000, 0x5e49f6d000000000, 0x76e0e88800000000, |
| 4395 | 0x5185cd0900000000}}; |
| 4396 | |
| 4397 | #else /* W == 4 */ |
| 4398 | |
| 4399 | local const z_crc_t FAR crc_braid_table[][256] = { |
| 4400 | {0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f, |
| 4401 | 0x98a37710, 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91, |
| 4402 | 0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee, 0xe931d31e, |
| 4403 | 0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c, |
| 4404 | 0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02, |
| 4405 | 0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12, |
| 4406 | 0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567, |
| 4407 | 0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277, |
| 4408 | 0x1e3dad06, 0x8598e169, 0xf2063399, 0x69a37ff6, 0x1d3b9679, |
| 4409 | 0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604, 0x8f8c7a6b, |
| 4410 | 0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4, |
| 4411 | 0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a, |
| 4412 | 0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0, |
| 4413 | 0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0, |
| 4414 | 0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91, |
| 4415 | 0x41f113fe, 0x3569fa71, 0xaeccb61e, 0xd95264ee, 0x42f72881, |
| 4416 | 0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, 0x3f7d6173, |
| 4417 | 0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d, |
| 4418 | 0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912, |
| 4419 | 0x4eefc57d, 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8, |
| 4420 | 0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6, |
| 4421 | 0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6, |
| 4422 | 0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, 0xc8711f6b, |
| 4423 | 0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b, |
| 4424 | 0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75, |
| 4425 | 0xbae5801a, 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f, |
| 4426 | 0x8cfcf17f, 0x1759bd10, 0x63c1549f, 0xf86418f0, 0x8ffaca00, |
| 4427 | 0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee, |
| 4428 | 0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c, |
| 4429 | 0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c, |
| 4430 | 0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d, |
| 4431 | 0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d, |
| 4432 | 0x78f6b418, 0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67, |
| 4433 | 0xe055c308, 0x97cb11f8, 0x0c6e5d97, 0x7efac2e6, 0xe55f8e89, |
| 4434 | 0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706, |
| 4435 | 0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14, |
| 4436 | 0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a, |
| 4437 | 0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a, |
| 4438 | 0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f, |
| 4439 | 0x273a0ae0, 0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f, |
| 4440 | 0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, 0x55ae9591, |
| 4441 | 0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983, |
| 4442 | 0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c, |
| 4443 | 0x2824dc63, 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2, |
| 4444 | 0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d, 0x489503e8, |
| 4445 | 0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8, |
| 4446 | 0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89, |
| 4447 | 0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99, |
| 4448 | 0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b, |
| 4449 | 0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485, |
| 4450 | 0xaeba0675, 0x351f4a1a, 0x4187a395, 0xda22effa, 0xadbc3d0a, |
| 4451 | 0x36197165}, |
| 4452 | {0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382, |
| 4453 | 0x7157ac42, 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85, |
| 4454 | 0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07, 0x52762b06, |
| 4455 | 0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca, |
| 4456 | 0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e, |
| 4457 | 0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc, |
| 4458 | 0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616, |
| 4459 | 0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54, |
| 4460 | 0x3c5f6e92, 0xfdd1b152, 0x6433d753, 0xa5bd0893, 0x8c861d10, |
| 4461 | 0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c, 0xe9e494dc, |
| 4462 | 0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f, |
| 4463 | 0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58, |
| 4464 | 0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef, |
| 4465 | 0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad, |
| 4466 | 0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b, |
| 4467 | 0xf5699eab, 0xdc528b28, 0x1ddc54e8, 0x843e32e9, 0x45b0ed29, |
| 4468 | 0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, 0xc867aea6, |
| 4469 | 0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1, |
| 4470 | 0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622, |
| 4471 | 0xeb4629e2, 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039, |
| 4472 | 0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d, |
| 4473 | 0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f, |
| 4474 | 0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, 0xa64eeb32, |
| 4475 | 0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770, |
| 4476 | 0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034, |
| 4477 | 0x35b61ff4, 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f, |
| 4478 | 0x2f8d8c5e, 0xee03539e, 0xc738461d, 0x06b699dd, 0x9f54ffdc, |
| 4479 | 0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db, |
| 4480 | 0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154, |
| 4481 | 0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16, |
| 4482 | 0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0, |
| 4483 | 0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592, |
| 4484 | 0xf17dba48, 0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca, |
| 4485 | 0x802a160a, 0x19c8700b, 0xd846afcb, 0x4bbe5b0d, 0x8a3084cd, |
| 4486 | 0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e, |
| 4487 | 0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882, |
| 4488 | 0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6, |
| 4489 | 0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384, |
| 4490 | 0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1, |
| 4491 | 0x384b4a71, 0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3, |
| 4492 | 0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, 0xabb3beb7, |
| 4493 | 0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b, |
| 4494 | 0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8, |
| 4495 | 0x2664fd38, 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff, |
| 4496 | 0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7, |
| 4497 | 0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5, |
| 4498 | 0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23, |
| 4499 | 0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761, |
| 4500 | 0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee, |
| 4501 | 0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9, |
| 4502 | 0x6b6c3fe8, 0xaae2e028, 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a, |
| 4503 | 0x1a3b93aa}, |
| 4504 | {0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a, |
| 4505 | 0xe629cb44, 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca, |
| 4506 | 0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3, |
| 4507 | 0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb, |
| 4508 | 0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c, |
| 4509 | 0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58, |
| 4510 | 0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed, |
| 4511 | 0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9, |
| 4512 | 0x5c8a4324, 0xb348281a, 0x587f9319, 0xb7bdf827, 0x5561e35e, |
| 4513 | 0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238, 0x8731e906, |
| 4514 | 0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f, |
| 4515 | 0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf, |
| 4516 | 0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0, |
| 4517 | 0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4, |
| 4518 | 0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769, |
| 4519 | 0x665afc57, 0x8486e72e, 0x6b448c10, 0x80733713, 0x6fb15c2d, |
| 4520 | 0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, 0xb0ff2632, |
| 4521 | 0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82, |
| 4522 | 0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb, |
| 4523 | 0x481fddc5, 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73, |
| 4524 | 0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484, |
| 4525 | 0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0, |
| 4526 | 0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, 0xf2bc55a5, |
| 4527 | 0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1, |
| 4528 | 0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516, |
| 4529 | 0x03b70e28, 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f, |
| 4530 | 0xe2f0d93c, 0x0d32b202, 0xefeea97b, 0x002cc245, 0xeb1b7946, |
| 4531 | 0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6, |
| 4532 | 0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9, |
| 4533 | 0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad, |
| 4534 | 0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820, |
| 4535 | 0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364, |
| 4536 | 0xa9580ad1, 0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab, |
| 4537 | 0x4f71c195, 0xa4467a96, 0x4b8411a8, 0xba8f4a25, 0x554d211b, |
| 4538 | 0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62, |
| 4539 | 0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a, |
| 4540 | 0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd, |
| 4541 | 0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089, |
| 4542 | 0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c, |
| 4543 | 0x9388b5a2, 0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8, |
| 4544 | 0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, 0x6283ee2f, |
| 4545 | 0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477, |
| 4546 | 0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e, |
| 4547 | 0xbdcd9430, 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be, |
| 4548 | 0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4, 0x37e20d71, |
| 4549 | 0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635, |
| 4550 | 0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8, |
| 4551 | 0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc, |
| 4552 | 0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3, |
| 4553 | 0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753, |
| 4554 | 0x076e1c50, 0xe8ac776e, 0x0a706c17, 0xe5b20729, 0x0e85bc2a, |
| 4555 | 0xe147d714}, |
| 4556 | {0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c, |
| 4557 | 0x4a97454f, 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b, |
| 4558 | 0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757, 0xc8c2db92, |
| 4559 | 0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4, |
| 4560 | 0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069, |
| 4561 | 0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526, |
| 4562 | 0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25, |
| 4563 | 0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a, |
| 4564 | 0x392920bb, 0x2e5234f8, 0x17df083d, 0x00a41c7e, 0x64c571b7, |
| 4565 | 0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2, 0x394ad491, |
| 4566 | 0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958, |
| 4567 | 0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f, |
| 4568 | 0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307, |
| 4569 | 0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648, |
| 4570 | 0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999, |
| 4571 | 0x5cc79dda, 0x38a6f013, 0x2fdde450, 0x1650d895, 0x012bccd6, |
| 4572 | 0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, 0x2fbe107a, |
| 4573 | 0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d, |
| 4574 | 0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4, |
| 4575 | 0xadeb8ea7, 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61, |
| 4576 | 0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc, |
| 4577 | 0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3, |
| 4578 | 0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, 0xde55eb53, |
| 4579 | 0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c, |
| 4580 | 0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1, |
| 4581 | 0x01ec2482, 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c, |
| 4582 | 0x48a328c9, 0x5fd83c8a, 0x3bb95143, 0x2cc24500, 0x154f79c5, |
| 4583 | 0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92, |
| 4584 | 0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e, |
| 4585 | 0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771, |
| 4586 | 0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0, |
| 4587 | 0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def, |
| 4588 | 0xe4a482ec, 0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0, |
| 4589 | 0xae33c7a3, 0x97befb66, 0x80c5ef25, 0x5f7c20f4, 0x480734b7, |
| 4590 | 0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e, |
| 4591 | 0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58, |
| 4592 | 0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285, |
| 4593 | 0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca, |
| 4594 | 0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce, |
| 4595 | 0x814a3f8d, 0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81, |
| 4596 | 0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, 0x5ef3f05c, |
| 4597 | 0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a, |
| 4598 | 0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3, |
| 4599 | 0x70662cf0, 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4, |
| 4600 | 0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb, |
| 4601 | 0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4, |
| 4602 | 0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75, |
| 4603 | 0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a, |
| 4604 | 0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296, |
| 4605 | 0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1, |
| 4606 | 0x03d84904, 0x14a35d47, 0x70c2308e, 0x67b924cd, 0x5e341808, |
| 4607 | 0x494f0c4b}}; |
| 4608 | |
| 4609 | local const z_word_t FAR crc_braid_big_table[][256] = { |
| 4610 | {0x00000000, 0x43147b17, 0x8628f62e, 0xc53c8d39, 0x0c51ec5d, |
| 4611 | 0x4f45974a, 0x8a791a73, 0xc96d6164, 0x18a2d8bb, 0x5bb6a3ac, |
| 4612 | 0x9e8a2e95, 0xdd9e5582, 0x14f334e6, 0x57e74ff1, 0x92dbc2c8, |
| 4613 | 0xd1cfb9df, 0x7142c0ac, 0x3256bbbb, 0xf76a3682, 0xb47e4d95, |
| 4614 | 0x7d132cf1, 0x3e0757e6, 0xfb3bdadf, 0xb82fa1c8, 0x69e01817, |
| 4615 | 0x2af46300, 0xefc8ee39, 0xacdc952e, 0x65b1f44a, 0x26a58f5d, |
| 4616 | 0xe3990264, 0xa08d7973, 0xa382f182, 0xe0968a95, 0x25aa07ac, |
| 4617 | 0x66be7cbb, 0xafd31ddf, 0xecc766c8, 0x29fbebf1, 0x6aef90e6, |
| 4618 | 0xbb202939, 0xf834522e, 0x3d08df17, 0x7e1ca400, 0xb771c564, |
| 4619 | 0xf465be73, 0x3159334a, 0x724d485d, 0xd2c0312e, 0x91d44a39, |
| 4620 | 0x54e8c700, 0x17fcbc17, 0xde91dd73, 0x9d85a664, 0x58b92b5d, |
| 4621 | 0x1bad504a, 0xca62e995, 0x89769282, 0x4c4a1fbb, 0x0f5e64ac, |
| 4622 | 0xc63305c8, 0x85277edf, 0x401bf3e6, 0x030f88f1, 0x070392de, |
| 4623 | 0x4417e9c9, 0x812b64f0, 0xc23f1fe7, 0x0b527e83, 0x48460594, |
| 4624 | 0x8d7a88ad, 0xce6ef3ba, 0x1fa14a65, 0x5cb53172, 0x9989bc4b, |
| 4625 | 0xda9dc75c, 0x13f0a638, 0x50e4dd2f, 0x95d85016, 0xd6cc2b01, |
| 4626 | 0x76415272, 0x35552965, 0xf069a45c, 0xb37ddf4b, 0x7a10be2f, |
| 4627 | 0x3904c538, 0xfc384801, 0xbf2c3316, 0x6ee38ac9, 0x2df7f1de, |
| 4628 | 0xe8cb7ce7, 0xabdf07f0, 0x62b26694, 0x21a61d83, 0xe49a90ba, |
| 4629 | 0xa78eebad, 0xa481635c, 0xe795184b, 0x22a99572, 0x61bdee65, |
| 4630 | 0xa8d08f01, 0xebc4f416, 0x2ef8792f, 0x6dec0238, 0xbc23bbe7, |
| 4631 | 0xff37c0f0, 0x3a0b4dc9, 0x791f36de, 0xb07257ba, 0xf3662cad, |
| 4632 | 0x365aa194, 0x754eda83, 0xd5c3a3f0, 0x96d7d8e7, 0x53eb55de, |
| 4633 | 0x10ff2ec9, 0xd9924fad, 0x9a8634ba, 0x5fbab983, 0x1caec294, |
| 4634 | 0xcd617b4b, 0x8e75005c, 0x4b498d65, 0x085df672, 0xc1309716, |
| 4635 | 0x8224ec01, 0x47186138, 0x040c1a2f, 0x4f005566, 0x0c142e71, |
| 4636 | 0xc928a348, 0x8a3cd85f, 0x4351b93b, 0x0045c22c, 0xc5794f15, |
| 4637 | 0x866d3402, 0x57a28ddd, 0x14b6f6ca, 0xd18a7bf3, 0x929e00e4, |
| 4638 | 0x5bf36180, 0x18e71a97, 0xdddb97ae, 0x9ecfecb9, 0x3e4295ca, |
| 4639 | 0x7d56eedd, 0xb86a63e4, 0xfb7e18f3, 0x32137997, 0x71070280, |
| 4640 | 0xb43b8fb9, 0xf72ff4ae, 0x26e04d71, 0x65f43666, 0xa0c8bb5f, |
| 4641 | 0xe3dcc048, 0x2ab1a12c, 0x69a5da3b, 0xac995702, 0xef8d2c15, |
| 4642 | 0xec82a4e4, 0xaf96dff3, 0x6aaa52ca, 0x29be29dd, 0xe0d348b9, |
| 4643 | 0xa3c733ae, 0x66fbbe97, 0x25efc580, 0xf4207c5f, 0xb7340748, |
| 4644 | 0x72088a71, 0x311cf166, 0xf8719002, 0xbb65eb15, 0x7e59662c, |
| 4645 | 0x3d4d1d3b, 0x9dc06448, 0xded41f5f, 0x1be89266, 0x58fce971, |
| 4646 | 0x91918815, 0xd285f302, 0x17b97e3b, 0x54ad052c, 0x8562bcf3, |
| 4647 | 0xc676c7e4, 0x034a4add, 0x405e31ca, 0x893350ae, 0xca272bb9, |
| 4648 | 0x0f1ba680, 0x4c0fdd97, 0x4803c7b8, 0x0b17bcaf, 0xce2b3196, |
| 4649 | 0x8d3f4a81, 0x44522be5, 0x074650f2, 0xc27addcb, 0x816ea6dc, |
| 4650 | 0x50a11f03, 0x13b56414, 0xd689e92d, 0x959d923a, 0x5cf0f35e, |
| 4651 | 0x1fe48849, 0xdad80570, 0x99cc7e67, 0x39410714, 0x7a557c03, |
| 4652 | 0xbf69f13a, 0xfc7d8a2d, 0x3510eb49, 0x7604905e, 0xb3381d67, |
| 4653 | 0xf02c6670, 0x21e3dfaf, 0x62f7a4b8, 0xa7cb2981, 0xe4df5296, |
| 4654 | 0x2db233f2, 0x6ea648e5, 0xab9ac5dc, 0xe88ebecb, 0xeb81363a, |
| 4655 | 0xa8954d2d, 0x6da9c014, 0x2ebdbb03, 0xe7d0da67, 0xa4c4a170, |
| 4656 | 0x61f82c49, 0x22ec575e, 0xf323ee81, 0xb0379596, 0x750b18af, |
| 4657 | 0x361f63b8, 0xff7202dc, 0xbc6679cb, 0x795af4f2, 0x3a4e8fe5, |
| 4658 | 0x9ac3f696, 0xd9d78d81, 0x1ceb00b8, 0x5fff7baf, 0x96921acb, |
| 4659 | 0xd58661dc, 0x10baece5, 0x53ae97f2, 0x82612e2d, 0xc175553a, |
| 4660 | 0x0449d803, 0x475da314, 0x8e30c270, 0xcd24b967, 0x0818345e, |
| 4661 | 0x4b0c4f49}, |
| 4662 | {0x00000000, 0x3e6bc2ef, 0x3dd0f504, 0x03bb37eb, 0x7aa0eb09, |
| 4663 | 0x44cb29e6, 0x47701e0d, 0x791bdce2, 0xf440d713, 0xca2b15fc, |
| 4664 | 0xc9902217, 0xf7fbe0f8, 0x8ee03c1a, 0xb08bfef5, 0xb330c91e, |
| 4665 | 0x8d5b0bf1, 0xe881ae27, 0xd6ea6cc8, 0xd5515b23, 0xeb3a99cc, |
| 4666 | 0x9221452e, 0xac4a87c1, 0xaff1b02a, 0x919a72c5, 0x1cc17934, |
| 4667 | 0x22aabbdb, 0x21118c30, 0x1f7a4edf, 0x6661923d, 0x580a50d2, |
| 4668 | 0x5bb16739, 0x65daa5d6, 0xd0035d4f, 0xee689fa0, 0xedd3a84b, |
| 4669 | 0xd3b86aa4, 0xaaa3b646, 0x94c874a9, 0x97734342, 0xa91881ad, |
| 4670 | 0x24438a5c, 0x1a2848b3, 0x19937f58, 0x27f8bdb7, 0x5ee36155, |
| 4671 | 0x6088a3ba, 0x63339451, 0x5d5856be, 0x3882f368, 0x06e93187, |
| 4672 | 0x0552066c, 0x3b39c483, 0x42221861, 0x7c49da8e, 0x7ff2ed65, |
| 4673 | 0x41992f8a, 0xccc2247b, 0xf2a9e694, 0xf112d17f, 0xcf791390, |
| 4674 | 0xb662cf72, 0x88090d9d, 0x8bb23a76, 0xb5d9f899, 0xa007ba9e, |
| 4675 | 0x9e6c7871, 0x9dd74f9a, 0xa3bc8d75, 0xdaa75197, 0xe4cc9378, |
| 4676 | 0xe777a493, 0xd91c667c, 0x54476d8d, 0x6a2caf62, 0x69979889, |
| 4677 | 0x57fc5a66, 0x2ee78684, 0x108c446b, 0x13377380, 0x2d5cb16f, |
| 4678 | 0x488614b9, 0x76edd656, 0x7556e1bd, 0x4b3d2352, 0x3226ffb0, |
| 4679 | 0x0c4d3d5f, 0x0ff60ab4, 0x319dc85b, 0xbcc6c3aa, 0x82ad0145, |
| 4680 | 0x811636ae, 0xbf7df441, 0xc66628a3, 0xf80dea4c, 0xfbb6dda7, |
| 4681 | 0xc5dd1f48, 0x7004e7d1, 0x4e6f253e, 0x4dd412d5, 0x73bfd03a, |
| 4682 | 0x0aa40cd8, 0x34cfce37, 0x3774f9dc, 0x091f3b33, 0x844430c2, |
| 4683 | 0xba2ff22d, 0xb994c5c6, 0x87ff0729, 0xfee4dbcb, 0xc08f1924, |
| 4684 | 0xc3342ecf, 0xfd5fec20, 0x988549f6, 0xa6ee8b19, 0xa555bcf2, |
| 4685 | 0x9b3e7e1d, 0xe225a2ff, 0xdc4e6010, 0xdff557fb, 0xe19e9514, |
| 4686 | 0x6cc59ee5, 0x52ae5c0a, 0x51156be1, 0x6f7ea90e, 0x166575ec, |
| 4687 | 0x280eb703, 0x2bb580e8, 0x15de4207, 0x010905e6, 0x3f62c709, |
| 4688 | 0x3cd9f0e2, 0x02b2320d, 0x7ba9eeef, 0x45c22c00, 0x46791beb, |
| 4689 | 0x7812d904, 0xf549d2f5, 0xcb22101a, 0xc89927f1, 0xf6f2e51e, |
| 4690 | 0x8fe939fc, 0xb182fb13, 0xb239ccf8, 0x8c520e17, 0xe988abc1, |
| 4691 | 0xd7e3692e, 0xd4585ec5, 0xea339c2a, 0x932840c8, 0xad438227, |
| 4692 | 0xaef8b5cc, 0x90937723, 0x1dc87cd2, 0x23a3be3d, 0x201889d6, |
| 4693 | 0x1e734b39, 0x676897db, 0x59035534, 0x5ab862df, 0x64d3a030, |
| 4694 | 0xd10a58a9, 0xef619a46, 0xecdaadad, 0xd2b16f42, 0xabaab3a0, |
| 4695 | 0x95c1714f, 0x967a46a4, 0xa811844b, 0x254a8fba, 0x1b214d55, |
| 4696 | 0x189a7abe, 0x26f1b851, 0x5fea64b3, 0x6181a65c, 0x623a91b7, |
| 4697 | 0x5c515358, 0x398bf68e, 0x07e03461, 0x045b038a, 0x3a30c165, |
| 4698 | 0x432b1d87, 0x7d40df68, 0x7efbe883, 0x40902a6c, 0xcdcb219d, |
| 4699 | 0xf3a0e372, 0xf01bd499, 0xce701676, 0xb76bca94, 0x8900087b, |
| 4700 | 0x8abb3f90, 0xb4d0fd7f, 0xa10ebf78, 0x9f657d97, 0x9cde4a7c, |
| 4701 | 0xa2b58893, 0xdbae5471, 0xe5c5969e, 0xe67ea175, 0xd815639a, |
| 4702 | 0x554e686b, 0x6b25aa84, 0x689e9d6f, 0x56f55f80, 0x2fee8362, |
| 4703 | 0x1185418d, 0x123e7666, 0x2c55b489, 0x498f115f, 0x77e4d3b0, |
| 4704 | 0x745fe45b, 0x4a3426b4, 0x332ffa56, 0x0d4438b9, 0x0eff0f52, |
| 4705 | 0x3094cdbd, 0xbdcfc64c, 0x83a404a3, 0x801f3348, 0xbe74f1a7, |
| 4706 | 0xc76f2d45, 0xf904efaa, 0xfabfd841, 0xc4d41aae, 0x710de237, |
| 4707 | 0x4f6620d8, 0x4cdd1733, 0x72b6d5dc, 0x0bad093e, 0x35c6cbd1, |
| 4708 | 0x367dfc3a, 0x08163ed5, 0x854d3524, 0xbb26f7cb, 0xb89dc020, |
| 4709 | 0x86f602cf, 0xffedde2d, 0xc1861cc2, 0xc23d2b29, 0xfc56e9c6, |
| 4710 | 0x998c4c10, 0xa7e78eff, 0xa45cb914, 0x9a377bfb, 0xe32ca719, |
| 4711 | 0xdd4765f6, 0xdefc521d, 0xe09790f2, 0x6dcc9b03, 0x53a759ec, |
| 4712 | 0x501c6e07, 0x6e77ace8, 0x176c700a, 0x2907b2e5, 0x2abc850e, |
| 4713 | 0x14d747e1}, |
| 4714 | {0x00000000, 0xc0df8ec1, 0xc1b96c58, 0x0166e299, 0x8273d9b0, |
| 4715 | 0x42ac5771, 0x43cab5e8, 0x83153b29, 0x45e1c3ba, 0x853e4d7b, |
| 4716 | 0x8458afe2, 0x44872123, 0xc7921a0a, 0x074d94cb, 0x062b7652, |
| 4717 | 0xc6f4f893, 0xcbc4f6ae, 0x0b1b786f, 0x0a7d9af6, 0xcaa21437, |
| 4718 | 0x49b72f1e, 0x8968a1df, 0x880e4346, 0x48d1cd87, 0x8e253514, |
| 4719 | 0x4efabbd5, 0x4f9c594c, 0x8f43d78d, 0x0c56eca4, 0xcc896265, |
| 4720 | 0xcdef80fc, 0x0d300e3d, 0xd78f9c86, 0x17501247, 0x1636f0de, |
| 4721 | 0xd6e97e1f, 0x55fc4536, 0x9523cbf7, 0x9445296e, 0x549aa7af, |
| 4722 | 0x926e5f3c, 0x52b1d1fd, 0x53d73364, 0x9308bda5, 0x101d868c, |
| 4723 | 0xd0c2084d, 0xd1a4ead4, 0x117b6415, 0x1c4b6a28, 0xdc94e4e9, |
| 4724 | 0xddf20670, 0x1d2d88b1, 0x9e38b398, 0x5ee73d59, 0x5f81dfc0, |
| 4725 | 0x9f5e5101, 0x59aaa992, 0x99752753, 0x9813c5ca, 0x58cc4b0b, |
| 4726 | 0xdbd97022, 0x1b06fee3, 0x1a601c7a, 0xdabf92bb, 0xef1948d6, |
| 4727 | 0x2fc6c617, 0x2ea0248e, 0xee7faa4f, 0x6d6a9166, 0xadb51fa7, |
| 4728 | 0xacd3fd3e, 0x6c0c73ff, 0xaaf88b6c, 0x6a2705ad, 0x6b41e734, |
| 4729 | 0xab9e69f5, 0x288b52dc, 0xe854dc1d, 0xe9323e84, 0x29edb045, |
| 4730 | 0x24ddbe78, 0xe40230b9, 0xe564d220, 0x25bb5ce1, 0xa6ae67c8, |
| 4731 | 0x6671e909, 0x67170b90, 0xa7c88551, 0x613c7dc2, 0xa1e3f303, |
| 4732 | 0xa085119a, 0x605a9f5b, 0xe34fa472, 0x23902ab3, 0x22f6c82a, |
| 4733 | 0xe22946eb, 0x3896d450, 0xf8495a91, 0xf92fb808, 0x39f036c9, |
| 4734 | 0xbae50de0, 0x7a3a8321, 0x7b5c61b8, 0xbb83ef79, 0x7d7717ea, |
| 4735 | 0xbda8992b, 0xbcce7bb2, 0x7c11f573, 0xff04ce5a, 0x3fdb409b, |
| 4736 | 0x3ebda202, 0xfe622cc3, 0xf35222fe, 0x338dac3f, 0x32eb4ea6, |
| 4737 | 0xf234c067, 0x7121fb4e, 0xb1fe758f, 0xb0989716, 0x704719d7, |
| 4738 | 0xb6b3e144, 0x766c6f85, 0x770a8d1c, 0xb7d503dd, 0x34c038f4, |
| 4739 | 0xf41fb635, 0xf57954ac, 0x35a6da6d, 0x9f35e177, 0x5fea6fb6, |
| 4740 | 0x5e8c8d2f, 0x9e5303ee, 0x1d4638c7, 0xdd99b606, 0xdcff549f, |
| 4741 | 0x1c20da5e, 0xdad422cd, 0x1a0bac0c, 0x1b6d4e95, 0xdbb2c054, |
| 4742 | 0x58a7fb7d, 0x987875bc, 0x991e9725, 0x59c119e4, 0x54f117d9, |
| 4743 | 0x942e9918, 0x95487b81, 0x5597f540, 0xd682ce69, 0x165d40a8, |
| 4744 | 0x173ba231, 0xd7e42cf0, 0x1110d463, 0xd1cf5aa2, 0xd0a9b83b, |
| 4745 | 0x107636fa, 0x93630dd3, 0x53bc8312, 0x52da618b, 0x9205ef4a, |
| 4746 | 0x48ba7df1, 0x8865f330, 0x890311a9, 0x49dc9f68, 0xcac9a441, |
| 4747 | 0x0a162a80, 0x0b70c819, 0xcbaf46d8, 0x0d5bbe4b, 0xcd84308a, |
| 4748 | 0xcce2d213, 0x0c3d5cd2, 0x8f2867fb, 0x4ff7e93a, 0x4e910ba3, |
| 4749 | 0x8e4e8562, 0x837e8b5f, 0x43a1059e, 0x42c7e707, 0x821869c6, |
| 4750 | 0x010d52ef, 0xc1d2dc2e, 0xc0b43eb7, 0x006bb076, 0xc69f48e5, |
| 4751 | 0x0640c624, 0x072624bd, 0xc7f9aa7c, 0x44ec9155, 0x84331f94, |
| 4752 | 0x8555fd0d, 0x458a73cc, 0x702ca9a1, 0xb0f32760, 0xb195c5f9, |
| 4753 | 0x714a4b38, 0xf25f7011, 0x3280fed0, 0x33e61c49, 0xf3399288, |
| 4754 | 0x35cd6a1b, 0xf512e4da, 0xf4740643, 0x34ab8882, 0xb7beb3ab, |
| 4755 | 0x77613d6a, 0x7607dff3, 0xb6d85132, 0xbbe85f0f, 0x7b37d1ce, |
| 4756 | 0x7a513357, 0xba8ebd96, 0x399b86bf, 0xf944087e, 0xf822eae7, |
| 4757 | 0x38fd6426, 0xfe099cb5, 0x3ed61274, 0x3fb0f0ed, 0xff6f7e2c, |
| 4758 | 0x7c7a4505, 0xbca5cbc4, 0xbdc3295d, 0x7d1ca79c, 0xa7a33527, |
| 4759 | 0x677cbbe6, 0x661a597f, 0xa6c5d7be, 0x25d0ec97, 0xe50f6256, |
| 4760 | 0xe46980cf, 0x24b60e0e, 0xe242f69d, 0x229d785c, 0x23fb9ac5, |
| 4761 | 0xe3241404, 0x60312f2d, 0xa0eea1ec, 0xa1884375, 0x6157cdb4, |
| 4762 | 0x6c67c389, 0xacb84d48, 0xaddeafd1, 0x6d012110, 0xee141a39, |
| 4763 | 0x2ecb94f8, 0x2fad7661, 0xef72f8a0, 0x29860033, 0xe9598ef2, |
| 4764 | 0xe83f6c6b, 0x28e0e2aa, 0xabf5d983, 0x6b2a5742, 0x6a4cb5db, |
| 4765 | 0xaa933b1a}, |
| 4766 | {0x00000000, 0x6f4ca59b, 0x9f9e3bec, 0xf0d29e77, 0x7f3b0603, |
| 4767 | 0x1077a398, 0xe0a53def, 0x8fe99874, 0xfe760c06, 0x913aa99d, |
| 4768 | 0x61e837ea, 0x0ea49271, 0x814d0a05, 0xee01af9e, 0x1ed331e9, |
| 4769 | 0x719f9472, 0xfced180c, 0x93a1bd97, 0x637323e0, 0x0c3f867b, |
| 4770 | 0x83d61e0f, 0xec9abb94, 0x1c4825e3, 0x73048078, 0x029b140a, |
| 4771 | 0x6dd7b191, 0x9d052fe6, 0xf2498a7d, 0x7da01209, 0x12ecb792, |
| 4772 | 0xe23e29e5, 0x8d728c7e, 0xf8db3118, 0x97979483, 0x67450af4, |
| 4773 | 0x0809af6f, 0x87e0371b, 0xe8ac9280, 0x187e0cf7, 0x7732a96c, |
| 4774 | 0x06ad3d1e, 0x69e19885, 0x993306f2, 0xf67fa369, 0x79963b1d, |
| 4775 | 0x16da9e86, 0xe60800f1, 0x8944a56a, 0x04362914, 0x6b7a8c8f, |
| 4776 | 0x9ba812f8, 0xf4e4b763, 0x7b0d2f17, 0x14418a8c, 0xe49314fb, |
| 4777 | 0x8bdfb160, 0xfa402512, 0x950c8089, 0x65de1efe, 0x0a92bb65, |
| 4778 | 0x857b2311, 0xea37868a, 0x1ae518fd, 0x75a9bd66, 0xf0b76330, |
| 4779 | 0x9ffbc6ab, 0x6f2958dc, 0x0065fd47, 0x8f8c6533, 0xe0c0c0a8, |
| 4780 | 0x10125edf, 0x7f5efb44, 0x0ec16f36, 0x618dcaad, 0x915f54da, |
| 4781 | 0xfe13f141, 0x71fa6935, 0x1eb6ccae, 0xee6452d9, 0x8128f742, |
| 4782 | 0x0c5a7b3c, 0x6316dea7, 0x93c440d0, 0xfc88e54b, 0x73617d3f, |
| 4783 | 0x1c2dd8a4, 0xecff46d3, 0x83b3e348, 0xf22c773a, 0x9d60d2a1, |
| 4784 | 0x6db24cd6, 0x02fee94d, 0x8d177139, 0xe25bd4a2, 0x12894ad5, |
| 4785 | 0x7dc5ef4e, 0x086c5228, 0x6720f7b3, 0x97f269c4, 0xf8becc5f, |
| 4786 | 0x7757542b, 0x181bf1b0, 0xe8c96fc7, 0x8785ca5c, 0xf61a5e2e, |
| 4787 | 0x9956fbb5, 0x698465c2, 0x06c8c059, 0x8921582d, 0xe66dfdb6, |
| 4788 | 0x16bf63c1, 0x79f3c65a, 0xf4814a24, 0x9bcdefbf, 0x6b1f71c8, |
| 4789 | 0x0453d453, 0x8bba4c27, 0xe4f6e9bc, 0x142477cb, 0x7b68d250, |
| 4790 | 0x0af74622, 0x65bbe3b9, 0x95697dce, 0xfa25d855, 0x75cc4021, |
| 4791 | 0x1a80e5ba, 0xea527bcd, 0x851ede56, 0xe06fc760, 0x8f2362fb, |
| 4792 | 0x7ff1fc8c, 0x10bd5917, 0x9f54c163, 0xf01864f8, 0x00cafa8f, |
| 4793 | 0x6f865f14, 0x1e19cb66, 0x71556efd, 0x8187f08a, 0xeecb5511, |
| 4794 | 0x6122cd65, 0x0e6e68fe, 0xfebcf689, 0x91f05312, 0x1c82df6c, |
| 4795 | 0x73ce7af7, 0x831ce480, 0xec50411b, 0x63b9d96f, 0x0cf57cf4, |
| 4796 | 0xfc27e283, 0x936b4718, 0xe2f4d36a, 0x8db876f1, 0x7d6ae886, |
| 4797 | 0x12264d1d, 0x9dcfd569, 0xf28370f2, 0x0251ee85, 0x6d1d4b1e, |
| 4798 | 0x18b4f678, 0x77f853e3, 0x872acd94, 0xe866680f, 0x678ff07b, |
| 4799 | 0x08c355e0, 0xf811cb97, 0x975d6e0c, 0xe6c2fa7e, 0x898e5fe5, |
| 4800 | 0x795cc192, 0x16106409, 0x99f9fc7d, 0xf6b559e6, 0x0667c791, |
| 4801 | 0x692b620a, 0xe459ee74, 0x8b154bef, 0x7bc7d598, 0x148b7003, |
| 4802 | 0x9b62e877, 0xf42e4dec, 0x04fcd39b, 0x6bb07600, 0x1a2fe272, |
| 4803 | 0x756347e9, 0x85b1d99e, 0xeafd7c05, 0x6514e471, 0x0a5841ea, |
| 4804 | 0xfa8adf9d, 0x95c67a06, 0x10d8a450, 0x7f9401cb, 0x8f469fbc, |
| 4805 | 0xe00a3a27, 0x6fe3a253, 0x00af07c8, 0xf07d99bf, 0x9f313c24, |
| 4806 | 0xeeaea856, 0x81e20dcd, 0x713093ba, 0x1e7c3621, 0x9195ae55, |
| 4807 | 0xfed90bce, 0x0e0b95b9, 0x61473022, 0xec35bc5c, 0x837919c7, |
| 4808 | 0x73ab87b0, 0x1ce7222b, 0x930eba5f, 0xfc421fc4, 0x0c9081b3, |
| 4809 | 0x63dc2428, 0x1243b05a, 0x7d0f15c1, 0x8ddd8bb6, 0xe2912e2d, |
| 4810 | 0x6d78b659, 0x023413c2, 0xf2e68db5, 0x9daa282e, 0xe8039548, |
| 4811 | 0x874f30d3, 0x779daea4, 0x18d10b3f, 0x9738934b, 0xf87436d0, |
| 4812 | 0x08a6a8a7, 0x67ea0d3c, 0x1675994e, 0x79393cd5, 0x89eba2a2, |
| 4813 | 0xe6a70739, 0x694e9f4d, 0x06023ad6, 0xf6d0a4a1, 0x999c013a, |
| 4814 | 0x14ee8d44, 0x7ba228df, 0x8b70b6a8, 0xe43c1333, 0x6bd58b47, |
| 4815 | 0x04992edc, 0xf44bb0ab, 0x9b071530, 0xea988142, 0x85d424d9, |
| 4816 | 0x7506baae, 0x1a4a1f35, 0x95a38741, 0xfaef22da, 0x0a3dbcad, |
| 4817 | 0x65711936}}; |
| 4818 | |
| 4819 | #endif |
| 4820 | |
| 4821 | #endif |
| 4822 | |
| 4823 | #if N == 4 |
| 4824 | |
| 4825 | #if W == 8 |
| 4826 | |
| 4827 | local const z_crc_t FAR crc_braid_table[][256] = { |
| 4828 | {0x00000000, 0xf1da05aa, 0x38c50d15, 0xc91f08bf, 0x718a1a2a, |
| 4829 | 0x80501f80, 0x494f173f, 0xb8951295, 0xe3143454, 0x12ce31fe, |
| 4830 | 0xdbd13941, 0x2a0b3ceb, 0x929e2e7e, 0x63442bd4, 0xaa5b236b, |
| 4831 | 0x5b8126c1, 0x1d596ee9, 0xec836b43, 0x259c63fc, 0xd4466656, |
| 4832 | 0x6cd374c3, 0x9d097169, 0x541679d6, 0xa5cc7c7c, 0xfe4d5abd, |
| 4833 | 0x0f975f17, 0xc68857a8, 0x37525202, 0x8fc74097, 0x7e1d453d, |
| 4834 | 0xb7024d82, 0x46d84828, 0x3ab2ddd2, 0xcb68d878, 0x0277d0c7, |
| 4835 | 0xf3add56d, 0x4b38c7f8, 0xbae2c252, 0x73fdcaed, 0x8227cf47, |
| 4836 | 0xd9a6e986, 0x287cec2c, 0xe163e493, 0x10b9e139, 0xa82cf3ac, |
| 4837 | 0x59f6f606, 0x90e9feb9, 0x6133fb13, 0x27ebb33b, 0xd631b691, |
| 4838 | 0x1f2ebe2e, 0xeef4bb84, 0x5661a911, 0xa7bbacbb, 0x6ea4a404, |
| 4839 | 0x9f7ea1ae, 0xc4ff876f, 0x352582c5, 0xfc3a8a7a, 0x0de08fd0, |
| 4840 | 0xb5759d45, 0x44af98ef, 0x8db09050, 0x7c6a95fa, 0x7565bba4, |
| 4841 | 0x84bfbe0e, 0x4da0b6b1, 0xbc7ab31b, 0x04efa18e, 0xf535a424, |
| 4842 | 0x3c2aac9b, 0xcdf0a931, 0x96718ff0, 0x67ab8a5a, 0xaeb482e5, |
| 4843 | 0x5f6e874f, 0xe7fb95da, 0x16219070, 0xdf3e98cf, 0x2ee49d65, |
| 4844 | 0x683cd54d, 0x99e6d0e7, 0x50f9d858, 0xa123ddf2, 0x19b6cf67, |
| 4845 | 0xe86ccacd, 0x2173c272, 0xd0a9c7d8, 0x8b28e119, 0x7af2e4b3, |
| 4846 | 0xb3edec0c, 0x4237e9a6, 0xfaa2fb33, 0x0b78fe99, 0xc267f626, |
| 4847 | 0x33bdf38c, 0x4fd76676, 0xbe0d63dc, 0x77126b63, 0x86c86ec9, |
| 4848 | 0x3e5d7c5c, 0xcf8779f6, 0x06987149, 0xf74274e3, 0xacc35222, |
| 4849 | 0x5d195788, 0x94065f37, 0x65dc5a9d, 0xdd494808, 0x2c934da2, |
| 4850 | 0xe58c451d, 0x145640b7, 0x528e089f, 0xa3540d35, 0x6a4b058a, |
| 4851 | 0x9b910020, 0x230412b5, 0xd2de171f, 0x1bc11fa0, 0xea1b1a0a, |
| 4852 | 0xb19a3ccb, 0x40403961, 0x895f31de, 0x78853474, 0xc01026e1, |
| 4853 | 0x31ca234b, 0xf8d52bf4, 0x090f2e5e, 0xeacb7748, 0x1b1172e2, |
| 4854 | 0xd20e7a5d, 0x23d47ff7, 0x9b416d62, 0x6a9b68c8, 0xa3846077, |
| 4855 | 0x525e65dd, 0x09df431c, 0xf80546b6, 0x311a4e09, 0xc0c04ba3, |
| 4856 | 0x78555936, 0x898f5c9c, 0x40905423, 0xb14a5189, 0xf79219a1, |
| 4857 | 0x06481c0b, 0xcf5714b4, 0x3e8d111e, 0x8618038b, 0x77c20621, |
| 4858 | 0xbedd0e9e, 0x4f070b34, 0x14862df5, 0xe55c285f, 0x2c4320e0, |
| 4859 | 0xdd99254a, 0x650c37df, 0x94d63275, 0x5dc93aca, 0xac133f60, |
| 4860 | 0xd079aa9a, 0x21a3af30, 0xe8bca78f, 0x1966a225, 0xa1f3b0b0, |
| 4861 | 0x5029b51a, 0x9936bda5, 0x68ecb80f, 0x336d9ece, 0xc2b79b64, |
| 4862 | 0x0ba893db, 0xfa729671, 0x42e784e4, 0xb33d814e, 0x7a2289f1, |
| 4863 | 0x8bf88c5b, 0xcd20c473, 0x3cfac1d9, 0xf5e5c966, 0x043fcccc, |
| 4864 | 0xbcaade59, 0x4d70dbf3, 0x846fd34c, 0x75b5d6e6, 0x2e34f027, |
| 4865 | 0xdfeef58d, 0x16f1fd32, 0xe72bf898, 0x5fbeea0d, 0xae64efa7, |
| 4866 | 0x677be718, 0x96a1e2b2, 0x9faeccec, 0x6e74c946, 0xa76bc1f9, |
| 4867 | 0x56b1c453, 0xee24d6c6, 0x1ffed36c, 0xd6e1dbd3, 0x273bde79, |
| 4868 | 0x7cbaf8b8, 0x8d60fd12, 0x447ff5ad, 0xb5a5f007, 0x0d30e292, |
| 4869 | 0xfceae738, 0x35f5ef87, 0xc42fea2d, 0x82f7a205, 0x732da7af, |
| 4870 | 0xba32af10, 0x4be8aaba, 0xf37db82f, 0x02a7bd85, 0xcbb8b53a, |
| 4871 | 0x3a62b090, 0x61e39651, 0x903993fb, 0x59269b44, 0xa8fc9eee, |
| 4872 | 0x10698c7b, 0xe1b389d1, 0x28ac816e, 0xd97684c4, 0xa51c113e, |
| 4873 | 0x54c61494, 0x9dd91c2b, 0x6c031981, 0xd4960b14, 0x254c0ebe, |
| 4874 | 0xec530601, 0x1d8903ab, 0x4608256a, 0xb7d220c0, 0x7ecd287f, |
| 4875 | 0x8f172dd5, 0x37823f40, 0xc6583aea, 0x0f473255, 0xfe9d37ff, |
| 4876 | 0xb8457fd7, 0x499f7a7d, 0x808072c2, 0x715a7768, 0xc9cf65fd, |
| 4877 | 0x38156057, 0xf10a68e8, 0x00d06d42, 0x5b514b83, 0xaa8b4e29, |
| 4878 | 0x63944696, 0x924e433c, 0x2adb51a9, 0xdb015403, 0x121e5cbc, |
| 4879 | 0xe3c45916}, |
| 4880 | {0x00000000, 0x0ee7e8d1, 0x1dcfd1a2, 0x13283973, 0x3b9fa344, |
| 4881 | 0x35784b95, 0x265072e6, 0x28b79a37, 0x773f4688, 0x79d8ae59, |
| 4882 | 0x6af0972a, 0x64177ffb, 0x4ca0e5cc, 0x42470d1d, 0x516f346e, |
| 4883 | 0x5f88dcbf, 0xee7e8d10, 0xe09965c1, 0xf3b15cb2, 0xfd56b463, |
| 4884 | 0xd5e12e54, 0xdb06c685, 0xc82efff6, 0xc6c91727, 0x9941cb98, |
| 4885 | 0x97a62349, 0x848e1a3a, 0x8a69f2eb, 0xa2de68dc, 0xac39800d, |
| 4886 | 0xbf11b97e, 0xb1f651af, 0x078c1c61, 0x096bf4b0, 0x1a43cdc3, |
| 4887 | 0x14a42512, 0x3c13bf25, 0x32f457f4, 0x21dc6e87, 0x2f3b8656, |
| 4888 | 0x70b35ae9, 0x7e54b238, 0x6d7c8b4b, 0x639b639a, 0x4b2cf9ad, |
| 4889 | 0x45cb117c, 0x56e3280f, 0x5804c0de, 0xe9f29171, 0xe71579a0, |
| 4890 | 0xf43d40d3, 0xfadaa802, 0xd26d3235, 0xdc8adae4, 0xcfa2e397, |
| 4891 | 0xc1450b46, 0x9ecdd7f9, 0x902a3f28, 0x8302065b, 0x8de5ee8a, |
| 4892 | 0xa55274bd, 0xabb59c6c, 0xb89da51f, 0xb67a4dce, 0x0f1838c2, |
| 4893 | 0x01ffd013, 0x12d7e960, 0x1c3001b1, 0x34879b86, 0x3a607357, |
| 4894 | 0x29484a24, 0x27afa2f5, 0x78277e4a, 0x76c0969b, 0x65e8afe8, |
| 4895 | 0x6b0f4739, 0x43b8dd0e, 0x4d5f35df, 0x5e770cac, 0x5090e47d, |
| 4896 | 0xe166b5d2, 0xef815d03, 0xfca96470, 0xf24e8ca1, 0xdaf91696, |
| 4897 | 0xd41efe47, 0xc736c734, 0xc9d12fe5, 0x9659f35a, 0x98be1b8b, |
| 4898 | 0x8b9622f8, 0x8571ca29, 0xadc6501e, 0xa321b8cf, 0xb00981bc, |
| 4899 | 0xbeee696d, 0x089424a3, 0x0673cc72, 0x155bf501, 0x1bbc1dd0, |
| 4900 | 0x330b87e7, 0x3dec6f36, 0x2ec45645, 0x2023be94, 0x7fab622b, |
| 4901 | 0x714c8afa, 0x6264b389, 0x6c835b58, 0x4434c16f, 0x4ad329be, |
| 4902 | 0x59fb10cd, 0x571cf81c, 0xe6eaa9b3, 0xe80d4162, 0xfb257811, |
| 4903 | 0xf5c290c0, 0xdd750af7, 0xd392e226, 0xc0badb55, 0xce5d3384, |
| 4904 | 0x91d5ef3b, 0x9f3207ea, 0x8c1a3e99, 0x82fdd648, 0xaa4a4c7f, |
| 4905 | 0xa4ada4ae, 0xb7859ddd, 0xb962750c, 0x1e307184, 0x10d79955, |
| 4906 | 0x03ffa026, 0x0d1848f7, 0x25afd2c0, 0x2b483a11, 0x38600362, |
| 4907 | 0x3687ebb3, 0x690f370c, 0x67e8dfdd, 0x74c0e6ae, 0x7a270e7f, |
| 4908 | 0x52909448, 0x5c777c99, 0x4f5f45ea, 0x41b8ad3b, 0xf04efc94, |
| 4909 | 0xfea91445, 0xed812d36, 0xe366c5e7, 0xcbd15fd0, 0xc536b701, |
| 4910 | 0xd61e8e72, 0xd8f966a3, 0x8771ba1c, 0x899652cd, 0x9abe6bbe, |
| 4911 | 0x9459836f, 0xbcee1958, 0xb209f189, 0xa121c8fa, 0xafc6202b, |
| 4912 | 0x19bc6de5, 0x175b8534, 0x0473bc47, 0x0a945496, 0x2223cea1, |
| 4913 | 0x2cc42670, 0x3fec1f03, 0x310bf7d2, 0x6e832b6d, 0x6064c3bc, |
| 4914 | 0x734cfacf, 0x7dab121e, 0x551c8829, 0x5bfb60f8, 0x48d3598b, |
| 4915 | 0x4634b15a, 0xf7c2e0f5, 0xf9250824, 0xea0d3157, 0xe4ead986, |
| 4916 | 0xcc5d43b1, 0xc2baab60, 0xd1929213, 0xdf757ac2, 0x80fda67d, |
| 4917 | 0x8e1a4eac, 0x9d3277df, 0x93d59f0e, 0xbb620539, 0xb585ede8, |
| 4918 | 0xa6add49b, 0xa84a3c4a, 0x11284946, 0x1fcfa197, 0x0ce798e4, |
| 4919 | 0x02007035, 0x2ab7ea02, 0x245002d3, 0x37783ba0, 0x399fd371, |
| 4920 | 0x66170fce, 0x68f0e71f, 0x7bd8de6c, 0x753f36bd, 0x5d88ac8a, |
| 4921 | 0x536f445b, 0x40477d28, 0x4ea095f9, 0xff56c456, 0xf1b12c87, |
| 4922 | 0xe29915f4, 0xec7efd25, 0xc4c96712, 0xca2e8fc3, 0xd906b6b0, |
| 4923 | 0xd7e15e61, 0x886982de, 0x868e6a0f, 0x95a6537c, 0x9b41bbad, |
| 4924 | 0xb3f6219a, 0xbd11c94b, 0xae39f038, 0xa0de18e9, 0x16a45527, |
| 4925 | 0x1843bdf6, 0x0b6b8485, 0x058c6c54, 0x2d3bf663, 0x23dc1eb2, |
| 4926 | 0x30f427c1, 0x3e13cf10, 0x619b13af, 0x6f7cfb7e, 0x7c54c20d, |
| 4927 | 0x72b32adc, 0x5a04b0eb, 0x54e3583a, 0x47cb6149, 0x492c8998, |
| 4928 | 0xf8dad837, 0xf63d30e6, 0xe5150995, 0xebf2e144, 0xc3457b73, |
| 4929 | 0xcda293a2, 0xde8aaad1, 0xd06d4200, 0x8fe59ebf, 0x8102766e, |
| 4930 | 0x922a4f1d, 0x9ccda7cc, 0xb47a3dfb, 0xba9dd52a, 0xa9b5ec59, |
| 4931 | 0xa7520488}, |
| 4932 | {0x00000000, 0x3c60e308, 0x78c1c610, 0x44a12518, 0xf1838c20, |
| 4933 | 0xcde36f28, 0x89424a30, 0xb522a938, 0x38761e01, 0x0416fd09, |
| 4934 | 0x40b7d811, 0x7cd73b19, 0xc9f59221, 0xf5957129, 0xb1345431, |
| 4935 | 0x8d54b739, 0x70ec3c02, 0x4c8cdf0a, 0x082dfa12, 0x344d191a, |
| 4936 | 0x816fb022, 0xbd0f532a, 0xf9ae7632, 0xc5ce953a, 0x489a2203, |
| 4937 | 0x74fac10b, 0x305be413, 0x0c3b071b, 0xb919ae23, 0x85794d2b, |
| 4938 | 0xc1d86833, 0xfdb88b3b, 0xe1d87804, 0xddb89b0c, 0x9919be14, |
| 4939 | 0xa5795d1c, 0x105bf424, 0x2c3b172c, 0x689a3234, 0x54fad13c, |
| 4940 | 0xd9ae6605, 0xe5ce850d, 0xa16fa015, 0x9d0f431d, 0x282dea25, |
| 4941 | 0x144d092d, 0x50ec2c35, 0x6c8ccf3d, 0x91344406, 0xad54a70e, |
| 4942 | 0xe9f58216, 0xd595611e, 0x60b7c826, 0x5cd72b2e, 0x18760e36, |
| 4943 | 0x2416ed3e, 0xa9425a07, 0x9522b90f, 0xd1839c17, 0xede37f1f, |
| 4944 | 0x58c1d627, 0x64a1352f, 0x20001037, 0x1c60f33f, 0x18c1f649, |
| 4945 | 0x24a11541, 0x60003059, 0x5c60d351, 0xe9427a69, 0xd5229961, |
| 4946 | 0x9183bc79, 0xade35f71, 0x20b7e848, 0x1cd70b40, 0x58762e58, |
| 4947 | 0x6416cd50, 0xd1346468, 0xed548760, 0xa9f5a278, 0x95954170, |
| 4948 | 0x682dca4b, 0x544d2943, 0x10ec0c5b, 0x2c8cef53, 0x99ae466b, |
| 4949 | 0xa5cea563, 0xe16f807b, 0xdd0f6373, 0x505bd44a, 0x6c3b3742, |
| 4950 | 0x289a125a, 0x14faf152, 0xa1d8586a, 0x9db8bb62, 0xd9199e7a, |
| 4951 | 0xe5797d72, 0xf9198e4d, 0xc5796d45, 0x81d8485d, 0xbdb8ab55, |
| 4952 | 0x089a026d, 0x34fae165, 0x705bc47d, 0x4c3b2775, 0xc16f904c, |
| 4953 | 0xfd0f7344, 0xb9ae565c, 0x85ceb554, 0x30ec1c6c, 0x0c8cff64, |
| 4954 | 0x482dda7c, 0x744d3974, 0x89f5b24f, 0xb5955147, 0xf134745f, |
| 4955 | 0xcd549757, 0x78763e6f, 0x4416dd67, 0x00b7f87f, 0x3cd71b77, |
| 4956 | 0xb183ac4e, 0x8de34f46, 0xc9426a5e, 0xf5228956, 0x4000206e, |
| 4957 | 0x7c60c366, 0x38c1e67e, 0x04a10576, 0x3183ec92, 0x0de30f9a, |
| 4958 | 0x49422a82, 0x7522c98a, 0xc00060b2, 0xfc6083ba, 0xb8c1a6a2, |
| 4959 | 0x84a145aa, 0x09f5f293, 0x3595119b, 0x71343483, 0x4d54d78b, |
| 4960 | 0xf8767eb3, 0xc4169dbb, 0x80b7b8a3, 0xbcd75bab, 0x416fd090, |
| 4961 | 0x7d0f3398, 0x39ae1680, 0x05cef588, 0xb0ec5cb0, 0x8c8cbfb8, |
| 4962 | 0xc82d9aa0, 0xf44d79a8, 0x7919ce91, 0x45792d99, 0x01d80881, |
| 4963 | 0x3db8eb89, 0x889a42b1, 0xb4faa1b9, 0xf05b84a1, 0xcc3b67a9, |
| 4964 | 0xd05b9496, 0xec3b779e, 0xa89a5286, 0x94fab18e, 0x21d818b6, |
| 4965 | 0x1db8fbbe, 0x5919dea6, 0x65793dae, 0xe82d8a97, 0xd44d699f, |
| 4966 | 0x90ec4c87, 0xac8caf8f, 0x19ae06b7, 0x25cee5bf, 0x616fc0a7, |
| 4967 | 0x5d0f23af, 0xa0b7a894, 0x9cd74b9c, 0xd8766e84, 0xe4168d8c, |
| 4968 | 0x513424b4, 0x6d54c7bc, 0x29f5e2a4, 0x159501ac, 0x98c1b695, |
| 4969 | 0xa4a1559d, 0xe0007085, 0xdc60938d, 0x69423ab5, 0x5522d9bd, |
| 4970 | 0x1183fca5, 0x2de31fad, 0x29421adb, 0x1522f9d3, 0x5183dccb, |
| 4971 | 0x6de33fc3, 0xd8c196fb, 0xe4a175f3, 0xa00050eb, 0x9c60b3e3, |
| 4972 | 0x113404da, 0x2d54e7d2, 0x69f5c2ca, 0x559521c2, 0xe0b788fa, |
| 4973 | 0xdcd76bf2, 0x98764eea, 0xa416ade2, 0x59ae26d9, 0x65cec5d1, |
| 4974 | 0x216fe0c9, 0x1d0f03c1, 0xa82daaf9, 0x944d49f1, 0xd0ec6ce9, |
| 4975 | 0xec8c8fe1, 0x61d838d8, 0x5db8dbd0, 0x1919fec8, 0x25791dc0, |
| 4976 | 0x905bb4f8, 0xac3b57f0, 0xe89a72e8, 0xd4fa91e0, 0xc89a62df, |
| 4977 | 0xf4fa81d7, 0xb05ba4cf, 0x8c3b47c7, 0x3919eeff, 0x05790df7, |
| 4978 | 0x41d828ef, 0x7db8cbe7, 0xf0ec7cde, 0xcc8c9fd6, 0x882dbace, |
| 4979 | 0xb44d59c6, 0x016ff0fe, 0x3d0f13f6, 0x79ae36ee, 0x45ced5e6, |
| 4980 | 0xb8765edd, 0x8416bdd5, 0xc0b798cd, 0xfcd77bc5, 0x49f5d2fd, |
| 4981 | 0x759531f5, 0x313414ed, 0x0d54f7e5, 0x800040dc, 0xbc60a3d4, |
| 4982 | 0xf8c186cc, 0xc4a165c4, 0x7183ccfc, 0x4de32ff4, 0x09420aec, |
| 4983 | 0x3522e9e4}, |
| 4984 | {0x00000000, 0x6307d924, 0xc60fb248, 0xa5086b6c, 0x576e62d1, |
| 4985 | 0x3469bbf5, 0x9161d099, 0xf26609bd, 0xaedcc5a2, 0xcddb1c86, |
| 4986 | 0x68d377ea, 0x0bd4aece, 0xf9b2a773, 0x9ab57e57, 0x3fbd153b, |
| 4987 | 0x5cbacc1f, 0x86c88d05, 0xe5cf5421, 0x40c73f4d, 0x23c0e669, |
| 4988 | 0xd1a6efd4, 0xb2a136f0, 0x17a95d9c, 0x74ae84b8, 0x281448a7, |
| 4989 | 0x4b139183, 0xee1bfaef, 0x8d1c23cb, 0x7f7a2a76, 0x1c7df352, |
| 4990 | 0xb975983e, 0xda72411a, 0xd6e01c4b, 0xb5e7c56f, 0x10efae03, |
| 4991 | 0x73e87727, 0x818e7e9a, 0xe289a7be, 0x4781ccd2, 0x248615f6, |
| 4992 | 0x783cd9e9, 0x1b3b00cd, 0xbe336ba1, 0xdd34b285, 0x2f52bb38, |
| 4993 | 0x4c55621c, 0xe95d0970, 0x8a5ad054, 0x5028914e, 0x332f486a, |
| 4994 | 0x96272306, 0xf520fa22, 0x0746f39f, 0x64412abb, 0xc14941d7, |
| 4995 | 0xa24e98f3, 0xfef454ec, 0x9df38dc8, 0x38fbe6a4, 0x5bfc3f80, |
| 4996 | 0xa99a363d, 0xca9def19, 0x6f958475, 0x0c925d51, 0x76b13ed7, |
| 4997 | 0x15b6e7f3, 0xb0be8c9f, 0xd3b955bb, 0x21df5c06, 0x42d88522, |
| 4998 | 0xe7d0ee4e, 0x84d7376a, 0xd86dfb75, 0xbb6a2251, 0x1e62493d, |
| 4999 | 0x7d659019, 0x8f0399a4, 0xec044080, 0x490c2bec, 0x2a0bf2c8, |
| 5000 | 0xf079b3d2, 0x937e6af6, 0x3676019a, 0x5571d8be, 0xa717d103, |
| 5001 | 0xc4100827, 0x6118634b, 0x021fba6f, 0x5ea57670, 0x3da2af54, |
| 5002 | 0x98aac438, 0xfbad1d1c, 0x09cb14a1, 0x6acccd85, 0xcfc4a6e9, |
| 5003 | 0xacc37fcd, 0xa051229c, 0xc356fbb8, 0x665e90d4, 0x055949f0, |
| 5004 | 0xf73f404d, 0x94389969, 0x3130f205, 0x52372b21, 0x0e8de73e, |
| 5005 | 0x6d8a3e1a, 0xc8825576, 0xab858c52, 0x59e385ef, 0x3ae45ccb, |
| 5006 | 0x9fec37a7, 0xfcebee83, 0x2699af99, 0x459e76bd, 0xe0961dd1, |
| 5007 | 0x8391c4f5, 0x71f7cd48, 0x12f0146c, 0xb7f87f00, 0xd4ffa624, |
| 5008 | 0x88456a3b, 0xeb42b31f, 0x4e4ad873, 0x2d4d0157, 0xdf2b08ea, |
| 5009 | 0xbc2cd1ce, 0x1924baa2, 0x7a236386, 0xed627dae, 0x8e65a48a, |
| 5010 | 0x2b6dcfe6, 0x486a16c2, 0xba0c1f7f, 0xd90bc65b, 0x7c03ad37, |
| 5011 | 0x1f047413, 0x43beb80c, 0x20b96128, 0x85b10a44, 0xe6b6d360, |
| 5012 | 0x14d0dadd, 0x77d703f9, 0xd2df6895, 0xb1d8b1b1, 0x6baaf0ab, |
| 5013 | 0x08ad298f, 0xada542e3, 0xcea29bc7, 0x3cc4927a, 0x5fc34b5e, |
| 5014 | 0xfacb2032, 0x99ccf916, 0xc5763509, 0xa671ec2d, 0x03798741, |
| 5015 | 0x607e5e65, 0x921857d8, 0xf11f8efc, 0x5417e590, 0x37103cb4, |
| 5016 | 0x3b8261e5, 0x5885b8c1, 0xfd8dd3ad, 0x9e8a0a89, 0x6cec0334, |
| 5017 | 0x0febda10, 0xaae3b17c, 0xc9e46858, 0x955ea447, 0xf6597d63, |
| 5018 | 0x5351160f, 0x3056cf2b, 0xc230c696, 0xa1371fb2, 0x043f74de, |
| 5019 | 0x6738adfa, 0xbd4aece0, 0xde4d35c4, 0x7b455ea8, 0x1842878c, |
| 5020 | 0xea248e31, 0x89235715, 0x2c2b3c79, 0x4f2ce55d, 0x13962942, |
| 5021 | 0x7091f066, 0xd5999b0a, 0xb69e422e, 0x44f84b93, 0x27ff92b7, |
| 5022 | 0x82f7f9db, 0xe1f020ff, 0x9bd34379, 0xf8d49a5d, 0x5ddcf131, |
| 5023 | 0x3edb2815, 0xccbd21a8, 0xafbaf88c, 0x0ab293e0, 0x69b54ac4, |
| 5024 | 0x350f86db, 0x56085fff, 0xf3003493, 0x9007edb7, 0x6261e40a, |
| 5025 | 0x01663d2e, 0xa46e5642, 0xc7698f66, 0x1d1bce7c, 0x7e1c1758, |
| 5026 | 0xdb147c34, 0xb813a510, 0x4a75acad, 0x29727589, 0x8c7a1ee5, |
| 5027 | 0xef7dc7c1, 0xb3c70bde, 0xd0c0d2fa, 0x75c8b996, 0x16cf60b2, |
| 5028 | 0xe4a9690f, 0x87aeb02b, 0x22a6db47, 0x41a10263, 0x4d335f32, |
| 5029 | 0x2e348616, 0x8b3ced7a, 0xe83b345e, 0x1a5d3de3, 0x795ae4c7, |
| 5030 | 0xdc528fab, 0xbf55568f, 0xe3ef9a90, 0x80e843b4, 0x25e028d8, |
| 5031 | 0x46e7f1fc, 0xb481f841, 0xd7862165, 0x728e4a09, 0x1189932d, |
| 5032 | 0xcbfbd237, 0xa8fc0b13, 0x0df4607f, 0x6ef3b95b, 0x9c95b0e6, |
| 5033 | 0xff9269c2, 0x5a9a02ae, 0x399ddb8a, 0x65271795, 0x0620ceb1, |
| 5034 | 0xa328a5dd, 0xc02f7cf9, 0x32497544, 0x514eac60, 0xf446c70c, |
| 5035 | 0x97411e28}, |
| 5036 | {0x00000000, 0x01b5fd1d, 0x036bfa3a, 0x02de0727, 0x06d7f474, |
| 5037 | 0x07620969, 0x05bc0e4e, 0x0409f353, 0x0dafe8e8, 0x0c1a15f5, |
| 5038 | 0x0ec412d2, 0x0f71efcf, 0x0b781c9c, 0x0acde181, 0x0813e6a6, |
| 5039 | 0x09a61bbb, 0x1b5fd1d0, 0x1aea2ccd, 0x18342bea, 0x1981d6f7, |
| 5040 | 0x1d8825a4, 0x1c3dd8b9, 0x1ee3df9e, 0x1f562283, 0x16f03938, |
| 5041 | 0x1745c425, 0x159bc302, 0x142e3e1f, 0x1027cd4c, 0x11923051, |
| 5042 | 0x134c3776, 0x12f9ca6b, 0x36bfa3a0, 0x370a5ebd, 0x35d4599a, |
| 5043 | 0x3461a487, 0x306857d4, 0x31ddaac9, 0x3303adee, 0x32b650f3, |
| 5044 | 0x3b104b48, 0x3aa5b655, 0x387bb172, 0x39ce4c6f, 0x3dc7bf3c, |
| 5045 | 0x3c724221, 0x3eac4506, 0x3f19b81b, 0x2de07270, 0x2c558f6d, |
| 5046 | 0x2e8b884a, 0x2f3e7557, 0x2b378604, 0x2a827b19, 0x285c7c3e, |
| 5047 | 0x29e98123, 0x204f9a98, 0x21fa6785, 0x232460a2, 0x22919dbf, |
| 5048 | 0x26986eec, 0x272d93f1, 0x25f394d6, 0x244669cb, 0x6d7f4740, |
| 5049 | 0x6ccaba5d, 0x6e14bd7a, 0x6fa14067, 0x6ba8b334, 0x6a1d4e29, |
| 5050 | 0x68c3490e, 0x6976b413, 0x60d0afa8, 0x616552b5, 0x63bb5592, |
| 5051 | 0x620ea88f, 0x66075bdc, 0x67b2a6c1, 0x656ca1e6, 0x64d95cfb, |
| 5052 | 0x76209690, 0x77956b8d, 0x754b6caa, 0x74fe91b7, 0x70f762e4, |
| 5053 | 0x71429ff9, 0x739c98de, 0x722965c3, 0x7b8f7e78, 0x7a3a8365, |
| 5054 | 0x78e48442, 0x7951795f, 0x7d588a0c, 0x7ced7711, 0x7e337036, |
| 5055 | 0x7f868d2b, 0x5bc0e4e0, 0x5a7519fd, 0x58ab1eda, 0x591ee3c7, |
| 5056 | 0x5d171094, 0x5ca2ed89, 0x5e7ceaae, 0x5fc917b3, 0x566f0c08, |
| 5057 | 0x57daf115, 0x5504f632, 0x54b10b2f, 0x50b8f87c, 0x510d0561, |
| 5058 | 0x53d30246, 0x5266ff5b, 0x409f3530, 0x412ac82d, 0x43f4cf0a, |
| 5059 | 0x42413217, 0x4648c144, 0x47fd3c59, 0x45233b7e, 0x4496c663, |
| 5060 | 0x4d30ddd8, 0x4c8520c5, 0x4e5b27e2, 0x4feedaff, 0x4be729ac, |
| 5061 | 0x4a52d4b1, 0x488cd396, 0x49392e8b, 0xdafe8e80, 0xdb4b739d, |
| 5062 | 0xd99574ba, 0xd82089a7, 0xdc297af4, 0xdd9c87e9, 0xdf4280ce, |
| 5063 | 0xdef77dd3, 0xd7516668, 0xd6e49b75, 0xd43a9c52, 0xd58f614f, |
| 5064 | 0xd186921c, 0xd0336f01, 0xd2ed6826, 0xd358953b, 0xc1a15f50, |
| 5065 | 0xc014a24d, 0xc2caa56a, 0xc37f5877, 0xc776ab24, 0xc6c35639, |
| 5066 | 0xc41d511e, 0xc5a8ac03, 0xcc0eb7b8, 0xcdbb4aa5, 0xcf654d82, |
| 5067 | 0xced0b09f, 0xcad943cc, 0xcb6cbed1, 0xc9b2b9f6, 0xc80744eb, |
| 5068 | 0xec412d20, 0xedf4d03d, 0xef2ad71a, 0xee9f2a07, 0xea96d954, |
| 5069 | 0xeb232449, 0xe9fd236e, 0xe848de73, 0xe1eec5c8, 0xe05b38d5, |
| 5070 | 0xe2853ff2, 0xe330c2ef, 0xe73931bc, 0xe68ccca1, 0xe452cb86, |
| 5071 | 0xe5e7369b, 0xf71efcf0, 0xf6ab01ed, 0xf47506ca, 0xf5c0fbd7, |
| 5072 | 0xf1c90884, 0xf07cf599, 0xf2a2f2be, 0xf3170fa3, 0xfab11418, |
| 5073 | 0xfb04e905, 0xf9daee22, 0xf86f133f, 0xfc66e06c, 0xfdd31d71, |
| 5074 | 0xff0d1a56, 0xfeb8e74b, 0xb781c9c0, 0xb63434dd, 0xb4ea33fa, |
| 5075 | 0xb55fcee7, 0xb1563db4, 0xb0e3c0a9, 0xb23dc78e, 0xb3883a93, |
| 5076 | 0xba2e2128, 0xbb9bdc35, 0xb945db12, 0xb8f0260f, 0xbcf9d55c, |
| 5077 | 0xbd4c2841, 0xbf922f66, 0xbe27d27b, 0xacde1810, 0xad6be50d, |
| 5078 | 0xafb5e22a, 0xae001f37, 0xaa09ec64, 0xabbc1179, 0xa962165e, |
| 5079 | 0xa8d7eb43, 0xa171f0f8, 0xa0c40de5, 0xa21a0ac2, 0xa3aff7df, |
| 5080 | 0xa7a6048c, 0xa613f991, 0xa4cdfeb6, 0xa57803ab, 0x813e6a60, |
| 5081 | 0x808b977d, 0x8255905a, 0x83e06d47, 0x87e99e14, 0x865c6309, |
| 5082 | 0x8482642e, 0x85379933, 0x8c918288, 0x8d247f95, 0x8ffa78b2, |
| 5083 | 0x8e4f85af, 0x8a4676fc, 0x8bf38be1, 0x892d8cc6, 0x889871db, |
| 5084 | 0x9a61bbb0, 0x9bd446ad, 0x990a418a, 0x98bfbc97, 0x9cb64fc4, |
| 5085 | 0x9d03b2d9, 0x9fddb5fe, 0x9e6848e3, 0x97ce5358, 0x967bae45, |
| 5086 | 0x94a5a962, 0x9510547f, 0x9119a72c, 0x90ac5a31, 0x92725d16, |
| 5087 | 0x93c7a00b}, |
| 5088 | {0x00000000, 0x6e8c1b41, 0xdd183682, 0xb3942dc3, 0x61416b45, |
| 5089 | 0x0fcd7004, 0xbc595dc7, 0xd2d54686, 0xc282d68a, 0xac0ecdcb, |
| 5090 | 0x1f9ae008, 0x7116fb49, 0xa3c3bdcf, 0xcd4fa68e, 0x7edb8b4d, |
| 5091 | 0x1057900c, 0x5e74ab55, 0x30f8b014, 0x836c9dd7, 0xede08696, |
| 5092 | 0x3f35c010, 0x51b9db51, 0xe22df692, 0x8ca1edd3, 0x9cf67ddf, |
| 5093 | 0xf27a669e, 0x41ee4b5d, 0x2f62501c, 0xfdb7169a, 0x933b0ddb, |
| 5094 | 0x20af2018, 0x4e233b59, 0xbce956aa, 0xd2654deb, 0x61f16028, |
| 5095 | 0x0f7d7b69, 0xdda83def, 0xb32426ae, 0x00b00b6d, 0x6e3c102c, |
| 5096 | 0x7e6b8020, 0x10e79b61, 0xa373b6a2, 0xcdffade3, 0x1f2aeb65, |
| 5097 | 0x71a6f024, 0xc232dde7, 0xacbec6a6, 0xe29dfdff, 0x8c11e6be, |
| 5098 | 0x3f85cb7d, 0x5109d03c, 0x83dc96ba, 0xed508dfb, 0x5ec4a038, |
| 5099 | 0x3048bb79, 0x201f2b75, 0x4e933034, 0xfd071df7, 0x938b06b6, |
| 5100 | 0x415e4030, 0x2fd25b71, 0x9c4676b2, 0xf2ca6df3, 0xa2a3ab15, |
| 5101 | 0xcc2fb054, 0x7fbb9d97, 0x113786d6, 0xc3e2c050, 0xad6edb11, |
| 5102 | 0x1efaf6d2, 0x7076ed93, 0x60217d9f, 0x0ead66de, 0xbd394b1d, |
| 5103 | 0xd3b5505c, 0x016016da, 0x6fec0d9b, 0xdc782058, 0xb2f43b19, |
| 5104 | 0xfcd70040, 0x925b1b01, 0x21cf36c2, 0x4f432d83, 0x9d966b05, |
| 5105 | 0xf31a7044, 0x408e5d87, 0x2e0246c6, 0x3e55d6ca, 0x50d9cd8b, |
| 5106 | 0xe34de048, 0x8dc1fb09, 0x5f14bd8f, 0x3198a6ce, 0x820c8b0d, |
| 5107 | 0xec80904c, 0x1e4afdbf, 0x70c6e6fe, 0xc352cb3d, 0xadded07c, |
| 5108 | 0x7f0b96fa, 0x11878dbb, 0xa213a078, 0xcc9fbb39, 0xdcc82b35, |
| 5109 | 0xb2443074, 0x01d01db7, 0x6f5c06f6, 0xbd894070, 0xd3055b31, |
| 5110 | 0x609176f2, 0x0e1d6db3, 0x403e56ea, 0x2eb24dab, 0x9d266068, |
| 5111 | 0xf3aa7b29, 0x217f3daf, 0x4ff326ee, 0xfc670b2d, 0x92eb106c, |
| 5112 | 0x82bc8060, 0xec309b21, 0x5fa4b6e2, 0x3128ada3, 0xe3fdeb25, |
| 5113 | 0x8d71f064, 0x3ee5dda7, 0x5069c6e6, 0x9e36506b, 0xf0ba4b2a, |
| 5114 | 0x432e66e9, 0x2da27da8, 0xff773b2e, 0x91fb206f, 0x226f0dac, |
| 5115 | 0x4ce316ed, 0x5cb486e1, 0x32389da0, 0x81acb063, 0xef20ab22, |
| 5116 | 0x3df5eda4, 0x5379f6e5, 0xe0eddb26, 0x8e61c067, 0xc042fb3e, |
| 5117 | 0xaecee07f, 0x1d5acdbc, 0x73d6d6fd, 0xa103907b, 0xcf8f8b3a, |
| 5118 | 0x7c1ba6f9, 0x1297bdb8, 0x02c02db4, 0x6c4c36f5, 0xdfd81b36, |
| 5119 | 0xb1540077, 0x638146f1, 0x0d0d5db0, 0xbe997073, 0xd0156b32, |
| 5120 | 0x22df06c1, 0x4c531d80, 0xffc73043, 0x914b2b02, 0x439e6d84, |
| 5121 | 0x2d1276c5, 0x9e865b06, 0xf00a4047, 0xe05dd04b, 0x8ed1cb0a, |
| 5122 | 0x3d45e6c9, 0x53c9fd88, 0x811cbb0e, 0xef90a04f, 0x5c048d8c, |
| 5123 | 0x328896cd, 0x7cabad94, 0x1227b6d5, 0xa1b39b16, 0xcf3f8057, |
| 5124 | 0x1deac6d1, 0x7366dd90, 0xc0f2f053, 0xae7eeb12, 0xbe297b1e, |
| 5125 | 0xd0a5605f, 0x63314d9c, 0x0dbd56dd, 0xdf68105b, 0xb1e40b1a, |
| 5126 | 0x027026d9, 0x6cfc3d98, 0x3c95fb7e, 0x5219e03f, 0xe18dcdfc, |
| 5127 | 0x8f01d6bd, 0x5dd4903b, 0x33588b7a, 0x80cca6b9, 0xee40bdf8, |
| 5128 | 0xfe172df4, 0x909b36b5, 0x230f1b76, 0x4d830037, 0x9f5646b1, |
| 5129 | 0xf1da5df0, 0x424e7033, 0x2cc26b72, 0x62e1502b, 0x0c6d4b6a, |
| 5130 | 0xbff966a9, 0xd1757de8, 0x03a03b6e, 0x6d2c202f, 0xdeb80dec, |
| 5131 | 0xb03416ad, 0xa06386a1, 0xceef9de0, 0x7d7bb023, 0x13f7ab62, |
| 5132 | 0xc122ede4, 0xafaef6a5, 0x1c3adb66, 0x72b6c027, 0x807cadd4, |
| 5133 | 0xeef0b695, 0x5d649b56, 0x33e88017, 0xe13dc691, 0x8fb1ddd0, |
| 5134 | 0x3c25f013, 0x52a9eb52, 0x42fe7b5e, 0x2c72601f, 0x9fe64ddc, |
| 5135 | 0xf16a569d, 0x23bf101b, 0x4d330b5a, 0xfea72699, 0x902b3dd8, |
| 5136 | 0xde080681, 0xb0841dc0, 0x03103003, 0x6d9c2b42, 0xbf496dc4, |
| 5137 | 0xd1c57685, 0x62515b46, 0x0cdd4007, 0x1c8ad00b, 0x7206cb4a, |
| 5138 | 0xc192e689, 0xaf1efdc8, 0x7dcbbb4e, 0x1347a00f, 0xa0d38dcc, |
| 5139 | 0xce5f968d}, |
| 5140 | {0x00000000, 0xe71da697, 0x154a4b6f, 0xf257edf8, 0x2a9496de, |
| 5141 | 0xcd893049, 0x3fdeddb1, 0xd8c37b26, 0x55292dbc, 0xb2348b2b, |
| 5142 | 0x406366d3, 0xa77ec044, 0x7fbdbb62, 0x98a01df5, 0x6af7f00d, |
| 5143 | 0x8dea569a, 0xaa525b78, 0x4d4ffdef, 0xbf181017, 0x5805b680, |
| 5144 | 0x80c6cda6, 0x67db6b31, 0x958c86c9, 0x7291205e, 0xff7b76c4, |
| 5145 | 0x1866d053, 0xea313dab, 0x0d2c9b3c, 0xd5efe01a, 0x32f2468d, |
| 5146 | 0xc0a5ab75, 0x27b80de2, 0x8fd5b0b1, 0x68c81626, 0x9a9ffbde, |
| 5147 | 0x7d825d49, 0xa541266f, 0x425c80f8, 0xb00b6d00, 0x5716cb97, |
| 5148 | 0xdafc9d0d, 0x3de13b9a, 0xcfb6d662, 0x28ab70f5, 0xf0680bd3, |
| 5149 | 0x1775ad44, 0xe52240bc, 0x023fe62b, 0x2587ebc9, 0xc29a4d5e, |
| 5150 | 0x30cda0a6, 0xd7d00631, 0x0f137d17, 0xe80edb80, 0x1a593678, |
| 5151 | 0xfd4490ef, 0x70aec675, 0x97b360e2, 0x65e48d1a, 0x82f92b8d, |
| 5152 | 0x5a3a50ab, 0xbd27f63c, 0x4f701bc4, 0xa86dbd53, 0xc4da6723, |
| 5153 | 0x23c7c1b4, 0xd1902c4c, 0x368d8adb, 0xee4ef1fd, 0x0953576a, |
| 5154 | 0xfb04ba92, 0x1c191c05, 0x91f34a9f, 0x76eeec08, 0x84b901f0, |
| 5155 | 0x63a4a767, 0xbb67dc41, 0x5c7a7ad6, 0xae2d972e, 0x493031b9, |
| 5156 | 0x6e883c5b, 0x89959acc, 0x7bc27734, 0x9cdfd1a3, 0x441caa85, |
| 5157 | 0xa3010c12, 0x5156e1ea, 0xb64b477d, 0x3ba111e7, 0xdcbcb770, |
| 5158 | 0x2eeb5a88, 0xc9f6fc1f, 0x11358739, 0xf62821ae, 0x047fcc56, |
| 5159 | 0xe3626ac1, 0x4b0fd792, 0xac127105, 0x5e459cfd, 0xb9583a6a, |
| 5160 | 0x619b414c, 0x8686e7db, 0x74d10a23, 0x93ccacb4, 0x1e26fa2e, |
| 5161 | 0xf93b5cb9, 0x0b6cb141, 0xec7117d6, 0x34b26cf0, 0xd3afca67, |
| 5162 | 0x21f8279f, 0xc6e58108, 0xe15d8cea, 0x06402a7d, 0xf417c785, |
| 5163 | 0x130a6112, 0xcbc91a34, 0x2cd4bca3, 0xde83515b, 0x399ef7cc, |
| 5164 | 0xb474a156, 0x536907c1, 0xa13eea39, 0x46234cae, 0x9ee03788, |
| 5165 | 0x79fd911f, 0x8baa7ce7, 0x6cb7da70, 0x52c5c807, 0xb5d86e90, |
| 5166 | 0x478f8368, 0xa09225ff, 0x78515ed9, 0x9f4cf84e, 0x6d1b15b6, |
| 5167 | 0x8a06b321, 0x07ece5bb, 0xe0f1432c, 0x12a6aed4, 0xf5bb0843, |
| 5168 | 0x2d787365, 0xca65d5f2, 0x3832380a, 0xdf2f9e9d, 0xf897937f, |
| 5169 | 0x1f8a35e8, 0xedddd810, 0x0ac07e87, 0xd20305a1, 0x351ea336, |
| 5170 | 0xc7494ece, 0x2054e859, 0xadbebec3, 0x4aa31854, 0xb8f4f5ac, |
| 5171 | 0x5fe9533b, 0x872a281d, 0x60378e8a, 0x92606372, 0x757dc5e5, |
| 5172 | 0xdd1078b6, 0x3a0dde21, 0xc85a33d9, 0x2f47954e, 0xf784ee68, |
| 5173 | 0x109948ff, 0xe2cea507, 0x05d30390, 0x8839550a, 0x6f24f39d, |
| 5174 | 0x9d731e65, 0x7a6eb8f2, 0xa2adc3d4, 0x45b06543, 0xb7e788bb, |
| 5175 | 0x50fa2e2c, 0x774223ce, 0x905f8559, 0x620868a1, 0x8515ce36, |
| 5176 | 0x5dd6b510, 0xbacb1387, 0x489cfe7f, 0xaf8158e8, 0x226b0e72, |
| 5177 | 0xc576a8e5, 0x3721451d, 0xd03ce38a, 0x08ff98ac, 0xefe23e3b, |
| 5178 | 0x1db5d3c3, 0xfaa87554, 0x961faf24, 0x710209b3, 0x8355e44b, |
| 5179 | 0x644842dc, 0xbc8b39fa, 0x5b969f6d, 0xa9c17295, 0x4edcd402, |
| 5180 | 0xc3368298, 0x242b240f, 0xd67cc9f7, 0x31616f60, 0xe9a21446, |
| 5181 | 0x0ebfb2d1, 0xfce85f29, 0x1bf5f9be, 0x3c4df45c, 0xdb5052cb, |
| 5182 | 0x2907bf33, 0xce1a19a4, 0x16d96282, 0xf1c4c415, 0x039329ed, |
| 5183 | 0xe48e8f7a, 0x6964d9e0, 0x8e797f77, 0x7c2e928f, 0x9b333418, |
| 5184 | 0x43f04f3e, 0xa4ede9a9, 0x56ba0451, 0xb1a7a2c6, 0x19ca1f95, |
| 5185 | 0xfed7b902, 0x0c8054fa, 0xeb9df26d, 0x335e894b, 0xd4432fdc, |
| 5186 | 0x2614c224, 0xc10964b3, 0x4ce33229, 0xabfe94be, 0x59a97946, |
| 5187 | 0xbeb4dfd1, 0x6677a4f7, 0x816a0260, 0x733def98, 0x9420490f, |
| 5188 | 0xb39844ed, 0x5485e27a, 0xa6d20f82, 0x41cfa915, 0x990cd233, |
| 5189 | 0x7e1174a4, 0x8c46995c, 0x6b5b3fcb, 0xe6b16951, 0x01accfc6, |
| 5190 | 0xf3fb223e, 0x14e684a9, 0xcc25ff8f, 0x2b385918, 0xd96fb4e0, |
| 5191 | 0x3e721277}, |
| 5192 | {0x00000000, 0xa58b900e, 0x9066265d, 0x35edb653, 0xfbbd4afb, |
| 5193 | 0x5e36daf5, 0x6bdb6ca6, 0xce50fca8, 0x2c0b93b7, 0x898003b9, |
| 5194 | 0xbc6db5ea, 0x19e625e4, 0xd7b6d94c, 0x723d4942, 0x47d0ff11, |
| 5195 | 0xe25b6f1f, 0x5817276e, 0xfd9cb760, 0xc8710133, 0x6dfa913d, |
| 5196 | 0xa3aa6d95, 0x0621fd9b, 0x33cc4bc8, 0x9647dbc6, 0x741cb4d9, |
| 5197 | 0xd19724d7, 0xe47a9284, 0x41f1028a, 0x8fa1fe22, 0x2a2a6e2c, |
| 5198 | 0x1fc7d87f, 0xba4c4871, 0xb02e4edc, 0x15a5ded2, 0x20486881, |
| 5199 | 0x85c3f88f, 0x4b930427, 0xee189429, 0xdbf5227a, 0x7e7eb274, |
| 5200 | 0x9c25dd6b, 0x39ae4d65, 0x0c43fb36, 0xa9c86b38, 0x67989790, |
| 5201 | 0xc213079e, 0xf7feb1cd, 0x527521c3, 0xe83969b2, 0x4db2f9bc, |
| 5202 | 0x785f4fef, 0xddd4dfe1, 0x13842349, 0xb60fb347, 0x83e20514, |
| 5203 | 0x2669951a, 0xc432fa05, 0x61b96a0b, 0x5454dc58, 0xf1df4c56, |
| 5204 | 0x3f8fb0fe, 0x9a0420f0, 0xafe996a3, 0x0a6206ad, 0xbb2d9bf9, |
| 5205 | 0x1ea60bf7, 0x2b4bbda4, 0x8ec02daa, 0x4090d102, 0xe51b410c, |
| 5206 | 0xd0f6f75f, 0x757d6751, 0x9726084e, 0x32ad9840, 0x07402e13, |
| 5207 | 0xa2cbbe1d, 0x6c9b42b5, 0xc910d2bb, 0xfcfd64e8, 0x5976f4e6, |
| 5208 | 0xe33abc97, 0x46b12c99, 0x735c9aca, 0xd6d70ac4, 0x1887f66c, |
| 5209 | 0xbd0c6662, 0x88e1d031, 0x2d6a403f, 0xcf312f20, 0x6ababf2e, |
| 5210 | 0x5f57097d, 0xfadc9973, 0x348c65db, 0x9107f5d5, 0xa4ea4386, |
| 5211 | 0x0161d388, 0x0b03d525, 0xae88452b, 0x9b65f378, 0x3eee6376, |
| 5212 | 0xf0be9fde, 0x55350fd0, 0x60d8b983, 0xc553298d, 0x27084692, |
| 5213 | 0x8283d69c, 0xb76e60cf, 0x12e5f0c1, 0xdcb50c69, 0x793e9c67, |
| 5214 | 0x4cd32a34, 0xe958ba3a, 0x5314f24b, 0xf69f6245, 0xc372d416, |
| 5215 | 0x66f94418, 0xa8a9b8b0, 0x0d2228be, 0x38cf9eed, 0x9d440ee3, |
| 5216 | 0x7f1f61fc, 0xda94f1f2, 0xef7947a1, 0x4af2d7af, 0x84a22b07, |
| 5217 | 0x2129bb09, 0x14c40d5a, 0xb14f9d54, 0xad2a31b3, 0x08a1a1bd, |
| 5218 | 0x3d4c17ee, 0x98c787e0, 0x56977b48, 0xf31ceb46, 0xc6f15d15, |
| 5219 | 0x637acd1b, 0x8121a204, 0x24aa320a, 0x11478459, 0xb4cc1457, |
| 5220 | 0x7a9ce8ff, 0xdf1778f1, 0xeafacea2, 0x4f715eac, 0xf53d16dd, |
| 5221 | 0x50b686d3, 0x655b3080, 0xc0d0a08e, 0x0e805c26, 0xab0bcc28, |
| 5222 | 0x9ee67a7b, 0x3b6dea75, 0xd936856a, 0x7cbd1564, 0x4950a337, |
| 5223 | 0xecdb3339, 0x228bcf91, 0x87005f9f, 0xb2ede9cc, 0x176679c2, |
| 5224 | 0x1d047f6f, 0xb88fef61, 0x8d625932, 0x28e9c93c, 0xe6b93594, |
| 5225 | 0x4332a59a, 0x76df13c9, 0xd35483c7, 0x310fecd8, 0x94847cd6, |
| 5226 | 0xa169ca85, 0x04e25a8b, 0xcab2a623, 0x6f39362d, 0x5ad4807e, |
| 5227 | 0xff5f1070, 0x45135801, 0xe098c80f, 0xd5757e5c, 0x70feee52, |
| 5228 | 0xbeae12fa, 0x1b2582f4, 0x2ec834a7, 0x8b43a4a9, 0x6918cbb6, |
| 5229 | 0xcc935bb8, 0xf97eedeb, 0x5cf57de5, 0x92a5814d, 0x372e1143, |
| 5230 | 0x02c3a710, 0xa748371e, 0x1607aa4a, 0xb38c3a44, 0x86618c17, |
| 5231 | 0x23ea1c19, 0xedbae0b1, 0x483170bf, 0x7ddcc6ec, 0xd85756e2, |
| 5232 | 0x3a0c39fd, 0x9f87a9f3, 0xaa6a1fa0, 0x0fe18fae, 0xc1b17306, |
| 5233 | 0x643ae308, 0x51d7555b, 0xf45cc555, 0x4e108d24, 0xeb9b1d2a, |
| 5234 | 0xde76ab79, 0x7bfd3b77, 0xb5adc7df, 0x102657d1, 0x25cbe182, |
| 5235 | 0x8040718c, 0x621b1e93, 0xc7908e9d, 0xf27d38ce, 0x57f6a8c0, |
| 5236 | 0x99a65468, 0x3c2dc466, 0x09c07235, 0xac4be23b, 0xa629e496, |
| 5237 | 0x03a27498, 0x364fc2cb, 0x93c452c5, 0x5d94ae6d, 0xf81f3e63, |
| 5238 | 0xcdf28830, 0x6879183e, 0x8a227721, 0x2fa9e72f, 0x1a44517c, |
| 5239 | 0xbfcfc172, 0x719f3dda, 0xd414add4, 0xe1f91b87, 0x44728b89, |
| 5240 | 0xfe3ec3f8, 0x5bb553f6, 0x6e58e5a5, 0xcbd375ab, 0x05838903, |
| 5241 | 0xa008190d, 0x95e5af5e, 0x306e3f50, 0xd235504f, 0x77bec041, |
| 5242 | 0x42537612, 0xe7d8e61c, 0x29881ab4, 0x8c038aba, 0xb9ee3ce9, |
| 5243 | 0x1c65ace7}}; |
| 5244 | |
| 5245 | local const z_word_t FAR crc_braid_big_table[][256] = { |
| 5246 | {0x0000000000000000, 0x0e908ba500000000, 0x5d26669000000000, |
| 5247 | 0x53b6ed3500000000, 0xfb4abdfb00000000, 0xf5da365e00000000, |
| 5248 | 0xa66cdb6b00000000, 0xa8fc50ce00000000, 0xb7930b2c00000000, |
| 5249 | 0xb903808900000000, 0xeab56dbc00000000, 0xe425e61900000000, |
| 5250 | 0x4cd9b6d700000000, 0x42493d7200000000, 0x11ffd04700000000, |
| 5251 | 0x1f6f5be200000000, 0x6e27175800000000, 0x60b79cfd00000000, |
| 5252 | 0x330171c800000000, 0x3d91fa6d00000000, 0x956daaa300000000, |
| 5253 | 0x9bfd210600000000, 0xc84bcc3300000000, 0xc6db479600000000, |
| 5254 | 0xd9b41c7400000000, 0xd72497d100000000, 0x84927ae400000000, |
| 5255 | 0x8a02f14100000000, 0x22fea18f00000000, 0x2c6e2a2a00000000, |
| 5256 | 0x7fd8c71f00000000, 0x71484cba00000000, 0xdc4e2eb000000000, |
| 5257 | 0xd2dea51500000000, 0x8168482000000000, 0x8ff8c38500000000, |
| 5258 | 0x2704934b00000000, 0x299418ee00000000, 0x7a22f5db00000000, |
| 5259 | 0x74b27e7e00000000, 0x6bdd259c00000000, 0x654dae3900000000, |
| 5260 | 0x36fb430c00000000, 0x386bc8a900000000, 0x9097986700000000, |
| 5261 | 0x9e0713c200000000, 0xcdb1fef700000000, 0xc321755200000000, |
| 5262 | 0xb26939e800000000, 0xbcf9b24d00000000, 0xef4f5f7800000000, |
| 5263 | 0xe1dfd4dd00000000, 0x4923841300000000, 0x47b30fb600000000, |
| 5264 | 0x1405e28300000000, 0x1a95692600000000, 0x05fa32c400000000, |
| 5265 | 0x0b6ab96100000000, 0x58dc545400000000, 0x564cdff100000000, |
| 5266 | 0xfeb08f3f00000000, 0xf020049a00000000, 0xa396e9af00000000, |
| 5267 | 0xad06620a00000000, 0xf99b2dbb00000000, 0xf70ba61e00000000, |
| 5268 | 0xa4bd4b2b00000000, 0xaa2dc08e00000000, 0x02d1904000000000, |
| 5269 | 0x0c411be500000000, 0x5ff7f6d000000000, 0x51677d7500000000, |
| 5270 | 0x4e08269700000000, 0x4098ad3200000000, 0x132e400700000000, |
| 5271 | 0x1dbecba200000000, 0xb5429b6c00000000, 0xbbd210c900000000, |
| 5272 | 0xe864fdfc00000000, 0xe6f4765900000000, 0x97bc3ae300000000, |
| 5273 | 0x992cb14600000000, 0xca9a5c7300000000, 0xc40ad7d600000000, |
| 5274 | 0x6cf6871800000000, 0x62660cbd00000000, 0x31d0e18800000000, |
| 5275 | 0x3f406a2d00000000, 0x202f31cf00000000, 0x2ebfba6a00000000, |
| 5276 | 0x7d09575f00000000, 0x7399dcfa00000000, 0xdb658c3400000000, |
| 5277 | 0xd5f5079100000000, 0x8643eaa400000000, 0x88d3610100000000, |
| 5278 | 0x25d5030b00000000, 0x2b4588ae00000000, 0x78f3659b00000000, |
| 5279 | 0x7663ee3e00000000, 0xde9fbef000000000, 0xd00f355500000000, |
| 5280 | 0x83b9d86000000000, 0x8d2953c500000000, 0x9246082700000000, |
| 5281 | 0x9cd6838200000000, 0xcf606eb700000000, 0xc1f0e51200000000, |
| 5282 | 0x690cb5dc00000000, 0x679c3e7900000000, 0x342ad34c00000000, |
| 5283 | 0x3aba58e900000000, 0x4bf2145300000000, 0x45629ff600000000, |
| 5284 | 0x16d472c300000000, 0x1844f96600000000, 0xb0b8a9a800000000, |
| 5285 | 0xbe28220d00000000, 0xed9ecf3800000000, 0xe30e449d00000000, |
| 5286 | 0xfc611f7f00000000, 0xf2f194da00000000, 0xa14779ef00000000, |
| 5287 | 0xafd7f24a00000000, 0x072ba28400000000, 0x09bb292100000000, |
| 5288 | 0x5a0dc41400000000, 0x549d4fb100000000, 0xb3312aad00000000, |
| 5289 | 0xbda1a10800000000, 0xee174c3d00000000, 0xe087c79800000000, |
| 5290 | 0x487b975600000000, 0x46eb1cf300000000, 0x155df1c600000000, |
| 5291 | 0x1bcd7a6300000000, 0x04a2218100000000, 0x0a32aa2400000000, |
| 5292 | 0x5984471100000000, 0x5714ccb400000000, 0xffe89c7a00000000, |
| 5293 | 0xf17817df00000000, 0xa2cefaea00000000, 0xac5e714f00000000, |
| 5294 | 0xdd163df500000000, 0xd386b65000000000, 0x80305b6500000000, |
| 5295 | 0x8ea0d0c000000000, 0x265c800e00000000, 0x28cc0bab00000000, |
| 5296 | 0x7b7ae69e00000000, 0x75ea6d3b00000000, 0x6a8536d900000000, |
| 5297 | 0x6415bd7c00000000, 0x37a3504900000000, 0x3933dbec00000000, |
| 5298 | 0x91cf8b2200000000, 0x9f5f008700000000, 0xcce9edb200000000, |
| 5299 | 0xc279661700000000, 0x6f7f041d00000000, 0x61ef8fb800000000, |
| 5300 | 0x3259628d00000000, 0x3cc9e92800000000, 0x9435b9e600000000, |
| 5301 | 0x9aa5324300000000, 0xc913df7600000000, 0xc78354d300000000, |
| 5302 | 0xd8ec0f3100000000, 0xd67c849400000000, 0x85ca69a100000000, |
| 5303 | 0x8b5ae20400000000, 0x23a6b2ca00000000, 0x2d36396f00000000, |
| 5304 | 0x7e80d45a00000000, 0x70105fff00000000, 0x0158134500000000, |
| 5305 | 0x0fc898e000000000, 0x5c7e75d500000000, 0x52eefe7000000000, |
| 5306 | 0xfa12aebe00000000, 0xf482251b00000000, 0xa734c82e00000000, |
| 5307 | 0xa9a4438b00000000, 0xb6cb186900000000, 0xb85b93cc00000000, |
| 5308 | 0xebed7ef900000000, 0xe57df55c00000000, 0x4d81a59200000000, |
| 5309 | 0x43112e3700000000, 0x10a7c30200000000, 0x1e3748a700000000, |
| 5310 | 0x4aaa071600000000, 0x443a8cb300000000, 0x178c618600000000, |
| 5311 | 0x191cea2300000000, 0xb1e0baed00000000, 0xbf70314800000000, |
| 5312 | 0xecc6dc7d00000000, 0xe25657d800000000, 0xfd390c3a00000000, |
| 5313 | 0xf3a9879f00000000, 0xa01f6aaa00000000, 0xae8fe10f00000000, |
| 5314 | 0x0673b1c100000000, 0x08e33a6400000000, 0x5b55d75100000000, |
| 5315 | 0x55c55cf400000000, 0x248d104e00000000, 0x2a1d9beb00000000, |
| 5316 | 0x79ab76de00000000, 0x773bfd7b00000000, 0xdfc7adb500000000, |
| 5317 | 0xd157261000000000, 0x82e1cb2500000000, 0x8c71408000000000, |
| 5318 | 0x931e1b6200000000, 0x9d8e90c700000000, 0xce387df200000000, |
| 5319 | 0xc0a8f65700000000, 0x6854a69900000000, 0x66c42d3c00000000, |
| 5320 | 0x3572c00900000000, 0x3be24bac00000000, 0x96e429a600000000, |
| 5321 | 0x9874a20300000000, 0xcbc24f3600000000, 0xc552c49300000000, |
| 5322 | 0x6dae945d00000000, 0x633e1ff800000000, 0x3088f2cd00000000, |
| 5323 | 0x3e18796800000000, 0x2177228a00000000, 0x2fe7a92f00000000, |
| 5324 | 0x7c51441a00000000, 0x72c1cfbf00000000, 0xda3d9f7100000000, |
| 5325 | 0xd4ad14d400000000, 0x871bf9e100000000, 0x898b724400000000, |
| 5326 | 0xf8c33efe00000000, 0xf653b55b00000000, 0xa5e5586e00000000, |
| 5327 | 0xab75d3cb00000000, 0x0389830500000000, 0x0d1908a000000000, |
| 5328 | 0x5eafe59500000000, 0x503f6e3000000000, 0x4f5035d200000000, |
| 5329 | 0x41c0be7700000000, 0x1276534200000000, 0x1ce6d8e700000000, |
| 5330 | 0xb41a882900000000, 0xba8a038c00000000, 0xe93ceeb900000000, |
| 5331 | 0xe7ac651c00000000}, |
| 5332 | {0x0000000000000000, 0x97a61de700000000, 0x6f4b4a1500000000, |
| 5333 | 0xf8ed57f200000000, 0xde96942a00000000, 0x493089cd00000000, |
| 5334 | 0xb1ddde3f00000000, 0x267bc3d800000000, 0xbc2d295500000000, |
| 5335 | 0x2b8b34b200000000, 0xd366634000000000, 0x44c07ea700000000, |
| 5336 | 0x62bbbd7f00000000, 0xf51da09800000000, 0x0df0f76a00000000, |
| 5337 | 0x9a56ea8d00000000, 0x785b52aa00000000, 0xeffd4f4d00000000, |
| 5338 | 0x171018bf00000000, 0x80b6055800000000, 0xa6cdc68000000000, |
| 5339 | 0x316bdb6700000000, 0xc9868c9500000000, 0x5e20917200000000, |
| 5340 | 0xc4767bff00000000, 0x53d0661800000000, 0xab3d31ea00000000, |
| 5341 | 0x3c9b2c0d00000000, 0x1ae0efd500000000, 0x8d46f23200000000, |
| 5342 | 0x75aba5c000000000, 0xe20db82700000000, 0xb1b0d58f00000000, |
| 5343 | 0x2616c86800000000, 0xdefb9f9a00000000, 0x495d827d00000000, |
| 5344 | 0x6f2641a500000000, 0xf8805c4200000000, 0x006d0bb000000000, |
| 5345 | 0x97cb165700000000, 0x0d9dfcda00000000, 0x9a3be13d00000000, |
| 5346 | 0x62d6b6cf00000000, 0xf570ab2800000000, 0xd30b68f000000000, |
| 5347 | 0x44ad751700000000, 0xbc4022e500000000, 0x2be63f0200000000, |
| 5348 | 0xc9eb872500000000, 0x5e4d9ac200000000, 0xa6a0cd3000000000, |
| 5349 | 0x3106d0d700000000, 0x177d130f00000000, 0x80db0ee800000000, |
| 5350 | 0x7836591a00000000, 0xef9044fd00000000, 0x75c6ae7000000000, |
| 5351 | 0xe260b39700000000, 0x1a8de46500000000, 0x8d2bf98200000000, |
| 5352 | 0xab503a5a00000000, 0x3cf627bd00000000, 0xc41b704f00000000, |
| 5353 | 0x53bd6da800000000, 0x2367dac400000000, 0xb4c1c72300000000, |
| 5354 | 0x4c2c90d100000000, 0xdb8a8d3600000000, 0xfdf14eee00000000, |
| 5355 | 0x6a57530900000000, 0x92ba04fb00000000, 0x051c191c00000000, |
| 5356 | 0x9f4af39100000000, 0x08ecee7600000000, 0xf001b98400000000, |
| 5357 | 0x67a7a46300000000, 0x41dc67bb00000000, 0xd67a7a5c00000000, |
| 5358 | 0x2e972dae00000000, 0xb931304900000000, 0x5b3c886e00000000, |
| 5359 | 0xcc9a958900000000, 0x3477c27b00000000, 0xa3d1df9c00000000, |
| 5360 | 0x85aa1c4400000000, 0x120c01a300000000, 0xeae1565100000000, |
| 5361 | 0x7d474bb600000000, 0xe711a13b00000000, 0x70b7bcdc00000000, |
| 5362 | 0x885aeb2e00000000, 0x1ffcf6c900000000, 0x3987351100000000, |
| 5363 | 0xae2128f600000000, 0x56cc7f0400000000, 0xc16a62e300000000, |
| 5364 | 0x92d70f4b00000000, 0x057112ac00000000, 0xfd9c455e00000000, |
| 5365 | 0x6a3a58b900000000, 0x4c419b6100000000, 0xdbe7868600000000, |
| 5366 | 0x230ad17400000000, 0xb4accc9300000000, 0x2efa261e00000000, |
| 5367 | 0xb95c3bf900000000, 0x41b16c0b00000000, 0xd61771ec00000000, |
| 5368 | 0xf06cb23400000000, 0x67caafd300000000, 0x9f27f82100000000, |
| 5369 | 0x0881e5c600000000, 0xea8c5de100000000, 0x7d2a400600000000, |
| 5370 | 0x85c717f400000000, 0x12610a1300000000, 0x341ac9cb00000000, |
| 5371 | 0xa3bcd42c00000000, 0x5b5183de00000000, 0xccf79e3900000000, |
| 5372 | 0x56a174b400000000, 0xc107695300000000, 0x39ea3ea100000000, |
| 5373 | 0xae4c234600000000, 0x8837e09e00000000, 0x1f91fd7900000000, |
| 5374 | 0xe77caa8b00000000, 0x70dab76c00000000, 0x07c8c55200000000, |
| 5375 | 0x906ed8b500000000, 0x68838f4700000000, 0xff2592a000000000, |
| 5376 | 0xd95e517800000000, 0x4ef84c9f00000000, 0xb6151b6d00000000, |
| 5377 | 0x21b3068a00000000, 0xbbe5ec0700000000, 0x2c43f1e000000000, |
| 5378 | 0xd4aea61200000000, 0x4308bbf500000000, 0x6573782d00000000, |
| 5379 | 0xf2d565ca00000000, 0x0a38323800000000, 0x9d9e2fdf00000000, |
| 5380 | 0x7f9397f800000000, 0xe8358a1f00000000, 0x10d8dded00000000, |
| 5381 | 0x877ec00a00000000, 0xa10503d200000000, 0x36a31e3500000000, |
| 5382 | 0xce4e49c700000000, 0x59e8542000000000, 0xc3bebead00000000, |
| 5383 | 0x5418a34a00000000, 0xacf5f4b800000000, 0x3b53e95f00000000, |
| 5384 | 0x1d282a8700000000, 0x8a8e376000000000, 0x7263609200000000, |
| 5385 | 0xe5c57d7500000000, 0xb67810dd00000000, 0x21de0d3a00000000, |
| 5386 | 0xd9335ac800000000, 0x4e95472f00000000, 0x68ee84f700000000, |
| 5387 | 0xff48991000000000, 0x07a5cee200000000, 0x9003d30500000000, |
| 5388 | 0x0a55398800000000, 0x9df3246f00000000, 0x651e739d00000000, |
| 5389 | 0xf2b86e7a00000000, 0xd4c3ada200000000, 0x4365b04500000000, |
| 5390 | 0xbb88e7b700000000, 0x2c2efa5000000000, 0xce23427700000000, |
| 5391 | 0x59855f9000000000, 0xa168086200000000, 0x36ce158500000000, |
| 5392 | 0x10b5d65d00000000, 0x8713cbba00000000, 0x7ffe9c4800000000, |
| 5393 | 0xe85881af00000000, 0x720e6b2200000000, 0xe5a876c500000000, |
| 5394 | 0x1d45213700000000, 0x8ae33cd000000000, 0xac98ff0800000000, |
| 5395 | 0x3b3ee2ef00000000, 0xc3d3b51d00000000, 0x5475a8fa00000000, |
| 5396 | 0x24af1f9600000000, 0xb309027100000000, 0x4be4558300000000, |
| 5397 | 0xdc42486400000000, 0xfa398bbc00000000, 0x6d9f965b00000000, |
| 5398 | 0x9572c1a900000000, 0x02d4dc4e00000000, 0x988236c300000000, |
| 5399 | 0x0f242b2400000000, 0xf7c97cd600000000, 0x606f613100000000, |
| 5400 | 0x4614a2e900000000, 0xd1b2bf0e00000000, 0x295fe8fc00000000, |
| 5401 | 0xbef9f51b00000000, 0x5cf44d3c00000000, 0xcb5250db00000000, |
| 5402 | 0x33bf072900000000, 0xa4191ace00000000, 0x8262d91600000000, |
| 5403 | 0x15c4c4f100000000, 0xed29930300000000, 0x7a8f8ee400000000, |
| 5404 | 0xe0d9646900000000, 0x777f798e00000000, 0x8f922e7c00000000, |
| 5405 | 0x1834339b00000000, 0x3e4ff04300000000, 0xa9e9eda400000000, |
| 5406 | 0x5104ba5600000000, 0xc6a2a7b100000000, 0x951fca1900000000, |
| 5407 | 0x02b9d7fe00000000, 0xfa54800c00000000, 0x6df29deb00000000, |
| 5408 | 0x4b895e3300000000, 0xdc2f43d400000000, 0x24c2142600000000, |
| 5409 | 0xb36409c100000000, 0x2932e34c00000000, 0xbe94feab00000000, |
| 5410 | 0x4679a95900000000, 0xd1dfb4be00000000, 0xf7a4776600000000, |
| 5411 | 0x60026a8100000000, 0x98ef3d7300000000, 0x0f49209400000000, |
| 5412 | 0xed4498b300000000, 0x7ae2855400000000, 0x820fd2a600000000, |
| 5413 | 0x15a9cf4100000000, 0x33d20c9900000000, 0xa474117e00000000, |
| 5414 | 0x5c99468c00000000, 0xcb3f5b6b00000000, 0x5169b1e600000000, |
| 5415 | 0xc6cfac0100000000, 0x3e22fbf300000000, 0xa984e61400000000, |
| 5416 | 0x8fff25cc00000000, 0x1859382b00000000, 0xe0b46fd900000000, |
| 5417 | 0x7712723e00000000}, |
| 5418 | {0x0000000000000000, 0x411b8c6e00000000, 0x823618dd00000000, |
| 5419 | 0xc32d94b300000000, 0x456b416100000000, 0x0470cd0f00000000, |
| 5420 | 0xc75d59bc00000000, 0x8646d5d200000000, 0x8ad682c200000000, |
| 5421 | 0xcbcd0eac00000000, 0x08e09a1f00000000, 0x49fb167100000000, |
| 5422 | 0xcfbdc3a300000000, 0x8ea64fcd00000000, 0x4d8bdb7e00000000, |
| 5423 | 0x0c90571000000000, 0x55ab745e00000000, 0x14b0f83000000000, |
| 5424 | 0xd79d6c8300000000, 0x9686e0ed00000000, 0x10c0353f00000000, |
| 5425 | 0x51dbb95100000000, 0x92f62de200000000, 0xd3eda18c00000000, |
| 5426 | 0xdf7df69c00000000, 0x9e667af200000000, 0x5d4bee4100000000, |
| 5427 | 0x1c50622f00000000, 0x9a16b7fd00000000, 0xdb0d3b9300000000, |
| 5428 | 0x1820af2000000000, 0x593b234e00000000, 0xaa56e9bc00000000, |
| 5429 | 0xeb4d65d200000000, 0x2860f16100000000, 0x697b7d0f00000000, |
| 5430 | 0xef3da8dd00000000, 0xae2624b300000000, 0x6d0bb00000000000, |
| 5431 | 0x2c103c6e00000000, 0x20806b7e00000000, 0x619be71000000000, |
| 5432 | 0xa2b673a300000000, 0xe3adffcd00000000, 0x65eb2a1f00000000, |
| 5433 | 0x24f0a67100000000, 0xe7dd32c200000000, 0xa6c6beac00000000, |
| 5434 | 0xfffd9de200000000, 0xbee6118c00000000, 0x7dcb853f00000000, |
| 5435 | 0x3cd0095100000000, 0xba96dc8300000000, 0xfb8d50ed00000000, |
| 5436 | 0x38a0c45e00000000, 0x79bb483000000000, 0x752b1f2000000000, |
| 5437 | 0x3430934e00000000, 0xf71d07fd00000000, 0xb6068b9300000000, |
| 5438 | 0x30405e4100000000, 0x715bd22f00000000, 0xb276469c00000000, |
| 5439 | 0xf36dcaf200000000, 0x15aba3a200000000, 0x54b02fcc00000000, |
| 5440 | 0x979dbb7f00000000, 0xd686371100000000, 0x50c0e2c300000000, |
| 5441 | 0x11db6ead00000000, 0xd2f6fa1e00000000, 0x93ed767000000000, |
| 5442 | 0x9f7d216000000000, 0xde66ad0e00000000, 0x1d4b39bd00000000, |
| 5443 | 0x5c50b5d300000000, 0xda16600100000000, 0x9b0dec6f00000000, |
| 5444 | 0x582078dc00000000, 0x193bf4b200000000, 0x4000d7fc00000000, |
| 5445 | 0x011b5b9200000000, 0xc236cf2100000000, 0x832d434f00000000, |
| 5446 | 0x056b969d00000000, 0x44701af300000000, 0x875d8e4000000000, |
| 5447 | 0xc646022e00000000, 0xcad6553e00000000, 0x8bcdd95000000000, |
| 5448 | 0x48e04de300000000, 0x09fbc18d00000000, 0x8fbd145f00000000, |
| 5449 | 0xcea6983100000000, 0x0d8b0c8200000000, 0x4c9080ec00000000, |
| 5450 | 0xbffd4a1e00000000, 0xfee6c67000000000, 0x3dcb52c300000000, |
| 5451 | 0x7cd0dead00000000, 0xfa960b7f00000000, 0xbb8d871100000000, |
| 5452 | 0x78a013a200000000, 0x39bb9fcc00000000, 0x352bc8dc00000000, |
| 5453 | 0x743044b200000000, 0xb71dd00100000000, 0xf6065c6f00000000, |
| 5454 | 0x704089bd00000000, 0x315b05d300000000, 0xf276916000000000, |
| 5455 | 0xb36d1d0e00000000, 0xea563e4000000000, 0xab4db22e00000000, |
| 5456 | 0x6860269d00000000, 0x297baaf300000000, 0xaf3d7f2100000000, |
| 5457 | 0xee26f34f00000000, 0x2d0b67fc00000000, 0x6c10eb9200000000, |
| 5458 | 0x6080bc8200000000, 0x219b30ec00000000, 0xe2b6a45f00000000, |
| 5459 | 0xa3ad283100000000, 0x25ebfde300000000, 0x64f0718d00000000, |
| 5460 | 0xa7dde53e00000000, 0xe6c6695000000000, 0x6b50369e00000000, |
| 5461 | 0x2a4bbaf000000000, 0xe9662e4300000000, 0xa87da22d00000000, |
| 5462 | 0x2e3b77ff00000000, 0x6f20fb9100000000, 0xac0d6f2200000000, |
| 5463 | 0xed16e34c00000000, 0xe186b45c00000000, 0xa09d383200000000, |
| 5464 | 0x63b0ac8100000000, 0x22ab20ef00000000, 0xa4edf53d00000000, |
| 5465 | 0xe5f6795300000000, 0x26dbede000000000, 0x67c0618e00000000, |
| 5466 | 0x3efb42c000000000, 0x7fe0ceae00000000, 0xbccd5a1d00000000, |
| 5467 | 0xfdd6d67300000000, 0x7b9003a100000000, 0x3a8b8fcf00000000, |
| 5468 | 0xf9a61b7c00000000, 0xb8bd971200000000, 0xb42dc00200000000, |
| 5469 | 0xf5364c6c00000000, 0x361bd8df00000000, 0x770054b100000000, |
| 5470 | 0xf146816300000000, 0xb05d0d0d00000000, 0x737099be00000000, |
| 5471 | 0x326b15d000000000, 0xc106df2200000000, 0x801d534c00000000, |
| 5472 | 0x4330c7ff00000000, 0x022b4b9100000000, 0x846d9e4300000000, |
| 5473 | 0xc576122d00000000, 0x065b869e00000000, 0x47400af000000000, |
| 5474 | 0x4bd05de000000000, 0x0acbd18e00000000, 0xc9e6453d00000000, |
| 5475 | 0x88fdc95300000000, 0x0ebb1c8100000000, 0x4fa090ef00000000, |
| 5476 | 0x8c8d045c00000000, 0xcd96883200000000, 0x94adab7c00000000, |
| 5477 | 0xd5b6271200000000, 0x169bb3a100000000, 0x57803fcf00000000, |
| 5478 | 0xd1c6ea1d00000000, 0x90dd667300000000, 0x53f0f2c000000000, |
| 5479 | 0x12eb7eae00000000, 0x1e7b29be00000000, 0x5f60a5d000000000, |
| 5480 | 0x9c4d316300000000, 0xdd56bd0d00000000, 0x5b1068df00000000, |
| 5481 | 0x1a0be4b100000000, 0xd926700200000000, 0x983dfc6c00000000, |
| 5482 | 0x7efb953c00000000, 0x3fe0195200000000, 0xfccd8de100000000, |
| 5483 | 0xbdd6018f00000000, 0x3b90d45d00000000, 0x7a8b583300000000, |
| 5484 | 0xb9a6cc8000000000, 0xf8bd40ee00000000, 0xf42d17fe00000000, |
| 5485 | 0xb5369b9000000000, 0x761b0f2300000000, 0x3700834d00000000, |
| 5486 | 0xb146569f00000000, 0xf05ddaf100000000, 0x33704e4200000000, |
| 5487 | 0x726bc22c00000000, 0x2b50e16200000000, 0x6a4b6d0c00000000, |
| 5488 | 0xa966f9bf00000000, 0xe87d75d100000000, 0x6e3ba00300000000, |
| 5489 | 0x2f202c6d00000000, 0xec0db8de00000000, 0xad1634b000000000, |
| 5490 | 0xa18663a000000000, 0xe09defce00000000, 0x23b07b7d00000000, |
| 5491 | 0x62abf71300000000, 0xe4ed22c100000000, 0xa5f6aeaf00000000, |
| 5492 | 0x66db3a1c00000000, 0x27c0b67200000000, 0xd4ad7c8000000000, |
| 5493 | 0x95b6f0ee00000000, 0x569b645d00000000, 0x1780e83300000000, |
| 5494 | 0x91c63de100000000, 0xd0ddb18f00000000, 0x13f0253c00000000, |
| 5495 | 0x52eba95200000000, 0x5e7bfe4200000000, 0x1f60722c00000000, |
| 5496 | 0xdc4de69f00000000, 0x9d566af100000000, 0x1b10bf2300000000, |
| 5497 | 0x5a0b334d00000000, 0x9926a7fe00000000, 0xd83d2b9000000000, |
| 5498 | 0x810608de00000000, 0xc01d84b000000000, 0x0330100300000000, |
| 5499 | 0x422b9c6d00000000, 0xc46d49bf00000000, 0x8576c5d100000000, |
| 5500 | 0x465b516200000000, 0x0740dd0c00000000, 0x0bd08a1c00000000, |
| 5501 | 0x4acb067200000000, 0x89e692c100000000, 0xc8fd1eaf00000000, |
| 5502 | 0x4ebbcb7d00000000, 0x0fa0471300000000, 0xcc8dd3a000000000, |
| 5503 | 0x8d965fce00000000}, |
| 5504 | {0x0000000000000000, 0x1dfdb50100000000, 0x3afa6b0300000000, |
| 5505 | 0x2707de0200000000, 0x74f4d70600000000, 0x6909620700000000, |
| 5506 | 0x4e0ebc0500000000, 0x53f3090400000000, 0xe8e8af0d00000000, |
| 5507 | 0xf5151a0c00000000, 0xd212c40e00000000, 0xcfef710f00000000, |
| 5508 | 0x9c1c780b00000000, 0x81e1cd0a00000000, 0xa6e6130800000000, |
| 5509 | 0xbb1ba60900000000, 0xd0d15f1b00000000, 0xcd2cea1a00000000, |
| 5510 | 0xea2b341800000000, 0xf7d6811900000000, 0xa425881d00000000, |
| 5511 | 0xb9d83d1c00000000, 0x9edfe31e00000000, 0x8322561f00000000, |
| 5512 | 0x3839f01600000000, 0x25c4451700000000, 0x02c39b1500000000, |
| 5513 | 0x1f3e2e1400000000, 0x4ccd271000000000, 0x5130921100000000, |
| 5514 | 0x76374c1300000000, 0x6bcaf91200000000, 0xa0a3bf3600000000, |
| 5515 | 0xbd5e0a3700000000, 0x9a59d43500000000, 0x87a4613400000000, |
| 5516 | 0xd457683000000000, 0xc9aadd3100000000, 0xeead033300000000, |
| 5517 | 0xf350b63200000000, 0x484b103b00000000, 0x55b6a53a00000000, |
| 5518 | 0x72b17b3800000000, 0x6f4cce3900000000, 0x3cbfc73d00000000, |
| 5519 | 0x2142723c00000000, 0x0645ac3e00000000, 0x1bb8193f00000000, |
| 5520 | 0x7072e02d00000000, 0x6d8f552c00000000, 0x4a888b2e00000000, |
| 5521 | 0x57753e2f00000000, 0x0486372b00000000, 0x197b822a00000000, |
| 5522 | 0x3e7c5c2800000000, 0x2381e92900000000, 0x989a4f2000000000, |
| 5523 | 0x8567fa2100000000, 0xa260242300000000, 0xbf9d912200000000, |
| 5524 | 0xec6e982600000000, 0xf1932d2700000000, 0xd694f32500000000, |
| 5525 | 0xcb69462400000000, 0x40477f6d00000000, 0x5dbaca6c00000000, |
| 5526 | 0x7abd146e00000000, 0x6740a16f00000000, 0x34b3a86b00000000, |
| 5527 | 0x294e1d6a00000000, 0x0e49c36800000000, 0x13b4766900000000, |
| 5528 | 0xa8afd06000000000, 0xb552656100000000, 0x9255bb6300000000, |
| 5529 | 0x8fa80e6200000000, 0xdc5b076600000000, 0xc1a6b26700000000, |
| 5530 | 0xe6a16c6500000000, 0xfb5cd96400000000, 0x9096207600000000, |
| 5531 | 0x8d6b957700000000, 0xaa6c4b7500000000, 0xb791fe7400000000, |
| 5532 | 0xe462f77000000000, 0xf99f427100000000, 0xde989c7300000000, |
| 5533 | 0xc365297200000000, 0x787e8f7b00000000, 0x65833a7a00000000, |
| 5534 | 0x4284e47800000000, 0x5f79517900000000, 0x0c8a587d00000000, |
| 5535 | 0x1177ed7c00000000, 0x3670337e00000000, 0x2b8d867f00000000, |
| 5536 | 0xe0e4c05b00000000, 0xfd19755a00000000, 0xda1eab5800000000, |
| 5537 | 0xc7e31e5900000000, 0x9410175d00000000, 0x89eda25c00000000, |
| 5538 | 0xaeea7c5e00000000, 0xb317c95f00000000, 0x080c6f5600000000, |
| 5539 | 0x15f1da5700000000, 0x32f6045500000000, 0x2f0bb15400000000, |
| 5540 | 0x7cf8b85000000000, 0x61050d5100000000, 0x4602d35300000000, |
| 5541 | 0x5bff665200000000, 0x30359f4000000000, 0x2dc82a4100000000, |
| 5542 | 0x0acff44300000000, 0x1732414200000000, 0x44c1484600000000, |
| 5543 | 0x593cfd4700000000, 0x7e3b234500000000, 0x63c6964400000000, |
| 5544 | 0xd8dd304d00000000, 0xc520854c00000000, 0xe2275b4e00000000, |
| 5545 | 0xffdaee4f00000000, 0xac29e74b00000000, 0xb1d4524a00000000, |
| 5546 | 0x96d38c4800000000, 0x8b2e394900000000, 0x808efeda00000000, |
| 5547 | 0x9d734bdb00000000, 0xba7495d900000000, 0xa78920d800000000, |
| 5548 | 0xf47a29dc00000000, 0xe9879cdd00000000, 0xce8042df00000000, |
| 5549 | 0xd37df7de00000000, 0x686651d700000000, 0x759be4d600000000, |
| 5550 | 0x529c3ad400000000, 0x4f618fd500000000, 0x1c9286d100000000, |
| 5551 | 0x016f33d000000000, 0x2668edd200000000, 0x3b9558d300000000, |
| 5552 | 0x505fa1c100000000, 0x4da214c000000000, 0x6aa5cac200000000, |
| 5553 | 0x77587fc300000000, 0x24ab76c700000000, 0x3956c3c600000000, |
| 5554 | 0x1e511dc400000000, 0x03aca8c500000000, 0xb8b70ecc00000000, |
| 5555 | 0xa54abbcd00000000, 0x824d65cf00000000, 0x9fb0d0ce00000000, |
| 5556 | 0xcc43d9ca00000000, 0xd1be6ccb00000000, 0xf6b9b2c900000000, |
| 5557 | 0xeb4407c800000000, 0x202d41ec00000000, 0x3dd0f4ed00000000, |
| 5558 | 0x1ad72aef00000000, 0x072a9fee00000000, 0x54d996ea00000000, |
| 5559 | 0x492423eb00000000, 0x6e23fde900000000, 0x73de48e800000000, |
| 5560 | 0xc8c5eee100000000, 0xd5385be000000000, 0xf23f85e200000000, |
| 5561 | 0xefc230e300000000, 0xbc3139e700000000, 0xa1cc8ce600000000, |
| 5562 | 0x86cb52e400000000, 0x9b36e7e500000000, 0xf0fc1ef700000000, |
| 5563 | 0xed01abf600000000, 0xca0675f400000000, 0xd7fbc0f500000000, |
| 5564 | 0x8408c9f100000000, 0x99f57cf000000000, 0xbef2a2f200000000, |
| 5565 | 0xa30f17f300000000, 0x1814b1fa00000000, 0x05e904fb00000000, |
| 5566 | 0x22eedaf900000000, 0x3f136ff800000000, 0x6ce066fc00000000, |
| 5567 | 0x711dd3fd00000000, 0x561a0dff00000000, 0x4be7b8fe00000000, |
| 5568 | 0xc0c981b700000000, 0xdd3434b600000000, 0xfa33eab400000000, |
| 5569 | 0xe7ce5fb500000000, 0xb43d56b100000000, 0xa9c0e3b000000000, |
| 5570 | 0x8ec73db200000000, 0x933a88b300000000, 0x28212eba00000000, |
| 5571 | 0x35dc9bbb00000000, 0x12db45b900000000, 0x0f26f0b800000000, |
| 5572 | 0x5cd5f9bc00000000, 0x41284cbd00000000, 0x662f92bf00000000, |
| 5573 | 0x7bd227be00000000, 0x1018deac00000000, 0x0de56bad00000000, |
| 5574 | 0x2ae2b5af00000000, 0x371f00ae00000000, 0x64ec09aa00000000, |
| 5575 | 0x7911bcab00000000, 0x5e1662a900000000, 0x43ebd7a800000000, |
| 5576 | 0xf8f071a100000000, 0xe50dc4a000000000, 0xc20a1aa200000000, |
| 5577 | 0xdff7afa300000000, 0x8c04a6a700000000, 0x91f913a600000000, |
| 5578 | 0xb6fecda400000000, 0xab0378a500000000, 0x606a3e8100000000, |
| 5579 | 0x7d978b8000000000, 0x5a90558200000000, 0x476de08300000000, |
| 5580 | 0x149ee98700000000, 0x09635c8600000000, 0x2e64828400000000, |
| 5581 | 0x3399378500000000, 0x8882918c00000000, 0x957f248d00000000, |
| 5582 | 0xb278fa8f00000000, 0xaf854f8e00000000, 0xfc76468a00000000, |
| 5583 | 0xe18bf38b00000000, 0xc68c2d8900000000, 0xdb71988800000000, |
| 5584 | 0xb0bb619a00000000, 0xad46d49b00000000, 0x8a410a9900000000, |
| 5585 | 0x97bcbf9800000000, 0xc44fb69c00000000, 0xd9b2039d00000000, |
| 5586 | 0xfeb5dd9f00000000, 0xe348689e00000000, 0x5853ce9700000000, |
| 5587 | 0x45ae7b9600000000, 0x62a9a59400000000, 0x7f54109500000000, |
| 5588 | 0x2ca7199100000000, 0x315aac9000000000, 0x165d729200000000, |
| 5589 | 0x0ba0c79300000000}, |
| 5590 | {0x0000000000000000, 0x24d9076300000000, 0x48b20fc600000000, |
| 5591 | 0x6c6b08a500000000, 0xd1626e5700000000, 0xf5bb693400000000, |
| 5592 | 0x99d0619100000000, 0xbd0966f200000000, 0xa2c5dcae00000000, |
| 5593 | 0x861cdbcd00000000, 0xea77d36800000000, 0xceaed40b00000000, |
| 5594 | 0x73a7b2f900000000, 0x577eb59a00000000, 0x3b15bd3f00000000, |
| 5595 | 0x1fccba5c00000000, 0x058dc88600000000, 0x2154cfe500000000, |
| 5596 | 0x4d3fc74000000000, 0x69e6c02300000000, 0xd4efa6d100000000, |
| 5597 | 0xf036a1b200000000, 0x9c5da91700000000, 0xb884ae7400000000, |
| 5598 | 0xa748142800000000, 0x8391134b00000000, 0xeffa1bee00000000, |
| 5599 | 0xcb231c8d00000000, 0x762a7a7f00000000, 0x52f37d1c00000000, |
| 5600 | 0x3e9875b900000000, 0x1a4172da00000000, 0x4b1ce0d600000000, |
| 5601 | 0x6fc5e7b500000000, 0x03aeef1000000000, 0x2777e87300000000, |
| 5602 | 0x9a7e8e8100000000, 0xbea789e200000000, 0xd2cc814700000000, |
| 5603 | 0xf615862400000000, 0xe9d93c7800000000, 0xcd003b1b00000000, |
| 5604 | 0xa16b33be00000000, 0x85b234dd00000000, 0x38bb522f00000000, |
| 5605 | 0x1c62554c00000000, 0x70095de900000000, 0x54d05a8a00000000, |
| 5606 | 0x4e91285000000000, 0x6a482f3300000000, 0x0623279600000000, |
| 5607 | 0x22fa20f500000000, 0x9ff3460700000000, 0xbb2a416400000000, |
| 5608 | 0xd74149c100000000, 0xf3984ea200000000, 0xec54f4fe00000000, |
| 5609 | 0xc88df39d00000000, 0xa4e6fb3800000000, 0x803ffc5b00000000, |
| 5610 | 0x3d369aa900000000, 0x19ef9dca00000000, 0x7584956f00000000, |
| 5611 | 0x515d920c00000000, 0xd73eb17600000000, 0xf3e7b61500000000, |
| 5612 | 0x9f8cbeb000000000, 0xbb55b9d300000000, 0x065cdf2100000000, |
| 5613 | 0x2285d84200000000, 0x4eeed0e700000000, 0x6a37d78400000000, |
| 5614 | 0x75fb6dd800000000, 0x51226abb00000000, 0x3d49621e00000000, |
| 5615 | 0x1990657d00000000, 0xa499038f00000000, 0x804004ec00000000, |
| 5616 | 0xec2b0c4900000000, 0xc8f20b2a00000000, 0xd2b379f000000000, |
| 5617 | 0xf66a7e9300000000, 0x9a01763600000000, 0xbed8715500000000, |
| 5618 | 0x03d117a700000000, 0x270810c400000000, 0x4b63186100000000, |
| 5619 | 0x6fba1f0200000000, 0x7076a55e00000000, 0x54afa23d00000000, |
| 5620 | 0x38c4aa9800000000, 0x1c1dadfb00000000, 0xa114cb0900000000, |
| 5621 | 0x85cdcc6a00000000, 0xe9a6c4cf00000000, 0xcd7fc3ac00000000, |
| 5622 | 0x9c2251a000000000, 0xb8fb56c300000000, 0xd4905e6600000000, |
| 5623 | 0xf049590500000000, 0x4d403ff700000000, 0x6999389400000000, |
| 5624 | 0x05f2303100000000, 0x212b375200000000, 0x3ee78d0e00000000, |
| 5625 | 0x1a3e8a6d00000000, 0x765582c800000000, 0x528c85ab00000000, |
| 5626 | 0xef85e35900000000, 0xcb5ce43a00000000, 0xa737ec9f00000000, |
| 5627 | 0x83eeebfc00000000, 0x99af992600000000, 0xbd769e4500000000, |
| 5628 | 0xd11d96e000000000, 0xf5c4918300000000, 0x48cdf77100000000, |
| 5629 | 0x6c14f01200000000, 0x007ff8b700000000, 0x24a6ffd400000000, |
| 5630 | 0x3b6a458800000000, 0x1fb342eb00000000, 0x73d84a4e00000000, |
| 5631 | 0x57014d2d00000000, 0xea082bdf00000000, 0xced12cbc00000000, |
| 5632 | 0xa2ba241900000000, 0x8663237a00000000, 0xae7d62ed00000000, |
| 5633 | 0x8aa4658e00000000, 0xe6cf6d2b00000000, 0xc2166a4800000000, |
| 5634 | 0x7f1f0cba00000000, 0x5bc60bd900000000, 0x37ad037c00000000, |
| 5635 | 0x1374041f00000000, 0x0cb8be4300000000, 0x2861b92000000000, |
| 5636 | 0x440ab18500000000, 0x60d3b6e600000000, 0xdddad01400000000, |
| 5637 | 0xf903d77700000000, 0x9568dfd200000000, 0xb1b1d8b100000000, |
| 5638 | 0xabf0aa6b00000000, 0x8f29ad0800000000, 0xe342a5ad00000000, |
| 5639 | 0xc79ba2ce00000000, 0x7a92c43c00000000, 0x5e4bc35f00000000, |
| 5640 | 0x3220cbfa00000000, 0x16f9cc9900000000, 0x093576c500000000, |
| 5641 | 0x2dec71a600000000, 0x4187790300000000, 0x655e7e6000000000, |
| 5642 | 0xd857189200000000, 0xfc8e1ff100000000, 0x90e5175400000000, |
| 5643 | 0xb43c103700000000, 0xe561823b00000000, 0xc1b8855800000000, |
| 5644 | 0xadd38dfd00000000, 0x890a8a9e00000000, 0x3403ec6c00000000, |
| 5645 | 0x10daeb0f00000000, 0x7cb1e3aa00000000, 0x5868e4c900000000, |
| 5646 | 0x47a45e9500000000, 0x637d59f600000000, 0x0f16515300000000, |
| 5647 | 0x2bcf563000000000, 0x96c630c200000000, 0xb21f37a100000000, |
| 5648 | 0xde743f0400000000, 0xfaad386700000000, 0xe0ec4abd00000000, |
| 5649 | 0xc4354dde00000000, 0xa85e457b00000000, 0x8c87421800000000, |
| 5650 | 0x318e24ea00000000, 0x1557238900000000, 0x793c2b2c00000000, |
| 5651 | 0x5de52c4f00000000, 0x4229961300000000, 0x66f0917000000000, |
| 5652 | 0x0a9b99d500000000, 0x2e429eb600000000, 0x934bf84400000000, |
| 5653 | 0xb792ff2700000000, 0xdbf9f78200000000, 0xff20f0e100000000, |
| 5654 | 0x7943d39b00000000, 0x5d9ad4f800000000, 0x31f1dc5d00000000, |
| 5655 | 0x1528db3e00000000, 0xa821bdcc00000000, 0x8cf8baaf00000000, |
| 5656 | 0xe093b20a00000000, 0xc44ab56900000000, 0xdb860f3500000000, |
| 5657 | 0xff5f085600000000, 0x933400f300000000, 0xb7ed079000000000, |
| 5658 | 0x0ae4616200000000, 0x2e3d660100000000, 0x42566ea400000000, |
| 5659 | 0x668f69c700000000, 0x7cce1b1d00000000, 0x58171c7e00000000, |
| 5660 | 0x347c14db00000000, 0x10a513b800000000, 0xadac754a00000000, |
| 5661 | 0x8975722900000000, 0xe51e7a8c00000000, 0xc1c77def00000000, |
| 5662 | 0xde0bc7b300000000, 0xfad2c0d000000000, 0x96b9c87500000000, |
| 5663 | 0xb260cf1600000000, 0x0f69a9e400000000, 0x2bb0ae8700000000, |
| 5664 | 0x47dba62200000000, 0x6302a14100000000, 0x325f334d00000000, |
| 5665 | 0x1686342e00000000, 0x7aed3c8b00000000, 0x5e343be800000000, |
| 5666 | 0xe33d5d1a00000000, 0xc7e45a7900000000, 0xab8f52dc00000000, |
| 5667 | 0x8f5655bf00000000, 0x909aefe300000000, 0xb443e88000000000, |
| 5668 | 0xd828e02500000000, 0xfcf1e74600000000, 0x41f881b400000000, |
| 5669 | 0x652186d700000000, 0x094a8e7200000000, 0x2d93891100000000, |
| 5670 | 0x37d2fbcb00000000, 0x130bfca800000000, 0x7f60f40d00000000, |
| 5671 | 0x5bb9f36e00000000, 0xe6b0959c00000000, 0xc26992ff00000000, |
| 5672 | 0xae029a5a00000000, 0x8adb9d3900000000, 0x9517276500000000, |
| 5673 | 0xb1ce200600000000, 0xdda528a300000000, 0xf97c2fc000000000, |
| 5674 | 0x4475493200000000, 0x60ac4e5100000000, 0x0cc746f400000000, |
| 5675 | 0x281e419700000000}, |
| 5676 | {0x0000000000000000, 0x08e3603c00000000, 0x10c6c17800000000, |
| 5677 | 0x1825a14400000000, 0x208c83f100000000, 0x286fe3cd00000000, |
| 5678 | 0x304a428900000000, 0x38a922b500000000, 0x011e763800000000, |
| 5679 | 0x09fd160400000000, 0x11d8b74000000000, 0x193bd77c00000000, |
| 5680 | 0x2192f5c900000000, 0x297195f500000000, 0x315434b100000000, |
| 5681 | 0x39b7548d00000000, 0x023cec7000000000, 0x0adf8c4c00000000, |
| 5682 | 0x12fa2d0800000000, 0x1a194d3400000000, 0x22b06f8100000000, |
| 5683 | 0x2a530fbd00000000, 0x3276aef900000000, 0x3a95cec500000000, |
| 5684 | 0x03229a4800000000, 0x0bc1fa7400000000, 0x13e45b3000000000, |
| 5685 | 0x1b073b0c00000000, 0x23ae19b900000000, 0x2b4d798500000000, |
| 5686 | 0x3368d8c100000000, 0x3b8bb8fd00000000, 0x0478d8e100000000, |
| 5687 | 0x0c9bb8dd00000000, 0x14be199900000000, 0x1c5d79a500000000, |
| 5688 | 0x24f45b1000000000, 0x2c173b2c00000000, 0x34329a6800000000, |
| 5689 | 0x3cd1fa5400000000, 0x0566aed900000000, 0x0d85cee500000000, |
| 5690 | 0x15a06fa100000000, 0x1d430f9d00000000, 0x25ea2d2800000000, |
| 5691 | 0x2d094d1400000000, 0x352cec5000000000, 0x3dcf8c6c00000000, |
| 5692 | 0x0644349100000000, 0x0ea754ad00000000, 0x1682f5e900000000, |
| 5693 | 0x1e6195d500000000, 0x26c8b76000000000, 0x2e2bd75c00000000, |
| 5694 | 0x360e761800000000, 0x3eed162400000000, 0x075a42a900000000, |
| 5695 | 0x0fb9229500000000, 0x179c83d100000000, 0x1f7fe3ed00000000, |
| 5696 | 0x27d6c15800000000, 0x2f35a16400000000, 0x3710002000000000, |
| 5697 | 0x3ff3601c00000000, 0x49f6c11800000000, 0x4115a12400000000, |
| 5698 | 0x5930006000000000, 0x51d3605c00000000, 0x697a42e900000000, |
| 5699 | 0x619922d500000000, 0x79bc839100000000, 0x715fe3ad00000000, |
| 5700 | 0x48e8b72000000000, 0x400bd71c00000000, 0x582e765800000000, |
| 5701 | 0x50cd166400000000, 0x686434d100000000, 0x608754ed00000000, |
| 5702 | 0x78a2f5a900000000, 0x7041959500000000, 0x4bca2d6800000000, |
| 5703 | 0x43294d5400000000, 0x5b0cec1000000000, 0x53ef8c2c00000000, |
| 5704 | 0x6b46ae9900000000, 0x63a5cea500000000, 0x7b806fe100000000, |
| 5705 | 0x73630fdd00000000, 0x4ad45b5000000000, 0x42373b6c00000000, |
| 5706 | 0x5a129a2800000000, 0x52f1fa1400000000, 0x6a58d8a100000000, |
| 5707 | 0x62bbb89d00000000, 0x7a9e19d900000000, 0x727d79e500000000, |
| 5708 | 0x4d8e19f900000000, 0x456d79c500000000, 0x5d48d88100000000, |
| 5709 | 0x55abb8bd00000000, 0x6d029a0800000000, 0x65e1fa3400000000, |
| 5710 | 0x7dc45b7000000000, 0x75273b4c00000000, 0x4c906fc100000000, |
| 5711 | 0x44730ffd00000000, 0x5c56aeb900000000, 0x54b5ce8500000000, |
| 5712 | 0x6c1cec3000000000, 0x64ff8c0c00000000, 0x7cda2d4800000000, |
| 5713 | 0x74394d7400000000, 0x4fb2f58900000000, 0x475195b500000000, |
| 5714 | 0x5f7434f100000000, 0x579754cd00000000, 0x6f3e767800000000, |
| 5715 | 0x67dd164400000000, 0x7ff8b70000000000, 0x771bd73c00000000, |
| 5716 | 0x4eac83b100000000, 0x464fe38d00000000, 0x5e6a42c900000000, |
| 5717 | 0x568922f500000000, 0x6e20004000000000, 0x66c3607c00000000, |
| 5718 | 0x7ee6c13800000000, 0x7605a10400000000, 0x92ec833100000000, |
| 5719 | 0x9a0fe30d00000000, 0x822a424900000000, 0x8ac9227500000000, |
| 5720 | 0xb26000c000000000, 0xba8360fc00000000, 0xa2a6c1b800000000, |
| 5721 | 0xaa45a18400000000, 0x93f2f50900000000, 0x9b11953500000000, |
| 5722 | 0x8334347100000000, 0x8bd7544d00000000, 0xb37e76f800000000, |
| 5723 | 0xbb9d16c400000000, 0xa3b8b78000000000, 0xab5bd7bc00000000, |
| 5724 | 0x90d06f4100000000, 0x98330f7d00000000, 0x8016ae3900000000, |
| 5725 | 0x88f5ce0500000000, 0xb05cecb000000000, 0xb8bf8c8c00000000, |
| 5726 | 0xa09a2dc800000000, 0xa8794df400000000, 0x91ce197900000000, |
| 5727 | 0x992d794500000000, 0x8108d80100000000, 0x89ebb83d00000000, |
| 5728 | 0xb1429a8800000000, 0xb9a1fab400000000, 0xa1845bf000000000, |
| 5729 | 0xa9673bcc00000000, 0x96945bd000000000, 0x9e773bec00000000, |
| 5730 | 0x86529aa800000000, 0x8eb1fa9400000000, 0xb618d82100000000, |
| 5731 | 0xbefbb81d00000000, 0xa6de195900000000, 0xae3d796500000000, |
| 5732 | 0x978a2de800000000, 0x9f694dd400000000, 0x874cec9000000000, |
| 5733 | 0x8faf8cac00000000, 0xb706ae1900000000, 0xbfe5ce2500000000, |
| 5734 | 0xa7c06f6100000000, 0xaf230f5d00000000, 0x94a8b7a000000000, |
| 5735 | 0x9c4bd79c00000000, 0x846e76d800000000, 0x8c8d16e400000000, |
| 5736 | 0xb424345100000000, 0xbcc7546d00000000, 0xa4e2f52900000000, |
| 5737 | 0xac01951500000000, 0x95b6c19800000000, 0x9d55a1a400000000, |
| 5738 | 0x857000e000000000, 0x8d9360dc00000000, 0xb53a426900000000, |
| 5739 | 0xbdd9225500000000, 0xa5fc831100000000, 0xad1fe32d00000000, |
| 5740 | 0xdb1a422900000000, 0xd3f9221500000000, 0xcbdc835100000000, |
| 5741 | 0xc33fe36d00000000, 0xfb96c1d800000000, 0xf375a1e400000000, |
| 5742 | 0xeb5000a000000000, 0xe3b3609c00000000, 0xda04341100000000, |
| 5743 | 0xd2e7542d00000000, 0xcac2f56900000000, 0xc221955500000000, |
| 5744 | 0xfa88b7e000000000, 0xf26bd7dc00000000, 0xea4e769800000000, |
| 5745 | 0xe2ad16a400000000, 0xd926ae5900000000, 0xd1c5ce6500000000, |
| 5746 | 0xc9e06f2100000000, 0xc1030f1d00000000, 0xf9aa2da800000000, |
| 5747 | 0xf1494d9400000000, 0xe96cecd000000000, 0xe18f8cec00000000, |
| 5748 | 0xd838d86100000000, 0xd0dbb85d00000000, 0xc8fe191900000000, |
| 5749 | 0xc01d792500000000, 0xf8b45b9000000000, 0xf0573bac00000000, |
| 5750 | 0xe8729ae800000000, 0xe091fad400000000, 0xdf629ac800000000, |
| 5751 | 0xd781faf400000000, 0xcfa45bb000000000, 0xc7473b8c00000000, |
| 5752 | 0xffee193900000000, 0xf70d790500000000, 0xef28d84100000000, |
| 5753 | 0xe7cbb87d00000000, 0xde7cecf000000000, 0xd69f8ccc00000000, |
| 5754 | 0xceba2d8800000000, 0xc6594db400000000, 0xfef06f0100000000, |
| 5755 | 0xf6130f3d00000000, 0xee36ae7900000000, 0xe6d5ce4500000000, |
| 5756 | 0xdd5e76b800000000, 0xd5bd168400000000, 0xcd98b7c000000000, |
| 5757 | 0xc57bd7fc00000000, 0xfdd2f54900000000, 0xf531957500000000, |
| 5758 | 0xed14343100000000, 0xe5f7540d00000000, 0xdc40008000000000, |
| 5759 | 0xd4a360bc00000000, 0xcc86c1f800000000, 0xc465a1c400000000, |
| 5760 | 0xfccc837100000000, 0xf42fe34d00000000, 0xec0a420900000000, |
| 5761 | 0xe4e9223500000000}, |
| 5762 | {0x0000000000000000, 0xd1e8e70e00000000, 0xa2d1cf1d00000000, |
| 5763 | 0x7339281300000000, 0x44a39f3b00000000, 0x954b783500000000, |
| 5764 | 0xe672502600000000, 0x379ab72800000000, 0x88463f7700000000, |
| 5765 | 0x59aed87900000000, 0x2a97f06a00000000, 0xfb7f176400000000, |
| 5766 | 0xcce5a04c00000000, 0x1d0d474200000000, 0x6e346f5100000000, |
| 5767 | 0xbfdc885f00000000, 0x108d7eee00000000, 0xc16599e000000000, |
| 5768 | 0xb25cb1f300000000, 0x63b456fd00000000, 0x542ee1d500000000, |
| 5769 | 0x85c606db00000000, 0xf6ff2ec800000000, 0x2717c9c600000000, |
| 5770 | 0x98cb419900000000, 0x4923a69700000000, 0x3a1a8e8400000000, |
| 5771 | 0xebf2698a00000000, 0xdc68dea200000000, 0x0d8039ac00000000, |
| 5772 | 0x7eb911bf00000000, 0xaf51f6b100000000, 0x611c8c0700000000, |
| 5773 | 0xb0f46b0900000000, 0xc3cd431a00000000, 0x1225a41400000000, |
| 5774 | 0x25bf133c00000000, 0xf457f43200000000, 0x876edc2100000000, |
| 5775 | 0x56863b2f00000000, 0xe95ab37000000000, 0x38b2547e00000000, |
| 5776 | 0x4b8b7c6d00000000, 0x9a639b6300000000, 0xadf92c4b00000000, |
| 5777 | 0x7c11cb4500000000, 0x0f28e35600000000, 0xdec0045800000000, |
| 5778 | 0x7191f2e900000000, 0xa07915e700000000, 0xd3403df400000000, |
| 5779 | 0x02a8dafa00000000, 0x35326dd200000000, 0xe4da8adc00000000, |
| 5780 | 0x97e3a2cf00000000, 0x460b45c100000000, 0xf9d7cd9e00000000, |
| 5781 | 0x283f2a9000000000, 0x5b06028300000000, 0x8aeee58d00000000, |
| 5782 | 0xbd7452a500000000, 0x6c9cb5ab00000000, 0x1fa59db800000000, |
| 5783 | 0xce4d7ab600000000, 0xc238180f00000000, 0x13d0ff0100000000, |
| 5784 | 0x60e9d71200000000, 0xb101301c00000000, 0x869b873400000000, |
| 5785 | 0x5773603a00000000, 0x244a482900000000, 0xf5a2af2700000000, |
| 5786 | 0x4a7e277800000000, 0x9b96c07600000000, 0xe8afe86500000000, |
| 5787 | 0x39470f6b00000000, 0x0eddb84300000000, 0xdf355f4d00000000, |
| 5788 | 0xac0c775e00000000, 0x7de4905000000000, 0xd2b566e100000000, |
| 5789 | 0x035d81ef00000000, 0x7064a9fc00000000, 0xa18c4ef200000000, |
| 5790 | 0x9616f9da00000000, 0x47fe1ed400000000, 0x34c736c700000000, |
| 5791 | 0xe52fd1c900000000, 0x5af3599600000000, 0x8b1bbe9800000000, |
| 5792 | 0xf822968b00000000, 0x29ca718500000000, 0x1e50c6ad00000000, |
| 5793 | 0xcfb821a300000000, 0xbc8109b000000000, 0x6d69eebe00000000, |
| 5794 | 0xa324940800000000, 0x72cc730600000000, 0x01f55b1500000000, |
| 5795 | 0xd01dbc1b00000000, 0xe7870b3300000000, 0x366fec3d00000000, |
| 5796 | 0x4556c42e00000000, 0x94be232000000000, 0x2b62ab7f00000000, |
| 5797 | 0xfa8a4c7100000000, 0x89b3646200000000, 0x585b836c00000000, |
| 5798 | 0x6fc1344400000000, 0xbe29d34a00000000, 0xcd10fb5900000000, |
| 5799 | 0x1cf81c5700000000, 0xb3a9eae600000000, 0x62410de800000000, |
| 5800 | 0x117825fb00000000, 0xc090c2f500000000, 0xf70a75dd00000000, |
| 5801 | 0x26e292d300000000, 0x55dbbac000000000, 0x84335dce00000000, |
| 5802 | 0x3befd59100000000, 0xea07329f00000000, 0x993e1a8c00000000, |
| 5803 | 0x48d6fd8200000000, 0x7f4c4aaa00000000, 0xaea4ada400000000, |
| 5804 | 0xdd9d85b700000000, 0x0c7562b900000000, 0x8471301e00000000, |
| 5805 | 0x5599d71000000000, 0x26a0ff0300000000, 0xf748180d00000000, |
| 5806 | 0xc0d2af2500000000, 0x113a482b00000000, 0x6203603800000000, |
| 5807 | 0xb3eb873600000000, 0x0c370f6900000000, 0xdddfe86700000000, |
| 5808 | 0xaee6c07400000000, 0x7f0e277a00000000, 0x4894905200000000, |
| 5809 | 0x997c775c00000000, 0xea455f4f00000000, 0x3badb84100000000, |
| 5810 | 0x94fc4ef000000000, 0x4514a9fe00000000, 0x362d81ed00000000, |
| 5811 | 0xe7c566e300000000, 0xd05fd1cb00000000, 0x01b736c500000000, |
| 5812 | 0x728e1ed600000000, 0xa366f9d800000000, 0x1cba718700000000, |
| 5813 | 0xcd52968900000000, 0xbe6bbe9a00000000, 0x6f83599400000000, |
| 5814 | 0x5819eebc00000000, 0x89f109b200000000, 0xfac821a100000000, |
| 5815 | 0x2b20c6af00000000, 0xe56dbc1900000000, 0x34855b1700000000, |
| 5816 | 0x47bc730400000000, 0x9654940a00000000, 0xa1ce232200000000, |
| 5817 | 0x7026c42c00000000, 0x031fec3f00000000, 0xd2f70b3100000000, |
| 5818 | 0x6d2b836e00000000, 0xbcc3646000000000, 0xcffa4c7300000000, |
| 5819 | 0x1e12ab7d00000000, 0x29881c5500000000, 0xf860fb5b00000000, |
| 5820 | 0x8b59d34800000000, 0x5ab1344600000000, 0xf5e0c2f700000000, |
| 5821 | 0x240825f900000000, 0x57310dea00000000, 0x86d9eae400000000, |
| 5822 | 0xb1435dcc00000000, 0x60abbac200000000, 0x139292d100000000, |
| 5823 | 0xc27a75df00000000, 0x7da6fd8000000000, 0xac4e1a8e00000000, |
| 5824 | 0xdf77329d00000000, 0x0e9fd59300000000, 0x390562bb00000000, |
| 5825 | 0xe8ed85b500000000, 0x9bd4ada600000000, 0x4a3c4aa800000000, |
| 5826 | 0x4649281100000000, 0x97a1cf1f00000000, 0xe498e70c00000000, |
| 5827 | 0x3570000200000000, 0x02eab72a00000000, 0xd302502400000000, |
| 5828 | 0xa03b783700000000, 0x71d39f3900000000, 0xce0f176600000000, |
| 5829 | 0x1fe7f06800000000, 0x6cded87b00000000, 0xbd363f7500000000, |
| 5830 | 0x8aac885d00000000, 0x5b446f5300000000, 0x287d474000000000, |
| 5831 | 0xf995a04e00000000, 0x56c456ff00000000, 0x872cb1f100000000, |
| 5832 | 0xf41599e200000000, 0x25fd7eec00000000, 0x1267c9c400000000, |
| 5833 | 0xc38f2eca00000000, 0xb0b606d900000000, 0x615ee1d700000000, |
| 5834 | 0xde82698800000000, 0x0f6a8e8600000000, 0x7c53a69500000000, |
| 5835 | 0xadbb419b00000000, 0x9a21f6b300000000, 0x4bc911bd00000000, |
| 5836 | 0x38f039ae00000000, 0xe918dea000000000, 0x2755a41600000000, |
| 5837 | 0xf6bd431800000000, 0x85846b0b00000000, 0x546c8c0500000000, |
| 5838 | 0x63f63b2d00000000, 0xb21edc2300000000, 0xc127f43000000000, |
| 5839 | 0x10cf133e00000000, 0xaf139b6100000000, 0x7efb7c6f00000000, |
| 5840 | 0x0dc2547c00000000, 0xdc2ab37200000000, 0xebb0045a00000000, |
| 5841 | 0x3a58e35400000000, 0x4961cb4700000000, 0x98892c4900000000, |
| 5842 | 0x37d8daf800000000, 0xe6303df600000000, 0x950915e500000000, |
| 5843 | 0x44e1f2eb00000000, 0x737b45c300000000, 0xa293a2cd00000000, |
| 5844 | 0xd1aa8ade00000000, 0x00426dd000000000, 0xbf9ee58f00000000, |
| 5845 | 0x6e76028100000000, 0x1d4f2a9200000000, 0xcca7cd9c00000000, |
| 5846 | 0xfb3d7ab400000000, 0x2ad59dba00000000, 0x59ecb5a900000000, |
| 5847 | 0x880452a700000000}, |
| 5848 | {0x0000000000000000, 0xaa05daf100000000, 0x150dc53800000000, |
| 5849 | 0xbf081fc900000000, 0x2a1a8a7100000000, 0x801f508000000000, |
| 5850 | 0x3f174f4900000000, 0x951295b800000000, 0x543414e300000000, |
| 5851 | 0xfe31ce1200000000, 0x4139d1db00000000, 0xeb3c0b2a00000000, |
| 5852 | 0x7e2e9e9200000000, 0xd42b446300000000, 0x6b235baa00000000, |
| 5853 | 0xc126815b00000000, 0xe96e591d00000000, 0x436b83ec00000000, |
| 5854 | 0xfc639c2500000000, 0x566646d400000000, 0xc374d36c00000000, |
| 5855 | 0x6971099d00000000, 0xd679165400000000, 0x7c7ccca500000000, |
| 5856 | 0xbd5a4dfe00000000, 0x175f970f00000000, 0xa85788c600000000, |
| 5857 | 0x0252523700000000, 0x9740c78f00000000, 0x3d451d7e00000000, |
| 5858 | 0x824d02b700000000, 0x2848d84600000000, 0xd2ddb23a00000000, |
| 5859 | 0x78d868cb00000000, 0xc7d0770200000000, 0x6dd5adf300000000, |
| 5860 | 0xf8c7384b00000000, 0x52c2e2ba00000000, 0xedcafd7300000000, |
| 5861 | 0x47cf278200000000, 0x86e9a6d900000000, 0x2cec7c2800000000, |
| 5862 | 0x93e463e100000000, 0x39e1b91000000000, 0xacf32ca800000000, |
| 5863 | 0x06f6f65900000000, 0xb9fee99000000000, 0x13fb336100000000, |
| 5864 | 0x3bb3eb2700000000, 0x91b631d600000000, 0x2ebe2e1f00000000, |
| 5865 | 0x84bbf4ee00000000, 0x11a9615600000000, 0xbbacbba700000000, |
| 5866 | 0x04a4a46e00000000, 0xaea17e9f00000000, 0x6f87ffc400000000, |
| 5867 | 0xc582253500000000, 0x7a8a3afc00000000, 0xd08fe00d00000000, |
| 5868 | 0x459d75b500000000, 0xef98af4400000000, 0x5090b08d00000000, |
| 5869 | 0xfa956a7c00000000, 0xa4bb657500000000, 0x0ebebf8400000000, |
| 5870 | 0xb1b6a04d00000000, 0x1bb37abc00000000, 0x8ea1ef0400000000, |
| 5871 | 0x24a435f500000000, 0x9bac2a3c00000000, 0x31a9f0cd00000000, |
| 5872 | 0xf08f719600000000, 0x5a8aab6700000000, 0xe582b4ae00000000, |
| 5873 | 0x4f876e5f00000000, 0xda95fbe700000000, 0x7090211600000000, |
| 5874 | 0xcf983edf00000000, 0x659de42e00000000, 0x4dd53c6800000000, |
| 5875 | 0xe7d0e69900000000, 0x58d8f95000000000, 0xf2dd23a100000000, |
| 5876 | 0x67cfb61900000000, 0xcdca6ce800000000, 0x72c2732100000000, |
| 5877 | 0xd8c7a9d000000000, 0x19e1288b00000000, 0xb3e4f27a00000000, |
| 5878 | 0x0cecedb300000000, 0xa6e9374200000000, 0x33fba2fa00000000, |
| 5879 | 0x99fe780b00000000, 0x26f667c200000000, 0x8cf3bd3300000000, |
| 5880 | 0x7666d74f00000000, 0xdc630dbe00000000, 0x636b127700000000, |
| 5881 | 0xc96ec88600000000, 0x5c7c5d3e00000000, 0xf67987cf00000000, |
| 5882 | 0x4971980600000000, 0xe37442f700000000, 0x2252c3ac00000000, |
| 5883 | 0x8857195d00000000, 0x375f069400000000, 0x9d5adc6500000000, |
| 5884 | 0x084849dd00000000, 0xa24d932c00000000, 0x1d458ce500000000, |
| 5885 | 0xb740561400000000, 0x9f088e5200000000, 0x350d54a300000000, |
| 5886 | 0x8a054b6a00000000, 0x2000919b00000000, 0xb512042300000000, |
| 5887 | 0x1f17ded200000000, 0xa01fc11b00000000, 0x0a1a1bea00000000, |
| 5888 | 0xcb3c9ab100000000, 0x6139404000000000, 0xde315f8900000000, |
| 5889 | 0x7434857800000000, 0xe12610c000000000, 0x4b23ca3100000000, |
| 5890 | 0xf42bd5f800000000, 0x5e2e0f0900000000, 0x4877cbea00000000, |
| 5891 | 0xe272111b00000000, 0x5d7a0ed200000000, 0xf77fd42300000000, |
| 5892 | 0x626d419b00000000, 0xc8689b6a00000000, 0x776084a300000000, |
| 5893 | 0xdd655e5200000000, 0x1c43df0900000000, 0xb64605f800000000, |
| 5894 | 0x094e1a3100000000, 0xa34bc0c000000000, 0x3659557800000000, |
| 5895 | 0x9c5c8f8900000000, 0x2354904000000000, 0x89514ab100000000, |
| 5896 | 0xa11992f700000000, 0x0b1c480600000000, 0xb41457cf00000000, |
| 5897 | 0x1e118d3e00000000, 0x8b03188600000000, 0x2106c27700000000, |
| 5898 | 0x9e0eddbe00000000, 0x340b074f00000000, 0xf52d861400000000, |
| 5899 | 0x5f285ce500000000, 0xe020432c00000000, 0x4a2599dd00000000, |
| 5900 | 0xdf370c6500000000, 0x7532d69400000000, 0xca3ac95d00000000, |
| 5901 | 0x603f13ac00000000, 0x9aaa79d000000000, 0x30afa32100000000, |
| 5902 | 0x8fa7bce800000000, 0x25a2661900000000, 0xb0b0f3a100000000, |
| 5903 | 0x1ab5295000000000, 0xa5bd369900000000, 0x0fb8ec6800000000, |
| 5904 | 0xce9e6d3300000000, 0x649bb7c200000000, 0xdb93a80b00000000, |
| 5905 | 0x719672fa00000000, 0xe484e74200000000, 0x4e813db300000000, |
| 5906 | 0xf189227a00000000, 0x5b8cf88b00000000, 0x73c420cd00000000, |
| 5907 | 0xd9c1fa3c00000000, 0x66c9e5f500000000, 0xcccc3f0400000000, |
| 5908 | 0x59deaabc00000000, 0xf3db704d00000000, 0x4cd36f8400000000, |
| 5909 | 0xe6d6b57500000000, 0x27f0342e00000000, 0x8df5eedf00000000, |
| 5910 | 0x32fdf11600000000, 0x98f82be700000000, 0x0deabe5f00000000, |
| 5911 | 0xa7ef64ae00000000, 0x18e77b6700000000, 0xb2e2a19600000000, |
| 5912 | 0xecccae9f00000000, 0x46c9746e00000000, 0xf9c16ba700000000, |
| 5913 | 0x53c4b15600000000, 0xc6d624ee00000000, 0x6cd3fe1f00000000, |
| 5914 | 0xd3dbe1d600000000, 0x79de3b2700000000, 0xb8f8ba7c00000000, |
| 5915 | 0x12fd608d00000000, 0xadf57f4400000000, 0x07f0a5b500000000, |
| 5916 | 0x92e2300d00000000, 0x38e7eafc00000000, 0x87eff53500000000, |
| 5917 | 0x2dea2fc400000000, 0x05a2f78200000000, 0xafa72d7300000000, |
| 5918 | 0x10af32ba00000000, 0xbaaae84b00000000, 0x2fb87df300000000, |
| 5919 | 0x85bda70200000000, 0x3ab5b8cb00000000, 0x90b0623a00000000, |
| 5920 | 0x5196e36100000000, 0xfb93399000000000, 0x449b265900000000, |
| 5921 | 0xee9efca800000000, 0x7b8c691000000000, 0xd189b3e100000000, |
| 5922 | 0x6e81ac2800000000, 0xc48476d900000000, 0x3e111ca500000000, |
| 5923 | 0x9414c65400000000, 0x2b1cd99d00000000, 0x8119036c00000000, |
| 5924 | 0x140b96d400000000, 0xbe0e4c2500000000, 0x010653ec00000000, |
| 5925 | 0xab03891d00000000, 0x6a25084600000000, 0xc020d2b700000000, |
| 5926 | 0x7f28cd7e00000000, 0xd52d178f00000000, 0x403f823700000000, |
| 5927 | 0xea3a58c600000000, 0x5532470f00000000, 0xff379dfe00000000, |
| 5928 | 0xd77f45b800000000, 0x7d7a9f4900000000, 0xc272808000000000, |
| 5929 | 0x68775a7100000000, 0xfd65cfc900000000, 0x5760153800000000, |
| 5930 | 0xe8680af100000000, 0x426dd00000000000, 0x834b515b00000000, |
| 5931 | 0x294e8baa00000000, 0x9646946300000000, 0x3c434e9200000000, |
| 5932 | 0xa951db2a00000000, 0x035401db00000000, 0xbc5c1e1200000000, |
| 5933 | 0x1659c4e300000000}}; |
| 5934 | |
| 5935 | #else /* W == 4 */ |
| 5936 | |
| 5937 | local const z_crc_t FAR crc_braid_table[][256] = { |
| 5938 | {0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87, |
| 5939 | 0x7a59dd16, 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede, |
| 5940 | 0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259, 0x2082f6ab, |
| 5941 | 0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c, |
| 5942 | 0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1, |
| 5943 | 0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7, |
| 5944 | 0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e, |
| 5945 | 0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308, |
| 5946 | 0x642ce432, 0xca4475a3, 0xe38cc151, 0x4de450c0, 0xb01da8b5, |
| 5947 | 0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3, 0x5f70d472, |
| 5948 | 0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07, |
| 5949 | 0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e, |
| 5950 | 0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa, |
| 5951 | 0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec, |
| 5952 | 0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6, |
| 5953 | 0x74a5dd47, 0x895c2532, 0x2734b4a3, 0x0efc0051, 0xa09491c0, |
| 5954 | 0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, 0x1c6884e3, |
| 5955 | 0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba, |
| 5956 | 0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf, |
| 5957 | 0x46b3af5e, 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975, |
| 5958 | 0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8, |
| 5959 | 0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde, |
| 5960 | 0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, 0x58c6967a, |
| 5961 | 0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c, |
| 5962 | 0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1, |
| 5963 | 0xd62cf140, 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65, |
| 5964 | 0xdb5dc897, 0x75355906, 0x88cca173, 0x26a430e2, 0x0f6c8410, |
| 5965 | 0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649, |
| 5966 | 0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a, |
| 5967 | 0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c, |
| 5968 | 0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946, |
| 5969 | 0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450, |
| 5970 | 0x4bc29689, 0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e, |
| 5971 | 0x319b4b9f, 0x1853ff6d, 0xb63b6efc, 0x38d109c6, 0x96b99857, |
| 5972 | 0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022, |
| 5973 | 0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5, |
| 5974 | 0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758, |
| 5975 | 0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e, |
| 5976 | 0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d, |
| 5977 | 0x5b4baffc, 0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b, |
| 5978 | 0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, 0xd5a1c8c6, |
| 5979 | 0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401, |
| 5980 | 0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74, |
| 5981 | 0x695ddde5, 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d, |
| 5982 | 0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa, 0x65bc6073, |
| 5983 | 0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65, |
| 5984 | 0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f, |
| 5985 | 0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749, |
| 5986 | 0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a, |
| 5987 | 0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033, |
| 5988 | 0x7728e4c1, 0xd9407550, 0x24b98d25, 0x8ad11cb4, 0xa319a846, |
| 5989 | 0x0d7139d7}, |
| 5990 | {0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563, |
| 5991 | 0x3387be8b, 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f, |
| 5992 | 0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c, 0xed731875, |
| 5993 | 0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536, |
| 5994 | 0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8, |
| 5995 | 0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43, |
| 5996 | 0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f, |
| 5997 | 0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184, |
| 5998 | 0x474cf219, 0xfeb729f1, 0xefca4388, 0x56319860, 0xcd30977a, |
| 5999 | 0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1, 0x755c7a39, |
| 6000 | 0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523, |
| 6001 | 0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f, |
| 6002 | 0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d, |
| 6003 | 0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6, |
| 6004 | 0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b, |
| 6005 | 0x140fdd83, 0x8f0ed299, 0x36f50971, 0x27886308, 0x9e73b8e0, |
| 6006 | 0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, 0x04e58151, |
| 6007 | 0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d, |
| 6008 | 0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47, |
| 6009 | 0xda1127af, 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a, |
| 6010 | 0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964, |
| 6011 | 0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef, |
| 6012 | 0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, 0xaeda6b3d, |
| 6013 | 0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6, |
| 6014 | 0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348, |
| 6015 | 0xfa52a8a0, 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53, |
| 6016 | 0xe601412a, 0x5ffa9ac2, 0xc4fb95d8, 0x7d004e30, 0x6c7d2449, |
| 6017 | 0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645, |
| 6018 | 0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4, |
| 6019 | 0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f, |
| 6020 | 0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2, |
| 6021 | 0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69, |
| 6022 | 0xc642ce25, 0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46, |
| 6023 | 0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, 0x09cb02a2, 0xb030d94a, |
| 6024 | 0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650, |
| 6025 | 0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13, |
| 6026 | 0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded, |
| 6027 | 0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366, |
| 6028 | 0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57, |
| 6029 | 0x9501e1bf, 0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc, |
| 6030 | 0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, 0xc1892222, |
| 6031 | 0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61, |
| 6032 | 0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b, |
| 6033 | 0x5b1f1b93, 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277, |
| 6034 | 0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714, 0x0cb9b558, |
| 6035 | 0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3, |
| 6036 | 0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e, |
| 6037 | 0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5, |
| 6038 | 0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74, |
| 6039 | 0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78, |
| 6040 | 0x2fd45701, 0x962f8ce9, 0x0d2e83f3, 0xb4d5581b, 0xa5a83262, |
| 6041 | 0x1c53e98a}, |
| 6042 | {0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b, |
| 6043 | 0x84a36e6d, 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40, |
| 6044 | 0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b, 0xcb9b5580, |
| 6045 | 0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7, |
| 6046 | 0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a, |
| 6047 | 0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37, |
| 6048 | 0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75, |
| 6049 | 0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218, |
| 6050 | 0xfe3d66ee, 0x63328798, 0x1f53a243, 0x825c4335, 0xe791e9f5, |
| 6051 | 0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4, 0x36d9a5c2, |
| 6052 | 0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02, |
| 6053 | 0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59, |
| 6054 | 0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1, |
| 6055 | 0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c, |
| 6056 | 0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a, |
| 6057 | 0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, 0x8a22a271, 0x172d4307, |
| 6058 | 0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, 0x3ea74486, |
| 6059 | 0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd, |
| 6060 | 0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d, |
| 6061 | 0x719f7f6b, 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2, |
| 6062 | 0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f, |
| 6063 | 0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72, |
| 6064 | 0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, 0x0b0177e8, |
| 6065 | 0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985, |
| 6066 | 0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268, |
| 6067 | 0x5d95c31e, 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94, |
| 6068 | 0x621d2b4f, 0xff12ca39, 0x9adf60f9, 0x07d0818f, 0x7bb1a454, |
| 6069 | 0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f, |
| 6070 | 0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e, |
| 6071 | 0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3, |
| 6072 | 0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915, |
| 6073 | 0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778, |
| 6074 | 0x4e17973a, 0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821, |
| 6075 | 0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, 0x7d4e890c, 0xe041687a, |
| 6076 | 0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba, |
| 6077 | 0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d, |
| 6078 | 0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560, |
| 6079 | 0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d, |
| 6080 | 0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe, |
| 6081 | 0xbeab3dc8, 0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3, |
| 6082 | 0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, 0xe83f893e, |
| 6083 | 0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509, |
| 6084 | 0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9, |
| 6085 | 0xc1b58ebf, 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92, |
| 6086 | 0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089, 0x0fae60cb, |
| 6087 | 0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6, |
| 6088 | 0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50, |
| 6089 | 0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d, |
| 6090 | 0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc, |
| 6091 | 0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7, |
| 6092 | 0xbb2b863c, 0x2624674a, 0x43e9cd8a, 0xdee62cfc, 0xa2870927, |
| 6093 | 0x3f88e851}, |
| 6094 | {0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96, |
| 6095 | 0x1d2fb313, 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8, |
| 6096 | 0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e, 0xfae60cb0, |
| 6097 | 0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14, |
| 6098 | 0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7, |
| 6099 | 0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4, |
| 6100 | 0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe, |
| 6101 | 0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad, |
| 6102 | 0xe97d9898, 0x34eb411d, 0x89212dd3, 0x54b7f456, 0x29c4f20e, |
| 6103 | 0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f, 0xdaef34aa, |
| 6104 | 0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2, |
| 6105 | 0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c, |
| 6106 | 0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab, |
| 6107 | 0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8, |
| 6108 | 0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d, |
| 6109 | 0x5a442e08, 0x27372850, 0xfaa1f1d5, 0x476b9d1b, 0x9afd449e, |
| 6110 | 0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, 0xc9335de7, |
| 6111 | 0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99, |
| 6112 | 0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1, |
| 6113 | 0x2efae244, 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690, |
| 6114 | 0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933, |
| 6115 | 0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20, |
| 6116 | 0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, 0xdaa8c9cf, |
| 6117 | 0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc, |
| 6118 | 0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f, |
| 6119 | 0xfdd81cfa, 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92, |
| 6120 | 0xc036905c, 0x1da049d9, 0x60d34f81, 0xbd459604, 0x008ffaca, |
| 6121 | 0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4, |
| 6122 | 0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd, |
| 6123 | 0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de, |
| 6124 | 0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb, |
| 6125 | 0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8, |
| 6126 | 0x13146ee2, 0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474, |
| 6127 | 0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, 0x4917bd8f, 0x9481640a, |
| 6128 | 0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252, |
| 6129 | 0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6, |
| 6130 | 0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55, |
| 6131 | 0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846, |
| 6132 | 0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7, |
| 6133 | 0xa02dd872, 0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4, |
| 6134 | 0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, 0x875d0d47, |
| 6135 | 0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3, |
| 6136 | 0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb, |
| 6137 | 0xd493143e, 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5, |
| 6138 | 0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753, 0xae99ff49, |
| 6139 | 0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a, |
| 6140 | 0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f, |
| 6141 | 0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c, |
| 6142 | 0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305, |
| 6143 | 0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b, |
| 6144 | 0x20c13fb5, 0xfd57e630, 0x8024e068, 0x5db239ed, 0xe0785523, |
| 6145 | 0x3dee8ca6}}; |
| 6146 | |
| 6147 | local const z_word_t FAR crc_braid_big_table[][256] = { |
| 6148 | {0x00000000, 0x85d996dd, 0x4bb55c60, 0xce6ccabd, 0x966ab9c0, |
| 6149 | 0x13b32f1d, 0xdddfe5a0, 0x5806737d, 0x6dd3035a, 0xe80a9587, |
| 6150 | 0x26665f3a, 0xa3bfc9e7, 0xfbb9ba9a, 0x7e602c47, 0xb00ce6fa, |
| 6151 | 0x35d57027, 0xdaa607b4, 0x5f7f9169, 0x91135bd4, 0x14cacd09, |
| 6152 | 0x4cccbe74, 0xc91528a9, 0x0779e214, 0x82a074c9, 0xb77504ee, |
| 6153 | 0x32ac9233, 0xfcc0588e, 0x7919ce53, 0x211fbd2e, 0xa4c62bf3, |
| 6154 | 0x6aaae14e, 0xef737793, 0xf54b7eb3, 0x7092e86e, 0xbefe22d3, |
| 6155 | 0x3b27b40e, 0x6321c773, 0xe6f851ae, 0x28949b13, 0xad4d0dce, |
| 6156 | 0x98987de9, 0x1d41eb34, 0xd32d2189, 0x56f4b754, 0x0ef2c429, |
| 6157 | 0x8b2b52f4, 0x45479849, 0xc09e0e94, 0x2fed7907, 0xaa34efda, |
| 6158 | 0x64582567, 0xe181b3ba, 0xb987c0c7, 0x3c5e561a, 0xf2329ca7, |
| 6159 | 0x77eb0a7a, 0x423e7a5d, 0xc7e7ec80, 0x098b263d, 0x8c52b0e0, |
| 6160 | 0xd454c39d, 0x518d5540, 0x9fe19ffd, 0x1a380920, 0xab918dbd, |
| 6161 | 0x2e481b60, 0xe024d1dd, 0x65fd4700, 0x3dfb347d, 0xb822a2a0, |
| 6162 | 0x764e681d, 0xf397fec0, 0xc6428ee7, 0x439b183a, 0x8df7d287, |
| 6163 | 0x082e445a, 0x50283727, 0xd5f1a1fa, 0x1b9d6b47, 0x9e44fd9a, |
| 6164 | 0x71378a09, 0xf4ee1cd4, 0x3a82d669, 0xbf5b40b4, 0xe75d33c9, |
| 6165 | 0x6284a514, 0xace86fa9, 0x2931f974, 0x1ce48953, 0x993d1f8e, |
| 6166 | 0x5751d533, 0xd28843ee, 0x8a8e3093, 0x0f57a64e, 0xc13b6cf3, |
| 6167 | 0x44e2fa2e, 0x5edaf30e, 0xdb0365d3, 0x156faf6e, 0x90b639b3, |
| 6168 | 0xc8b04ace, 0x4d69dc13, 0x830516ae, 0x06dc8073, 0x3309f054, |
| 6169 | 0xb6d06689, 0x78bcac34, 0xfd653ae9, 0xa5634994, 0x20badf49, |
| 6170 | 0xeed615f4, 0x6b0f8329, 0x847cf4ba, 0x01a56267, 0xcfc9a8da, |
| 6171 | 0x4a103e07, 0x12164d7a, 0x97cfdba7, 0x59a3111a, 0xdc7a87c7, |
| 6172 | 0xe9aff7e0, 0x6c76613d, 0xa21aab80, 0x27c33d5d, 0x7fc54e20, |
| 6173 | 0xfa1cd8fd, 0x34701240, 0xb1a9849d, 0x17256aa0, 0x92fcfc7d, |
| 6174 | 0x5c9036c0, 0xd949a01d, 0x814fd360, 0x049645bd, 0xcafa8f00, |
| 6175 | 0x4f2319dd, 0x7af669fa, 0xff2fff27, 0x3143359a, 0xb49aa347, |
| 6176 | 0xec9cd03a, 0x694546e7, 0xa7298c5a, 0x22f01a87, 0xcd836d14, |
| 6177 | 0x485afbc9, 0x86363174, 0x03efa7a9, 0x5be9d4d4, 0xde304209, |
| 6178 | 0x105c88b4, 0x95851e69, 0xa0506e4e, 0x2589f893, 0xebe5322e, |
| 6179 | 0x6e3ca4f3, 0x363ad78e, 0xb3e34153, 0x7d8f8bee, 0xf8561d33, |
| 6180 | 0xe26e1413, 0x67b782ce, 0xa9db4873, 0x2c02deae, 0x7404add3, |
| 6181 | 0xf1dd3b0e, 0x3fb1f1b3, 0xba68676e, 0x8fbd1749, 0x0a648194, |
| 6182 | 0xc4084b29, 0x41d1ddf4, 0x19d7ae89, 0x9c0e3854, 0x5262f2e9, |
| 6183 | 0xd7bb6434, 0x38c813a7, 0xbd11857a, 0x737d4fc7, 0xf6a4d91a, |
| 6184 | 0xaea2aa67, 0x2b7b3cba, 0xe517f607, 0x60ce60da, 0x551b10fd, |
| 6185 | 0xd0c28620, 0x1eae4c9d, 0x9b77da40, 0xc371a93d, 0x46a83fe0, |
| 6186 | 0x88c4f55d, 0x0d1d6380, 0xbcb4e71d, 0x396d71c0, 0xf701bb7d, |
| 6187 | 0x72d82da0, 0x2ade5edd, 0xaf07c800, 0x616b02bd, 0xe4b29460, |
| 6188 | 0xd167e447, 0x54be729a, 0x9ad2b827, 0x1f0b2efa, 0x470d5d87, |
| 6189 | 0xc2d4cb5a, 0x0cb801e7, 0x8961973a, 0x6612e0a9, 0xe3cb7674, |
| 6190 | 0x2da7bcc9, 0xa87e2a14, 0xf0785969, 0x75a1cfb4, 0xbbcd0509, |
| 6191 | 0x3e1493d4, 0x0bc1e3f3, 0x8e18752e, 0x4074bf93, 0xc5ad294e, |
| 6192 | 0x9dab5a33, 0x1872ccee, 0xd61e0653, 0x53c7908e, 0x49ff99ae, |
| 6193 | 0xcc260f73, 0x024ac5ce, 0x87935313, 0xdf95206e, 0x5a4cb6b3, |
| 6194 | 0x94207c0e, 0x11f9ead3, 0x242c9af4, 0xa1f50c29, 0x6f99c694, |
| 6195 | 0xea405049, 0xb2462334, 0x379fb5e9, 0xf9f37f54, 0x7c2ae989, |
| 6196 | 0x93599e1a, 0x168008c7, 0xd8ecc27a, 0x5d3554a7, 0x053327da, |
| 6197 | 0x80eab107, 0x4e867bba, 0xcb5fed67, 0xfe8a9d40, 0x7b530b9d, |
| 6198 | 0xb53fc120, 0x30e657fd, 0x68e02480, 0xed39b25d, 0x235578e0, |
| 6199 | 0xa68cee3d}, |
| 6200 | {0x00000000, 0x76e10f9d, 0xadc46ee1, 0xdb25617c, 0x1b8fac19, |
| 6201 | 0x6d6ea384, 0xb64bc2f8, 0xc0aacd65, 0x361e5933, 0x40ff56ae, |
| 6202 | 0x9bda37d2, 0xed3b384f, 0x2d91f52a, 0x5b70fab7, 0x80559bcb, |
| 6203 | 0xf6b49456, 0x6c3cb266, 0x1addbdfb, 0xc1f8dc87, 0xb719d31a, |
| 6204 | 0x77b31e7f, 0x015211e2, 0xda77709e, 0xac967f03, 0x5a22eb55, |
| 6205 | 0x2cc3e4c8, 0xf7e685b4, 0x81078a29, 0x41ad474c, 0x374c48d1, |
| 6206 | 0xec6929ad, 0x9a882630, 0xd87864cd, 0xae996b50, 0x75bc0a2c, |
| 6207 | 0x035d05b1, 0xc3f7c8d4, 0xb516c749, 0x6e33a635, 0x18d2a9a8, |
| 6208 | 0xee663dfe, 0x98873263, 0x43a2531f, 0x35435c82, 0xf5e991e7, |
| 6209 | 0x83089e7a, 0x582dff06, 0x2eccf09b, 0xb444d6ab, 0xc2a5d936, |
| 6210 | 0x1980b84a, 0x6f61b7d7, 0xafcb7ab2, 0xd92a752f, 0x020f1453, |
| 6211 | 0x74ee1bce, 0x825a8f98, 0xf4bb8005, 0x2f9ee179, 0x597feee4, |
| 6212 | 0x99d52381, 0xef342c1c, 0x34114d60, 0x42f042fd, 0xf1f7b941, |
| 6213 | 0x8716b6dc, 0x5c33d7a0, 0x2ad2d83d, 0xea781558, 0x9c991ac5, |
| 6214 | 0x47bc7bb9, 0x315d7424, 0xc7e9e072, 0xb108efef, 0x6a2d8e93, |
| 6215 | 0x1ccc810e, 0xdc664c6b, 0xaa8743f6, 0x71a2228a, 0x07432d17, |
| 6216 | 0x9dcb0b27, 0xeb2a04ba, 0x300f65c6, 0x46ee6a5b, 0x8644a73e, |
| 6217 | 0xf0a5a8a3, 0x2b80c9df, 0x5d61c642, 0xabd55214, 0xdd345d89, |
| 6218 | 0x06113cf5, 0x70f03368, 0xb05afe0d, 0xc6bbf190, 0x1d9e90ec, |
| 6219 | 0x6b7f9f71, 0x298fdd8c, 0x5f6ed211, 0x844bb36d, 0xf2aabcf0, |
| 6220 | 0x32007195, 0x44e17e08, 0x9fc41f74, 0xe92510e9, 0x1f9184bf, |
| 6221 | 0x69708b22, 0xb255ea5e, 0xc4b4e5c3, 0x041e28a6, 0x72ff273b, |
| 6222 | 0xa9da4647, 0xdf3b49da, 0x45b36fea, 0x33526077, 0xe877010b, |
| 6223 | 0x9e960e96, 0x5e3cc3f3, 0x28ddcc6e, 0xf3f8ad12, 0x8519a28f, |
| 6224 | 0x73ad36d9, 0x054c3944, 0xde695838, 0xa88857a5, 0x68229ac0, |
| 6225 | 0x1ec3955d, 0xc5e6f421, 0xb307fbbc, 0xe2ef7383, 0x940e7c1e, |
| 6226 | 0x4f2b1d62, 0x39ca12ff, 0xf960df9a, 0x8f81d007, 0x54a4b17b, |
| 6227 | 0x2245bee6, 0xd4f12ab0, 0xa210252d, 0x79354451, 0x0fd44bcc, |
| 6228 | 0xcf7e86a9, 0xb99f8934, 0x62bae848, 0x145be7d5, 0x8ed3c1e5, |
| 6229 | 0xf832ce78, 0x2317af04, 0x55f6a099, 0x955c6dfc, 0xe3bd6261, |
| 6230 | 0x3898031d, 0x4e790c80, 0xb8cd98d6, 0xce2c974b, 0x1509f637, |
| 6231 | 0x63e8f9aa, 0xa34234cf, 0xd5a33b52, 0x0e865a2e, 0x786755b3, |
| 6232 | 0x3a97174e, 0x4c7618d3, 0x975379af, 0xe1b27632, 0x2118bb57, |
| 6233 | 0x57f9b4ca, 0x8cdcd5b6, 0xfa3dda2b, 0x0c894e7d, 0x7a6841e0, |
| 6234 | 0xa14d209c, 0xd7ac2f01, 0x1706e264, 0x61e7edf9, 0xbac28c85, |
| 6235 | 0xcc238318, 0x56aba528, 0x204aaab5, 0xfb6fcbc9, 0x8d8ec454, |
| 6236 | 0x4d240931, 0x3bc506ac, 0xe0e067d0, 0x9601684d, 0x60b5fc1b, |
| 6237 | 0x1654f386, 0xcd7192fa, 0xbb909d67, 0x7b3a5002, 0x0ddb5f9f, |
| 6238 | 0xd6fe3ee3, 0xa01f317e, 0x1318cac2, 0x65f9c55f, 0xbedca423, |
| 6239 | 0xc83dabbe, 0x089766db, 0x7e766946, 0xa553083a, 0xd3b207a7, |
| 6240 | 0x250693f1, 0x53e79c6c, 0x88c2fd10, 0xfe23f28d, 0x3e893fe8, |
| 6241 | 0x48683075, 0x934d5109, 0xe5ac5e94, 0x7f2478a4, 0x09c57739, |
| 6242 | 0xd2e01645, 0xa40119d8, 0x64abd4bd, 0x124adb20, 0xc96fba5c, |
| 6243 | 0xbf8eb5c1, 0x493a2197, 0x3fdb2e0a, 0xe4fe4f76, 0x921f40eb, |
| 6244 | 0x52b58d8e, 0x24548213, 0xff71e36f, 0x8990ecf2, 0xcb60ae0f, |
| 6245 | 0xbd81a192, 0x66a4c0ee, 0x1045cf73, 0xd0ef0216, 0xa60e0d8b, |
| 6246 | 0x7d2b6cf7, 0x0bca636a, 0xfd7ef73c, 0x8b9ff8a1, 0x50ba99dd, |
| 6247 | 0x265b9640, 0xe6f15b25, 0x901054b8, 0x4b3535c4, 0x3dd43a59, |
| 6248 | 0xa75c1c69, 0xd1bd13f4, 0x0a987288, 0x7c797d15, 0xbcd3b070, |
| 6249 | 0xca32bfed, 0x1117de91, 0x67f6d10c, 0x9142455a, 0xe7a34ac7, |
| 6250 | 0x3c862bbb, 0x4a672426, 0x8acde943, 0xfc2ce6de, 0x270987a2, |
| 6251 | 0x51e8883f}, |
| 6252 | {0x00000000, 0xe8dbfbb9, 0x91b186a8, 0x796a7d11, 0x63657c8a, |
| 6253 | 0x8bbe8733, 0xf2d4fa22, 0x1a0f019b, 0x87cc89cf, 0x6f177276, |
| 6254 | 0x167d0f67, 0xfea6f4de, 0xe4a9f545, 0x0c720efc, 0x751873ed, |
| 6255 | 0x9dc38854, 0x4f9f6244, 0xa74499fd, 0xde2ee4ec, 0x36f51f55, |
| 6256 | 0x2cfa1ece, 0xc421e577, 0xbd4b9866, 0x559063df, 0xc853eb8b, |
| 6257 | 0x20881032, 0x59e26d23, 0xb139969a, 0xab369701, 0x43ed6cb8, |
| 6258 | 0x3a8711a9, 0xd25cea10, 0x9e3ec588, 0x76e53e31, 0x0f8f4320, |
| 6259 | 0xe754b899, 0xfd5bb902, 0x158042bb, 0x6cea3faa, 0x8431c413, |
| 6260 | 0x19f24c47, 0xf129b7fe, 0x8843caef, 0x60983156, 0x7a9730cd, |
| 6261 | 0x924ccb74, 0xeb26b665, 0x03fd4ddc, 0xd1a1a7cc, 0x397a5c75, |
| 6262 | 0x40102164, 0xa8cbdadd, 0xb2c4db46, 0x5a1f20ff, 0x23755dee, |
| 6263 | 0xcbaea657, 0x566d2e03, 0xbeb6d5ba, 0xc7dca8ab, 0x2f075312, |
| 6264 | 0x35085289, 0xddd3a930, 0xa4b9d421, 0x4c622f98, 0x7d7bfbca, |
| 6265 | 0x95a00073, 0xecca7d62, 0x041186db, 0x1e1e8740, 0xf6c57cf9, |
| 6266 | 0x8faf01e8, 0x6774fa51, 0xfab77205, 0x126c89bc, 0x6b06f4ad, |
| 6267 | 0x83dd0f14, 0x99d20e8f, 0x7109f536, 0x08638827, 0xe0b8739e, |
| 6268 | 0x32e4998e, 0xda3f6237, 0xa3551f26, 0x4b8ee49f, 0x5181e504, |
| 6269 | 0xb95a1ebd, 0xc03063ac, 0x28eb9815, 0xb5281041, 0x5df3ebf8, |
| 6270 | 0x249996e9, 0xcc426d50, 0xd64d6ccb, 0x3e969772, 0x47fcea63, |
| 6271 | 0xaf2711da, 0xe3453e42, 0x0b9ec5fb, 0x72f4b8ea, 0x9a2f4353, |
| 6272 | 0x802042c8, 0x68fbb971, 0x1191c460, 0xf94a3fd9, 0x6489b78d, |
| 6273 | 0x8c524c34, 0xf5383125, 0x1de3ca9c, 0x07eccb07, 0xef3730be, |
| 6274 | 0x965d4daf, 0x7e86b616, 0xacda5c06, 0x4401a7bf, 0x3d6bdaae, |
| 6275 | 0xd5b02117, 0xcfbf208c, 0x2764db35, 0x5e0ea624, 0xb6d55d9d, |
| 6276 | 0x2b16d5c9, 0xc3cd2e70, 0xbaa75361, 0x527ca8d8, 0x4873a943, |
| 6277 | 0xa0a852fa, 0xd9c22feb, 0x3119d452, 0xbbf0874e, 0x532b7cf7, |
| 6278 | 0x2a4101e6, 0xc29afa5f, 0xd895fbc4, 0x304e007d, 0x49247d6c, |
| 6279 | 0xa1ff86d5, 0x3c3c0e81, 0xd4e7f538, 0xad8d8829, 0x45567390, |
| 6280 | 0x5f59720b, 0xb78289b2, 0xcee8f4a3, 0x26330f1a, 0xf46fe50a, |
| 6281 | 0x1cb41eb3, 0x65de63a2, 0x8d05981b, 0x970a9980, 0x7fd16239, |
| 6282 | 0x06bb1f28, 0xee60e491, 0x73a36cc5, 0x9b78977c, 0xe212ea6d, |
| 6283 | 0x0ac911d4, 0x10c6104f, 0xf81debf6, 0x817796e7, 0x69ac6d5e, |
| 6284 | 0x25ce42c6, 0xcd15b97f, 0xb47fc46e, 0x5ca43fd7, 0x46ab3e4c, |
| 6285 | 0xae70c5f5, 0xd71ab8e4, 0x3fc1435d, 0xa202cb09, 0x4ad930b0, |
| 6286 | 0x33b34da1, 0xdb68b618, 0xc167b783, 0x29bc4c3a, 0x50d6312b, |
| 6287 | 0xb80dca92, 0x6a512082, 0x828adb3b, 0xfbe0a62a, 0x133b5d93, |
| 6288 | 0x09345c08, 0xe1efa7b1, 0x9885daa0, 0x705e2119, 0xed9da94d, |
| 6289 | 0x054652f4, 0x7c2c2fe5, 0x94f7d45c, 0x8ef8d5c7, 0x66232e7e, |
| 6290 | 0x1f49536f, 0xf792a8d6, 0xc68b7c84, 0x2e50873d, 0x573afa2c, |
| 6291 | 0xbfe10195, 0xa5ee000e, 0x4d35fbb7, 0x345f86a6, 0xdc847d1f, |
| 6292 | 0x4147f54b, 0xa99c0ef2, 0xd0f673e3, 0x382d885a, 0x222289c1, |
| 6293 | 0xcaf97278, 0xb3930f69, 0x5b48f4d0, 0x89141ec0, 0x61cfe579, |
| 6294 | 0x18a59868, 0xf07e63d1, 0xea71624a, 0x02aa99f3, 0x7bc0e4e2, |
| 6295 | 0x931b1f5b, 0x0ed8970f, 0xe6036cb6, 0x9f6911a7, 0x77b2ea1e, |
| 6296 | 0x6dbdeb85, 0x8566103c, 0xfc0c6d2d, 0x14d79694, 0x58b5b90c, |
| 6297 | 0xb06e42b5, 0xc9043fa4, 0x21dfc41d, 0x3bd0c586, 0xd30b3e3f, |
| 6298 | 0xaa61432e, 0x42bab897, 0xdf7930c3, 0x37a2cb7a, 0x4ec8b66b, |
| 6299 | 0xa6134dd2, 0xbc1c4c49, 0x54c7b7f0, 0x2dadcae1, 0xc5763158, |
| 6300 | 0x172adb48, 0xfff120f1, 0x869b5de0, 0x6e40a659, 0x744fa7c2, |
| 6301 | 0x9c945c7b, 0xe5fe216a, 0x0d25dad3, 0x90e65287, 0x783da93e, |
| 6302 | 0x0157d42f, 0xe98c2f96, 0xf3832e0d, 0x1b58d5b4, 0x6232a8a5, |
| 6303 | 0x8ae9531c}, |
| 6304 | {0x00000000, 0x919168ae, 0x6325a087, 0xf2b4c829, 0x874c31d4, |
| 6305 | 0x16dd597a, 0xe4699153, 0x75f8f9fd, 0x4f9f1373, 0xde0e7bdd, |
| 6306 | 0x2cbab3f4, 0xbd2bdb5a, 0xc8d322a7, 0x59424a09, 0xabf68220, |
| 6307 | 0x3a67ea8e, 0x9e3e27e6, 0x0faf4f48, 0xfd1b8761, 0x6c8aefcf, |
| 6308 | 0x19721632, 0x88e37e9c, 0x7a57b6b5, 0xebc6de1b, 0xd1a13495, |
| 6309 | 0x40305c3b, 0xb2849412, 0x2315fcbc, 0x56ed0541, 0xc77c6def, |
| 6310 | 0x35c8a5c6, 0xa459cd68, 0x7d7b3f17, 0xecea57b9, 0x1e5e9f90, |
| 6311 | 0x8fcff73e, 0xfa370ec3, 0x6ba6666d, 0x9912ae44, 0x0883c6ea, |
| 6312 | 0x32e42c64, 0xa37544ca, 0x51c18ce3, 0xc050e44d, 0xb5a81db0, |
| 6313 | 0x2439751e, 0xd68dbd37, 0x471cd599, 0xe34518f1, 0x72d4705f, |
| 6314 | 0x8060b876, 0x11f1d0d8, 0x64092925, 0xf598418b, 0x072c89a2, |
| 6315 | 0x96bde10c, 0xacda0b82, 0x3d4b632c, 0xcfffab05, 0x5e6ec3ab, |
| 6316 | 0x2b963a56, 0xba0752f8, 0x48b39ad1, 0xd922f27f, 0xfaf67e2e, |
| 6317 | 0x6b671680, 0x99d3dea9, 0x0842b607, 0x7dba4ffa, 0xec2b2754, |
| 6318 | 0x1e9fef7d, 0x8f0e87d3, 0xb5696d5d, 0x24f805f3, 0xd64ccdda, |
| 6319 | 0x47dda574, 0x32255c89, 0xa3b43427, 0x5100fc0e, 0xc09194a0, |
| 6320 | 0x64c859c8, 0xf5593166, 0x07edf94f, 0x967c91e1, 0xe384681c, |
| 6321 | 0x721500b2, 0x80a1c89b, 0x1130a035, 0x2b574abb, 0xbac62215, |
| 6322 | 0x4872ea3c, 0xd9e38292, 0xac1b7b6f, 0x3d8a13c1, 0xcf3edbe8, |
| 6323 | 0x5eafb346, 0x878d4139, 0x161c2997, 0xe4a8e1be, 0x75398910, |
| 6324 | 0x00c170ed, 0x91501843, 0x63e4d06a, 0xf275b8c4, 0xc812524a, |
| 6325 | 0x59833ae4, 0xab37f2cd, 0x3aa69a63, 0x4f5e639e, 0xdecf0b30, |
| 6326 | 0x2c7bc319, 0xbdeaabb7, 0x19b366df, 0x88220e71, 0x7a96c658, |
| 6327 | 0xeb07aef6, 0x9eff570b, 0x0f6e3fa5, 0xfddaf78c, 0x6c4b9f22, |
| 6328 | 0x562c75ac, 0xc7bd1d02, 0x3509d52b, 0xa498bd85, 0xd1604478, |
| 6329 | 0x40f12cd6, 0xb245e4ff, 0x23d48c51, 0xf4edfd5c, 0x657c95f2, |
| 6330 | 0x97c85ddb, 0x06593575, 0x73a1cc88, 0xe230a426, 0x10846c0f, |
| 6331 | 0x811504a1, 0xbb72ee2f, 0x2ae38681, 0xd8574ea8, 0x49c62606, |
| 6332 | 0x3c3edffb, 0xadafb755, 0x5f1b7f7c, 0xce8a17d2, 0x6ad3daba, |
| 6333 | 0xfb42b214, 0x09f67a3d, 0x98671293, 0xed9feb6e, 0x7c0e83c0, |
| 6334 | 0x8eba4be9, 0x1f2b2347, 0x254cc9c9, 0xb4dda167, 0x4669694e, |
| 6335 | 0xd7f801e0, 0xa200f81d, 0x339190b3, 0xc125589a, 0x50b43034, |
| 6336 | 0x8996c24b, 0x1807aae5, 0xeab362cc, 0x7b220a62, 0x0edaf39f, |
| 6337 | 0x9f4b9b31, 0x6dff5318, 0xfc6e3bb6, 0xc609d138, 0x5798b996, |
| 6338 | 0xa52c71bf, 0x34bd1911, 0x4145e0ec, 0xd0d48842, 0x2260406b, |
| 6339 | 0xb3f128c5, 0x17a8e5ad, 0x86398d03, 0x748d452a, 0xe51c2d84, |
| 6340 | 0x90e4d479, 0x0175bcd7, 0xf3c174fe, 0x62501c50, 0x5837f6de, |
| 6341 | 0xc9a69e70, 0x3b125659, 0xaa833ef7, 0xdf7bc70a, 0x4eeaafa4, |
| 6342 | 0xbc5e678d, 0x2dcf0f23, 0x0e1b8372, 0x9f8aebdc, 0x6d3e23f5, |
| 6343 | 0xfcaf4b5b, 0x8957b2a6, 0x18c6da08, 0xea721221, 0x7be37a8f, |
| 6344 | 0x41849001, 0xd015f8af, 0x22a13086, 0xb3305828, 0xc6c8a1d5, |
| 6345 | 0x5759c97b, 0xa5ed0152, 0x347c69fc, 0x9025a494, 0x01b4cc3a, |
| 6346 | 0xf3000413, 0x62916cbd, 0x17699540, 0x86f8fdee, 0x744c35c7, |
| 6347 | 0xe5dd5d69, 0xdfbab7e7, 0x4e2bdf49, 0xbc9f1760, 0x2d0e7fce, |
| 6348 | 0x58f68633, 0xc967ee9d, 0x3bd326b4, 0xaa424e1a, 0x7360bc65, |
| 6349 | 0xe2f1d4cb, 0x10451ce2, 0x81d4744c, 0xf42c8db1, 0x65bde51f, |
| 6350 | 0x97092d36, 0x06984598, 0x3cffaf16, 0xad6ec7b8, 0x5fda0f91, |
| 6351 | 0xce4b673f, 0xbbb39ec2, 0x2a22f66c, 0xd8963e45, 0x490756eb, |
| 6352 | 0xed5e9b83, 0x7ccff32d, 0x8e7b3b04, 0x1fea53aa, 0x6a12aa57, |
| 6353 | 0xfb83c2f9, 0x09370ad0, 0x98a6627e, 0xa2c188f0, 0x3350e05e, |
| 6354 | 0xc1e42877, 0x507540d9, 0x258db924, 0xb41cd18a, 0x46a819a3, |
| 6355 | 0xd739710d}}; |
| 6356 | |
| 6357 | #endif |
| 6358 | |
| 6359 | #endif |
| 6360 | |
| 6361 | #if N == 5 |
| 6362 | |
| 6363 | #if W == 8 |
| 6364 | |
| 6365 | local const z_crc_t FAR crc_braid_table[][256] = { |
| 6366 | {0x00000000, 0xaf449247, 0x85f822cf, 0x2abcb088, 0xd08143df, |
| 6367 | 0x7fc5d198, 0x55796110, 0xfa3df357, 0x7a7381ff, 0xd53713b8, |
| 6368 | 0xff8ba330, 0x50cf3177, 0xaaf2c220, 0x05b65067, 0x2f0ae0ef, |
| 6369 | 0x804e72a8, 0xf4e703fe, 0x5ba391b9, 0x711f2131, 0xde5bb376, |
| 6370 | 0x24664021, 0x8b22d266, 0xa19e62ee, 0x0edaf0a9, 0x8e948201, |
| 6371 | 0x21d01046, 0x0b6ca0ce, 0xa4283289, 0x5e15c1de, 0xf1515399, |
| 6372 | 0xdbede311, 0x74a97156, 0x32bf01bd, 0x9dfb93fa, 0xb7472372, |
| 6373 | 0x1803b135, 0xe23e4262, 0x4d7ad025, 0x67c660ad, 0xc882f2ea, |
| 6374 | 0x48cc8042, 0xe7881205, 0xcd34a28d, 0x627030ca, 0x984dc39d, |
| 6375 | 0x370951da, 0x1db5e152, 0xb2f17315, 0xc6580243, 0x691c9004, |
| 6376 | 0x43a0208c, 0xece4b2cb, 0x16d9419c, 0xb99dd3db, 0x93216353, |
| 6377 | 0x3c65f114, 0xbc2b83bc, 0x136f11fb, 0x39d3a173, 0x96973334, |
| 6378 | 0x6caac063, 0xc3ee5224, 0xe952e2ac, 0x461670eb, 0x657e037a, |
| 6379 | 0xca3a913d, 0xe08621b5, 0x4fc2b3f2, 0xb5ff40a5, 0x1abbd2e2, |
| 6380 | 0x3007626a, 0x9f43f02d, 0x1f0d8285, 0xb04910c2, 0x9af5a04a, |
| 6381 | 0x35b1320d, 0xcf8cc15a, 0x60c8531d, 0x4a74e395, 0xe53071d2, |
| 6382 | 0x91990084, 0x3edd92c3, 0x1461224b, 0xbb25b00c, 0x4118435b, |
| 6383 | 0xee5cd11c, 0xc4e06194, 0x6ba4f3d3, 0xebea817b, 0x44ae133c, |
| 6384 | 0x6e12a3b4, 0xc15631f3, 0x3b6bc2a4, 0x942f50e3, 0xbe93e06b, |
| 6385 | 0x11d7722c, 0x57c102c7, 0xf8859080, 0xd2392008, 0x7d7db24f, |
| 6386 | 0x87404118, 0x2804d35f, 0x02b863d7, 0xadfcf190, 0x2db28338, |
| 6387 | 0x82f6117f, 0xa84aa1f7, 0x070e33b0, 0xfd33c0e7, 0x527752a0, |
| 6388 | 0x78cbe228, 0xd78f706f, 0xa3260139, 0x0c62937e, 0x26de23f6, |
| 6389 | 0x899ab1b1, 0x73a742e6, 0xdce3d0a1, 0xf65f6029, 0x591bf26e, |
| 6390 | 0xd95580c6, 0x76111281, 0x5cada209, 0xf3e9304e, 0x09d4c319, |
| 6391 | 0xa690515e, 0x8c2ce1d6, 0x23687391, 0xcafc06f4, 0x65b894b3, |
| 6392 | 0x4f04243b, 0xe040b67c, 0x1a7d452b, 0xb539d76c, 0x9f8567e4, |
| 6393 | 0x30c1f5a3, 0xb08f870b, 0x1fcb154c, 0x3577a5c4, 0x9a333783, |
| 6394 | 0x600ec4d4, 0xcf4a5693, 0xe5f6e61b, 0x4ab2745c, 0x3e1b050a, |
| 6395 | 0x915f974d, 0xbbe327c5, 0x14a7b582, 0xee9a46d5, 0x41ded492, |
| 6396 | 0x6b62641a, 0xc426f65d, 0x446884f5, 0xeb2c16b2, 0xc190a63a, |
| 6397 | 0x6ed4347d, 0x94e9c72a, 0x3bad556d, 0x1111e5e5, 0xbe5577a2, |
| 6398 | 0xf8430749, 0x5707950e, 0x7dbb2586, 0xd2ffb7c1, 0x28c24496, |
| 6399 | 0x8786d6d1, 0xad3a6659, 0x027ef41e, 0x823086b6, 0x2d7414f1, |
| 6400 | 0x07c8a479, 0xa88c363e, 0x52b1c569, 0xfdf5572e, 0xd749e7a6, |
| 6401 | 0x780d75e1, 0x0ca404b7, 0xa3e096f0, 0x895c2678, 0x2618b43f, |
| 6402 | 0xdc254768, 0x7361d52f, 0x59dd65a7, 0xf699f7e0, 0x76d78548, |
| 6403 | 0xd993170f, 0xf32fa787, 0x5c6b35c0, 0xa656c697, 0x091254d0, |
| 6404 | 0x23aee458, 0x8cea761f, 0xaf82058e, 0x00c697c9, 0x2a7a2741, |
| 6405 | 0x853eb506, 0x7f034651, 0xd047d416, 0xfafb649e, 0x55bff6d9, |
| 6406 | 0xd5f18471, 0x7ab51636, 0x5009a6be, 0xff4d34f9, 0x0570c7ae, |
| 6407 | 0xaa3455e9, 0x8088e561, 0x2fcc7726, 0x5b650670, 0xf4219437, |
| 6408 | 0xde9d24bf, 0x71d9b6f8, 0x8be445af, 0x24a0d7e8, 0x0e1c6760, |
| 6409 | 0xa158f527, 0x2116878f, 0x8e5215c8, 0xa4eea540, 0x0baa3707, |
| 6410 | 0xf197c450, 0x5ed35617, 0x746fe69f, 0xdb2b74d8, 0x9d3d0433, |
| 6411 | 0x32799674, 0x18c526fc, 0xb781b4bb, 0x4dbc47ec, 0xe2f8d5ab, |
| 6412 | 0xc8446523, 0x6700f764, 0xe74e85cc, 0x480a178b, 0x62b6a703, |
| 6413 | 0xcdf23544, 0x37cfc613, 0x988b5454, 0xb237e4dc, 0x1d73769b, |
| 6414 | 0x69da07cd, 0xc69e958a, 0xec222502, 0x4366b745, 0xb95b4412, |
| 6415 | 0x161fd655, 0x3ca366dd, 0x93e7f49a, 0x13a98632, 0xbced1475, |
| 6416 | 0x9651a4fd, 0x391536ba, 0xc328c5ed, 0x6c6c57aa, 0x46d0e722, |
| 6417 | 0xe9947565}, |
| 6418 | {0x00000000, 0x4e890ba9, 0x9d121752, 0xd39b1cfb, 0xe15528e5, |
| 6419 | 0xafdc234c, 0x7c473fb7, 0x32ce341e, 0x19db578b, 0x57525c22, |
| 6420 | 0x84c940d9, 0xca404b70, 0xf88e7f6e, 0xb60774c7, 0x659c683c, |
| 6421 | 0x2b156395, 0x33b6af16, 0x7d3fa4bf, 0xaea4b844, 0xe02db3ed, |
| 6422 | 0xd2e387f3, 0x9c6a8c5a, 0x4ff190a1, 0x01789b08, 0x2a6df89d, |
| 6423 | 0x64e4f334, 0xb77fefcf, 0xf9f6e466, 0xcb38d078, 0x85b1dbd1, |
| 6424 | 0x562ac72a, 0x18a3cc83, 0x676d5e2c, 0x29e45585, 0xfa7f497e, |
| 6425 | 0xb4f642d7, 0x863876c9, 0xc8b17d60, 0x1b2a619b, 0x55a36a32, |
| 6426 | 0x7eb609a7, 0x303f020e, 0xe3a41ef5, 0xad2d155c, 0x9fe32142, |
| 6427 | 0xd16a2aeb, 0x02f13610, 0x4c783db9, 0x54dbf13a, 0x1a52fa93, |
| 6428 | 0xc9c9e668, 0x8740edc1, 0xb58ed9df, 0xfb07d276, 0x289cce8d, |
| 6429 | 0x6615c524, 0x4d00a6b1, 0x0389ad18, 0xd012b1e3, 0x9e9bba4a, |
| 6430 | 0xac558e54, 0xe2dc85fd, 0x31479906, 0x7fce92af, 0xcedabc58, |
| 6431 | 0x8053b7f1, 0x53c8ab0a, 0x1d41a0a3, 0x2f8f94bd, 0x61069f14, |
| 6432 | 0xb29d83ef, 0xfc148846, 0xd701ebd3, 0x9988e07a, 0x4a13fc81, |
| 6433 | 0x049af728, 0x3654c336, 0x78ddc89f, 0xab46d464, 0xe5cfdfcd, |
| 6434 | 0xfd6c134e, 0xb3e518e7, 0x607e041c, 0x2ef70fb5, 0x1c393bab, |
| 6435 | 0x52b03002, 0x812b2cf9, 0xcfa22750, 0xe4b744c5, 0xaa3e4f6c, |
| 6436 | 0x79a55397, 0x372c583e, 0x05e26c20, 0x4b6b6789, 0x98f07b72, |
| 6437 | 0xd67970db, 0xa9b7e274, 0xe73ee9dd, 0x34a5f526, 0x7a2cfe8f, |
| 6438 | 0x48e2ca91, 0x066bc138, 0xd5f0ddc3, 0x9b79d66a, 0xb06cb5ff, |
| 6439 | 0xfee5be56, 0x2d7ea2ad, 0x63f7a904, 0x51399d1a, 0x1fb096b3, |
| 6440 | 0xcc2b8a48, 0x82a281e1, 0x9a014d62, 0xd48846cb, 0x07135a30, |
| 6441 | 0x499a5199, 0x7b546587, 0x35dd6e2e, 0xe64672d5, 0xa8cf797c, |
| 6442 | 0x83da1ae9, 0xcd531140, 0x1ec80dbb, 0x50410612, 0x628f320c, |
| 6443 | 0x2c0639a5, 0xff9d255e, 0xb1142ef7, 0x46c47ef1, 0x084d7558, |
| 6444 | 0xdbd669a3, 0x955f620a, 0xa7915614, 0xe9185dbd, 0x3a834146, |
| 6445 | 0x740a4aef, 0x5f1f297a, 0x119622d3, 0xc20d3e28, 0x8c843581, |
| 6446 | 0xbe4a019f, 0xf0c30a36, 0x235816cd, 0x6dd11d64, 0x7572d1e7, |
| 6447 | 0x3bfbda4e, 0xe860c6b5, 0xa6e9cd1c, 0x9427f902, 0xdaaef2ab, |
| 6448 | 0x0935ee50, 0x47bce5f9, 0x6ca9866c, 0x22208dc5, 0xf1bb913e, |
| 6449 | 0xbf329a97, 0x8dfcae89, 0xc375a520, 0x10eeb9db, 0x5e67b272, |
| 6450 | 0x21a920dd, 0x6f202b74, 0xbcbb378f, 0xf2323c26, 0xc0fc0838, |
| 6451 | 0x8e750391, 0x5dee1f6a, 0x136714c3, 0x38727756, 0x76fb7cff, |
| 6452 | 0xa5606004, 0xebe96bad, 0xd9275fb3, 0x97ae541a, 0x443548e1, |
| 6453 | 0x0abc4348, 0x121f8fcb, 0x5c968462, 0x8f0d9899, 0xc1849330, |
| 6454 | 0xf34aa72e, 0xbdc3ac87, 0x6e58b07c, 0x20d1bbd5, 0x0bc4d840, |
| 6455 | 0x454dd3e9, 0x96d6cf12, 0xd85fc4bb, 0xea91f0a5, 0xa418fb0c, |
| 6456 | 0x7783e7f7, 0x390aec5e, 0x881ec2a9, 0xc697c900, 0x150cd5fb, |
| 6457 | 0x5b85de52, 0x694bea4c, 0x27c2e1e5, 0xf459fd1e, 0xbad0f6b7, |
| 6458 | 0x91c59522, 0xdf4c9e8b, 0x0cd78270, 0x425e89d9, 0x7090bdc7, |
| 6459 | 0x3e19b66e, 0xed82aa95, 0xa30ba13c, 0xbba86dbf, 0xf5216616, |
| 6460 | 0x26ba7aed, 0x68337144, 0x5afd455a, 0x14744ef3, 0xc7ef5208, |
| 6461 | 0x896659a1, 0xa2733a34, 0xecfa319d, 0x3f612d66, 0x71e826cf, |
| 6462 | 0x432612d1, 0x0daf1978, 0xde340583, 0x90bd0e2a, 0xef739c85, |
| 6463 | 0xa1fa972c, 0x72618bd7, 0x3ce8807e, 0x0e26b460, 0x40afbfc9, |
| 6464 | 0x9334a332, 0xddbda89b, 0xf6a8cb0e, 0xb821c0a7, 0x6bbadc5c, |
| 6465 | 0x2533d7f5, 0x17fde3eb, 0x5974e842, 0x8aeff4b9, 0xc466ff10, |
| 6466 | 0xdcc53393, 0x924c383a, 0x41d724c1, 0x0f5e2f68, 0x3d901b76, |
| 6467 | 0x731910df, 0xa0820c24, 0xee0b078d, 0xc51e6418, 0x8b976fb1, |
| 6468 | 0x580c734a, 0x168578e3, 0x244b4cfd, 0x6ac24754, 0xb9595baf, |
| 6469 | 0xf7d05006}, |
| 6470 | {0x00000000, 0x8d88fde2, 0xc060fd85, 0x4de80067, 0x5bb0fd4b, |
| 6471 | 0xd63800a9, 0x9bd000ce, 0x1658fd2c, 0xb761fa96, 0x3ae90774, |
| 6472 | 0x77010713, 0xfa89faf1, 0xecd107dd, 0x6159fa3f, 0x2cb1fa58, |
| 6473 | 0xa13907ba, 0xb5b2f36d, 0x383a0e8f, 0x75d20ee8, 0xf85af30a, |
| 6474 | 0xee020e26, 0x638af3c4, 0x2e62f3a3, 0xa3ea0e41, 0x02d309fb, |
| 6475 | 0x8f5bf419, 0xc2b3f47e, 0x4f3b099c, 0x5963f4b0, 0xd4eb0952, |
| 6476 | 0x99030935, 0x148bf4d7, 0xb014e09b, 0x3d9c1d79, 0x70741d1e, |
| 6477 | 0xfdfce0fc, 0xeba41dd0, 0x662ce032, 0x2bc4e055, 0xa64c1db7, |
| 6478 | 0x07751a0d, 0x8afde7ef, 0xc715e788, 0x4a9d1a6a, 0x5cc5e746, |
| 6479 | 0xd14d1aa4, 0x9ca51ac3, 0x112de721, 0x05a613f6, 0x882eee14, |
| 6480 | 0xc5c6ee73, 0x484e1391, 0x5e16eebd, 0xd39e135f, 0x9e761338, |
| 6481 | 0x13feeeda, 0xb2c7e960, 0x3f4f1482, 0x72a714e5, 0xff2fe907, |
| 6482 | 0xe977142b, 0x64ffe9c9, 0x2917e9ae, 0xa49f144c, 0xbb58c777, |
| 6483 | 0x36d03a95, 0x7b383af2, 0xf6b0c710, 0xe0e83a3c, 0x6d60c7de, |
| 6484 | 0x2088c7b9, 0xad003a5b, 0x0c393de1, 0x81b1c003, 0xcc59c064, |
| 6485 | 0x41d13d86, 0x5789c0aa, 0xda013d48, 0x97e93d2f, 0x1a61c0cd, |
| 6486 | 0x0eea341a, 0x8362c9f8, 0xce8ac99f, 0x4302347d, 0x555ac951, |
| 6487 | 0xd8d234b3, 0x953a34d4, 0x18b2c936, 0xb98bce8c, 0x3403336e, |
| 6488 | 0x79eb3309, 0xf463ceeb, 0xe23b33c7, 0x6fb3ce25, 0x225bce42, |
| 6489 | 0xafd333a0, 0x0b4c27ec, 0x86c4da0e, 0xcb2cda69, 0x46a4278b, |
| 6490 | 0x50fcdaa7, 0xdd742745, 0x909c2722, 0x1d14dac0, 0xbc2ddd7a, |
| 6491 | 0x31a52098, 0x7c4d20ff, 0xf1c5dd1d, 0xe79d2031, 0x6a15ddd3, |
| 6492 | 0x27fdddb4, 0xaa752056, 0xbefed481, 0x33762963, 0x7e9e2904, |
| 6493 | 0xf316d4e6, 0xe54e29ca, 0x68c6d428, 0x252ed44f, 0xa8a629ad, |
| 6494 | 0x099f2e17, 0x8417d3f5, 0xc9ffd392, 0x44772e70, 0x522fd35c, |
| 6495 | 0xdfa72ebe, 0x924f2ed9, 0x1fc7d33b, 0xadc088af, 0x2048754d, |
| 6496 | 0x6da0752a, 0xe02888c8, 0xf67075e4, 0x7bf88806, 0x36108861, |
| 6497 | 0xbb987583, 0x1aa17239, 0x97298fdb, 0xdac18fbc, 0x5749725e, |
| 6498 | 0x41118f72, 0xcc997290, 0x817172f7, 0x0cf98f15, 0x18727bc2, |
| 6499 | 0x95fa8620, 0xd8128647, 0x559a7ba5, 0x43c28689, 0xce4a7b6b, |
| 6500 | 0x83a27b0c, 0x0e2a86ee, 0xaf138154, 0x229b7cb6, 0x6f737cd1, |
| 6501 | 0xe2fb8133, 0xf4a37c1f, 0x792b81fd, 0x34c3819a, 0xb94b7c78, |
| 6502 | 0x1dd46834, 0x905c95d6, 0xddb495b1, 0x503c6853, 0x4664957f, |
| 6503 | 0xcbec689d, 0x860468fa, 0x0b8c9518, 0xaab592a2, 0x273d6f40, |
| 6504 | 0x6ad56f27, 0xe75d92c5, 0xf1056fe9, 0x7c8d920b, 0x3165926c, |
| 6505 | 0xbced6f8e, 0xa8669b59, 0x25ee66bb, 0x680666dc, 0xe58e9b3e, |
| 6506 | 0xf3d66612, 0x7e5e9bf0, 0x33b69b97, 0xbe3e6675, 0x1f0761cf, |
| 6507 | 0x928f9c2d, 0xdf679c4a, 0x52ef61a8, 0x44b79c84, 0xc93f6166, |
| 6508 | 0x84d76101, 0x095f9ce3, 0x16984fd8, 0x9b10b23a, 0xd6f8b25d, |
| 6509 | 0x5b704fbf, 0x4d28b293, 0xc0a04f71, 0x8d484f16, 0x00c0b2f4, |
| 6510 | 0xa1f9b54e, 0x2c7148ac, 0x619948cb, 0xec11b529, 0xfa494805, |
| 6511 | 0x77c1b5e7, 0x3a29b580, 0xb7a14862, 0xa32abcb5, 0x2ea24157, |
| 6512 | 0x634a4130, 0xeec2bcd2, 0xf89a41fe, 0x7512bc1c, 0x38fabc7b, |
| 6513 | 0xb5724199, 0x144b4623, 0x99c3bbc1, 0xd42bbba6, 0x59a34644, |
| 6514 | 0x4ffbbb68, 0xc273468a, 0x8f9b46ed, 0x0213bb0f, 0xa68caf43, |
| 6515 | 0x2b0452a1, 0x66ec52c6, 0xeb64af24, 0xfd3c5208, 0x70b4afea, |
| 6516 | 0x3d5caf8d, 0xb0d4526f, 0x11ed55d5, 0x9c65a837, 0xd18da850, |
| 6517 | 0x5c0555b2, 0x4a5da89e, 0xc7d5557c, 0x8a3d551b, 0x07b5a8f9, |
| 6518 | 0x133e5c2e, 0x9eb6a1cc, 0xd35ea1ab, 0x5ed65c49, 0x488ea165, |
| 6519 | 0xc5065c87, 0x88ee5ce0, 0x0566a102, 0xa45fa6b8, 0x29d75b5a, |
| 6520 | 0x643f5b3d, 0xe9b7a6df, 0xffef5bf3, 0x7267a611, 0x3f8fa676, |
| 6521 | 0xb2075b94}, |
| 6522 | {0x00000000, 0x80f0171f, 0xda91287f, 0x5a613f60, 0x6e5356bf, |
| 6523 | 0xeea341a0, 0xb4c27ec0, 0x343269df, 0xdca6ad7e, 0x5c56ba61, |
| 6524 | 0x06378501, 0x86c7921e, 0xb2f5fbc1, 0x3205ecde, 0x6864d3be, |
| 6525 | 0xe894c4a1, 0x623c5cbd, 0xe2cc4ba2, 0xb8ad74c2, 0x385d63dd, |
| 6526 | 0x0c6f0a02, 0x8c9f1d1d, 0xd6fe227d, 0x560e3562, 0xbe9af1c3, |
| 6527 | 0x3e6ae6dc, 0x640bd9bc, 0xe4fbcea3, 0xd0c9a77c, 0x5039b063, |
| 6528 | 0x0a588f03, 0x8aa8981c, 0xc478b97a, 0x4488ae65, 0x1ee99105, |
| 6529 | 0x9e19861a, 0xaa2befc5, 0x2adbf8da, 0x70bac7ba, 0xf04ad0a5, |
| 6530 | 0x18de1404, 0x982e031b, 0xc24f3c7b, 0x42bf2b64, 0x768d42bb, |
| 6531 | 0xf67d55a4, 0xac1c6ac4, 0x2cec7ddb, 0xa644e5c7, 0x26b4f2d8, |
| 6532 | 0x7cd5cdb8, 0xfc25daa7, 0xc817b378, 0x48e7a467, 0x12869b07, |
| 6533 | 0x92768c18, 0x7ae248b9, 0xfa125fa6, 0xa07360c6, 0x208377d9, |
| 6534 | 0x14b11e06, 0x94410919, 0xce203679, 0x4ed02166, 0x538074b5, |
| 6535 | 0xd37063aa, 0x89115cca, 0x09e14bd5, 0x3dd3220a, 0xbd233515, |
| 6536 | 0xe7420a75, 0x67b21d6a, 0x8f26d9cb, 0x0fd6ced4, 0x55b7f1b4, |
| 6537 | 0xd547e6ab, 0xe1758f74, 0x6185986b, 0x3be4a70b, 0xbb14b014, |
| 6538 | 0x31bc2808, 0xb14c3f17, 0xeb2d0077, 0x6bdd1768, 0x5fef7eb7, |
| 6539 | 0xdf1f69a8, 0x857e56c8, 0x058e41d7, 0xed1a8576, 0x6dea9269, |
| 6540 | 0x378bad09, 0xb77bba16, 0x8349d3c9, 0x03b9c4d6, 0x59d8fbb6, |
| 6541 | 0xd928eca9, 0x97f8cdcf, 0x1708dad0, 0x4d69e5b0, 0xcd99f2af, |
| 6542 | 0xf9ab9b70, 0x795b8c6f, 0x233ab30f, 0xa3caa410, 0x4b5e60b1, |
| 6543 | 0xcbae77ae, 0x91cf48ce, 0x113f5fd1, 0x250d360e, 0xa5fd2111, |
| 6544 | 0xff9c1e71, 0x7f6c096e, 0xf5c49172, 0x7534866d, 0x2f55b90d, |
| 6545 | 0xafa5ae12, 0x9b97c7cd, 0x1b67d0d2, 0x4106efb2, 0xc1f6f8ad, |
| 6546 | 0x29623c0c, 0xa9922b13, 0xf3f31473, 0x7303036c, 0x47316ab3, |
| 6547 | 0xc7c17dac, 0x9da042cc, 0x1d5055d3, 0xa700e96a, 0x27f0fe75, |
| 6548 | 0x7d91c115, 0xfd61d60a, 0xc953bfd5, 0x49a3a8ca, 0x13c297aa, |
| 6549 | 0x933280b5, 0x7ba64414, 0xfb56530b, 0xa1376c6b, 0x21c77b74, |
| 6550 | 0x15f512ab, 0x950505b4, 0xcf643ad4, 0x4f942dcb, 0xc53cb5d7, |
| 6551 | 0x45cca2c8, 0x1fad9da8, 0x9f5d8ab7, 0xab6fe368, 0x2b9ff477, |
| 6552 | 0x71fecb17, 0xf10edc08, 0x199a18a9, 0x996a0fb6, 0xc30b30d6, |
| 6553 | 0x43fb27c9, 0x77c94e16, 0xf7395909, 0xad586669, 0x2da87176, |
| 6554 | 0x63785010, 0xe388470f, 0xb9e9786f, 0x39196f70, 0x0d2b06af, |
| 6555 | 0x8ddb11b0, 0xd7ba2ed0, 0x574a39cf, 0xbfdefd6e, 0x3f2eea71, |
| 6556 | 0x654fd511, 0xe5bfc20e, 0xd18dabd1, 0x517dbcce, 0x0b1c83ae, |
| 6557 | 0x8bec94b1, 0x01440cad, 0x81b41bb2, 0xdbd524d2, 0x5b2533cd, |
| 6558 | 0x6f175a12, 0xefe74d0d, 0xb586726d, 0x35766572, 0xdde2a1d3, |
| 6559 | 0x5d12b6cc, 0x077389ac, 0x87839eb3, 0xb3b1f76c, 0x3341e073, |
| 6560 | 0x6920df13, 0xe9d0c80c, 0xf4809ddf, 0x74708ac0, 0x2e11b5a0, |
| 6561 | 0xaee1a2bf, 0x9ad3cb60, 0x1a23dc7f, 0x4042e31f, 0xc0b2f400, |
| 6562 | 0x282630a1, 0xa8d627be, 0xf2b718de, 0x72470fc1, 0x4675661e, |
| 6563 | 0xc6857101, 0x9ce44e61, 0x1c14597e, 0x96bcc162, 0x164cd67d, |
| 6564 | 0x4c2de91d, 0xccddfe02, 0xf8ef97dd, 0x781f80c2, 0x227ebfa2, |
| 6565 | 0xa28ea8bd, 0x4a1a6c1c, 0xcaea7b03, 0x908b4463, 0x107b537c, |
| 6566 | 0x24493aa3, 0xa4b92dbc, 0xfed812dc, 0x7e2805c3, 0x30f824a5, |
| 6567 | 0xb00833ba, 0xea690cda, 0x6a991bc5, 0x5eab721a, 0xde5b6505, |
| 6568 | 0x843a5a65, 0x04ca4d7a, 0xec5e89db, 0x6cae9ec4, 0x36cfa1a4, |
| 6569 | 0xb63fb6bb, 0x820ddf64, 0x02fdc87b, 0x589cf71b, 0xd86ce004, |
| 6570 | 0x52c47818, 0xd2346f07, 0x88555067, 0x08a54778, 0x3c972ea7, |
| 6571 | 0xbc6739b8, 0xe60606d8, 0x66f611c7, 0x8e62d566, 0x0e92c279, |
| 6572 | 0x54f3fd19, 0xd403ea06, 0xe03183d9, 0x60c194c6, 0x3aa0aba6, |
| 6573 | 0xba50bcb9}, |
| 6574 | {0x00000000, 0x9570d495, 0xf190af6b, 0x64e07bfe, 0x38505897, |
| 6575 | 0xad208c02, 0xc9c0f7fc, 0x5cb02369, 0x70a0b12e, 0xe5d065bb, |
| 6576 | 0x81301e45, 0x1440cad0, 0x48f0e9b9, 0xdd803d2c, 0xb96046d2, |
| 6577 | 0x2c109247, 0xe141625c, 0x7431b6c9, 0x10d1cd37, 0x85a119a2, |
| 6578 | 0xd9113acb, 0x4c61ee5e, 0x288195a0, 0xbdf14135, 0x91e1d372, |
| 6579 | 0x049107e7, 0x60717c19, 0xf501a88c, 0xa9b18be5, 0x3cc15f70, |
| 6580 | 0x5821248e, 0xcd51f01b, 0x19f3c2f9, 0x8c83166c, 0xe8636d92, |
| 6581 | 0x7d13b907, 0x21a39a6e, 0xb4d34efb, 0xd0333505, 0x4543e190, |
| 6582 | 0x695373d7, 0xfc23a742, 0x98c3dcbc, 0x0db30829, 0x51032b40, |
| 6583 | 0xc473ffd5, 0xa093842b, 0x35e350be, 0xf8b2a0a5, 0x6dc27430, |
| 6584 | 0x09220fce, 0x9c52db5b, 0xc0e2f832, 0x55922ca7, 0x31725759, |
| 6585 | 0xa40283cc, 0x8812118b, 0x1d62c51e, 0x7982bee0, 0xecf26a75, |
| 6586 | 0xb042491c, 0x25329d89, 0x41d2e677, 0xd4a232e2, 0x33e785f2, |
| 6587 | 0xa6975167, 0xc2772a99, 0x5707fe0c, 0x0bb7dd65, 0x9ec709f0, |
| 6588 | 0xfa27720e, 0x6f57a69b, 0x434734dc, 0xd637e049, 0xb2d79bb7, |
| 6589 | 0x27a74f22, 0x7b176c4b, 0xee67b8de, 0x8a87c320, 0x1ff717b5, |
| 6590 | 0xd2a6e7ae, 0x47d6333b, 0x233648c5, 0xb6469c50, 0xeaf6bf39, |
| 6591 | 0x7f866bac, 0x1b661052, 0x8e16c4c7, 0xa2065680, 0x37768215, |
| 6592 | 0x5396f9eb, 0xc6e62d7e, 0x9a560e17, 0x0f26da82, 0x6bc6a17c, |
| 6593 | 0xfeb675e9, 0x2a14470b, 0xbf64939e, 0xdb84e860, 0x4ef43cf5, |
| 6594 | 0x12441f9c, 0x8734cb09, 0xe3d4b0f7, 0x76a46462, 0x5ab4f625, |
| 6595 | 0xcfc422b0, 0xab24594e, 0x3e548ddb, 0x62e4aeb2, 0xf7947a27, |
| 6596 | 0x937401d9, 0x0604d54c, 0xcb552557, 0x5e25f1c2, 0x3ac58a3c, |
| 6597 | 0xafb55ea9, 0xf3057dc0, 0x6675a955, 0x0295d2ab, 0x97e5063e, |
| 6598 | 0xbbf59479, 0x2e8540ec, 0x4a653b12, 0xdf15ef87, 0x83a5ccee, |
| 6599 | 0x16d5187b, 0x72356385, 0xe745b710, 0x67cf0be4, 0xf2bfdf71, |
| 6600 | 0x965fa48f, 0x032f701a, 0x5f9f5373, 0xcaef87e6, 0xae0ffc18, |
| 6601 | 0x3b7f288d, 0x176fbaca, 0x821f6e5f, 0xe6ff15a1, 0x738fc134, |
| 6602 | 0x2f3fe25d, 0xba4f36c8, 0xdeaf4d36, 0x4bdf99a3, 0x868e69b8, |
| 6603 | 0x13febd2d, 0x771ec6d3, 0xe26e1246, 0xbede312f, 0x2baee5ba, |
| 6604 | 0x4f4e9e44, 0xda3e4ad1, 0xf62ed896, 0x635e0c03, 0x07be77fd, |
| 6605 | 0x92cea368, 0xce7e8001, 0x5b0e5494, 0x3fee2f6a, 0xaa9efbff, |
| 6606 | 0x7e3cc91d, 0xeb4c1d88, 0x8fac6676, 0x1adcb2e3, 0x466c918a, |
| 6607 | 0xd31c451f, 0xb7fc3ee1, 0x228cea74, 0x0e9c7833, 0x9becaca6, |
| 6608 | 0xff0cd758, 0x6a7c03cd, 0x36cc20a4, 0xa3bcf431, 0xc75c8fcf, |
| 6609 | 0x522c5b5a, 0x9f7dab41, 0x0a0d7fd4, 0x6eed042a, 0xfb9dd0bf, |
| 6610 | 0xa72df3d6, 0x325d2743, 0x56bd5cbd, 0xc3cd8828, 0xefdd1a6f, |
| 6611 | 0x7aadcefa, 0x1e4db504, 0x8b3d6191, 0xd78d42f8, 0x42fd966d, |
| 6612 | 0x261ded93, 0xb36d3906, 0x54288e16, 0xc1585a83, 0xa5b8217d, |
| 6613 | 0x30c8f5e8, 0x6c78d681, 0xf9080214, 0x9de879ea, 0x0898ad7f, |
| 6614 | 0x24883f38, 0xb1f8ebad, 0xd5189053, 0x406844c6, 0x1cd867af, |
| 6615 | 0x89a8b33a, 0xed48c8c4, 0x78381c51, 0xb569ec4a, 0x201938df, |
| 6616 | 0x44f94321, 0xd18997b4, 0x8d39b4dd, 0x18496048, 0x7ca91bb6, |
| 6617 | 0xe9d9cf23, 0xc5c95d64, 0x50b989f1, 0x3459f20f, 0xa129269a, |
| 6618 | 0xfd9905f3, 0x68e9d166, 0x0c09aa98, 0x99797e0d, 0x4ddb4cef, |
| 6619 | 0xd8ab987a, 0xbc4be384, 0x293b3711, 0x758b1478, 0xe0fbc0ed, |
| 6620 | 0x841bbb13, 0x116b6f86, 0x3d7bfdc1, 0xa80b2954, 0xcceb52aa, |
| 6621 | 0x599b863f, 0x052ba556, 0x905b71c3, 0xf4bb0a3d, 0x61cbdea8, |
| 6622 | 0xac9a2eb3, 0x39eafa26, 0x5d0a81d8, 0xc87a554d, 0x94ca7624, |
| 6623 | 0x01baa2b1, 0x655ad94f, 0xf02a0dda, 0xdc3a9f9d, 0x494a4b08, |
| 6624 | 0x2daa30f6, 0xb8dae463, 0xe46ac70a, 0x711a139f, 0x15fa6861, |
| 6625 | 0x808abcf4}, |
| 6626 | {0x00000000, 0xcf9e17c8, 0x444d29d1, 0x8bd33e19, 0x889a53a2, |
| 6627 | 0x4704446a, 0xccd77a73, 0x03496dbb, 0xca45a105, 0x05dbb6cd, |
| 6628 | 0x8e0888d4, 0x41969f1c, 0x42dff2a7, 0x8d41e56f, 0x0692db76, |
| 6629 | 0xc90cccbe, 0x4ffa444b, 0x80645383, 0x0bb76d9a, 0xc4297a52, |
| 6630 | 0xc76017e9, 0x08fe0021, 0x832d3e38, 0x4cb329f0, 0x85bfe54e, |
| 6631 | 0x4a21f286, 0xc1f2cc9f, 0x0e6cdb57, 0x0d25b6ec, 0xc2bba124, |
| 6632 | 0x49689f3d, 0x86f688f5, 0x9ff48896, 0x506a9f5e, 0xdbb9a147, |
| 6633 | 0x1427b68f, 0x176edb34, 0xd8f0ccfc, 0x5323f2e5, 0x9cbde52d, |
| 6634 | 0x55b12993, 0x9a2f3e5b, 0x11fc0042, 0xde62178a, 0xdd2b7a31, |
| 6635 | 0x12b56df9, 0x996653e0, 0x56f84428, 0xd00eccdd, 0x1f90db15, |
| 6636 | 0x9443e50c, 0x5bddf2c4, 0x58949f7f, 0x970a88b7, 0x1cd9b6ae, |
| 6637 | 0xd347a166, 0x1a4b6dd8, 0xd5d57a10, 0x5e064409, 0x919853c1, |
| 6638 | 0x92d13e7a, 0x5d4f29b2, 0xd69c17ab, 0x19020063, 0xe498176d, |
| 6639 | 0x2b0600a5, 0xa0d53ebc, 0x6f4b2974, 0x6c0244cf, 0xa39c5307, |
| 6640 | 0x284f6d1e, 0xe7d17ad6, 0x2eddb668, 0xe143a1a0, 0x6a909fb9, |
| 6641 | 0xa50e8871, 0xa647e5ca, 0x69d9f202, 0xe20acc1b, 0x2d94dbd3, |
| 6642 | 0xab625326, 0x64fc44ee, 0xef2f7af7, 0x20b16d3f, 0x23f80084, |
| 6643 | 0xec66174c, 0x67b52955, 0xa82b3e9d, 0x6127f223, 0xaeb9e5eb, |
| 6644 | 0x256adbf2, 0xeaf4cc3a, 0xe9bda181, 0x2623b649, 0xadf08850, |
| 6645 | 0x626e9f98, 0x7b6c9ffb, 0xb4f28833, 0x3f21b62a, 0xf0bfa1e2, |
| 6646 | 0xf3f6cc59, 0x3c68db91, 0xb7bbe588, 0x7825f240, 0xb1293efe, |
| 6647 | 0x7eb72936, 0xf564172f, 0x3afa00e7, 0x39b36d5c, 0xf62d7a94, |
| 6648 | 0x7dfe448d, 0xb2605345, 0x3496dbb0, 0xfb08cc78, 0x70dbf261, |
| 6649 | 0xbf45e5a9, 0xbc0c8812, 0x73929fda, 0xf841a1c3, 0x37dfb60b, |
| 6650 | 0xfed37ab5, 0x314d6d7d, 0xba9e5364, 0x750044ac, 0x76492917, |
| 6651 | 0xb9d73edf, 0x320400c6, 0xfd9a170e, 0x1241289b, 0xdddf3f53, |
| 6652 | 0x560c014a, 0x99921682, 0x9adb7b39, 0x55456cf1, 0xde9652e8, |
| 6653 | 0x11084520, 0xd804899e, 0x179a9e56, 0x9c49a04f, 0x53d7b787, |
| 6654 | 0x509eda3c, 0x9f00cdf4, 0x14d3f3ed, 0xdb4de425, 0x5dbb6cd0, |
| 6655 | 0x92257b18, 0x19f64501, 0xd66852c9, 0xd5213f72, 0x1abf28ba, |
| 6656 | 0x916c16a3, 0x5ef2016b, 0x97fecdd5, 0x5860da1d, 0xd3b3e404, |
| 6657 | 0x1c2df3cc, 0x1f649e77, 0xd0fa89bf, 0x5b29b7a6, 0x94b7a06e, |
| 6658 | 0x8db5a00d, 0x422bb7c5, 0xc9f889dc, 0x06669e14, 0x052ff3af, |
| 6659 | 0xcab1e467, 0x4162da7e, 0x8efccdb6, 0x47f00108, 0x886e16c0, |
| 6660 | 0x03bd28d9, 0xcc233f11, 0xcf6a52aa, 0x00f44562, 0x8b277b7b, |
| 6661 | 0x44b96cb3, 0xc24fe446, 0x0dd1f38e, 0x8602cd97, 0x499cda5f, |
| 6662 | 0x4ad5b7e4, 0x854ba02c, 0x0e989e35, 0xc10689fd, 0x080a4543, |
| 6663 | 0xc794528b, 0x4c476c92, 0x83d97b5a, 0x809016e1, 0x4f0e0129, |
| 6664 | 0xc4dd3f30, 0x0b4328f8, 0xf6d93ff6, 0x3947283e, 0xb2941627, |
| 6665 | 0x7d0a01ef, 0x7e436c54, 0xb1dd7b9c, 0x3a0e4585, 0xf590524d, |
| 6666 | 0x3c9c9ef3, 0xf302893b, 0x78d1b722, 0xb74fa0ea, 0xb406cd51, |
| 6667 | 0x7b98da99, 0xf04be480, 0x3fd5f348, 0xb9237bbd, 0x76bd6c75, |
| 6668 | 0xfd6e526c, 0x32f045a4, 0x31b9281f, 0xfe273fd7, 0x75f401ce, |
| 6669 | 0xba6a1606, 0x7366dab8, 0xbcf8cd70, 0x372bf369, 0xf8b5e4a1, |
| 6670 | 0xfbfc891a, 0x34629ed2, 0xbfb1a0cb, 0x702fb703, 0x692db760, |
| 6671 | 0xa6b3a0a8, 0x2d609eb1, 0xe2fe8979, 0xe1b7e4c2, 0x2e29f30a, |
| 6672 | 0xa5facd13, 0x6a64dadb, 0xa3681665, 0x6cf601ad, 0xe7253fb4, |
| 6673 | 0x28bb287c, 0x2bf245c7, 0xe46c520f, 0x6fbf6c16, 0xa0217bde, |
| 6674 | 0x26d7f32b, 0xe949e4e3, 0x629adafa, 0xad04cd32, 0xae4da089, |
| 6675 | 0x61d3b741, 0xea008958, 0x259e9e90, 0xec92522e, 0x230c45e6, |
| 6676 | 0xa8df7bff, 0x67416c37, 0x6408018c, 0xab961644, 0x2045285d, |
| 6677 | 0xefdb3f95}, |
| 6678 | {0x00000000, 0x24825136, 0x4904a26c, 0x6d86f35a, 0x920944d8, |
| 6679 | 0xb68b15ee, 0xdb0de6b4, 0xff8fb782, 0xff638ff1, 0xdbe1dec7, |
| 6680 | 0xb6672d9d, 0x92e57cab, 0x6d6acb29, 0x49e89a1f, 0x246e6945, |
| 6681 | 0x00ec3873, 0x25b619a3, 0x01344895, 0x6cb2bbcf, 0x4830eaf9, |
| 6682 | 0xb7bf5d7b, 0x933d0c4d, 0xfebbff17, 0xda39ae21, 0xdad59652, |
| 6683 | 0xfe57c764, 0x93d1343e, 0xb7536508, 0x48dcd28a, 0x6c5e83bc, |
| 6684 | 0x01d870e6, 0x255a21d0, 0x4b6c3346, 0x6fee6270, 0x0268912a, |
| 6685 | 0x26eac01c, 0xd965779e, 0xfde726a8, 0x9061d5f2, 0xb4e384c4, |
| 6686 | 0xb40fbcb7, 0x908ded81, 0xfd0b1edb, 0xd9894fed, 0x2606f86f, |
| 6687 | 0x0284a959, 0x6f025a03, 0x4b800b35, 0x6eda2ae5, 0x4a587bd3, |
| 6688 | 0x27de8889, 0x035cd9bf, 0xfcd36e3d, 0xd8513f0b, 0xb5d7cc51, |
| 6689 | 0x91559d67, 0x91b9a514, 0xb53bf422, 0xd8bd0778, 0xfc3f564e, |
| 6690 | 0x03b0e1cc, 0x2732b0fa, 0x4ab443a0, 0x6e361296, 0x96d8668c, |
| 6691 | 0xb25a37ba, 0xdfdcc4e0, 0xfb5e95d6, 0x04d12254, 0x20537362, |
| 6692 | 0x4dd58038, 0x6957d10e, 0x69bbe97d, 0x4d39b84b, 0x20bf4b11, |
| 6693 | 0x043d1a27, 0xfbb2ada5, 0xdf30fc93, 0xb2b60fc9, 0x96345eff, |
| 6694 | 0xb36e7f2f, 0x97ec2e19, 0xfa6add43, 0xdee88c75, 0x21673bf7, |
| 6695 | 0x05e56ac1, 0x6863999b, 0x4ce1c8ad, 0x4c0df0de, 0x688fa1e8, |
| 6696 | 0x050952b2, 0x218b0384, 0xde04b406, 0xfa86e530, 0x9700166a, |
| 6697 | 0xb382475c, 0xddb455ca, 0xf93604fc, 0x94b0f7a6, 0xb032a690, |
| 6698 | 0x4fbd1112, 0x6b3f4024, 0x06b9b37e, 0x223be248, 0x22d7da3b, |
| 6699 | 0x06558b0d, 0x6bd37857, 0x4f512961, 0xb0de9ee3, 0x945ccfd5, |
| 6700 | 0xf9da3c8f, 0xdd586db9, 0xf8024c69, 0xdc801d5f, 0xb106ee05, |
| 6701 | 0x9584bf33, 0x6a0b08b1, 0x4e895987, 0x230faadd, 0x078dfbeb, |
| 6702 | 0x0761c398, 0x23e392ae, 0x4e6561f4, 0x6ae730c2, 0x95688740, |
| 6703 | 0xb1ead676, 0xdc6c252c, 0xf8ee741a, 0xf6c1cb59, 0xd2439a6f, |
| 6704 | 0xbfc56935, 0x9b473803, 0x64c88f81, 0x404adeb7, 0x2dcc2ded, |
| 6705 | 0x094e7cdb, 0x09a244a8, 0x2d20159e, 0x40a6e6c4, 0x6424b7f2, |
| 6706 | 0x9bab0070, 0xbf295146, 0xd2afa21c, 0xf62df32a, 0xd377d2fa, |
| 6707 | 0xf7f583cc, 0x9a737096, 0xbef121a0, 0x417e9622, 0x65fcc714, |
| 6708 | 0x087a344e, 0x2cf86578, 0x2c145d0b, 0x08960c3d, 0x6510ff67, |
| 6709 | 0x4192ae51, 0xbe1d19d3, 0x9a9f48e5, 0xf719bbbf, 0xd39bea89, |
| 6710 | 0xbdadf81f, 0x992fa929, 0xf4a95a73, 0xd02b0b45, 0x2fa4bcc7, |
| 6711 | 0x0b26edf1, 0x66a01eab, 0x42224f9d, 0x42ce77ee, 0x664c26d8, |
| 6712 | 0x0bcad582, 0x2f4884b4, 0xd0c73336, 0xf4456200, 0x99c3915a, |
| 6713 | 0xbd41c06c, 0x981be1bc, 0xbc99b08a, 0xd11f43d0, 0xf59d12e6, |
| 6714 | 0x0a12a564, 0x2e90f452, 0x43160708, 0x6794563e, 0x67786e4d, |
| 6715 | 0x43fa3f7b, 0x2e7ccc21, 0x0afe9d17, 0xf5712a95, 0xd1f37ba3, |
| 6716 | 0xbc7588f9, 0x98f7d9cf, 0x6019add5, 0x449bfce3, 0x291d0fb9, |
| 6717 | 0x0d9f5e8f, 0xf210e90d, 0xd692b83b, 0xbb144b61, 0x9f961a57, |
| 6718 | 0x9f7a2224, 0xbbf87312, 0xd67e8048, 0xf2fcd17e, 0x0d7366fc, |
| 6719 | 0x29f137ca, 0x4477c490, 0x60f595a6, 0x45afb476, 0x612de540, |
| 6720 | 0x0cab161a, 0x2829472c, 0xd7a6f0ae, 0xf324a198, 0x9ea252c2, |
| 6721 | 0xba2003f4, 0xbacc3b87, 0x9e4e6ab1, 0xf3c899eb, 0xd74ac8dd, |
| 6722 | 0x28c57f5f, 0x0c472e69, 0x61c1dd33, 0x45438c05, 0x2b759e93, |
| 6723 | 0x0ff7cfa5, 0x62713cff, 0x46f36dc9, 0xb97cda4b, 0x9dfe8b7d, |
| 6724 | 0xf0787827, 0xd4fa2911, 0xd4161162, 0xf0944054, 0x9d12b30e, |
| 6725 | 0xb990e238, 0x461f55ba, 0x629d048c, 0x0f1bf7d6, 0x2b99a6e0, |
| 6726 | 0x0ec38730, 0x2a41d606, 0x47c7255c, 0x6345746a, 0x9ccac3e8, |
| 6727 | 0xb84892de, 0xd5ce6184, 0xf14c30b2, 0xf1a008c1, 0xd52259f7, |
| 6728 | 0xb8a4aaad, 0x9c26fb9b, 0x63a94c19, 0x472b1d2f, 0x2aadee75, |
| 6729 | 0x0e2fbf43}, |
| 6730 | {0x00000000, 0x36f290f3, 0x6de521e6, 0x5b17b115, 0xdbca43cc, |
| 6731 | 0xed38d33f, 0xb62f622a, 0x80ddf2d9, 0x6ce581d9, 0x5a17112a, |
| 6732 | 0x0100a03f, 0x37f230cc, 0xb72fc215, 0x81dd52e6, 0xdacae3f3, |
| 6733 | 0xec387300, 0xd9cb03b2, 0xef399341, 0xb42e2254, 0x82dcb2a7, |
| 6734 | 0x0201407e, 0x34f3d08d, 0x6fe46198, 0x5916f16b, 0xb52e826b, |
| 6735 | 0x83dc1298, 0xd8cba38d, 0xee39337e, 0x6ee4c1a7, 0x58165154, |
| 6736 | 0x0301e041, 0x35f370b2, 0x68e70125, 0x5e1591d6, 0x050220c3, |
| 6737 | 0x33f0b030, 0xb32d42e9, 0x85dfd21a, 0xdec8630f, 0xe83af3fc, |
| 6738 | 0x040280fc, 0x32f0100f, 0x69e7a11a, 0x5f1531e9, 0xdfc8c330, |
| 6739 | 0xe93a53c3, 0xb22de2d6, 0x84df7225, 0xb12c0297, 0x87de9264, |
| 6740 | 0xdcc92371, 0xea3bb382, 0x6ae6415b, 0x5c14d1a8, 0x070360bd, |
| 6741 | 0x31f1f04e, 0xddc9834e, 0xeb3b13bd, 0xb02ca2a8, 0x86de325b, |
| 6742 | 0x0603c082, 0x30f15071, 0x6be6e164, 0x5d147197, 0xd1ce024a, |
| 6743 | 0xe73c92b9, 0xbc2b23ac, 0x8ad9b35f, 0x0a044186, 0x3cf6d175, |
| 6744 | 0x67e16060, 0x5113f093, 0xbd2b8393, 0x8bd91360, 0xd0cea275, |
| 6745 | 0xe63c3286, 0x66e1c05f, 0x501350ac, 0x0b04e1b9, 0x3df6714a, |
| 6746 | 0x080501f8, 0x3ef7910b, 0x65e0201e, 0x5312b0ed, 0xd3cf4234, |
| 6747 | 0xe53dd2c7, 0xbe2a63d2, 0x88d8f321, 0x64e08021, 0x521210d2, |
| 6748 | 0x0905a1c7, 0x3ff73134, 0xbf2ac3ed, 0x89d8531e, 0xd2cfe20b, |
| 6749 | 0xe43d72f8, 0xb929036f, 0x8fdb939c, 0xd4cc2289, 0xe23eb27a, |
| 6750 | 0x62e340a3, 0x5411d050, 0x0f066145, 0x39f4f1b6, 0xd5cc82b6, |
| 6751 | 0xe33e1245, 0xb829a350, 0x8edb33a3, 0x0e06c17a, 0x38f45189, |
| 6752 | 0x63e3e09c, 0x5511706f, 0x60e200dd, 0x5610902e, 0x0d07213b, |
| 6753 | 0x3bf5b1c8, 0xbb284311, 0x8ddad3e2, 0xd6cd62f7, 0xe03ff204, |
| 6754 | 0x0c078104, 0x3af511f7, 0x61e2a0e2, 0x57103011, 0xd7cdc2c8, |
| 6755 | 0xe13f523b, 0xba28e32e, 0x8cda73dd, 0x78ed02d5, 0x4e1f9226, |
| 6756 | 0x15082333, 0x23fab3c0, 0xa3274119, 0x95d5d1ea, 0xcec260ff, |
| 6757 | 0xf830f00c, 0x1408830c, 0x22fa13ff, 0x79eda2ea, 0x4f1f3219, |
| 6758 | 0xcfc2c0c0, 0xf9305033, 0xa227e126, 0x94d571d5, 0xa1260167, |
| 6759 | 0x97d49194, 0xccc32081, 0xfa31b072, 0x7aec42ab, 0x4c1ed258, |
| 6760 | 0x1709634d, 0x21fbf3be, 0xcdc380be, 0xfb31104d, 0xa026a158, |
| 6761 | 0x96d431ab, 0x1609c372, 0x20fb5381, 0x7bece294, 0x4d1e7267, |
| 6762 | 0x100a03f0, 0x26f89303, 0x7def2216, 0x4b1db2e5, 0xcbc0403c, |
| 6763 | 0xfd32d0cf, 0xa62561da, 0x90d7f129, 0x7cef8229, 0x4a1d12da, |
| 6764 | 0x110aa3cf, 0x27f8333c, 0xa725c1e5, 0x91d75116, 0xcac0e003, |
| 6765 | 0xfc3270f0, 0xc9c10042, 0xff3390b1, 0xa42421a4, 0x92d6b157, |
| 6766 | 0x120b438e, 0x24f9d37d, 0x7fee6268, 0x491cf29b, 0xa524819b, |
| 6767 | 0x93d61168, 0xc8c1a07d, 0xfe33308e, 0x7eeec257, 0x481c52a4, |
| 6768 | 0x130be3b1, 0x25f97342, 0xa923009f, 0x9fd1906c, 0xc4c62179, |
| 6769 | 0xf234b18a, 0x72e94353, 0x441bd3a0, 0x1f0c62b5, 0x29fef246, |
| 6770 | 0xc5c68146, 0xf33411b5, 0xa823a0a0, 0x9ed13053, 0x1e0cc28a, |
| 6771 | 0x28fe5279, 0x73e9e36c, 0x451b739f, 0x70e8032d, 0x461a93de, |
| 6772 | 0x1d0d22cb, 0x2bffb238, 0xab2240e1, 0x9dd0d012, 0xc6c76107, |
| 6773 | 0xf035f1f4, 0x1c0d82f4, 0x2aff1207, 0x71e8a312, 0x471a33e1, |
| 6774 | 0xc7c7c138, 0xf13551cb, 0xaa22e0de, 0x9cd0702d, 0xc1c401ba, |
| 6775 | 0xf7369149, 0xac21205c, 0x9ad3b0af, 0x1a0e4276, 0x2cfcd285, |
| 6776 | 0x77eb6390, 0x4119f363, 0xad218063, 0x9bd31090, 0xc0c4a185, |
| 6777 | 0xf6363176, 0x76ebc3af, 0x4019535c, 0x1b0ee249, 0x2dfc72ba, |
| 6778 | 0x180f0208, 0x2efd92fb, 0x75ea23ee, 0x4318b31d, 0xc3c541c4, |
| 6779 | 0xf537d137, 0xae206022, 0x98d2f0d1, 0x74ea83d1, 0x42181322, |
| 6780 | 0x190fa237, 0x2ffd32c4, 0xaf20c01d, 0x99d250ee, 0xc2c5e1fb, |
| 6781 | 0xf4377108}}; |
| 6782 | |
| 6783 | local const z_word_t FAR crc_braid_big_table[][256] = { |
| 6784 | {0x0000000000000000, 0xf390f23600000000, 0xe621e56d00000000, |
| 6785 | 0x15b1175b00000000, 0xcc43cadb00000000, 0x3fd338ed00000000, |
| 6786 | 0x2a622fb600000000, 0xd9f2dd8000000000, 0xd981e56c00000000, |
| 6787 | 0x2a11175a00000000, 0x3fa0000100000000, 0xcc30f23700000000, |
| 6788 | 0x15c22fb700000000, 0xe652dd8100000000, 0xf3e3cada00000000, |
| 6789 | 0x007338ec00000000, 0xb203cbd900000000, 0x419339ef00000000, |
| 6790 | 0x54222eb400000000, 0xa7b2dc8200000000, 0x7e40010200000000, |
| 6791 | 0x8dd0f33400000000, 0x9861e46f00000000, 0x6bf1165900000000, |
| 6792 | 0x6b822eb500000000, 0x9812dc8300000000, 0x8da3cbd800000000, |
| 6793 | 0x7e3339ee00000000, 0xa7c1e46e00000000, 0x5451165800000000, |
| 6794 | 0x41e0010300000000, 0xb270f33500000000, 0x2501e76800000000, |
| 6795 | 0xd691155e00000000, 0xc320020500000000, 0x30b0f03300000000, |
| 6796 | 0xe9422db300000000, 0x1ad2df8500000000, 0x0f63c8de00000000, |
| 6797 | 0xfcf33ae800000000, 0xfc80020400000000, 0x0f10f03200000000, |
| 6798 | 0x1aa1e76900000000, 0xe931155f00000000, 0x30c3c8df00000000, |
| 6799 | 0xc3533ae900000000, 0xd6e22db200000000, 0x2572df8400000000, |
| 6800 | 0x97022cb100000000, 0x6492de8700000000, 0x7123c9dc00000000, |
| 6801 | 0x82b33bea00000000, 0x5b41e66a00000000, 0xa8d1145c00000000, |
| 6802 | 0xbd60030700000000, 0x4ef0f13100000000, 0x4e83c9dd00000000, |
| 6803 | 0xbd133beb00000000, 0xa8a22cb000000000, 0x5b32de8600000000, |
| 6804 | 0x82c0030600000000, 0x7150f13000000000, 0x64e1e66b00000000, |
| 6805 | 0x9771145d00000000, 0x4a02ced100000000, 0xb9923ce700000000, |
| 6806 | 0xac232bbc00000000, 0x5fb3d98a00000000, 0x8641040a00000000, |
| 6807 | 0x75d1f63c00000000, 0x6060e16700000000, 0x93f0135100000000, |
| 6808 | 0x93832bbd00000000, 0x6013d98b00000000, 0x75a2ced000000000, |
| 6809 | 0x86323ce600000000, 0x5fc0e16600000000, 0xac50135000000000, |
| 6810 | 0xb9e1040b00000000, 0x4a71f63d00000000, 0xf801050800000000, |
| 6811 | 0x0b91f73e00000000, 0x1e20e06500000000, 0xedb0125300000000, |
| 6812 | 0x3442cfd300000000, 0xc7d23de500000000, 0xd2632abe00000000, |
| 6813 | 0x21f3d88800000000, 0x2180e06400000000, 0xd210125200000000, |
| 6814 | 0xc7a1050900000000, 0x3431f73f00000000, 0xedc32abf00000000, |
| 6815 | 0x1e53d88900000000, 0x0be2cfd200000000, 0xf8723de400000000, |
| 6816 | 0x6f0329b900000000, 0x9c93db8f00000000, 0x8922ccd400000000, |
| 6817 | 0x7ab23ee200000000, 0xa340e36200000000, 0x50d0115400000000, |
| 6818 | 0x4561060f00000000, 0xb6f1f43900000000, 0xb682ccd500000000, |
| 6819 | 0x45123ee300000000, 0x50a329b800000000, 0xa333db8e00000000, |
| 6820 | 0x7ac1060e00000000, 0x8951f43800000000, 0x9ce0e36300000000, |
| 6821 | 0x6f70115500000000, 0xdd00e26000000000, 0x2e90105600000000, |
| 6822 | 0x3b21070d00000000, 0xc8b1f53b00000000, 0x114328bb00000000, |
| 6823 | 0xe2d3da8d00000000, 0xf762cdd600000000, 0x04f23fe000000000, |
| 6824 | 0x0481070c00000000, 0xf711f53a00000000, 0xe2a0e26100000000, |
| 6825 | 0x1130105700000000, 0xc8c2cdd700000000, 0x3b523fe100000000, |
| 6826 | 0x2ee328ba00000000, 0xdd73da8c00000000, 0xd502ed7800000000, |
| 6827 | 0x26921f4e00000000, 0x3323081500000000, 0xc0b3fa2300000000, |
| 6828 | 0x194127a300000000, 0xead1d59500000000, 0xff60c2ce00000000, |
| 6829 | 0x0cf030f800000000, 0x0c83081400000000, 0xff13fa2200000000, |
| 6830 | 0xeaa2ed7900000000, 0x19321f4f00000000, 0xc0c0c2cf00000000, |
| 6831 | 0x335030f900000000, 0x26e127a200000000, 0xd571d59400000000, |
| 6832 | 0x670126a100000000, 0x9491d49700000000, 0x8120c3cc00000000, |
| 6833 | 0x72b031fa00000000, 0xab42ec7a00000000, 0x58d21e4c00000000, |
| 6834 | 0x4d63091700000000, 0xbef3fb2100000000, 0xbe80c3cd00000000, |
| 6835 | 0x4d1031fb00000000, 0x58a126a000000000, 0xab31d49600000000, |
| 6836 | 0x72c3091600000000, 0x8153fb2000000000, 0x94e2ec7b00000000, |
| 6837 | 0x67721e4d00000000, 0xf0030a1000000000, 0x0393f82600000000, |
| 6838 | 0x1622ef7d00000000, 0xe5b21d4b00000000, 0x3c40c0cb00000000, |
| 6839 | 0xcfd032fd00000000, 0xda6125a600000000, 0x29f1d79000000000, |
| 6840 | 0x2982ef7c00000000, 0xda121d4a00000000, 0xcfa30a1100000000, |
| 6841 | 0x3c33f82700000000, 0xe5c125a700000000, 0x1651d79100000000, |
| 6842 | 0x03e0c0ca00000000, 0xf07032fc00000000, 0x4200c1c900000000, |
| 6843 | 0xb19033ff00000000, 0xa42124a400000000, 0x57b1d69200000000, |
| 6844 | 0x8e430b1200000000, 0x7dd3f92400000000, 0x6862ee7f00000000, |
| 6845 | 0x9bf21c4900000000, 0x9b8124a500000000, 0x6811d69300000000, |
| 6846 | 0x7da0c1c800000000, 0x8e3033fe00000000, 0x57c2ee7e00000000, |
| 6847 | 0xa4521c4800000000, 0xb1e30b1300000000, 0x4273f92500000000, |
| 6848 | 0x9f0023a900000000, 0x6c90d19f00000000, 0x7921c6c400000000, |
| 6849 | 0x8ab134f200000000, 0x5343e97200000000, 0xa0d31b4400000000, |
| 6850 | 0xb5620c1f00000000, 0x46f2fe2900000000, 0x4681c6c500000000, |
| 6851 | 0xb51134f300000000, 0xa0a023a800000000, 0x5330d19e00000000, |
| 6852 | 0x8ac20c1e00000000, 0x7952fe2800000000, 0x6ce3e97300000000, |
| 6853 | 0x9f731b4500000000, 0x2d03e87000000000, 0xde931a4600000000, |
| 6854 | 0xcb220d1d00000000, 0x38b2ff2b00000000, 0xe14022ab00000000, |
| 6855 | 0x12d0d09d00000000, 0x0761c7c600000000, 0xf4f135f000000000, |
| 6856 | 0xf4820d1c00000000, 0x0712ff2a00000000, 0x12a3e87100000000, |
| 6857 | 0xe1331a4700000000, 0x38c1c7c700000000, 0xcb5135f100000000, |
| 6858 | 0xdee022aa00000000, 0x2d70d09c00000000, 0xba01c4c100000000, |
| 6859 | 0x499136f700000000, 0x5c2021ac00000000, 0xafb0d39a00000000, |
| 6860 | 0x76420e1a00000000, 0x85d2fc2c00000000, 0x9063eb7700000000, |
| 6861 | 0x63f3194100000000, 0x638021ad00000000, 0x9010d39b00000000, |
| 6862 | 0x85a1c4c000000000, 0x763136f600000000, 0xafc3eb7600000000, |
| 6863 | 0x5c53194000000000, 0x49e20e1b00000000, 0xba72fc2d00000000, |
| 6864 | 0x08020f1800000000, 0xfb92fd2e00000000, 0xee23ea7500000000, |
| 6865 | 0x1db3184300000000, 0xc441c5c300000000, 0x37d137f500000000, |
| 6866 | 0x226020ae00000000, 0xd1f0d29800000000, 0xd183ea7400000000, |
| 6867 | 0x2213184200000000, 0x37a20f1900000000, 0xc432fd2f00000000, |
| 6868 | 0x1dc020af00000000, 0xee50d29900000000, 0xfbe1c5c200000000, |
| 6869 | 0x087137f400000000}, |
| 6870 | {0x0000000000000000, 0x3651822400000000, 0x6ca2044900000000, |
| 6871 | 0x5af3866d00000000, 0xd844099200000000, 0xee158bb600000000, |
| 6872 | 0xb4e60ddb00000000, 0x82b78fff00000000, 0xf18f63ff00000000, |
| 6873 | 0xc7dee1db00000000, 0x9d2d67b600000000, 0xab7ce59200000000, |
| 6874 | 0x29cb6a6d00000000, 0x1f9ae84900000000, 0x45696e2400000000, |
| 6875 | 0x7338ec0000000000, 0xa319b62500000000, 0x9548340100000000, |
| 6876 | 0xcfbbb26c00000000, 0xf9ea304800000000, 0x7b5dbfb700000000, |
| 6877 | 0x4d0c3d9300000000, 0x17ffbbfe00000000, 0x21ae39da00000000, |
| 6878 | 0x5296d5da00000000, 0x64c757fe00000000, 0x3e34d19300000000, |
| 6879 | 0x086553b700000000, 0x8ad2dc4800000000, 0xbc835e6c00000000, |
| 6880 | 0xe670d80100000000, 0xd0215a2500000000, 0x46336c4b00000000, |
| 6881 | 0x7062ee6f00000000, 0x2a91680200000000, 0x1cc0ea2600000000, |
| 6882 | 0x9e7765d900000000, 0xa826e7fd00000000, 0xf2d5619000000000, |
| 6883 | 0xc484e3b400000000, 0xb7bc0fb400000000, 0x81ed8d9000000000, |
| 6884 | 0xdb1e0bfd00000000, 0xed4f89d900000000, 0x6ff8062600000000, |
| 6885 | 0x59a9840200000000, 0x035a026f00000000, 0x350b804b00000000, |
| 6886 | 0xe52ada6e00000000, 0xd37b584a00000000, 0x8988de2700000000, |
| 6887 | 0xbfd95c0300000000, 0x3d6ed3fc00000000, 0x0b3f51d800000000, |
| 6888 | 0x51ccd7b500000000, 0x679d559100000000, 0x14a5b99100000000, |
| 6889 | 0x22f43bb500000000, 0x7807bdd800000000, 0x4e563ffc00000000, |
| 6890 | 0xcce1b00300000000, 0xfab0322700000000, 0xa043b44a00000000, |
| 6891 | 0x9612366e00000000, 0x8c66d89600000000, 0xba375ab200000000, |
| 6892 | 0xe0c4dcdf00000000, 0xd6955efb00000000, 0x5422d10400000000, |
| 6893 | 0x6273532000000000, 0x3880d54d00000000, 0x0ed1576900000000, |
| 6894 | 0x7de9bb6900000000, 0x4bb8394d00000000, 0x114bbf2000000000, |
| 6895 | 0x271a3d0400000000, 0xa5adb2fb00000000, 0x93fc30df00000000, |
| 6896 | 0xc90fb6b200000000, 0xff5e349600000000, 0x2f7f6eb300000000, |
| 6897 | 0x192eec9700000000, 0x43dd6afa00000000, 0x758ce8de00000000, |
| 6898 | 0xf73b672100000000, 0xc16ae50500000000, 0x9b99636800000000, |
| 6899 | 0xadc8e14c00000000, 0xdef00d4c00000000, 0xe8a18f6800000000, |
| 6900 | 0xb252090500000000, 0x84038b2100000000, 0x06b404de00000000, |
| 6901 | 0x30e586fa00000000, 0x6a16009700000000, 0x5c4782b300000000, |
| 6902 | 0xca55b4dd00000000, 0xfc0436f900000000, 0xa6f7b09400000000, |
| 6903 | 0x90a632b000000000, 0x1211bd4f00000000, 0x24403f6b00000000, |
| 6904 | 0x7eb3b90600000000, 0x48e23b2200000000, 0x3bdad72200000000, |
| 6905 | 0x0d8b550600000000, 0x5778d36b00000000, 0x6129514f00000000, |
| 6906 | 0xe39edeb000000000, 0xd5cf5c9400000000, 0x8f3cdaf900000000, |
| 6907 | 0xb96d58dd00000000, 0x694c02f800000000, 0x5f1d80dc00000000, |
| 6908 | 0x05ee06b100000000, 0x33bf849500000000, 0xb1080b6a00000000, |
| 6909 | 0x8759894e00000000, 0xddaa0f2300000000, 0xebfb8d0700000000, |
| 6910 | 0x98c3610700000000, 0xae92e32300000000, 0xf461654e00000000, |
| 6911 | 0xc230e76a00000000, 0x4087689500000000, 0x76d6eab100000000, |
| 6912 | 0x2c256cdc00000000, 0x1a74eef800000000, 0x59cbc1f600000000, |
| 6913 | 0x6f9a43d200000000, 0x3569c5bf00000000, 0x0338479b00000000, |
| 6914 | 0x818fc86400000000, 0xb7de4a4000000000, 0xed2dcc2d00000000, |
| 6915 | 0xdb7c4e0900000000, 0xa844a20900000000, 0x9e15202d00000000, |
| 6916 | 0xc4e6a64000000000, 0xf2b7246400000000, 0x7000ab9b00000000, |
| 6917 | 0x465129bf00000000, 0x1ca2afd200000000, 0x2af32df600000000, |
| 6918 | 0xfad277d300000000, 0xcc83f5f700000000, 0x9670739a00000000, |
| 6919 | 0xa021f1be00000000, 0x22967e4100000000, 0x14c7fc6500000000, |
| 6920 | 0x4e347a0800000000, 0x7865f82c00000000, 0x0b5d142c00000000, |
| 6921 | 0x3d0c960800000000, 0x67ff106500000000, 0x51ae924100000000, |
| 6922 | 0xd3191dbe00000000, 0xe5489f9a00000000, 0xbfbb19f700000000, |
| 6923 | 0x89ea9bd300000000, 0x1ff8adbd00000000, 0x29a92f9900000000, |
| 6924 | 0x735aa9f400000000, 0x450b2bd000000000, 0xc7bca42f00000000, |
| 6925 | 0xf1ed260b00000000, 0xab1ea06600000000, 0x9d4f224200000000, |
| 6926 | 0xee77ce4200000000, 0xd8264c6600000000, 0x82d5ca0b00000000, |
| 6927 | 0xb484482f00000000, 0x3633c7d000000000, 0x006245f400000000, |
| 6928 | 0x5a91c39900000000, 0x6cc041bd00000000, 0xbce11b9800000000, |
| 6929 | 0x8ab099bc00000000, 0xd0431fd100000000, 0xe6129df500000000, |
| 6930 | 0x64a5120a00000000, 0x52f4902e00000000, 0x0807164300000000, |
| 6931 | 0x3e56946700000000, 0x4d6e786700000000, 0x7b3ffa4300000000, |
| 6932 | 0x21cc7c2e00000000, 0x179dfe0a00000000, 0x952a71f500000000, |
| 6933 | 0xa37bf3d100000000, 0xf98875bc00000000, 0xcfd9f79800000000, |
| 6934 | 0xd5ad196000000000, 0xe3fc9b4400000000, 0xb90f1d2900000000, |
| 6935 | 0x8f5e9f0d00000000, 0x0de910f200000000, 0x3bb892d600000000, |
| 6936 | 0x614b14bb00000000, 0x571a969f00000000, 0x24227a9f00000000, |
| 6937 | 0x1273f8bb00000000, 0x48807ed600000000, 0x7ed1fcf200000000, |
| 6938 | 0xfc66730d00000000, 0xca37f12900000000, 0x90c4774400000000, |
| 6939 | 0xa695f56000000000, 0x76b4af4500000000, 0x40e52d6100000000, |
| 6940 | 0x1a16ab0c00000000, 0x2c47292800000000, 0xaef0a6d700000000, |
| 6941 | 0x98a124f300000000, 0xc252a29e00000000, 0xf40320ba00000000, |
| 6942 | 0x873bccba00000000, 0xb16a4e9e00000000, 0xeb99c8f300000000, |
| 6943 | 0xddc84ad700000000, 0x5f7fc52800000000, 0x692e470c00000000, |
| 6944 | 0x33ddc16100000000, 0x058c434500000000, 0x939e752b00000000, |
| 6945 | 0xa5cff70f00000000, 0xff3c716200000000, 0xc96df34600000000, |
| 6946 | 0x4bda7cb900000000, 0x7d8bfe9d00000000, 0x277878f000000000, |
| 6947 | 0x1129fad400000000, 0x621116d400000000, 0x544094f000000000, |
| 6948 | 0x0eb3129d00000000, 0x38e290b900000000, 0xba551f4600000000, |
| 6949 | 0x8c049d6200000000, 0xd6f71b0f00000000, 0xe0a6992b00000000, |
| 6950 | 0x3087c30e00000000, 0x06d6412a00000000, 0x5c25c74700000000, |
| 6951 | 0x6a74456300000000, 0xe8c3ca9c00000000, 0xde9248b800000000, |
| 6952 | 0x8461ced500000000, 0xb2304cf100000000, 0xc108a0f100000000, |
| 6953 | 0xf75922d500000000, 0xadaaa4b800000000, 0x9bfb269c00000000, |
| 6954 | 0x194ca96300000000, 0x2f1d2b4700000000, 0x75eead2a00000000, |
| 6955 | 0x43bf2f0e00000000}, |
| 6956 | {0x0000000000000000, 0xc8179ecf00000000, 0xd1294d4400000000, |
| 6957 | 0x193ed38b00000000, 0xa2539a8800000000, 0x6a44044700000000, |
| 6958 | 0x737ad7cc00000000, 0xbb6d490300000000, 0x05a145ca00000000, |
| 6959 | 0xcdb6db0500000000, 0xd488088e00000000, 0x1c9f964100000000, |
| 6960 | 0xa7f2df4200000000, 0x6fe5418d00000000, 0x76db920600000000, |
| 6961 | 0xbecc0cc900000000, 0x4b44fa4f00000000, 0x8353648000000000, |
| 6962 | 0x9a6db70b00000000, 0x527a29c400000000, 0xe91760c700000000, |
| 6963 | 0x2100fe0800000000, 0x383e2d8300000000, 0xf029b34c00000000, |
| 6964 | 0x4ee5bf8500000000, 0x86f2214a00000000, 0x9fccf2c100000000, |
| 6965 | 0x57db6c0e00000000, 0xecb6250d00000000, 0x24a1bbc200000000, |
| 6966 | 0x3d9f684900000000, 0xf588f68600000000, 0x9688f49f00000000, |
| 6967 | 0x5e9f6a5000000000, 0x47a1b9db00000000, 0x8fb6271400000000, |
| 6968 | 0x34db6e1700000000, 0xfcccf0d800000000, 0xe5f2235300000000, |
| 6969 | 0x2de5bd9c00000000, 0x9329b15500000000, 0x5b3e2f9a00000000, |
| 6970 | 0x4200fc1100000000, 0x8a1762de00000000, 0x317a2bdd00000000, |
| 6971 | 0xf96db51200000000, 0xe053669900000000, 0x2844f85600000000, |
| 6972 | 0xddcc0ed000000000, 0x15db901f00000000, 0x0ce5439400000000, |
| 6973 | 0xc4f2dd5b00000000, 0x7f9f945800000000, 0xb7880a9700000000, |
| 6974 | 0xaeb6d91c00000000, 0x66a147d300000000, 0xd86d4b1a00000000, |
| 6975 | 0x107ad5d500000000, 0x0944065e00000000, 0xc153989100000000, |
| 6976 | 0x7a3ed19200000000, 0xb2294f5d00000000, 0xab179cd600000000, |
| 6977 | 0x6300021900000000, 0x6d1798e400000000, 0xa500062b00000000, |
| 6978 | 0xbc3ed5a000000000, 0x74294b6f00000000, 0xcf44026c00000000, |
| 6979 | 0x07539ca300000000, 0x1e6d4f2800000000, 0xd67ad1e700000000, |
| 6980 | 0x68b6dd2e00000000, 0xa0a143e100000000, 0xb99f906a00000000, |
| 6981 | 0x71880ea500000000, 0xcae547a600000000, 0x02f2d96900000000, |
| 6982 | 0x1bcc0ae200000000, 0xd3db942d00000000, 0x265362ab00000000, |
| 6983 | 0xee44fc6400000000, 0xf77a2fef00000000, 0x3f6db12000000000, |
| 6984 | 0x8400f82300000000, 0x4c1766ec00000000, 0x5529b56700000000, |
| 6985 | 0x9d3e2ba800000000, 0x23f2276100000000, 0xebe5b9ae00000000, |
| 6986 | 0xf2db6a2500000000, 0x3accf4ea00000000, 0x81a1bde900000000, |
| 6987 | 0x49b6232600000000, 0x5088f0ad00000000, 0x989f6e6200000000, |
| 6988 | 0xfb9f6c7b00000000, 0x3388f2b400000000, 0x2ab6213f00000000, |
| 6989 | 0xe2a1bff000000000, 0x59ccf6f300000000, 0x91db683c00000000, |
| 6990 | 0x88e5bbb700000000, 0x40f2257800000000, 0xfe3e29b100000000, |
| 6991 | 0x3629b77e00000000, 0x2f1764f500000000, 0xe700fa3a00000000, |
| 6992 | 0x5c6db33900000000, 0x947a2df600000000, 0x8d44fe7d00000000, |
| 6993 | 0x455360b200000000, 0xb0db963400000000, 0x78cc08fb00000000, |
| 6994 | 0x61f2db7000000000, 0xa9e545bf00000000, 0x12880cbc00000000, |
| 6995 | 0xda9f927300000000, 0xc3a141f800000000, 0x0bb6df3700000000, |
| 6996 | 0xb57ad3fe00000000, 0x7d6d4d3100000000, 0x64539eba00000000, |
| 6997 | 0xac44007500000000, 0x1729497600000000, 0xdf3ed7b900000000, |
| 6998 | 0xc600043200000000, 0x0e179afd00000000, 0x9b28411200000000, |
| 6999 | 0x533fdfdd00000000, 0x4a010c5600000000, 0x8216929900000000, |
| 7000 | 0x397bdb9a00000000, 0xf16c455500000000, 0xe85296de00000000, |
| 7001 | 0x2045081100000000, 0x9e8904d800000000, 0x569e9a1700000000, |
| 7002 | 0x4fa0499c00000000, 0x87b7d75300000000, 0x3cda9e5000000000, |
| 7003 | 0xf4cd009f00000000, 0xedf3d31400000000, 0x25e44ddb00000000, |
| 7004 | 0xd06cbb5d00000000, 0x187b259200000000, 0x0145f61900000000, |
| 7005 | 0xc95268d600000000, 0x723f21d500000000, 0xba28bf1a00000000, |
| 7006 | 0xa3166c9100000000, 0x6b01f25e00000000, 0xd5cdfe9700000000, |
| 7007 | 0x1dda605800000000, 0x04e4b3d300000000, 0xccf32d1c00000000, |
| 7008 | 0x779e641f00000000, 0xbf89fad000000000, 0xa6b7295b00000000, |
| 7009 | 0x6ea0b79400000000, 0x0da0b58d00000000, 0xc5b72b4200000000, |
| 7010 | 0xdc89f8c900000000, 0x149e660600000000, 0xaff32f0500000000, |
| 7011 | 0x67e4b1ca00000000, 0x7eda624100000000, 0xb6cdfc8e00000000, |
| 7012 | 0x0801f04700000000, 0xc0166e8800000000, 0xd928bd0300000000, |
| 7013 | 0x113f23cc00000000, 0xaa526acf00000000, 0x6245f40000000000, |
| 7014 | 0x7b7b278b00000000, 0xb36cb94400000000, 0x46e44fc200000000, |
| 7015 | 0x8ef3d10d00000000, 0x97cd028600000000, 0x5fda9c4900000000, |
| 7016 | 0xe4b7d54a00000000, 0x2ca04b8500000000, 0x359e980e00000000, |
| 7017 | 0xfd8906c100000000, 0x43450a0800000000, 0x8b5294c700000000, |
| 7018 | 0x926c474c00000000, 0x5a7bd98300000000, 0xe116908000000000, |
| 7019 | 0x29010e4f00000000, 0x303fddc400000000, 0xf828430b00000000, |
| 7020 | 0xf63fd9f600000000, 0x3e28473900000000, 0x271694b200000000, |
| 7021 | 0xef010a7d00000000, 0x546c437e00000000, 0x9c7bddb100000000, |
| 7022 | 0x85450e3a00000000, 0x4d5290f500000000, 0xf39e9c3c00000000, |
| 7023 | 0x3b8902f300000000, 0x22b7d17800000000, 0xeaa04fb700000000, |
| 7024 | 0x51cd06b400000000, 0x99da987b00000000, 0x80e44bf000000000, |
| 7025 | 0x48f3d53f00000000, 0xbd7b23b900000000, 0x756cbd7600000000, |
| 7026 | 0x6c526efd00000000, 0xa445f03200000000, 0x1f28b93100000000, |
| 7027 | 0xd73f27fe00000000, 0xce01f47500000000, 0x06166aba00000000, |
| 7028 | 0xb8da667300000000, 0x70cdf8bc00000000, 0x69f32b3700000000, |
| 7029 | 0xa1e4b5f800000000, 0x1a89fcfb00000000, 0xd29e623400000000, |
| 7030 | 0xcba0b1bf00000000, 0x03b72f7000000000, 0x60b72d6900000000, |
| 7031 | 0xa8a0b3a600000000, 0xb19e602d00000000, 0x7989fee200000000, |
| 7032 | 0xc2e4b7e100000000, 0x0af3292e00000000, 0x13cdfaa500000000, |
| 7033 | 0xdbda646a00000000, 0x651668a300000000, 0xad01f66c00000000, |
| 7034 | 0xb43f25e700000000, 0x7c28bb2800000000, 0xc745f22b00000000, |
| 7035 | 0x0f526ce400000000, 0x166cbf6f00000000, 0xde7b21a000000000, |
| 7036 | 0x2bf3d72600000000, 0xe3e449e900000000, 0xfada9a6200000000, |
| 7037 | 0x32cd04ad00000000, 0x89a04dae00000000, 0x41b7d36100000000, |
| 7038 | 0x588900ea00000000, 0x909e9e2500000000, 0x2e5292ec00000000, |
| 7039 | 0xe6450c2300000000, 0xff7bdfa800000000, 0x376c416700000000, |
| 7040 | 0x8c01086400000000, 0x441696ab00000000, 0x5d28452000000000, |
| 7041 | 0x953fdbef00000000}, |
| 7042 | {0x0000000000000000, 0x95d4709500000000, 0x6baf90f100000000, |
| 7043 | 0xfe7be06400000000, 0x9758503800000000, 0x028c20ad00000000, |
| 7044 | 0xfcf7c0c900000000, 0x6923b05c00000000, 0x2eb1a07000000000, |
| 7045 | 0xbb65d0e500000000, 0x451e308100000000, 0xd0ca401400000000, |
| 7046 | 0xb9e9f04800000000, 0x2c3d80dd00000000, 0xd24660b900000000, |
| 7047 | 0x4792102c00000000, 0x5c6241e100000000, 0xc9b6317400000000, |
| 7048 | 0x37cdd11000000000, 0xa219a18500000000, 0xcb3a11d900000000, |
| 7049 | 0x5eee614c00000000, 0xa095812800000000, 0x3541f1bd00000000, |
| 7050 | 0x72d3e19100000000, 0xe707910400000000, 0x197c716000000000, |
| 7051 | 0x8ca801f500000000, 0xe58bb1a900000000, 0x705fc13c00000000, |
| 7052 | 0x8e24215800000000, 0x1bf051cd00000000, 0xf9c2f31900000000, |
| 7053 | 0x6c16838c00000000, 0x926d63e800000000, 0x07b9137d00000000, |
| 7054 | 0x6e9aa32100000000, 0xfb4ed3b400000000, 0x053533d000000000, |
| 7055 | 0x90e1434500000000, 0xd773536900000000, 0x42a723fc00000000, |
| 7056 | 0xbcdcc39800000000, 0x2908b30d00000000, 0x402b035100000000, |
| 7057 | 0xd5ff73c400000000, 0x2b8493a000000000, 0xbe50e33500000000, |
| 7058 | 0xa5a0b2f800000000, 0x3074c26d00000000, 0xce0f220900000000, |
| 7059 | 0x5bdb529c00000000, 0x32f8e2c000000000, 0xa72c925500000000, |
| 7060 | 0x5957723100000000, 0xcc8302a400000000, 0x8b11128800000000, |
| 7061 | 0x1ec5621d00000000, 0xe0be827900000000, 0x756af2ec00000000, |
| 7062 | 0x1c4942b000000000, 0x899d322500000000, 0x77e6d24100000000, |
| 7063 | 0xe232a2d400000000, 0xf285e73300000000, 0x675197a600000000, |
| 7064 | 0x992a77c200000000, 0x0cfe075700000000, 0x65ddb70b00000000, |
| 7065 | 0xf009c79e00000000, 0x0e7227fa00000000, 0x9ba6576f00000000, |
| 7066 | 0xdc34474300000000, 0x49e037d600000000, 0xb79bd7b200000000, |
| 7067 | 0x224fa72700000000, 0x4b6c177b00000000, 0xdeb867ee00000000, |
| 7068 | 0x20c3878a00000000, 0xb517f71f00000000, 0xaee7a6d200000000, |
| 7069 | 0x3b33d64700000000, 0xc548362300000000, 0x509c46b600000000, |
| 7070 | 0x39bff6ea00000000, 0xac6b867f00000000, 0x5210661b00000000, |
| 7071 | 0xc7c4168e00000000, 0x805606a200000000, 0x1582763700000000, |
| 7072 | 0xebf9965300000000, 0x7e2de6c600000000, 0x170e569a00000000, |
| 7073 | 0x82da260f00000000, 0x7ca1c66b00000000, 0xe975b6fe00000000, |
| 7074 | 0x0b47142a00000000, 0x9e9364bf00000000, 0x60e884db00000000, |
| 7075 | 0xf53cf44e00000000, 0x9c1f441200000000, 0x09cb348700000000, |
| 7076 | 0xf7b0d4e300000000, 0x6264a47600000000, 0x25f6b45a00000000, |
| 7077 | 0xb022c4cf00000000, 0x4e5924ab00000000, 0xdb8d543e00000000, |
| 7078 | 0xb2aee46200000000, 0x277a94f700000000, 0xd901749300000000, |
| 7079 | 0x4cd5040600000000, 0x572555cb00000000, 0xc2f1255e00000000, |
| 7080 | 0x3c8ac53a00000000, 0xa95eb5af00000000, 0xc07d05f300000000, |
| 7081 | 0x55a9756600000000, 0xabd2950200000000, 0x3e06e59700000000, |
| 7082 | 0x7994f5bb00000000, 0xec40852e00000000, 0x123b654a00000000, |
| 7083 | 0x87ef15df00000000, 0xeecca58300000000, 0x7b18d51600000000, |
| 7084 | 0x8563357200000000, 0x10b745e700000000, 0xe40bcf6700000000, |
| 7085 | 0x71dfbff200000000, 0x8fa45f9600000000, 0x1a702f0300000000, |
| 7086 | 0x73539f5f00000000, 0xe687efca00000000, 0x18fc0fae00000000, |
| 7087 | 0x8d287f3b00000000, 0xcaba6f1700000000, 0x5f6e1f8200000000, |
| 7088 | 0xa115ffe600000000, 0x34c18f7300000000, 0x5de23f2f00000000, |
| 7089 | 0xc8364fba00000000, 0x364dafde00000000, 0xa399df4b00000000, |
| 7090 | 0xb8698e8600000000, 0x2dbdfe1300000000, 0xd3c61e7700000000, |
| 7091 | 0x46126ee200000000, 0x2f31debe00000000, 0xbae5ae2b00000000, |
| 7092 | 0x449e4e4f00000000, 0xd14a3eda00000000, 0x96d82ef600000000, |
| 7093 | 0x030c5e6300000000, 0xfd77be0700000000, 0x68a3ce9200000000, |
| 7094 | 0x01807ece00000000, 0x94540e5b00000000, 0x6a2fee3f00000000, |
| 7095 | 0xfffb9eaa00000000, 0x1dc93c7e00000000, 0x881d4ceb00000000, |
| 7096 | 0x7666ac8f00000000, 0xe3b2dc1a00000000, 0x8a916c4600000000, |
| 7097 | 0x1f451cd300000000, 0xe13efcb700000000, 0x74ea8c2200000000, |
| 7098 | 0x33789c0e00000000, 0xa6acec9b00000000, 0x58d70cff00000000, |
| 7099 | 0xcd037c6a00000000, 0xa420cc3600000000, 0x31f4bca300000000, |
| 7100 | 0xcf8f5cc700000000, 0x5a5b2c5200000000, 0x41ab7d9f00000000, |
| 7101 | 0xd47f0d0a00000000, 0x2a04ed6e00000000, 0xbfd09dfb00000000, |
| 7102 | 0xd6f32da700000000, 0x43275d3200000000, 0xbd5cbd5600000000, |
| 7103 | 0x2888cdc300000000, 0x6f1addef00000000, 0xfacead7a00000000, |
| 7104 | 0x04b54d1e00000000, 0x91613d8b00000000, 0xf8428dd700000000, |
| 7105 | 0x6d96fd4200000000, 0x93ed1d2600000000, 0x06396db300000000, |
| 7106 | 0x168e285400000000, 0x835a58c100000000, 0x7d21b8a500000000, |
| 7107 | 0xe8f5c83000000000, 0x81d6786c00000000, 0x140208f900000000, |
| 7108 | 0xea79e89d00000000, 0x7fad980800000000, 0x383f882400000000, |
| 7109 | 0xadebf8b100000000, 0x539018d500000000, 0xc644684000000000, |
| 7110 | 0xaf67d81c00000000, 0x3ab3a88900000000, 0xc4c848ed00000000, |
| 7111 | 0x511c387800000000, 0x4aec69b500000000, 0xdf38192000000000, |
| 7112 | 0x2143f94400000000, 0xb49789d100000000, 0xddb4398d00000000, |
| 7113 | 0x4860491800000000, 0xb61ba97c00000000, 0x23cfd9e900000000, |
| 7114 | 0x645dc9c500000000, 0xf189b95000000000, 0x0ff2593400000000, |
| 7115 | 0x9a2629a100000000, 0xf30599fd00000000, 0x66d1e96800000000, |
| 7116 | 0x98aa090c00000000, 0x0d7e799900000000, 0xef4cdb4d00000000, |
| 7117 | 0x7a98abd800000000, 0x84e34bbc00000000, 0x11373b2900000000, |
| 7118 | 0x78148b7500000000, 0xedc0fbe000000000, 0x13bb1b8400000000, |
| 7119 | 0x866f6b1100000000, 0xc1fd7b3d00000000, 0x54290ba800000000, |
| 7120 | 0xaa52ebcc00000000, 0x3f869b5900000000, 0x56a52b0500000000, |
| 7121 | 0xc3715b9000000000, 0x3d0abbf400000000, 0xa8decb6100000000, |
| 7122 | 0xb32e9aac00000000, 0x26faea3900000000, 0xd8810a5d00000000, |
| 7123 | 0x4d557ac800000000, 0x2476ca9400000000, 0xb1a2ba0100000000, |
| 7124 | 0x4fd95a6500000000, 0xda0d2af000000000, 0x9d9f3adc00000000, |
| 7125 | 0x084b4a4900000000, 0xf630aa2d00000000, 0x63e4dab800000000, |
| 7126 | 0x0ac76ae400000000, 0x9f131a7100000000, 0x6168fa1500000000, |
| 7127 | 0xf4bc8a8000000000}, |
| 7128 | {0x0000000000000000, 0x1f17f08000000000, 0x7f2891da00000000, |
| 7129 | 0x603f615a00000000, 0xbf56536e00000000, 0xa041a3ee00000000, |
| 7130 | 0xc07ec2b400000000, 0xdf69323400000000, 0x7eada6dc00000000, |
| 7131 | 0x61ba565c00000000, 0x0185370600000000, 0x1e92c78600000000, |
| 7132 | 0xc1fbf5b200000000, 0xdeec053200000000, 0xbed3646800000000, |
| 7133 | 0xa1c494e800000000, 0xbd5c3c6200000000, 0xa24bcce200000000, |
| 7134 | 0xc274adb800000000, 0xdd635d3800000000, 0x020a6f0c00000000, |
| 7135 | 0x1d1d9f8c00000000, 0x7d22fed600000000, 0x62350e5600000000, |
| 7136 | 0xc3f19abe00000000, 0xdce66a3e00000000, 0xbcd90b6400000000, |
| 7137 | 0xa3cefbe400000000, 0x7ca7c9d000000000, 0x63b0395000000000, |
| 7138 | 0x038f580a00000000, 0x1c98a88a00000000, 0x7ab978c400000000, |
| 7139 | 0x65ae884400000000, 0x0591e91e00000000, 0x1a86199e00000000, |
| 7140 | 0xc5ef2baa00000000, 0xdaf8db2a00000000, 0xbac7ba7000000000, |
| 7141 | 0xa5d04af000000000, 0x0414de1800000000, 0x1b032e9800000000, |
| 7142 | 0x7b3c4fc200000000, 0x642bbf4200000000, 0xbb428d7600000000, |
| 7143 | 0xa4557df600000000, 0xc46a1cac00000000, 0xdb7dec2c00000000, |
| 7144 | 0xc7e544a600000000, 0xd8f2b42600000000, 0xb8cdd57c00000000, |
| 7145 | 0xa7da25fc00000000, 0x78b317c800000000, 0x67a4e74800000000, |
| 7146 | 0x079b861200000000, 0x188c769200000000, 0xb948e27a00000000, |
| 7147 | 0xa65f12fa00000000, 0xc66073a000000000, 0xd977832000000000, |
| 7148 | 0x061eb11400000000, 0x1909419400000000, 0x793620ce00000000, |
| 7149 | 0x6621d04e00000000, 0xb574805300000000, 0xaa6370d300000000, |
| 7150 | 0xca5c118900000000, 0xd54be10900000000, 0x0a22d33d00000000, |
| 7151 | 0x153523bd00000000, 0x750a42e700000000, 0x6a1db26700000000, |
| 7152 | 0xcbd9268f00000000, 0xd4ced60f00000000, 0xb4f1b75500000000, |
| 7153 | 0xabe647d500000000, 0x748f75e100000000, 0x6b98856100000000, |
| 7154 | 0x0ba7e43b00000000, 0x14b014bb00000000, 0x0828bc3100000000, |
| 7155 | 0x173f4cb100000000, 0x77002deb00000000, 0x6817dd6b00000000, |
| 7156 | 0xb77eef5f00000000, 0xa8691fdf00000000, 0xc8567e8500000000, |
| 7157 | 0xd7418e0500000000, 0x76851aed00000000, 0x6992ea6d00000000, |
| 7158 | 0x09ad8b3700000000, 0x16ba7bb700000000, 0xc9d3498300000000, |
| 7159 | 0xd6c4b90300000000, 0xb6fbd85900000000, 0xa9ec28d900000000, |
| 7160 | 0xcfcdf89700000000, 0xd0da081700000000, 0xb0e5694d00000000, |
| 7161 | 0xaff299cd00000000, 0x709babf900000000, 0x6f8c5b7900000000, |
| 7162 | 0x0fb33a2300000000, 0x10a4caa300000000, 0xb1605e4b00000000, |
| 7163 | 0xae77aecb00000000, 0xce48cf9100000000, 0xd15f3f1100000000, |
| 7164 | 0x0e360d2500000000, 0x1121fda500000000, 0x711e9cff00000000, |
| 7165 | 0x6e096c7f00000000, 0x7291c4f500000000, 0x6d86347500000000, |
| 7166 | 0x0db9552f00000000, 0x12aea5af00000000, 0xcdc7979b00000000, |
| 7167 | 0xd2d0671b00000000, 0xb2ef064100000000, 0xadf8f6c100000000, |
| 7168 | 0x0c3c622900000000, 0x132b92a900000000, 0x7314f3f300000000, |
| 7169 | 0x6c03037300000000, 0xb36a314700000000, 0xac7dc1c700000000, |
| 7170 | 0xcc42a09d00000000, 0xd355501d00000000, 0x6ae900a700000000, |
| 7171 | 0x75fef02700000000, 0x15c1917d00000000, 0x0ad661fd00000000, |
| 7172 | 0xd5bf53c900000000, 0xcaa8a34900000000, 0xaa97c21300000000, |
| 7173 | 0xb580329300000000, 0x1444a67b00000000, 0x0b5356fb00000000, |
| 7174 | 0x6b6c37a100000000, 0x747bc72100000000, 0xab12f51500000000, |
| 7175 | 0xb405059500000000, 0xd43a64cf00000000, 0xcb2d944f00000000, |
| 7176 | 0xd7b53cc500000000, 0xc8a2cc4500000000, 0xa89dad1f00000000, |
| 7177 | 0xb78a5d9f00000000, 0x68e36fab00000000, 0x77f49f2b00000000, |
| 7178 | 0x17cbfe7100000000, 0x08dc0ef100000000, 0xa9189a1900000000, |
| 7179 | 0xb60f6a9900000000, 0xd6300bc300000000, 0xc927fb4300000000, |
| 7180 | 0x164ec97700000000, 0x095939f700000000, 0x696658ad00000000, |
| 7181 | 0x7671a82d00000000, 0x1050786300000000, 0x0f4788e300000000, |
| 7182 | 0x6f78e9b900000000, 0x706f193900000000, 0xaf062b0d00000000, |
| 7183 | 0xb011db8d00000000, 0xd02ebad700000000, 0xcf394a5700000000, |
| 7184 | 0x6efddebf00000000, 0x71ea2e3f00000000, 0x11d54f6500000000, |
| 7185 | 0x0ec2bfe500000000, 0xd1ab8dd100000000, 0xcebc7d5100000000, |
| 7186 | 0xae831c0b00000000, 0xb194ec8b00000000, 0xad0c440100000000, |
| 7187 | 0xb21bb48100000000, 0xd224d5db00000000, 0xcd33255b00000000, |
| 7188 | 0x125a176f00000000, 0x0d4de7ef00000000, 0x6d7286b500000000, |
| 7189 | 0x7265763500000000, 0xd3a1e2dd00000000, 0xccb6125d00000000, |
| 7190 | 0xac89730700000000, 0xb39e838700000000, 0x6cf7b1b300000000, |
| 7191 | 0x73e0413300000000, 0x13df206900000000, 0x0cc8d0e900000000, |
| 7192 | 0xdf9d80f400000000, 0xc08a707400000000, 0xa0b5112e00000000, |
| 7193 | 0xbfa2e1ae00000000, 0x60cbd39a00000000, 0x7fdc231a00000000, |
| 7194 | 0x1fe3424000000000, 0x00f4b2c000000000, 0xa130262800000000, |
| 7195 | 0xbe27d6a800000000, 0xde18b7f200000000, 0xc10f477200000000, |
| 7196 | 0x1e66754600000000, 0x017185c600000000, 0x614ee49c00000000, |
| 7197 | 0x7e59141c00000000, 0x62c1bc9600000000, 0x7dd64c1600000000, |
| 7198 | 0x1de92d4c00000000, 0x02feddcc00000000, 0xdd97eff800000000, |
| 7199 | 0xc2801f7800000000, 0xa2bf7e2200000000, 0xbda88ea200000000, |
| 7200 | 0x1c6c1a4a00000000, 0x037beaca00000000, 0x63448b9000000000, |
| 7201 | 0x7c537b1000000000, 0xa33a492400000000, 0xbc2db9a400000000, |
| 7202 | 0xdc12d8fe00000000, 0xc305287e00000000, 0xa524f83000000000, |
| 7203 | 0xba3308b000000000, 0xda0c69ea00000000, 0xc51b996a00000000, |
| 7204 | 0x1a72ab5e00000000, 0x05655bde00000000, 0x655a3a8400000000, |
| 7205 | 0x7a4dca0400000000, 0xdb895eec00000000, 0xc49eae6c00000000, |
| 7206 | 0xa4a1cf3600000000, 0xbbb63fb600000000, 0x64df0d8200000000, |
| 7207 | 0x7bc8fd0200000000, 0x1bf79c5800000000, 0x04e06cd800000000, |
| 7208 | 0x1878c45200000000, 0x076f34d200000000, 0x6750558800000000, |
| 7209 | 0x7847a50800000000, 0xa72e973c00000000, 0xb83967bc00000000, |
| 7210 | 0xd80606e600000000, 0xc711f66600000000, 0x66d5628e00000000, |
| 7211 | 0x79c2920e00000000, 0x19fdf35400000000, 0x06ea03d400000000, |
| 7212 | 0xd98331e000000000, 0xc694c16000000000, 0xa6aba03a00000000, |
| 7213 | 0xb9bc50ba00000000}, |
| 7214 | {0x0000000000000000, 0xe2fd888d00000000, 0x85fd60c000000000, |
| 7215 | 0x6700e84d00000000, 0x4bfdb05b00000000, 0xa90038d600000000, |
| 7216 | 0xce00d09b00000000, 0x2cfd581600000000, 0x96fa61b700000000, |
| 7217 | 0x7407e93a00000000, 0x1307017700000000, 0xf1fa89fa00000000, |
| 7218 | 0xdd07d1ec00000000, 0x3ffa596100000000, 0x58fab12c00000000, |
| 7219 | 0xba0739a100000000, 0x6df3b2b500000000, 0x8f0e3a3800000000, |
| 7220 | 0xe80ed27500000000, 0x0af35af800000000, 0x260e02ee00000000, |
| 7221 | 0xc4f38a6300000000, 0xa3f3622e00000000, 0x410eeaa300000000, |
| 7222 | 0xfb09d30200000000, 0x19f45b8f00000000, 0x7ef4b3c200000000, |
| 7223 | 0x9c093b4f00000000, 0xb0f4635900000000, 0x5209ebd400000000, |
| 7224 | 0x3509039900000000, 0xd7f48b1400000000, 0x9be014b000000000, |
| 7225 | 0x791d9c3d00000000, 0x1e1d747000000000, 0xfce0fcfd00000000, |
| 7226 | 0xd01da4eb00000000, 0x32e02c6600000000, 0x55e0c42b00000000, |
| 7227 | 0xb71d4ca600000000, 0x0d1a750700000000, 0xefe7fd8a00000000, |
| 7228 | 0x88e715c700000000, 0x6a1a9d4a00000000, 0x46e7c55c00000000, |
| 7229 | 0xa41a4dd100000000, 0xc31aa59c00000000, 0x21e72d1100000000, |
| 7230 | 0xf613a60500000000, 0x14ee2e8800000000, 0x73eec6c500000000, |
| 7231 | 0x91134e4800000000, 0xbdee165e00000000, 0x5f139ed300000000, |
| 7232 | 0x3813769e00000000, 0xdaeefe1300000000, 0x60e9c7b200000000, |
| 7233 | 0x82144f3f00000000, 0xe514a77200000000, 0x07e92fff00000000, |
| 7234 | 0x2b1477e900000000, 0xc9e9ff6400000000, 0xaee9172900000000, |
| 7235 | 0x4c149fa400000000, 0x77c758bb00000000, 0x953ad03600000000, |
| 7236 | 0xf23a387b00000000, 0x10c7b0f600000000, 0x3c3ae8e000000000, |
| 7237 | 0xdec7606d00000000, 0xb9c7882000000000, 0x5b3a00ad00000000, |
| 7238 | 0xe13d390c00000000, 0x03c0b18100000000, 0x64c059cc00000000, |
| 7239 | 0x863dd14100000000, 0xaac0895700000000, 0x483d01da00000000, |
| 7240 | 0x2f3de99700000000, 0xcdc0611a00000000, 0x1a34ea0e00000000, |
| 7241 | 0xf8c9628300000000, 0x9fc98ace00000000, 0x7d34024300000000, |
| 7242 | 0x51c95a5500000000, 0xb334d2d800000000, 0xd4343a9500000000, |
| 7243 | 0x36c9b21800000000, 0x8cce8bb900000000, 0x6e33033400000000, |
| 7244 | 0x0933eb7900000000, 0xebce63f400000000, 0xc7333be200000000, |
| 7245 | 0x25ceb36f00000000, 0x42ce5b2200000000, 0xa033d3af00000000, |
| 7246 | 0xec274c0b00000000, 0x0edac48600000000, 0x69da2ccb00000000, |
| 7247 | 0x8b27a44600000000, 0xa7dafc5000000000, 0x452774dd00000000, |
| 7248 | 0x22279c9000000000, 0xc0da141d00000000, 0x7add2dbc00000000, |
| 7249 | 0x9820a53100000000, 0xff204d7c00000000, 0x1dddc5f100000000, |
| 7250 | 0x31209de700000000, 0xd3dd156a00000000, 0xb4ddfd2700000000, |
| 7251 | 0x562075aa00000000, 0x81d4febe00000000, 0x6329763300000000, |
| 7252 | 0x04299e7e00000000, 0xe6d416f300000000, 0xca294ee500000000, |
| 7253 | 0x28d4c66800000000, 0x4fd42e2500000000, 0xad29a6a800000000, |
| 7254 | 0x172e9f0900000000, 0xf5d3178400000000, 0x92d3ffc900000000, |
| 7255 | 0x702e774400000000, 0x5cd32f5200000000, 0xbe2ea7df00000000, |
| 7256 | 0xd92e4f9200000000, 0x3bd3c71f00000000, 0xaf88c0ad00000000, |
| 7257 | 0x4d75482000000000, 0x2a75a06d00000000, 0xc88828e000000000, |
| 7258 | 0xe47570f600000000, 0x0688f87b00000000, 0x6188103600000000, |
| 7259 | 0x837598bb00000000, 0x3972a11a00000000, 0xdb8f299700000000, |
| 7260 | 0xbc8fc1da00000000, 0x5e72495700000000, 0x728f114100000000, |
| 7261 | 0x907299cc00000000, 0xf772718100000000, 0x158ff90c00000000, |
| 7262 | 0xc27b721800000000, 0x2086fa9500000000, 0x478612d800000000, |
| 7263 | 0xa57b9a5500000000, 0x8986c24300000000, 0x6b7b4ace00000000, |
| 7264 | 0x0c7ba28300000000, 0xee862a0e00000000, 0x548113af00000000, |
| 7265 | 0xb67c9b2200000000, 0xd17c736f00000000, 0x3381fbe200000000, |
| 7266 | 0x1f7ca3f400000000, 0xfd812b7900000000, 0x9a81c33400000000, |
| 7267 | 0x787c4bb900000000, 0x3468d41d00000000, 0xd6955c9000000000, |
| 7268 | 0xb195b4dd00000000, 0x53683c5000000000, 0x7f95644600000000, |
| 7269 | 0x9d68eccb00000000, 0xfa68048600000000, 0x18958c0b00000000, |
| 7270 | 0xa292b5aa00000000, 0x406f3d2700000000, 0x276fd56a00000000, |
| 7271 | 0xc5925de700000000, 0xe96f05f100000000, 0x0b928d7c00000000, |
| 7272 | 0x6c92653100000000, 0x8e6fedbc00000000, 0x599b66a800000000, |
| 7273 | 0xbb66ee2500000000, 0xdc66066800000000, 0x3e9b8ee500000000, |
| 7274 | 0x1266d6f300000000, 0xf09b5e7e00000000, 0x979bb63300000000, |
| 7275 | 0x75663ebe00000000, 0xcf61071f00000000, 0x2d9c8f9200000000, |
| 7276 | 0x4a9c67df00000000, 0xa861ef5200000000, 0x849cb74400000000, |
| 7277 | 0x66613fc900000000, 0x0161d78400000000, 0xe39c5f0900000000, |
| 7278 | 0xd84f981600000000, 0x3ab2109b00000000, 0x5db2f8d600000000, |
| 7279 | 0xbf4f705b00000000, 0x93b2284d00000000, 0x714fa0c000000000, |
| 7280 | 0x164f488d00000000, 0xf4b2c00000000000, 0x4eb5f9a100000000, |
| 7281 | 0xac48712c00000000, 0xcb48996100000000, 0x29b511ec00000000, |
| 7282 | 0x054849fa00000000, 0xe7b5c17700000000, 0x80b5293a00000000, |
| 7283 | 0x6248a1b700000000, 0xb5bc2aa300000000, 0x5741a22e00000000, |
| 7284 | 0x30414a6300000000, 0xd2bcc2ee00000000, 0xfe419af800000000, |
| 7285 | 0x1cbc127500000000, 0x7bbcfa3800000000, 0x994172b500000000, |
| 7286 | 0x23464b1400000000, 0xc1bbc39900000000, 0xa6bb2bd400000000, |
| 7287 | 0x4446a35900000000, 0x68bbfb4f00000000, 0x8a4673c200000000, |
| 7288 | 0xed469b8f00000000, 0x0fbb130200000000, 0x43af8ca600000000, |
| 7289 | 0xa152042b00000000, 0xc652ec6600000000, 0x24af64eb00000000, |
| 7290 | 0x08523cfd00000000, 0xeaafb47000000000, 0x8daf5c3d00000000, |
| 7291 | 0x6f52d4b000000000, 0xd555ed1100000000, 0x37a8659c00000000, |
| 7292 | 0x50a88dd100000000, 0xb255055c00000000, 0x9ea85d4a00000000, |
| 7293 | 0x7c55d5c700000000, 0x1b553d8a00000000, 0xf9a8b50700000000, |
| 7294 | 0x2e5c3e1300000000, 0xcca1b69e00000000, 0xaba15ed300000000, |
| 7295 | 0x495cd65e00000000, 0x65a18e4800000000, 0x875c06c500000000, |
| 7296 | 0xe05cee8800000000, 0x02a1660500000000, 0xb8a65fa400000000, |
| 7297 | 0x5a5bd72900000000, 0x3d5b3f6400000000, 0xdfa6b7e900000000, |
| 7298 | 0xf35befff00000000, 0x11a6677200000000, 0x76a68f3f00000000, |
| 7299 | 0x945b07b200000000}, |
| 7300 | {0x0000000000000000, 0xa90b894e00000000, 0x5217129d00000000, |
| 7301 | 0xfb1c9bd300000000, 0xe52855e100000000, 0x4c23dcaf00000000, |
| 7302 | 0xb73f477c00000000, 0x1e34ce3200000000, 0x8b57db1900000000, |
| 7303 | 0x225c525700000000, 0xd940c98400000000, 0x704b40ca00000000, |
| 7304 | 0x6e7f8ef800000000, 0xc77407b600000000, 0x3c689c6500000000, |
| 7305 | 0x9563152b00000000, 0x16afb63300000000, 0xbfa43f7d00000000, |
| 7306 | 0x44b8a4ae00000000, 0xedb32de000000000, 0xf387e3d200000000, |
| 7307 | 0x5a8c6a9c00000000, 0xa190f14f00000000, 0x089b780100000000, |
| 7308 | 0x9df86d2a00000000, 0x34f3e46400000000, 0xcfef7fb700000000, |
| 7309 | 0x66e4f6f900000000, 0x78d038cb00000000, 0xd1dbb18500000000, |
| 7310 | 0x2ac72a5600000000, 0x83cca31800000000, 0x2c5e6d6700000000, |
| 7311 | 0x8555e42900000000, 0x7e497ffa00000000, 0xd742f6b400000000, |
| 7312 | 0xc976388600000000, 0x607db1c800000000, 0x9b612a1b00000000, |
| 7313 | 0x326aa35500000000, 0xa709b67e00000000, 0x0e023f3000000000, |
| 7314 | 0xf51ea4e300000000, 0x5c152dad00000000, 0x4221e39f00000000, |
| 7315 | 0xeb2a6ad100000000, 0x1036f10200000000, 0xb93d784c00000000, |
| 7316 | 0x3af1db5400000000, 0x93fa521a00000000, 0x68e6c9c900000000, |
| 7317 | 0xc1ed408700000000, 0xdfd98eb500000000, 0x76d207fb00000000, |
| 7318 | 0x8dce9c2800000000, 0x24c5156600000000, 0xb1a6004d00000000, |
| 7319 | 0x18ad890300000000, 0xe3b112d000000000, 0x4aba9b9e00000000, |
| 7320 | 0x548e55ac00000000, 0xfd85dce200000000, 0x0699473100000000, |
| 7321 | 0xaf92ce7f00000000, 0x58bcdace00000000, 0xf1b7538000000000, |
| 7322 | 0x0aabc85300000000, 0xa3a0411d00000000, 0xbd948f2f00000000, |
| 7323 | 0x149f066100000000, 0xef839db200000000, 0x468814fc00000000, |
| 7324 | 0xd3eb01d700000000, 0x7ae0889900000000, 0x81fc134a00000000, |
| 7325 | 0x28f79a0400000000, 0x36c3543600000000, 0x9fc8dd7800000000, |
| 7326 | 0x64d446ab00000000, 0xcddfcfe500000000, 0x4e136cfd00000000, |
| 7327 | 0xe718e5b300000000, 0x1c047e6000000000, 0xb50ff72e00000000, |
| 7328 | 0xab3b391c00000000, 0x0230b05200000000, 0xf92c2b8100000000, |
| 7329 | 0x5027a2cf00000000, 0xc544b7e400000000, 0x6c4f3eaa00000000, |
| 7330 | 0x9753a57900000000, 0x3e582c3700000000, 0x206ce20500000000, |
| 7331 | 0x89676b4b00000000, 0x727bf09800000000, 0xdb7079d600000000, |
| 7332 | 0x74e2b7a900000000, 0xdde93ee700000000, 0x26f5a53400000000, |
| 7333 | 0x8ffe2c7a00000000, 0x91cae24800000000, 0x38c16b0600000000, |
| 7334 | 0xc3ddf0d500000000, 0x6ad6799b00000000, 0xffb56cb000000000, |
| 7335 | 0x56bee5fe00000000, 0xada27e2d00000000, 0x04a9f76300000000, |
| 7336 | 0x1a9d395100000000, 0xb396b01f00000000, 0x488a2bcc00000000, |
| 7337 | 0xe181a28200000000, 0x624d019a00000000, 0xcb4688d400000000, |
| 7338 | 0x305a130700000000, 0x99519a4900000000, 0x8765547b00000000, |
| 7339 | 0x2e6edd3500000000, 0xd57246e600000000, 0x7c79cfa800000000, |
| 7340 | 0xe91ada8300000000, 0x401153cd00000000, 0xbb0dc81e00000000, |
| 7341 | 0x1206415000000000, 0x0c328f6200000000, 0xa539062c00000000, |
| 7342 | 0x5e259dff00000000, 0xf72e14b100000000, 0xf17ec44600000000, |
| 7343 | 0x58754d0800000000, 0xa369d6db00000000, 0x0a625f9500000000, |
| 7344 | 0x145691a700000000, 0xbd5d18e900000000, 0x4641833a00000000, |
| 7345 | 0xef4a0a7400000000, 0x7a291f5f00000000, 0xd322961100000000, |
| 7346 | 0x283e0dc200000000, 0x8135848c00000000, 0x9f014abe00000000, |
| 7347 | 0x360ac3f000000000, 0xcd16582300000000, 0x641dd16d00000000, |
| 7348 | 0xe7d1727500000000, 0x4edafb3b00000000, 0xb5c660e800000000, |
| 7349 | 0x1ccde9a600000000, 0x02f9279400000000, 0xabf2aeda00000000, |
| 7350 | 0x50ee350900000000, 0xf9e5bc4700000000, 0x6c86a96c00000000, |
| 7351 | 0xc58d202200000000, 0x3e91bbf100000000, 0x979a32bf00000000, |
| 7352 | 0x89aefc8d00000000, 0x20a575c300000000, 0xdbb9ee1000000000, |
| 7353 | 0x72b2675e00000000, 0xdd20a92100000000, 0x742b206f00000000, |
| 7354 | 0x8f37bbbc00000000, 0x263c32f200000000, 0x3808fcc000000000, |
| 7355 | 0x9103758e00000000, 0x6a1fee5d00000000, 0xc314671300000000, |
| 7356 | 0x5677723800000000, 0xff7cfb7600000000, 0x046060a500000000, |
| 7357 | 0xad6be9eb00000000, 0xb35f27d900000000, 0x1a54ae9700000000, |
| 7358 | 0xe148354400000000, 0x4843bc0a00000000, 0xcb8f1f1200000000, |
| 7359 | 0x6284965c00000000, 0x99980d8f00000000, 0x309384c100000000, |
| 7360 | 0x2ea74af300000000, 0x87acc3bd00000000, 0x7cb0586e00000000, |
| 7361 | 0xd5bbd12000000000, 0x40d8c40b00000000, 0xe9d34d4500000000, |
| 7362 | 0x12cfd69600000000, 0xbbc45fd800000000, 0xa5f091ea00000000, |
| 7363 | 0x0cfb18a400000000, 0xf7e7837700000000, 0x5eec0a3900000000, |
| 7364 | 0xa9c21e8800000000, 0x00c997c600000000, 0xfbd50c1500000000, |
| 7365 | 0x52de855b00000000, 0x4cea4b6900000000, 0xe5e1c22700000000, |
| 7366 | 0x1efd59f400000000, 0xb7f6d0ba00000000, 0x2295c59100000000, |
| 7367 | 0x8b9e4cdf00000000, 0x7082d70c00000000, 0xd9895e4200000000, |
| 7368 | 0xc7bd907000000000, 0x6eb6193e00000000, 0x95aa82ed00000000, |
| 7369 | 0x3ca10ba300000000, 0xbf6da8bb00000000, 0x166621f500000000, |
| 7370 | 0xed7aba2600000000, 0x4471336800000000, 0x5a45fd5a00000000, |
| 7371 | 0xf34e741400000000, 0x0852efc700000000, 0xa159668900000000, |
| 7372 | 0x343a73a200000000, 0x9d31faec00000000, 0x662d613f00000000, |
| 7373 | 0xcf26e87100000000, 0xd112264300000000, 0x7819af0d00000000, |
| 7374 | 0x830534de00000000, 0x2a0ebd9000000000, 0x859c73ef00000000, |
| 7375 | 0x2c97faa100000000, 0xd78b617200000000, 0x7e80e83c00000000, |
| 7376 | 0x60b4260e00000000, 0xc9bfaf4000000000, 0x32a3349300000000, |
| 7377 | 0x9ba8bddd00000000, 0x0ecba8f600000000, 0xa7c021b800000000, |
| 7378 | 0x5cdcba6b00000000, 0xf5d7332500000000, 0xebe3fd1700000000, |
| 7379 | 0x42e8745900000000, 0xb9f4ef8a00000000, 0x10ff66c400000000, |
| 7380 | 0x9333c5dc00000000, 0x3a384c9200000000, 0xc124d74100000000, |
| 7381 | 0x682f5e0f00000000, 0x761b903d00000000, 0xdf10197300000000, |
| 7382 | 0x240c82a000000000, 0x8d070bee00000000, 0x18641ec500000000, |
| 7383 | 0xb16f978b00000000, 0x4a730c5800000000, 0xe378851600000000, |
| 7384 | 0xfd4c4b2400000000, 0x5447c26a00000000, 0xaf5b59b900000000, |
| 7385 | 0x0650d0f700000000}, |
| 7386 | {0x0000000000000000, 0x479244af00000000, 0xcf22f88500000000, |
| 7387 | 0x88b0bc2a00000000, 0xdf4381d000000000, 0x98d1c57f00000000, |
| 7388 | 0x1061795500000000, 0x57f33dfa00000000, 0xff81737a00000000, |
| 7389 | 0xb81337d500000000, 0x30a38bff00000000, 0x7731cf5000000000, |
| 7390 | 0x20c2f2aa00000000, 0x6750b60500000000, 0xefe00a2f00000000, |
| 7391 | 0xa8724e8000000000, 0xfe03e7f400000000, 0xb991a35b00000000, |
| 7392 | 0x31211f7100000000, 0x76b35bde00000000, 0x2140662400000000, |
| 7393 | 0x66d2228b00000000, 0xee629ea100000000, 0xa9f0da0e00000000, |
| 7394 | 0x0182948e00000000, 0x4610d02100000000, 0xcea06c0b00000000, |
| 7395 | 0x893228a400000000, 0xdec1155e00000000, 0x995351f100000000, |
| 7396 | 0x11e3eddb00000000, 0x5671a97400000000, 0xbd01bf3200000000, |
| 7397 | 0xfa93fb9d00000000, 0x722347b700000000, 0x35b1031800000000, |
| 7398 | 0x62423ee200000000, 0x25d07a4d00000000, 0xad60c66700000000, |
| 7399 | 0xeaf282c800000000, 0x4280cc4800000000, 0x051288e700000000, |
| 7400 | 0x8da234cd00000000, 0xca30706200000000, 0x9dc34d9800000000, |
| 7401 | 0xda51093700000000, 0x52e1b51d00000000, 0x1573f1b200000000, |
| 7402 | 0x430258c600000000, 0x04901c6900000000, 0x8c20a04300000000, |
| 7403 | 0xcbb2e4ec00000000, 0x9c41d91600000000, 0xdbd39db900000000, |
| 7404 | 0x5363219300000000, 0x14f1653c00000000, 0xbc832bbc00000000, |
| 7405 | 0xfb116f1300000000, 0x73a1d33900000000, 0x3433979600000000, |
| 7406 | 0x63c0aa6c00000000, 0x2452eec300000000, 0xace252e900000000, |
| 7407 | 0xeb70164600000000, 0x7a037e6500000000, 0x3d913aca00000000, |
| 7408 | 0xb52186e000000000, 0xf2b3c24f00000000, 0xa540ffb500000000, |
| 7409 | 0xe2d2bb1a00000000, 0x6a62073000000000, 0x2df0439f00000000, |
| 7410 | 0x85820d1f00000000, 0xc21049b000000000, 0x4aa0f59a00000000, |
| 7411 | 0x0d32b13500000000, 0x5ac18ccf00000000, 0x1d53c86000000000, |
| 7412 | 0x95e3744a00000000, 0xd27130e500000000, 0x8400999100000000, |
| 7413 | 0xc392dd3e00000000, 0x4b22611400000000, 0x0cb025bb00000000, |
| 7414 | 0x5b43184100000000, 0x1cd15cee00000000, 0x9461e0c400000000, |
| 7415 | 0xd3f3a46b00000000, 0x7b81eaeb00000000, 0x3c13ae4400000000, |
| 7416 | 0xb4a3126e00000000, 0xf33156c100000000, 0xa4c26b3b00000000, |
| 7417 | 0xe3502f9400000000, 0x6be093be00000000, 0x2c72d71100000000, |
| 7418 | 0xc702c15700000000, 0x809085f800000000, 0x082039d200000000, |
| 7419 | 0x4fb27d7d00000000, 0x1841408700000000, 0x5fd3042800000000, |
| 7420 | 0xd763b80200000000, 0x90f1fcad00000000, 0x3883b22d00000000, |
| 7421 | 0x7f11f68200000000, 0xf7a14aa800000000, 0xb0330e0700000000, |
| 7422 | 0xe7c033fd00000000, 0xa052775200000000, 0x28e2cb7800000000, |
| 7423 | 0x6f708fd700000000, 0x390126a300000000, 0x7e93620c00000000, |
| 7424 | 0xf623de2600000000, 0xb1b19a8900000000, 0xe642a77300000000, |
| 7425 | 0xa1d0e3dc00000000, 0x29605ff600000000, 0x6ef21b5900000000, |
| 7426 | 0xc68055d900000000, 0x8112117600000000, 0x09a2ad5c00000000, |
| 7427 | 0x4e30e9f300000000, 0x19c3d40900000000, 0x5e5190a600000000, |
| 7428 | 0xd6e12c8c00000000, 0x9173682300000000, 0xf406fcca00000000, |
| 7429 | 0xb394b86500000000, 0x3b24044f00000000, 0x7cb640e000000000, |
| 7430 | 0x2b457d1a00000000, 0x6cd739b500000000, 0xe467859f00000000, |
| 7431 | 0xa3f5c13000000000, 0x0b878fb000000000, 0x4c15cb1f00000000, |
| 7432 | 0xc4a5773500000000, 0x8337339a00000000, 0xd4c40e6000000000, |
| 7433 | 0x93564acf00000000, 0x1be6f6e500000000, 0x5c74b24a00000000, |
| 7434 | 0x0a051b3e00000000, 0x4d975f9100000000, 0xc527e3bb00000000, |
| 7435 | 0x82b5a71400000000, 0xd5469aee00000000, 0x92d4de4100000000, |
| 7436 | 0x1a64626b00000000, 0x5df626c400000000, 0xf584684400000000, |
| 7437 | 0xb2162ceb00000000, 0x3aa690c100000000, 0x7d34d46e00000000, |
| 7438 | 0x2ac7e99400000000, 0x6d55ad3b00000000, 0xe5e5111100000000, |
| 7439 | 0xa27755be00000000, 0x490743f800000000, 0x0e95075700000000, |
| 7440 | 0x8625bb7d00000000, 0xc1b7ffd200000000, 0x9644c22800000000, |
| 7441 | 0xd1d6868700000000, 0x59663aad00000000, 0x1ef47e0200000000, |
| 7442 | 0xb686308200000000, 0xf114742d00000000, 0x79a4c80700000000, |
| 7443 | 0x3e368ca800000000, 0x69c5b15200000000, 0x2e57f5fd00000000, |
| 7444 | 0xa6e749d700000000, 0xe1750d7800000000, 0xb704a40c00000000, |
| 7445 | 0xf096e0a300000000, 0x78265c8900000000, 0x3fb4182600000000, |
| 7446 | 0x684725dc00000000, 0x2fd5617300000000, 0xa765dd5900000000, |
| 7447 | 0xe0f799f600000000, 0x4885d77600000000, 0x0f1793d900000000, |
| 7448 | 0x87a72ff300000000, 0xc0356b5c00000000, 0x97c656a600000000, |
| 7449 | 0xd054120900000000, 0x58e4ae2300000000, 0x1f76ea8c00000000, |
| 7450 | 0x8e0582af00000000, 0xc997c60000000000, 0x41277a2a00000000, |
| 7451 | 0x06b53e8500000000, 0x5146037f00000000, 0x16d447d000000000, |
| 7452 | 0x9e64fbfa00000000, 0xd9f6bf5500000000, 0x7184f1d500000000, |
| 7453 | 0x3616b57a00000000, 0xbea6095000000000, 0xf9344dff00000000, |
| 7454 | 0xaec7700500000000, 0xe95534aa00000000, 0x61e5888000000000, |
| 7455 | 0x2677cc2f00000000, 0x7006655b00000000, 0x379421f400000000, |
| 7456 | 0xbf249dde00000000, 0xf8b6d97100000000, 0xaf45e48b00000000, |
| 7457 | 0xe8d7a02400000000, 0x60671c0e00000000, 0x27f558a100000000, |
| 7458 | 0x8f87162100000000, 0xc815528e00000000, 0x40a5eea400000000, |
| 7459 | 0x0737aa0b00000000, 0x50c497f100000000, 0x1756d35e00000000, |
| 7460 | 0x9fe66f7400000000, 0xd8742bdb00000000, 0x33043d9d00000000, |
| 7461 | 0x7496793200000000, 0xfc26c51800000000, 0xbbb481b700000000, |
| 7462 | 0xec47bc4d00000000, 0xabd5f8e200000000, 0x236544c800000000, |
| 7463 | 0x64f7006700000000, 0xcc854ee700000000, 0x8b170a4800000000, |
| 7464 | 0x03a7b66200000000, 0x4435f2cd00000000, 0x13c6cf3700000000, |
| 7465 | 0x54548b9800000000, 0xdce437b200000000, 0x9b76731d00000000, |
| 7466 | 0xcd07da6900000000, 0x8a959ec600000000, 0x022522ec00000000, |
| 7467 | 0x45b7664300000000, 0x12445bb900000000, 0x55d61f1600000000, |
| 7468 | 0xdd66a33c00000000, 0x9af4e79300000000, 0x3286a91300000000, |
| 7469 | 0x7514edbc00000000, 0xfda4519600000000, 0xba36153900000000, |
| 7470 | 0xedc528c300000000, 0xaa576c6c00000000, 0x22e7d04600000000, |
| 7471 | 0x657594e900000000}}; |
| 7472 | |
| 7473 | #else /* W == 4 */ |
| 7474 | |
| 7475 | local const z_crc_t FAR crc_braid_table[][256] = { |
| 7476 | {0x00000000, 0x65673b46, 0xcace768c, 0xafa94dca, 0x4eedeb59, |
| 7477 | 0x2b8ad01f, 0x84239dd5, 0xe144a693, 0x9ddbd6b2, 0xf8bcedf4, |
| 7478 | 0x5715a03e, 0x32729b78, 0xd3363deb, 0xb65106ad, 0x19f84b67, |
| 7479 | 0x7c9f7021, 0xe0c6ab25, 0x85a19063, 0x2a08dda9, 0x4f6fe6ef, |
| 7480 | 0xae2b407c, 0xcb4c7b3a, 0x64e536f0, 0x01820db6, 0x7d1d7d97, |
| 7481 | 0x187a46d1, 0xb7d30b1b, 0xd2b4305d, 0x33f096ce, 0x5697ad88, |
| 7482 | 0xf93ee042, 0x9c59db04, 0x1afc500b, 0x7f9b6b4d, 0xd0322687, |
| 7483 | 0xb5551dc1, 0x5411bb52, 0x31768014, 0x9edfcdde, 0xfbb8f698, |
| 7484 | 0x872786b9, 0xe240bdff, 0x4de9f035, 0x288ecb73, 0xc9ca6de0, |
| 7485 | 0xacad56a6, 0x03041b6c, 0x6663202a, 0xfa3afb2e, 0x9f5dc068, |
| 7486 | 0x30f48da2, 0x5593b6e4, 0xb4d71077, 0xd1b02b31, 0x7e1966fb, |
| 7487 | 0x1b7e5dbd, 0x67e12d9c, 0x028616da, 0xad2f5b10, 0xc8486056, |
| 7488 | 0x290cc6c5, 0x4c6bfd83, 0xe3c2b049, 0x86a58b0f, 0x35f8a016, |
| 7489 | 0x509f9b50, 0xff36d69a, 0x9a51eddc, 0x7b154b4f, 0x1e727009, |
| 7490 | 0xb1db3dc3, 0xd4bc0685, 0xa82376a4, 0xcd444de2, 0x62ed0028, |
| 7491 | 0x078a3b6e, 0xe6ce9dfd, 0x83a9a6bb, 0x2c00eb71, 0x4967d037, |
| 7492 | 0xd53e0b33, 0xb0593075, 0x1ff07dbf, 0x7a9746f9, 0x9bd3e06a, |
| 7493 | 0xfeb4db2c, 0x511d96e6, 0x347aada0, 0x48e5dd81, 0x2d82e6c7, |
| 7494 | 0x822bab0d, 0xe74c904b, 0x060836d8, 0x636f0d9e, 0xccc64054, |
| 7495 | 0xa9a17b12, 0x2f04f01d, 0x4a63cb5b, 0xe5ca8691, 0x80adbdd7, |
| 7496 | 0x61e91b44, 0x048e2002, 0xab276dc8, 0xce40568e, 0xb2df26af, |
| 7497 | 0xd7b81de9, 0x78115023, 0x1d766b65, 0xfc32cdf6, 0x9955f6b0, |
| 7498 | 0x36fcbb7a, 0x539b803c, 0xcfc25b38, 0xaaa5607e, 0x050c2db4, |
| 7499 | 0x606b16f2, 0x812fb061, 0xe4488b27, 0x4be1c6ed, 0x2e86fdab, |
| 7500 | 0x52198d8a, 0x377eb6cc, 0x98d7fb06, 0xfdb0c040, 0x1cf466d3, |
| 7501 | 0x79935d95, 0xd63a105f, 0xb35d2b19, 0x6bf1402c, 0x0e967b6a, |
| 7502 | 0xa13f36a0, 0xc4580de6, 0x251cab75, 0x407b9033, 0xefd2ddf9, |
| 7503 | 0x8ab5e6bf, 0xf62a969e, 0x934dadd8, 0x3ce4e012, 0x5983db54, |
| 7504 | 0xb8c77dc7, 0xdda04681, 0x72090b4b, 0x176e300d, 0x8b37eb09, |
| 7505 | 0xee50d04f, 0x41f99d85, 0x249ea6c3, 0xc5da0050, 0xa0bd3b16, |
| 7506 | 0x0f1476dc, 0x6a734d9a, 0x16ec3dbb, 0x738b06fd, 0xdc224b37, |
| 7507 | 0xb9457071, 0x5801d6e2, 0x3d66eda4, 0x92cfa06e, 0xf7a89b28, |
| 7508 | 0x710d1027, 0x146a2b61, 0xbbc366ab, 0xdea45ded, 0x3fe0fb7e, |
| 7509 | 0x5a87c038, 0xf52e8df2, 0x9049b6b4, 0xecd6c695, 0x89b1fdd3, |
| 7510 | 0x2618b019, 0x437f8b5f, 0xa23b2dcc, 0xc75c168a, 0x68f55b40, |
| 7511 | 0x0d926006, 0x91cbbb02, 0xf4ac8044, 0x5b05cd8e, 0x3e62f6c8, |
| 7512 | 0xdf26505b, 0xba416b1d, 0x15e826d7, 0x708f1d91, 0x0c106db0, |
| 7513 | 0x697756f6, 0xc6de1b3c, 0xa3b9207a, 0x42fd86e9, 0x279abdaf, |
| 7514 | 0x8833f065, 0xed54cb23, 0x5e09e03a, 0x3b6edb7c, 0x94c796b6, |
| 7515 | 0xf1a0adf0, 0x10e40b63, 0x75833025, 0xda2a7def, 0xbf4d46a9, |
| 7516 | 0xc3d23688, 0xa6b50dce, 0x091c4004, 0x6c7b7b42, 0x8d3fddd1, |
| 7517 | 0xe858e697, 0x47f1ab5d, 0x2296901b, 0xbecf4b1f, 0xdba87059, |
| 7518 | 0x74013d93, 0x116606d5, 0xf022a046, 0x95459b00, 0x3aecd6ca, |
| 7519 | 0x5f8bed8c, 0x23149dad, 0x4673a6eb, 0xe9daeb21, 0x8cbdd067, |
| 7520 | 0x6df976f4, 0x089e4db2, 0xa7370078, 0xc2503b3e, 0x44f5b031, |
| 7521 | 0x21928b77, 0x8e3bc6bd, 0xeb5cfdfb, 0x0a185b68, 0x6f7f602e, |
| 7522 | 0xc0d62de4, 0xa5b116a2, 0xd92e6683, 0xbc495dc5, 0x13e0100f, |
| 7523 | 0x76872b49, 0x97c38dda, 0xf2a4b69c, 0x5d0dfb56, 0x386ac010, |
| 7524 | 0xa4331b14, 0xc1542052, 0x6efd6d98, 0x0b9a56de, 0xeadef04d, |
| 7525 | 0x8fb9cb0b, 0x201086c1, 0x4577bd87, 0x39e8cda6, 0x5c8ff6e0, |
| 7526 | 0xf326bb2a, 0x9641806c, 0x770526ff, 0x12621db9, 0xbdcb5073, |
| 7527 | 0xd8ac6b35}, |
| 7528 | {0x00000000, 0xd7e28058, 0x74b406f1, 0xa35686a9, 0xe9680de2, |
| 7529 | 0x3e8a8dba, 0x9ddc0b13, 0x4a3e8b4b, 0x09a11d85, 0xde439ddd, |
| 7530 | 0x7d151b74, 0xaaf79b2c, 0xe0c91067, 0x372b903f, 0x947d1696, |
| 7531 | 0x439f96ce, 0x13423b0a, 0xc4a0bb52, 0x67f63dfb, 0xb014bda3, |
| 7532 | 0xfa2a36e8, 0x2dc8b6b0, 0x8e9e3019, 0x597cb041, 0x1ae3268f, |
| 7533 | 0xcd01a6d7, 0x6e57207e, 0xb9b5a026, 0xf38b2b6d, 0x2469ab35, |
| 7534 | 0x873f2d9c, 0x50ddadc4, 0x26847614, 0xf166f64c, 0x523070e5, |
| 7535 | 0x85d2f0bd, 0xcfec7bf6, 0x180efbae, 0xbb587d07, 0x6cbafd5f, |
| 7536 | 0x2f256b91, 0xf8c7ebc9, 0x5b916d60, 0x8c73ed38, 0xc64d6673, |
| 7537 | 0x11afe62b, 0xb2f96082, 0x651be0da, 0x35c64d1e, 0xe224cd46, |
| 7538 | 0x41724bef, 0x9690cbb7, 0xdcae40fc, 0x0b4cc0a4, 0xa81a460d, |
| 7539 | 0x7ff8c655, 0x3c67509b, 0xeb85d0c3, 0x48d3566a, 0x9f31d632, |
| 7540 | 0xd50f5d79, 0x02eddd21, 0xa1bb5b88, 0x7659dbd0, 0x4d08ec28, |
| 7541 | 0x9aea6c70, 0x39bcead9, 0xee5e6a81, 0xa460e1ca, 0x73826192, |
| 7542 | 0xd0d4e73b, 0x07366763, 0x44a9f1ad, 0x934b71f5, 0x301df75c, |
| 7543 | 0xe7ff7704, 0xadc1fc4f, 0x7a237c17, 0xd975fabe, 0x0e977ae6, |
| 7544 | 0x5e4ad722, 0x89a8577a, 0x2afed1d3, 0xfd1c518b, 0xb722dac0, |
| 7545 | 0x60c05a98, 0xc396dc31, 0x14745c69, 0x57ebcaa7, 0x80094aff, |
| 7546 | 0x235fcc56, 0xf4bd4c0e, 0xbe83c745, 0x6961471d, 0xca37c1b4, |
| 7547 | 0x1dd541ec, 0x6b8c9a3c, 0xbc6e1a64, 0x1f389ccd, 0xc8da1c95, |
| 7548 | 0x82e497de, 0x55061786, 0xf650912f, 0x21b21177, 0x622d87b9, |
| 7549 | 0xb5cf07e1, 0x16998148, 0xc17b0110, 0x8b458a5b, 0x5ca70a03, |
| 7550 | 0xfff18caa, 0x28130cf2, 0x78cea136, 0xaf2c216e, 0x0c7aa7c7, |
| 7551 | 0xdb98279f, 0x91a6acd4, 0x46442c8c, 0xe512aa25, 0x32f02a7d, |
| 7552 | 0x716fbcb3, 0xa68d3ceb, 0x05dbba42, 0xd2393a1a, 0x9807b151, |
| 7553 | 0x4fe53109, 0xecb3b7a0, 0x3b5137f8, 0x9a11d850, 0x4df35808, |
| 7554 | 0xeea5dea1, 0x39475ef9, 0x7379d5b2, 0xa49b55ea, 0x07cdd343, |
| 7555 | 0xd02f531b, 0x93b0c5d5, 0x4452458d, 0xe704c324, 0x30e6437c, |
| 7556 | 0x7ad8c837, 0xad3a486f, 0x0e6ccec6, 0xd98e4e9e, 0x8953e35a, |
| 7557 | 0x5eb16302, 0xfde7e5ab, 0x2a0565f3, 0x603beeb8, 0xb7d96ee0, |
| 7558 | 0x148fe849, 0xc36d6811, 0x80f2fedf, 0x57107e87, 0xf446f82e, |
| 7559 | 0x23a47876, 0x699af33d, 0xbe787365, 0x1d2ef5cc, 0xcacc7594, |
| 7560 | 0xbc95ae44, 0x6b772e1c, 0xc821a8b5, 0x1fc328ed, 0x55fda3a6, |
| 7561 | 0x821f23fe, 0x2149a557, 0xf6ab250f, 0xb534b3c1, 0x62d63399, |
| 7562 | 0xc180b530, 0x16623568, 0x5c5cbe23, 0x8bbe3e7b, 0x28e8b8d2, |
| 7563 | 0xff0a388a, 0xafd7954e, 0x78351516, 0xdb6393bf, 0x0c8113e7, |
| 7564 | 0x46bf98ac, 0x915d18f4, 0x320b9e5d, 0xe5e91e05, 0xa67688cb, |
| 7565 | 0x71940893, 0xd2c28e3a, 0x05200e62, 0x4f1e8529, 0x98fc0571, |
| 7566 | 0x3baa83d8, 0xec480380, 0xd7193478, 0x00fbb420, 0xa3ad3289, |
| 7567 | 0x744fb2d1, 0x3e71399a, 0xe993b9c2, 0x4ac53f6b, 0x9d27bf33, |
| 7568 | 0xdeb829fd, 0x095aa9a5, 0xaa0c2f0c, 0x7deeaf54, 0x37d0241f, |
| 7569 | 0xe032a447, 0x436422ee, 0x9486a2b6, 0xc45b0f72, 0x13b98f2a, |
| 7570 | 0xb0ef0983, 0x670d89db, 0x2d330290, 0xfad182c8, 0x59870461, |
| 7571 | 0x8e658439, 0xcdfa12f7, 0x1a1892af, 0xb94e1406, 0x6eac945e, |
| 7572 | 0x24921f15, 0xf3709f4d, 0x502619e4, 0x87c499bc, 0xf19d426c, |
| 7573 | 0x267fc234, 0x8529449d, 0x52cbc4c5, 0x18f54f8e, 0xcf17cfd6, |
| 7574 | 0x6c41497f, 0xbba3c927, 0xf83c5fe9, 0x2fdedfb1, 0x8c885918, |
| 7575 | 0x5b6ad940, 0x1154520b, 0xc6b6d253, 0x65e054fa, 0xb202d4a2, |
| 7576 | 0xe2df7966, 0x353df93e, 0x966b7f97, 0x4189ffcf, 0x0bb77484, |
| 7577 | 0xdc55f4dc, 0x7f037275, 0xa8e1f22d, 0xeb7e64e3, 0x3c9ce4bb, |
| 7578 | 0x9fca6212, 0x4828e24a, 0x02166901, 0xd5f4e959, 0x76a26ff0, |
| 7579 | 0xa140efa8}, |
| 7580 | {0x00000000, 0xef52b6e1, 0x05d46b83, 0xea86dd62, 0x0ba8d706, |
| 7581 | 0xe4fa61e7, 0x0e7cbc85, 0xe12e0a64, 0x1751ae0c, 0xf80318ed, |
| 7582 | 0x1285c58f, 0xfdd7736e, 0x1cf9790a, 0xf3abcfeb, 0x192d1289, |
| 7583 | 0xf67fa468, 0x2ea35c18, 0xc1f1eaf9, 0x2b77379b, 0xc425817a, |
| 7584 | 0x250b8b1e, 0xca593dff, 0x20dfe09d, 0xcf8d567c, 0x39f2f214, |
| 7585 | 0xd6a044f5, 0x3c269997, 0xd3742f76, 0x325a2512, 0xdd0893f3, |
| 7586 | 0x378e4e91, 0xd8dcf870, 0x5d46b830, 0xb2140ed1, 0x5892d3b3, |
| 7587 | 0xb7c06552, 0x56ee6f36, 0xb9bcd9d7, 0x533a04b5, 0xbc68b254, |
| 7588 | 0x4a17163c, 0xa545a0dd, 0x4fc37dbf, 0xa091cb5e, 0x41bfc13a, |
| 7589 | 0xaeed77db, 0x446baab9, 0xab391c58, 0x73e5e428, 0x9cb752c9, |
| 7590 | 0x76318fab, 0x9963394a, 0x784d332e, 0x971f85cf, 0x7d9958ad, |
| 7591 | 0x92cbee4c, 0x64b44a24, 0x8be6fcc5, 0x616021a7, 0x8e329746, |
| 7592 | 0x6f1c9d22, 0x804e2bc3, 0x6ac8f6a1, 0x859a4040, 0xba8d7060, |
| 7593 | 0x55dfc681, 0xbf591be3, 0x500bad02, 0xb125a766, 0x5e771187, |
| 7594 | 0xb4f1cce5, 0x5ba37a04, 0xaddcde6c, 0x428e688d, 0xa808b5ef, |
| 7595 | 0x475a030e, 0xa674096a, 0x4926bf8b, 0xa3a062e9, 0x4cf2d408, |
| 7596 | 0x942e2c78, 0x7b7c9a99, 0x91fa47fb, 0x7ea8f11a, 0x9f86fb7e, |
| 7597 | 0x70d44d9f, 0x9a5290fd, 0x7500261c, 0x837f8274, 0x6c2d3495, |
| 7598 | 0x86abe9f7, 0x69f95f16, 0x88d75572, 0x6785e393, 0x8d033ef1, |
| 7599 | 0x62518810, 0xe7cbc850, 0x08997eb1, 0xe21fa3d3, 0x0d4d1532, |
| 7600 | 0xec631f56, 0x0331a9b7, 0xe9b774d5, 0x06e5c234, 0xf09a665c, |
| 7601 | 0x1fc8d0bd, 0xf54e0ddf, 0x1a1cbb3e, 0xfb32b15a, 0x146007bb, |
| 7602 | 0xfee6dad9, 0x11b46c38, 0xc9689448, 0x263a22a9, 0xccbcffcb, |
| 7603 | 0x23ee492a, 0xc2c0434e, 0x2d92f5af, 0xc71428cd, 0x28469e2c, |
| 7604 | 0xde393a44, 0x316b8ca5, 0xdbed51c7, 0x34bfe726, 0xd591ed42, |
| 7605 | 0x3ac35ba3, 0xd04586c1, 0x3f173020, 0xae6be681, 0x41395060, |
| 7606 | 0xabbf8d02, 0x44ed3be3, 0xa5c33187, 0x4a918766, 0xa0175a04, |
| 7607 | 0x4f45ece5, 0xb93a488d, 0x5668fe6c, 0xbcee230e, 0x53bc95ef, |
| 7608 | 0xb2929f8b, 0x5dc0296a, 0xb746f408, 0x581442e9, 0x80c8ba99, |
| 7609 | 0x6f9a0c78, 0x851cd11a, 0x6a4e67fb, 0x8b606d9f, 0x6432db7e, |
| 7610 | 0x8eb4061c, 0x61e6b0fd, 0x97991495, 0x78cba274, 0x924d7f16, |
| 7611 | 0x7d1fc9f7, 0x9c31c393, 0x73637572, 0x99e5a810, 0x76b71ef1, |
| 7612 | 0xf32d5eb1, 0x1c7fe850, 0xf6f93532, 0x19ab83d3, 0xf88589b7, |
| 7613 | 0x17d73f56, 0xfd51e234, 0x120354d5, 0xe47cf0bd, 0x0b2e465c, |
| 7614 | 0xe1a89b3e, 0x0efa2ddf, 0xefd427bb, 0x0086915a, 0xea004c38, |
| 7615 | 0x0552fad9, 0xdd8e02a9, 0x32dcb448, 0xd85a692a, 0x3708dfcb, |
| 7616 | 0xd626d5af, 0x3974634e, 0xd3f2be2c, 0x3ca008cd, 0xcadfaca5, |
| 7617 | 0x258d1a44, 0xcf0bc726, 0x205971c7, 0xc1777ba3, 0x2e25cd42, |
| 7618 | 0xc4a31020, 0x2bf1a6c1, 0x14e696e1, 0xfbb42000, 0x1132fd62, |
| 7619 | 0xfe604b83, 0x1f4e41e7, 0xf01cf706, 0x1a9a2a64, 0xf5c89c85, |
| 7620 | 0x03b738ed, 0xece58e0c, 0x0663536e, 0xe931e58f, 0x081fefeb, |
| 7621 | 0xe74d590a, 0x0dcb8468, 0xe2993289, 0x3a45caf9, 0xd5177c18, |
| 7622 | 0x3f91a17a, 0xd0c3179b, 0x31ed1dff, 0xdebfab1e, 0x3439767c, |
| 7623 | 0xdb6bc09d, 0x2d1464f5, 0xc246d214, 0x28c00f76, 0xc792b997, |
| 7624 | 0x26bcb3f3, 0xc9ee0512, 0x2368d870, 0xcc3a6e91, 0x49a02ed1, |
| 7625 | 0xa6f29830, 0x4c744552, 0xa326f3b3, 0x4208f9d7, 0xad5a4f36, |
| 7626 | 0x47dc9254, 0xa88e24b5, 0x5ef180dd, 0xb1a3363c, 0x5b25eb5e, |
| 7627 | 0xb4775dbf, 0x555957db, 0xba0be13a, 0x508d3c58, 0xbfdf8ab9, |
| 7628 | 0x670372c9, 0x8851c428, 0x62d7194a, 0x8d85afab, 0x6caba5cf, |
| 7629 | 0x83f9132e, 0x697fce4c, 0x862d78ad, 0x7052dcc5, 0x9f006a24, |
| 7630 | 0x7586b746, 0x9ad401a7, 0x7bfa0bc3, 0x94a8bd22, 0x7e2e6040, |
| 7631 | 0x917cd6a1}, |
| 7632 | {0x00000000, 0x87a6cb43, 0xd43c90c7, 0x539a5b84, 0x730827cf, |
| 7633 | 0xf4aeec8c, 0xa734b708, 0x20927c4b, 0xe6104f9e, 0x61b684dd, |
| 7634 | 0x322cdf59, 0xb58a141a, 0x95186851, 0x12bea312, 0x4124f896, |
| 7635 | 0xc68233d5, 0x1751997d, 0x90f7523e, 0xc36d09ba, 0x44cbc2f9, |
| 7636 | 0x6459beb2, 0xe3ff75f1, 0xb0652e75, 0x37c3e536, 0xf141d6e3, |
| 7637 | 0x76e71da0, 0x257d4624, 0xa2db8d67, 0x8249f12c, 0x05ef3a6f, |
| 7638 | 0x567561eb, 0xd1d3aaa8, 0x2ea332fa, 0xa905f9b9, 0xfa9fa23d, |
| 7639 | 0x7d39697e, 0x5dab1535, 0xda0dde76, 0x899785f2, 0x0e314eb1, |
| 7640 | 0xc8b37d64, 0x4f15b627, 0x1c8feda3, 0x9b2926e0, 0xbbbb5aab, |
| 7641 | 0x3c1d91e8, 0x6f87ca6c, 0xe821012f, 0x39f2ab87, 0xbe5460c4, |
| 7642 | 0xedce3b40, 0x6a68f003, 0x4afa8c48, 0xcd5c470b, 0x9ec61c8f, |
| 7643 | 0x1960d7cc, 0xdfe2e419, 0x58442f5a, 0x0bde74de, 0x8c78bf9d, |
| 7644 | 0xaceac3d6, 0x2b4c0895, 0x78d65311, 0xff709852, 0x5d4665f4, |
| 7645 | 0xdae0aeb7, 0x897af533, 0x0edc3e70, 0x2e4e423b, 0xa9e88978, |
| 7646 | 0xfa72d2fc, 0x7dd419bf, 0xbb562a6a, 0x3cf0e129, 0x6f6abaad, |
| 7647 | 0xe8cc71ee, 0xc85e0da5, 0x4ff8c6e6, 0x1c629d62, 0x9bc45621, |
| 7648 | 0x4a17fc89, 0xcdb137ca, 0x9e2b6c4e, 0x198da70d, 0x391fdb46, |
| 7649 | 0xbeb91005, 0xed234b81, 0x6a8580c2, 0xac07b317, 0x2ba17854, |
| 7650 | 0x783b23d0, 0xff9de893, 0xdf0f94d8, 0x58a95f9b, 0x0b33041f, |
| 7651 | 0x8c95cf5c, 0x73e5570e, 0xf4439c4d, 0xa7d9c7c9, 0x207f0c8a, |
| 7652 | 0x00ed70c1, 0x874bbb82, 0xd4d1e006, 0x53772b45, 0x95f51890, |
| 7653 | 0x1253d3d3, 0x41c98857, 0xc66f4314, 0xe6fd3f5f, 0x615bf41c, |
| 7654 | 0x32c1af98, 0xb56764db, 0x64b4ce73, 0xe3120530, 0xb0885eb4, |
| 7655 | 0x372e95f7, 0x17bce9bc, 0x901a22ff, 0xc380797b, 0x4426b238, |
| 7656 | 0x82a481ed, 0x05024aae, 0x5698112a, 0xd13eda69, 0xf1aca622, |
| 7657 | 0x760a6d61, 0x259036e5, 0xa236fda6, 0xba8ccbe8, 0x3d2a00ab, |
| 7658 | 0x6eb05b2f, 0xe916906c, 0xc984ec27, 0x4e222764, 0x1db87ce0, |
| 7659 | 0x9a1eb7a3, 0x5c9c8476, 0xdb3a4f35, 0x88a014b1, 0x0f06dff2, |
| 7660 | 0x2f94a3b9, 0xa83268fa, 0xfba8337e, 0x7c0ef83d, 0xaddd5295, |
| 7661 | 0x2a7b99d6, 0x79e1c252, 0xfe470911, 0xded5755a, 0x5973be19, |
| 7662 | 0x0ae9e59d, 0x8d4f2ede, 0x4bcd1d0b, 0xcc6bd648, 0x9ff18dcc, |
| 7663 | 0x1857468f, 0x38c53ac4, 0xbf63f187, 0xecf9aa03, 0x6b5f6140, |
| 7664 | 0x942ff912, 0x13893251, 0x401369d5, 0xc7b5a296, 0xe727dedd, |
| 7665 | 0x6081159e, 0x331b4e1a, 0xb4bd8559, 0x723fb68c, 0xf5997dcf, |
| 7666 | 0xa603264b, 0x21a5ed08, 0x01379143, 0x86915a00, 0xd50b0184, |
| 7667 | 0x52adcac7, 0x837e606f, 0x04d8ab2c, 0x5742f0a8, 0xd0e43beb, |
| 7668 | 0xf07647a0, 0x77d08ce3, 0x244ad767, 0xa3ec1c24, 0x656e2ff1, |
| 7669 | 0xe2c8e4b2, 0xb152bf36, 0x36f47475, 0x1666083e, 0x91c0c37d, |
| 7670 | 0xc25a98f9, 0x45fc53ba, 0xe7caae1c, 0x606c655f, 0x33f63edb, |
| 7671 | 0xb450f598, 0x94c289d3, 0x13644290, 0x40fe1914, 0xc758d257, |
| 7672 | 0x01dae182, 0x867c2ac1, 0xd5e67145, 0x5240ba06, 0x72d2c64d, |
| 7673 | 0xf5740d0e, 0xa6ee568a, 0x21489dc9, 0xf09b3761, 0x773dfc22, |
| 7674 | 0x24a7a7a6, 0xa3016ce5, 0x839310ae, 0x0435dbed, 0x57af8069, |
| 7675 | 0xd0094b2a, 0x168b78ff, 0x912db3bc, 0xc2b7e838, 0x4511237b, |
| 7676 | 0x65835f30, 0xe2259473, 0xb1bfcff7, 0x361904b4, 0xc9699ce6, |
| 7677 | 0x4ecf57a5, 0x1d550c21, 0x9af3c762, 0xba61bb29, 0x3dc7706a, |
| 7678 | 0x6e5d2bee, 0xe9fbe0ad, 0x2f79d378, 0xa8df183b, 0xfb4543bf, |
| 7679 | 0x7ce388fc, 0x5c71f4b7, 0xdbd73ff4, 0x884d6470, 0x0febaf33, |
| 7680 | 0xde38059b, 0x599eced8, 0x0a04955c, 0x8da25e1f, 0xad302254, |
| 7681 | 0x2a96e917, 0x790cb293, 0xfeaa79d0, 0x38284a05, 0xbf8e8146, |
| 7682 | 0xec14dac2, 0x6bb21181, 0x4b206dca, 0xcc86a689, 0x9f1cfd0d, |
| 7683 | 0x18ba364e}}; |
| 7684 | |
| 7685 | local const z_word_t FAR crc_braid_big_table[][256] = { |
| 7686 | {0x00000000, 0x43cba687, 0xc7903cd4, 0x845b9a53, 0xcf270873, |
| 7687 | 0x8cecaef4, 0x08b734a7, 0x4b7c9220, 0x9e4f10e6, 0xdd84b661, |
| 7688 | 0x59df2c32, 0x1a148ab5, 0x51681895, 0x12a3be12, 0x96f82441, |
| 7689 | 0xd53382c6, 0x7d995117, 0x3e52f790, 0xba096dc3, 0xf9c2cb44, |
| 7690 | 0xb2be5964, 0xf175ffe3, 0x752e65b0, 0x36e5c337, 0xe3d641f1, |
| 7691 | 0xa01de776, 0x24467d25, 0x678ddba2, 0x2cf14982, 0x6f3aef05, |
| 7692 | 0xeb617556, 0xa8aad3d1, 0xfa32a32e, 0xb9f905a9, 0x3da29ffa, |
| 7693 | 0x7e69397d, 0x3515ab5d, 0x76de0dda, 0xf2859789, 0xb14e310e, |
| 7694 | 0x647db3c8, 0x27b6154f, 0xa3ed8f1c, 0xe026299b, 0xab5abbbb, |
| 7695 | 0xe8911d3c, 0x6cca876f, 0x2f0121e8, 0x87abf239, 0xc46054be, |
| 7696 | 0x403bceed, 0x03f0686a, 0x488cfa4a, 0x0b475ccd, 0x8f1cc69e, |
| 7697 | 0xccd76019, 0x19e4e2df, 0x5a2f4458, 0xde74de0b, 0x9dbf788c, |
| 7698 | 0xd6c3eaac, 0x95084c2b, 0x1153d678, 0x529870ff, 0xf465465d, |
| 7699 | 0xb7aee0da, 0x33f57a89, 0x703edc0e, 0x3b424e2e, 0x7889e8a9, |
| 7700 | 0xfcd272fa, 0xbf19d47d, 0x6a2a56bb, 0x29e1f03c, 0xadba6a6f, |
| 7701 | 0xee71cce8, 0xa50d5ec8, 0xe6c6f84f, 0x629d621c, 0x2156c49b, |
| 7702 | 0x89fc174a, 0xca37b1cd, 0x4e6c2b9e, 0x0da78d19, 0x46db1f39, |
| 7703 | 0x0510b9be, 0x814b23ed, 0xc280856a, 0x17b307ac, 0x5478a12b, |
| 7704 | 0xd0233b78, 0x93e89dff, 0xd8940fdf, 0x9b5fa958, 0x1f04330b, |
| 7705 | 0x5ccf958c, 0x0e57e573, 0x4d9c43f4, 0xc9c7d9a7, 0x8a0c7f20, |
| 7706 | 0xc170ed00, 0x82bb4b87, 0x06e0d1d4, 0x452b7753, 0x9018f595, |
| 7707 | 0xd3d35312, 0x5788c941, 0x14436fc6, 0x5f3ffde6, 0x1cf45b61, |
| 7708 | 0x98afc132, 0xdb6467b5, 0x73ceb464, 0x300512e3, 0xb45e88b0, |
| 7709 | 0xf7952e37, 0xbce9bc17, 0xff221a90, 0x7b7980c3, 0x38b22644, |
| 7710 | 0xed81a482, 0xae4a0205, 0x2a119856, 0x69da3ed1, 0x22a6acf1, |
| 7711 | 0x616d0a76, 0xe5369025, 0xa6fd36a2, 0xe8cb8cba, 0xab002a3d, |
| 7712 | 0x2f5bb06e, 0x6c9016e9, 0x27ec84c9, 0x6427224e, 0xe07cb81d, |
| 7713 | 0xa3b71e9a, 0x76849c5c, 0x354f3adb, 0xb114a088, 0xf2df060f, |
| 7714 | 0xb9a3942f, 0xfa6832a8, 0x7e33a8fb, 0x3df80e7c, 0x9552ddad, |
| 7715 | 0xd6997b2a, 0x52c2e179, 0x110947fe, 0x5a75d5de, 0x19be7359, |
| 7716 | 0x9de5e90a, 0xde2e4f8d, 0x0b1dcd4b, 0x48d66bcc, 0xcc8df19f, |
| 7717 | 0x8f465718, 0xc43ac538, 0x87f163bf, 0x03aaf9ec, 0x40615f6b, |
| 7718 | 0x12f92f94, 0x51328913, 0xd5691340, 0x96a2b5c7, 0xddde27e7, |
| 7719 | 0x9e158160, 0x1a4e1b33, 0x5985bdb4, 0x8cb63f72, 0xcf7d99f5, |
| 7720 | 0x4b2603a6, 0x08eda521, 0x43913701, 0x005a9186, 0x84010bd5, |
| 7721 | 0xc7caad52, 0x6f607e83, 0x2cabd804, 0xa8f04257, 0xeb3be4d0, |
| 7722 | 0xa04776f0, 0xe38cd077, 0x67d74a24, 0x241ceca3, 0xf12f6e65, |
| 7723 | 0xb2e4c8e2, 0x36bf52b1, 0x7574f436, 0x3e086616, 0x7dc3c091, |
| 7724 | 0xf9985ac2, 0xba53fc45, 0x1caecae7, 0x5f656c60, 0xdb3ef633, |
| 7725 | 0x98f550b4, 0xd389c294, 0x90426413, 0x1419fe40, 0x57d258c7, |
| 7726 | 0x82e1da01, 0xc12a7c86, 0x4571e6d5, 0x06ba4052, 0x4dc6d272, |
| 7727 | 0x0e0d74f5, 0x8a56eea6, 0xc99d4821, 0x61379bf0, 0x22fc3d77, |
| 7728 | 0xa6a7a724, 0xe56c01a3, 0xae109383, 0xeddb3504, 0x6980af57, |
| 7729 | 0x2a4b09d0, 0xff788b16, 0xbcb32d91, 0x38e8b7c2, 0x7b231145, |
| 7730 | 0x305f8365, 0x739425e2, 0xf7cfbfb1, 0xb4041936, 0xe69c69c9, |
| 7731 | 0xa557cf4e, 0x210c551d, 0x62c7f39a, 0x29bb61ba, 0x6a70c73d, |
| 7732 | 0xee2b5d6e, 0xade0fbe9, 0x78d3792f, 0x3b18dfa8, 0xbf4345fb, |
| 7733 | 0xfc88e37c, 0xb7f4715c, 0xf43fd7db, 0x70644d88, 0x33afeb0f, |
| 7734 | 0x9b0538de, 0xd8ce9e59, 0x5c95040a, 0x1f5ea28d, 0x542230ad, |
| 7735 | 0x17e9962a, 0x93b20c79, 0xd079aafe, 0x054a2838, 0x46818ebf, |
| 7736 | 0xc2da14ec, 0x8111b26b, 0xca6d204b, 0x89a686cc, 0x0dfd1c9f, |
| 7737 | 0x4e36ba18}, |
| 7738 | {0x00000000, 0xe1b652ef, 0x836bd405, 0x62dd86ea, 0x06d7a80b, |
| 7739 | 0xe761fae4, 0x85bc7c0e, 0x640a2ee1, 0x0cae5117, 0xed1803f8, |
| 7740 | 0x8fc58512, 0x6e73d7fd, 0x0a79f91c, 0xebcfabf3, 0x89122d19, |
| 7741 | 0x68a47ff6, 0x185ca32e, 0xf9eaf1c1, 0x9b37772b, 0x7a8125c4, |
| 7742 | 0x1e8b0b25, 0xff3d59ca, 0x9de0df20, 0x7c568dcf, 0x14f2f239, |
| 7743 | 0xf544a0d6, 0x9799263c, 0x762f74d3, 0x12255a32, 0xf39308dd, |
| 7744 | 0x914e8e37, 0x70f8dcd8, 0x30b8465d, 0xd10e14b2, 0xb3d39258, |
| 7745 | 0x5265c0b7, 0x366fee56, 0xd7d9bcb9, 0xb5043a53, 0x54b268bc, |
| 7746 | 0x3c16174a, 0xdda045a5, 0xbf7dc34f, 0x5ecb91a0, 0x3ac1bf41, |
| 7747 | 0xdb77edae, 0xb9aa6b44, 0x581c39ab, 0x28e4e573, 0xc952b79c, |
| 7748 | 0xab8f3176, 0x4a396399, 0x2e334d78, 0xcf851f97, 0xad58997d, |
| 7749 | 0x4ceecb92, 0x244ab464, 0xc5fce68b, 0xa7216061, 0x4697328e, |
| 7750 | 0x229d1c6f, 0xc32b4e80, 0xa1f6c86a, 0x40409a85, 0x60708dba, |
| 7751 | 0x81c6df55, 0xe31b59bf, 0x02ad0b50, 0x66a725b1, 0x8711775e, |
| 7752 | 0xe5ccf1b4, 0x047aa35b, 0x6cdedcad, 0x8d688e42, 0xefb508a8, |
| 7753 | 0x0e035a47, 0x6a0974a6, 0x8bbf2649, 0xe962a0a3, 0x08d4f24c, |
| 7754 | 0x782c2e94, 0x999a7c7b, 0xfb47fa91, 0x1af1a87e, 0x7efb869f, |
| 7755 | 0x9f4dd470, 0xfd90529a, 0x1c260075, 0x74827f83, 0x95342d6c, |
| 7756 | 0xf7e9ab86, 0x165ff969, 0x7255d788, 0x93e38567, 0xf13e038d, |
| 7757 | 0x10885162, 0x50c8cbe7, 0xb17e9908, 0xd3a31fe2, 0x32154d0d, |
| 7758 | 0x561f63ec, 0xb7a93103, 0xd574b7e9, 0x34c2e506, 0x5c669af0, |
| 7759 | 0xbdd0c81f, 0xdf0d4ef5, 0x3ebb1c1a, 0x5ab132fb, 0xbb076014, |
| 7760 | 0xd9dae6fe, 0x386cb411, 0x489468c9, 0xa9223a26, 0xcbffbccc, |
| 7761 | 0x2a49ee23, 0x4e43c0c2, 0xaff5922d, 0xcd2814c7, 0x2c9e4628, |
| 7762 | 0x443a39de, 0xa58c6b31, 0xc751eddb, 0x26e7bf34, 0x42ed91d5, |
| 7763 | 0xa35bc33a, 0xc18645d0, 0x2030173f, 0x81e66bae, 0x60503941, |
| 7764 | 0x028dbfab, 0xe33bed44, 0x8731c3a5, 0x6687914a, 0x045a17a0, |
| 7765 | 0xe5ec454f, 0x8d483ab9, 0x6cfe6856, 0x0e23eebc, 0xef95bc53, |
| 7766 | 0x8b9f92b2, 0x6a29c05d, 0x08f446b7, 0xe9421458, 0x99bac880, |
| 7767 | 0x780c9a6f, 0x1ad11c85, 0xfb674e6a, 0x9f6d608b, 0x7edb3264, |
| 7768 | 0x1c06b48e, 0xfdb0e661, 0x95149997, 0x74a2cb78, 0x167f4d92, |
| 7769 | 0xf7c91f7d, 0x93c3319c, 0x72756373, 0x10a8e599, 0xf11eb776, |
| 7770 | 0xb15e2df3, 0x50e87f1c, 0x3235f9f6, 0xd383ab19, 0xb78985f8, |
| 7771 | 0x563fd717, 0x34e251fd, 0xd5540312, 0xbdf07ce4, 0x5c462e0b, |
| 7772 | 0x3e9ba8e1, 0xdf2dfa0e, 0xbb27d4ef, 0x5a918600, 0x384c00ea, |
| 7773 | 0xd9fa5205, 0xa9028edd, 0x48b4dc32, 0x2a695ad8, 0xcbdf0837, |
| 7774 | 0xafd526d6, 0x4e637439, 0x2cbef2d3, 0xcd08a03c, 0xa5acdfca, |
| 7775 | 0x441a8d25, 0x26c70bcf, 0xc7715920, 0xa37b77c1, 0x42cd252e, |
| 7776 | 0x2010a3c4, 0xc1a6f12b, 0xe196e614, 0x0020b4fb, 0x62fd3211, |
| 7777 | 0x834b60fe, 0xe7414e1f, 0x06f71cf0, 0x642a9a1a, 0x859cc8f5, |
| 7778 | 0xed38b703, 0x0c8ee5ec, 0x6e536306, 0x8fe531e9, 0xebef1f08, |
| 7779 | 0x0a594de7, 0x6884cb0d, 0x893299e2, 0xf9ca453a, 0x187c17d5, |
| 7780 | 0x7aa1913f, 0x9b17c3d0, 0xff1ded31, 0x1eabbfde, 0x7c763934, |
| 7781 | 0x9dc06bdb, 0xf564142d, 0x14d246c2, 0x760fc028, 0x97b992c7, |
| 7782 | 0xf3b3bc26, 0x1205eec9, 0x70d86823, 0x916e3acc, 0xd12ea049, |
| 7783 | 0x3098f2a6, 0x5245744c, 0xb3f326a3, 0xd7f90842, 0x364f5aad, |
| 7784 | 0x5492dc47, 0xb5248ea8, 0xdd80f15e, 0x3c36a3b1, 0x5eeb255b, |
| 7785 | 0xbf5d77b4, 0xdb575955, 0x3ae10bba, 0x583c8d50, 0xb98adfbf, |
| 7786 | 0xc9720367, 0x28c45188, 0x4a19d762, 0xabaf858d, 0xcfa5ab6c, |
| 7787 | 0x2e13f983, 0x4cce7f69, 0xad782d86, 0xc5dc5270, 0x246a009f, |
| 7788 | 0x46b78675, 0xa701d49a, 0xc30bfa7b, 0x22bda894, 0x40602e7e, |
| 7789 | 0xa1d67c91}, |
| 7790 | {0x00000000, 0x5880e2d7, 0xf106b474, 0xa98656a3, 0xe20d68e9, |
| 7791 | 0xba8d8a3e, 0x130bdc9d, 0x4b8b3e4a, 0x851da109, 0xdd9d43de, |
| 7792 | 0x741b157d, 0x2c9bf7aa, 0x6710c9e0, 0x3f902b37, 0x96167d94, |
| 7793 | 0xce969f43, 0x0a3b4213, 0x52bba0c4, 0xfb3df667, 0xa3bd14b0, |
| 7794 | 0xe8362afa, 0xb0b6c82d, 0x19309e8e, 0x41b07c59, 0x8f26e31a, |
| 7795 | 0xd7a601cd, 0x7e20576e, 0x26a0b5b9, 0x6d2b8bf3, 0x35ab6924, |
| 7796 | 0x9c2d3f87, 0xc4addd50, 0x14768426, 0x4cf666f1, 0xe5703052, |
| 7797 | 0xbdf0d285, 0xf67beccf, 0xaefb0e18, 0x077d58bb, 0x5ffdba6c, |
| 7798 | 0x916b252f, 0xc9ebc7f8, 0x606d915b, 0x38ed738c, 0x73664dc6, |
| 7799 | 0x2be6af11, 0x8260f9b2, 0xdae01b65, 0x1e4dc635, 0x46cd24e2, |
| 7800 | 0xef4b7241, 0xb7cb9096, 0xfc40aedc, 0xa4c04c0b, 0x0d461aa8, |
| 7801 | 0x55c6f87f, 0x9b50673c, 0xc3d085eb, 0x6a56d348, 0x32d6319f, |
| 7802 | 0x795d0fd5, 0x21dded02, 0x885bbba1, 0xd0db5976, 0x28ec084d, |
| 7803 | 0x706cea9a, 0xd9eabc39, 0x816a5eee, 0xcae160a4, 0x92618273, |
| 7804 | 0x3be7d4d0, 0x63673607, 0xadf1a944, 0xf5714b93, 0x5cf71d30, |
| 7805 | 0x0477ffe7, 0x4ffcc1ad, 0x177c237a, 0xbefa75d9, 0xe67a970e, |
| 7806 | 0x22d74a5e, 0x7a57a889, 0xd3d1fe2a, 0x8b511cfd, 0xc0da22b7, |
| 7807 | 0x985ac060, 0x31dc96c3, 0x695c7414, 0xa7caeb57, 0xff4a0980, |
| 7808 | 0x56cc5f23, 0x0e4cbdf4, 0x45c783be, 0x1d476169, 0xb4c137ca, |
| 7809 | 0xec41d51d, 0x3c9a8c6b, 0x641a6ebc, 0xcd9c381f, 0x951cdac8, |
| 7810 | 0xde97e482, 0x86170655, 0x2f9150f6, 0x7711b221, 0xb9872d62, |
| 7811 | 0xe107cfb5, 0x48819916, 0x10017bc1, 0x5b8a458b, 0x030aa75c, |
| 7812 | 0xaa8cf1ff, 0xf20c1328, 0x36a1ce78, 0x6e212caf, 0xc7a77a0c, |
| 7813 | 0x9f2798db, 0xd4aca691, 0x8c2c4446, 0x25aa12e5, 0x7d2af032, |
| 7814 | 0xb3bc6f71, 0xeb3c8da6, 0x42badb05, 0x1a3a39d2, 0x51b10798, |
| 7815 | 0x0931e54f, 0xa0b7b3ec, 0xf837513b, 0x50d8119a, 0x0858f34d, |
| 7816 | 0xa1dea5ee, 0xf95e4739, 0xb2d57973, 0xea559ba4, 0x43d3cd07, |
| 7817 | 0x1b532fd0, 0xd5c5b093, 0x8d455244, 0x24c304e7, 0x7c43e630, |
| 7818 | 0x37c8d87a, 0x6f483aad, 0xc6ce6c0e, 0x9e4e8ed9, 0x5ae35389, |
| 7819 | 0x0263b15e, 0xabe5e7fd, 0xf365052a, 0xb8ee3b60, 0xe06ed9b7, |
| 7820 | 0x49e88f14, 0x11686dc3, 0xdffef280, 0x877e1057, 0x2ef846f4, |
| 7821 | 0x7678a423, 0x3df39a69, 0x657378be, 0xccf52e1d, 0x9475ccca, |
| 7822 | 0x44ae95bc, 0x1c2e776b, 0xb5a821c8, 0xed28c31f, 0xa6a3fd55, |
| 7823 | 0xfe231f82, 0x57a54921, 0x0f25abf6, 0xc1b334b5, 0x9933d662, |
| 7824 | 0x30b580c1, 0x68356216, 0x23be5c5c, 0x7b3ebe8b, 0xd2b8e828, |
| 7825 | 0x8a380aff, 0x4e95d7af, 0x16153578, 0xbf9363db, 0xe713810c, |
| 7826 | 0xac98bf46, 0xf4185d91, 0x5d9e0b32, 0x051ee9e5, 0xcb8876a6, |
| 7827 | 0x93089471, 0x3a8ec2d2, 0x620e2005, 0x29851e4f, 0x7105fc98, |
| 7828 | 0xd883aa3b, 0x800348ec, 0x783419d7, 0x20b4fb00, 0x8932ada3, |
| 7829 | 0xd1b24f74, 0x9a39713e, 0xc2b993e9, 0x6b3fc54a, 0x33bf279d, |
| 7830 | 0xfd29b8de, 0xa5a95a09, 0x0c2f0caa, 0x54afee7d, 0x1f24d037, |
| 7831 | 0x47a432e0, 0xee226443, 0xb6a28694, 0x720f5bc4, 0x2a8fb913, |
| 7832 | 0x8309efb0, 0xdb890d67, 0x9002332d, 0xc882d1fa, 0x61048759, |
| 7833 | 0x3984658e, 0xf712facd, 0xaf92181a, 0x06144eb9, 0x5e94ac6e, |
| 7834 | 0x151f9224, 0x4d9f70f3, 0xe4192650, 0xbc99c487, 0x6c429df1, |
| 7835 | 0x34c27f26, 0x9d442985, 0xc5c4cb52, 0x8e4ff518, 0xd6cf17cf, |
| 7836 | 0x7f49416c, 0x27c9a3bb, 0xe95f3cf8, 0xb1dfde2f, 0x1859888c, |
| 7837 | 0x40d96a5b, 0x0b525411, 0x53d2b6c6, 0xfa54e065, 0xa2d402b2, |
| 7838 | 0x6679dfe2, 0x3ef93d35, 0x977f6b96, 0xcfff8941, 0x8474b70b, |
| 7839 | 0xdcf455dc, 0x7572037f, 0x2df2e1a8, 0xe3647eeb, 0xbbe49c3c, |
| 7840 | 0x1262ca9f, 0x4ae22848, 0x01691602, 0x59e9f4d5, 0xf06fa276, |
| 7841 | 0xa8ef40a1}, |
| 7842 | {0x00000000, 0x463b6765, 0x8c76ceca, 0xca4da9af, 0x59ebed4e, |
| 7843 | 0x1fd08a2b, 0xd59d2384, 0x93a644e1, 0xb2d6db9d, 0xf4edbcf8, |
| 7844 | 0x3ea01557, 0x789b7232, 0xeb3d36d3, 0xad0651b6, 0x674bf819, |
| 7845 | 0x21709f7c, 0x25abc6e0, 0x6390a185, 0xa9dd082a, 0xefe66f4f, |
| 7846 | 0x7c402bae, 0x3a7b4ccb, 0xf036e564, 0xb60d8201, 0x977d1d7d, |
| 7847 | 0xd1467a18, 0x1b0bd3b7, 0x5d30b4d2, 0xce96f033, 0x88ad9756, |
| 7848 | 0x42e03ef9, 0x04db599c, 0x0b50fc1a, 0x4d6b9b7f, 0x872632d0, |
| 7849 | 0xc11d55b5, 0x52bb1154, 0x14807631, 0xdecddf9e, 0x98f6b8fb, |
| 7850 | 0xb9862787, 0xffbd40e2, 0x35f0e94d, 0x73cb8e28, 0xe06dcac9, |
| 7851 | 0xa656adac, 0x6c1b0403, 0x2a206366, 0x2efb3afa, 0x68c05d9f, |
| 7852 | 0xa28df430, 0xe4b69355, 0x7710d7b4, 0x312bb0d1, 0xfb66197e, |
| 7853 | 0xbd5d7e1b, 0x9c2de167, 0xda168602, 0x105b2fad, 0x566048c8, |
| 7854 | 0xc5c60c29, 0x83fd6b4c, 0x49b0c2e3, 0x0f8ba586, 0x16a0f835, |
| 7855 | 0x509b9f50, 0x9ad636ff, 0xdced519a, 0x4f4b157b, 0x0970721e, |
| 7856 | 0xc33ddbb1, 0x8506bcd4, 0xa47623a8, 0xe24d44cd, 0x2800ed62, |
| 7857 | 0x6e3b8a07, 0xfd9dcee6, 0xbba6a983, 0x71eb002c, 0x37d06749, |
| 7858 | 0x330b3ed5, 0x753059b0, 0xbf7df01f, 0xf946977a, 0x6ae0d39b, |
| 7859 | 0x2cdbb4fe, 0xe6961d51, 0xa0ad7a34, 0x81dde548, 0xc7e6822d, |
| 7860 | 0x0dab2b82, 0x4b904ce7, 0xd8360806, 0x9e0d6f63, 0x5440c6cc, |
| 7861 | 0x127ba1a9, 0x1df0042f, 0x5bcb634a, 0x9186cae5, 0xd7bdad80, |
| 7862 | 0x441be961, 0x02208e04, 0xc86d27ab, 0x8e5640ce, 0xaf26dfb2, |
| 7863 | 0xe91db8d7, 0x23501178, 0x656b761d, 0xf6cd32fc, 0xb0f65599, |
| 7864 | 0x7abbfc36, 0x3c809b53, 0x385bc2cf, 0x7e60a5aa, 0xb42d0c05, |
| 7865 | 0xf2166b60, 0x61b02f81, 0x278b48e4, 0xedc6e14b, 0xabfd862e, |
| 7866 | 0x8a8d1952, 0xccb67e37, 0x06fbd798, 0x40c0b0fd, 0xd366f41c, |
| 7867 | 0x955d9379, 0x5f103ad6, 0x192b5db3, 0x2c40f16b, 0x6a7b960e, |
| 7868 | 0xa0363fa1, 0xe60d58c4, 0x75ab1c25, 0x33907b40, 0xf9ddd2ef, |
| 7869 | 0xbfe6b58a, 0x9e962af6, 0xd8ad4d93, 0x12e0e43c, 0x54db8359, |
| 7870 | 0xc77dc7b8, 0x8146a0dd, 0x4b0b0972, 0x0d306e17, 0x09eb378b, |
| 7871 | 0x4fd050ee, 0x859df941, 0xc3a69e24, 0x5000dac5, 0x163bbda0, |
| 7872 | 0xdc76140f, 0x9a4d736a, 0xbb3dec16, 0xfd068b73, 0x374b22dc, |
| 7873 | 0x717045b9, 0xe2d60158, 0xa4ed663d, 0x6ea0cf92, 0x289ba8f7, |
| 7874 | 0x27100d71, 0x612b6a14, 0xab66c3bb, 0xed5da4de, 0x7efbe03f, |
| 7875 | 0x38c0875a, 0xf28d2ef5, 0xb4b64990, 0x95c6d6ec, 0xd3fdb189, |
| 7876 | 0x19b01826, 0x5f8b7f43, 0xcc2d3ba2, 0x8a165cc7, 0x405bf568, |
| 7877 | 0x0660920d, 0x02bbcb91, 0x4480acf4, 0x8ecd055b, 0xc8f6623e, |
| 7878 | 0x5b5026df, 0x1d6b41ba, 0xd726e815, 0x911d8f70, 0xb06d100c, |
| 7879 | 0xf6567769, 0x3c1bdec6, 0x7a20b9a3, 0xe986fd42, 0xafbd9a27, |
| 7880 | 0x65f03388, 0x23cb54ed, 0x3ae0095e, 0x7cdb6e3b, 0xb696c794, |
| 7881 | 0xf0ada0f1, 0x630be410, 0x25308375, 0xef7d2ada, 0xa9464dbf, |
| 7882 | 0x8836d2c3, 0xce0db5a6, 0x04401c09, 0x427b7b6c, 0xd1dd3f8d, |
| 7883 | 0x97e658e8, 0x5dabf147, 0x1b909622, 0x1f4bcfbe, 0x5970a8db, |
| 7884 | 0x933d0174, 0xd5066611, 0x46a022f0, 0x009b4595, 0xcad6ec3a, |
| 7885 | 0x8ced8b5f, 0xad9d1423, 0xeba67346, 0x21ebdae9, 0x67d0bd8c, |
| 7886 | 0xf476f96d, 0xb24d9e08, 0x780037a7, 0x3e3b50c2, 0x31b0f544, |
| 7887 | 0x778b9221, 0xbdc63b8e, 0xfbfd5ceb, 0x685b180a, 0x2e607f6f, |
| 7888 | 0xe42dd6c0, 0xa216b1a5, 0x83662ed9, 0xc55d49bc, 0x0f10e013, |
| 7889 | 0x492b8776, 0xda8dc397, 0x9cb6a4f2, 0x56fb0d5d, 0x10c06a38, |
| 7890 | 0x141b33a4, 0x522054c1, 0x986dfd6e, 0xde569a0b, 0x4df0deea, |
| 7891 | 0x0bcbb98f, 0xc1861020, 0x87bd7745, 0xa6cde839, 0xe0f68f5c, |
| 7892 | 0x2abb26f3, 0x6c804196, 0xff260577, 0xb91d6212, 0x7350cbbd, |
| 7893 | 0x356bacd8}}; |
| 7894 | |
| 7895 | #endif |
| 7896 | |
| 7897 | #endif |
| 7898 | |
| 7899 | #if N == 6 |
| 7900 | |
| 7901 | #if W == 8 |
| 7902 | |
| 7903 | local const z_crc_t FAR crc_braid_table[][256] = { |
| 7904 | {0x00000000, 0x3db1ecdc, 0x7b63d9b8, 0x46d23564, 0xf6c7b370, |
| 7905 | 0xcb765fac, 0x8da46ac8, 0xb0158614, 0x36fe60a1, 0x0b4f8c7d, |
| 7906 | 0x4d9db919, 0x702c55c5, 0xc039d3d1, 0xfd883f0d, 0xbb5a0a69, |
| 7907 | 0x86ebe6b5, 0x6dfcc142, 0x504d2d9e, 0x169f18fa, 0x2b2ef426, |
| 7908 | 0x9b3b7232, 0xa68a9eee, 0xe058ab8a, 0xdde94756, 0x5b02a1e3, |
| 7909 | 0x66b34d3f, 0x2061785b, 0x1dd09487, 0xadc51293, 0x9074fe4f, |
| 7910 | 0xd6a6cb2b, 0xeb1727f7, 0xdbf98284, 0xe6486e58, 0xa09a5b3c, |
| 7911 | 0x9d2bb7e0, 0x2d3e31f4, 0x108fdd28, 0x565de84c, 0x6bec0490, |
| 7912 | 0xed07e225, 0xd0b60ef9, 0x96643b9d, 0xabd5d741, 0x1bc05155, |
| 7913 | 0x2671bd89, 0x60a388ed, 0x5d126431, 0xb60543c6, 0x8bb4af1a, |
| 7914 | 0xcd669a7e, 0xf0d776a2, 0x40c2f0b6, 0x7d731c6a, 0x3ba1290e, |
| 7915 | 0x0610c5d2, 0x80fb2367, 0xbd4acfbb, 0xfb98fadf, 0xc6291603, |
| 7916 | 0x763c9017, 0x4b8d7ccb, 0x0d5f49af, 0x30eea573, 0x6c820349, |
| 7917 | 0x5133ef95, 0x17e1daf1, 0x2a50362d, 0x9a45b039, 0xa7f45ce5, |
| 7918 | 0xe1266981, 0xdc97855d, 0x5a7c63e8, 0x67cd8f34, 0x211fba50, |
| 7919 | 0x1cae568c, 0xacbbd098, 0x910a3c44, 0xd7d80920, 0xea69e5fc, |
| 7920 | 0x017ec20b, 0x3ccf2ed7, 0x7a1d1bb3, 0x47acf76f, 0xf7b9717b, |
| 7921 | 0xca089da7, 0x8cdaa8c3, 0xb16b441f, 0x3780a2aa, 0x0a314e76, |
| 7922 | 0x4ce37b12, 0x715297ce, 0xc14711da, 0xfcf6fd06, 0xba24c862, |
| 7923 | 0x879524be, 0xb77b81cd, 0x8aca6d11, 0xcc185875, 0xf1a9b4a9, |
| 7924 | 0x41bc32bd, 0x7c0dde61, 0x3adfeb05, 0x076e07d9, 0x8185e16c, |
| 7925 | 0xbc340db0, 0xfae638d4, 0xc757d408, 0x7742521c, 0x4af3bec0, |
| 7926 | 0x0c218ba4, 0x31906778, 0xda87408f, 0xe736ac53, 0xa1e49937, |
| 7927 | 0x9c5575eb, 0x2c40f3ff, 0x11f11f23, 0x57232a47, 0x6a92c69b, |
| 7928 | 0xec79202e, 0xd1c8ccf2, 0x971af996, 0xaaab154a, 0x1abe935e, |
| 7929 | 0x270f7f82, 0x61dd4ae6, 0x5c6ca63a, 0xd9040692, 0xe4b5ea4e, |
| 7930 | 0xa267df2a, 0x9fd633f6, 0x2fc3b5e2, 0x1272593e, 0x54a06c5a, |
| 7931 | 0x69118086, 0xeffa6633, 0xd24b8aef, 0x9499bf8b, 0xa9285357, |
| 7932 | 0x193dd543, 0x248c399f, 0x625e0cfb, 0x5fefe027, 0xb4f8c7d0, |
| 7933 | 0x89492b0c, 0xcf9b1e68, 0xf22af2b4, 0x423f74a0, 0x7f8e987c, |
| 7934 | 0x395cad18, 0x04ed41c4, 0x8206a771, 0xbfb74bad, 0xf9657ec9, |
| 7935 | 0xc4d49215, 0x74c11401, 0x4970f8dd, 0x0fa2cdb9, 0x32132165, |
| 7936 | 0x02fd8416, 0x3f4c68ca, 0x799e5dae, 0x442fb172, 0xf43a3766, |
| 7937 | 0xc98bdbba, 0x8f59eede, 0xb2e80202, 0x3403e4b7, 0x09b2086b, |
| 7938 | 0x4f603d0f, 0x72d1d1d3, 0xc2c457c7, 0xff75bb1b, 0xb9a78e7f, |
| 7939 | 0x841662a3, 0x6f014554, 0x52b0a988, 0x14629cec, 0x29d37030, |
| 7940 | 0x99c6f624, 0xa4771af8, 0xe2a52f9c, 0xdf14c340, 0x59ff25f5, |
| 7941 | 0x644ec929, 0x229cfc4d, 0x1f2d1091, 0xaf389685, 0x92897a59, |
| 7942 | 0xd45b4f3d, 0xe9eaa3e1, 0xb58605db, 0x8837e907, 0xcee5dc63, |
| 7943 | 0xf35430bf, 0x4341b6ab, 0x7ef05a77, 0x38226f13, 0x059383cf, |
| 7944 | 0x8378657a, 0xbec989a6, 0xf81bbcc2, 0xc5aa501e, 0x75bfd60a, |
| 7945 | 0x480e3ad6, 0x0edc0fb2, 0x336de36e, 0xd87ac499, 0xe5cb2845, |
| 7946 | 0xa3191d21, 0x9ea8f1fd, 0x2ebd77e9, 0x130c9b35, 0x55deae51, |
| 7947 | 0x686f428d, 0xee84a438, 0xd33548e4, 0x95e77d80, 0xa856915c, |
| 7948 | 0x18431748, 0x25f2fb94, 0x6320cef0, 0x5e91222c, 0x6e7f875f, |
| 7949 | 0x53ce6b83, 0x151c5ee7, 0x28adb23b, 0x98b8342f, 0xa509d8f3, |
| 7950 | 0xe3dbed97, 0xde6a014b, 0x5881e7fe, 0x65300b22, 0x23e23e46, |
| 7951 | 0x1e53d29a, 0xae46548e, 0x93f7b852, 0xd5258d36, 0xe89461ea, |
| 7952 | 0x0383461d, 0x3e32aac1, 0x78e09fa5, 0x45517379, 0xf544f56d, |
| 7953 | 0xc8f519b1, 0x8e272cd5, 0xb396c009, 0x357d26bc, 0x08ccca60, |
| 7954 | 0x4e1eff04, 0x73af13d8, 0xc3ba95cc, 0xfe0b7910, 0xb8d94c74, |
| 7955 | 0x8568a0a8}, |
| 7956 | {0x00000000, 0x69790b65, 0xd2f216ca, 0xbb8b1daf, 0x7e952bd5, |
| 7957 | 0x17ec20b0, 0xac673d1f, 0xc51e367a, 0xfd2a57aa, 0x94535ccf, |
| 7958 | 0x2fd84160, 0x46a14a05, 0x83bf7c7f, 0xeac6771a, 0x514d6ab5, |
| 7959 | 0x383461d0, 0x2125a915, 0x485ca270, 0xf3d7bfdf, 0x9aaeb4ba, |
| 7960 | 0x5fb082c0, 0x36c989a5, 0x8d42940a, 0xe43b9f6f, 0xdc0ffebf, |
| 7961 | 0xb576f5da, 0x0efde875, 0x6784e310, 0xa29ad56a, 0xcbe3de0f, |
| 7962 | 0x7068c3a0, 0x1911c8c5, 0x424b522a, 0x2b32594f, 0x90b944e0, |
| 7963 | 0xf9c04f85, 0x3cde79ff, 0x55a7729a, 0xee2c6f35, 0x87556450, |
| 7964 | 0xbf610580, 0xd6180ee5, 0x6d93134a, 0x04ea182f, 0xc1f42e55, |
| 7965 | 0xa88d2530, 0x1306389f, 0x7a7f33fa, 0x636efb3f, 0x0a17f05a, |
| 7966 | 0xb19cedf5, 0xd8e5e690, 0x1dfbd0ea, 0x7482db8f, 0xcf09c620, |
| 7967 | 0xa670cd45, 0x9e44ac95, 0xf73da7f0, 0x4cb6ba5f, 0x25cfb13a, |
| 7968 | 0xe0d18740, 0x89a88c25, 0x3223918a, 0x5b5a9aef, 0x8496a454, |
| 7969 | 0xedefaf31, 0x5664b29e, 0x3f1db9fb, 0xfa038f81, 0x937a84e4, |
| 7970 | 0x28f1994b, 0x4188922e, 0x79bcf3fe, 0x10c5f89b, 0xab4ee534, |
| 7971 | 0xc237ee51, 0x0729d82b, 0x6e50d34e, 0xd5dbcee1, 0xbca2c584, |
| 7972 | 0xa5b30d41, 0xccca0624, 0x77411b8b, 0x1e3810ee, 0xdb262694, |
| 7973 | 0xb25f2df1, 0x09d4305e, 0x60ad3b3b, 0x58995aeb, 0x31e0518e, |
| 7974 | 0x8a6b4c21, 0xe3124744, 0x260c713e, 0x4f757a5b, 0xf4fe67f4, |
| 7975 | 0x9d876c91, 0xc6ddf67e, 0xafa4fd1b, 0x142fe0b4, 0x7d56ebd1, |
| 7976 | 0xb848ddab, 0xd131d6ce, 0x6abacb61, 0x03c3c004, 0x3bf7a1d4, |
| 7977 | 0x528eaab1, 0xe905b71e, 0x807cbc7b, 0x45628a01, 0x2c1b8164, |
| 7978 | 0x97909ccb, 0xfee997ae, 0xe7f85f6b, 0x8e81540e, 0x350a49a1, |
| 7979 | 0x5c7342c4, 0x996d74be, 0xf0147fdb, 0x4b9f6274, 0x22e66911, |
| 7980 | 0x1ad208c1, 0x73ab03a4, 0xc8201e0b, 0xa159156e, 0x64472314, |
| 7981 | 0x0d3e2871, 0xb6b535de, 0xdfcc3ebb, 0xd25c4ee9, 0xbb25458c, |
| 7982 | 0x00ae5823, 0x69d75346, 0xacc9653c, 0xc5b06e59, 0x7e3b73f6, |
| 7983 | 0x17427893, 0x2f761943, 0x460f1226, 0xfd840f89, 0x94fd04ec, |
| 7984 | 0x51e33296, 0x389a39f3, 0x8311245c, 0xea682f39, 0xf379e7fc, |
| 7985 | 0x9a00ec99, 0x218bf136, 0x48f2fa53, 0x8deccc29, 0xe495c74c, |
| 7986 | 0x5f1edae3, 0x3667d186, 0x0e53b056, 0x672abb33, 0xdca1a69c, |
| 7987 | 0xb5d8adf9, 0x70c69b83, 0x19bf90e6, 0xa2348d49, 0xcb4d862c, |
| 7988 | 0x90171cc3, 0xf96e17a6, 0x42e50a09, 0x2b9c016c, 0xee823716, |
| 7989 | 0x87fb3c73, 0x3c7021dc, 0x55092ab9, 0x6d3d4b69, 0x0444400c, |
| 7990 | 0xbfcf5da3, 0xd6b656c6, 0x13a860bc, 0x7ad16bd9, 0xc15a7676, |
| 7991 | 0xa8237d13, 0xb132b5d6, 0xd84bbeb3, 0x63c0a31c, 0x0ab9a879, |
| 7992 | 0xcfa79e03, 0xa6de9566, 0x1d5588c9, 0x742c83ac, 0x4c18e27c, |
| 7993 | 0x2561e919, 0x9eeaf4b6, 0xf793ffd3, 0x328dc9a9, 0x5bf4c2cc, |
| 7994 | 0xe07fdf63, 0x8906d406, 0x56caeabd, 0x3fb3e1d8, 0x8438fc77, |
| 7995 | 0xed41f712, 0x285fc168, 0x4126ca0d, 0xfaadd7a2, 0x93d4dcc7, |
| 7996 | 0xabe0bd17, 0xc299b672, 0x7912abdd, 0x106ba0b8, 0xd57596c2, |
| 7997 | 0xbc0c9da7, 0x07878008, 0x6efe8b6d, 0x77ef43a8, 0x1e9648cd, |
| 7998 | 0xa51d5562, 0xcc645e07, 0x097a687d, 0x60036318, 0xdb887eb7, |
| 7999 | 0xb2f175d2, 0x8ac51402, 0xe3bc1f67, 0x583702c8, 0x314e09ad, |
| 8000 | 0xf4503fd7, 0x9d2934b2, 0x26a2291d, 0x4fdb2278, 0x1481b897, |
| 8001 | 0x7df8b3f2, 0xc673ae5d, 0xaf0aa538, 0x6a149342, 0x036d9827, |
| 8002 | 0xb8e68588, 0xd19f8eed, 0xe9abef3d, 0x80d2e458, 0x3b59f9f7, |
| 8003 | 0x5220f292, 0x973ec4e8, 0xfe47cf8d, 0x45ccd222, 0x2cb5d947, |
| 8004 | 0x35a41182, 0x5cdd1ae7, 0xe7560748, 0x8e2f0c2d, 0x4b313a57, |
| 8005 | 0x22483132, 0x99c32c9d, 0xf0ba27f8, 0xc88e4628, 0xa1f74d4d, |
| 8006 | 0x1a7c50e2, 0x73055b87, 0xb61b6dfd, 0xdf626698, 0x64e97b37, |
| 8007 | 0x0d907052}, |
| 8008 | {0x00000000, 0x7fc99b93, 0xff933726, 0x805aacb5, 0x2457680d, |
| 8009 | 0x5b9ef39e, 0xdbc45f2b, 0xa40dc4b8, 0x48aed01a, 0x37674b89, |
| 8010 | 0xb73de73c, 0xc8f47caf, 0x6cf9b817, 0x13302384, 0x936a8f31, |
| 8011 | 0xeca314a2, 0x915da034, 0xee943ba7, 0x6ece9712, 0x11070c81, |
| 8012 | 0xb50ac839, 0xcac353aa, 0x4a99ff1f, 0x3550648c, 0xd9f3702e, |
| 8013 | 0xa63aebbd, 0x26604708, 0x59a9dc9b, 0xfda41823, 0x826d83b0, |
| 8014 | 0x02372f05, 0x7dfeb496, 0xf9ca4629, 0x8603ddba, 0x0659710f, |
| 8015 | 0x7990ea9c, 0xdd9d2e24, 0xa254b5b7, 0x220e1902, 0x5dc78291, |
| 8016 | 0xb1649633, 0xcead0da0, 0x4ef7a115, 0x313e3a86, 0x9533fe3e, |
| 8017 | 0xeafa65ad, 0x6aa0c918, 0x1569528b, 0x6897e61d, 0x175e7d8e, |
| 8018 | 0x9704d13b, 0xe8cd4aa8, 0x4cc08e10, 0x33091583, 0xb353b936, |
| 8019 | 0xcc9a22a5, 0x20393607, 0x5ff0ad94, 0xdfaa0121, 0xa0639ab2, |
| 8020 | 0x046e5e0a, 0x7ba7c599, 0xfbfd692c, 0x8434f2bf, 0x28e58a13, |
| 8021 | 0x572c1180, 0xd776bd35, 0xa8bf26a6, 0x0cb2e21e, 0x737b798d, |
| 8022 | 0xf321d538, 0x8ce84eab, 0x604b5a09, 0x1f82c19a, 0x9fd86d2f, |
| 8023 | 0xe011f6bc, 0x441c3204, 0x3bd5a997, 0xbb8f0522, 0xc4469eb1, |
| 8024 | 0xb9b82a27, 0xc671b1b4, 0x462b1d01, 0x39e28692, 0x9def422a, |
| 8025 | 0xe226d9b9, 0x627c750c, 0x1db5ee9f, 0xf116fa3d, 0x8edf61ae, |
| 8026 | 0x0e85cd1b, 0x714c5688, 0xd5419230, 0xaa8809a3, 0x2ad2a516, |
| 8027 | 0x551b3e85, 0xd12fcc3a, 0xaee657a9, 0x2ebcfb1c, 0x5175608f, |
| 8028 | 0xf578a437, 0x8ab13fa4, 0x0aeb9311, 0x75220882, 0x99811c20, |
| 8029 | 0xe64887b3, 0x66122b06, 0x19dbb095, 0xbdd6742d, 0xc21fefbe, |
| 8030 | 0x4245430b, 0x3d8cd898, 0x40726c0e, 0x3fbbf79d, 0xbfe15b28, |
| 8031 | 0xc028c0bb, 0x64250403, 0x1bec9f90, 0x9bb63325, 0xe47fa8b6, |
| 8032 | 0x08dcbc14, 0x77152787, 0xf74f8b32, 0x888610a1, 0x2c8bd419, |
| 8033 | 0x53424f8a, 0xd318e33f, 0xacd178ac, 0x51cb1426, 0x2e028fb5, |
| 8034 | 0xae582300, 0xd191b893, 0x759c7c2b, 0x0a55e7b8, 0x8a0f4b0d, |
| 8035 | 0xf5c6d09e, 0x1965c43c, 0x66ac5faf, 0xe6f6f31a, 0x993f6889, |
| 8036 | 0x3d32ac31, 0x42fb37a2, 0xc2a19b17, 0xbd680084, 0xc096b412, |
| 8037 | 0xbf5f2f81, 0x3f058334, 0x40cc18a7, 0xe4c1dc1f, 0x9b08478c, |
| 8038 | 0x1b52eb39, 0x649b70aa, 0x88386408, 0xf7f1ff9b, 0x77ab532e, |
| 8039 | 0x0862c8bd, 0xac6f0c05, 0xd3a69796, 0x53fc3b23, 0x2c35a0b0, |
| 8040 | 0xa801520f, 0xd7c8c99c, 0x57926529, 0x285bfeba, 0x8c563a02, |
| 8041 | 0xf39fa191, 0x73c50d24, 0x0c0c96b7, 0xe0af8215, 0x9f661986, |
| 8042 | 0x1f3cb533, 0x60f52ea0, 0xc4f8ea18, 0xbb31718b, 0x3b6bdd3e, |
| 8043 | 0x44a246ad, 0x395cf23b, 0x469569a8, 0xc6cfc51d, 0xb9065e8e, |
| 8044 | 0x1d0b9a36, 0x62c201a5, 0xe298ad10, 0x9d513683, 0x71f22221, |
| 8045 | 0x0e3bb9b2, 0x8e611507, 0xf1a88e94, 0x55a54a2c, 0x2a6cd1bf, |
| 8046 | 0xaa367d0a, 0xd5ffe699, 0x792e9e35, 0x06e705a6, 0x86bda913, |
| 8047 | 0xf9743280, 0x5d79f638, 0x22b06dab, 0xa2eac11e, 0xdd235a8d, |
| 8048 | 0x31804e2f, 0x4e49d5bc, 0xce137909, 0xb1dae29a, 0x15d72622, |
| 8049 | 0x6a1ebdb1, 0xea441104, 0x958d8a97, 0xe8733e01, 0x97baa592, |
| 8050 | 0x17e00927, 0x682992b4, 0xcc24560c, 0xb3edcd9f, 0x33b7612a, |
| 8051 | 0x4c7efab9, 0xa0ddee1b, 0xdf147588, 0x5f4ed93d, 0x208742ae, |
| 8052 | 0x848a8616, 0xfb431d85, 0x7b19b130, 0x04d02aa3, 0x80e4d81c, |
| 8053 | 0xff2d438f, 0x7f77ef3a, 0x00be74a9, 0xa4b3b011, 0xdb7a2b82, |
| 8054 | 0x5b208737, 0x24e91ca4, 0xc84a0806, 0xb7839395, 0x37d93f20, |
| 8055 | 0x4810a4b3, 0xec1d600b, 0x93d4fb98, 0x138e572d, 0x6c47ccbe, |
| 8056 | 0x11b97828, 0x6e70e3bb, 0xee2a4f0e, 0x91e3d49d, 0x35ee1025, |
| 8057 | 0x4a278bb6, 0xca7d2703, 0xb5b4bc90, 0x5917a832, 0x26de33a1, |
| 8058 | 0xa6849f14, 0xd94d0487, 0x7d40c03f, 0x02895bac, 0x82d3f719, |
| 8059 | 0xfd1a6c8a}, |
| 8060 | {0x00000000, 0xa396284c, 0x9c5d56d9, 0x3fcb7e95, 0xe3cbabf3, |
| 8061 | 0x405d83bf, 0x7f96fd2a, 0xdc00d566, 0x1ce651a7, 0xbf7079eb, |
| 8062 | 0x80bb077e, 0x232d2f32, 0xff2dfa54, 0x5cbbd218, 0x6370ac8d, |
| 8063 | 0xc0e684c1, 0x39cca34e, 0x9a5a8b02, 0xa591f597, 0x0607dddb, |
| 8064 | 0xda0708bd, 0x799120f1, 0x465a5e64, 0xe5cc7628, 0x252af2e9, |
| 8065 | 0x86bcdaa5, 0xb977a430, 0x1ae18c7c, 0xc6e1591a, 0x65777156, |
| 8066 | 0x5abc0fc3, 0xf92a278f, 0x7399469c, 0xd00f6ed0, 0xefc41045, |
| 8067 | 0x4c523809, 0x9052ed6f, 0x33c4c523, 0x0c0fbbb6, 0xaf9993fa, |
| 8068 | 0x6f7f173b, 0xcce93f77, 0xf32241e2, 0x50b469ae, 0x8cb4bcc8, |
| 8069 | 0x2f229484, 0x10e9ea11, 0xb37fc25d, 0x4a55e5d2, 0xe9c3cd9e, |
| 8070 | 0xd608b30b, 0x759e9b47, 0xa99e4e21, 0x0a08666d, 0x35c318f8, |
| 8071 | 0x965530b4, 0x56b3b475, 0xf5259c39, 0xcaeee2ac, 0x6978cae0, |
| 8072 | 0xb5781f86, 0x16ee37ca, 0x2925495f, 0x8ab36113, 0xe7328d38, |
| 8073 | 0x44a4a574, 0x7b6fdbe1, 0xd8f9f3ad, 0x04f926cb, 0xa76f0e87, |
| 8074 | 0x98a47012, 0x3b32585e, 0xfbd4dc9f, 0x5842f4d3, 0x67898a46, |
| 8075 | 0xc41fa20a, 0x181f776c, 0xbb895f20, 0x844221b5, 0x27d409f9, |
| 8076 | 0xdefe2e76, 0x7d68063a, 0x42a378af, 0xe13550e3, 0x3d358585, |
| 8077 | 0x9ea3adc9, 0xa168d35c, 0x02fefb10, 0xc2187fd1, 0x618e579d, |
| 8078 | 0x5e452908, 0xfdd30144, 0x21d3d422, 0x8245fc6e, 0xbd8e82fb, |
| 8079 | 0x1e18aab7, 0x94abcba4, 0x373de3e8, 0x08f69d7d, 0xab60b531, |
| 8080 | 0x77606057, 0xd4f6481b, 0xeb3d368e, 0x48ab1ec2, 0x884d9a03, |
| 8081 | 0x2bdbb24f, 0x1410ccda, 0xb786e496, 0x6b8631f0, 0xc81019bc, |
| 8082 | 0xf7db6729, 0x544d4f65, 0xad6768ea, 0x0ef140a6, 0x313a3e33, |
| 8083 | 0x92ac167f, 0x4eacc319, 0xed3aeb55, 0xd2f195c0, 0x7167bd8c, |
| 8084 | 0xb181394d, 0x12171101, 0x2ddc6f94, 0x8e4a47d8, 0x524a92be, |
| 8085 | 0xf1dcbaf2, 0xce17c467, 0x6d81ec2b, 0x15141c31, 0xb682347d, |
| 8086 | 0x89494ae8, 0x2adf62a4, 0xf6dfb7c2, 0x55499f8e, 0x6a82e11b, |
| 8087 | 0xc914c957, 0x09f24d96, 0xaa6465da, 0x95af1b4f, 0x36393303, |
| 8088 | 0xea39e665, 0x49afce29, 0x7664b0bc, 0xd5f298f0, 0x2cd8bf7f, |
| 8089 | 0x8f4e9733, 0xb085e9a6, 0x1313c1ea, 0xcf13148c, 0x6c853cc0, |
| 8090 | 0x534e4255, 0xf0d86a19, 0x303eeed8, 0x93a8c694, 0xac63b801, |
| 8091 | 0x0ff5904d, 0xd3f5452b, 0x70636d67, 0x4fa813f2, 0xec3e3bbe, |
| 8092 | 0x668d5aad, 0xc51b72e1, 0xfad00c74, 0x59462438, 0x8546f15e, |
| 8093 | 0x26d0d912, 0x191ba787, 0xba8d8fcb, 0x7a6b0b0a, 0xd9fd2346, |
| 8094 | 0xe6365dd3, 0x45a0759f, 0x99a0a0f9, 0x3a3688b5, 0x05fdf620, |
| 8095 | 0xa66bde6c, 0x5f41f9e3, 0xfcd7d1af, 0xc31caf3a, 0x608a8776, |
| 8096 | 0xbc8a5210, 0x1f1c7a5c, 0x20d704c9, 0x83412c85, 0x43a7a844, |
| 8097 | 0xe0318008, 0xdffafe9d, 0x7c6cd6d1, 0xa06c03b7, 0x03fa2bfb, |
| 8098 | 0x3c31556e, 0x9fa77d22, 0xf2269109, 0x51b0b945, 0x6e7bc7d0, |
| 8099 | 0xcdedef9c, 0x11ed3afa, 0xb27b12b6, 0x8db06c23, 0x2e26446f, |
| 8100 | 0xeec0c0ae, 0x4d56e8e2, 0x729d9677, 0xd10bbe3b, 0x0d0b6b5d, |
| 8101 | 0xae9d4311, 0x91563d84, 0x32c015c8, 0xcbea3247, 0x687c1a0b, |
| 8102 | 0x57b7649e, 0xf4214cd2, 0x282199b4, 0x8bb7b1f8, 0xb47ccf6d, |
| 8103 | 0x17eae721, 0xd70c63e0, 0x749a4bac, 0x4b513539, 0xe8c71d75, |
| 8104 | 0x34c7c813, 0x9751e05f, 0xa89a9eca, 0x0b0cb686, 0x81bfd795, |
| 8105 | 0x2229ffd9, 0x1de2814c, 0xbe74a900, 0x62747c66, 0xc1e2542a, |
| 8106 | 0xfe292abf, 0x5dbf02f3, 0x9d598632, 0x3ecfae7e, 0x0104d0eb, |
| 8107 | 0xa292f8a7, 0x7e922dc1, 0xdd04058d, 0xe2cf7b18, 0x41595354, |
| 8108 | 0xb87374db, 0x1be55c97, 0x242e2202, 0x87b80a4e, 0x5bb8df28, |
| 8109 | 0xf82ef764, 0xc7e589f1, 0x6473a1bd, 0xa495257c, 0x07030d30, |
| 8110 | 0x38c873a5, 0x9b5e5be9, 0x475e8e8f, 0xe4c8a6c3, 0xdb03d856, |
| 8111 | 0x7895f01a}, |
| 8112 | {0x00000000, 0x2a283862, 0x545070c4, 0x7e7848a6, 0xa8a0e188, |
| 8113 | 0x8288d9ea, 0xfcf0914c, 0xd6d8a92e, 0x8a30c551, 0xa018fd33, |
| 8114 | 0xde60b595, 0xf4488df7, 0x229024d9, 0x08b81cbb, 0x76c0541d, |
| 8115 | 0x5ce86c7f, 0xcf108ce3, 0xe538b481, 0x9b40fc27, 0xb168c445, |
| 8116 | 0x67b06d6b, 0x4d985509, 0x33e01daf, 0x19c825cd, 0x452049b2, |
| 8117 | 0x6f0871d0, 0x11703976, 0x3b580114, 0xed80a83a, 0xc7a89058, |
| 8118 | 0xb9d0d8fe, 0x93f8e09c, 0x45501f87, 0x6f7827e5, 0x11006f43, |
| 8119 | 0x3b285721, 0xedf0fe0f, 0xc7d8c66d, 0xb9a08ecb, 0x9388b6a9, |
| 8120 | 0xcf60dad6, 0xe548e2b4, 0x9b30aa12, 0xb1189270, 0x67c03b5e, |
| 8121 | 0x4de8033c, 0x33904b9a, 0x19b873f8, 0x8a409364, 0xa068ab06, |
| 8122 | 0xde10e3a0, 0xf438dbc2, 0x22e072ec, 0x08c84a8e, 0x76b00228, |
| 8123 | 0x5c983a4a, 0x00705635, 0x2a586e57, 0x542026f1, 0x7e081e93, |
| 8124 | 0xa8d0b7bd, 0x82f88fdf, 0xfc80c779, 0xd6a8ff1b, 0x8aa03f0e, |
| 8125 | 0xa088076c, 0xdef04fca, 0xf4d877a8, 0x2200de86, 0x0828e6e4, |
| 8126 | 0x7650ae42, 0x5c789620, 0x0090fa5f, 0x2ab8c23d, 0x54c08a9b, |
| 8127 | 0x7ee8b2f9, 0xa8301bd7, 0x821823b5, 0xfc606b13, 0xd6485371, |
| 8128 | 0x45b0b3ed, 0x6f988b8f, 0x11e0c329, 0x3bc8fb4b, 0xed105265, |
| 8129 | 0xc7386a07, 0xb94022a1, 0x93681ac3, 0xcf8076bc, 0xe5a84ede, |
| 8130 | 0x9bd00678, 0xb1f83e1a, 0x67209734, 0x4d08af56, 0x3370e7f0, |
| 8131 | 0x1958df92, 0xcff02089, 0xe5d818eb, 0x9ba0504d, 0xb188682f, |
| 8132 | 0x6750c101, 0x4d78f963, 0x3300b1c5, 0x192889a7, 0x45c0e5d8, |
| 8133 | 0x6fe8ddba, 0x1190951c, 0x3bb8ad7e, 0xed600450, 0xc7483c32, |
| 8134 | 0xb9307494, 0x93184cf6, 0x00e0ac6a, 0x2ac89408, 0x54b0dcae, |
| 8135 | 0x7e98e4cc, 0xa8404de2, 0x82687580, 0xfc103d26, 0xd6380544, |
| 8136 | 0x8ad0693b, 0xa0f85159, 0xde8019ff, 0xf4a8219d, 0x227088b3, |
| 8137 | 0x0858b0d1, 0x7620f877, 0x5c08c015, 0xce31785d, 0xe419403f, |
| 8138 | 0x9a610899, 0xb04930fb, 0x669199d5, 0x4cb9a1b7, 0x32c1e911, |
| 8139 | 0x18e9d173, 0x4401bd0c, 0x6e29856e, 0x1051cdc8, 0x3a79f5aa, |
| 8140 | 0xeca15c84, 0xc68964e6, 0xb8f12c40, 0x92d91422, 0x0121f4be, |
| 8141 | 0x2b09ccdc, 0x5571847a, 0x7f59bc18, 0xa9811536, 0x83a92d54, |
| 8142 | 0xfdd165f2, 0xd7f95d90, 0x8b1131ef, 0xa139098d, 0xdf41412b, |
| 8143 | 0xf5697949, 0x23b1d067, 0x0999e805, 0x77e1a0a3, 0x5dc998c1, |
| 8144 | 0x8b6167da, 0xa1495fb8, 0xdf31171e, 0xf5192f7c, 0x23c18652, |
| 8145 | 0x09e9be30, 0x7791f696, 0x5db9cef4, 0x0151a28b, 0x2b799ae9, |
| 8146 | 0x5501d24f, 0x7f29ea2d, 0xa9f14303, 0x83d97b61, 0xfda133c7, |
| 8147 | 0xd7890ba5, 0x4471eb39, 0x6e59d35b, 0x10219bfd, 0x3a09a39f, |
| 8148 | 0xecd10ab1, 0xc6f932d3, 0xb8817a75, 0x92a94217, 0xce412e68, |
| 8149 | 0xe469160a, 0x9a115eac, 0xb03966ce, 0x66e1cfe0, 0x4cc9f782, |
| 8150 | 0x32b1bf24, 0x18998746, 0x44914753, 0x6eb97f31, 0x10c13797, |
| 8151 | 0x3ae90ff5, 0xec31a6db, 0xc6199eb9, 0xb861d61f, 0x9249ee7d, |
| 8152 | 0xcea18202, 0xe489ba60, 0x9af1f2c6, 0xb0d9caa4, 0x6601638a, |
| 8153 | 0x4c295be8, 0x3251134e, 0x18792b2c, 0x8b81cbb0, 0xa1a9f3d2, |
| 8154 | 0xdfd1bb74, 0xf5f98316, 0x23212a38, 0x0909125a, 0x77715afc, |
| 8155 | 0x5d59629e, 0x01b10ee1, 0x2b993683, 0x55e17e25, 0x7fc94647, |
| 8156 | 0xa911ef69, 0x8339d70b, 0xfd419fad, 0xd769a7cf, 0x01c158d4, |
| 8157 | 0x2be960b6, 0x55912810, 0x7fb91072, 0xa961b95c, 0x8349813e, |
| 8158 | 0xfd31c998, 0xd719f1fa, 0x8bf19d85, 0xa1d9a5e7, 0xdfa1ed41, |
| 8159 | 0xf589d523, 0x23517c0d, 0x0979446f, 0x77010cc9, 0x5d2934ab, |
| 8160 | 0xced1d437, 0xe4f9ec55, 0x9a81a4f3, 0xb0a99c91, 0x667135bf, |
| 8161 | 0x4c590ddd, 0x3221457b, 0x18097d19, 0x44e11166, 0x6ec92904, |
| 8162 | 0x10b161a2, 0x3a9959c0, 0xec41f0ee, 0xc669c88c, 0xb811802a, |
| 8163 | 0x9239b848}, |
| 8164 | {0x00000000, 0x4713f6fb, 0x8e27edf6, 0xc9341b0d, 0xc73eddad, |
| 8165 | 0x802d2b56, 0x4919305b, 0x0e0ac6a0, 0x550cbd1b, 0x121f4be0, |
| 8166 | 0xdb2b50ed, 0x9c38a616, 0x923260b6, 0xd521964d, 0x1c158d40, |
| 8167 | 0x5b067bbb, 0xaa197a36, 0xed0a8ccd, 0x243e97c0, 0x632d613b, |
| 8168 | 0x6d27a79b, 0x2a345160, 0xe3004a6d, 0xa413bc96, 0xff15c72d, |
| 8169 | 0xb80631d6, 0x71322adb, 0x3621dc20, 0x382b1a80, 0x7f38ec7b, |
| 8170 | 0xb60cf776, 0xf11f018d, 0x8f43f22d, 0xc85004d6, 0x01641fdb, |
| 8171 | 0x4677e920, 0x487d2f80, 0x0f6ed97b, 0xc65ac276, 0x8149348d, |
| 8172 | 0xda4f4f36, 0x9d5cb9cd, 0x5468a2c0, 0x137b543b, 0x1d71929b, |
| 8173 | 0x5a626460, 0x93567f6d, 0xd4458996, 0x255a881b, 0x62497ee0, |
| 8174 | 0xab7d65ed, 0xec6e9316, 0xe26455b6, 0xa577a34d, 0x6c43b840, |
| 8175 | 0x2b504ebb, 0x70563500, 0x3745c3fb, 0xfe71d8f6, 0xb9622e0d, |
| 8176 | 0xb768e8ad, 0xf07b1e56, 0x394f055b, 0x7e5cf3a0, 0xc5f6e21b, |
| 8177 | 0x82e514e0, 0x4bd10fed, 0x0cc2f916, 0x02c83fb6, 0x45dbc94d, |
| 8178 | 0x8cefd240, 0xcbfc24bb, 0x90fa5f00, 0xd7e9a9fb, 0x1eddb2f6, |
| 8179 | 0x59ce440d, 0x57c482ad, 0x10d77456, 0xd9e36f5b, 0x9ef099a0, |
| 8180 | 0x6fef982d, 0x28fc6ed6, 0xe1c875db, 0xa6db8320, 0xa8d14580, |
| 8181 | 0xefc2b37b, 0x26f6a876, 0x61e55e8d, 0x3ae32536, 0x7df0d3cd, |
| 8182 | 0xb4c4c8c0, 0xf3d73e3b, 0xfdddf89b, 0xbace0e60, 0x73fa156d, |
| 8183 | 0x34e9e396, 0x4ab51036, 0x0da6e6cd, 0xc492fdc0, 0x83810b3b, |
| 8184 | 0x8d8bcd9b, 0xca983b60, 0x03ac206d, 0x44bfd696, 0x1fb9ad2d, |
| 8185 | 0x58aa5bd6, 0x919e40db, 0xd68db620, 0xd8877080, 0x9f94867b, |
| 8186 | 0x56a09d76, 0x11b36b8d, 0xe0ac6a00, 0xa7bf9cfb, 0x6e8b87f6, |
| 8187 | 0x2998710d, 0x2792b7ad, 0x60814156, 0xa9b55a5b, 0xeea6aca0, |
| 8188 | 0xb5a0d71b, 0xf2b321e0, 0x3b873aed, 0x7c94cc16, 0x729e0ab6, |
| 8189 | 0x358dfc4d, 0xfcb9e740, 0xbbaa11bb, 0x509cc277, 0x178f348c, |
| 8190 | 0xdebb2f81, 0x99a8d97a, 0x97a21fda, 0xd0b1e921, 0x1985f22c, |
| 8191 | 0x5e9604d7, 0x05907f6c, 0x42838997, 0x8bb7929a, 0xcca46461, |
| 8192 | 0xc2aea2c1, 0x85bd543a, 0x4c894f37, 0x0b9ab9cc, 0xfa85b841, |
| 8193 | 0xbd964eba, 0x74a255b7, 0x33b1a34c, 0x3dbb65ec, 0x7aa89317, |
| 8194 | 0xb39c881a, 0xf48f7ee1, 0xaf89055a, 0xe89af3a1, 0x21aee8ac, |
| 8195 | 0x66bd1e57, 0x68b7d8f7, 0x2fa42e0c, 0xe6903501, 0xa183c3fa, |
| 8196 | 0xdfdf305a, 0x98ccc6a1, 0x51f8ddac, 0x16eb2b57, 0x18e1edf7, |
| 8197 | 0x5ff21b0c, 0x96c60001, 0xd1d5f6fa, 0x8ad38d41, 0xcdc07bba, |
| 8198 | 0x04f460b7, 0x43e7964c, 0x4ded50ec, 0x0afea617, 0xc3cabd1a, |
| 8199 | 0x84d94be1, 0x75c64a6c, 0x32d5bc97, 0xfbe1a79a, 0xbcf25161, |
| 8200 | 0xb2f897c1, 0xf5eb613a, 0x3cdf7a37, 0x7bcc8ccc, 0x20caf777, |
| 8201 | 0x67d9018c, 0xaeed1a81, 0xe9feec7a, 0xe7f42ada, 0xa0e7dc21, |
| 8202 | 0x69d3c72c, 0x2ec031d7, 0x956a206c, 0xd279d697, 0x1b4dcd9a, |
| 8203 | 0x5c5e3b61, 0x5254fdc1, 0x15470b3a, 0xdc731037, 0x9b60e6cc, |
| 8204 | 0xc0669d77, 0x87756b8c, 0x4e417081, 0x0952867a, 0x075840da, |
| 8205 | 0x404bb621, 0x897fad2c, 0xce6c5bd7, 0x3f735a5a, 0x7860aca1, |
| 8206 | 0xb154b7ac, 0xf6474157, 0xf84d87f7, 0xbf5e710c, 0x766a6a01, |
| 8207 | 0x31799cfa, 0x6a7fe741, 0x2d6c11ba, 0xe4580ab7, 0xa34bfc4c, |
| 8208 | 0xad413aec, 0xea52cc17, 0x2366d71a, 0x647521e1, 0x1a29d241, |
| 8209 | 0x5d3a24ba, 0x940e3fb7, 0xd31dc94c, 0xdd170fec, 0x9a04f917, |
| 8210 | 0x5330e21a, 0x142314e1, 0x4f256f5a, 0x083699a1, 0xc10282ac, |
| 8211 | 0x86117457, 0x881bb2f7, 0xcf08440c, 0x063c5f01, 0x412fa9fa, |
| 8212 | 0xb030a877, 0xf7235e8c, 0x3e174581, 0x7904b37a, 0x770e75da, |
| 8213 | 0x301d8321, 0xf929982c, 0xbe3a6ed7, 0xe53c156c, 0xa22fe397, |
| 8214 | 0x6b1bf89a, 0x2c080e61, 0x2202c8c1, 0x65113e3a, 0xac252537, |
| 8215 | 0xeb36d3cc}, |
| 8216 | {0x00000000, 0xa13984ee, 0x99020f9d, 0x383b8b73, 0xe975197b, |
| 8217 | 0x484c9d95, 0x707716e6, 0xd14e9208, 0x099b34b7, 0xa8a2b059, |
| 8218 | 0x90993b2a, 0x31a0bfc4, 0xe0ee2dcc, 0x41d7a922, 0x79ec2251, |
| 8219 | 0xd8d5a6bf, 0x1336696e, 0xb20fed80, 0x8a3466f3, 0x2b0de21d, |
| 8220 | 0xfa437015, 0x5b7af4fb, 0x63417f88, 0xc278fb66, 0x1aad5dd9, |
| 8221 | 0xbb94d937, 0x83af5244, 0x2296d6aa, 0xf3d844a2, 0x52e1c04c, |
| 8222 | 0x6ada4b3f, 0xcbe3cfd1, 0x266cd2dc, 0x87555632, 0xbf6edd41, |
| 8223 | 0x1e5759af, 0xcf19cba7, 0x6e204f49, 0x561bc43a, 0xf72240d4, |
| 8224 | 0x2ff7e66b, 0x8ece6285, 0xb6f5e9f6, 0x17cc6d18, 0xc682ff10, |
| 8225 | 0x67bb7bfe, 0x5f80f08d, 0xfeb97463, 0x355abbb2, 0x94633f5c, |
| 8226 | 0xac58b42f, 0x0d6130c1, 0xdc2fa2c9, 0x7d162627, 0x452dad54, |
| 8227 | 0xe41429ba, 0x3cc18f05, 0x9df80beb, 0xa5c38098, 0x04fa0476, |
| 8228 | 0xd5b4967e, 0x748d1290, 0x4cb699e3, 0xed8f1d0d, 0x4cd9a5b8, |
| 8229 | 0xede02156, 0xd5dbaa25, 0x74e22ecb, 0xa5acbcc3, 0x0495382d, |
| 8230 | 0x3caeb35e, 0x9d9737b0, 0x4542910f, 0xe47b15e1, 0xdc409e92, |
| 8231 | 0x7d791a7c, 0xac378874, 0x0d0e0c9a, 0x353587e9, 0x940c0307, |
| 8232 | 0x5fefccd6, 0xfed64838, 0xc6edc34b, 0x67d447a5, 0xb69ad5ad, |
| 8233 | 0x17a35143, 0x2f98da30, 0x8ea15ede, 0x5674f861, 0xf74d7c8f, |
| 8234 | 0xcf76f7fc, 0x6e4f7312, 0xbf01e11a, 0x1e3865f4, 0x2603ee87, |
| 8235 | 0x873a6a69, 0x6ab57764, 0xcb8cf38a, 0xf3b778f9, 0x528efc17, |
| 8236 | 0x83c06e1f, 0x22f9eaf1, 0x1ac26182, 0xbbfbe56c, 0x632e43d3, |
| 8237 | 0xc217c73d, 0xfa2c4c4e, 0x5b15c8a0, 0x8a5b5aa8, 0x2b62de46, |
| 8238 | 0x13595535, 0xb260d1db, 0x79831e0a, 0xd8ba9ae4, 0xe0811197, |
| 8239 | 0x41b89579, 0x90f60771, 0x31cf839f, 0x09f408ec, 0xa8cd8c02, |
| 8240 | 0x70182abd, 0xd121ae53, 0xe91a2520, 0x4823a1ce, 0x996d33c6, |
| 8241 | 0x3854b728, 0x006f3c5b, 0xa156b8b5, 0x99b34b70, 0x388acf9e, |
| 8242 | 0x00b144ed, 0xa188c003, 0x70c6520b, 0xd1ffd6e5, 0xe9c45d96, |
| 8243 | 0x48fdd978, 0x90287fc7, 0x3111fb29, 0x092a705a, 0xa813f4b4, |
| 8244 | 0x795d66bc, 0xd864e252, 0xe05f6921, 0x4166edcf, 0x8a85221e, |
| 8245 | 0x2bbca6f0, 0x13872d83, 0xb2bea96d, 0x63f03b65, 0xc2c9bf8b, |
| 8246 | 0xfaf234f8, 0x5bcbb016, 0x831e16a9, 0x22279247, 0x1a1c1934, |
| 8247 | 0xbb259dda, 0x6a6b0fd2, 0xcb528b3c, 0xf369004f, 0x525084a1, |
| 8248 | 0xbfdf99ac, 0x1ee61d42, 0x26dd9631, 0x87e412df, 0x56aa80d7, |
| 8249 | 0xf7930439, 0xcfa88f4a, 0x6e910ba4, 0xb644ad1b, 0x177d29f5, |
| 8250 | 0x2f46a286, 0x8e7f2668, 0x5f31b460, 0xfe08308e, 0xc633bbfd, |
| 8251 | 0x670a3f13, 0xace9f0c2, 0x0dd0742c, 0x35ebff5f, 0x94d27bb1, |
| 8252 | 0x459ce9b9, 0xe4a56d57, 0xdc9ee624, 0x7da762ca, 0xa572c475, |
| 8253 | 0x044b409b, 0x3c70cbe8, 0x9d494f06, 0x4c07dd0e, 0xed3e59e0, |
| 8254 | 0xd505d293, 0x743c567d, 0xd56aeec8, 0x74536a26, 0x4c68e155, |
| 8255 | 0xed5165bb, 0x3c1ff7b3, 0x9d26735d, 0xa51df82e, 0x04247cc0, |
| 8256 | 0xdcf1da7f, 0x7dc85e91, 0x45f3d5e2, 0xe4ca510c, 0x3584c304, |
| 8257 | 0x94bd47ea, 0xac86cc99, 0x0dbf4877, 0xc65c87a6, 0x67650348, |
| 8258 | 0x5f5e883b, 0xfe670cd5, 0x2f299edd, 0x8e101a33, 0xb62b9140, |
| 8259 | 0x171215ae, 0xcfc7b311, 0x6efe37ff, 0x56c5bc8c, 0xf7fc3862, |
| 8260 | 0x26b2aa6a, 0x878b2e84, 0xbfb0a5f7, 0x1e892119, 0xf3063c14, |
| 8261 | 0x523fb8fa, 0x6a043389, 0xcb3db767, 0x1a73256f, 0xbb4aa181, |
| 8262 | 0x83712af2, 0x2248ae1c, 0xfa9d08a3, 0x5ba48c4d, 0x639f073e, |
| 8263 | 0xc2a683d0, 0x13e811d8, 0xb2d19536, 0x8aea1e45, 0x2bd39aab, |
| 8264 | 0xe030557a, 0x4109d194, 0x79325ae7, 0xd80bde09, 0x09454c01, |
| 8265 | 0xa87cc8ef, 0x9047439c, 0x317ec772, 0xe9ab61cd, 0x4892e523, |
| 8266 | 0x70a96e50, 0xd190eabe, 0x00de78b6, 0xa1e7fc58, 0x99dc772b, |
| 8267 | 0x38e5f3c5}, |
| 8268 | {0x00000000, 0xe81790a1, 0x0b5e2703, 0xe349b7a2, 0x16bc4e06, |
| 8269 | 0xfeabdea7, 0x1de26905, 0xf5f5f9a4, 0x2d789c0c, 0xc56f0cad, |
| 8270 | 0x2626bb0f, 0xce312bae, 0x3bc4d20a, 0xd3d342ab, 0x309af509, |
| 8271 | 0xd88d65a8, 0x5af13818, 0xb2e6a8b9, 0x51af1f1b, 0xb9b88fba, |
| 8272 | 0x4c4d761e, 0xa45ae6bf, 0x4713511d, 0xaf04c1bc, 0x7789a414, |
| 8273 | 0x9f9e34b5, 0x7cd78317, 0x94c013b6, 0x6135ea12, 0x89227ab3, |
| 8274 | 0x6a6bcd11, 0x827c5db0, 0xb5e27030, 0x5df5e091, 0xbebc5733, |
| 8275 | 0x56abc792, 0xa35e3e36, 0x4b49ae97, 0xa8001935, 0x40178994, |
| 8276 | 0x989aec3c, 0x708d7c9d, 0x93c4cb3f, 0x7bd35b9e, 0x8e26a23a, |
| 8277 | 0x6631329b, 0x85788539, 0x6d6f1598, 0xef134828, 0x0704d889, |
| 8278 | 0xe44d6f2b, 0x0c5aff8a, 0xf9af062e, 0x11b8968f, 0xf2f1212d, |
| 8279 | 0x1ae6b18c, 0xc26bd424, 0x2a7c4485, 0xc935f327, 0x21226386, |
| 8280 | 0xd4d79a22, 0x3cc00a83, 0xdf89bd21, 0x379e2d80, 0xb0b5e621, |
| 8281 | 0x58a27680, 0xbbebc122, 0x53fc5183, 0xa609a827, 0x4e1e3886, |
| 8282 | 0xad578f24, 0x45401f85, 0x9dcd7a2d, 0x75daea8c, 0x96935d2e, |
| 8283 | 0x7e84cd8f, 0x8b71342b, 0x6366a48a, 0x802f1328, 0x68388389, |
| 8284 | 0xea44de39, 0x02534e98, 0xe11af93a, 0x090d699b, 0xfcf8903f, |
| 8285 | 0x14ef009e, 0xf7a6b73c, 0x1fb1279d, 0xc73c4235, 0x2f2bd294, |
| 8286 | 0xcc626536, 0x2475f597, 0xd1800c33, 0x39979c92, 0xdade2b30, |
| 8287 | 0x32c9bb91, 0x05579611, 0xed4006b0, 0x0e09b112, 0xe61e21b3, |
| 8288 | 0x13ebd817, 0xfbfc48b6, 0x18b5ff14, 0xf0a26fb5, 0x282f0a1d, |
| 8289 | 0xc0389abc, 0x23712d1e, 0xcb66bdbf, 0x3e93441b, 0xd684d4ba, |
| 8290 | 0x35cd6318, 0xdddaf3b9, 0x5fa6ae09, 0xb7b13ea8, 0x54f8890a, |
| 8291 | 0xbcef19ab, 0x491ae00f, 0xa10d70ae, 0x4244c70c, 0xaa5357ad, |
| 8292 | 0x72de3205, 0x9ac9a2a4, 0x79801506, 0x919785a7, 0x64627c03, |
| 8293 | 0x8c75eca2, 0x6f3c5b00, 0x872bcba1, 0xba1aca03, 0x520d5aa2, |
| 8294 | 0xb144ed00, 0x59537da1, 0xaca68405, 0x44b114a4, 0xa7f8a306, |
| 8295 | 0x4fef33a7, 0x9762560f, 0x7f75c6ae, 0x9c3c710c, 0x742be1ad, |
| 8296 | 0x81de1809, 0x69c988a8, 0x8a803f0a, 0x6297afab, 0xe0ebf21b, |
| 8297 | 0x08fc62ba, 0xebb5d518, 0x03a245b9, 0xf657bc1d, 0x1e402cbc, |
| 8298 | 0xfd099b1e, 0x151e0bbf, 0xcd936e17, 0x2584feb6, 0xc6cd4914, |
| 8299 | 0x2edad9b5, 0xdb2f2011, 0x3338b0b0, 0xd0710712, 0x386697b3, |
| 8300 | 0x0ff8ba33, 0xe7ef2a92, 0x04a69d30, 0xecb10d91, 0x1944f435, |
| 8301 | 0xf1536494, 0x121ad336, 0xfa0d4397, 0x2280263f, 0xca97b69e, |
| 8302 | 0x29de013c, 0xc1c9919d, 0x343c6839, 0xdc2bf898, 0x3f624f3a, |
| 8303 | 0xd775df9b, 0x5509822b, 0xbd1e128a, 0x5e57a528, 0xb6403589, |
| 8304 | 0x43b5cc2d, 0xaba25c8c, 0x48ebeb2e, 0xa0fc7b8f, 0x78711e27, |
| 8305 | 0x90668e86, 0x732f3924, 0x9b38a985, 0x6ecd5021, 0x86dac080, |
| 8306 | 0x65937722, 0x8d84e783, 0x0aaf2c22, 0xe2b8bc83, 0x01f10b21, |
| 8307 | 0xe9e69b80, 0x1c136224, 0xf404f285, 0x174d4527, 0xff5ad586, |
| 8308 | 0x27d7b02e, 0xcfc0208f, 0x2c89972d, 0xc49e078c, 0x316bfe28, |
| 8309 | 0xd97c6e89, 0x3a35d92b, 0xd222498a, 0x505e143a, 0xb849849b, |
| 8310 | 0x5b003339, 0xb317a398, 0x46e25a3c, 0xaef5ca9d, 0x4dbc7d3f, |
| 8311 | 0xa5abed9e, 0x7d268836, 0x95311897, 0x7678af35, 0x9e6f3f94, |
| 8312 | 0x6b9ac630, 0x838d5691, 0x60c4e133, 0x88d37192, 0xbf4d5c12, |
| 8313 | 0x575accb3, 0xb4137b11, 0x5c04ebb0, 0xa9f11214, 0x41e682b5, |
| 8314 | 0xa2af3517, 0x4ab8a5b6, 0x9235c01e, 0x7a2250bf, 0x996be71d, |
| 8315 | 0x717c77bc, 0x84898e18, 0x6c9e1eb9, 0x8fd7a91b, 0x67c039ba, |
| 8316 | 0xe5bc640a, 0x0dabf4ab, 0xeee24309, 0x06f5d3a8, 0xf3002a0c, |
| 8317 | 0x1b17baad, 0xf85e0d0f, 0x10499dae, 0xc8c4f806, 0x20d368a7, |
| 8318 | 0xc39adf05, 0x2b8d4fa4, 0xde78b600, 0x366f26a1, 0xd5269103, |
| 8319 | 0x3d3101a2}}; |
| 8320 | |
| 8321 | local const z_word_t FAR crc_braid_big_table[][256] = { |
| 8322 | {0x0000000000000000, 0xa19017e800000000, 0x03275e0b00000000, |
| 8323 | 0xa2b749e300000000, 0x064ebc1600000000, 0xa7deabfe00000000, |
| 8324 | 0x0569e21d00000000, 0xa4f9f5f500000000, 0x0c9c782d00000000, |
| 8325 | 0xad0c6fc500000000, 0x0fbb262600000000, 0xae2b31ce00000000, |
| 8326 | 0x0ad2c43b00000000, 0xab42d3d300000000, 0x09f59a3000000000, |
| 8327 | 0xa8658dd800000000, 0x1838f15a00000000, 0xb9a8e6b200000000, |
| 8328 | 0x1b1faf5100000000, 0xba8fb8b900000000, 0x1e764d4c00000000, |
| 8329 | 0xbfe65aa400000000, 0x1d51134700000000, 0xbcc104af00000000, |
| 8330 | 0x14a4897700000000, 0xb5349e9f00000000, 0x1783d77c00000000, |
| 8331 | 0xb613c09400000000, 0x12ea356100000000, 0xb37a228900000000, |
| 8332 | 0x11cd6b6a00000000, 0xb05d7c8200000000, 0x3070e2b500000000, |
| 8333 | 0x91e0f55d00000000, 0x3357bcbe00000000, 0x92c7ab5600000000, |
| 8334 | 0x363e5ea300000000, 0x97ae494b00000000, 0x351900a800000000, |
| 8335 | 0x9489174000000000, 0x3cec9a9800000000, 0x9d7c8d7000000000, |
| 8336 | 0x3fcbc49300000000, 0x9e5bd37b00000000, 0x3aa2268e00000000, |
| 8337 | 0x9b32316600000000, 0x3985788500000000, 0x98156f6d00000000, |
| 8338 | 0x284813ef00000000, 0x89d8040700000000, 0x2b6f4de400000000, |
| 8339 | 0x8aff5a0c00000000, 0x2e06aff900000000, 0x8f96b81100000000, |
| 8340 | 0x2d21f1f200000000, 0x8cb1e61a00000000, 0x24d46bc200000000, |
| 8341 | 0x85447c2a00000000, 0x27f335c900000000, 0x8663222100000000, |
| 8342 | 0x229ad7d400000000, 0x830ac03c00000000, 0x21bd89df00000000, |
| 8343 | 0x802d9e3700000000, 0x21e6b5b000000000, 0x8076a25800000000, |
| 8344 | 0x22c1ebbb00000000, 0x8351fc5300000000, 0x27a809a600000000, |
| 8345 | 0x86381e4e00000000, 0x248f57ad00000000, 0x851f404500000000, |
| 8346 | 0x2d7acd9d00000000, 0x8ceada7500000000, 0x2e5d939600000000, |
| 8347 | 0x8fcd847e00000000, 0x2b34718b00000000, 0x8aa4666300000000, |
| 8348 | 0x28132f8000000000, 0x8983386800000000, 0x39de44ea00000000, |
| 8349 | 0x984e530200000000, 0x3af91ae100000000, 0x9b690d0900000000, |
| 8350 | 0x3f90f8fc00000000, 0x9e00ef1400000000, 0x3cb7a6f700000000, |
| 8351 | 0x9d27b11f00000000, 0x35423cc700000000, 0x94d22b2f00000000, |
| 8352 | 0x366562cc00000000, 0x97f5752400000000, 0x330c80d100000000, |
| 8353 | 0x929c973900000000, 0x302bdeda00000000, 0x91bbc93200000000, |
| 8354 | 0x1196570500000000, 0xb00640ed00000000, 0x12b1090e00000000, |
| 8355 | 0xb3211ee600000000, 0x17d8eb1300000000, 0xb648fcfb00000000, |
| 8356 | 0x14ffb51800000000, 0xb56fa2f000000000, 0x1d0a2f2800000000, |
| 8357 | 0xbc9a38c000000000, 0x1e2d712300000000, 0xbfbd66cb00000000, |
| 8358 | 0x1b44933e00000000, 0xbad484d600000000, 0x1863cd3500000000, |
| 8359 | 0xb9f3dadd00000000, 0x09aea65f00000000, 0xa83eb1b700000000, |
| 8360 | 0x0a89f85400000000, 0xab19efbc00000000, 0x0fe01a4900000000, |
| 8361 | 0xae700da100000000, 0x0cc7444200000000, 0xad5753aa00000000, |
| 8362 | 0x0532de7200000000, 0xa4a2c99a00000000, 0x0615807900000000, |
| 8363 | 0xa785979100000000, 0x037c626400000000, 0xa2ec758c00000000, |
| 8364 | 0x005b3c6f00000000, 0xa1cb2b8700000000, 0x03ca1aba00000000, |
| 8365 | 0xa25a0d5200000000, 0x00ed44b100000000, 0xa17d535900000000, |
| 8366 | 0x0584a6ac00000000, 0xa414b14400000000, 0x06a3f8a700000000, |
| 8367 | 0xa733ef4f00000000, 0x0f56629700000000, 0xaec6757f00000000, |
| 8368 | 0x0c713c9c00000000, 0xade12b7400000000, 0x0918de8100000000, |
| 8369 | 0xa888c96900000000, 0x0a3f808a00000000, 0xabaf976200000000, |
| 8370 | 0x1bf2ebe000000000, 0xba62fc0800000000, 0x18d5b5eb00000000, |
| 8371 | 0xb945a20300000000, 0x1dbc57f600000000, 0xbc2c401e00000000, |
| 8372 | 0x1e9b09fd00000000, 0xbf0b1e1500000000, 0x176e93cd00000000, |
| 8373 | 0xb6fe842500000000, 0x1449cdc600000000, 0xb5d9da2e00000000, |
| 8374 | 0x11202fdb00000000, 0xb0b0383300000000, 0x120771d000000000, |
| 8375 | 0xb397663800000000, 0x33baf80f00000000, 0x922aefe700000000, |
| 8376 | 0x309da60400000000, 0x910db1ec00000000, 0x35f4441900000000, |
| 8377 | 0x946453f100000000, 0x36d31a1200000000, 0x97430dfa00000000, |
| 8378 | 0x3f26802200000000, 0x9eb697ca00000000, 0x3c01de2900000000, |
| 8379 | 0x9d91c9c100000000, 0x39683c3400000000, 0x98f82bdc00000000, |
| 8380 | 0x3a4f623f00000000, 0x9bdf75d700000000, 0x2b82095500000000, |
| 8381 | 0x8a121ebd00000000, 0x28a5575e00000000, 0x893540b600000000, |
| 8382 | 0x2dccb54300000000, 0x8c5ca2ab00000000, 0x2eebeb4800000000, |
| 8383 | 0x8f7bfca000000000, 0x271e717800000000, 0x868e669000000000, |
| 8384 | 0x24392f7300000000, 0x85a9389b00000000, 0x2150cd6e00000000, |
| 8385 | 0x80c0da8600000000, 0x2277936500000000, 0x83e7848d00000000, |
| 8386 | 0x222caf0a00000000, 0x83bcb8e200000000, 0x210bf10100000000, |
| 8387 | 0x809be6e900000000, 0x2462131c00000000, 0x85f204f400000000, |
| 8388 | 0x27454d1700000000, 0x86d55aff00000000, 0x2eb0d72700000000, |
| 8389 | 0x8f20c0cf00000000, 0x2d97892c00000000, 0x8c079ec400000000, |
| 8390 | 0x28fe6b3100000000, 0x896e7cd900000000, 0x2bd9353a00000000, |
| 8391 | 0x8a4922d200000000, 0x3a145e5000000000, 0x9b8449b800000000, |
| 8392 | 0x3933005b00000000, 0x98a317b300000000, 0x3c5ae24600000000, |
| 8393 | 0x9dcaf5ae00000000, 0x3f7dbc4d00000000, 0x9eedaba500000000, |
| 8394 | 0x3688267d00000000, 0x9718319500000000, 0x35af787600000000, |
| 8395 | 0x943f6f9e00000000, 0x30c69a6b00000000, 0x91568d8300000000, |
| 8396 | 0x33e1c46000000000, 0x9271d38800000000, 0x125c4dbf00000000, |
| 8397 | 0xb3cc5a5700000000, 0x117b13b400000000, 0xb0eb045c00000000, |
| 8398 | 0x1412f1a900000000, 0xb582e64100000000, 0x1735afa200000000, |
| 8399 | 0xb6a5b84a00000000, 0x1ec0359200000000, 0xbf50227a00000000, |
| 8400 | 0x1de76b9900000000, 0xbc777c7100000000, 0x188e898400000000, |
| 8401 | 0xb91e9e6c00000000, 0x1ba9d78f00000000, 0xba39c06700000000, |
| 8402 | 0x0a64bce500000000, 0xabf4ab0d00000000, 0x0943e2ee00000000, |
| 8403 | 0xa8d3f50600000000, 0x0c2a00f300000000, 0xadba171b00000000, |
| 8404 | 0x0f0d5ef800000000, 0xae9d491000000000, 0x06f8c4c800000000, |
| 8405 | 0xa768d32000000000, 0x05df9ac300000000, 0xa44f8d2b00000000, |
| 8406 | 0x00b678de00000000, 0xa1266f3600000000, 0x039126d500000000, |
| 8407 | 0xa201313d00000000}, |
| 8408 | {0x0000000000000000, 0xee8439a100000000, 0x9d0f029900000000, |
| 8409 | 0x738b3b3800000000, 0x7b1975e900000000, 0x959d4c4800000000, |
| 8410 | 0xe616777000000000, 0x08924ed100000000, 0xb7349b0900000000, |
| 8411 | 0x59b0a2a800000000, 0x2a3b999000000000, 0xc4bfa03100000000, |
| 8412 | 0xcc2deee000000000, 0x22a9d74100000000, 0x5122ec7900000000, |
| 8413 | 0xbfa6d5d800000000, 0x6e69361300000000, 0x80ed0fb200000000, |
| 8414 | 0xf366348a00000000, 0x1de20d2b00000000, 0x157043fa00000000, |
| 8415 | 0xfbf47a5b00000000, 0x887f416300000000, 0x66fb78c200000000, |
| 8416 | 0xd95dad1a00000000, 0x37d994bb00000000, 0x4452af8300000000, |
| 8417 | 0xaad6962200000000, 0xa244d8f300000000, 0x4cc0e15200000000, |
| 8418 | 0x3f4bda6a00000000, 0xd1cfe3cb00000000, 0xdcd26c2600000000, |
| 8419 | 0x3256558700000000, 0x41dd6ebf00000000, 0xaf59571e00000000, |
| 8420 | 0xa7cb19cf00000000, 0x494f206e00000000, 0x3ac41b5600000000, |
| 8421 | 0xd44022f700000000, 0x6be6f72f00000000, 0x8562ce8e00000000, |
| 8422 | 0xf6e9f5b600000000, 0x186dcc1700000000, 0x10ff82c600000000, |
| 8423 | 0xfe7bbb6700000000, 0x8df0805f00000000, 0x6374b9fe00000000, |
| 8424 | 0xb2bb5a3500000000, 0x5c3f639400000000, 0x2fb458ac00000000, |
| 8425 | 0xc130610d00000000, 0xc9a22fdc00000000, 0x2726167d00000000, |
| 8426 | 0x54ad2d4500000000, 0xba2914e400000000, 0x058fc13c00000000, |
| 8427 | 0xeb0bf89d00000000, 0x9880c3a500000000, 0x7604fa0400000000, |
| 8428 | 0x7e96b4d500000000, 0x90128d7400000000, 0xe399b64c00000000, |
| 8429 | 0x0d1d8fed00000000, 0xb8a5d94c00000000, 0x5621e0ed00000000, |
| 8430 | 0x25aadbd500000000, 0xcb2ee27400000000, 0xc3bcaca500000000, |
| 8431 | 0x2d38950400000000, 0x5eb3ae3c00000000, 0xb037979d00000000, |
| 8432 | 0x0f91424500000000, 0xe1157be400000000, 0x929e40dc00000000, |
| 8433 | 0x7c1a797d00000000, 0x748837ac00000000, 0x9a0c0e0d00000000, |
| 8434 | 0xe987353500000000, 0x07030c9400000000, 0xd6ccef5f00000000, |
| 8435 | 0x3848d6fe00000000, 0x4bc3edc600000000, 0xa547d46700000000, |
| 8436 | 0xadd59ab600000000, 0x4351a31700000000, 0x30da982f00000000, |
| 8437 | 0xde5ea18e00000000, 0x61f8745600000000, 0x8f7c4df700000000, |
| 8438 | 0xfcf776cf00000000, 0x12734f6e00000000, 0x1ae101bf00000000, |
| 8439 | 0xf465381e00000000, 0x87ee032600000000, 0x696a3a8700000000, |
| 8440 | 0x6477b56a00000000, 0x8af38ccb00000000, 0xf978b7f300000000, |
| 8441 | 0x17fc8e5200000000, 0x1f6ec08300000000, 0xf1eaf92200000000, |
| 8442 | 0x8261c21a00000000, 0x6ce5fbbb00000000, 0xd3432e6300000000, |
| 8443 | 0x3dc717c200000000, 0x4e4c2cfa00000000, 0xa0c8155b00000000, |
| 8444 | 0xa85a5b8a00000000, 0x46de622b00000000, 0x3555591300000000, |
| 8445 | 0xdbd160b200000000, 0x0a1e837900000000, 0xe49abad800000000, |
| 8446 | 0x971181e000000000, 0x7995b84100000000, 0x7107f69000000000, |
| 8447 | 0x9f83cf3100000000, 0xec08f40900000000, 0x028ccda800000000, |
| 8448 | 0xbd2a187000000000, 0x53ae21d100000000, 0x20251ae900000000, |
| 8449 | 0xcea1234800000000, 0xc6336d9900000000, 0x28b7543800000000, |
| 8450 | 0x5b3c6f0000000000, 0xb5b856a100000000, 0x704bb39900000000, |
| 8451 | 0x9ecf8a3800000000, 0xed44b10000000000, 0x03c088a100000000, |
| 8452 | 0x0b52c67000000000, 0xe5d6ffd100000000, 0x965dc4e900000000, |
| 8453 | 0x78d9fd4800000000, 0xc77f289000000000, 0x29fb113100000000, |
| 8454 | 0x5a702a0900000000, 0xb4f413a800000000, 0xbc665d7900000000, |
| 8455 | 0x52e264d800000000, 0x21695fe000000000, 0xcfed664100000000, |
| 8456 | 0x1e22858a00000000, 0xf0a6bc2b00000000, 0x832d871300000000, |
| 8457 | 0x6da9beb200000000, 0x653bf06300000000, 0x8bbfc9c200000000, |
| 8458 | 0xf834f2fa00000000, 0x16b0cb5b00000000, 0xa9161e8300000000, |
| 8459 | 0x4792272200000000, 0x34191c1a00000000, 0xda9d25bb00000000, |
| 8460 | 0xd20f6b6a00000000, 0x3c8b52cb00000000, 0x4f0069f300000000, |
| 8461 | 0xa184505200000000, 0xac99dfbf00000000, 0x421de61e00000000, |
| 8462 | 0x3196dd2600000000, 0xdf12e48700000000, 0xd780aa5600000000, |
| 8463 | 0x390493f700000000, 0x4a8fa8cf00000000, 0xa40b916e00000000, |
| 8464 | 0x1bad44b600000000, 0xf5297d1700000000, 0x86a2462f00000000, |
| 8465 | 0x68267f8e00000000, 0x60b4315f00000000, 0x8e3008fe00000000, |
| 8466 | 0xfdbb33c600000000, 0x133f0a6700000000, 0xc2f0e9ac00000000, |
| 8467 | 0x2c74d00d00000000, 0x5fffeb3500000000, 0xb17bd29400000000, |
| 8468 | 0xb9e99c4500000000, 0x576da5e400000000, 0x24e69edc00000000, |
| 8469 | 0xca62a77d00000000, 0x75c472a500000000, 0x9b404b0400000000, |
| 8470 | 0xe8cb703c00000000, 0x064f499d00000000, 0x0edd074c00000000, |
| 8471 | 0xe0593eed00000000, 0x93d205d500000000, 0x7d563c7400000000, |
| 8472 | 0xc8ee6ad500000000, 0x266a537400000000, 0x55e1684c00000000, |
| 8473 | 0xbb6551ed00000000, 0xb3f71f3c00000000, 0x5d73269d00000000, |
| 8474 | 0x2ef81da500000000, 0xc07c240400000000, 0x7fdaf1dc00000000, |
| 8475 | 0x915ec87d00000000, 0xe2d5f34500000000, 0x0c51cae400000000, |
| 8476 | 0x04c3843500000000, 0xea47bd9400000000, 0x99cc86ac00000000, |
| 8477 | 0x7748bf0d00000000, 0xa6875cc600000000, 0x4803656700000000, |
| 8478 | 0x3b885e5f00000000, 0xd50c67fe00000000, 0xdd9e292f00000000, |
| 8479 | 0x331a108e00000000, 0x40912bb600000000, 0xae15121700000000, |
| 8480 | 0x11b3c7cf00000000, 0xff37fe6e00000000, 0x8cbcc55600000000, |
| 8481 | 0x6238fcf700000000, 0x6aaab22600000000, 0x842e8b8700000000, |
| 8482 | 0xf7a5b0bf00000000, 0x1921891e00000000, 0x143c06f300000000, |
| 8483 | 0xfab83f5200000000, 0x8933046a00000000, 0x67b73dcb00000000, |
| 8484 | 0x6f25731a00000000, 0x81a14abb00000000, 0xf22a718300000000, |
| 8485 | 0x1cae482200000000, 0xa3089dfa00000000, 0x4d8ca45b00000000, |
| 8486 | 0x3e079f6300000000, 0xd083a6c200000000, 0xd811e81300000000, |
| 8487 | 0x3695d1b200000000, 0x451eea8a00000000, 0xab9ad32b00000000, |
| 8488 | 0x7a5530e000000000, 0x94d1094100000000, 0xe75a327900000000, |
| 8489 | 0x09de0bd800000000, 0x014c450900000000, 0xefc87ca800000000, |
| 8490 | 0x9c43479000000000, 0x72c77e3100000000, 0xcd61abe900000000, |
| 8491 | 0x23e5924800000000, 0x506ea97000000000, 0xbeea90d100000000, |
| 8492 | 0xb678de0000000000, 0x58fce7a100000000, 0x2b77dc9900000000, |
| 8493 | 0xc5f3e53800000000}, |
| 8494 | {0x0000000000000000, 0xfbf6134700000000, 0xf6ed278e00000000, |
| 8495 | 0x0d1b34c900000000, 0xaddd3ec700000000, 0x562b2d8000000000, |
| 8496 | 0x5b30194900000000, 0xa0c60a0e00000000, 0x1bbd0c5500000000, |
| 8497 | 0xe04b1f1200000000, 0xed502bdb00000000, 0x16a6389c00000000, |
| 8498 | 0xb660329200000000, 0x4d9621d500000000, 0x408d151c00000000, |
| 8499 | 0xbb7b065b00000000, 0x367a19aa00000000, 0xcd8c0aed00000000, |
| 8500 | 0xc0973e2400000000, 0x3b612d6300000000, 0x9ba7276d00000000, |
| 8501 | 0x6051342a00000000, 0x6d4a00e300000000, 0x96bc13a400000000, |
| 8502 | 0x2dc715ff00000000, 0xd63106b800000000, 0xdb2a327100000000, |
| 8503 | 0x20dc213600000000, 0x801a2b3800000000, 0x7bec387f00000000, |
| 8504 | 0x76f70cb600000000, 0x8d011ff100000000, 0x2df2438f00000000, |
| 8505 | 0xd60450c800000000, 0xdb1f640100000000, 0x20e9774600000000, |
| 8506 | 0x802f7d4800000000, 0x7bd96e0f00000000, 0x76c25ac600000000, |
| 8507 | 0x8d34498100000000, 0x364f4fda00000000, 0xcdb95c9d00000000, |
| 8508 | 0xc0a2685400000000, 0x3b547b1300000000, 0x9b92711d00000000, |
| 8509 | 0x6064625a00000000, 0x6d7f569300000000, 0x968945d400000000, |
| 8510 | 0x1b885a2500000000, 0xe07e496200000000, 0xed657dab00000000, |
| 8511 | 0x16936eec00000000, 0xb65564e200000000, 0x4da377a500000000, |
| 8512 | 0x40b8436c00000000, 0xbb4e502b00000000, 0x0035567000000000, |
| 8513 | 0xfbc3453700000000, 0xf6d871fe00000000, 0x0d2e62b900000000, |
| 8514 | 0xade868b700000000, 0x561e7bf000000000, 0x5b054f3900000000, |
| 8515 | 0xa0f35c7e00000000, 0x1be2f6c500000000, 0xe014e58200000000, |
| 8516 | 0xed0fd14b00000000, 0x16f9c20c00000000, 0xb63fc80200000000, |
| 8517 | 0x4dc9db4500000000, 0x40d2ef8c00000000, 0xbb24fccb00000000, |
| 8518 | 0x005ffa9000000000, 0xfba9e9d700000000, 0xf6b2dd1e00000000, |
| 8519 | 0x0d44ce5900000000, 0xad82c45700000000, 0x5674d71000000000, |
| 8520 | 0x5b6fe3d900000000, 0xa099f09e00000000, 0x2d98ef6f00000000, |
| 8521 | 0xd66efc2800000000, 0xdb75c8e100000000, 0x2083dba600000000, |
| 8522 | 0x8045d1a800000000, 0x7bb3c2ef00000000, 0x76a8f62600000000, |
| 8523 | 0x8d5ee56100000000, 0x3625e33a00000000, 0xcdd3f07d00000000, |
| 8524 | 0xc0c8c4b400000000, 0x3b3ed7f300000000, 0x9bf8ddfd00000000, |
| 8525 | 0x600eceba00000000, 0x6d15fa7300000000, 0x96e3e93400000000, |
| 8526 | 0x3610b54a00000000, 0xcde6a60d00000000, 0xc0fd92c400000000, |
| 8527 | 0x3b0b818300000000, 0x9bcd8b8d00000000, 0x603b98ca00000000, |
| 8528 | 0x6d20ac0300000000, 0x96d6bf4400000000, 0x2dadb91f00000000, |
| 8529 | 0xd65baa5800000000, 0xdb409e9100000000, 0x20b68dd600000000, |
| 8530 | 0x807087d800000000, 0x7b86949f00000000, 0x769da05600000000, |
| 8531 | 0x8d6bb31100000000, 0x006aace000000000, 0xfb9cbfa700000000, |
| 8532 | 0xf6878b6e00000000, 0x0d71982900000000, 0xadb7922700000000, |
| 8533 | 0x5641816000000000, 0x5b5ab5a900000000, 0xa0aca6ee00000000, |
| 8534 | 0x1bd7a0b500000000, 0xe021b3f200000000, 0xed3a873b00000000, |
| 8535 | 0x16cc947c00000000, 0xb60a9e7200000000, 0x4dfc8d3500000000, |
| 8536 | 0x40e7b9fc00000000, 0xbb11aabb00000000, 0x77c29c5000000000, |
| 8537 | 0x8c348f1700000000, 0x812fbbde00000000, 0x7ad9a89900000000, |
| 8538 | 0xda1fa29700000000, 0x21e9b1d000000000, 0x2cf2851900000000, |
| 8539 | 0xd704965e00000000, 0x6c7f900500000000, 0x9789834200000000, |
| 8540 | 0x9a92b78b00000000, 0x6164a4cc00000000, 0xc1a2aec200000000, |
| 8541 | 0x3a54bd8500000000, 0x374f894c00000000, 0xccb99a0b00000000, |
| 8542 | 0x41b885fa00000000, 0xba4e96bd00000000, 0xb755a27400000000, |
| 8543 | 0x4ca3b13300000000, 0xec65bb3d00000000, 0x1793a87a00000000, |
| 8544 | 0x1a889cb300000000, 0xe17e8ff400000000, 0x5a0589af00000000, |
| 8545 | 0xa1f39ae800000000, 0xace8ae2100000000, 0x571ebd6600000000, |
| 8546 | 0xf7d8b76800000000, 0x0c2ea42f00000000, 0x013590e600000000, |
| 8547 | 0xfac383a100000000, 0x5a30dfdf00000000, 0xa1c6cc9800000000, |
| 8548 | 0xacddf85100000000, 0x572beb1600000000, 0xf7ede11800000000, |
| 8549 | 0x0c1bf25f00000000, 0x0100c69600000000, 0xfaf6d5d100000000, |
| 8550 | 0x418dd38a00000000, 0xba7bc0cd00000000, 0xb760f40400000000, |
| 8551 | 0x4c96e74300000000, 0xec50ed4d00000000, 0x17a6fe0a00000000, |
| 8552 | 0x1abdcac300000000, 0xe14bd98400000000, 0x6c4ac67500000000, |
| 8553 | 0x97bcd53200000000, 0x9aa7e1fb00000000, 0x6151f2bc00000000, |
| 8554 | 0xc197f8b200000000, 0x3a61ebf500000000, 0x377adf3c00000000, |
| 8555 | 0xcc8ccc7b00000000, 0x77f7ca2000000000, 0x8c01d96700000000, |
| 8556 | 0x811aedae00000000, 0x7aecfee900000000, 0xda2af4e700000000, |
| 8557 | 0x21dce7a000000000, 0x2cc7d36900000000, 0xd731c02e00000000, |
| 8558 | 0x6c206a9500000000, 0x97d679d200000000, 0x9acd4d1b00000000, |
| 8559 | 0x613b5e5c00000000, 0xc1fd545200000000, 0x3a0b471500000000, |
| 8560 | 0x371073dc00000000, 0xcce6609b00000000, 0x779d66c000000000, |
| 8561 | 0x8c6b758700000000, 0x8170414e00000000, 0x7a86520900000000, |
| 8562 | 0xda40580700000000, 0x21b64b4000000000, 0x2cad7f8900000000, |
| 8563 | 0xd75b6cce00000000, 0x5a5a733f00000000, 0xa1ac607800000000, |
| 8564 | 0xacb754b100000000, 0x574147f600000000, 0xf7874df800000000, |
| 8565 | 0x0c715ebf00000000, 0x016a6a7600000000, 0xfa9c793100000000, |
| 8566 | 0x41e77f6a00000000, 0xba116c2d00000000, 0xb70a58e400000000, |
| 8567 | 0x4cfc4ba300000000, 0xec3a41ad00000000, 0x17cc52ea00000000, |
| 8568 | 0x1ad7662300000000, 0xe121756400000000, 0x41d2291a00000000, |
| 8569 | 0xba243a5d00000000, 0xb73f0e9400000000, 0x4cc91dd300000000, |
| 8570 | 0xec0f17dd00000000, 0x17f9049a00000000, 0x1ae2305300000000, |
| 8571 | 0xe114231400000000, 0x5a6f254f00000000, 0xa199360800000000, |
| 8572 | 0xac8202c100000000, 0x5774118600000000, 0xf7b21b8800000000, |
| 8573 | 0x0c4408cf00000000, 0x015f3c0600000000, 0xfaa92f4100000000, |
| 8574 | 0x77a830b000000000, 0x8c5e23f700000000, 0x8145173e00000000, |
| 8575 | 0x7ab3047900000000, 0xda750e7700000000, 0x21831d3000000000, |
| 8576 | 0x2c9829f900000000, 0xd76e3abe00000000, 0x6c153ce500000000, |
| 8577 | 0x97e32fa200000000, 0x9af81b6b00000000, 0x610e082c00000000, |
| 8578 | 0xc1c8022200000000, 0x3a3e116500000000, 0x372525ac00000000, |
| 8579 | 0xccd336eb00000000}, |
| 8580 | {0x0000000000000000, 0x6238282a00000000, 0xc470505400000000, |
| 8581 | 0xa648787e00000000, 0x88e1a0a800000000, 0xead9888200000000, |
| 8582 | 0x4c91f0fc00000000, 0x2ea9d8d600000000, 0x51c5308a00000000, |
| 8583 | 0x33fd18a000000000, 0x95b560de00000000, 0xf78d48f400000000, |
| 8584 | 0xd924902200000000, 0xbb1cb80800000000, 0x1d54c07600000000, |
| 8585 | 0x7f6ce85c00000000, 0xe38c10cf00000000, 0x81b438e500000000, |
| 8586 | 0x27fc409b00000000, 0x45c468b100000000, 0x6b6db06700000000, |
| 8587 | 0x0955984d00000000, 0xaf1de03300000000, 0xcd25c81900000000, |
| 8588 | 0xb249204500000000, 0xd071086f00000000, 0x7639701100000000, |
| 8589 | 0x1401583b00000000, 0x3aa880ed00000000, 0x5890a8c700000000, |
| 8590 | 0xfed8d0b900000000, 0x9ce0f89300000000, 0x871f504500000000, |
| 8591 | 0xe527786f00000000, 0x436f001100000000, 0x2157283b00000000, |
| 8592 | 0x0ffef0ed00000000, 0x6dc6d8c700000000, 0xcb8ea0b900000000, |
| 8593 | 0xa9b6889300000000, 0xd6da60cf00000000, 0xb4e248e500000000, |
| 8594 | 0x12aa309b00000000, 0x709218b100000000, 0x5e3bc06700000000, |
| 8595 | 0x3c03e84d00000000, 0x9a4b903300000000, 0xf873b81900000000, |
| 8596 | 0x6493408a00000000, 0x06ab68a000000000, 0xa0e310de00000000, |
| 8597 | 0xc2db38f400000000, 0xec72e02200000000, 0x8e4ac80800000000, |
| 8598 | 0x2802b07600000000, 0x4a3a985c00000000, 0x3556700000000000, |
| 8599 | 0x576e582a00000000, 0xf126205400000000, 0x931e087e00000000, |
| 8600 | 0xbdb7d0a800000000, 0xdf8ff88200000000, 0x79c780fc00000000, |
| 8601 | 0x1bffa8d600000000, 0x0e3fa08a00000000, 0x6c0788a000000000, |
| 8602 | 0xca4ff0de00000000, 0xa877d8f400000000, 0x86de002200000000, |
| 8603 | 0xe4e6280800000000, 0x42ae507600000000, 0x2096785c00000000, |
| 8604 | 0x5ffa900000000000, 0x3dc2b82a00000000, 0x9b8ac05400000000, |
| 8605 | 0xf9b2e87e00000000, 0xd71b30a800000000, 0xb523188200000000, |
| 8606 | 0x136b60fc00000000, 0x715348d600000000, 0xedb3b04500000000, |
| 8607 | 0x8f8b986f00000000, 0x29c3e01100000000, 0x4bfbc83b00000000, |
| 8608 | 0x655210ed00000000, 0x076a38c700000000, 0xa12240b900000000, |
| 8609 | 0xc31a689300000000, 0xbc7680cf00000000, 0xde4ea8e500000000, |
| 8610 | 0x7806d09b00000000, 0x1a3ef8b100000000, 0x3497206700000000, |
| 8611 | 0x56af084d00000000, 0xf0e7703300000000, 0x92df581900000000, |
| 8612 | 0x8920f0cf00000000, 0xeb18d8e500000000, 0x4d50a09b00000000, |
| 8613 | 0x2f6888b100000000, 0x01c1506700000000, 0x63f9784d00000000, |
| 8614 | 0xc5b1003300000000, 0xa789281900000000, 0xd8e5c04500000000, |
| 8615 | 0xbadde86f00000000, 0x1c95901100000000, 0x7eadb83b00000000, |
| 8616 | 0x500460ed00000000, 0x323c48c700000000, 0x947430b900000000, |
| 8617 | 0xf64c189300000000, 0x6aace00000000000, 0x0894c82a00000000, |
| 8618 | 0xaedcb05400000000, 0xcce4987e00000000, 0xe24d40a800000000, |
| 8619 | 0x8075688200000000, 0x263d10fc00000000, 0x440538d600000000, |
| 8620 | 0x3b69d08a00000000, 0x5951f8a000000000, 0xff1980de00000000, |
| 8621 | 0x9d21a8f400000000, 0xb388702200000000, 0xd1b0580800000000, |
| 8622 | 0x77f8207600000000, 0x15c0085c00000000, 0x5d7831ce00000000, |
| 8623 | 0x3f4019e400000000, 0x9908619a00000000, 0xfb3049b000000000, |
| 8624 | 0xd599916600000000, 0xb7a1b94c00000000, 0x11e9c13200000000, |
| 8625 | 0x73d1e91800000000, 0x0cbd014400000000, 0x6e85296e00000000, |
| 8626 | 0xc8cd511000000000, 0xaaf5793a00000000, 0x845ca1ec00000000, |
| 8627 | 0xe66489c600000000, 0x402cf1b800000000, 0x2214d99200000000, |
| 8628 | 0xbef4210100000000, 0xdccc092b00000000, 0x7a84715500000000, |
| 8629 | 0x18bc597f00000000, 0x361581a900000000, 0x542da98300000000, |
| 8630 | 0xf265d1fd00000000, 0x905df9d700000000, 0xef31118b00000000, |
| 8631 | 0x8d0939a100000000, 0x2b4141df00000000, 0x497969f500000000, |
| 8632 | 0x67d0b12300000000, 0x05e8990900000000, 0xa3a0e17700000000, |
| 8633 | 0xc198c95d00000000, 0xda67618b00000000, 0xb85f49a100000000, |
| 8634 | 0x1e1731df00000000, 0x7c2f19f500000000, 0x5286c12300000000, |
| 8635 | 0x30bee90900000000, 0x96f6917700000000, 0xf4ceb95d00000000, |
| 8636 | 0x8ba2510100000000, 0xe99a792b00000000, 0x4fd2015500000000, |
| 8637 | 0x2dea297f00000000, 0x0343f1a900000000, 0x617bd98300000000, |
| 8638 | 0xc733a1fd00000000, 0xa50b89d700000000, 0x39eb714400000000, |
| 8639 | 0x5bd3596e00000000, 0xfd9b211000000000, 0x9fa3093a00000000, |
| 8640 | 0xb10ad1ec00000000, 0xd332f9c600000000, 0x757a81b800000000, |
| 8641 | 0x1742a99200000000, 0x682e41ce00000000, 0x0a1669e400000000, |
| 8642 | 0xac5e119a00000000, 0xce6639b000000000, 0xe0cfe16600000000, |
| 8643 | 0x82f7c94c00000000, 0x24bfb13200000000, 0x4687991800000000, |
| 8644 | 0x5347914400000000, 0x317fb96e00000000, 0x9737c11000000000, |
| 8645 | 0xf50fe93a00000000, 0xdba631ec00000000, 0xb99e19c600000000, |
| 8646 | 0x1fd661b800000000, 0x7dee499200000000, 0x0282a1ce00000000, |
| 8647 | 0x60ba89e400000000, 0xc6f2f19a00000000, 0xa4cad9b000000000, |
| 8648 | 0x8a63016600000000, 0xe85b294c00000000, 0x4e13513200000000, |
| 8649 | 0x2c2b791800000000, 0xb0cb818b00000000, 0xd2f3a9a100000000, |
| 8650 | 0x74bbd1df00000000, 0x1683f9f500000000, 0x382a212300000000, |
| 8651 | 0x5a12090900000000, 0xfc5a717700000000, 0x9e62595d00000000, |
| 8652 | 0xe10eb10100000000, 0x8336992b00000000, 0x257ee15500000000, |
| 8653 | 0x4746c97f00000000, 0x69ef11a900000000, 0x0bd7398300000000, |
| 8654 | 0xad9f41fd00000000, 0xcfa769d700000000, 0xd458c10100000000, |
| 8655 | 0xb660e92b00000000, 0x1028915500000000, 0x7210b97f00000000, |
| 8656 | 0x5cb961a900000000, 0x3e81498300000000, 0x98c931fd00000000, |
| 8657 | 0xfaf119d700000000, 0x859df18b00000000, 0xe7a5d9a100000000, |
| 8658 | 0x41eda1df00000000, 0x23d589f500000000, 0x0d7c512300000000, |
| 8659 | 0x6f44790900000000, 0xc90c017700000000, 0xab34295d00000000, |
| 8660 | 0x37d4d1ce00000000, 0x55ecf9e400000000, 0xf3a4819a00000000, |
| 8661 | 0x919ca9b000000000, 0xbf35716600000000, 0xdd0d594c00000000, |
| 8662 | 0x7b45213200000000, 0x197d091800000000, 0x6611e14400000000, |
| 8663 | 0x0429c96e00000000, 0xa261b11000000000, 0xc059993a00000000, |
| 8664 | 0xeef041ec00000000, 0x8cc869c600000000, 0x2a8011b800000000, |
| 8665 | 0x48b8399200000000}, |
| 8666 | {0x0000000000000000, 0x4c2896a300000000, 0xd9565d9c00000000, |
| 8667 | 0x957ecb3f00000000, 0xf3abcbe300000000, 0xbf835d4000000000, |
| 8668 | 0x2afd967f00000000, 0x66d500dc00000000, 0xa751e61c00000000, |
| 8669 | 0xeb7970bf00000000, 0x7e07bb8000000000, 0x322f2d2300000000, |
| 8670 | 0x54fa2dff00000000, 0x18d2bb5c00000000, 0x8dac706300000000, |
| 8671 | 0xc184e6c000000000, 0x4ea3cc3900000000, 0x028b5a9a00000000, |
| 8672 | 0x97f591a500000000, 0xdbdd070600000000, 0xbd0807da00000000, |
| 8673 | 0xf120917900000000, 0x645e5a4600000000, 0x2876cce500000000, |
| 8674 | 0xe9f22a2500000000, 0xa5dabc8600000000, 0x30a477b900000000, |
| 8675 | 0x7c8ce11a00000000, 0x1a59e1c600000000, 0x5671776500000000, |
| 8676 | 0xc30fbc5a00000000, 0x8f272af900000000, 0x9c46997300000000, |
| 8677 | 0xd06e0fd000000000, 0x4510c4ef00000000, 0x0938524c00000000, |
| 8678 | 0x6fed529000000000, 0x23c5c43300000000, 0xb6bb0f0c00000000, |
| 8679 | 0xfa9399af00000000, 0x3b177f6f00000000, 0x773fe9cc00000000, |
| 8680 | 0xe24122f300000000, 0xae69b45000000000, 0xc8bcb48c00000000, |
| 8681 | 0x8494222f00000000, 0x11eae91000000000, 0x5dc27fb300000000, |
| 8682 | 0xd2e5554a00000000, 0x9ecdc3e900000000, 0x0bb308d600000000, |
| 8683 | 0x479b9e7500000000, 0x214e9ea900000000, 0x6d66080a00000000, |
| 8684 | 0xf818c33500000000, 0xb430559600000000, 0x75b4b35600000000, |
| 8685 | 0x399c25f500000000, 0xace2eeca00000000, 0xe0ca786900000000, |
| 8686 | 0x861f78b500000000, 0xca37ee1600000000, 0x5f49252900000000, |
| 8687 | 0x1361b38a00000000, 0x388d32e700000000, 0x74a5a44400000000, |
| 8688 | 0xe1db6f7b00000000, 0xadf3f9d800000000, 0xcb26f90400000000, |
| 8689 | 0x870e6fa700000000, 0x1270a49800000000, 0x5e58323b00000000, |
| 8690 | 0x9fdcd4fb00000000, 0xd3f4425800000000, 0x468a896700000000, |
| 8691 | 0x0aa21fc400000000, 0x6c771f1800000000, 0x205f89bb00000000, |
| 8692 | 0xb521428400000000, 0xf909d42700000000, 0x762efede00000000, |
| 8693 | 0x3a06687d00000000, 0xaf78a34200000000, 0xe35035e100000000, |
| 8694 | 0x8585353d00000000, 0xc9ada39e00000000, 0x5cd368a100000000, |
| 8695 | 0x10fbfe0200000000, 0xd17f18c200000000, 0x9d578e6100000000, |
| 8696 | 0x0829455e00000000, 0x4401d3fd00000000, 0x22d4d32100000000, |
| 8697 | 0x6efc458200000000, 0xfb828ebd00000000, 0xb7aa181e00000000, |
| 8698 | 0xa4cbab9400000000, 0xe8e33d3700000000, 0x7d9df60800000000, |
| 8699 | 0x31b560ab00000000, 0x5760607700000000, 0x1b48f6d400000000, |
| 8700 | 0x8e363deb00000000, 0xc21eab4800000000, 0x039a4d8800000000, |
| 8701 | 0x4fb2db2b00000000, 0xdacc101400000000, 0x96e486b700000000, |
| 8702 | 0xf031866b00000000, 0xbc1910c800000000, 0x2967dbf700000000, |
| 8703 | 0x654f4d5400000000, 0xea6867ad00000000, 0xa640f10e00000000, |
| 8704 | 0x333e3a3100000000, 0x7f16ac9200000000, 0x19c3ac4e00000000, |
| 8705 | 0x55eb3aed00000000, 0xc095f1d200000000, 0x8cbd677100000000, |
| 8706 | 0x4d3981b100000000, 0x0111171200000000, 0x946fdc2d00000000, |
| 8707 | 0xd8474a8e00000000, 0xbe924a5200000000, 0xf2badcf100000000, |
| 8708 | 0x67c417ce00000000, 0x2bec816d00000000, 0x311c141500000000, |
| 8709 | 0x7d3482b600000000, 0xe84a498900000000, 0xa462df2a00000000, |
| 8710 | 0xc2b7dff600000000, 0x8e9f495500000000, 0x1be1826a00000000, |
| 8711 | 0x57c914c900000000, 0x964df20900000000, 0xda6564aa00000000, |
| 8712 | 0x4f1baf9500000000, 0x0333393600000000, 0x65e639ea00000000, |
| 8713 | 0x29ceaf4900000000, 0xbcb0647600000000, 0xf098f2d500000000, |
| 8714 | 0x7fbfd82c00000000, 0x33974e8f00000000, 0xa6e985b000000000, |
| 8715 | 0xeac1131300000000, 0x8c1413cf00000000, 0xc03c856c00000000, |
| 8716 | 0x55424e5300000000, 0x196ad8f000000000, 0xd8ee3e3000000000, |
| 8717 | 0x94c6a89300000000, 0x01b863ac00000000, 0x4d90f50f00000000, |
| 8718 | 0x2b45f5d300000000, 0x676d637000000000, 0xf213a84f00000000, |
| 8719 | 0xbe3b3eec00000000, 0xad5a8d6600000000, 0xe1721bc500000000, |
| 8720 | 0x740cd0fa00000000, 0x3824465900000000, 0x5ef1468500000000, |
| 8721 | 0x12d9d02600000000, 0x87a71b1900000000, 0xcb8f8dba00000000, |
| 8722 | 0x0a0b6b7a00000000, 0x4623fdd900000000, 0xd35d36e600000000, |
| 8723 | 0x9f75a04500000000, 0xf9a0a09900000000, 0xb588363a00000000, |
| 8724 | 0x20f6fd0500000000, 0x6cde6ba600000000, 0xe3f9415f00000000, |
| 8725 | 0xafd1d7fc00000000, 0x3aaf1cc300000000, 0x76878a6000000000, |
| 8726 | 0x10528abc00000000, 0x5c7a1c1f00000000, 0xc904d72000000000, |
| 8727 | 0x852c418300000000, 0x44a8a74300000000, 0x088031e000000000, |
| 8728 | 0x9dfefadf00000000, 0xd1d66c7c00000000, 0xb7036ca000000000, |
| 8729 | 0xfb2bfa0300000000, 0x6e55313c00000000, 0x227da79f00000000, |
| 8730 | 0x099126f200000000, 0x45b9b05100000000, 0xd0c77b6e00000000, |
| 8731 | 0x9cefedcd00000000, 0xfa3aed1100000000, 0xb6127bb200000000, |
| 8732 | 0x236cb08d00000000, 0x6f44262e00000000, 0xaec0c0ee00000000, |
| 8733 | 0xe2e8564d00000000, 0x77969d7200000000, 0x3bbe0bd100000000, |
| 8734 | 0x5d6b0b0d00000000, 0x11439dae00000000, 0x843d569100000000, |
| 8735 | 0xc815c03200000000, 0x4732eacb00000000, 0x0b1a7c6800000000, |
| 8736 | 0x9e64b75700000000, 0xd24c21f400000000, 0xb499212800000000, |
| 8737 | 0xf8b1b78b00000000, 0x6dcf7cb400000000, 0x21e7ea1700000000, |
| 8738 | 0xe0630cd700000000, 0xac4b9a7400000000, 0x3935514b00000000, |
| 8739 | 0x751dc7e800000000, 0x13c8c73400000000, 0x5fe0519700000000, |
| 8740 | 0xca9e9aa800000000, 0x86b60c0b00000000, 0x95d7bf8100000000, |
| 8741 | 0xd9ff292200000000, 0x4c81e21d00000000, 0x00a974be00000000, |
| 8742 | 0x667c746200000000, 0x2a54e2c100000000, 0xbf2a29fe00000000, |
| 8743 | 0xf302bf5d00000000, 0x3286599d00000000, 0x7eaecf3e00000000, |
| 8744 | 0xebd0040100000000, 0xa7f892a200000000, 0xc12d927e00000000, |
| 8745 | 0x8d0504dd00000000, 0x187bcfe200000000, 0x5453594100000000, |
| 8746 | 0xdb7473b800000000, 0x975ce51b00000000, 0x02222e2400000000, |
| 8747 | 0x4e0ab88700000000, 0x28dfb85b00000000, 0x64f72ef800000000, |
| 8748 | 0xf189e5c700000000, 0xbda1736400000000, 0x7c2595a400000000, |
| 8749 | 0x300d030700000000, 0xa573c83800000000, 0xe95b5e9b00000000, |
| 8750 | 0x8f8e5e4700000000, 0xc3a6c8e400000000, 0x56d803db00000000, |
| 8751 | 0x1af0957800000000}, |
| 8752 | {0x0000000000000000, 0x939bc97f00000000, 0x263793ff00000000, |
| 8753 | 0xb5ac5a8000000000, 0x0d68572400000000, 0x9ef39e5b00000000, |
| 8754 | 0x2b5fc4db00000000, 0xb8c40da400000000, 0x1ad0ae4800000000, |
| 8755 | 0x894b673700000000, 0x3ce73db700000000, 0xaf7cf4c800000000, |
| 8756 | 0x17b8f96c00000000, 0x8423301300000000, 0x318f6a9300000000, |
| 8757 | 0xa214a3ec00000000, 0x34a05d9100000000, 0xa73b94ee00000000, |
| 8758 | 0x1297ce6e00000000, 0x810c071100000000, 0x39c80ab500000000, |
| 8759 | 0xaa53c3ca00000000, 0x1fff994a00000000, 0x8c64503500000000, |
| 8760 | 0x2e70f3d900000000, 0xbdeb3aa600000000, 0x0847602600000000, |
| 8761 | 0x9bdca95900000000, 0x2318a4fd00000000, 0xb0836d8200000000, |
| 8762 | 0x052f370200000000, 0x96b4fe7d00000000, 0x2946caf900000000, |
| 8763 | 0xbadd038600000000, 0x0f71590600000000, 0x9cea907900000000, |
| 8764 | 0x242e9ddd00000000, 0xb7b554a200000000, 0x02190e2200000000, |
| 8765 | 0x9182c75d00000000, 0x339664b100000000, 0xa00dadce00000000, |
| 8766 | 0x15a1f74e00000000, 0x863a3e3100000000, 0x3efe339500000000, |
| 8767 | 0xad65faea00000000, 0x18c9a06a00000000, 0x8b52691500000000, |
| 8768 | 0x1de6976800000000, 0x8e7d5e1700000000, 0x3bd1049700000000, |
| 8769 | 0xa84acde800000000, 0x108ec04c00000000, 0x8315093300000000, |
| 8770 | 0x36b953b300000000, 0xa5229acc00000000, 0x0736392000000000, |
| 8771 | 0x94adf05f00000000, 0x2101aadf00000000, 0xb29a63a000000000, |
| 8772 | 0x0a5e6e0400000000, 0x99c5a77b00000000, 0x2c69fdfb00000000, |
| 8773 | 0xbff2348400000000, 0x138ae52800000000, 0x80112c5700000000, |
| 8774 | 0x35bd76d700000000, 0xa626bfa800000000, 0x1ee2b20c00000000, |
| 8775 | 0x8d797b7300000000, 0x38d521f300000000, 0xab4ee88c00000000, |
| 8776 | 0x095a4b6000000000, 0x9ac1821f00000000, 0x2f6dd89f00000000, |
| 8777 | 0xbcf611e000000000, 0x04321c4400000000, 0x97a9d53b00000000, |
| 8778 | 0x22058fbb00000000, 0xb19e46c400000000, 0x272ab8b900000000, |
| 8779 | 0xb4b171c600000000, 0x011d2b4600000000, 0x9286e23900000000, |
| 8780 | 0x2a42ef9d00000000, 0xb9d926e200000000, 0x0c757c6200000000, |
| 8781 | 0x9feeb51d00000000, 0x3dfa16f100000000, 0xae61df8e00000000, |
| 8782 | 0x1bcd850e00000000, 0x88564c7100000000, 0x309241d500000000, |
| 8783 | 0xa30988aa00000000, 0x16a5d22a00000000, 0x853e1b5500000000, |
| 8784 | 0x3acc2fd100000000, 0xa957e6ae00000000, 0x1cfbbc2e00000000, |
| 8785 | 0x8f60755100000000, 0x37a478f500000000, 0xa43fb18a00000000, |
| 8786 | 0x1193eb0a00000000, 0x8208227500000000, 0x201c819900000000, |
| 8787 | 0xb38748e600000000, 0x062b126600000000, 0x95b0db1900000000, |
| 8788 | 0x2d74d6bd00000000, 0xbeef1fc200000000, 0x0b43454200000000, |
| 8789 | 0x98d88c3d00000000, 0x0e6c724000000000, 0x9df7bb3f00000000, |
| 8790 | 0x285be1bf00000000, 0xbbc028c000000000, 0x0304256400000000, |
| 8791 | 0x909fec1b00000000, 0x2533b69b00000000, 0xb6a87fe400000000, |
| 8792 | 0x14bcdc0800000000, 0x8727157700000000, 0x328b4ff700000000, |
| 8793 | 0xa110868800000000, 0x19d48b2c00000000, 0x8a4f425300000000, |
| 8794 | 0x3fe318d300000000, 0xac78d1ac00000000, 0x2614cb5100000000, |
| 8795 | 0xb58f022e00000000, 0x002358ae00000000, 0x93b891d100000000, |
| 8796 | 0x2b7c9c7500000000, 0xb8e7550a00000000, 0x0d4b0f8a00000000, |
| 8797 | 0x9ed0c6f500000000, 0x3cc4651900000000, 0xaf5fac6600000000, |
| 8798 | 0x1af3f6e600000000, 0x89683f9900000000, 0x31ac323d00000000, |
| 8799 | 0xa237fb4200000000, 0x179ba1c200000000, 0x840068bd00000000, |
| 8800 | 0x12b496c000000000, 0x812f5fbf00000000, 0x3483053f00000000, |
| 8801 | 0xa718cc4000000000, 0x1fdcc1e400000000, 0x8c47089b00000000, |
| 8802 | 0x39eb521b00000000, 0xaa709b6400000000, 0x0864388800000000, |
| 8803 | 0x9bfff1f700000000, 0x2e53ab7700000000, 0xbdc8620800000000, |
| 8804 | 0x050c6fac00000000, 0x9697a6d300000000, 0x233bfc5300000000, |
| 8805 | 0xb0a0352c00000000, 0x0f5201a800000000, 0x9cc9c8d700000000, |
| 8806 | 0x2965925700000000, 0xbafe5b2800000000, 0x023a568c00000000, |
| 8807 | 0x91a19ff300000000, 0x240dc57300000000, 0xb7960c0c00000000, |
| 8808 | 0x1582afe000000000, 0x8619669f00000000, 0x33b53c1f00000000, |
| 8809 | 0xa02ef56000000000, 0x18eaf8c400000000, 0x8b7131bb00000000, |
| 8810 | 0x3edd6b3b00000000, 0xad46a24400000000, 0x3bf25c3900000000, |
| 8811 | 0xa869954600000000, 0x1dc5cfc600000000, 0x8e5e06b900000000, |
| 8812 | 0x369a0b1d00000000, 0xa501c26200000000, 0x10ad98e200000000, |
| 8813 | 0x8336519d00000000, 0x2122f27100000000, 0xb2b93b0e00000000, |
| 8814 | 0x0715618e00000000, 0x948ea8f100000000, 0x2c4aa55500000000, |
| 8815 | 0xbfd16c2a00000000, 0x0a7d36aa00000000, 0x99e6ffd500000000, |
| 8816 | 0x359e2e7900000000, 0xa605e70600000000, 0x13a9bd8600000000, |
| 8817 | 0x803274f900000000, 0x38f6795d00000000, 0xab6db02200000000, |
| 8818 | 0x1ec1eaa200000000, 0x8d5a23dd00000000, 0x2f4e803100000000, |
| 8819 | 0xbcd5494e00000000, 0x097913ce00000000, 0x9ae2dab100000000, |
| 8820 | 0x2226d71500000000, 0xb1bd1e6a00000000, 0x041144ea00000000, |
| 8821 | 0x978a8d9500000000, 0x013e73e800000000, 0x92a5ba9700000000, |
| 8822 | 0x2709e01700000000, 0xb492296800000000, 0x0c5624cc00000000, |
| 8823 | 0x9fcdedb300000000, 0x2a61b73300000000, 0xb9fa7e4c00000000, |
| 8824 | 0x1beedda000000000, 0x887514df00000000, 0x3dd94e5f00000000, |
| 8825 | 0xae42872000000000, 0x16868a8400000000, 0x851d43fb00000000, |
| 8826 | 0x30b1197b00000000, 0xa32ad00400000000, 0x1cd8e48000000000, |
| 8827 | 0x8f432dff00000000, 0x3aef777f00000000, 0xa974be0000000000, |
| 8828 | 0x11b0b3a400000000, 0x822b7adb00000000, 0x3787205b00000000, |
| 8829 | 0xa41ce92400000000, 0x06084ac800000000, 0x959383b700000000, |
| 8830 | 0x203fd93700000000, 0xb3a4104800000000, 0x0b601dec00000000, |
| 8831 | 0x98fbd49300000000, 0x2d578e1300000000, 0xbecc476c00000000, |
| 8832 | 0x2878b91100000000, 0xbbe3706e00000000, 0x0e4f2aee00000000, |
| 8833 | 0x9dd4e39100000000, 0x2510ee3500000000, 0xb68b274a00000000, |
| 8834 | 0x03277dca00000000, 0x90bcb4b500000000, 0x32a8175900000000, |
| 8835 | 0xa133de2600000000, 0x149f84a600000000, 0x87044dd900000000, |
| 8836 | 0x3fc0407d00000000, 0xac5b890200000000, 0x19f7d38200000000, |
| 8837 | 0x8a6c1afd00000000}, |
| 8838 | {0x0000000000000000, 0x650b796900000000, 0xca16f2d200000000, |
| 8839 | 0xaf1d8bbb00000000, 0xd52b957e00000000, 0xb020ec1700000000, |
| 8840 | 0x1f3d67ac00000000, 0x7a361ec500000000, 0xaa572afd00000000, |
| 8841 | 0xcf5c539400000000, 0x6041d82f00000000, 0x054aa14600000000, |
| 8842 | 0x7f7cbf8300000000, 0x1a77c6ea00000000, 0xb56a4d5100000000, |
| 8843 | 0xd061343800000000, 0x15a9252100000000, 0x70a25c4800000000, |
| 8844 | 0xdfbfd7f300000000, 0xbab4ae9a00000000, 0xc082b05f00000000, |
| 8845 | 0xa589c93600000000, 0x0a94428d00000000, 0x6f9f3be400000000, |
| 8846 | 0xbffe0fdc00000000, 0xdaf576b500000000, 0x75e8fd0e00000000, |
| 8847 | 0x10e3846700000000, 0x6ad59aa200000000, 0x0fdee3cb00000000, |
| 8848 | 0xa0c3687000000000, 0xc5c8111900000000, 0x2a524b4200000000, |
| 8849 | 0x4f59322b00000000, 0xe044b99000000000, 0x854fc0f900000000, |
| 8850 | 0xff79de3c00000000, 0x9a72a75500000000, 0x356f2cee00000000, |
| 8851 | 0x5064558700000000, 0x800561bf00000000, 0xe50e18d600000000, |
| 8852 | 0x4a13936d00000000, 0x2f18ea0400000000, 0x552ef4c100000000, |
| 8853 | 0x30258da800000000, 0x9f38061300000000, 0xfa337f7a00000000, |
| 8854 | 0x3ffb6e6300000000, 0x5af0170a00000000, 0xf5ed9cb100000000, |
| 8855 | 0x90e6e5d800000000, 0xead0fb1d00000000, 0x8fdb827400000000, |
| 8856 | 0x20c609cf00000000, 0x45cd70a600000000, 0x95ac449e00000000, |
| 8857 | 0xf0a73df700000000, 0x5fbab64c00000000, 0x3ab1cf2500000000, |
| 8858 | 0x4087d1e000000000, 0x258ca88900000000, 0x8a91233200000000, |
| 8859 | 0xef9a5a5b00000000, 0x54a4968400000000, 0x31afefed00000000, |
| 8860 | 0x9eb2645600000000, 0xfbb91d3f00000000, 0x818f03fa00000000, |
| 8861 | 0xe4847a9300000000, 0x4b99f12800000000, 0x2e92884100000000, |
| 8862 | 0xfef3bc7900000000, 0x9bf8c51000000000, 0x34e54eab00000000, |
| 8863 | 0x51ee37c200000000, 0x2bd8290700000000, 0x4ed3506e00000000, |
| 8864 | 0xe1cedbd500000000, 0x84c5a2bc00000000, 0x410db3a500000000, |
| 8865 | 0x2406cacc00000000, 0x8b1b417700000000, 0xee10381e00000000, |
| 8866 | 0x942626db00000000, 0xf12d5fb200000000, 0x5e30d40900000000, |
| 8867 | 0x3b3bad6000000000, 0xeb5a995800000000, 0x8e51e03100000000, |
| 8868 | 0x214c6b8a00000000, 0x444712e300000000, 0x3e710c2600000000, |
| 8869 | 0x5b7a754f00000000, 0xf467fef400000000, 0x916c879d00000000, |
| 8870 | 0x7ef6ddc600000000, 0x1bfda4af00000000, 0xb4e02f1400000000, |
| 8871 | 0xd1eb567d00000000, 0xabdd48b800000000, 0xced631d100000000, |
| 8872 | 0x61cbba6a00000000, 0x04c0c30300000000, 0xd4a1f73b00000000, |
| 8873 | 0xb1aa8e5200000000, 0x1eb705e900000000, 0x7bbc7c8000000000, |
| 8874 | 0x018a624500000000, 0x64811b2c00000000, 0xcb9c909700000000, |
| 8875 | 0xae97e9fe00000000, 0x6b5ff8e700000000, 0x0e54818e00000000, |
| 8876 | 0xa1490a3500000000, 0xc442735c00000000, 0xbe746d9900000000, |
| 8877 | 0xdb7f14f000000000, 0x74629f4b00000000, 0x1169e62200000000, |
| 8878 | 0xc108d21a00000000, 0xa403ab7300000000, 0x0b1e20c800000000, |
| 8879 | 0x6e1559a100000000, 0x1423476400000000, 0x71283e0d00000000, |
| 8880 | 0xde35b5b600000000, 0xbb3eccdf00000000, 0xe94e5cd200000000, |
| 8881 | 0x8c4525bb00000000, 0x2358ae0000000000, 0x4653d76900000000, |
| 8882 | 0x3c65c9ac00000000, 0x596eb0c500000000, 0xf6733b7e00000000, |
| 8883 | 0x9378421700000000, 0x4319762f00000000, 0x26120f4600000000, |
| 8884 | 0x890f84fd00000000, 0xec04fd9400000000, 0x9632e35100000000, |
| 8885 | 0xf3399a3800000000, 0x5c24118300000000, 0x392f68ea00000000, |
| 8886 | 0xfce779f300000000, 0x99ec009a00000000, 0x36f18b2100000000, |
| 8887 | 0x53faf24800000000, 0x29ccec8d00000000, 0x4cc795e400000000, |
| 8888 | 0xe3da1e5f00000000, 0x86d1673600000000, 0x56b0530e00000000, |
| 8889 | 0x33bb2a6700000000, 0x9ca6a1dc00000000, 0xf9add8b500000000, |
| 8890 | 0x839bc67000000000, 0xe690bf1900000000, 0x498d34a200000000, |
| 8891 | 0x2c864dcb00000000, 0xc31c179000000000, 0xa6176ef900000000, |
| 8892 | 0x090ae54200000000, 0x6c019c2b00000000, 0x163782ee00000000, |
| 8893 | 0x733cfb8700000000, 0xdc21703c00000000, 0xb92a095500000000, |
| 8894 | 0x694b3d6d00000000, 0x0c40440400000000, 0xa35dcfbf00000000, |
| 8895 | 0xc656b6d600000000, 0xbc60a81300000000, 0xd96bd17a00000000, |
| 8896 | 0x76765ac100000000, 0x137d23a800000000, 0xd6b532b100000000, |
| 8897 | 0xb3be4bd800000000, 0x1ca3c06300000000, 0x79a8b90a00000000, |
| 8898 | 0x039ea7cf00000000, 0x6695dea600000000, 0xc988551d00000000, |
| 8899 | 0xac832c7400000000, 0x7ce2184c00000000, 0x19e9612500000000, |
| 8900 | 0xb6f4ea9e00000000, 0xd3ff93f700000000, 0xa9c98d3200000000, |
| 8901 | 0xccc2f45b00000000, 0x63df7fe000000000, 0x06d4068900000000, |
| 8902 | 0xbdeaca5600000000, 0xd8e1b33f00000000, 0x77fc388400000000, |
| 8903 | 0x12f741ed00000000, 0x68c15f2800000000, 0x0dca264100000000, |
| 8904 | 0xa2d7adfa00000000, 0xc7dcd49300000000, 0x17bde0ab00000000, |
| 8905 | 0x72b699c200000000, 0xddab127900000000, 0xb8a06b1000000000, |
| 8906 | 0xc29675d500000000, 0xa79d0cbc00000000, 0x0880870700000000, |
| 8907 | 0x6d8bfe6e00000000, 0xa843ef7700000000, 0xcd48961e00000000, |
| 8908 | 0x62551da500000000, 0x075e64cc00000000, 0x7d687a0900000000, |
| 8909 | 0x1863036000000000, 0xb77e88db00000000, 0xd275f1b200000000, |
| 8910 | 0x0214c58a00000000, 0x671fbce300000000, 0xc802375800000000, |
| 8911 | 0xad094e3100000000, 0xd73f50f400000000, 0xb234299d00000000, |
| 8912 | 0x1d29a22600000000, 0x7822db4f00000000, 0x97b8811400000000, |
| 8913 | 0xf2b3f87d00000000, 0x5dae73c600000000, 0x38a50aaf00000000, |
| 8914 | 0x4293146a00000000, 0x27986d0300000000, 0x8885e6b800000000, |
| 8915 | 0xed8e9fd100000000, 0x3defabe900000000, 0x58e4d28000000000, |
| 8916 | 0xf7f9593b00000000, 0x92f2205200000000, 0xe8c43e9700000000, |
| 8917 | 0x8dcf47fe00000000, 0x22d2cc4500000000, 0x47d9b52c00000000, |
| 8918 | 0x8211a43500000000, 0xe71add5c00000000, 0x480756e700000000, |
| 8919 | 0x2d0c2f8e00000000, 0x573a314b00000000, 0x3231482200000000, |
| 8920 | 0x9d2cc39900000000, 0xf827baf000000000, 0x28468ec800000000, |
| 8921 | 0x4d4df7a100000000, 0xe2507c1a00000000, 0x875b057300000000, |
| 8922 | 0xfd6d1bb600000000, 0x986662df00000000, 0x377be96400000000, |
| 8923 | 0x5270900d00000000}, |
| 8924 | {0x0000000000000000, 0xdcecb13d00000000, 0xb8d9637b00000000, |
| 8925 | 0x6435d24600000000, 0x70b3c7f600000000, 0xac5f76cb00000000, |
| 8926 | 0xc86aa48d00000000, 0x148615b000000000, 0xa160fe3600000000, |
| 8927 | 0x7d8c4f0b00000000, 0x19b99d4d00000000, 0xc5552c7000000000, |
| 8928 | 0xd1d339c000000000, 0x0d3f88fd00000000, 0x690a5abb00000000, |
| 8929 | 0xb5e6eb8600000000, 0x42c1fc6d00000000, 0x9e2d4d5000000000, |
| 8930 | 0xfa189f1600000000, 0x26f42e2b00000000, 0x32723b9b00000000, |
| 8931 | 0xee9e8aa600000000, 0x8aab58e000000000, 0x5647e9dd00000000, |
| 8932 | 0xe3a1025b00000000, 0x3f4db36600000000, 0x5b78612000000000, |
| 8933 | 0x8794d01d00000000, 0x9312c5ad00000000, 0x4ffe749000000000, |
| 8934 | 0x2bcba6d600000000, 0xf72717eb00000000, 0x8482f9db00000000, |
| 8935 | 0x586e48e600000000, 0x3c5b9aa000000000, 0xe0b72b9d00000000, |
| 8936 | 0xf4313e2d00000000, 0x28dd8f1000000000, 0x4ce85d5600000000, |
| 8937 | 0x9004ec6b00000000, 0x25e207ed00000000, 0xf90eb6d000000000, |
| 8938 | 0x9d3b649600000000, 0x41d7d5ab00000000, 0x5551c01b00000000, |
| 8939 | 0x89bd712600000000, 0xed88a36000000000, 0x3164125d00000000, |
| 8940 | 0xc64305b600000000, 0x1aafb48b00000000, 0x7e9a66cd00000000, |
| 8941 | 0xa276d7f000000000, 0xb6f0c24000000000, 0x6a1c737d00000000, |
| 8942 | 0x0e29a13b00000000, 0xd2c5100600000000, 0x6723fb8000000000, |
| 8943 | 0xbbcf4abd00000000, 0xdffa98fb00000000, 0x031629c600000000, |
| 8944 | 0x17903c7600000000, 0xcb7c8d4b00000000, 0xaf495f0d00000000, |
| 8945 | 0x73a5ee3000000000, 0x4903826c00000000, 0x95ef335100000000, |
| 8946 | 0xf1dae11700000000, 0x2d36502a00000000, 0x39b0459a00000000, |
| 8947 | 0xe55cf4a700000000, 0x816926e100000000, 0x5d8597dc00000000, |
| 8948 | 0xe8637c5a00000000, 0x348fcd6700000000, 0x50ba1f2100000000, |
| 8949 | 0x8c56ae1c00000000, 0x98d0bbac00000000, 0x443c0a9100000000, |
| 8950 | 0x2009d8d700000000, 0xfce569ea00000000, 0x0bc27e0100000000, |
| 8951 | 0xd72ecf3c00000000, 0xb31b1d7a00000000, 0x6ff7ac4700000000, |
| 8952 | 0x7b71b9f700000000, 0xa79d08ca00000000, 0xc3a8da8c00000000, |
| 8953 | 0x1f446bb100000000, 0xaaa2803700000000, 0x764e310a00000000, |
| 8954 | 0x127be34c00000000, 0xce97527100000000, 0xda1147c100000000, |
| 8955 | 0x06fdf6fc00000000, 0x62c824ba00000000, 0xbe24958700000000, |
| 8956 | 0xcd817bb700000000, 0x116dca8a00000000, 0x755818cc00000000, |
| 8957 | 0xa9b4a9f100000000, 0xbd32bc4100000000, 0x61de0d7c00000000, |
| 8958 | 0x05ebdf3a00000000, 0xd9076e0700000000, 0x6ce1858100000000, |
| 8959 | 0xb00d34bc00000000, 0xd438e6fa00000000, 0x08d457c700000000, |
| 8960 | 0x1c52427700000000, 0xc0bef34a00000000, 0xa48b210c00000000, |
| 8961 | 0x7867903100000000, 0x8f4087da00000000, 0x53ac36e700000000, |
| 8962 | 0x3799e4a100000000, 0xeb75559c00000000, 0xfff3402c00000000, |
| 8963 | 0x231ff11100000000, 0x472a235700000000, 0x9bc6926a00000000, |
| 8964 | 0x2e2079ec00000000, 0xf2ccc8d100000000, 0x96f91a9700000000, |
| 8965 | 0x4a15abaa00000000, 0x5e93be1a00000000, 0x827f0f2700000000, |
| 8966 | 0xe64add6100000000, 0x3aa66c5c00000000, 0x920604d900000000, |
| 8967 | 0x4eeab5e400000000, 0x2adf67a200000000, 0xf633d69f00000000, |
| 8968 | 0xe2b5c32f00000000, 0x3e59721200000000, 0x5a6ca05400000000, |
| 8969 | 0x8680116900000000, 0x3366faef00000000, 0xef8a4bd200000000, |
| 8970 | 0x8bbf999400000000, 0x575328a900000000, 0x43d53d1900000000, |
| 8971 | 0x9f398c2400000000, 0xfb0c5e6200000000, 0x27e0ef5f00000000, |
| 8972 | 0xd0c7f8b400000000, 0x0c2b498900000000, 0x681e9bcf00000000, |
| 8973 | 0xb4f22af200000000, 0xa0743f4200000000, 0x7c988e7f00000000, |
| 8974 | 0x18ad5c3900000000, 0xc441ed0400000000, 0x71a7068200000000, |
| 8975 | 0xad4bb7bf00000000, 0xc97e65f900000000, 0x1592d4c400000000, |
| 8976 | 0x0114c17400000000, 0xddf8704900000000, 0xb9cda20f00000000, |
| 8977 | 0x6521133200000000, 0x1684fd0200000000, 0xca684c3f00000000, |
| 8978 | 0xae5d9e7900000000, 0x72b12f4400000000, 0x66373af400000000, |
| 8979 | 0xbadb8bc900000000, 0xdeee598f00000000, 0x0202e8b200000000, |
| 8980 | 0xb7e4033400000000, 0x6b08b20900000000, 0x0f3d604f00000000, |
| 8981 | 0xd3d1d17200000000, 0xc757c4c200000000, 0x1bbb75ff00000000, |
| 8982 | 0x7f8ea7b900000000, 0xa362168400000000, 0x5445016f00000000, |
| 8983 | 0x88a9b05200000000, 0xec9c621400000000, 0x3070d32900000000, |
| 8984 | 0x24f6c69900000000, 0xf81a77a400000000, 0x9c2fa5e200000000, |
| 8985 | 0x40c314df00000000, 0xf525ff5900000000, 0x29c94e6400000000, |
| 8986 | 0x4dfc9c2200000000, 0x91102d1f00000000, 0x859638af00000000, |
| 8987 | 0x597a899200000000, 0x3d4f5bd400000000, 0xe1a3eae900000000, |
| 8988 | 0xdb0586b500000000, 0x07e9378800000000, 0x63dce5ce00000000, |
| 8989 | 0xbf3054f300000000, 0xabb6414300000000, 0x775af07e00000000, |
| 8990 | 0x136f223800000000, 0xcf83930500000000, 0x7a65788300000000, |
| 8991 | 0xa689c9be00000000, 0xc2bc1bf800000000, 0x1e50aac500000000, |
| 8992 | 0x0ad6bf7500000000, 0xd63a0e4800000000, 0xb20fdc0e00000000, |
| 8993 | 0x6ee36d3300000000, 0x99c47ad800000000, 0x4528cbe500000000, |
| 8994 | 0x211d19a300000000, 0xfdf1a89e00000000, 0xe977bd2e00000000, |
| 8995 | 0x359b0c1300000000, 0x51aede5500000000, 0x8d426f6800000000, |
| 8996 | 0x38a484ee00000000, 0xe44835d300000000, 0x807de79500000000, |
| 8997 | 0x5c9156a800000000, 0x4817431800000000, 0x94fbf22500000000, |
| 8998 | 0xf0ce206300000000, 0x2c22915e00000000, 0x5f877f6e00000000, |
| 8999 | 0x836bce5300000000, 0xe75e1c1500000000, 0x3bb2ad2800000000, |
| 9000 | 0x2f34b89800000000, 0xf3d809a500000000, 0x97eddbe300000000, |
| 9001 | 0x4b016ade00000000, 0xfee7815800000000, 0x220b306500000000, |
| 9002 | 0x463ee22300000000, 0x9ad2531e00000000, 0x8e5446ae00000000, |
| 9003 | 0x52b8f79300000000, 0x368d25d500000000, 0xea6194e800000000, |
| 9004 | 0x1d46830300000000, 0xc1aa323e00000000, 0xa59fe07800000000, |
| 9005 | 0x7973514500000000, 0x6df544f500000000, 0xb119f5c800000000, |
| 9006 | 0xd52c278e00000000, 0x09c096b300000000, 0xbc267d3500000000, |
| 9007 | 0x60cacc0800000000, 0x04ff1e4e00000000, 0xd813af7300000000, |
| 9008 | 0xcc95bac300000000, 0x10790bfe00000000, 0x744cd9b800000000, |
| 9009 | 0xa8a0688500000000}}; |
| 9010 | |
| 9011 | #else /* W == 4 */ |
| 9012 | |
| 9013 | local const z_crc_t FAR crc_braid_table[][256] = { |
| 9014 | {0x00000000, 0x81256527, 0xd93bcc0f, 0x581ea928, 0x69069e5f, |
| 9015 | 0xe823fb78, 0xb03d5250, 0x31183777, 0xd20d3cbe, 0x53285999, |
| 9016 | 0x0b36f0b1, 0x8a139596, 0xbb0ba2e1, 0x3a2ec7c6, 0x62306eee, |
| 9017 | 0xe3150bc9, 0x7f6b7f3d, 0xfe4e1a1a, 0xa650b332, 0x2775d615, |
| 9018 | 0x166de162, 0x97488445, 0xcf562d6d, 0x4e73484a, 0xad664383, |
| 9019 | 0x2c4326a4, 0x745d8f8c, 0xf578eaab, 0xc460dddc, 0x4545b8fb, |
| 9020 | 0x1d5b11d3, 0x9c7e74f4, 0xfed6fe7a, 0x7ff39b5d, 0x27ed3275, |
| 9021 | 0xa6c85752, 0x97d06025, 0x16f50502, 0x4eebac2a, 0xcfcec90d, |
| 9022 | 0x2cdbc2c4, 0xadfea7e3, 0xf5e00ecb, 0x74c56bec, 0x45dd5c9b, |
| 9023 | 0xc4f839bc, 0x9ce69094, 0x1dc3f5b3, 0x81bd8147, 0x0098e460, |
| 9024 | 0x58864d48, 0xd9a3286f, 0xe8bb1f18, 0x699e7a3f, 0x3180d317, |
| 9025 | 0xb0a5b630, 0x53b0bdf9, 0xd295d8de, 0x8a8b71f6, 0x0bae14d1, |
| 9026 | 0x3ab623a6, 0xbb934681, 0xe38defa9, 0x62a88a8e, 0x26dcfab5, |
| 9027 | 0xa7f99f92, 0xffe736ba, 0x7ec2539d, 0x4fda64ea, 0xceff01cd, |
| 9028 | 0x96e1a8e5, 0x17c4cdc2, 0xf4d1c60b, 0x75f4a32c, 0x2dea0a04, |
| 9029 | 0xaccf6f23, 0x9dd75854, 0x1cf23d73, 0x44ec945b, 0xc5c9f17c, |
| 9030 | 0x59b78588, 0xd892e0af, 0x808c4987, 0x01a92ca0, 0x30b11bd7, |
| 9031 | 0xb1947ef0, 0xe98ad7d8, 0x68afb2ff, 0x8bbab936, 0x0a9fdc11, |
| 9032 | 0x52817539, 0xd3a4101e, 0xe2bc2769, 0x6399424e, 0x3b87eb66, |
| 9033 | 0xbaa28e41, 0xd80a04cf, 0x592f61e8, 0x0131c8c0, 0x8014ade7, |
| 9034 | 0xb10c9a90, 0x3029ffb7, 0x6837569f, 0xe91233b8, 0x0a073871, |
| 9035 | 0x8b225d56, 0xd33cf47e, 0x52199159, 0x6301a62e, 0xe224c309, |
| 9036 | 0xba3a6a21, 0x3b1f0f06, 0xa7617bf2, 0x26441ed5, 0x7e5ab7fd, |
| 9037 | 0xff7fd2da, 0xce67e5ad, 0x4f42808a, 0x175c29a2, 0x96794c85, |
| 9038 | 0x756c474c, 0xf449226b, 0xac578b43, 0x2d72ee64, 0x1c6ad913, |
| 9039 | 0x9d4fbc34, 0xc551151c, 0x4474703b, 0x4db9f56a, 0xcc9c904d, |
| 9040 | 0x94823965, 0x15a75c42, 0x24bf6b35, 0xa59a0e12, 0xfd84a73a, |
| 9041 | 0x7ca1c21d, 0x9fb4c9d4, 0x1e91acf3, 0x468f05db, 0xc7aa60fc, |
| 9042 | 0xf6b2578b, 0x779732ac, 0x2f899b84, 0xaeacfea3, 0x32d28a57, |
| 9043 | 0xb3f7ef70, 0xebe94658, 0x6acc237f, 0x5bd41408, 0xdaf1712f, |
| 9044 | 0x82efd807, 0x03cabd20, 0xe0dfb6e9, 0x61fad3ce, 0x39e47ae6, |
| 9045 | 0xb8c11fc1, 0x89d928b6, 0x08fc4d91, 0x50e2e4b9, 0xd1c7819e, |
| 9046 | 0xb36f0b10, 0x324a6e37, 0x6a54c71f, 0xeb71a238, 0xda69954f, |
| 9047 | 0x5b4cf068, 0x03525940, 0x82773c67, 0x616237ae, 0xe0475289, |
| 9048 | 0xb859fba1, 0x397c9e86, 0x0864a9f1, 0x8941ccd6, 0xd15f65fe, |
| 9049 | 0x507a00d9, 0xcc04742d, 0x4d21110a, 0x153fb822, 0x941add05, |
| 9050 | 0xa502ea72, 0x24278f55, 0x7c39267d, 0xfd1c435a, 0x1e094893, |
| 9051 | 0x9f2c2db4, 0xc732849c, 0x4617e1bb, 0x770fd6cc, 0xf62ab3eb, |
| 9052 | 0xae341ac3, 0x2f117fe4, 0x6b650fdf, 0xea406af8, 0xb25ec3d0, |
| 9053 | 0x337ba6f7, 0x02639180, 0x8346f4a7, 0xdb585d8f, 0x5a7d38a8, |
| 9054 | 0xb9683361, 0x384d5646, 0x6053ff6e, 0xe1769a49, 0xd06ead3e, |
| 9055 | 0x514bc819, 0x09556131, 0x88700416, 0x140e70e2, 0x952b15c5, |
| 9056 | 0xcd35bced, 0x4c10d9ca, 0x7d08eebd, 0xfc2d8b9a, 0xa43322b2, |
| 9057 | 0x25164795, 0xc6034c5c, 0x4726297b, 0x1f388053, 0x9e1de574, |
| 9058 | 0xaf05d203, 0x2e20b724, 0x763e1e0c, 0xf71b7b2b, 0x95b3f1a5, |
| 9059 | 0x14969482, 0x4c883daa, 0xcdad588d, 0xfcb56ffa, 0x7d900add, |
| 9060 | 0x258ea3f5, 0xa4abc6d2, 0x47becd1b, 0xc69ba83c, 0x9e850114, |
| 9061 | 0x1fa06433, 0x2eb85344, 0xaf9d3663, 0xf7839f4b, 0x76a6fa6c, |
| 9062 | 0xead88e98, 0x6bfdebbf, 0x33e34297, 0xb2c627b0, 0x83de10c7, |
| 9063 | 0x02fb75e0, 0x5ae5dcc8, 0xdbc0b9ef, 0x38d5b226, 0xb9f0d701, |
| 9064 | 0xe1ee7e29, 0x60cb1b0e, 0x51d32c79, 0xd0f6495e, 0x88e8e076, |
| 9065 | 0x09cd8551}, |
| 9066 | {0x00000000, 0x9b73ead4, 0xed96d3e9, 0x76e5393d, 0x005ca193, |
| 9067 | 0x9b2f4b47, 0xedca727a, 0x76b998ae, 0x00b94326, 0x9bcaa9f2, |
| 9068 | 0xed2f90cf, 0x765c7a1b, 0x00e5e2b5, 0x9b960861, 0xed73315c, |
| 9069 | 0x7600db88, 0x0172864c, 0x9a016c98, 0xece455a5, 0x7797bf71, |
| 9070 | 0x012e27df, 0x9a5dcd0b, 0xecb8f436, 0x77cb1ee2, 0x01cbc56a, |
| 9071 | 0x9ab82fbe, 0xec5d1683, 0x772efc57, 0x019764f9, 0x9ae48e2d, |
| 9072 | 0xec01b710, 0x77725dc4, 0x02e50c98, 0x9996e64c, 0xef73df71, |
| 9073 | 0x740035a5, 0x02b9ad0b, 0x99ca47df, 0xef2f7ee2, 0x745c9436, |
| 9074 | 0x025c4fbe, 0x992fa56a, 0xefca9c57, 0x74b97683, 0x0200ee2d, |
| 9075 | 0x997304f9, 0xef963dc4, 0x74e5d710, 0x03978ad4, 0x98e46000, |
| 9076 | 0xee01593d, 0x7572b3e9, 0x03cb2b47, 0x98b8c193, 0xee5df8ae, |
| 9077 | 0x752e127a, 0x032ec9f2, 0x985d2326, 0xeeb81a1b, 0x75cbf0cf, |
| 9078 | 0x03726861, 0x980182b5, 0xeee4bb88, 0x7597515c, 0x05ca1930, |
| 9079 | 0x9eb9f3e4, 0xe85ccad9, 0x732f200d, 0x0596b8a3, 0x9ee55277, |
| 9080 | 0xe8006b4a, 0x7373819e, 0x05735a16, 0x9e00b0c2, 0xe8e589ff, |
| 9081 | 0x7396632b, 0x052ffb85, 0x9e5c1151, 0xe8b9286c, 0x73cac2b8, |
| 9082 | 0x04b89f7c, 0x9fcb75a8, 0xe92e4c95, 0x725da641, 0x04e43eef, |
| 9083 | 0x9f97d43b, 0xe972ed06, 0x720107d2, 0x0401dc5a, 0x9f72368e, |
| 9084 | 0xe9970fb3, 0x72e4e567, 0x045d7dc9, 0x9f2e971d, 0xe9cbae20, |
| 9085 | 0x72b844f4, 0x072f15a8, 0x9c5cff7c, 0xeab9c641, 0x71ca2c95, |
| 9086 | 0x0773b43b, 0x9c005eef, 0xeae567d2, 0x71968d06, 0x0796568e, |
| 9087 | 0x9ce5bc5a, 0xea008567, 0x71736fb3, 0x07caf71d, 0x9cb91dc9, |
| 9088 | 0xea5c24f4, 0x712fce20, 0x065d93e4, 0x9d2e7930, 0xebcb400d, |
| 9089 | 0x70b8aad9, 0x06013277, 0x9d72d8a3, 0xeb97e19e, 0x70e40b4a, |
| 9090 | 0x06e4d0c2, 0x9d973a16, 0xeb72032b, 0x7001e9ff, 0x06b87151, |
| 9091 | 0x9dcb9b85, 0xeb2ea2b8, 0x705d486c, 0x0b943260, 0x90e7d8b4, |
| 9092 | 0xe602e189, 0x7d710b5d, 0x0bc893f3, 0x90bb7927, 0xe65e401a, |
| 9093 | 0x7d2daace, 0x0b2d7146, 0x905e9b92, 0xe6bba2af, 0x7dc8487b, |
| 9094 | 0x0b71d0d5, 0x90023a01, 0xe6e7033c, 0x7d94e9e8, 0x0ae6b42c, |
| 9095 | 0x91955ef8, 0xe77067c5, 0x7c038d11, 0x0aba15bf, 0x91c9ff6b, |
| 9096 | 0xe72cc656, 0x7c5f2c82, 0x0a5ff70a, 0x912c1dde, 0xe7c924e3, |
| 9097 | 0x7cbace37, 0x0a035699, 0x9170bc4d, 0xe7958570, 0x7ce66fa4, |
| 9098 | 0x09713ef8, 0x9202d42c, 0xe4e7ed11, 0x7f9407c5, 0x092d9f6b, |
| 9099 | 0x925e75bf, 0xe4bb4c82, 0x7fc8a656, 0x09c87dde, 0x92bb970a, |
| 9100 | 0xe45eae37, 0x7f2d44e3, 0x0994dc4d, 0x92e73699, 0xe4020fa4, |
| 9101 | 0x7f71e570, 0x0803b8b4, 0x93705260, 0xe5956b5d, 0x7ee68189, |
| 9102 | 0x085f1927, 0x932cf3f3, 0xe5c9cace, 0x7eba201a, 0x08bafb92, |
| 9103 | 0x93c91146, 0xe52c287b, 0x7e5fc2af, 0x08e65a01, 0x9395b0d5, |
| 9104 | 0xe57089e8, 0x7e03633c, 0x0e5e2b50, 0x952dc184, 0xe3c8f8b9, |
| 9105 | 0x78bb126d, 0x0e028ac3, 0x95716017, 0xe394592a, 0x78e7b3fe, |
| 9106 | 0x0ee76876, 0x959482a2, 0xe371bb9f, 0x7802514b, 0x0ebbc9e5, |
| 9107 | 0x95c82331, 0xe32d1a0c, 0x785ef0d8, 0x0f2cad1c, 0x945f47c8, |
| 9108 | 0xe2ba7ef5, 0x79c99421, 0x0f700c8f, 0x9403e65b, 0xe2e6df66, |
| 9109 | 0x799535b2, 0x0f95ee3a, 0x94e604ee, 0xe2033dd3, 0x7970d707, |
| 9110 | 0x0fc94fa9, 0x94baa57d, 0xe25f9c40, 0x792c7694, 0x0cbb27c8, |
| 9111 | 0x97c8cd1c, 0xe12df421, 0x7a5e1ef5, 0x0ce7865b, 0x97946c8f, |
| 9112 | 0xe17155b2, 0x7a02bf66, 0x0c0264ee, 0x97718e3a, 0xe194b707, |
| 9113 | 0x7ae75dd3, 0x0c5ec57d, 0x972d2fa9, 0xe1c81694, 0x7abbfc40, |
| 9114 | 0x0dc9a184, 0x96ba4b50, 0xe05f726d, 0x7b2c98b9, 0x0d950017, |
| 9115 | 0x96e6eac3, 0xe003d3fe, 0x7b70392a, 0x0d70e2a2, 0x96030876, |
| 9116 | 0xe0e6314b, 0x7b95db9f, 0x0d2c4331, 0x965fa9e5, 0xe0ba90d8, |
| 9117 | 0x7bc97a0c}, |
| 9118 | {0x00000000, 0x172864c0, 0x2e50c980, 0x3978ad40, 0x5ca19300, |
| 9119 | 0x4b89f7c0, 0x72f15a80, 0x65d93e40, 0xb9432600, 0xae6b42c0, |
| 9120 | 0x9713ef80, 0x803b8b40, 0xe5e2b500, 0xf2cad1c0, 0xcbb27c80, |
| 9121 | 0xdc9a1840, 0xa9f74a41, 0xbedf2e81, 0x87a783c1, 0x908fe701, |
| 9122 | 0xf556d941, 0xe27ebd81, 0xdb0610c1, 0xcc2e7401, 0x10b46c41, |
| 9123 | 0x079c0881, 0x3ee4a5c1, 0x29ccc101, 0x4c15ff41, 0x5b3d9b81, |
| 9124 | 0x624536c1, 0x756d5201, 0x889f92c3, 0x9fb7f603, 0xa6cf5b43, |
| 9125 | 0xb1e73f83, 0xd43e01c3, 0xc3166503, 0xfa6ec843, 0xed46ac83, |
| 9126 | 0x31dcb4c3, 0x26f4d003, 0x1f8c7d43, 0x08a41983, 0x6d7d27c3, |
| 9127 | 0x7a554303, 0x432dee43, 0x54058a83, 0x2168d882, 0x3640bc42, |
| 9128 | 0x0f381102, 0x181075c2, 0x7dc94b82, 0x6ae12f42, 0x53998202, |
| 9129 | 0x44b1e6c2, 0x982bfe82, 0x8f039a42, 0xb67b3702, 0xa15353c2, |
| 9130 | 0xc48a6d82, 0xd3a20942, 0xeadaa402, 0xfdf2c0c2, 0xca4e23c7, |
| 9131 | 0xdd664707, 0xe41eea47, 0xf3368e87, 0x96efb0c7, 0x81c7d407, |
| 9132 | 0xb8bf7947, 0xaf971d87, 0x730d05c7, 0x64256107, 0x5d5dcc47, |
| 9133 | 0x4a75a887, 0x2fac96c7, 0x3884f207, 0x01fc5f47, 0x16d43b87, |
| 9134 | 0x63b96986, 0x74910d46, 0x4de9a006, 0x5ac1c4c6, 0x3f18fa86, |
| 9135 | 0x28309e46, 0x11483306, 0x066057c6, 0xdafa4f86, 0xcdd22b46, |
| 9136 | 0xf4aa8606, 0xe382e2c6, 0x865bdc86, 0x9173b846, 0xa80b1506, |
| 9137 | 0xbf2371c6, 0x42d1b104, 0x55f9d5c4, 0x6c817884, 0x7ba91c44, |
| 9138 | 0x1e702204, 0x095846c4, 0x3020eb84, 0x27088f44, 0xfb929704, |
| 9139 | 0xecbaf3c4, 0xd5c25e84, 0xc2ea3a44, 0xa7330404, 0xb01b60c4, |
| 9140 | 0x8963cd84, 0x9e4ba944, 0xeb26fb45, 0xfc0e9f85, 0xc57632c5, |
| 9141 | 0xd25e5605, 0xb7876845, 0xa0af0c85, 0x99d7a1c5, 0x8effc505, |
| 9142 | 0x5265dd45, 0x454db985, 0x7c3514c5, 0x6b1d7005, 0x0ec44e45, |
| 9143 | 0x19ec2a85, 0x209487c5, 0x37bce305, 0x4fed41cf, 0x58c5250f, |
| 9144 | 0x61bd884f, 0x7695ec8f, 0x134cd2cf, 0x0464b60f, 0x3d1c1b4f, |
| 9145 | 0x2a347f8f, 0xf6ae67cf, 0xe186030f, 0xd8feae4f, 0xcfd6ca8f, |
| 9146 | 0xaa0ff4cf, 0xbd27900f, 0x845f3d4f, 0x9377598f, 0xe61a0b8e, |
| 9147 | 0xf1326f4e, 0xc84ac20e, 0xdf62a6ce, 0xbabb988e, 0xad93fc4e, |
| 9148 | 0x94eb510e, 0x83c335ce, 0x5f592d8e, 0x4871494e, 0x7109e40e, |
| 9149 | 0x662180ce, 0x03f8be8e, 0x14d0da4e, 0x2da8770e, 0x3a8013ce, |
| 9150 | 0xc772d30c, 0xd05ab7cc, 0xe9221a8c, 0xfe0a7e4c, 0x9bd3400c, |
| 9151 | 0x8cfb24cc, 0xb583898c, 0xa2abed4c, 0x7e31f50c, 0x691991cc, |
| 9152 | 0x50613c8c, 0x4749584c, 0x2290660c, 0x35b802cc, 0x0cc0af8c, |
| 9153 | 0x1be8cb4c, 0x6e85994d, 0x79adfd8d, 0x40d550cd, 0x57fd340d, |
| 9154 | 0x32240a4d, 0x250c6e8d, 0x1c74c3cd, 0x0b5ca70d, 0xd7c6bf4d, |
| 9155 | 0xc0eedb8d, 0xf99676cd, 0xeebe120d, 0x8b672c4d, 0x9c4f488d, |
| 9156 | 0xa537e5cd, 0xb21f810d, 0x85a36208, 0x928b06c8, 0xabf3ab88, |
| 9157 | 0xbcdbcf48, 0xd902f108, 0xce2a95c8, 0xf7523888, 0xe07a5c48, |
| 9158 | 0x3ce04408, 0x2bc820c8, 0x12b08d88, 0x0598e948, 0x6041d708, |
| 9159 | 0x7769b3c8, 0x4e111e88, 0x59397a48, 0x2c542849, 0x3b7c4c89, |
| 9160 | 0x0204e1c9, 0x152c8509, 0x70f5bb49, 0x67dddf89, 0x5ea572c9, |
| 9161 | 0x498d1609, 0x95170e49, 0x823f6a89, 0xbb47c7c9, 0xac6fa309, |
| 9162 | 0xc9b69d49, 0xde9ef989, 0xe7e654c9, 0xf0ce3009, 0x0d3cf0cb, |
| 9163 | 0x1a14940b, 0x236c394b, 0x34445d8b, 0x519d63cb, 0x46b5070b, |
| 9164 | 0x7fcdaa4b, 0x68e5ce8b, 0xb47fd6cb, 0xa357b20b, 0x9a2f1f4b, |
| 9165 | 0x8d077b8b, 0xe8de45cb, 0xfff6210b, 0xc68e8c4b, 0xd1a6e88b, |
| 9166 | 0xa4cbba8a, 0xb3e3de4a, 0x8a9b730a, 0x9db317ca, 0xf86a298a, |
| 9167 | 0xef424d4a, 0xd63ae00a, 0xc11284ca, 0x1d889c8a, 0x0aa0f84a, |
| 9168 | 0x33d8550a, 0x24f031ca, 0x41290f8a, 0x56016b4a, 0x6f79c60a, |
| 9169 | 0x7851a2ca}, |
| 9170 | {0x00000000, 0x9fda839e, 0xe4c4017d, 0x7b1e82e3, 0x12f904bb, |
| 9171 | 0x8d238725, 0xf63d05c6, 0x69e78658, 0x25f20976, 0xba288ae8, |
| 9172 | 0xc136080b, 0x5eec8b95, 0x370b0dcd, 0xa8d18e53, 0xd3cf0cb0, |
| 9173 | 0x4c158f2e, 0x4be412ec, 0xd43e9172, 0xaf201391, 0x30fa900f, |
| 9174 | 0x591d1657, 0xc6c795c9, 0xbdd9172a, 0x220394b4, 0x6e161b9a, |
| 9175 | 0xf1cc9804, 0x8ad21ae7, 0x15089979, 0x7cef1f21, 0xe3359cbf, |
| 9176 | 0x982b1e5c, 0x07f19dc2, 0x97c825d8, 0x0812a646, 0x730c24a5, |
| 9177 | 0xecd6a73b, 0x85312163, 0x1aeba2fd, 0x61f5201e, 0xfe2fa380, |
| 9178 | 0xb23a2cae, 0x2de0af30, 0x56fe2dd3, 0xc924ae4d, 0xa0c32815, |
| 9179 | 0x3f19ab8b, 0x44072968, 0xdbddaaf6, 0xdc2c3734, 0x43f6b4aa, |
| 9180 | 0x38e83649, 0xa732b5d7, 0xced5338f, 0x510fb011, 0x2a1132f2, |
| 9181 | 0xb5cbb16c, 0xf9de3e42, 0x6604bddc, 0x1d1a3f3f, 0x82c0bca1, |
| 9182 | 0xeb273af9, 0x74fdb967, 0x0fe33b84, 0x9039b81a, 0xf4e14df1, |
| 9183 | 0x6b3bce6f, 0x10254c8c, 0x8fffcf12, 0xe618494a, 0x79c2cad4, |
| 9184 | 0x02dc4837, 0x9d06cba9, 0xd1134487, 0x4ec9c719, 0x35d745fa, |
| 9185 | 0xaa0dc664, 0xc3ea403c, 0x5c30c3a2, 0x272e4141, 0xb8f4c2df, |
| 9186 | 0xbf055f1d, 0x20dfdc83, 0x5bc15e60, 0xc41bddfe, 0xadfc5ba6, |
| 9187 | 0x3226d838, 0x49385adb, 0xd6e2d945, 0x9af7566b, 0x052dd5f5, |
| 9188 | 0x7e335716, 0xe1e9d488, 0x880e52d0, 0x17d4d14e, 0x6cca53ad, |
| 9189 | 0xf310d033, 0x63296829, 0xfcf3ebb7, 0x87ed6954, 0x1837eaca, |
| 9190 | 0x71d06c92, 0xee0aef0c, 0x95146def, 0x0aceee71, 0x46db615f, |
| 9191 | 0xd901e2c1, 0xa21f6022, 0x3dc5e3bc, 0x542265e4, 0xcbf8e67a, |
| 9192 | 0xb0e66499, 0x2f3ce707, 0x28cd7ac5, 0xb717f95b, 0xcc097bb8, |
| 9193 | 0x53d3f826, 0x3a347e7e, 0xa5eefde0, 0xdef07f03, 0x412afc9d, |
| 9194 | 0x0d3f73b3, 0x92e5f02d, 0xe9fb72ce, 0x7621f150, 0x1fc67708, |
| 9195 | 0x801cf496, 0xfb027675, 0x64d8f5eb, 0x32b39da3, 0xad691e3d, |
| 9196 | 0xd6779cde, 0x49ad1f40, 0x204a9918, 0xbf901a86, 0xc48e9865, |
| 9197 | 0x5b541bfb, 0x174194d5, 0x889b174b, 0xf38595a8, 0x6c5f1636, |
| 9198 | 0x05b8906e, 0x9a6213f0, 0xe17c9113, 0x7ea6128d, 0x79578f4f, |
| 9199 | 0xe68d0cd1, 0x9d938e32, 0x02490dac, 0x6bae8bf4, 0xf474086a, |
| 9200 | 0x8f6a8a89, 0x10b00917, 0x5ca58639, 0xc37f05a7, 0xb8618744, |
| 9201 | 0x27bb04da, 0x4e5c8282, 0xd186011c, 0xaa9883ff, 0x35420061, |
| 9202 | 0xa57bb87b, 0x3aa13be5, 0x41bfb906, 0xde653a98, 0xb782bcc0, |
| 9203 | 0x28583f5e, 0x5346bdbd, 0xcc9c3e23, 0x8089b10d, 0x1f533293, |
| 9204 | 0x644db070, 0xfb9733ee, 0x9270b5b6, 0x0daa3628, 0x76b4b4cb, |
| 9205 | 0xe96e3755, 0xee9faa97, 0x71452909, 0x0a5babea, 0x95812874, |
| 9206 | 0xfc66ae2c, 0x63bc2db2, 0x18a2af51, 0x87782ccf, 0xcb6da3e1, |
| 9207 | 0x54b7207f, 0x2fa9a29c, 0xb0732102, 0xd994a75a, 0x464e24c4, |
| 9208 | 0x3d50a627, 0xa28a25b9, 0xc652d052, 0x598853cc, 0x2296d12f, |
| 9209 | 0xbd4c52b1, 0xd4abd4e9, 0x4b715777, 0x306fd594, 0xafb5560a, |
| 9210 | 0xe3a0d924, 0x7c7a5aba, 0x0764d859, 0x98be5bc7, 0xf159dd9f, |
| 9211 | 0x6e835e01, 0x159ddce2, 0x8a475f7c, 0x8db6c2be, 0x126c4120, |
| 9212 | 0x6972c3c3, 0xf6a8405d, 0x9f4fc605, 0x0095459b, 0x7b8bc778, |
| 9213 | 0xe45144e6, 0xa844cbc8, 0x379e4856, 0x4c80cab5, 0xd35a492b, |
| 9214 | 0xbabdcf73, 0x25674ced, 0x5e79ce0e, 0xc1a34d90, 0x519af58a, |
| 9215 | 0xce407614, 0xb55ef4f7, 0x2a847769, 0x4363f131, 0xdcb972af, |
| 9216 | 0xa7a7f04c, 0x387d73d2, 0x7468fcfc, 0xebb27f62, 0x90acfd81, |
| 9217 | 0x0f767e1f, 0x6691f847, 0xf94b7bd9, 0x8255f93a, 0x1d8f7aa4, |
| 9218 | 0x1a7ee766, 0x85a464f8, 0xfebae61b, 0x61606585, 0x0887e3dd, |
| 9219 | 0x975d6043, 0xec43e2a0, 0x7399613e, 0x3f8cee10, 0xa0566d8e, |
| 9220 | 0xdb48ef6d, 0x44926cf3, 0x2d75eaab, 0xb2af6935, 0xc9b1ebd6, |
| 9221 | 0x566b6848}}; |
| 9222 | |
| 9223 | local const z_word_t FAR crc_braid_big_table[][256] = { |
| 9224 | {0x00000000, 0x9e83da9f, 0x7d01c4e4, 0xe3821e7b, 0xbb04f912, |
| 9225 | 0x2587238d, 0xc6053df6, 0x5886e769, 0x7609f225, 0xe88a28ba, |
| 9226 | 0x0b0836c1, 0x958bec5e, 0xcd0d0b37, 0x538ed1a8, 0xb00ccfd3, |
| 9227 | 0x2e8f154c, 0xec12e44b, 0x72913ed4, 0x911320af, 0x0f90fa30, |
| 9228 | 0x57161d59, 0xc995c7c6, 0x2a17d9bd, 0xb4940322, 0x9a1b166e, |
| 9229 | 0x0498ccf1, 0xe71ad28a, 0x79990815, 0x211fef7c, 0xbf9c35e3, |
| 9230 | 0x5c1e2b98, 0xc29df107, 0xd825c897, 0x46a61208, 0xa5240c73, |
| 9231 | 0x3ba7d6ec, 0x63213185, 0xfda2eb1a, 0x1e20f561, 0x80a32ffe, |
| 9232 | 0xae2c3ab2, 0x30afe02d, 0xd32dfe56, 0x4dae24c9, 0x1528c3a0, |
| 9233 | 0x8bab193f, 0x68290744, 0xf6aadddb, 0x34372cdc, 0xaab4f643, |
| 9234 | 0x4936e838, 0xd7b532a7, 0x8f33d5ce, 0x11b00f51, 0xf232112a, |
| 9235 | 0x6cb1cbb5, 0x423edef9, 0xdcbd0466, 0x3f3f1a1d, 0xa1bcc082, |
| 9236 | 0xf93a27eb, 0x67b9fd74, 0x843be30f, 0x1ab83990, 0xf14de1f4, |
| 9237 | 0x6fce3b6b, 0x8c4c2510, 0x12cfff8f, 0x4a4918e6, 0xd4cac279, |
| 9238 | 0x3748dc02, 0xa9cb069d, 0x874413d1, 0x19c7c94e, 0xfa45d735, |
| 9239 | 0x64c60daa, 0x3c40eac3, 0xa2c3305c, 0x41412e27, 0xdfc2f4b8, |
| 9240 | 0x1d5f05bf, 0x83dcdf20, 0x605ec15b, 0xfedd1bc4, 0xa65bfcad, |
| 9241 | 0x38d82632, 0xdb5a3849, 0x45d9e2d6, 0x6b56f79a, 0xf5d52d05, |
| 9242 | 0x1657337e, 0x88d4e9e1, 0xd0520e88, 0x4ed1d417, 0xad53ca6c, |
| 9243 | 0x33d010f3, 0x29682963, 0xb7ebf3fc, 0x5469ed87, 0xcaea3718, |
| 9244 | 0x926cd071, 0x0cef0aee, 0xef6d1495, 0x71eece0a, 0x5f61db46, |
| 9245 | 0xc1e201d9, 0x22601fa2, 0xbce3c53d, 0xe4652254, 0x7ae6f8cb, |
| 9246 | 0x9964e6b0, 0x07e73c2f, 0xc57acd28, 0x5bf917b7, 0xb87b09cc, |
| 9247 | 0x26f8d353, 0x7e7e343a, 0xe0fdeea5, 0x037ff0de, 0x9dfc2a41, |
| 9248 | 0xb3733f0d, 0x2df0e592, 0xce72fbe9, 0x50f12176, 0x0877c61f, |
| 9249 | 0x96f41c80, 0x757602fb, 0xebf5d864, 0xa39db332, 0x3d1e69ad, |
| 9250 | 0xde9c77d6, 0x401fad49, 0x18994a20, 0x861a90bf, 0x65988ec4, |
| 9251 | 0xfb1b545b, 0xd5944117, 0x4b179b88, 0xa89585f3, 0x36165f6c, |
| 9252 | 0x6e90b805, 0xf013629a, 0x13917ce1, 0x8d12a67e, 0x4f8f5779, |
| 9253 | 0xd10c8de6, 0x328e939d, 0xac0d4902, 0xf48bae6b, 0x6a0874f4, |
| 9254 | 0x898a6a8f, 0x1709b010, 0x3986a55c, 0xa7057fc3, 0x448761b8, |
| 9255 | 0xda04bb27, 0x82825c4e, 0x1c0186d1, 0xff8398aa, 0x61004235, |
| 9256 | 0x7bb87ba5, 0xe53ba13a, 0x06b9bf41, 0x983a65de, 0xc0bc82b7, |
| 9257 | 0x5e3f5828, 0xbdbd4653, 0x233e9ccc, 0x0db18980, 0x9332531f, |
| 9258 | 0x70b04d64, 0xee3397fb, 0xb6b57092, 0x2836aa0d, 0xcbb4b476, |
| 9259 | 0x55376ee9, 0x97aa9fee, 0x09294571, 0xeaab5b0a, 0x74288195, |
| 9260 | 0x2cae66fc, 0xb22dbc63, 0x51afa218, 0xcf2c7887, 0xe1a36dcb, |
| 9261 | 0x7f20b754, 0x9ca2a92f, 0x022173b0, 0x5aa794d9, 0xc4244e46, |
| 9262 | 0x27a6503d, 0xb9258aa2, 0x52d052c6, 0xcc538859, 0x2fd19622, |
| 9263 | 0xb1524cbd, 0xe9d4abd4, 0x7757714b, 0x94d56f30, 0x0a56b5af, |
| 9264 | 0x24d9a0e3, 0xba5a7a7c, 0x59d86407, 0xc75bbe98, 0x9fdd59f1, |
| 9265 | 0x015e836e, 0xe2dc9d15, 0x7c5f478a, 0xbec2b68d, 0x20416c12, |
| 9266 | 0xc3c37269, 0x5d40a8f6, 0x05c64f9f, 0x9b459500, 0x78c78b7b, |
| 9267 | 0xe64451e4, 0xc8cb44a8, 0x56489e37, 0xb5ca804c, 0x2b495ad3, |
| 9268 | 0x73cfbdba, 0xed4c6725, 0x0ece795e, 0x904da3c1, 0x8af59a51, |
| 9269 | 0x147640ce, 0xf7f45eb5, 0x6977842a, 0x31f16343, 0xaf72b9dc, |
| 9270 | 0x4cf0a7a7, 0xd2737d38, 0xfcfc6874, 0x627fb2eb, 0x81fdac90, |
| 9271 | 0x1f7e760f, 0x47f89166, 0xd97b4bf9, 0x3af95582, 0xa47a8f1d, |
| 9272 | 0x66e77e1a, 0xf864a485, 0x1be6bafe, 0x85656061, 0xdde38708, |
| 9273 | 0x43605d97, 0xa0e243ec, 0x3e619973, 0x10ee8c3f, 0x8e6d56a0, |
| 9274 | 0x6def48db, 0xf36c9244, 0xabea752d, 0x3569afb2, 0xd6ebb1c9, |
| 9275 | 0x48686b56}, |
| 9276 | {0x00000000, 0xc0642817, 0x80c9502e, 0x40ad7839, 0x0093a15c, |
| 9277 | 0xc0f7894b, 0x805af172, 0x403ed965, 0x002643b9, 0xc0426bae, |
| 9278 | 0x80ef1397, 0x408b3b80, 0x00b5e2e5, 0xc0d1caf2, 0x807cb2cb, |
| 9279 | 0x40189adc, 0x414af7a9, 0x812edfbe, 0xc183a787, 0x01e78f90, |
| 9280 | 0x41d956f5, 0x81bd7ee2, 0xc11006db, 0x01742ecc, 0x416cb410, |
| 9281 | 0x81089c07, 0xc1a5e43e, 0x01c1cc29, 0x41ff154c, 0x819b3d5b, |
| 9282 | 0xc1364562, 0x01526d75, 0xc3929f88, 0x03f6b79f, 0x435bcfa6, |
| 9283 | 0x833fe7b1, 0xc3013ed4, 0x036516c3, 0x43c86efa, 0x83ac46ed, |
| 9284 | 0xc3b4dc31, 0x03d0f426, 0x437d8c1f, 0x8319a408, 0xc3277d6d, |
| 9285 | 0x0343557a, 0x43ee2d43, 0x838a0554, 0x82d86821, 0x42bc4036, |
| 9286 | 0x0211380f, 0xc2751018, 0x824bc97d, 0x422fe16a, 0x02829953, |
| 9287 | 0xc2e6b144, 0x82fe2b98, 0x429a038f, 0x02377bb6, 0xc25353a1, |
| 9288 | 0x826d8ac4, 0x4209a2d3, 0x02a4daea, 0xc2c0f2fd, 0xc7234eca, |
| 9289 | 0x074766dd, 0x47ea1ee4, 0x878e36f3, 0xc7b0ef96, 0x07d4c781, |
| 9290 | 0x4779bfb8, 0x871d97af, 0xc7050d73, 0x07612564, 0x47cc5d5d, |
| 9291 | 0x87a8754a, 0xc796ac2f, 0x07f28438, 0x475ffc01, 0x873bd416, |
| 9292 | 0x8669b963, 0x460d9174, 0x06a0e94d, 0xc6c4c15a, 0x86fa183f, |
| 9293 | 0x469e3028, 0x06334811, 0xc6576006, 0x864ffada, 0x462bd2cd, |
| 9294 | 0x0686aaf4, 0xc6e282e3, 0x86dc5b86, 0x46b87391, 0x06150ba8, |
| 9295 | 0xc67123bf, 0x04b1d142, 0xc4d5f955, 0x8478816c, 0x441ca97b, |
| 9296 | 0x0422701e, 0xc4465809, 0x84eb2030, 0x448f0827, 0x049792fb, |
| 9297 | 0xc4f3baec, 0x845ec2d5, 0x443aeac2, 0x040433a7, 0xc4601bb0, |
| 9298 | 0x84cd6389, 0x44a94b9e, 0x45fb26eb, 0x859f0efc, 0xc53276c5, |
| 9299 | 0x05565ed2, 0x456887b7, 0x850cafa0, 0xc5a1d799, 0x05c5ff8e, |
| 9300 | 0x45dd6552, 0x85b94d45, 0xc514357c, 0x05701d6b, 0x454ec40e, |
| 9301 | 0x852aec19, 0xc5879420, 0x05e3bc37, 0xcf41ed4f, 0x0f25c558, |
| 9302 | 0x4f88bd61, 0x8fec9576, 0xcfd24c13, 0x0fb66404, 0x4f1b1c3d, |
| 9303 | 0x8f7f342a, 0xcf67aef6, 0x0f0386e1, 0x4faefed8, 0x8fcad6cf, |
| 9304 | 0xcff40faa, 0x0f9027bd, 0x4f3d5f84, 0x8f597793, 0x8e0b1ae6, |
| 9305 | 0x4e6f32f1, 0x0ec24ac8, 0xcea662df, 0x8e98bbba, 0x4efc93ad, |
| 9306 | 0x0e51eb94, 0xce35c383, 0x8e2d595f, 0x4e497148, 0x0ee40971, |
| 9307 | 0xce802166, 0x8ebef803, 0x4edad014, 0x0e77a82d, 0xce13803a, |
| 9308 | 0x0cd372c7, 0xccb75ad0, 0x8c1a22e9, 0x4c7e0afe, 0x0c40d39b, |
| 9309 | 0xcc24fb8c, 0x8c8983b5, 0x4cedaba2, 0x0cf5317e, 0xcc911969, |
| 9310 | 0x8c3c6150, 0x4c584947, 0x0c669022, 0xcc02b835, 0x8cafc00c, |
| 9311 | 0x4ccbe81b, 0x4d99856e, 0x8dfdad79, 0xcd50d540, 0x0d34fd57, |
| 9312 | 0x4d0a2432, 0x8d6e0c25, 0xcdc3741c, 0x0da75c0b, 0x4dbfc6d7, |
| 9313 | 0x8ddbeec0, 0xcd7696f9, 0x0d12beee, 0x4d2c678b, 0x8d484f9c, |
| 9314 | 0xcde537a5, 0x0d811fb2, 0x0862a385, 0xc8068b92, 0x88abf3ab, |
| 9315 | 0x48cfdbbc, 0x08f102d9, 0xc8952ace, 0x883852f7, 0x485c7ae0, |
| 9316 | 0x0844e03c, 0xc820c82b, 0x888db012, 0x48e99805, 0x08d74160, |
| 9317 | 0xc8b36977, 0x881e114e, 0x487a3959, 0x4928542c, 0x894c7c3b, |
| 9318 | 0xc9e10402, 0x09852c15, 0x49bbf570, 0x89dfdd67, 0xc972a55e, |
| 9319 | 0x09168d49, 0x490e1795, 0x896a3f82, 0xc9c747bb, 0x09a36fac, |
| 9320 | 0x499db6c9, 0x89f99ede, 0xc954e6e7, 0x0930cef0, 0xcbf03c0d, |
| 9321 | 0x0b94141a, 0x4b396c23, 0x8b5d4434, 0xcb639d51, 0x0b07b546, |
| 9322 | 0x4baacd7f, 0x8bcee568, 0xcbd67fb4, 0x0bb257a3, 0x4b1f2f9a, |
| 9323 | 0x8b7b078d, 0xcb45dee8, 0x0b21f6ff, 0x4b8c8ec6, 0x8be8a6d1, |
| 9324 | 0x8abacba4, 0x4adee3b3, 0x0a739b8a, 0xca17b39d, 0x8a296af8, |
| 9325 | 0x4a4d42ef, 0x0ae03ad6, 0xca8412c1, 0x8a9c881d, 0x4af8a00a, |
| 9326 | 0x0a55d833, 0xca31f024, 0x8a0f2941, 0x4a6b0156, 0x0ac6796f, |
| 9327 | 0xcaa25178}, |
| 9328 | {0x00000000, 0xd4ea739b, 0xe9d396ed, 0x3d39e576, 0x93a15c00, |
| 9329 | 0x474b2f9b, 0x7a72caed, 0xae98b976, 0x2643b900, 0xf2a9ca9b, |
| 9330 | 0xcf902fed, 0x1b7a5c76, 0xb5e2e500, 0x6108969b, 0x5c3173ed, |
| 9331 | 0x88db0076, 0x4c867201, 0x986c019a, 0xa555e4ec, 0x71bf9777, |
| 9332 | 0xdf272e01, 0x0bcd5d9a, 0x36f4b8ec, 0xe21ecb77, 0x6ac5cb01, |
| 9333 | 0xbe2fb89a, 0x83165dec, 0x57fc2e77, 0xf9649701, 0x2d8ee49a, |
| 9334 | 0x10b701ec, 0xc45d7277, 0x980ce502, 0x4ce69699, 0x71df73ef, |
| 9335 | 0xa5350074, 0x0badb902, 0xdf47ca99, 0xe27e2fef, 0x36945c74, |
| 9336 | 0xbe4f5c02, 0x6aa52f99, 0x579ccaef, 0x8376b974, 0x2dee0002, |
| 9337 | 0xf9047399, 0xc43d96ef, 0x10d7e574, 0xd48a9703, 0x0060e498, |
| 9338 | 0x3d5901ee, 0xe9b37275, 0x472bcb03, 0x93c1b898, 0xaef85dee, |
| 9339 | 0x7a122e75, 0xf2c92e03, 0x26235d98, 0x1b1ab8ee, 0xcff0cb75, |
| 9340 | 0x61687203, 0xb5820198, 0x88bbe4ee, 0x5c519775, 0x3019ca05, |
| 9341 | 0xe4f3b99e, 0xd9ca5ce8, 0x0d202f73, 0xa3b89605, 0x7752e59e, |
| 9342 | 0x4a6b00e8, 0x9e817373, 0x165a7305, 0xc2b0009e, 0xff89e5e8, |
| 9343 | 0x2b639673, 0x85fb2f05, 0x51115c9e, 0x6c28b9e8, 0xb8c2ca73, |
| 9344 | 0x7c9fb804, 0xa875cb9f, 0x954c2ee9, 0x41a65d72, 0xef3ee404, |
| 9345 | 0x3bd4979f, 0x06ed72e9, 0xd2070172, 0x5adc0104, 0x8e36729f, |
| 9346 | 0xb30f97e9, 0x67e5e472, 0xc97d5d04, 0x1d972e9f, 0x20aecbe9, |
| 9347 | 0xf444b872, 0xa8152f07, 0x7cff5c9c, 0x41c6b9ea, 0x952cca71, |
| 9348 | 0x3bb47307, 0xef5e009c, 0xd267e5ea, 0x068d9671, 0x8e569607, |
| 9349 | 0x5abce59c, 0x678500ea, 0xb36f7371, 0x1df7ca07, 0xc91db99c, |
| 9350 | 0xf4245cea, 0x20ce2f71, 0xe4935d06, 0x30792e9d, 0x0d40cbeb, |
| 9351 | 0xd9aab870, 0x77320106, 0xa3d8729d, 0x9ee197eb, 0x4a0be470, |
| 9352 | 0xc2d0e406, 0x163a979d, 0x2b0372eb, 0xffe90170, 0x5171b806, |
| 9353 | 0x859bcb9d, 0xb8a22eeb, 0x6c485d70, 0x6032940b, 0xb4d8e790, |
| 9354 | 0x89e102e6, 0x5d0b717d, 0xf393c80b, 0x2779bb90, 0x1a405ee6, |
| 9355 | 0xceaa2d7d, 0x46712d0b, 0x929b5e90, 0xafa2bbe6, 0x7b48c87d, |
| 9356 | 0xd5d0710b, 0x013a0290, 0x3c03e7e6, 0xe8e9947d, 0x2cb4e60a, |
| 9357 | 0xf85e9591, 0xc56770e7, 0x118d037c, 0xbf15ba0a, 0x6bffc991, |
| 9358 | 0x56c62ce7, 0x822c5f7c, 0x0af75f0a, 0xde1d2c91, 0xe324c9e7, |
| 9359 | 0x37ceba7c, 0x9956030a, 0x4dbc7091, 0x708595e7, 0xa46fe67c, |
| 9360 | 0xf83e7109, 0x2cd40292, 0x11ede7e4, 0xc507947f, 0x6b9f2d09, |
| 9361 | 0xbf755e92, 0x824cbbe4, 0x56a6c87f, 0xde7dc809, 0x0a97bb92, |
| 9362 | 0x37ae5ee4, 0xe3442d7f, 0x4ddc9409, 0x9936e792, 0xa40f02e4, |
| 9363 | 0x70e5717f, 0xb4b80308, 0x60527093, 0x5d6b95e5, 0x8981e67e, |
| 9364 | 0x27195f08, 0xf3f32c93, 0xcecac9e5, 0x1a20ba7e, 0x92fbba08, |
| 9365 | 0x4611c993, 0x7b282ce5, 0xafc25f7e, 0x015ae608, 0xd5b09593, |
| 9366 | 0xe88970e5, 0x3c63037e, 0x502b5e0e, 0x84c12d95, 0xb9f8c8e3, |
| 9367 | 0x6d12bb78, 0xc38a020e, 0x17607195, 0x2a5994e3, 0xfeb3e778, |
| 9368 | 0x7668e70e, 0xa2829495, 0x9fbb71e3, 0x4b510278, 0xe5c9bb0e, |
| 9369 | 0x3123c895, 0x0c1a2de3, 0xd8f05e78, 0x1cad2c0f, 0xc8475f94, |
| 9370 | 0xf57ebae2, 0x2194c979, 0x8f0c700f, 0x5be60394, 0x66dfe6e2, |
| 9371 | 0xb2359579, 0x3aee950f, 0xee04e694, 0xd33d03e2, 0x07d77079, |
| 9372 | 0xa94fc90f, 0x7da5ba94, 0x409c5fe2, 0x94762c79, 0xc827bb0c, |
| 9373 | 0x1ccdc897, 0x21f42de1, 0xf51e5e7a, 0x5b86e70c, 0x8f6c9497, |
| 9374 | 0xb25571e1, 0x66bf027a, 0xee64020c, 0x3a8e7197, 0x07b794e1, |
| 9375 | 0xd35de77a, 0x7dc55e0c, 0xa92f2d97, 0x9416c8e1, 0x40fcbb7a, |
| 9376 | 0x84a1c90d, 0x504bba96, 0x6d725fe0, 0xb9982c7b, 0x1700950d, |
| 9377 | 0xc3eae696, 0xfed303e0, 0x2a39707b, 0xa2e2700d, 0x76080396, |
| 9378 | 0x4b31e6e0, 0x9fdb957b, 0x31432c0d, 0xe5a95f96, 0xd890bae0, |
| 9379 | 0x0c7ac97b}, |
| 9380 | {0x00000000, 0x27652581, 0x0fcc3bd9, 0x28a91e58, 0x5f9e0669, |
| 9381 | 0x78fb23e8, 0x50523db0, 0x77371831, 0xbe3c0dd2, 0x99592853, |
| 9382 | 0xb1f0360b, 0x9695138a, 0xe1a20bbb, 0xc6c72e3a, 0xee6e3062, |
| 9383 | 0xc90b15e3, 0x3d7f6b7f, 0x1a1a4efe, 0x32b350a6, 0x15d67527, |
| 9384 | 0x62e16d16, 0x45844897, 0x6d2d56cf, 0x4a48734e, 0x834366ad, |
| 9385 | 0xa426432c, 0x8c8f5d74, 0xabea78f5, 0xdcdd60c4, 0xfbb84545, |
| 9386 | 0xd3115b1d, 0xf4747e9c, 0x7afed6fe, 0x5d9bf37f, 0x7532ed27, |
| 9387 | 0x5257c8a6, 0x2560d097, 0x0205f516, 0x2aaceb4e, 0x0dc9cecf, |
| 9388 | 0xc4c2db2c, 0xe3a7fead, 0xcb0ee0f5, 0xec6bc574, 0x9b5cdd45, |
| 9389 | 0xbc39f8c4, 0x9490e69c, 0xb3f5c31d, 0x4781bd81, 0x60e49800, |
| 9390 | 0x484d8658, 0x6f28a3d9, 0x181fbbe8, 0x3f7a9e69, 0x17d38031, |
| 9391 | 0x30b6a5b0, 0xf9bdb053, 0xded895d2, 0xf6718b8a, 0xd114ae0b, |
| 9392 | 0xa623b63a, 0x814693bb, 0xa9ef8de3, 0x8e8aa862, 0xb5fadc26, |
| 9393 | 0x929ff9a7, 0xba36e7ff, 0x9d53c27e, 0xea64da4f, 0xcd01ffce, |
| 9394 | 0xe5a8e196, 0xc2cdc417, 0x0bc6d1f4, 0x2ca3f475, 0x040aea2d, |
| 9395 | 0x236fcfac, 0x5458d79d, 0x733df21c, 0x5b94ec44, 0x7cf1c9c5, |
| 9396 | 0x8885b759, 0xafe092d8, 0x87498c80, 0xa02ca901, 0xd71bb130, |
| 9397 | 0xf07e94b1, 0xd8d78ae9, 0xffb2af68, 0x36b9ba8b, 0x11dc9f0a, |
| 9398 | 0x39758152, 0x1e10a4d3, 0x6927bce2, 0x4e429963, 0x66eb873b, |
| 9399 | 0x418ea2ba, 0xcf040ad8, 0xe8612f59, 0xc0c83101, 0xe7ad1480, |
| 9400 | 0x909a0cb1, 0xb7ff2930, 0x9f563768, 0xb83312e9, 0x7138070a, |
| 9401 | 0x565d228b, 0x7ef43cd3, 0x59911952, 0x2ea60163, 0x09c324e2, |
| 9402 | 0x216a3aba, 0x060f1f3b, 0xf27b61a7, 0xd51e4426, 0xfdb75a7e, |
| 9403 | 0xdad27fff, 0xade567ce, 0x8a80424f, 0xa2295c17, 0x854c7996, |
| 9404 | 0x4c476c75, 0x6b2249f4, 0x438b57ac, 0x64ee722d, 0x13d96a1c, |
| 9405 | 0x34bc4f9d, 0x1c1551c5, 0x3b707444, 0x6af5b94d, 0x4d909ccc, |
| 9406 | 0x65398294, 0x425ca715, 0x356bbf24, 0x120e9aa5, 0x3aa784fd, |
| 9407 | 0x1dc2a17c, 0xd4c9b49f, 0xf3ac911e, 0xdb058f46, 0xfc60aac7, |
| 9408 | 0x8b57b2f6, 0xac329777, 0x849b892f, 0xa3feacae, 0x578ad232, |
| 9409 | 0x70eff7b3, 0x5846e9eb, 0x7f23cc6a, 0x0814d45b, 0x2f71f1da, |
| 9410 | 0x07d8ef82, 0x20bdca03, 0xe9b6dfe0, 0xced3fa61, 0xe67ae439, |
| 9411 | 0xc11fc1b8, 0xb628d989, 0x914dfc08, 0xb9e4e250, 0x9e81c7d1, |
| 9412 | 0x100b6fb3, 0x376e4a32, 0x1fc7546a, 0x38a271eb, 0x4f9569da, |
| 9413 | 0x68f04c5b, 0x40595203, 0x673c7782, 0xae376261, 0x895247e0, |
| 9414 | 0xa1fb59b8, 0x869e7c39, 0xf1a96408, 0xd6cc4189, 0xfe655fd1, |
| 9415 | 0xd9007a50, 0x2d7404cc, 0x0a11214d, 0x22b83f15, 0x05dd1a94, |
| 9416 | 0x72ea02a5, 0x558f2724, 0x7d26397c, 0x5a431cfd, 0x9348091e, |
| 9417 | 0xb42d2c9f, 0x9c8432c7, 0xbbe11746, 0xccd60f77, 0xebb32af6, |
| 9418 | 0xc31a34ae, 0xe47f112f, 0xdf0f656b, 0xf86a40ea, 0xd0c35eb2, |
| 9419 | 0xf7a67b33, 0x80916302, 0xa7f44683, 0x8f5d58db, 0xa8387d5a, |
| 9420 | 0x613368b9, 0x46564d38, 0x6eff5360, 0x499a76e1, 0x3ead6ed0, |
| 9421 | 0x19c84b51, 0x31615509, 0x16047088, 0xe2700e14, 0xc5152b95, |
| 9422 | 0xedbc35cd, 0xcad9104c, 0xbdee087d, 0x9a8b2dfc, 0xb22233a4, |
| 9423 | 0x95471625, 0x5c4c03c6, 0x7b292647, 0x5380381f, 0x74e51d9e, |
| 9424 | 0x03d205af, 0x24b7202e, 0x0c1e3e76, 0x2b7b1bf7, 0xa5f1b395, |
| 9425 | 0x82949614, 0xaa3d884c, 0x8d58adcd, 0xfa6fb5fc, 0xdd0a907d, |
| 9426 | 0xf5a38e25, 0xd2c6aba4, 0x1bcdbe47, 0x3ca89bc6, 0x1401859e, |
| 9427 | 0x3364a01f, 0x4453b82e, 0x63369daf, 0x4b9f83f7, 0x6cfaa676, |
| 9428 | 0x988ed8ea, 0xbfebfd6b, 0x9742e333, 0xb027c6b2, 0xc710de83, |
| 9429 | 0xe075fb02, 0xc8dce55a, 0xefb9c0db, 0x26b2d538, 0x01d7f0b9, |
| 9430 | 0x297eeee1, 0x0e1bcb60, 0x792cd351, 0x5e49f6d0, 0x76e0e888, |
| 9431 | 0x5185cd09}}; |
| 9432 | |
| 9433 | #endif |
| 9434 | |
| 9435 | #endif |
| 9436 | |
| 9437 | #endif |
| 9438 | |
| 9439 | local const z_crc_t FAR x2n_table[] = { |
| 9440 | 0x40000000, 0x20000000, 0x08000000, 0x00800000, 0x00008000, |
| 9441 | 0xedb88320, 0xb1e6b092, 0xa06a2517, 0xed627dae, 0x88d14467, |
| 9442 | 0xd7bbfe6a, 0xec447f11, 0x8e7ea170, 0x6427800e, 0x4d47bae0, |
| 9443 | 0x09fe548f, 0x83852d0f, 0x30362f1a, 0x7b5a9cc3, 0x31fec169, |
| 9444 | 0x9fec022a, 0x6c8dedc4, 0x15d6874d, 0x5fde7a4e, 0xbad90e37, |
| 9445 | 0x2e4e5eef, 0x4eaba214, 0xa8a472c0, 0x429a969e, 0x148d302a, |
| 9446 | 0xc40ba6d0, 0xc4e22c3c}; |
| 9447 |
+78
-30
| --- compat/zlib/deflate.c | ||
| +++ compat/zlib/deflate.c | ||
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | /* deflate.c -- compress data using the deflation algorithm |
| 2 | - * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler | |
| 2 | + * Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler | |
| 3 | 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | 4 | */ |
| 5 | 5 | |
| 6 | 6 | /* |
| 7 | 7 | * ALGORITHM |
| @@ -50,11 +50,11 @@ | ||
| 50 | 50 | /* @(#) $Id$ */ |
| 51 | 51 | |
| 52 | 52 | #include "deflate.h" |
| 53 | 53 | |
| 54 | 54 | const char deflate_copyright[] = |
| 55 | - " deflate 1.2.11 Copyright 1995-2017 Jean-loup Gailly and Mark Adler "; | |
| 55 | + " deflate 1.2.12 Copyright 1995-2022 Jean-loup Gailly and Mark Adler "; | |
| 56 | 56 | /* |
| 57 | 57 | If you use the zlib library in a product, an acknowledgment is welcome |
| 58 | 58 | in the documentation of your product. If for some reason you cannot |
| 59 | 59 | include such an acknowledgment, I would appreciate that you keep this |
| 60 | 60 | copyright string in the executable of your product. |
| @@ -188,12 +188,15 @@ | ||
| 188 | 188 | /* =========================================================================== |
| 189 | 189 | * Initialize the hash table (avoiding 64K overflow for 16 bit systems). |
| 190 | 190 | * prev[] will be initialized on the fly. |
| 191 | 191 | */ |
| 192 | 192 | #define CLEAR_HASH(s) \ |
| 193 | - s->head[s->hash_size-1] = NIL; \ | |
| 194 | - zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head)); | |
| 193 | + do { \ | |
| 194 | + s->head[s->hash_size-1] = NIL; \ | |
| 195 | + zmemzero((Bytef *)s->head, \ | |
| 196 | + (unsigned)(s->hash_size-1)*sizeof(*s->head)); \ | |
| 197 | + } while (0) | |
| 195 | 198 | |
| 196 | 199 | /* =========================================================================== |
| 197 | 200 | * Slide the hash table when sliding the window down (could be avoided with 32 |
| 198 | 201 | * bit values at the expense of memory usage). We slide even when level == 0 to |
| 199 | 202 | * keep the hash table consistent if we switch back to level > 0 later. |
| @@ -250,15 +253,10 @@ | ||
| 250 | 253 | { |
| 251 | 254 | deflate_state *s; |
| 252 | 255 | int wrap = 1; |
| 253 | 256 | static const char my_version[] = ZLIB_VERSION; |
| 254 | 257 | |
| 255 | - ushf *overlay; | |
| 256 | - /* We overlay pending_buf and d_buf+l_buf. This works since the average | |
| 257 | - * output size for (length,distance) codes is <= 24 bits. | |
| 258 | - */ | |
| 259 | - | |
| 260 | 258 | if (version == Z_NULL || version[0] != my_version[0] || |
| 261 | 259 | stream_size != sizeof(z_stream)) { |
| 262 | 260 | return Z_VERSION_ERROR; |
| 263 | 261 | } |
| 264 | 262 | if (strm == Z_NULL) return Z_STREAM_ERROR; |
| @@ -324,23 +322,65 @@ | ||
| 324 | 322 | |
| 325 | 323 | s->high_water = 0; /* nothing written to s->window yet */ |
| 326 | 324 | |
| 327 | 325 | s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ |
| 328 | 326 | |
| 329 | - overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); | |
| 330 | - s->pending_buf = (uchf *) overlay; | |
| 331 | - s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L); | |
| 327 | + /* We overlay pending_buf and sym_buf. This works since the average size | |
| 328 | + * for length/distance pairs over any compressed block is assured to be 31 | |
| 329 | + * bits or less. | |
| 330 | + * | |
| 331 | + * Analysis: The longest fixed codes are a length code of 8 bits plus 5 | |
| 332 | + * extra bits, for lengths 131 to 257. The longest fixed distance codes are | |
| 333 | + * 5 bits plus 13 extra bits, for distances 16385 to 32768. The longest | |
| 334 | + * possible fixed-codes length/distance pair is then 31 bits total. | |
| 335 | + * | |
| 336 | + * sym_buf starts one-fourth of the way into pending_buf. So there are | |
| 337 | + * three bytes in sym_buf for every four bytes in pending_buf. Each symbol | |
| 338 | + * in sym_buf is three bytes -- two for the distance and one for the | |
| 339 | + * literal/length. As each symbol is consumed, the pointer to the next | |
| 340 | + * sym_buf value to read moves forward three bytes. From that symbol, up to | |
| 341 | + * 31 bits are written to pending_buf. The closest the written pending_buf | |
| 342 | + * bits gets to the next sym_buf symbol to read is just before the last | |
| 343 | + * code is written. At that time, 31*(n-2) bits have been written, just | |
| 344 | + * after 24*(n-2) bits have been consumed from sym_buf. sym_buf starts at | |
| 345 | + * 8*n bits into pending_buf. (Note that the symbol buffer fills when n-1 | |
| 346 | + * symbols are written.) The closest the writing gets to what is unread is | |
| 347 | + * then n+14 bits. Here n is lit_bufsize, which is 16384 by default, and | |
| 348 | + * can range from 128 to 32768. | |
| 349 | + * | |
| 350 | + * Therefore, at a minimum, there are 142 bits of space between what is | |
| 351 | + * written and what is read in the overlain buffers, so the symbols cannot | |
| 352 | + * be overwritten by the compressed data. That space is actually 139 bits, | |
| 353 | + * due to the three-bit fixed-code block header. | |
| 354 | + * | |
| 355 | + * That covers the case where either Z_FIXED is specified, forcing fixed | |
| 356 | + * codes, or when the use of fixed codes is chosen, because that choice | |
| 357 | + * results in a smaller compressed block than dynamic codes. That latter | |
| 358 | + * condition then assures that the above analysis also covers all dynamic | |
| 359 | + * blocks. A dynamic-code block will only be chosen to be emitted if it has | |
| 360 | + * fewer bits than a fixed-code block would for the same set of symbols. | |
| 361 | + * Therefore its average symbol length is assured to be less than 31. So | |
| 362 | + * the compressed data for a dynamic block also cannot overwrite the | |
| 363 | + * symbols from which it is being constructed. | |
| 364 | + */ | |
| 365 | + | |
| 366 | + s->pending_buf = (uchf *) ZALLOC(strm, s->lit_bufsize, 4); | |
| 367 | + s->pending_buf_size = (ulg)s->lit_bufsize * 4; | |
| 332 | 368 | |
| 333 | 369 | if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || |
| 334 | 370 | s->pending_buf == Z_NULL) { |
| 335 | 371 | s->status = FINISH_STATE; |
| 336 | 372 | strm->msg = ERR_MSG(Z_MEM_ERROR); |
| 337 | 373 | deflateEnd (strm); |
| 338 | 374 | return Z_MEM_ERROR; |
| 339 | 375 | } |
| 340 | - s->d_buf = overlay + s->lit_bufsize/sizeof(ush); | |
| 341 | - s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; | |
| 376 | + s->sym_buf = s->pending_buf + s->lit_bufsize; | |
| 377 | + s->sym_end = (s->lit_bufsize - 1) * 3; | |
| 378 | + /* We avoid equality with lit_bufsize*3 because of wraparound at 64K | |
| 379 | + * on 16 bit machines and because stored blocks are restricted to | |
| 380 | + * 64K-1 bytes. | |
| 381 | + */ | |
| 342 | 382 | |
| 343 | 383 | s->level = level; |
| 344 | 384 | s->strategy = strategy; |
| 345 | 385 | s->method = (Byte)method; |
| 346 | 386 | |
| @@ -486,17 +526,17 @@ | ||
| 486 | 526 | } |
| 487 | 527 | s->status = |
| 488 | 528 | #ifdef GZIP |
| 489 | 529 | s->wrap == 2 ? GZIP_STATE : |
| 490 | 530 | #endif |
| 491 | - s->wrap ? INIT_STATE : BUSY_STATE; | |
| 531 | + INIT_STATE; | |
| 492 | 532 | strm->adler = |
| 493 | 533 | #ifdef GZIP |
| 494 | 534 | s->wrap == 2 ? crc32(0L, Z_NULL, 0) : |
| 495 | 535 | #endif |
| 496 | 536 | adler32(0L, Z_NULL, 0); |
| 497 | - s->last_flush = Z_NO_FLUSH; | |
| 537 | + s->last_flush = -2; | |
| 498 | 538 | |
| 499 | 539 | _tr_init(s); |
| 500 | 540 | |
| 501 | 541 | return Z_OK; |
| 502 | 542 | } |
| @@ -547,11 +587,12 @@ | ||
| 547 | 587 | deflate_state *s; |
| 548 | 588 | int put; |
| 549 | 589 | |
| 550 | 590 | if (deflateStateCheck(strm)) return Z_STREAM_ERROR; |
| 551 | 591 | s = strm->state; |
| 552 | - if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3)) | |
| 592 | + if (bits < 0 || bits > 16 || | |
| 593 | + s->sym_buf < s->pending_out + ((Buf_size + 7) >> 3)) | |
| 553 | 594 | return Z_BUF_ERROR; |
| 554 | 595 | do { |
| 555 | 596 | put = Buf_size - s->bi_valid; |
| 556 | 597 | if (put > bits) |
| 557 | 598 | put = bits; |
| @@ -585,16 +626,16 @@ | ||
| 585 | 626 | return Z_STREAM_ERROR; |
| 586 | 627 | } |
| 587 | 628 | func = configuration_table[s->level].func; |
| 588 | 629 | |
| 589 | 630 | if ((strategy != s->strategy || func != configuration_table[level].func) && |
| 590 | - s->high_water) { | |
| 631 | + s->last_flush != -2) { | |
| 591 | 632 | /* Flush the last buffer: */ |
| 592 | 633 | int err = deflate(strm, Z_BLOCK); |
| 593 | 634 | if (err == Z_STREAM_ERROR) |
| 594 | 635 | return err; |
| 595 | - if (strm->avail_out == 0) | |
| 636 | + if (strm->avail_in || (s->strstart - s->block_start) + s->lookahead) | |
| 596 | 637 | return Z_BUF_ERROR; |
| 597 | 638 | } |
| 598 | 639 | if (s->level != level) { |
| 599 | 640 | if (s->level == 0 && s->matches != 0) { |
| 600 | 641 | if (s->matches == 1) |
| @@ -809,10 +850,12 @@ | ||
| 809 | 850 | if (s->status == FINISH_STATE && strm->avail_in != 0) { |
| 810 | 851 | ERR_RETURN(strm, Z_BUF_ERROR); |
| 811 | 852 | } |
| 812 | 853 | |
| 813 | 854 | /* Write the header */ |
| 855 | + if (s->status == INIT_STATE && s->wrap == 0) | |
| 856 | + s->status = BUSY_STATE; | |
| 814 | 857 | if (s->status == INIT_STATE) { |
| 815 | 858 | /* zlib header */ |
| 816 | 859 | uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; |
| 817 | 860 | uInt level_flags; |
| 818 | 861 | |
| @@ -1106,11 +1149,10 @@ | ||
| 1106 | 1149 | #ifdef MAXSEG_64K |
| 1107 | 1150 | return Z_STREAM_ERROR; |
| 1108 | 1151 | #else |
| 1109 | 1152 | deflate_state *ds; |
| 1110 | 1153 | deflate_state *ss; |
| 1111 | - ushf *overlay; | |
| 1112 | 1154 | |
| 1113 | 1155 | |
| 1114 | 1156 | if (deflateStateCheck(source) || dest == Z_NULL) { |
| 1115 | 1157 | return Z_STREAM_ERROR; |
| 1116 | 1158 | } |
| @@ -1126,12 +1168,11 @@ | ||
| 1126 | 1168 | ds->strm = dest; |
| 1127 | 1169 | |
| 1128 | 1170 | ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); |
| 1129 | 1171 | ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); |
| 1130 | 1172 | ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); |
| 1131 | - overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2); | |
| 1132 | - ds->pending_buf = (uchf *) overlay; | |
| 1173 | + ds->pending_buf = (uchf *) ZALLOC(dest, ds->lit_bufsize, 4); | |
| 1133 | 1174 | |
| 1134 | 1175 | if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL || |
| 1135 | 1176 | ds->pending_buf == Z_NULL) { |
| 1136 | 1177 | deflateEnd (dest); |
| 1137 | 1178 | return Z_MEM_ERROR; |
| @@ -1141,12 +1182,11 @@ | ||
| 1141 | 1182 | zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos)); |
| 1142 | 1183 | zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos)); |
| 1143 | 1184 | zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size); |
| 1144 | 1185 | |
| 1145 | 1186 | ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); |
| 1146 | - ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush); | |
| 1147 | - ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize; | |
| 1187 | + ds->sym_buf = ds->pending_buf + ds->lit_bufsize; | |
| 1148 | 1188 | |
| 1149 | 1189 | ds->l_desc.dyn_tree = ds->dyn_ltree; |
| 1150 | 1190 | ds->d_desc.dyn_tree = ds->dyn_dtree; |
| 1151 | 1191 | ds->bl_desc.dyn_tree = ds->bl_tree; |
| 1152 | 1192 | |
| @@ -1511,10 +1551,12 @@ | ||
| 1511 | 1551 | |
| 1512 | 1552 | zmemcpy(s->window, s->window+wsize, (unsigned)wsize - more); |
| 1513 | 1553 | s->match_start -= wsize; |
| 1514 | 1554 | s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ |
| 1515 | 1555 | s->block_start -= (long) wsize; |
| 1556 | + if (s->insert > s->strstart) | |
| 1557 | + s->insert = s->strstart; | |
| 1516 | 1558 | slide_hash(s); |
| 1517 | 1559 | more += wsize; |
| 1518 | 1560 | } |
| 1519 | 1561 | if (s->strm->avail_in == 0) break; |
| 1520 | 1562 | |
| @@ -1740,24 +1782,27 @@ | ||
| 1740 | 1782 | */ |
| 1741 | 1783 | if (used >= s->w_size) { /* supplant the previous history */ |
| 1742 | 1784 | s->matches = 2; /* clear hash */ |
| 1743 | 1785 | zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size); |
| 1744 | 1786 | s->strstart = s->w_size; |
| 1787 | + s->insert = s->strstart; | |
| 1745 | 1788 | } |
| 1746 | 1789 | else { |
| 1747 | 1790 | if (s->window_size - s->strstart <= used) { |
| 1748 | 1791 | /* Slide the window down. */ |
| 1749 | 1792 | s->strstart -= s->w_size; |
| 1750 | 1793 | zmemcpy(s->window, s->window + s->w_size, s->strstart); |
| 1751 | 1794 | if (s->matches < 2) |
| 1752 | 1795 | s->matches++; /* add a pending slide_hash() */ |
| 1796 | + if (s->insert > s->strstart) | |
| 1797 | + s->insert = s->strstart; | |
| 1753 | 1798 | } |
| 1754 | 1799 | zmemcpy(s->window + s->strstart, s->strm->next_in - used, used); |
| 1755 | 1800 | s->strstart += used; |
| 1801 | + s->insert += MIN(used, s->w_size - s->insert); | |
| 1756 | 1802 | } |
| 1757 | 1803 | s->block_start = s->strstart; |
| 1758 | - s->insert += MIN(used, s->w_size - s->insert); | |
| 1759 | 1804 | } |
| 1760 | 1805 | if (s->high_water < s->strstart) |
| 1761 | 1806 | s->high_water = s->strstart; |
| 1762 | 1807 | |
| 1763 | 1808 | /* If the last block was written to next_out, then done. */ |
| @@ -1768,25 +1813,28 @@ | ||
| 1768 | 1813 | if (flush != Z_NO_FLUSH && flush != Z_FINISH && |
| 1769 | 1814 | s->strm->avail_in == 0 && (long)s->strstart == s->block_start) |
| 1770 | 1815 | return block_done; |
| 1771 | 1816 | |
| 1772 | 1817 | /* Fill the window with any remaining input. */ |
| 1773 | - have = s->window_size - s->strstart - 1; | |
| 1818 | + have = s->window_size - s->strstart; | |
| 1774 | 1819 | if (s->strm->avail_in > have && s->block_start >= (long)s->w_size) { |
| 1775 | 1820 | /* Slide the window down. */ |
| 1776 | 1821 | s->block_start -= s->w_size; |
| 1777 | 1822 | s->strstart -= s->w_size; |
| 1778 | 1823 | zmemcpy(s->window, s->window + s->w_size, s->strstart); |
| 1779 | 1824 | if (s->matches < 2) |
| 1780 | 1825 | s->matches++; /* add a pending slide_hash() */ |
| 1781 | 1826 | have += s->w_size; /* more space now */ |
| 1827 | + if (s->insert > s->strstart) | |
| 1828 | + s->insert = s->strstart; | |
| 1782 | 1829 | } |
| 1783 | 1830 | if (have > s->strm->avail_in) |
| 1784 | 1831 | have = s->strm->avail_in; |
| 1785 | 1832 | if (have) { |
| 1786 | 1833 | read_buf(s->strm, s->window + s->strstart, have); |
| 1787 | 1834 | s->strstart += have; |
| 1835 | + s->insert += MIN(have, s->w_size - s->insert); | |
| 1788 | 1836 | } |
| 1789 | 1837 | if (s->high_water < s->strstart) |
| 1790 | 1838 | s->high_water = s->strstart; |
| 1791 | 1839 | |
| 1792 | 1840 | /* There was not enough avail_out to write a complete worthy or flushed |
| @@ -1910,11 +1958,11 @@ | ||
| 1910 | 1958 | s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1; |
| 1911 | 1959 | if (flush == Z_FINISH) { |
| 1912 | 1960 | FLUSH_BLOCK(s, 1); |
| 1913 | 1961 | return finish_done; |
| 1914 | 1962 | } |
| 1915 | - if (s->last_lit) | |
| 1963 | + if (s->sym_next) | |
| 1916 | 1964 | FLUSH_BLOCK(s, 0); |
| 1917 | 1965 | return block_done; |
| 1918 | 1966 | } |
| 1919 | 1967 | |
| 1920 | 1968 | #ifndef FASTEST |
| @@ -2041,11 +2089,11 @@ | ||
| 2041 | 2089 | s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1; |
| 2042 | 2090 | if (flush == Z_FINISH) { |
| 2043 | 2091 | FLUSH_BLOCK(s, 1); |
| 2044 | 2092 | return finish_done; |
| 2045 | 2093 | } |
| 2046 | - if (s->last_lit) | |
| 2094 | + if (s->sym_next) | |
| 2047 | 2095 | FLUSH_BLOCK(s, 0); |
| 2048 | 2096 | return block_done; |
| 2049 | 2097 | } |
| 2050 | 2098 | #endif /* FASTEST */ |
| 2051 | 2099 | |
| @@ -2116,11 +2164,11 @@ | ||
| 2116 | 2164 | s->insert = 0; |
| 2117 | 2165 | if (flush == Z_FINISH) { |
| 2118 | 2166 | FLUSH_BLOCK(s, 1); |
| 2119 | 2167 | return finish_done; |
| 2120 | 2168 | } |
| 2121 | - if (s->last_lit) | |
| 2169 | + if (s->sym_next) | |
| 2122 | 2170 | FLUSH_BLOCK(s, 0); |
| 2123 | 2171 | return block_done; |
| 2124 | 2172 | } |
| 2125 | 2173 | |
| 2126 | 2174 | /* =========================================================================== |
| @@ -2155,9 +2203,9 @@ | ||
| 2155 | 2203 | s->insert = 0; |
| 2156 | 2204 | if (flush == Z_FINISH) { |
| 2157 | 2205 | FLUSH_BLOCK(s, 1); |
| 2158 | 2206 | return finish_done; |
| 2159 | 2207 | } |
| 2160 | - if (s->last_lit) | |
| 2208 | + if (s->sym_next) | |
| 2161 | 2209 | FLUSH_BLOCK(s, 0); |
| 2162 | 2210 | return block_done; |
| 2163 | 2211 | } |
| 2164 | 2212 |
| --- compat/zlib/deflate.c | |
| +++ compat/zlib/deflate.c | |
| @@ -1,7 +1,7 @@ | |
| 1 | /* deflate.c -- compress data using the deflation algorithm |
| 2 | * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | /* |
| 7 | * ALGORITHM |
| @@ -50,11 +50,11 @@ | |
| 50 | /* @(#) $Id$ */ |
| 51 | |
| 52 | #include "deflate.h" |
| 53 | |
| 54 | const char deflate_copyright[] = |
| 55 | " deflate 1.2.11 Copyright 1995-2017 Jean-loup Gailly and Mark Adler "; |
| 56 | /* |
| 57 | If you use the zlib library in a product, an acknowledgment is welcome |
| 58 | in the documentation of your product. If for some reason you cannot |
| 59 | include such an acknowledgment, I would appreciate that you keep this |
| 60 | copyright string in the executable of your product. |
| @@ -188,12 +188,15 @@ | |
| 188 | /* =========================================================================== |
| 189 | * Initialize the hash table (avoiding 64K overflow for 16 bit systems). |
| 190 | * prev[] will be initialized on the fly. |
| 191 | */ |
| 192 | #define CLEAR_HASH(s) \ |
| 193 | s->head[s->hash_size-1] = NIL; \ |
| 194 | zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head)); |
| 195 | |
| 196 | /* =========================================================================== |
| 197 | * Slide the hash table when sliding the window down (could be avoided with 32 |
| 198 | * bit values at the expense of memory usage). We slide even when level == 0 to |
| 199 | * keep the hash table consistent if we switch back to level > 0 later. |
| @@ -250,15 +253,10 @@ | |
| 250 | { |
| 251 | deflate_state *s; |
| 252 | int wrap = 1; |
| 253 | static const char my_version[] = ZLIB_VERSION; |
| 254 | |
| 255 | ushf *overlay; |
| 256 | /* We overlay pending_buf and d_buf+l_buf. This works since the average |
| 257 | * output size for (length,distance) codes is <= 24 bits. |
| 258 | */ |
| 259 | |
| 260 | if (version == Z_NULL || version[0] != my_version[0] || |
| 261 | stream_size != sizeof(z_stream)) { |
| 262 | return Z_VERSION_ERROR; |
| 263 | } |
| 264 | if (strm == Z_NULL) return Z_STREAM_ERROR; |
| @@ -324,23 +322,65 @@ | |
| 324 | |
| 325 | s->high_water = 0; /* nothing written to s->window yet */ |
| 326 | |
| 327 | s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ |
| 328 | |
| 329 | overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); |
| 330 | s->pending_buf = (uchf *) overlay; |
| 331 | s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L); |
| 332 | |
| 333 | if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || |
| 334 | s->pending_buf == Z_NULL) { |
| 335 | s->status = FINISH_STATE; |
| 336 | strm->msg = ERR_MSG(Z_MEM_ERROR); |
| 337 | deflateEnd (strm); |
| 338 | return Z_MEM_ERROR; |
| 339 | } |
| 340 | s->d_buf = overlay + s->lit_bufsize/sizeof(ush); |
| 341 | s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; |
| 342 | |
| 343 | s->level = level; |
| 344 | s->strategy = strategy; |
| 345 | s->method = (Byte)method; |
| 346 | |
| @@ -486,17 +526,17 @@ | |
| 486 | } |
| 487 | s->status = |
| 488 | #ifdef GZIP |
| 489 | s->wrap == 2 ? GZIP_STATE : |
| 490 | #endif |
| 491 | s->wrap ? INIT_STATE : BUSY_STATE; |
| 492 | strm->adler = |
| 493 | #ifdef GZIP |
| 494 | s->wrap == 2 ? crc32(0L, Z_NULL, 0) : |
| 495 | #endif |
| 496 | adler32(0L, Z_NULL, 0); |
| 497 | s->last_flush = Z_NO_FLUSH; |
| 498 | |
| 499 | _tr_init(s); |
| 500 | |
| 501 | return Z_OK; |
| 502 | } |
| @@ -547,11 +587,12 @@ | |
| 547 | deflate_state *s; |
| 548 | int put; |
| 549 | |
| 550 | if (deflateStateCheck(strm)) return Z_STREAM_ERROR; |
| 551 | s = strm->state; |
| 552 | if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3)) |
| 553 | return Z_BUF_ERROR; |
| 554 | do { |
| 555 | put = Buf_size - s->bi_valid; |
| 556 | if (put > bits) |
| 557 | put = bits; |
| @@ -585,16 +626,16 @@ | |
| 585 | return Z_STREAM_ERROR; |
| 586 | } |
| 587 | func = configuration_table[s->level].func; |
| 588 | |
| 589 | if ((strategy != s->strategy || func != configuration_table[level].func) && |
| 590 | s->high_water) { |
| 591 | /* Flush the last buffer: */ |
| 592 | int err = deflate(strm, Z_BLOCK); |
| 593 | if (err == Z_STREAM_ERROR) |
| 594 | return err; |
| 595 | if (strm->avail_out == 0) |
| 596 | return Z_BUF_ERROR; |
| 597 | } |
| 598 | if (s->level != level) { |
| 599 | if (s->level == 0 && s->matches != 0) { |
| 600 | if (s->matches == 1) |
| @@ -809,10 +850,12 @@ | |
| 809 | if (s->status == FINISH_STATE && strm->avail_in != 0) { |
| 810 | ERR_RETURN(strm, Z_BUF_ERROR); |
| 811 | } |
| 812 | |
| 813 | /* Write the header */ |
| 814 | if (s->status == INIT_STATE) { |
| 815 | /* zlib header */ |
| 816 | uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; |
| 817 | uInt level_flags; |
| 818 | |
| @@ -1106,11 +1149,10 @@ | |
| 1106 | #ifdef MAXSEG_64K |
| 1107 | return Z_STREAM_ERROR; |
| 1108 | #else |
| 1109 | deflate_state *ds; |
| 1110 | deflate_state *ss; |
| 1111 | ushf *overlay; |
| 1112 | |
| 1113 | |
| 1114 | if (deflateStateCheck(source) || dest == Z_NULL) { |
| 1115 | return Z_STREAM_ERROR; |
| 1116 | } |
| @@ -1126,12 +1168,11 @@ | |
| 1126 | ds->strm = dest; |
| 1127 | |
| 1128 | ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); |
| 1129 | ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); |
| 1130 | ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); |
| 1131 | overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2); |
| 1132 | ds->pending_buf = (uchf *) overlay; |
| 1133 | |
| 1134 | if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL || |
| 1135 | ds->pending_buf == Z_NULL) { |
| 1136 | deflateEnd (dest); |
| 1137 | return Z_MEM_ERROR; |
| @@ -1141,12 +1182,11 @@ | |
| 1141 | zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos)); |
| 1142 | zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos)); |
| 1143 | zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size); |
| 1144 | |
| 1145 | ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); |
| 1146 | ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush); |
| 1147 | ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize; |
| 1148 | |
| 1149 | ds->l_desc.dyn_tree = ds->dyn_ltree; |
| 1150 | ds->d_desc.dyn_tree = ds->dyn_dtree; |
| 1151 | ds->bl_desc.dyn_tree = ds->bl_tree; |
| 1152 | |
| @@ -1511,10 +1551,12 @@ | |
| 1511 | |
| 1512 | zmemcpy(s->window, s->window+wsize, (unsigned)wsize - more); |
| 1513 | s->match_start -= wsize; |
| 1514 | s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ |
| 1515 | s->block_start -= (long) wsize; |
| 1516 | slide_hash(s); |
| 1517 | more += wsize; |
| 1518 | } |
| 1519 | if (s->strm->avail_in == 0) break; |
| 1520 | |
| @@ -1740,24 +1782,27 @@ | |
| 1740 | */ |
| 1741 | if (used >= s->w_size) { /* supplant the previous history */ |
| 1742 | s->matches = 2; /* clear hash */ |
| 1743 | zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size); |
| 1744 | s->strstart = s->w_size; |
| 1745 | } |
| 1746 | else { |
| 1747 | if (s->window_size - s->strstart <= used) { |
| 1748 | /* Slide the window down. */ |
| 1749 | s->strstart -= s->w_size; |
| 1750 | zmemcpy(s->window, s->window + s->w_size, s->strstart); |
| 1751 | if (s->matches < 2) |
| 1752 | s->matches++; /* add a pending slide_hash() */ |
| 1753 | } |
| 1754 | zmemcpy(s->window + s->strstart, s->strm->next_in - used, used); |
| 1755 | s->strstart += used; |
| 1756 | } |
| 1757 | s->block_start = s->strstart; |
| 1758 | s->insert += MIN(used, s->w_size - s->insert); |
| 1759 | } |
| 1760 | if (s->high_water < s->strstart) |
| 1761 | s->high_water = s->strstart; |
| 1762 | |
| 1763 | /* If the last block was written to next_out, then done. */ |
| @@ -1768,25 +1813,28 @@ | |
| 1768 | if (flush != Z_NO_FLUSH && flush != Z_FINISH && |
| 1769 | s->strm->avail_in == 0 && (long)s->strstart == s->block_start) |
| 1770 | return block_done; |
| 1771 | |
| 1772 | /* Fill the window with any remaining input. */ |
| 1773 | have = s->window_size - s->strstart - 1; |
| 1774 | if (s->strm->avail_in > have && s->block_start >= (long)s->w_size) { |
| 1775 | /* Slide the window down. */ |
| 1776 | s->block_start -= s->w_size; |
| 1777 | s->strstart -= s->w_size; |
| 1778 | zmemcpy(s->window, s->window + s->w_size, s->strstart); |
| 1779 | if (s->matches < 2) |
| 1780 | s->matches++; /* add a pending slide_hash() */ |
| 1781 | have += s->w_size; /* more space now */ |
| 1782 | } |
| 1783 | if (have > s->strm->avail_in) |
| 1784 | have = s->strm->avail_in; |
| 1785 | if (have) { |
| 1786 | read_buf(s->strm, s->window + s->strstart, have); |
| 1787 | s->strstart += have; |
| 1788 | } |
| 1789 | if (s->high_water < s->strstart) |
| 1790 | s->high_water = s->strstart; |
| 1791 | |
| 1792 | /* There was not enough avail_out to write a complete worthy or flushed |
| @@ -1910,11 +1958,11 @@ | |
| 1910 | s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1; |
| 1911 | if (flush == Z_FINISH) { |
| 1912 | FLUSH_BLOCK(s, 1); |
| 1913 | return finish_done; |
| 1914 | } |
| 1915 | if (s->last_lit) |
| 1916 | FLUSH_BLOCK(s, 0); |
| 1917 | return block_done; |
| 1918 | } |
| 1919 | |
| 1920 | #ifndef FASTEST |
| @@ -2041,11 +2089,11 @@ | |
| 2041 | s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1; |
| 2042 | if (flush == Z_FINISH) { |
| 2043 | FLUSH_BLOCK(s, 1); |
| 2044 | return finish_done; |
| 2045 | } |
| 2046 | if (s->last_lit) |
| 2047 | FLUSH_BLOCK(s, 0); |
| 2048 | return block_done; |
| 2049 | } |
| 2050 | #endif /* FASTEST */ |
| 2051 | |
| @@ -2116,11 +2164,11 @@ | |
| 2116 | s->insert = 0; |
| 2117 | if (flush == Z_FINISH) { |
| 2118 | FLUSH_BLOCK(s, 1); |
| 2119 | return finish_done; |
| 2120 | } |
| 2121 | if (s->last_lit) |
| 2122 | FLUSH_BLOCK(s, 0); |
| 2123 | return block_done; |
| 2124 | } |
| 2125 | |
| 2126 | /* =========================================================================== |
| @@ -2155,9 +2203,9 @@ | |
| 2155 | s->insert = 0; |
| 2156 | if (flush == Z_FINISH) { |
| 2157 | FLUSH_BLOCK(s, 1); |
| 2158 | return finish_done; |
| 2159 | } |
| 2160 | if (s->last_lit) |
| 2161 | FLUSH_BLOCK(s, 0); |
| 2162 | return block_done; |
| 2163 | } |
| 2164 |
| --- compat/zlib/deflate.c | |
| +++ compat/zlib/deflate.c | |
| @@ -1,7 +1,7 @@ | |
| 1 | /* deflate.c -- compress data using the deflation algorithm |
| 2 | * Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | /* |
| 7 | * ALGORITHM |
| @@ -50,11 +50,11 @@ | |
| 50 | /* @(#) $Id$ */ |
| 51 | |
| 52 | #include "deflate.h" |
| 53 | |
| 54 | const char deflate_copyright[] = |
| 55 | " deflate 1.2.12 Copyright 1995-2022 Jean-loup Gailly and Mark Adler "; |
| 56 | /* |
| 57 | If you use the zlib library in a product, an acknowledgment is welcome |
| 58 | in the documentation of your product. If for some reason you cannot |
| 59 | include such an acknowledgment, I would appreciate that you keep this |
| 60 | copyright string in the executable of your product. |
| @@ -188,12 +188,15 @@ | |
| 188 | /* =========================================================================== |
| 189 | * Initialize the hash table (avoiding 64K overflow for 16 bit systems). |
| 190 | * prev[] will be initialized on the fly. |
| 191 | */ |
| 192 | #define CLEAR_HASH(s) \ |
| 193 | do { \ |
| 194 | s->head[s->hash_size-1] = NIL; \ |
| 195 | zmemzero((Bytef *)s->head, \ |
| 196 | (unsigned)(s->hash_size-1)*sizeof(*s->head)); \ |
| 197 | } while (0) |
| 198 | |
| 199 | /* =========================================================================== |
| 200 | * Slide the hash table when sliding the window down (could be avoided with 32 |
| 201 | * bit values at the expense of memory usage). We slide even when level == 0 to |
| 202 | * keep the hash table consistent if we switch back to level > 0 later. |
| @@ -250,15 +253,10 @@ | |
| 253 | { |
| 254 | deflate_state *s; |
| 255 | int wrap = 1; |
| 256 | static const char my_version[] = ZLIB_VERSION; |
| 257 | |
| 258 | if (version == Z_NULL || version[0] != my_version[0] || |
| 259 | stream_size != sizeof(z_stream)) { |
| 260 | return Z_VERSION_ERROR; |
| 261 | } |
| 262 | if (strm == Z_NULL) return Z_STREAM_ERROR; |
| @@ -324,23 +322,65 @@ | |
| 322 | |
| 323 | s->high_water = 0; /* nothing written to s->window yet */ |
| 324 | |
| 325 | s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ |
| 326 | |
| 327 | /* We overlay pending_buf and sym_buf. This works since the average size |
| 328 | * for length/distance pairs over any compressed block is assured to be 31 |
| 329 | * bits or less. |
| 330 | * |
| 331 | * Analysis: The longest fixed codes are a length code of 8 bits plus 5 |
| 332 | * extra bits, for lengths 131 to 257. The longest fixed distance codes are |
| 333 | * 5 bits plus 13 extra bits, for distances 16385 to 32768. The longest |
| 334 | * possible fixed-codes length/distance pair is then 31 bits total. |
| 335 | * |
| 336 | * sym_buf starts one-fourth of the way into pending_buf. So there are |
| 337 | * three bytes in sym_buf for every four bytes in pending_buf. Each symbol |
| 338 | * in sym_buf is three bytes -- two for the distance and one for the |
| 339 | * literal/length. As each symbol is consumed, the pointer to the next |
| 340 | * sym_buf value to read moves forward three bytes. From that symbol, up to |
| 341 | * 31 bits are written to pending_buf. The closest the written pending_buf |
| 342 | * bits gets to the next sym_buf symbol to read is just before the last |
| 343 | * code is written. At that time, 31*(n-2) bits have been written, just |
| 344 | * after 24*(n-2) bits have been consumed from sym_buf. sym_buf starts at |
| 345 | * 8*n bits into pending_buf. (Note that the symbol buffer fills when n-1 |
| 346 | * symbols are written.) The closest the writing gets to what is unread is |
| 347 | * then n+14 bits. Here n is lit_bufsize, which is 16384 by default, and |
| 348 | * can range from 128 to 32768. |
| 349 | * |
| 350 | * Therefore, at a minimum, there are 142 bits of space between what is |
| 351 | * written and what is read in the overlain buffers, so the symbols cannot |
| 352 | * be overwritten by the compressed data. That space is actually 139 bits, |
| 353 | * due to the three-bit fixed-code block header. |
| 354 | * |
| 355 | * That covers the case where either Z_FIXED is specified, forcing fixed |
| 356 | * codes, or when the use of fixed codes is chosen, because that choice |
| 357 | * results in a smaller compressed block than dynamic codes. That latter |
| 358 | * condition then assures that the above analysis also covers all dynamic |
| 359 | * blocks. A dynamic-code block will only be chosen to be emitted if it has |
| 360 | * fewer bits than a fixed-code block would for the same set of symbols. |
| 361 | * Therefore its average symbol length is assured to be less than 31. So |
| 362 | * the compressed data for a dynamic block also cannot overwrite the |
| 363 | * symbols from which it is being constructed. |
| 364 | */ |
| 365 | |
| 366 | s->pending_buf = (uchf *) ZALLOC(strm, s->lit_bufsize, 4); |
| 367 | s->pending_buf_size = (ulg)s->lit_bufsize * 4; |
| 368 | |
| 369 | if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || |
| 370 | s->pending_buf == Z_NULL) { |
| 371 | s->status = FINISH_STATE; |
| 372 | strm->msg = ERR_MSG(Z_MEM_ERROR); |
| 373 | deflateEnd (strm); |
| 374 | return Z_MEM_ERROR; |
| 375 | } |
| 376 | s->sym_buf = s->pending_buf + s->lit_bufsize; |
| 377 | s->sym_end = (s->lit_bufsize - 1) * 3; |
| 378 | /* We avoid equality with lit_bufsize*3 because of wraparound at 64K |
| 379 | * on 16 bit machines and because stored blocks are restricted to |
| 380 | * 64K-1 bytes. |
| 381 | */ |
| 382 | |
| 383 | s->level = level; |
| 384 | s->strategy = strategy; |
| 385 | s->method = (Byte)method; |
| 386 | |
| @@ -486,17 +526,17 @@ | |
| 526 | } |
| 527 | s->status = |
| 528 | #ifdef GZIP |
| 529 | s->wrap == 2 ? GZIP_STATE : |
| 530 | #endif |
| 531 | INIT_STATE; |
| 532 | strm->adler = |
| 533 | #ifdef GZIP |
| 534 | s->wrap == 2 ? crc32(0L, Z_NULL, 0) : |
| 535 | #endif |
| 536 | adler32(0L, Z_NULL, 0); |
| 537 | s->last_flush = -2; |
| 538 | |
| 539 | _tr_init(s); |
| 540 | |
| 541 | return Z_OK; |
| 542 | } |
| @@ -547,11 +587,12 @@ | |
| 587 | deflate_state *s; |
| 588 | int put; |
| 589 | |
| 590 | if (deflateStateCheck(strm)) return Z_STREAM_ERROR; |
| 591 | s = strm->state; |
| 592 | if (bits < 0 || bits > 16 || |
| 593 | s->sym_buf < s->pending_out + ((Buf_size + 7) >> 3)) |
| 594 | return Z_BUF_ERROR; |
| 595 | do { |
| 596 | put = Buf_size - s->bi_valid; |
| 597 | if (put > bits) |
| 598 | put = bits; |
| @@ -585,16 +626,16 @@ | |
| 626 | return Z_STREAM_ERROR; |
| 627 | } |
| 628 | func = configuration_table[s->level].func; |
| 629 | |
| 630 | if ((strategy != s->strategy || func != configuration_table[level].func) && |
| 631 | s->last_flush != -2) { |
| 632 | /* Flush the last buffer: */ |
| 633 | int err = deflate(strm, Z_BLOCK); |
| 634 | if (err == Z_STREAM_ERROR) |
| 635 | return err; |
| 636 | if (strm->avail_in || (s->strstart - s->block_start) + s->lookahead) |
| 637 | return Z_BUF_ERROR; |
| 638 | } |
| 639 | if (s->level != level) { |
| 640 | if (s->level == 0 && s->matches != 0) { |
| 641 | if (s->matches == 1) |
| @@ -809,10 +850,12 @@ | |
| 850 | if (s->status == FINISH_STATE && strm->avail_in != 0) { |
| 851 | ERR_RETURN(strm, Z_BUF_ERROR); |
| 852 | } |
| 853 | |
| 854 | /* Write the header */ |
| 855 | if (s->status == INIT_STATE && s->wrap == 0) |
| 856 | s->status = BUSY_STATE; |
| 857 | if (s->status == INIT_STATE) { |
| 858 | /* zlib header */ |
| 859 | uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; |
| 860 | uInt level_flags; |
| 861 | |
| @@ -1106,11 +1149,10 @@ | |
| 1149 | #ifdef MAXSEG_64K |
| 1150 | return Z_STREAM_ERROR; |
| 1151 | #else |
| 1152 | deflate_state *ds; |
| 1153 | deflate_state *ss; |
| 1154 | |
| 1155 | |
| 1156 | if (deflateStateCheck(source) || dest == Z_NULL) { |
| 1157 | return Z_STREAM_ERROR; |
| 1158 | } |
| @@ -1126,12 +1168,11 @@ | |
| 1168 | ds->strm = dest; |
| 1169 | |
| 1170 | ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); |
| 1171 | ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); |
| 1172 | ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); |
| 1173 | ds->pending_buf = (uchf *) ZALLOC(dest, ds->lit_bufsize, 4); |
| 1174 | |
| 1175 | if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL || |
| 1176 | ds->pending_buf == Z_NULL) { |
| 1177 | deflateEnd (dest); |
| 1178 | return Z_MEM_ERROR; |
| @@ -1141,12 +1182,11 @@ | |
| 1182 | zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos)); |
| 1183 | zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos)); |
| 1184 | zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size); |
| 1185 | |
| 1186 | ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); |
| 1187 | ds->sym_buf = ds->pending_buf + ds->lit_bufsize; |
| 1188 | |
| 1189 | ds->l_desc.dyn_tree = ds->dyn_ltree; |
| 1190 | ds->d_desc.dyn_tree = ds->dyn_dtree; |
| 1191 | ds->bl_desc.dyn_tree = ds->bl_tree; |
| 1192 | |
| @@ -1511,10 +1551,12 @@ | |
| 1551 | |
| 1552 | zmemcpy(s->window, s->window+wsize, (unsigned)wsize - more); |
| 1553 | s->match_start -= wsize; |
| 1554 | s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ |
| 1555 | s->block_start -= (long) wsize; |
| 1556 | if (s->insert > s->strstart) |
| 1557 | s->insert = s->strstart; |
| 1558 | slide_hash(s); |
| 1559 | more += wsize; |
| 1560 | } |
| 1561 | if (s->strm->avail_in == 0) break; |
| 1562 | |
| @@ -1740,24 +1782,27 @@ | |
| 1782 | */ |
| 1783 | if (used >= s->w_size) { /* supplant the previous history */ |
| 1784 | s->matches = 2; /* clear hash */ |
| 1785 | zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size); |
| 1786 | s->strstart = s->w_size; |
| 1787 | s->insert = s->strstart; |
| 1788 | } |
| 1789 | else { |
| 1790 | if (s->window_size - s->strstart <= used) { |
| 1791 | /* Slide the window down. */ |
| 1792 | s->strstart -= s->w_size; |
| 1793 | zmemcpy(s->window, s->window + s->w_size, s->strstart); |
| 1794 | if (s->matches < 2) |
| 1795 | s->matches++; /* add a pending slide_hash() */ |
| 1796 | if (s->insert > s->strstart) |
| 1797 | s->insert = s->strstart; |
| 1798 | } |
| 1799 | zmemcpy(s->window + s->strstart, s->strm->next_in - used, used); |
| 1800 | s->strstart += used; |
| 1801 | s->insert += MIN(used, s->w_size - s->insert); |
| 1802 | } |
| 1803 | s->block_start = s->strstart; |
| 1804 | } |
| 1805 | if (s->high_water < s->strstart) |
| 1806 | s->high_water = s->strstart; |
| 1807 | |
| 1808 | /* If the last block was written to next_out, then done. */ |
| @@ -1768,25 +1813,28 @@ | |
| 1813 | if (flush != Z_NO_FLUSH && flush != Z_FINISH && |
| 1814 | s->strm->avail_in == 0 && (long)s->strstart == s->block_start) |
| 1815 | return block_done; |
| 1816 | |
| 1817 | /* Fill the window with any remaining input. */ |
| 1818 | have = s->window_size - s->strstart; |
| 1819 | if (s->strm->avail_in > have && s->block_start >= (long)s->w_size) { |
| 1820 | /* Slide the window down. */ |
| 1821 | s->block_start -= s->w_size; |
| 1822 | s->strstart -= s->w_size; |
| 1823 | zmemcpy(s->window, s->window + s->w_size, s->strstart); |
| 1824 | if (s->matches < 2) |
| 1825 | s->matches++; /* add a pending slide_hash() */ |
| 1826 | have += s->w_size; /* more space now */ |
| 1827 | if (s->insert > s->strstart) |
| 1828 | s->insert = s->strstart; |
| 1829 | } |
| 1830 | if (have > s->strm->avail_in) |
| 1831 | have = s->strm->avail_in; |
| 1832 | if (have) { |
| 1833 | read_buf(s->strm, s->window + s->strstart, have); |
| 1834 | s->strstart += have; |
| 1835 | s->insert += MIN(have, s->w_size - s->insert); |
| 1836 | } |
| 1837 | if (s->high_water < s->strstart) |
| 1838 | s->high_water = s->strstart; |
| 1839 | |
| 1840 | /* There was not enough avail_out to write a complete worthy or flushed |
| @@ -1910,11 +1958,11 @@ | |
| 1958 | s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1; |
| 1959 | if (flush == Z_FINISH) { |
| 1960 | FLUSH_BLOCK(s, 1); |
| 1961 | return finish_done; |
| 1962 | } |
| 1963 | if (s->sym_next) |
| 1964 | FLUSH_BLOCK(s, 0); |
| 1965 | return block_done; |
| 1966 | } |
| 1967 | |
| 1968 | #ifndef FASTEST |
| @@ -2041,11 +2089,11 @@ | |
| 2089 | s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1; |
| 2090 | if (flush == Z_FINISH) { |
| 2091 | FLUSH_BLOCK(s, 1); |
| 2092 | return finish_done; |
| 2093 | } |
| 2094 | if (s->sym_next) |
| 2095 | FLUSH_BLOCK(s, 0); |
| 2096 | return block_done; |
| 2097 | } |
| 2098 | #endif /* FASTEST */ |
| 2099 | |
| @@ -2116,11 +2164,11 @@ | |
| 2164 | s->insert = 0; |
| 2165 | if (flush == Z_FINISH) { |
| 2166 | FLUSH_BLOCK(s, 1); |
| 2167 | return finish_done; |
| 2168 | } |
| 2169 | if (s->sym_next) |
| 2170 | FLUSH_BLOCK(s, 0); |
| 2171 | return block_done; |
| 2172 | } |
| 2173 | |
| 2174 | /* =========================================================================== |
| @@ -2155,9 +2203,9 @@ | |
| 2203 | s->insert = 0; |
| 2204 | if (flush == Z_FINISH) { |
| 2205 | FLUSH_BLOCK(s, 1); |
| 2206 | return finish_done; |
| 2207 | } |
| 2208 | if (s->sym_next) |
| 2209 | FLUSH_BLOCK(s, 0); |
| 2210 | return block_done; |
| 2211 | } |
| 2212 |
+12
-15
| --- compat/zlib/deflate.h | ||
| +++ compat/zlib/deflate.h | ||
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | /* deflate.h -- internal compression state |
| 2 | - * Copyright (C) 1995-2016 Jean-loup Gailly | |
| 2 | + * Copyright (C) 1995-2018 Jean-loup Gailly | |
| 3 | 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | 4 | */ |
| 5 | 5 | |
| 6 | 6 | /* WARNING: this file should *not* be used by applications. It is |
| 7 | 7 | part of the implementation of the compression library and is |
| @@ -215,11 +215,11 @@ | ||
| 215 | 215 | |
| 216 | 216 | uch depth[2*L_CODES+1]; |
| 217 | 217 | /* Depth of each subtree used as tie breaker for trees of equal frequency |
| 218 | 218 | */ |
| 219 | 219 | |
| 220 | - uchf *l_buf; /* buffer for literals or lengths */ | |
| 220 | + uchf *sym_buf; /* buffer for distances and literals/lengths */ | |
| 221 | 221 | |
| 222 | 222 | uInt lit_bufsize; |
| 223 | 223 | /* Size of match buffer for literals/lengths. There are 4 reasons for |
| 224 | 224 | * limiting lit_bufsize to 64K: |
| 225 | 225 | * - frequencies can be kept in 16 bit counters |
| @@ -237,17 +237,12 @@ | ||
| 237 | 237 | * fast adaptation but have of course the overhead of transmitting |
| 238 | 238 | * trees more frequently. |
| 239 | 239 | * - I can't count above 4 |
| 240 | 240 | */ |
| 241 | 241 | |
| 242 | - uInt last_lit; /* running index in l_buf */ | |
| 243 | - | |
| 244 | - ushf *d_buf; | |
| 245 | - /* Buffer for distances. To simplify the code, d_buf and l_buf have | |
| 246 | - * the same number of elements. To use different lengths, an extra flag | |
| 247 | - * array would be necessary. | |
| 248 | - */ | |
| 242 | + uInt sym_next; /* running index in sym_buf */ | |
| 243 | + uInt sym_end; /* symbol table full when sym_next reaches this */ | |
| 249 | 244 | |
| 250 | 245 | ulg opt_len; /* bit length of current block with optimal trees */ |
| 251 | 246 | ulg static_len; /* bit length of current block with static trees */ |
| 252 | 247 | uInt matches; /* number of string matches in current block */ |
| 253 | 248 | uInt insert; /* bytes at end of window left to insert */ |
| @@ -323,27 +318,29 @@ | ||
| 323 | 318 | extern const uch ZLIB_INTERNAL _dist_code[]; |
| 324 | 319 | #endif |
| 325 | 320 | |
| 326 | 321 | # define _tr_tally_lit(s, c, flush) \ |
| 327 | 322 | { uch cc = (c); \ |
| 328 | - s->d_buf[s->last_lit] = 0; \ | |
| 329 | - s->l_buf[s->last_lit++] = cc; \ | |
| 323 | + s->sym_buf[s->sym_next++] = 0; \ | |
| 324 | + s->sym_buf[s->sym_next++] = 0; \ | |
| 325 | + s->sym_buf[s->sym_next++] = cc; \ | |
| 330 | 326 | s->dyn_ltree[cc].Freq++; \ |
| 331 | - flush = (s->last_lit == s->lit_bufsize-1); \ | |
| 327 | + flush = (s->sym_next == s->sym_end); \ | |
| 332 | 328 | } |
| 333 | 329 | # define _tr_tally_dist(s, distance, length, flush) \ |
| 334 | 330 | { uch len = (uch)(length); \ |
| 335 | 331 | ush dist = (ush)(distance); \ |
| 336 | - s->d_buf[s->last_lit] = dist; \ | |
| 337 | - s->l_buf[s->last_lit++] = len; \ | |
| 332 | + s->sym_buf[s->sym_next++] = dist; \ | |
| 333 | + s->sym_buf[s->sym_next++] = dist >> 8; \ | |
| 334 | + s->sym_buf[s->sym_next++] = len; \ | |
| 338 | 335 | dist--; \ |
| 339 | 336 | s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ |
| 340 | 337 | s->dyn_dtree[d_code(dist)].Freq++; \ |
| 341 | - flush = (s->last_lit == s->lit_bufsize-1); \ | |
| 338 | + flush = (s->sym_next == s->sym_end); \ | |
| 342 | 339 | } |
| 343 | 340 | #else |
| 344 | 341 | # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) |
| 345 | 342 | # define _tr_tally_dist(s, distance, length, flush) \ |
| 346 | 343 | flush = _tr_tally(s, distance, length) |
| 347 | 344 | #endif |
| 348 | 345 | |
| 349 | 346 | #endif /* DEFLATE_H */ |
| 350 | 347 |
| --- compat/zlib/deflate.h | |
| +++ compat/zlib/deflate.h | |
| @@ -1,7 +1,7 @@ | |
| 1 | /* deflate.h -- internal compression state |
| 2 | * Copyright (C) 1995-2016 Jean-loup Gailly |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | /* WARNING: this file should *not* be used by applications. It is |
| 7 | part of the implementation of the compression library and is |
| @@ -215,11 +215,11 @@ | |
| 215 | |
| 216 | uch depth[2*L_CODES+1]; |
| 217 | /* Depth of each subtree used as tie breaker for trees of equal frequency |
| 218 | */ |
| 219 | |
| 220 | uchf *l_buf; /* buffer for literals or lengths */ |
| 221 | |
| 222 | uInt lit_bufsize; |
| 223 | /* Size of match buffer for literals/lengths. There are 4 reasons for |
| 224 | * limiting lit_bufsize to 64K: |
| 225 | * - frequencies can be kept in 16 bit counters |
| @@ -237,17 +237,12 @@ | |
| 237 | * fast adaptation but have of course the overhead of transmitting |
| 238 | * trees more frequently. |
| 239 | * - I can't count above 4 |
| 240 | */ |
| 241 | |
| 242 | uInt last_lit; /* running index in l_buf */ |
| 243 | |
| 244 | ushf *d_buf; |
| 245 | /* Buffer for distances. To simplify the code, d_buf and l_buf have |
| 246 | * the same number of elements. To use different lengths, an extra flag |
| 247 | * array would be necessary. |
| 248 | */ |
| 249 | |
| 250 | ulg opt_len; /* bit length of current block with optimal trees */ |
| 251 | ulg static_len; /* bit length of current block with static trees */ |
| 252 | uInt matches; /* number of string matches in current block */ |
| 253 | uInt insert; /* bytes at end of window left to insert */ |
| @@ -323,27 +318,29 @@ | |
| 323 | extern const uch ZLIB_INTERNAL _dist_code[]; |
| 324 | #endif |
| 325 | |
| 326 | # define _tr_tally_lit(s, c, flush) \ |
| 327 | { uch cc = (c); \ |
| 328 | s->d_buf[s->last_lit] = 0; \ |
| 329 | s->l_buf[s->last_lit++] = cc; \ |
| 330 | s->dyn_ltree[cc].Freq++; \ |
| 331 | flush = (s->last_lit == s->lit_bufsize-1); \ |
| 332 | } |
| 333 | # define _tr_tally_dist(s, distance, length, flush) \ |
| 334 | { uch len = (uch)(length); \ |
| 335 | ush dist = (ush)(distance); \ |
| 336 | s->d_buf[s->last_lit] = dist; \ |
| 337 | s->l_buf[s->last_lit++] = len; \ |
| 338 | dist--; \ |
| 339 | s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ |
| 340 | s->dyn_dtree[d_code(dist)].Freq++; \ |
| 341 | flush = (s->last_lit == s->lit_bufsize-1); \ |
| 342 | } |
| 343 | #else |
| 344 | # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) |
| 345 | # define _tr_tally_dist(s, distance, length, flush) \ |
| 346 | flush = _tr_tally(s, distance, length) |
| 347 | #endif |
| 348 | |
| 349 | #endif /* DEFLATE_H */ |
| 350 |
| --- compat/zlib/deflate.h | |
| +++ compat/zlib/deflate.h | |
| @@ -1,7 +1,7 @@ | |
| 1 | /* deflate.h -- internal compression state |
| 2 | * Copyright (C) 1995-2018 Jean-loup Gailly |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | /* WARNING: this file should *not* be used by applications. It is |
| 7 | part of the implementation of the compression library and is |
| @@ -215,11 +215,11 @@ | |
| 215 | |
| 216 | uch depth[2*L_CODES+1]; |
| 217 | /* Depth of each subtree used as tie breaker for trees of equal frequency |
| 218 | */ |
| 219 | |
| 220 | uchf *sym_buf; /* buffer for distances and literals/lengths */ |
| 221 | |
| 222 | uInt lit_bufsize; |
| 223 | /* Size of match buffer for literals/lengths. There are 4 reasons for |
| 224 | * limiting lit_bufsize to 64K: |
| 225 | * - frequencies can be kept in 16 bit counters |
| @@ -237,17 +237,12 @@ | |
| 237 | * fast adaptation but have of course the overhead of transmitting |
| 238 | * trees more frequently. |
| 239 | * - I can't count above 4 |
| 240 | */ |
| 241 | |
| 242 | uInt sym_next; /* running index in sym_buf */ |
| 243 | uInt sym_end; /* symbol table full when sym_next reaches this */ |
| 244 | |
| 245 | ulg opt_len; /* bit length of current block with optimal trees */ |
| 246 | ulg static_len; /* bit length of current block with static trees */ |
| 247 | uInt matches; /* number of string matches in current block */ |
| 248 | uInt insert; /* bytes at end of window left to insert */ |
| @@ -323,27 +318,29 @@ | |
| 318 | extern const uch ZLIB_INTERNAL _dist_code[]; |
| 319 | #endif |
| 320 | |
| 321 | # define _tr_tally_lit(s, c, flush) \ |
| 322 | { uch cc = (c); \ |
| 323 | s->sym_buf[s->sym_next++] = 0; \ |
| 324 | s->sym_buf[s->sym_next++] = 0; \ |
| 325 | s->sym_buf[s->sym_next++] = cc; \ |
| 326 | s->dyn_ltree[cc].Freq++; \ |
| 327 | flush = (s->sym_next == s->sym_end); \ |
| 328 | } |
| 329 | # define _tr_tally_dist(s, distance, length, flush) \ |
| 330 | { uch len = (uch)(length); \ |
| 331 | ush dist = (ush)(distance); \ |
| 332 | s->sym_buf[s->sym_next++] = dist; \ |
| 333 | s->sym_buf[s->sym_next++] = dist >> 8; \ |
| 334 | s->sym_buf[s->sym_next++] = len; \ |
| 335 | dist--; \ |
| 336 | s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ |
| 337 | s->dyn_dtree[d_code(dist)].Freq++; \ |
| 338 | flush = (s->sym_next == s->sym_end); \ |
| 339 | } |
| 340 | #else |
| 341 | # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) |
| 342 | # define _tr_tally_dist(s, distance, length, flush) \ |
| 343 | flush = _tr_tally(s, distance, length) |
| 344 | #endif |
| 345 | |
| 346 | #endif /* DEFLATE_H */ |
| 347 |
| --- compat/zlib/examples/README.examples | ||
| +++ compat/zlib/examples/README.examples | ||
| @@ -32,10 +32,14 @@ | ||
| 32 | 32 | efficiently and robustly maintain a message log file in gzip format |
| 33 | 33 | - illustrates use of raw deflate, Z_PARTIAL_FLUSH, deflatePrime(), |
| 34 | 34 | and deflateSetDictionary() |
| 35 | 35 | - illustrates use of a gzip header extra field |
| 36 | 36 | |
| 37 | +gznorm.c | |
| 38 | + normalize a gzip file by combining members into a single member | |
| 39 | + - demonstrates how to concatenate deflate streams using Z_BLOCK | |
| 40 | + | |
| 37 | 41 | zlib_how.html |
| 38 | 42 | painfully comprehensive description of zpipe.c (see below) |
| 39 | 43 | - describes in excruciating detail the use of deflate() and inflate() |
| 40 | 44 | |
| 41 | 45 | zpipe.c |
| @@ -42,8 +46,9 @@ | ||
| 42 | 46 | reads and writes zlib streams from stdin to stdout |
| 43 | 47 | - illustrates the proper use of deflate() and inflate() |
| 44 | 48 | - deeply commented in zlib_how.html (see above) |
| 45 | 49 | |
| 46 | 50 | zran.c |
| 51 | +zran.h | |
| 47 | 52 | index a zlib or gzip stream and randomly access it |
| 48 | 53 | - illustrates the use of Z_BLOCK, inflatePrime(), and |
| 49 | 54 | inflateSetDictionary() to provide random access |
| 50 | 55 |
| --- compat/zlib/examples/README.examples | |
| +++ compat/zlib/examples/README.examples | |
| @@ -32,10 +32,14 @@ | |
| 32 | efficiently and robustly maintain a message log file in gzip format |
| 33 | - illustrates use of raw deflate, Z_PARTIAL_FLUSH, deflatePrime(), |
| 34 | and deflateSetDictionary() |
| 35 | - illustrates use of a gzip header extra field |
| 36 | |
| 37 | zlib_how.html |
| 38 | painfully comprehensive description of zpipe.c (see below) |
| 39 | - describes in excruciating detail the use of deflate() and inflate() |
| 40 | |
| 41 | zpipe.c |
| @@ -42,8 +46,9 @@ | |
| 42 | reads and writes zlib streams from stdin to stdout |
| 43 | - illustrates the proper use of deflate() and inflate() |
| 44 | - deeply commented in zlib_how.html (see above) |
| 45 | |
| 46 | zran.c |
| 47 | index a zlib or gzip stream and randomly access it |
| 48 | - illustrates the use of Z_BLOCK, inflatePrime(), and |
| 49 | inflateSetDictionary() to provide random access |
| 50 |
| --- compat/zlib/examples/README.examples | |
| +++ compat/zlib/examples/README.examples | |
| @@ -32,10 +32,14 @@ | |
| 32 | efficiently and robustly maintain a message log file in gzip format |
| 33 | - illustrates use of raw deflate, Z_PARTIAL_FLUSH, deflatePrime(), |
| 34 | and deflateSetDictionary() |
| 35 | - illustrates use of a gzip header extra field |
| 36 | |
| 37 | gznorm.c |
| 38 | normalize a gzip file by combining members into a single member |
| 39 | - demonstrates how to concatenate deflate streams using Z_BLOCK |
| 40 | |
| 41 | zlib_how.html |
| 42 | painfully comprehensive description of zpipe.c (see below) |
| 43 | - describes in excruciating detail the use of deflate() and inflate() |
| 44 | |
| 45 | zpipe.c |
| @@ -42,8 +46,9 @@ | |
| 46 | reads and writes zlib streams from stdin to stdout |
| 47 | - illustrates the proper use of deflate() and inflate() |
| 48 | - deeply commented in zlib_how.html (see above) |
| 49 | |
| 50 | zran.c |
| 51 | zran.h |
| 52 | index a zlib or gzip stream and randomly access it |
| 53 | - illustrates the use of Z_BLOCK, inflatePrime(), and |
| 54 | inflateSetDictionary() to provide random access |
| 55 |
+433
-408
| --- compat/zlib/examples/enough.c | ||
| +++ compat/zlib/examples/enough.c | ||
| @@ -1,9 +1,9 @@ | ||
| 1 | 1 | /* enough.c -- determine the maximum size of inflate's Huffman code tables over |
| 2 | - * all possible valid and complete Huffman codes, subject to a length limit. | |
| 3 | - * Copyright (C) 2007, 2008, 2012 Mark Adler | |
| 4 | - * Version 1.4 18 August 2012 Mark Adler | |
| 2 | + * all possible valid and complete prefix codes, subject to a length limit. | |
| 3 | + * Copyright (C) 2007, 2008, 2012, 2018 Mark Adler | |
| 4 | + * Version 1.5 5 August 2018 Mark Adler | |
| 5 | 5 | */ |
| 6 | 6 | |
| 7 | 7 | /* Version history: |
| 8 | 8 | 1.0 3 Jan 2007 First version (derived from codecount.c version 1.4) |
| 9 | 9 | 1.1 4 Jan 2007 Use faster incremental table usage computation |
| @@ -15,105 +15,111 @@ | ||
| 15 | 15 | Fix bug for initial root table size == max - 1 |
| 16 | 16 | Use a macro to compute the history index |
| 17 | 17 | 1.4 18 Aug 2012 Avoid shifts more than bits in type (caused endless loop!) |
| 18 | 18 | Clean up comparisons of different types |
| 19 | 19 | Clean up code indentation |
| 20 | + 1.5 5 Aug 2018 Clean up code style, formatting, and comments | |
| 21 | + Show all the codes for the maximum, and only the maximum | |
| 20 | 22 | */ |
| 21 | 23 | |
| 22 | 24 | /* |
| 23 | - Examine all possible Huffman codes for a given number of symbols and a | |
| 24 | - maximum code length in bits to determine the maximum table size for zilb's | |
| 25 | - inflate. Only complete Huffman codes are counted. | |
| 25 | + Examine all possible prefix codes for a given number of symbols and a | |
| 26 | + maximum code length in bits to determine the maximum table size for zlib's | |
| 27 | + inflate. Only complete prefix codes are counted. | |
| 26 | 28 | |
| 27 | 29 | Two codes are considered distinct if the vectors of the number of codes per |
| 28 | - length are not identical. So permutations of the symbol assignments result | |
| 30 | + length are not identical. So permutations of the symbol assignments result | |
| 29 | 31 | in the same code for the counting, as do permutations of the assignments of |
| 30 | 32 | the bit values to the codes (i.e. only canonical codes are counted). |
| 31 | 33 | |
| 32 | 34 | We build a code from shorter to longer lengths, determining how many symbols |
| 33 | - are coded at each length. At each step, we have how many symbols remain to | |
| 35 | + are coded at each length. At each step, we have how many symbols remain to | |
| 34 | 36 | be coded, what the last code length used was, and how many bit patterns of |
| 35 | 37 | that length remain unused. Then we add one to the code length and double the |
| 36 | - number of unused patterns to graduate to the next code length. We then | |
| 38 | + number of unused patterns to graduate to the next code length. We then | |
| 37 | 39 | assign all portions of the remaining symbols to that code length that |
| 38 | - preserve the properties of a correct and eventually complete code. Those | |
| 40 | + preserve the properties of a correct and eventually complete code. Those | |
| 39 | 41 | properties are: we cannot use more bit patterns than are available; and when |
| 40 | - all the symbols are used, there are exactly zero possible bit patterns | |
| 41 | - remaining. | |
| 42 | + all the symbols are used, there are exactly zero possible bit patterns left | |
| 43 | + unused. | |
| 42 | 44 | |
| 43 | 45 | The inflate Huffman decoding algorithm uses two-level lookup tables for |
| 44 | - speed. There is a single first-level table to decode codes up to root bits | |
| 45 | - in length (root == 9 in the current inflate implementation). The table | |
| 46 | - has 1 << root entries and is indexed by the next root bits of input. Codes | |
| 47 | - shorter than root bits have replicated table entries, so that the correct | |
| 48 | - entry is pointed to regardless of the bits that follow the short code. If | |
| 49 | - the code is longer than root bits, then the table entry points to a second- | |
| 50 | - level table. The size of that table is determined by the longest code with | |
| 51 | - that root-bit prefix. If that longest code has length len, then the table | |
| 52 | - has size 1 << (len - root), to index the remaining bits in that set of | |
| 53 | - codes. Each subsequent root-bit prefix then has its own sub-table. The | |
| 54 | - total number of table entries required by the code is calculated | |
| 55 | - incrementally as the number of codes at each bit length is populated. When | |
| 56 | - all of the codes are shorter than root bits, then root is reduced to the | |
| 57 | - longest code length, resulting in a single, smaller, one-level table. | |
| 46 | + speed. There is a single first-level table to decode codes up to root bits | |
| 47 | + in length (root == 9 for literal/length codes and root == 6 for distance | |
| 48 | + codes, in the current inflate implementation). The base table has 1 << root | |
| 49 | + entries and is indexed by the next root bits of input. Codes shorter than | |
| 50 | + root bits have replicated table entries, so that the correct entry is | |
| 51 | + pointed to regardless of the bits that follow the short code. If the code is | |
| 52 | + longer than root bits, then the table entry points to a second-level table. | |
| 53 | + The size of that table is determined by the longest code with that root-bit | |
| 54 | + prefix. If that longest code has length len, then the table has size 1 << | |
| 55 | + (len - root), to index the remaining bits in that set of codes. Each | |
| 56 | + subsequent root-bit prefix then has its own sub-table. The total number of | |
| 57 | + table entries required by the code is calculated incrementally as the number | |
| 58 | + of codes at each bit length is populated. When all of the codes are shorter | |
| 59 | + than root bits, then root is reduced to the longest code length, resulting | |
| 60 | + in a single, smaller, one-level table. | |
| 58 | 61 | |
| 59 | 62 | The inflate algorithm also provides for small values of root (relative to |
| 60 | 63 | the log2 of the number of symbols), where the shortest code has more bits |
| 61 | - than root. In that case, root is increased to the length of the shortest | |
| 62 | - code. This program, by design, does not handle that case, so it is verified | |
| 63 | - that the number of symbols is less than 2^(root + 1). | |
| 64 | + than root. In that case, root is increased to the length of the shortest | |
| 65 | + code. This program, by design, does not handle that case, so it is verified | |
| 66 | + that the number of symbols is less than 1 << (root + 1). | |
| 64 | 67 | |
| 65 | 68 | In order to speed up the examination (by about ten orders of magnitude for |
| 66 | 69 | the default arguments), the intermediate states in the build-up of a code |
| 67 | - are remembered and previously visited branches are pruned. The memory | |
| 70 | + are remembered and previously visited branches are pruned. The memory | |
| 68 | 71 | required for this will increase rapidly with the total number of symbols and |
| 69 | - the maximum code length in bits. However this is a very small price to pay | |
| 72 | + the maximum code length in bits. However this is a very small price to pay | |
| 70 | 73 | for the vast speedup. |
| 71 | 74 | |
| 72 | - First, all of the possible Huffman codes are counted, and reachable | |
| 75 | + First, all of the possible prefix codes are counted, and reachable | |
| 73 | 76 | intermediate states are noted by a non-zero count in a saved-results array. |
| 74 | 77 | Second, the intermediate states that lead to (root + 1) bit or longer codes |
| 75 | 78 | are used to look at all sub-codes from those junctures for their inflate |
| 76 | - memory usage. (The amount of memory used is not affected by the number of | |
| 79 | + memory usage. (The amount of memory used is not affected by the number of | |
| 77 | 80 | codes of root bits or less in length.) Third, the visited states in the |
| 78 | 81 | construction of those sub-codes and the associated calculation of the table |
| 79 | 82 | size is recalled in order to avoid recalculating from the same juncture. |
| 80 | 83 | Beginning the code examination at (root + 1) bit codes, which is enabled by |
| 81 | 84 | identifying the reachable nodes, accounts for about six of the orders of |
| 82 | - magnitude of improvement for the default arguments. About another four | |
| 83 | - orders of magnitude come from not revisiting previous states. Out of | |
| 84 | - approximately 2x10^16 possible Huffman codes, only about 2x10^6 sub-codes | |
| 85 | + magnitude of improvement for the default arguments. About another four | |
| 86 | + orders of magnitude come from not revisiting previous states. Out of | |
| 87 | + approximately 2x10^16 possible prefix codes, only about 2x10^6 sub-codes | |
| 85 | 88 | need to be examined to cover all of the possible table memory usage cases |
| 86 | 89 | for the default arguments of 286 symbols limited to 15-bit codes. |
| 87 | 90 | |
| 88 | - Note that an unsigned long long type is used for counting. It is quite easy | |
| 89 | - to exceed the capacity of an eight-byte integer with a large number of | |
| 90 | - symbols and a large maximum code length, so multiple-precision arithmetic | |
| 91 | - would need to replace the unsigned long long arithmetic in that case. This | |
| 92 | - program will abort if an overflow occurs. The big_t type identifies where | |
| 93 | - the counting takes place. | |
| 94 | - | |
| 95 | - An unsigned long long type is also used for calculating the number of | |
| 96 | - possible codes remaining at the maximum length. This limits the maximum | |
| 97 | - code length to the number of bits in a long long minus the number of bits | |
| 98 | - needed to represent the symbols in a flat code. The code_t type identifies | |
| 99 | - where the bit pattern counting takes place. | |
| 91 | + Note that the uintmax_t type is used for counting. It is quite easy to | |
| 92 | + exceed the capacity of an eight-byte integer with a large number of symbols | |
| 93 | + and a large maximum code length, so multiple-precision arithmetic would need | |
| 94 | + to replace the integer arithmetic in that case. This program will abort if | |
| 95 | + an overflow occurs. The big_t type identifies where the counting takes | |
| 96 | + place. | |
| 97 | + | |
| 98 | + The uintmax_t type is also used for calculating the number of possible codes | |
| 99 | + remaining at the maximum length. This limits the maximum code length to the | |
| 100 | + number of bits in a long long minus the number of bits needed to represent | |
| 101 | + the symbols in a flat code. The code_t type identifies where the bit-pattern | |
| 102 | + counting takes place. | |
| 100 | 103 | */ |
| 101 | 104 | |
| 102 | 105 | #include <stdio.h> |
| 103 | 106 | #include <stdlib.h> |
| 104 | 107 | #include <string.h> |
| 108 | +#include <stdarg.h> | |
| 109 | +#include <stdint.h> | |
| 105 | 110 | #include <assert.h> |
| 106 | 111 | |
| 107 | 112 | #define local static |
| 108 | 113 | |
| 109 | -/* special data types */ | |
| 110 | -typedef unsigned long long big_t; /* type for code counting */ | |
| 111 | -typedef unsigned long long code_t; /* type for bit pattern counting */ | |
| 112 | -struct tab { /* type for been here check */ | |
| 113 | - size_t len; /* length of bit vector in char's */ | |
| 114 | - char *vec; /* allocated bit vector */ | |
| 114 | +// Special data types. | |
| 115 | +typedef uintmax_t big_t; // type for code counting | |
| 116 | +#define PRIbig "ju" // printf format for big_t | |
| 117 | +typedef uintmax_t code_t; // type for bit pattern counting | |
| 118 | +struct tab { // type for been-here check | |
| 119 | + size_t len; // allocated length of bit vector in octets | |
| 120 | + char *vec; // allocated bit vector | |
| 115 | 121 | }; |
| 116 | 122 | |
| 117 | 123 | /* The array for saving results, num[], is indexed with this triplet: |
| 118 | 124 | |
| 119 | 125 | syms: number of symbols remaining to code |
| @@ -124,449 +130,468 @@ | ||
| 124 | 130 | |
| 125 | 131 | syms: 3..totsym (totsym == total symbols to code) |
| 126 | 132 | left: 2..syms - 1, but only the evens (so syms == 8 -> 2, 4, 6) |
| 127 | 133 | len: 1..max - 1 (max == maximum code length in bits) |
| 128 | 134 | |
| 129 | - syms == 2 is not saved since that immediately leads to a single code. left | |
| 135 | + syms == 2 is not saved since that immediately leads to a single code. left | |
| 130 | 136 | must be even, since it represents the number of available bit patterns at |
| 131 | - the current length, which is double the number at the previous length. | |
| 132 | - left ends at syms-1 since left == syms immediately results in a single code. | |
| 137 | + the current length, which is double the number at the previous length. left | |
| 138 | + ends at syms-1 since left == syms immediately results in a single code. | |
| 133 | 139 | (left > sym is not allowed since that would result in an incomplete code.) |
| 134 | 140 | len is less than max, since the code completes immediately when len == max. |
| 135 | 141 | |
| 136 | - The offset into the array is calculated for the three indices with the | |
| 137 | - first one (syms) being outermost, and the last one (len) being innermost. | |
| 138 | - We build the array with length max-1 lists for the len index, with syms-3 | |
| 139 | - of those for each symbol. There are totsym-2 of those, with each one | |
| 140 | - varying in length as a function of sym. See the calculation of index in | |
| 141 | - count() for the index, and the calculation of size in main() for the size | |
| 142 | - of the array. | |
| 142 | + The offset into the array is calculated for the three indices with the first | |
| 143 | + one (syms) being outermost, and the last one (len) being innermost. We build | |
| 144 | + the array with length max-1 lists for the len index, with syms-3 of those | |
| 145 | + for each symbol. There are totsym-2 of those, with each one varying in | |
| 146 | + length as a function of sym. See the calculation of index in map() for the | |
| 147 | + index, and the calculation of size in main() for the size of the array. | |
| 143 | 148 | |
| 144 | 149 | For the deflate example of 286 symbols limited to 15-bit codes, the array |
| 145 | - has 284,284 entries, taking up 2.17 MB for an 8-byte big_t. More than | |
| 146 | - half of the space allocated for saved results is actually used -- not all | |
| 147 | - possible triplets are reached in the generation of valid Huffman codes. | |
| 150 | + has 284,284 entries, taking up 2.17 MB for an 8-byte big_t. More than half | |
| 151 | + of the space allocated for saved results is actually used -- not all | |
| 152 | + possible triplets are reached in the generation of valid prefix codes. | |
| 148 | 153 | */ |
| 149 | 154 | |
| 150 | 155 | /* The array for tracking visited states, done[], is itself indexed identically |
| 151 | 156 | to the num[] array as described above for the (syms, left, len) triplet. |
| 152 | 157 | Each element in the array is further indexed by the (mem, rem) doublet, |
| 153 | 158 | where mem is the amount of inflate table space used so far, and rem is the |
| 154 | - remaining unused entries in the current inflate sub-table. Each indexed | |
| 159 | + remaining unused entries in the current inflate sub-table. Each indexed | |
| 155 | 160 | element is simply one bit indicating whether the state has been visited or |
| 156 | - not. Since the ranges for mem and rem are not known a priori, each bit | |
| 161 | + not. Since the ranges for mem and rem are not known a priori, each bit | |
| 157 | 162 | vector is of a variable size, and grows as needed to accommodate the visited |
| 158 | - states. mem and rem are used to calculate a single index in a triangular | |
| 159 | - array. Since the range of mem is expected in the default case to be about | |
| 163 | + states. mem and rem are used to calculate a single index in a triangular | |
| 164 | + array. Since the range of mem is expected in the default case to be about | |
| 160 | 165 | ten times larger than the range of rem, the array is skewed to reduce the |
| 161 | - memory usage, with eight times the range for mem than for rem. See the | |
| 162 | - calculations for offset and bit in beenhere() for the details. | |
| 166 | + memory usage, with eight times the range for mem than for rem. See the | |
| 167 | + calculations for offset and bit in been_here() for the details. | |
| 163 | 168 | |
| 164 | 169 | For the deflate example of 286 symbols limited to 15-bit codes, the bit |
| 165 | - vectors grow to total approximately 21 MB, in addition to the 4.3 MB done[] | |
| 166 | - array itself. | |
| 170 | + vectors grow to total 5.5 MB, in addition to the 4.3 MB done array itself. | |
| 167 | 171 | */ |
| 168 | 172 | |
| 169 | -/* Globals to avoid propagating constants or constant pointers recursively */ | |
| 170 | -local int max; /* maximum allowed bit length for the codes */ | |
| 171 | -local int root; /* size of base code table in bits */ | |
| 172 | -local int large; /* largest code table so far */ | |
| 173 | -local size_t size; /* number of elements in num and done */ | |
| 174 | -local int *code; /* number of symbols assigned to each bit length */ | |
| 175 | -local big_t *num; /* saved results array for code counting */ | |
| 176 | -local struct tab *done; /* states already evaluated array */ | |
| 177 | - | |
| 178 | -/* Index function for num[] and done[] */ | |
| 179 | -#define INDEX(i,j,k) (((size_t)((i-1)>>1)*((i-2)>>1)+(j>>1)-1)*(max-1)+k-1) | |
| 180 | - | |
| 181 | -/* Free allocated space. Uses globals code, num, and done. */ | |
| 182 | -local void cleanup(void) | |
| 183 | -{ | |
| 184 | - size_t n; | |
| 185 | - | |
| 186 | - if (done != NULL) { | |
| 187 | - for (n = 0; n < size; n++) | |
| 188 | - if (done[n].len) | |
| 189 | - free(done[n].vec); | |
| 190 | - free(done); | |
| 191 | - } | |
| 192 | - if (num != NULL) | |
| 193 | - free(num); | |
| 194 | - if (code != NULL) | |
| 195 | - free(code); | |
| 196 | -} | |
| 197 | - | |
| 198 | -/* Return the number of possible Huffman codes using bit patterns of lengths | |
| 199 | - len through max inclusive, coding syms symbols, with left bit patterns of | |
| 200 | - length len unused -- return -1 if there is an overflow in the counting. | |
| 201 | - Keep a record of previous results in num to prevent repeating the same | |
| 202 | - calculation. Uses the globals max and num. */ | |
| 203 | -local big_t count(int syms, int len, int left) | |
| 204 | -{ | |
| 205 | - big_t sum; /* number of possible codes from this juncture */ | |
| 206 | - big_t got; /* value returned from count() */ | |
| 207 | - int least; /* least number of syms to use at this juncture */ | |
| 208 | - int most; /* most number of syms to use at this juncture */ | |
| 209 | - int use; /* number of bit patterns to use in next call */ | |
| 210 | - size_t index; /* index of this case in *num */ | |
| 211 | - | |
| 212 | - /* see if only one possible code */ | |
| 173 | +// Type for a variable-length, allocated string. | |
| 174 | +typedef struct { | |
| 175 | + char *str; // pointer to allocated string | |
| 176 | + size_t size; // size of allocation | |
| 177 | + size_t len; // length of string, not including terminating zero | |
| 178 | +} string_t; | |
| 179 | + | |
| 180 | +// Clear a string_t. | |
| 181 | +local void string_clear(string_t *s) { | |
| 182 | + s->str[0] = 0; | |
| 183 | + s->len = 0; | |
| 184 | +} | |
| 185 | + | |
| 186 | +// Initialize a string_t. | |
| 187 | +local void string_init(string_t *s) { | |
| 188 | + s->size = 16; | |
| 189 | + s->str = malloc(s->size); | |
| 190 | + assert(s->str != NULL && "out of memory"); | |
| 191 | + string_clear(s); | |
| 192 | +} | |
| 193 | + | |
| 194 | +// Release the allocation of a string_t. | |
| 195 | +local void string_free(string_t *s) { | |
| 196 | + free(s->str); | |
| 197 | + s->str = NULL; | |
| 198 | + s->size = 0; | |
| 199 | + s->len = 0; | |
| 200 | +} | |
| 201 | + | |
| 202 | +// Save the results of printf with fmt and the subsequent argument list to s. | |
| 203 | +// Each call appends to s. The allocated space for s is increased as needed. | |
| 204 | +local void string_printf(string_t *s, char *fmt, ...) { | |
| 205 | + va_list ap; | |
| 206 | + va_start(ap, fmt); | |
| 207 | + size_t len = s->len; | |
| 208 | + int ret = vsnprintf(s->str + len, s->size - len, fmt, ap); | |
| 209 | + assert(ret >= 0 && "out of memory"); | |
| 210 | + s->len += ret; | |
| 211 | + if (s->size < s->len + 1) { | |
| 212 | + do { | |
| 213 | + s->size <<= 1; | |
| 214 | + assert(s->size != 0 && "overflow"); | |
| 215 | + } while (s->size < s->len + 1); | |
| 216 | + s->str = realloc(s->str, s->size); | |
| 217 | + assert(s->str != NULL && "out of memory"); | |
| 218 | + vsnprintf(s->str + len, s->size - len, fmt, ap); | |
| 219 | + } | |
| 220 | + va_end(ap); | |
| 221 | +} | |
| 222 | + | |
| 223 | +// Globals to avoid propagating constants or constant pointers recursively. | |
| 224 | +struct { | |
| 225 | + int max; // maximum allowed bit length for the codes | |
| 226 | + int root; // size of base code table in bits | |
| 227 | + int large; // largest code table so far | |
| 228 | + size_t size; // number of elements in num and done | |
| 229 | + big_t tot; // total number of codes with maximum tables size | |
| 230 | + string_t out; // display of subcodes for maximum tables size | |
| 231 | + int *code; // number of symbols assigned to each bit length | |
| 232 | + big_t *num; // saved results array for code counting | |
| 233 | + struct tab *done; // states already evaluated array | |
| 234 | +} g; | |
| 235 | + | |
| 236 | +// Index function for num[] and done[]. | |
| 237 | +local inline size_t map(int syms, int left, int len) { | |
| 238 | + return ((size_t)((syms - 1) >> 1) * ((syms - 2) >> 1) + | |
| 239 | + (left >> 1) - 1) * (g.max - 1) + | |
| 240 | + len - 1; | |
| 241 | +} | |
| 242 | + | |
| 243 | +// Free allocated space in globals. | |
| 244 | +local void cleanup(void) { | |
| 245 | + if (g.done != NULL) { | |
| 246 | + for (size_t n = 0; n < g.size; n++) | |
| 247 | + if (g.done[n].len) | |
| 248 | + free(g.done[n].vec); | |
| 249 | + g.size = 0; | |
| 250 | + free(g.done); g.done = NULL; | |
| 251 | + } | |
| 252 | + free(g.num); g.num = NULL; | |
| 253 | + free(g.code); g.code = NULL; | |
| 254 | + string_free(&g.out); | |
| 255 | +} | |
| 256 | + | |
| 257 | +// Return the number of possible prefix codes using bit patterns of lengths len | |
| 258 | +// through max inclusive, coding syms symbols, with left bit patterns of length | |
| 259 | +// len unused -- return -1 if there is an overflow in the counting. Keep a | |
| 260 | +// record of previous results in num to prevent repeating the same calculation. | |
| 261 | +local big_t count(int syms, int left, int len) { | |
| 262 | + // see if only one possible code | |
| 213 | 263 | if (syms == left) |
| 214 | 264 | return 1; |
| 215 | 265 | |
| 216 | - /* note and verify the expected state */ | |
| 217 | - assert(syms > left && left > 0 && len < max); | |
| 266 | + // note and verify the expected state | |
| 267 | + assert(syms > left && left > 0 && len < g.max); | |
| 218 | 268 | |
| 219 | - /* see if we've done this one already */ | |
| 220 | - index = INDEX(syms, left, len); | |
| 221 | - got = num[index]; | |
| 269 | + // see if we've done this one already | |
| 270 | + size_t index = map(syms, left, len); | |
| 271 | + big_t got = g.num[index]; | |
| 222 | 272 | if (got) |
| 223 | - return got; /* we have -- return the saved result */ | |
| 273 | + return got; // we have -- return the saved result | |
| 224 | 274 | |
| 225 | - /* we need to use at least this many bit patterns so that the code won't be | |
| 226 | - incomplete at the next length (more bit patterns than symbols) */ | |
| 227 | - least = (left << 1) - syms; | |
| 275 | + // we need to use at least this many bit patterns so that the code won't be | |
| 276 | + // incomplete at the next length (more bit patterns than symbols) | |
| 277 | + int least = (left << 1) - syms; | |
| 228 | 278 | if (least < 0) |
| 229 | 279 | least = 0; |
| 230 | 280 | |
| 231 | - /* we can use at most this many bit patterns, lest there not be enough | |
| 232 | - available for the remaining symbols at the maximum length (if there were | |
| 233 | - no limit to the code length, this would become: most = left - 1) */ | |
| 234 | - most = (((code_t)left << (max - len)) - syms) / | |
| 235 | - (((code_t)1 << (max - len)) - 1); | |
| 236 | - | |
| 237 | - /* count all possible codes from this juncture and add them up */ | |
| 238 | - sum = 0; | |
| 239 | - for (use = least; use <= most; use++) { | |
| 240 | - got = count(syms - use, len + 1, (left - use) << 1); | |
| 281 | + // we can use at most this many bit patterns, lest there not be enough | |
| 282 | + // available for the remaining symbols at the maximum length (if there were | |
| 283 | + // no limit to the code length, this would become: most = left - 1) | |
| 284 | + int most = (((code_t)left << (g.max - len)) - syms) / | |
| 285 | + (((code_t)1 << (g.max - len)) - 1); | |
| 286 | + | |
| 287 | + // count all possible codes from this juncture and add them up | |
| 288 | + big_t sum = 0; | |
| 289 | + for (int use = least; use <= most; use++) { | |
| 290 | + got = count(syms - use, (left - use) << 1, len + 1); | |
| 241 | 291 | sum += got; |
| 242 | - if (got == (big_t)0 - 1 || sum < got) /* overflow */ | |
| 243 | - return (big_t)0 - 1; | |
| 292 | + if (got == (big_t)-1 || sum < got) // overflow | |
| 293 | + return (big_t)-1; | |
| 244 | 294 | } |
| 245 | 295 | |
| 246 | - /* verify that all recursive calls are productive */ | |
| 296 | + // verify that all recursive calls are productive | |
| 247 | 297 | assert(sum != 0); |
| 248 | 298 | |
| 249 | - /* save the result and return it */ | |
| 250 | - num[index] = sum; | |
| 299 | + // save the result and return it | |
| 300 | + g.num[index] = sum; | |
| 251 | 301 | return sum; |
| 252 | 302 | } |
| 253 | 303 | |
| 254 | -/* Return true if we've been here before, set to true if not. Set a bit in a | |
| 255 | - bit vector to indicate visiting this state. Each (syms,len,left) state | |
| 256 | - has a variable size bit vector indexed by (mem,rem). The bit vector is | |
| 257 | - lengthened if needed to allow setting the (mem,rem) bit. */ | |
| 258 | -local int beenhere(int syms, int len, int left, int mem, int rem) | |
| 259 | -{ | |
| 260 | - size_t index; /* index for this state's bit vector */ | |
| 261 | - size_t offset; /* offset in this state's bit vector */ | |
| 262 | - int bit; /* mask for this state's bit */ | |
| 263 | - size_t length; /* length of the bit vector in bytes */ | |
| 264 | - char *vector; /* new or enlarged bit vector */ | |
| 265 | - | |
| 266 | - /* point to vector for (syms,left,len), bit in vector for (mem,rem) */ | |
| 267 | - index = INDEX(syms, left, len); | |
| 268 | - mem -= 1 << root; | |
| 269 | - offset = (mem >> 3) + rem; | |
| 304 | +// Return true if we've been here before, set to true if not. Set a bit in a | |
| 305 | +// bit vector to indicate visiting this state. Each (syms,len,left) state has a | |
| 306 | +// variable size bit vector indexed by (mem,rem). The bit vector is lengthened | |
| 307 | +// as needed to allow setting the (mem,rem) bit. | |
| 308 | +local int been_here(int syms, int left, int len, int mem, int rem) { | |
| 309 | + // point to vector for (syms,left,len), bit in vector for (mem,rem) | |
| 310 | + size_t index = map(syms, left, len); | |
| 311 | + mem -= 1 << g.root; // mem always includes the root table | |
| 312 | + mem >>= 1; // mem and rem are always even | |
| 313 | + rem >>= 1; | |
| 314 | + size_t offset = (mem >> 3) + rem; | |
| 270 | 315 | offset = ((offset * (offset + 1)) >> 1) + rem; |
| 271 | - bit = 1 << (mem & 7); | |
| 272 | - | |
| 273 | - /* see if we've been here */ | |
| 274 | - length = done[index].len; | |
| 275 | - if (offset < length && (done[index].vec[offset] & bit) != 0) | |
| 276 | - return 1; /* done this! */ | |
| 277 | - | |
| 278 | - /* we haven't been here before -- set the bit to show we have now */ | |
| 279 | - | |
| 280 | - /* see if we need to lengthen the vector in order to set the bit */ | |
| 316 | + int bit = 1 << (mem & 7); | |
| 317 | + | |
| 318 | + // see if we've been here | |
| 319 | + size_t length = g.done[index].len; | |
| 320 | + if (offset < length && (g.done[index].vec[offset] & bit) != 0) | |
| 321 | + return 1; // done this! | |
| 322 | + | |
| 323 | + // we haven't been here before -- set the bit to show we have now | |
| 324 | + | |
| 325 | + // see if we need to lengthen the vector in order to set the bit | |
| 281 | 326 | if (length <= offset) { |
| 282 | - /* if we have one already, enlarge it, zero out the appended space */ | |
| 327 | + // if we have one already, enlarge it, zero out the appended space | |
| 328 | + char *vector; | |
| 283 | 329 | if (length) { |
| 284 | 330 | do { |
| 285 | 331 | length <<= 1; |
| 286 | 332 | } while (length <= offset); |
| 287 | - vector = realloc(done[index].vec, length); | |
| 288 | - if (vector != NULL) | |
| 289 | - memset(vector + done[index].len, 0, length - done[index].len); | |
| 290 | - } | |
| 291 | - | |
| 292 | - /* otherwise we need to make a new vector and zero it out */ | |
| 293 | - else { | |
| 294 | - length = 1 << (len - root); | |
| 295 | - while (length <= offset) | |
| 296 | - length <<= 1; | |
| 297 | - vector = calloc(length, sizeof(char)); | |
| 298 | - } | |
| 299 | - | |
| 300 | - /* in either case, bail if we can't get the memory */ | |
| 301 | - if (vector == NULL) { | |
| 302 | - fputs("abort: unable to allocate enough memory\n", stderr); | |
| 303 | - cleanup(); | |
| 304 | - exit(1); | |
| 305 | - } | |
| 306 | - | |
| 307 | - /* install the new vector */ | |
| 308 | - done[index].len = length; | |
| 309 | - done[index].vec = vector; | |
| 310 | - } | |
| 311 | - | |
| 312 | - /* set the bit */ | |
| 313 | - done[index].vec[offset] |= bit; | |
| 333 | + vector = realloc(g.done[index].vec, length); | |
| 334 | + assert(vector != NULL && "out of memory"); | |
| 335 | + memset(vector + g.done[index].len, 0, length - g.done[index].len); | |
| 336 | + } | |
| 337 | + | |
| 338 | + // otherwise we need to make a new vector and zero it out | |
| 339 | + else { | |
| 340 | + length = 16; | |
| 341 | + while (length <= offset) | |
| 342 | + length <<= 1; | |
| 343 | + vector = calloc(length, 1); | |
| 344 | + assert(vector != NULL && "out of memory"); | |
| 345 | + } | |
| 346 | + | |
| 347 | + // install the new vector | |
| 348 | + g.done[index].len = length; | |
| 349 | + g.done[index].vec = vector; | |
| 350 | + } | |
| 351 | + | |
| 352 | + // set the bit | |
| 353 | + g.done[index].vec[offset] |= bit; | |
| 314 | 354 | return 0; |
| 315 | 355 | } |
| 316 | 356 | |
| 317 | -/* Examine all possible codes from the given node (syms, len, left). Compute | |
| 318 | - the amount of memory required to build inflate's decoding tables, where the | |
| 319 | - number of code structures used so far is mem, and the number remaining in | |
| 320 | - the current sub-table is rem. Uses the globals max, code, root, large, and | |
| 321 | - done. */ | |
| 322 | -local void examine(int syms, int len, int left, int mem, int rem) | |
| 323 | -{ | |
| 324 | - int least; /* least number of syms to use at this juncture */ | |
| 325 | - int most; /* most number of syms to use at this juncture */ | |
| 326 | - int use; /* number of bit patterns to use in next call */ | |
| 327 | - | |
| 328 | - /* see if we have a complete code */ | |
| 357 | +// Examine all possible codes from the given node (syms, len, left). Compute | |
| 358 | +// the amount of memory required to build inflate's decoding tables, where the | |
| 359 | +// number of code structures used so far is mem, and the number remaining in | |
| 360 | +// the current sub-table is rem. | |
| 361 | +local void examine(int syms, int left, int len, int mem, int rem) { | |
| 362 | + // see if we have a complete code | |
| 329 | 363 | if (syms == left) { |
| 330 | - /* set the last code entry */ | |
| 331 | - code[len] = left; | |
| 364 | + // set the last code entry | |
| 365 | + g.code[len] = left; | |
| 332 | 366 | |
| 333 | - /* complete computation of memory used by this code */ | |
| 367 | + // complete computation of memory used by this code | |
| 334 | 368 | while (rem < left) { |
| 335 | 369 | left -= rem; |
| 336 | - rem = 1 << (len - root); | |
| 370 | + rem = 1 << (len - g.root); | |
| 337 | 371 | mem += rem; |
| 338 | 372 | } |
| 339 | 373 | assert(rem == left); |
| 340 | 374 | |
| 341 | - /* if this is a new maximum, show the entries used and the sub-code */ | |
| 342 | - if (mem > large) { | |
| 343 | - large = mem; | |
| 344 | - printf("max %d: ", mem); | |
| 345 | - for (use = root + 1; use <= max; use++) | |
| 346 | - if (code[use]) | |
| 347 | - printf("%d[%d] ", code[use], use); | |
| 348 | - putchar('\n'); | |
| 349 | - fflush(stdout); | |
| 350 | - } | |
| 351 | - | |
| 352 | - /* remove entries as we drop back down in the recursion */ | |
| 353 | - code[len] = 0; | |
| 354 | - return; | |
| 355 | - } | |
| 356 | - | |
| 357 | - /* prune the tree if we can */ | |
| 358 | - if (beenhere(syms, len, left, mem, rem)) | |
| 359 | - return; | |
| 360 | - | |
| 361 | - /* we need to use at least this many bit patterns so that the code won't be | |
| 362 | - incomplete at the next length (more bit patterns than symbols) */ | |
| 363 | - least = (left << 1) - syms; | |
| 375 | + // if this is at the maximum, show the sub-code | |
| 376 | + if (mem >= g.large) { | |
| 377 | + // if this is a new maximum, update the maximum and clear out the | |
| 378 | + // printed sub-codes from the previous maximum | |
| 379 | + if (mem > g.large) { | |
| 380 | + g.large = mem; | |
| 381 | + string_clear(&g.out); | |
| 382 | + } | |
| 383 | + | |
| 384 | + // compute the starting state for this sub-code | |
| 385 | + syms = 0; | |
| 386 | + left = 1 << g.max; | |
| 387 | + for (int bits = g.max; bits > g.root; bits--) { | |
| 388 | + syms += g.code[bits]; | |
| 389 | + left -= g.code[bits]; | |
| 390 | + assert((left & 1) == 0); | |
| 391 | + left >>= 1; | |
| 392 | + } | |
| 393 | + | |
| 394 | + // print the starting state and the resulting sub-code to g.out | |
| 395 | + string_printf(&g.out, "<%u, %u, %u>:", | |
| 396 | + syms, g.root + 1, ((1 << g.root) - left) << 1); | |
| 397 | + for (int bits = g.root + 1; bits <= g.max; bits++) | |
| 398 | + if (g.code[bits]) | |
| 399 | + string_printf(&g.out, " %d[%d]", g.code[bits], bits); | |
| 400 | + string_printf(&g.out, "\n"); | |
| 401 | + } | |
| 402 | + | |
| 403 | + // remove entries as we drop back down in the recursion | |
| 404 | + g.code[len] = 0; | |
| 405 | + return; | |
| 406 | + } | |
| 407 | + | |
| 408 | + // prune the tree if we can | |
| 409 | + if (been_here(syms, left, len, mem, rem)) | |
| 410 | + return; | |
| 411 | + | |
| 412 | + // we need to use at least this many bit patterns so that the code won't be | |
| 413 | + // incomplete at the next length (more bit patterns than symbols) | |
| 414 | + int least = (left << 1) - syms; | |
| 364 | 415 | if (least < 0) |
| 365 | 416 | least = 0; |
| 366 | 417 | |
| 367 | - /* we can use at most this many bit patterns, lest there not be enough | |
| 368 | - available for the remaining symbols at the maximum length (if there were | |
| 369 | - no limit to the code length, this would become: most = left - 1) */ | |
| 370 | - most = (((code_t)left << (max - len)) - syms) / | |
| 371 | - (((code_t)1 << (max - len)) - 1); | |
| 372 | - | |
| 373 | - /* occupy least table spaces, creating new sub-tables as needed */ | |
| 374 | - use = least; | |
| 418 | + // we can use at most this many bit patterns, lest there not be enough | |
| 419 | + // available for the remaining symbols at the maximum length (if there were | |
| 420 | + // no limit to the code length, this would become: most = left - 1) | |
| 421 | + int most = (((code_t)left << (g.max - len)) - syms) / | |
| 422 | + (((code_t)1 << (g.max - len)) - 1); | |
| 423 | + | |
| 424 | + // occupy least table spaces, creating new sub-tables as needed | |
| 425 | + int use = least; | |
| 375 | 426 | while (rem < use) { |
| 376 | 427 | use -= rem; |
| 377 | - rem = 1 << (len - root); | |
| 428 | + rem = 1 << (len - g.root); | |
| 378 | 429 | mem += rem; |
| 379 | 430 | } |
| 380 | 431 | rem -= use; |
| 381 | 432 | |
| 382 | - /* examine codes from here, updating table space as we go */ | |
| 433 | + // examine codes from here, updating table space as we go | |
| 383 | 434 | for (use = least; use <= most; use++) { |
| 384 | - code[len] = use; | |
| 385 | - examine(syms - use, len + 1, (left - use) << 1, | |
| 386 | - mem + (rem ? 1 << (len - root) : 0), rem << 1); | |
| 435 | + g.code[len] = use; | |
| 436 | + examine(syms - use, (left - use) << 1, len + 1, | |
| 437 | + mem + (rem ? 1 << (len - g.root) : 0), rem << 1); | |
| 387 | 438 | if (rem == 0) { |
| 388 | - rem = 1 << (len - root); | |
| 439 | + rem = 1 << (len - g.root); | |
| 389 | 440 | mem += rem; |
| 390 | 441 | } |
| 391 | 442 | rem--; |
| 392 | 443 | } |
| 393 | 444 | |
| 394 | - /* remove entries as we drop back down in the recursion */ | |
| 395 | - code[len] = 0; | |
| 396 | -} | |
| 397 | - | |
| 398 | -/* Look at all sub-codes starting with root + 1 bits. Look at only the valid | |
| 399 | - intermediate code states (syms, left, len). For each completed code, | |
| 400 | - calculate the amount of memory required by inflate to build the decoding | |
| 401 | - tables. Find the maximum amount of memory required and show the code that | |
| 402 | - requires that maximum. Uses the globals max, root, and num. */ | |
| 403 | -local void enough(int syms) | |
| 404 | -{ | |
| 405 | - int n; /* number of remaing symbols for this node */ | |
| 406 | - int left; /* number of unused bit patterns at this length */ | |
| 407 | - size_t index; /* index of this case in *num */ | |
| 408 | - | |
| 409 | - /* clear code */ | |
| 410 | - for (n = 0; n <= max; n++) | |
| 411 | - code[n] = 0; | |
| 412 | - | |
| 413 | - /* look at all (root + 1) bit and longer codes */ | |
| 414 | - large = 1 << root; /* base table */ | |
| 415 | - if (root < max) /* otherwise, there's only a base table */ | |
| 416 | - for (n = 3; n <= syms; n++) | |
| 417 | - for (left = 2; left < n; left += 2) | |
| 418 | - { | |
| 419 | - /* look at all reachable (root + 1) bit nodes, and the | |
| 420 | - resulting codes (complete at root + 2 or more) */ | |
| 421 | - index = INDEX(n, left, root + 1); | |
| 422 | - if (root + 1 < max && num[index]) /* reachable node */ | |
| 423 | - examine(n, root + 1, left, 1 << root, 0); | |
| 424 | - | |
| 425 | - /* also look at root bit codes with completions at root + 1 | |
| 426 | - bits (not saved in num, since complete), just in case */ | |
| 427 | - if (num[index - 1] && n <= left << 1) | |
| 428 | - examine((n - left) << 1, root + 1, (n - left) << 1, | |
| 429 | - 1 << root, 0); | |
| 430 | - } | |
| 431 | - | |
| 432 | - /* done */ | |
| 433 | - printf("done: maximum of %d table entries\n", large); | |
| 434 | -} | |
| 435 | - | |
| 436 | -/* | |
| 437 | - Examine and show the total number of possible Huffman codes for a given | |
| 438 | - maximum number of symbols, initial root table size, and maximum code length | |
| 439 | - in bits -- those are the command arguments in that order. The default | |
| 440 | - values are 286, 9, and 15 respectively, for the deflate literal/length code. | |
| 441 | - The possible codes are counted for each number of coded symbols from two to | |
| 442 | - the maximum. The counts for each of those and the total number of codes are | |
| 443 | - shown. The maximum number of inflate table entires is then calculated | |
| 444 | - across all possible codes. Each new maximum number of table entries and the | |
| 445 | - associated sub-code (starting at root + 1 == 10 bits) is shown. | |
| 446 | - | |
| 447 | - To count and examine Huffman codes that are not length-limited, provide a | |
| 448 | - maximum length equal to the number of symbols minus one. | |
| 449 | - | |
| 450 | - For the deflate literal/length code, use "enough". For the deflate distance | |
| 451 | - code, use "enough 30 6". | |
| 452 | - | |
| 453 | - This uses the %llu printf format to print big_t numbers, which assumes that | |
| 454 | - big_t is an unsigned long long. If the big_t type is changed (for example | |
| 455 | - to a multiple precision type), the method of printing will also need to be | |
| 456 | - updated. | |
| 457 | - */ | |
| 458 | -int main(int argc, char **argv) | |
| 459 | -{ | |
| 460 | - int syms; /* total number of symbols to code */ | |
| 461 | - int n; /* number of symbols to code for this run */ | |
| 462 | - big_t got; /* return value of count() */ | |
| 463 | - big_t sum; /* accumulated number of codes over n */ | |
| 464 | - code_t word; /* for counting bits in code_t */ | |
| 465 | - | |
| 466 | - /* set up globals for cleanup() */ | |
| 467 | - code = NULL; | |
| 468 | - num = NULL; | |
| 469 | - done = NULL; | |
| 470 | - | |
| 471 | - /* get arguments -- default to the deflate literal/length code */ | |
| 472 | - syms = 286; | |
| 473 | - root = 9; | |
| 474 | - max = 15; | |
| 445 | + // remove entries as we drop back down in the recursion | |
| 446 | + g.code[len] = 0; | |
| 447 | +} | |
| 448 | + | |
| 449 | +// Look at all sub-codes starting with root + 1 bits. Look at only the valid | |
| 450 | +// intermediate code states (syms, left, len). For each completed code, | |
| 451 | +// calculate the amount of memory required by inflate to build the decoding | |
| 452 | +// tables. Find the maximum amount of memory required and show the codes that | |
| 453 | +// require that maximum. | |
| 454 | +local void enough(int syms) { | |
| 455 | + // clear code | |
| 456 | + for (int n = 0; n <= g.max; n++) | |
| 457 | + g.code[n] = 0; | |
| 458 | + | |
| 459 | + // look at all (root + 1) bit and longer codes | |
| 460 | + string_clear(&g.out); // empty saved results | |
| 461 | + g.large = 1 << g.root; // base table | |
| 462 | + if (g.root < g.max) // otherwise, there's only a base table | |
| 463 | + for (int n = 3; n <= syms; n++) | |
| 464 | + for (int left = 2; left < n; left += 2) { | |
| 465 | + // look at all reachable (root + 1) bit nodes, and the | |
| 466 | + // resulting codes (complete at root + 2 or more) | |
| 467 | + size_t index = map(n, left, g.root + 1); | |
| 468 | + if (g.root + 1 < g.max && g.num[index]) // reachable node | |
| 469 | + examine(n, left, g.root + 1, 1 << g.root, 0); | |
| 470 | + | |
| 471 | + // also look at root bit codes with completions at root + 1 | |
| 472 | + // bits (not saved in num, since complete), just in case | |
| 473 | + if (g.num[index - 1] && n <= left << 1) | |
| 474 | + examine((n - left) << 1, (n - left) << 1, g.root + 1, | |
| 475 | + 1 << g.root, 0); | |
| 476 | + } | |
| 477 | + | |
| 478 | + // done | |
| 479 | + printf("maximum of %d table entries for root = %d\n", g.large, g.root); | |
| 480 | + fputs(g.out.str, stdout); | |
| 481 | +} | |
| 482 | + | |
| 483 | +// Examine and show the total number of possible prefix codes for a given | |
| 484 | +// maximum number of symbols, initial root table size, and maximum code length | |
| 485 | +// in bits -- those are the command arguments in that order. The default values | |
| 486 | +// are 286, 9, and 15 respectively, for the deflate literal/length code. The | |
| 487 | +// possible codes are counted for each number of coded symbols from two to the | |
| 488 | +// maximum. The counts for each of those and the total number of codes are | |
| 489 | +// shown. The maximum number of inflate table entires is then calculated across | |
| 490 | +// all possible codes. Each new maximum number of table entries and the | |
| 491 | +// associated sub-code (starting at root + 1 == 10 bits) is shown. | |
| 492 | +// | |
| 493 | +// To count and examine prefix codes that are not length-limited, provide a | |
| 494 | +// maximum length equal to the number of symbols minus one. | |
| 495 | +// | |
| 496 | +// For the deflate literal/length code, use "enough". For the deflate distance | |
| 497 | +// code, use "enough 30 6". | |
| 498 | +int main(int argc, char **argv) { | |
| 499 | + // set up globals for cleanup() | |
| 500 | + g.code = NULL; | |
| 501 | + g.num = NULL; | |
| 502 | + g.done = NULL; | |
| 503 | + string_init(&g.out); | |
| 504 | + | |
| 505 | + // get arguments -- default to the deflate literal/length code | |
| 506 | + int syms = 286; | |
| 507 | + g.root = 9; | |
| 508 | + g.max = 15; | |
| 475 | 509 | if (argc > 1) { |
| 476 | 510 | syms = atoi(argv[1]); |
| 477 | 511 | if (argc > 2) { |
| 478 | - root = atoi(argv[2]); | |
| 512 | + g.root = atoi(argv[2]); | |
| 479 | 513 | if (argc > 3) |
| 480 | - max = atoi(argv[3]); | |
| 514 | + g.max = atoi(argv[3]); | |
| 481 | 515 | } |
| 482 | 516 | } |
| 483 | - if (argc > 4 || syms < 2 || root < 1 || max < 1) { | |
| 517 | + if (argc > 4 || syms < 2 || g.root < 1 || g.max < 1) { | |
| 484 | 518 | fputs("invalid arguments, need: [sym >= 2 [root >= 1 [max >= 1]]]\n", |
| 485 | 519 | stderr); |
| 486 | 520 | return 1; |
| 487 | 521 | } |
| 488 | 522 | |
| 489 | - /* if not restricting the code length, the longest is syms - 1 */ | |
| 490 | - if (max > syms - 1) | |
| 491 | - max = syms - 1; | |
| 492 | - | |
| 493 | - /* determine the number of bits in a code_t */ | |
| 494 | - for (n = 0, word = 1; word; n++, word <<= 1) | |
| 495 | - ; | |
| 496 | - | |
| 497 | - /* make sure that the calculation of most will not overflow */ | |
| 498 | - if (max > n || (code_t)(syms - 2) >= (((code_t)0 - 1) >> (max - 1))) { | |
| 523 | + // if not restricting the code length, the longest is syms - 1 | |
| 524 | + if (g.max > syms - 1) | |
| 525 | + g.max = syms - 1; | |
| 526 | + | |
| 527 | + // determine the number of bits in a code_t | |
| 528 | + int bits = 0; | |
| 529 | + for (code_t word = 1; word; word <<= 1) | |
| 530 | + bits++; | |
| 531 | + | |
| 532 | + // make sure that the calculation of most will not overflow | |
| 533 | + if (g.max > bits || (code_t)(syms - 2) >= ((code_t)-1 >> (g.max - 1))) { | |
| 499 | 534 | fputs("abort: code length too long for internal types\n", stderr); |
| 500 | 535 | return 1; |
| 501 | 536 | } |
| 502 | 537 | |
| 503 | - /* reject impossible code requests */ | |
| 504 | - if ((code_t)(syms - 1) > ((code_t)1 << max) - 1) { | |
| 505 | - fprintf(stderr, "%d symbols cannot be coded in %d bits\n", | |
| 506 | - syms, max); | |
| 507 | - return 1; | |
| 508 | - } | |
| 509 | - | |
| 510 | - /* allocate code vector */ | |
| 511 | - code = calloc(max + 1, sizeof(int)); | |
| 512 | - if (code == NULL) { | |
| 513 | - fputs("abort: unable to allocate enough memory\n", stderr); | |
| 514 | - return 1; | |
| 515 | - } | |
| 516 | - | |
| 517 | - /* determine size of saved results array, checking for overflows, | |
| 518 | - allocate and clear the array (set all to zero with calloc()) */ | |
| 519 | - if (syms == 2) /* iff max == 1 */ | |
| 520 | - num = NULL; /* won't be saving any results */ | |
| 521 | - else { | |
| 522 | - size = syms >> 1; | |
| 523 | - if (size > ((size_t)0 - 1) / (n = (syms - 1) >> 1) || | |
| 524 | - (size *= n, size > ((size_t)0 - 1) / (n = max - 1)) || | |
| 525 | - (size *= n, size > ((size_t)0 - 1) / sizeof(big_t)) || | |
| 526 | - (num = calloc(size, sizeof(big_t))) == NULL) { | |
| 527 | - fputs("abort: unable to allocate enough memory\n", stderr); | |
| 528 | - cleanup(); | |
| 529 | - return 1; | |
| 530 | - } | |
| 531 | - } | |
| 532 | - | |
| 533 | - /* count possible codes for all numbers of symbols, add up counts */ | |
| 534 | - sum = 0; | |
| 535 | - for (n = 2; n <= syms; n++) { | |
| 536 | - got = count(n, 1, 2); | |
| 537 | - sum += got; | |
| 538 | - if (got == (big_t)0 - 1 || sum < got) { /* overflow */ | |
| 539 | - fputs("abort: can't count that high!\n", stderr); | |
| 540 | - cleanup(); | |
| 541 | - return 1; | |
| 542 | - } | |
| 543 | - printf("%llu %d-codes\n", got, n); | |
| 544 | - } | |
| 545 | - printf("%llu total codes for 2 to %d symbols", sum, syms); | |
| 546 | - if (max < syms - 1) | |
| 547 | - printf(" (%d-bit length limit)\n", max); | |
| 538 | + // reject impossible code requests | |
| 539 | + if ((code_t)(syms - 1) > ((code_t)1 << g.max) - 1) { | |
| 540 | + fprintf(stderr, "%d symbols cannot be coded in %d bits\n", | |
| 541 | + syms, g.max); | |
| 542 | + return 1; | |
| 543 | + } | |
| 544 | + | |
| 545 | + // allocate code vector | |
| 546 | + g.code = calloc(g.max + 1, sizeof(int)); | |
| 547 | + assert(g.code != NULL && "out of memory"); | |
| 548 | + | |
| 549 | + // determine size of saved results array, checking for overflows, | |
| 550 | + // allocate and clear the array (set all to zero with calloc()) | |
| 551 | + if (syms == 2) // iff max == 1 | |
| 552 | + g.num = NULL; // won't be saving any results | |
| 553 | + else { | |
| 554 | + g.size = syms >> 1; | |
| 555 | + int n = (syms - 1) >> 1; | |
| 556 | + assert(g.size <= (size_t)-1 / n && "overflow"); | |
| 557 | + g.size *= n; | |
| 558 | + n = g.max - 1; | |
| 559 | + assert(g.size <= (size_t)-1 / n && "overflow"); | |
| 560 | + g.size *= n; | |
| 561 | + g.num = calloc(g.size, sizeof(big_t)); | |
| 562 | + assert(g.num != NULL && "out of memory"); | |
| 563 | + } | |
| 564 | + | |
| 565 | + // count possible codes for all numbers of symbols, add up counts | |
| 566 | + big_t sum = 0; | |
| 567 | + for (int n = 2; n <= syms; n++) { | |
| 568 | + big_t got = count(n, 2, 1); | |
| 569 | + sum += got; | |
| 570 | + assert(got != (big_t)-1 && sum >= got && "overflow"); | |
| 571 | + } | |
| 572 | + printf("%"PRIbig" total codes for 2 to %d symbols", sum, syms); | |
| 573 | + if (g.max < syms - 1) | |
| 574 | + printf(" (%d-bit length limit)\n", g.max); | |
| 548 | 575 | else |
| 549 | 576 | puts(" (no length limit)"); |
| 550 | 577 | |
| 551 | - /* allocate and clear done array for beenhere() */ | |
| 552 | - if (syms == 2) | |
| 553 | - done = NULL; | |
| 554 | - else if (size > ((size_t)0 - 1) / sizeof(struct tab) || | |
| 555 | - (done = calloc(size, sizeof(struct tab))) == NULL) { | |
| 556 | - fputs("abort: unable to allocate enough memory\n", stderr); | |
| 557 | - cleanup(); | |
| 558 | - return 1; | |
| 559 | - } | |
| 560 | - | |
| 561 | - /* find and show maximum inflate table usage */ | |
| 562 | - if (root > max) /* reduce root to max length */ | |
| 563 | - root = max; | |
| 564 | - if ((code_t)syms < ((code_t)1 << (root + 1))) | |
| 565 | - enough(syms); | |
| 566 | - else | |
| 567 | - puts("cannot handle minimum code lengths > root"); | |
| 568 | - | |
| 569 | - /* done */ | |
| 578 | + // allocate and clear done array for been_here() | |
| 579 | + if (syms == 2) | |
| 580 | + g.done = NULL; | |
| 581 | + else { | |
| 582 | + g.done = calloc(g.size, sizeof(struct tab)); | |
| 583 | + assert(g.done != NULL && "out of memory"); | |
| 584 | + } | |
| 585 | + | |
| 586 | + // find and show maximum inflate table usage | |
| 587 | + if (g.root > g.max) // reduce root to max length | |
| 588 | + g.root = g.max; | |
| 589 | + if ((code_t)syms < ((code_t)1 << (g.root + 1))) | |
| 590 | + enough(syms); | |
| 591 | + else | |
| 592 | + fputs("cannot handle minimum code lengths > root", stderr); | |
| 593 | + | |
| 594 | + // done | |
| 570 | 595 | cleanup(); |
| 571 | 596 | return 0; |
| 572 | 597 | } |
| 573 | 598 |
| --- compat/zlib/examples/enough.c | |
| +++ compat/zlib/examples/enough.c | |
| @@ -1,9 +1,9 @@ | |
| 1 | /* enough.c -- determine the maximum size of inflate's Huffman code tables over |
| 2 | * all possible valid and complete Huffman codes, subject to a length limit. |
| 3 | * Copyright (C) 2007, 2008, 2012 Mark Adler |
| 4 | * Version 1.4 18 August 2012 Mark Adler |
| 5 | */ |
| 6 | |
| 7 | /* Version history: |
| 8 | 1.0 3 Jan 2007 First version (derived from codecount.c version 1.4) |
| 9 | 1.1 4 Jan 2007 Use faster incremental table usage computation |
| @@ -15,105 +15,111 @@ | |
| 15 | Fix bug for initial root table size == max - 1 |
| 16 | Use a macro to compute the history index |
| 17 | 1.4 18 Aug 2012 Avoid shifts more than bits in type (caused endless loop!) |
| 18 | Clean up comparisons of different types |
| 19 | Clean up code indentation |
| 20 | */ |
| 21 | |
| 22 | /* |
| 23 | Examine all possible Huffman codes for a given number of symbols and a |
| 24 | maximum code length in bits to determine the maximum table size for zilb's |
| 25 | inflate. Only complete Huffman codes are counted. |
| 26 | |
| 27 | Two codes are considered distinct if the vectors of the number of codes per |
| 28 | length are not identical. So permutations of the symbol assignments result |
| 29 | in the same code for the counting, as do permutations of the assignments of |
| 30 | the bit values to the codes (i.e. only canonical codes are counted). |
| 31 | |
| 32 | We build a code from shorter to longer lengths, determining how many symbols |
| 33 | are coded at each length. At each step, we have how many symbols remain to |
| 34 | be coded, what the last code length used was, and how many bit patterns of |
| 35 | that length remain unused. Then we add one to the code length and double the |
| 36 | number of unused patterns to graduate to the next code length. We then |
| 37 | assign all portions of the remaining symbols to that code length that |
| 38 | preserve the properties of a correct and eventually complete code. Those |
| 39 | properties are: we cannot use more bit patterns than are available; and when |
| 40 | all the symbols are used, there are exactly zero possible bit patterns |
| 41 | remaining. |
| 42 | |
| 43 | The inflate Huffman decoding algorithm uses two-level lookup tables for |
| 44 | speed. There is a single first-level table to decode codes up to root bits |
| 45 | in length (root == 9 in the current inflate implementation). The table |
| 46 | has 1 << root entries and is indexed by the next root bits of input. Codes |
| 47 | shorter than root bits have replicated table entries, so that the correct |
| 48 | entry is pointed to regardless of the bits that follow the short code. If |
| 49 | the code is longer than root bits, then the table entry points to a second- |
| 50 | level table. The size of that table is determined by the longest code with |
| 51 | that root-bit prefix. If that longest code has length len, then the table |
| 52 | has size 1 << (len - root), to index the remaining bits in that set of |
| 53 | codes. Each subsequent root-bit prefix then has its own sub-table. The |
| 54 | total number of table entries required by the code is calculated |
| 55 | incrementally as the number of codes at each bit length is populated. When |
| 56 | all of the codes are shorter than root bits, then root is reduced to the |
| 57 | longest code length, resulting in a single, smaller, one-level table. |
| 58 | |
| 59 | The inflate algorithm also provides for small values of root (relative to |
| 60 | the log2 of the number of symbols), where the shortest code has more bits |
| 61 | than root. In that case, root is increased to the length of the shortest |
| 62 | code. This program, by design, does not handle that case, so it is verified |
| 63 | that the number of symbols is less than 2^(root + 1). |
| 64 | |
| 65 | In order to speed up the examination (by about ten orders of magnitude for |
| 66 | the default arguments), the intermediate states in the build-up of a code |
| 67 | are remembered and previously visited branches are pruned. The memory |
| 68 | required for this will increase rapidly with the total number of symbols and |
| 69 | the maximum code length in bits. However this is a very small price to pay |
| 70 | for the vast speedup. |
| 71 | |
| 72 | First, all of the possible Huffman codes are counted, and reachable |
| 73 | intermediate states are noted by a non-zero count in a saved-results array. |
| 74 | Second, the intermediate states that lead to (root + 1) bit or longer codes |
| 75 | are used to look at all sub-codes from those junctures for their inflate |
| 76 | memory usage. (The amount of memory used is not affected by the number of |
| 77 | codes of root bits or less in length.) Third, the visited states in the |
| 78 | construction of those sub-codes and the associated calculation of the table |
| 79 | size is recalled in order to avoid recalculating from the same juncture. |
| 80 | Beginning the code examination at (root + 1) bit codes, which is enabled by |
| 81 | identifying the reachable nodes, accounts for about six of the orders of |
| 82 | magnitude of improvement for the default arguments. About another four |
| 83 | orders of magnitude come from not revisiting previous states. Out of |
| 84 | approximately 2x10^16 possible Huffman codes, only about 2x10^6 sub-codes |
| 85 | need to be examined to cover all of the possible table memory usage cases |
| 86 | for the default arguments of 286 symbols limited to 15-bit codes. |
| 87 | |
| 88 | Note that an unsigned long long type is used for counting. It is quite easy |
| 89 | to exceed the capacity of an eight-byte integer with a large number of |
| 90 | symbols and a large maximum code length, so multiple-precision arithmetic |
| 91 | would need to replace the unsigned long long arithmetic in that case. This |
| 92 | program will abort if an overflow occurs. The big_t type identifies where |
| 93 | the counting takes place. |
| 94 | |
| 95 | An unsigned long long type is also used for calculating the number of |
| 96 | possible codes remaining at the maximum length. This limits the maximum |
| 97 | code length to the number of bits in a long long minus the number of bits |
| 98 | needed to represent the symbols in a flat code. The code_t type identifies |
| 99 | where the bit pattern counting takes place. |
| 100 | */ |
| 101 | |
| 102 | #include <stdio.h> |
| 103 | #include <stdlib.h> |
| 104 | #include <string.h> |
| 105 | #include <assert.h> |
| 106 | |
| 107 | #define local static |
| 108 | |
| 109 | /* special data types */ |
| 110 | typedef unsigned long long big_t; /* type for code counting */ |
| 111 | typedef unsigned long long code_t; /* type for bit pattern counting */ |
| 112 | struct tab { /* type for been here check */ |
| 113 | size_t len; /* length of bit vector in char's */ |
| 114 | char *vec; /* allocated bit vector */ |
| 115 | }; |
| 116 | |
| 117 | /* The array for saving results, num[], is indexed with this triplet: |
| 118 | |
| 119 | syms: number of symbols remaining to code |
| @@ -124,449 +130,468 @@ | |
| 124 | |
| 125 | syms: 3..totsym (totsym == total symbols to code) |
| 126 | left: 2..syms - 1, but only the evens (so syms == 8 -> 2, 4, 6) |
| 127 | len: 1..max - 1 (max == maximum code length in bits) |
| 128 | |
| 129 | syms == 2 is not saved since that immediately leads to a single code. left |
| 130 | must be even, since it represents the number of available bit patterns at |
| 131 | the current length, which is double the number at the previous length. |
| 132 | left ends at syms-1 since left == syms immediately results in a single code. |
| 133 | (left > sym is not allowed since that would result in an incomplete code.) |
| 134 | len is less than max, since the code completes immediately when len == max. |
| 135 | |
| 136 | The offset into the array is calculated for the three indices with the |
| 137 | first one (syms) being outermost, and the last one (len) being innermost. |
| 138 | We build the array with length max-1 lists for the len index, with syms-3 |
| 139 | of those for each symbol. There are totsym-2 of those, with each one |
| 140 | varying in length as a function of sym. See the calculation of index in |
| 141 | count() for the index, and the calculation of size in main() for the size |
| 142 | of the array. |
| 143 | |
| 144 | For the deflate example of 286 symbols limited to 15-bit codes, the array |
| 145 | has 284,284 entries, taking up 2.17 MB for an 8-byte big_t. More than |
| 146 | half of the space allocated for saved results is actually used -- not all |
| 147 | possible triplets are reached in the generation of valid Huffman codes. |
| 148 | */ |
| 149 | |
| 150 | /* The array for tracking visited states, done[], is itself indexed identically |
| 151 | to the num[] array as described above for the (syms, left, len) triplet. |
| 152 | Each element in the array is further indexed by the (mem, rem) doublet, |
| 153 | where mem is the amount of inflate table space used so far, and rem is the |
| 154 | remaining unused entries in the current inflate sub-table. Each indexed |
| 155 | element is simply one bit indicating whether the state has been visited or |
| 156 | not. Since the ranges for mem and rem are not known a priori, each bit |
| 157 | vector is of a variable size, and grows as needed to accommodate the visited |
| 158 | states. mem and rem are used to calculate a single index in a triangular |
| 159 | array. Since the range of mem is expected in the default case to be about |
| 160 | ten times larger than the range of rem, the array is skewed to reduce the |
| 161 | memory usage, with eight times the range for mem than for rem. See the |
| 162 | calculations for offset and bit in beenhere() for the details. |
| 163 | |
| 164 | For the deflate example of 286 symbols limited to 15-bit codes, the bit |
| 165 | vectors grow to total approximately 21 MB, in addition to the 4.3 MB done[] |
| 166 | array itself. |
| 167 | */ |
| 168 | |
| 169 | /* Globals to avoid propagating constants or constant pointers recursively */ |
| 170 | local int max; /* maximum allowed bit length for the codes */ |
| 171 | local int root; /* size of base code table in bits */ |
| 172 | local int large; /* largest code table so far */ |
| 173 | local size_t size; /* number of elements in num and done */ |
| 174 | local int *code; /* number of symbols assigned to each bit length */ |
| 175 | local big_t *num; /* saved results array for code counting */ |
| 176 | local struct tab *done; /* states already evaluated array */ |
| 177 | |
| 178 | /* Index function for num[] and done[] */ |
| 179 | #define INDEX(i,j,k) (((size_t)((i-1)>>1)*((i-2)>>1)+(j>>1)-1)*(max-1)+k-1) |
| 180 | |
| 181 | /* Free allocated space. Uses globals code, num, and done. */ |
| 182 | local void cleanup(void) |
| 183 | { |
| 184 | size_t n; |
| 185 | |
| 186 | if (done != NULL) { |
| 187 | for (n = 0; n < size; n++) |
| 188 | if (done[n].len) |
| 189 | free(done[n].vec); |
| 190 | free(done); |
| 191 | } |
| 192 | if (num != NULL) |
| 193 | free(num); |
| 194 | if (code != NULL) |
| 195 | free(code); |
| 196 | } |
| 197 | |
| 198 | /* Return the number of possible Huffman codes using bit patterns of lengths |
| 199 | len through max inclusive, coding syms symbols, with left bit patterns of |
| 200 | length len unused -- return -1 if there is an overflow in the counting. |
| 201 | Keep a record of previous results in num to prevent repeating the same |
| 202 | calculation. Uses the globals max and num. */ |
| 203 | local big_t count(int syms, int len, int left) |
| 204 | { |
| 205 | big_t sum; /* number of possible codes from this juncture */ |
| 206 | big_t got; /* value returned from count() */ |
| 207 | int least; /* least number of syms to use at this juncture */ |
| 208 | int most; /* most number of syms to use at this juncture */ |
| 209 | int use; /* number of bit patterns to use in next call */ |
| 210 | size_t index; /* index of this case in *num */ |
| 211 | |
| 212 | /* see if only one possible code */ |
| 213 | if (syms == left) |
| 214 | return 1; |
| 215 | |
| 216 | /* note and verify the expected state */ |
| 217 | assert(syms > left && left > 0 && len < max); |
| 218 | |
| 219 | /* see if we've done this one already */ |
| 220 | index = INDEX(syms, left, len); |
| 221 | got = num[index]; |
| 222 | if (got) |
| 223 | return got; /* we have -- return the saved result */ |
| 224 | |
| 225 | /* we need to use at least this many bit patterns so that the code won't be |
| 226 | incomplete at the next length (more bit patterns than symbols) */ |
| 227 | least = (left << 1) - syms; |
| 228 | if (least < 0) |
| 229 | least = 0; |
| 230 | |
| 231 | /* we can use at most this many bit patterns, lest there not be enough |
| 232 | available for the remaining symbols at the maximum length (if there were |
| 233 | no limit to the code length, this would become: most = left - 1) */ |
| 234 | most = (((code_t)left << (max - len)) - syms) / |
| 235 | (((code_t)1 << (max - len)) - 1); |
| 236 | |
| 237 | /* count all possible codes from this juncture and add them up */ |
| 238 | sum = 0; |
| 239 | for (use = least; use <= most; use++) { |
| 240 | got = count(syms - use, len + 1, (left - use) << 1); |
| 241 | sum += got; |
| 242 | if (got == (big_t)0 - 1 || sum < got) /* overflow */ |
| 243 | return (big_t)0 - 1; |
| 244 | } |
| 245 | |
| 246 | /* verify that all recursive calls are productive */ |
| 247 | assert(sum != 0); |
| 248 | |
| 249 | /* save the result and return it */ |
| 250 | num[index] = sum; |
| 251 | return sum; |
| 252 | } |
| 253 | |
| 254 | /* Return true if we've been here before, set to true if not. Set a bit in a |
| 255 | bit vector to indicate visiting this state. Each (syms,len,left) state |
| 256 | has a variable size bit vector indexed by (mem,rem). The bit vector is |
| 257 | lengthened if needed to allow setting the (mem,rem) bit. */ |
| 258 | local int beenhere(int syms, int len, int left, int mem, int rem) |
| 259 | { |
| 260 | size_t index; /* index for this state's bit vector */ |
| 261 | size_t offset; /* offset in this state's bit vector */ |
| 262 | int bit; /* mask for this state's bit */ |
| 263 | size_t length; /* length of the bit vector in bytes */ |
| 264 | char *vector; /* new or enlarged bit vector */ |
| 265 | |
| 266 | /* point to vector for (syms,left,len), bit in vector for (mem,rem) */ |
| 267 | index = INDEX(syms, left, len); |
| 268 | mem -= 1 << root; |
| 269 | offset = (mem >> 3) + rem; |
| 270 | offset = ((offset * (offset + 1)) >> 1) + rem; |
| 271 | bit = 1 << (mem & 7); |
| 272 | |
| 273 | /* see if we've been here */ |
| 274 | length = done[index].len; |
| 275 | if (offset < length && (done[index].vec[offset] & bit) != 0) |
| 276 | return 1; /* done this! */ |
| 277 | |
| 278 | /* we haven't been here before -- set the bit to show we have now */ |
| 279 | |
| 280 | /* see if we need to lengthen the vector in order to set the bit */ |
| 281 | if (length <= offset) { |
| 282 | /* if we have one already, enlarge it, zero out the appended space */ |
| 283 | if (length) { |
| 284 | do { |
| 285 | length <<= 1; |
| 286 | } while (length <= offset); |
| 287 | vector = realloc(done[index].vec, length); |
| 288 | if (vector != NULL) |
| 289 | memset(vector + done[index].len, 0, length - done[index].len); |
| 290 | } |
| 291 | |
| 292 | /* otherwise we need to make a new vector and zero it out */ |
| 293 | else { |
| 294 | length = 1 << (len - root); |
| 295 | while (length <= offset) |
| 296 | length <<= 1; |
| 297 | vector = calloc(length, sizeof(char)); |
| 298 | } |
| 299 | |
| 300 | /* in either case, bail if we can't get the memory */ |
| 301 | if (vector == NULL) { |
| 302 | fputs("abort: unable to allocate enough memory\n", stderr); |
| 303 | cleanup(); |
| 304 | exit(1); |
| 305 | } |
| 306 | |
| 307 | /* install the new vector */ |
| 308 | done[index].len = length; |
| 309 | done[index].vec = vector; |
| 310 | } |
| 311 | |
| 312 | /* set the bit */ |
| 313 | done[index].vec[offset] |= bit; |
| 314 | return 0; |
| 315 | } |
| 316 | |
| 317 | /* Examine all possible codes from the given node (syms, len, left). Compute |
| 318 | the amount of memory required to build inflate's decoding tables, where the |
| 319 | number of code structures used so far is mem, and the number remaining in |
| 320 | the current sub-table is rem. Uses the globals max, code, root, large, and |
| 321 | done. */ |
| 322 | local void examine(int syms, int len, int left, int mem, int rem) |
| 323 | { |
| 324 | int least; /* least number of syms to use at this juncture */ |
| 325 | int most; /* most number of syms to use at this juncture */ |
| 326 | int use; /* number of bit patterns to use in next call */ |
| 327 | |
| 328 | /* see if we have a complete code */ |
| 329 | if (syms == left) { |
| 330 | /* set the last code entry */ |
| 331 | code[len] = left; |
| 332 | |
| 333 | /* complete computation of memory used by this code */ |
| 334 | while (rem < left) { |
| 335 | left -= rem; |
| 336 | rem = 1 << (len - root); |
| 337 | mem += rem; |
| 338 | } |
| 339 | assert(rem == left); |
| 340 | |
| 341 | /* if this is a new maximum, show the entries used and the sub-code */ |
| 342 | if (mem > large) { |
| 343 | large = mem; |
| 344 | printf("max %d: ", mem); |
| 345 | for (use = root + 1; use <= max; use++) |
| 346 | if (code[use]) |
| 347 | printf("%d[%d] ", code[use], use); |
| 348 | putchar('\n'); |
| 349 | fflush(stdout); |
| 350 | } |
| 351 | |
| 352 | /* remove entries as we drop back down in the recursion */ |
| 353 | code[len] = 0; |
| 354 | return; |
| 355 | } |
| 356 | |
| 357 | /* prune the tree if we can */ |
| 358 | if (beenhere(syms, len, left, mem, rem)) |
| 359 | return; |
| 360 | |
| 361 | /* we need to use at least this many bit patterns so that the code won't be |
| 362 | incomplete at the next length (more bit patterns than symbols) */ |
| 363 | least = (left << 1) - syms; |
| 364 | if (least < 0) |
| 365 | least = 0; |
| 366 | |
| 367 | /* we can use at most this many bit patterns, lest there not be enough |
| 368 | available for the remaining symbols at the maximum length (if there were |
| 369 | no limit to the code length, this would become: most = left - 1) */ |
| 370 | most = (((code_t)left << (max - len)) - syms) / |
| 371 | (((code_t)1 << (max - len)) - 1); |
| 372 | |
| 373 | /* occupy least table spaces, creating new sub-tables as needed */ |
| 374 | use = least; |
| 375 | while (rem < use) { |
| 376 | use -= rem; |
| 377 | rem = 1 << (len - root); |
| 378 | mem += rem; |
| 379 | } |
| 380 | rem -= use; |
| 381 | |
| 382 | /* examine codes from here, updating table space as we go */ |
| 383 | for (use = least; use <= most; use++) { |
| 384 | code[len] = use; |
| 385 | examine(syms - use, len + 1, (left - use) << 1, |
| 386 | mem + (rem ? 1 << (len - root) : 0), rem << 1); |
| 387 | if (rem == 0) { |
| 388 | rem = 1 << (len - root); |
| 389 | mem += rem; |
| 390 | } |
| 391 | rem--; |
| 392 | } |
| 393 | |
| 394 | /* remove entries as we drop back down in the recursion */ |
| 395 | code[len] = 0; |
| 396 | } |
| 397 | |
| 398 | /* Look at all sub-codes starting with root + 1 bits. Look at only the valid |
| 399 | intermediate code states (syms, left, len). For each completed code, |
| 400 | calculate the amount of memory required by inflate to build the decoding |
| 401 | tables. Find the maximum amount of memory required and show the code that |
| 402 | requires that maximum. Uses the globals max, root, and num. */ |
| 403 | local void enough(int syms) |
| 404 | { |
| 405 | int n; /* number of remaing symbols for this node */ |
| 406 | int left; /* number of unused bit patterns at this length */ |
| 407 | size_t index; /* index of this case in *num */ |
| 408 | |
| 409 | /* clear code */ |
| 410 | for (n = 0; n <= max; n++) |
| 411 | code[n] = 0; |
| 412 | |
| 413 | /* look at all (root + 1) bit and longer codes */ |
| 414 | large = 1 << root; /* base table */ |
| 415 | if (root < max) /* otherwise, there's only a base table */ |
| 416 | for (n = 3; n <= syms; n++) |
| 417 | for (left = 2; left < n; left += 2) |
| 418 | { |
| 419 | /* look at all reachable (root + 1) bit nodes, and the |
| 420 | resulting codes (complete at root + 2 or more) */ |
| 421 | index = INDEX(n, left, root + 1); |
| 422 | if (root + 1 < max && num[index]) /* reachable node */ |
| 423 | examine(n, root + 1, left, 1 << root, 0); |
| 424 | |
| 425 | /* also look at root bit codes with completions at root + 1 |
| 426 | bits (not saved in num, since complete), just in case */ |
| 427 | if (num[index - 1] && n <= left << 1) |
| 428 | examine((n - left) << 1, root + 1, (n - left) << 1, |
| 429 | 1 << root, 0); |
| 430 | } |
| 431 | |
| 432 | /* done */ |
| 433 | printf("done: maximum of %d table entries\n", large); |
| 434 | } |
| 435 | |
| 436 | /* |
| 437 | Examine and show the total number of possible Huffman codes for a given |
| 438 | maximum number of symbols, initial root table size, and maximum code length |
| 439 | in bits -- those are the command arguments in that order. The default |
| 440 | values are 286, 9, and 15 respectively, for the deflate literal/length code. |
| 441 | The possible codes are counted for each number of coded symbols from two to |
| 442 | the maximum. The counts for each of those and the total number of codes are |
| 443 | shown. The maximum number of inflate table entires is then calculated |
| 444 | across all possible codes. Each new maximum number of table entries and the |
| 445 | associated sub-code (starting at root + 1 == 10 bits) is shown. |
| 446 | |
| 447 | To count and examine Huffman codes that are not length-limited, provide a |
| 448 | maximum length equal to the number of symbols minus one. |
| 449 | |
| 450 | For the deflate literal/length code, use "enough". For the deflate distance |
| 451 | code, use "enough 30 6". |
| 452 | |
| 453 | This uses the %llu printf format to print big_t numbers, which assumes that |
| 454 | big_t is an unsigned long long. If the big_t type is changed (for example |
| 455 | to a multiple precision type), the method of printing will also need to be |
| 456 | updated. |
| 457 | */ |
| 458 | int main(int argc, char **argv) |
| 459 | { |
| 460 | int syms; /* total number of symbols to code */ |
| 461 | int n; /* number of symbols to code for this run */ |
| 462 | big_t got; /* return value of count() */ |
| 463 | big_t sum; /* accumulated number of codes over n */ |
| 464 | code_t word; /* for counting bits in code_t */ |
| 465 | |
| 466 | /* set up globals for cleanup() */ |
| 467 | code = NULL; |
| 468 | num = NULL; |
| 469 | done = NULL; |
| 470 | |
| 471 | /* get arguments -- default to the deflate literal/length code */ |
| 472 | syms = 286; |
| 473 | root = 9; |
| 474 | max = 15; |
| 475 | if (argc > 1) { |
| 476 | syms = atoi(argv[1]); |
| 477 | if (argc > 2) { |
| 478 | root = atoi(argv[2]); |
| 479 | if (argc > 3) |
| 480 | max = atoi(argv[3]); |
| 481 | } |
| 482 | } |
| 483 | if (argc > 4 || syms < 2 || root < 1 || max < 1) { |
| 484 | fputs("invalid arguments, need: [sym >= 2 [root >= 1 [max >= 1]]]\n", |
| 485 | stderr); |
| 486 | return 1; |
| 487 | } |
| 488 | |
| 489 | /* if not restricting the code length, the longest is syms - 1 */ |
| 490 | if (max > syms - 1) |
| 491 | max = syms - 1; |
| 492 | |
| 493 | /* determine the number of bits in a code_t */ |
| 494 | for (n = 0, word = 1; word; n++, word <<= 1) |
| 495 | ; |
| 496 | |
| 497 | /* make sure that the calculation of most will not overflow */ |
| 498 | if (max > n || (code_t)(syms - 2) >= (((code_t)0 - 1) >> (max - 1))) { |
| 499 | fputs("abort: code length too long for internal types\n", stderr); |
| 500 | return 1; |
| 501 | } |
| 502 | |
| 503 | /* reject impossible code requests */ |
| 504 | if ((code_t)(syms - 1) > ((code_t)1 << max) - 1) { |
| 505 | fprintf(stderr, "%d symbols cannot be coded in %d bits\n", |
| 506 | syms, max); |
| 507 | return 1; |
| 508 | } |
| 509 | |
| 510 | /* allocate code vector */ |
| 511 | code = calloc(max + 1, sizeof(int)); |
| 512 | if (code == NULL) { |
| 513 | fputs("abort: unable to allocate enough memory\n", stderr); |
| 514 | return 1; |
| 515 | } |
| 516 | |
| 517 | /* determine size of saved results array, checking for overflows, |
| 518 | allocate and clear the array (set all to zero with calloc()) */ |
| 519 | if (syms == 2) /* iff max == 1 */ |
| 520 | num = NULL; /* won't be saving any results */ |
| 521 | else { |
| 522 | size = syms >> 1; |
| 523 | if (size > ((size_t)0 - 1) / (n = (syms - 1) >> 1) || |
| 524 | (size *= n, size > ((size_t)0 - 1) / (n = max - 1)) || |
| 525 | (size *= n, size > ((size_t)0 - 1) / sizeof(big_t)) || |
| 526 | (num = calloc(size, sizeof(big_t))) == NULL) { |
| 527 | fputs("abort: unable to allocate enough memory\n", stderr); |
| 528 | cleanup(); |
| 529 | return 1; |
| 530 | } |
| 531 | } |
| 532 | |
| 533 | /* count possible codes for all numbers of symbols, add up counts */ |
| 534 | sum = 0; |
| 535 | for (n = 2; n <= syms; n++) { |
| 536 | got = count(n, 1, 2); |
| 537 | sum += got; |
| 538 | if (got == (big_t)0 - 1 || sum < got) { /* overflow */ |
| 539 | fputs("abort: can't count that high!\n", stderr); |
| 540 | cleanup(); |
| 541 | return 1; |
| 542 | } |
| 543 | printf("%llu %d-codes\n", got, n); |
| 544 | } |
| 545 | printf("%llu total codes for 2 to %d symbols", sum, syms); |
| 546 | if (max < syms - 1) |
| 547 | printf(" (%d-bit length limit)\n", max); |
| 548 | else |
| 549 | puts(" (no length limit)"); |
| 550 | |
| 551 | /* allocate and clear done array for beenhere() */ |
| 552 | if (syms == 2) |
| 553 | done = NULL; |
| 554 | else if (size > ((size_t)0 - 1) / sizeof(struct tab) || |
| 555 | (done = calloc(size, sizeof(struct tab))) == NULL) { |
| 556 | fputs("abort: unable to allocate enough memory\n", stderr); |
| 557 | cleanup(); |
| 558 | return 1; |
| 559 | } |
| 560 | |
| 561 | /* find and show maximum inflate table usage */ |
| 562 | if (root > max) /* reduce root to max length */ |
| 563 | root = max; |
| 564 | if ((code_t)syms < ((code_t)1 << (root + 1))) |
| 565 | enough(syms); |
| 566 | else |
| 567 | puts("cannot handle minimum code lengths > root"); |
| 568 | |
| 569 | /* done */ |
| 570 | cleanup(); |
| 571 | return 0; |
| 572 | } |
| 573 |
| --- compat/zlib/examples/enough.c | |
| +++ compat/zlib/examples/enough.c | |
| @@ -1,9 +1,9 @@ | |
| 1 | /* enough.c -- determine the maximum size of inflate's Huffman code tables over |
| 2 | * all possible valid and complete prefix codes, subject to a length limit. |
| 3 | * Copyright (C) 2007, 2008, 2012, 2018 Mark Adler |
| 4 | * Version 1.5 5 August 2018 Mark Adler |
| 5 | */ |
| 6 | |
| 7 | /* Version history: |
| 8 | 1.0 3 Jan 2007 First version (derived from codecount.c version 1.4) |
| 9 | 1.1 4 Jan 2007 Use faster incremental table usage computation |
| @@ -15,105 +15,111 @@ | |
| 15 | Fix bug for initial root table size == max - 1 |
| 16 | Use a macro to compute the history index |
| 17 | 1.4 18 Aug 2012 Avoid shifts more than bits in type (caused endless loop!) |
| 18 | Clean up comparisons of different types |
| 19 | Clean up code indentation |
| 20 | 1.5 5 Aug 2018 Clean up code style, formatting, and comments |
| 21 | Show all the codes for the maximum, and only the maximum |
| 22 | */ |
| 23 | |
| 24 | /* |
| 25 | Examine all possible prefix codes for a given number of symbols and a |
| 26 | maximum code length in bits to determine the maximum table size for zlib's |
| 27 | inflate. Only complete prefix codes are counted. |
| 28 | |
| 29 | Two codes are considered distinct if the vectors of the number of codes per |
| 30 | length are not identical. So permutations of the symbol assignments result |
| 31 | in the same code for the counting, as do permutations of the assignments of |
| 32 | the bit values to the codes (i.e. only canonical codes are counted). |
| 33 | |
| 34 | We build a code from shorter to longer lengths, determining how many symbols |
| 35 | are coded at each length. At each step, we have how many symbols remain to |
| 36 | be coded, what the last code length used was, and how many bit patterns of |
| 37 | that length remain unused. Then we add one to the code length and double the |
| 38 | number of unused patterns to graduate to the next code length. We then |
| 39 | assign all portions of the remaining symbols to that code length that |
| 40 | preserve the properties of a correct and eventually complete code. Those |
| 41 | properties are: we cannot use more bit patterns than are available; and when |
| 42 | all the symbols are used, there are exactly zero possible bit patterns left |
| 43 | unused. |
| 44 | |
| 45 | The inflate Huffman decoding algorithm uses two-level lookup tables for |
| 46 | speed. There is a single first-level table to decode codes up to root bits |
| 47 | in length (root == 9 for literal/length codes and root == 6 for distance |
| 48 | codes, in the current inflate implementation). The base table has 1 << root |
| 49 | entries and is indexed by the next root bits of input. Codes shorter than |
| 50 | root bits have replicated table entries, so that the correct entry is |
| 51 | pointed to regardless of the bits that follow the short code. If the code is |
| 52 | longer than root bits, then the table entry points to a second-level table. |
| 53 | The size of that table is determined by the longest code with that root-bit |
| 54 | prefix. If that longest code has length len, then the table has size 1 << |
| 55 | (len - root), to index the remaining bits in that set of codes. Each |
| 56 | subsequent root-bit prefix then has its own sub-table. The total number of |
| 57 | table entries required by the code is calculated incrementally as the number |
| 58 | of codes at each bit length is populated. When all of the codes are shorter |
| 59 | than root bits, then root is reduced to the longest code length, resulting |
| 60 | in a single, smaller, one-level table. |
| 61 | |
| 62 | The inflate algorithm also provides for small values of root (relative to |
| 63 | the log2 of the number of symbols), where the shortest code has more bits |
| 64 | than root. In that case, root is increased to the length of the shortest |
| 65 | code. This program, by design, does not handle that case, so it is verified |
| 66 | that the number of symbols is less than 1 << (root + 1). |
| 67 | |
| 68 | In order to speed up the examination (by about ten orders of magnitude for |
| 69 | the default arguments), the intermediate states in the build-up of a code |
| 70 | are remembered and previously visited branches are pruned. The memory |
| 71 | required for this will increase rapidly with the total number of symbols and |
| 72 | the maximum code length in bits. However this is a very small price to pay |
| 73 | for the vast speedup. |
| 74 | |
| 75 | First, all of the possible prefix codes are counted, and reachable |
| 76 | intermediate states are noted by a non-zero count in a saved-results array. |
| 77 | Second, the intermediate states that lead to (root + 1) bit or longer codes |
| 78 | are used to look at all sub-codes from those junctures for their inflate |
| 79 | memory usage. (The amount of memory used is not affected by the number of |
| 80 | codes of root bits or less in length.) Third, the visited states in the |
| 81 | construction of those sub-codes and the associated calculation of the table |
| 82 | size is recalled in order to avoid recalculating from the same juncture. |
| 83 | Beginning the code examination at (root + 1) bit codes, which is enabled by |
| 84 | identifying the reachable nodes, accounts for about six of the orders of |
| 85 | magnitude of improvement for the default arguments. About another four |
| 86 | orders of magnitude come from not revisiting previous states. Out of |
| 87 | approximately 2x10^16 possible prefix codes, only about 2x10^6 sub-codes |
| 88 | need to be examined to cover all of the possible table memory usage cases |
| 89 | for the default arguments of 286 symbols limited to 15-bit codes. |
| 90 | |
| 91 | Note that the uintmax_t type is used for counting. It is quite easy to |
| 92 | exceed the capacity of an eight-byte integer with a large number of symbols |
| 93 | and a large maximum code length, so multiple-precision arithmetic would need |
| 94 | to replace the integer arithmetic in that case. This program will abort if |
| 95 | an overflow occurs. The big_t type identifies where the counting takes |
| 96 | place. |
| 97 | |
| 98 | The uintmax_t type is also used for calculating the number of possible codes |
| 99 | remaining at the maximum length. This limits the maximum code length to the |
| 100 | number of bits in a long long minus the number of bits needed to represent |
| 101 | the symbols in a flat code. The code_t type identifies where the bit-pattern |
| 102 | counting takes place. |
| 103 | */ |
| 104 | |
| 105 | #include <stdio.h> |
| 106 | #include <stdlib.h> |
| 107 | #include <string.h> |
| 108 | #include <stdarg.h> |
| 109 | #include <stdint.h> |
| 110 | #include <assert.h> |
| 111 | |
| 112 | #define local static |
| 113 | |
| 114 | // Special data types. |
| 115 | typedef uintmax_t big_t; // type for code counting |
| 116 | #define PRIbig "ju" // printf format for big_t |
| 117 | typedef uintmax_t code_t; // type for bit pattern counting |
| 118 | struct tab { // type for been-here check |
| 119 | size_t len; // allocated length of bit vector in octets |
| 120 | char *vec; // allocated bit vector |
| 121 | }; |
| 122 | |
| 123 | /* The array for saving results, num[], is indexed with this triplet: |
| 124 | |
| 125 | syms: number of symbols remaining to code |
| @@ -124,449 +130,468 @@ | |
| 130 | |
| 131 | syms: 3..totsym (totsym == total symbols to code) |
| 132 | left: 2..syms - 1, but only the evens (so syms == 8 -> 2, 4, 6) |
| 133 | len: 1..max - 1 (max == maximum code length in bits) |
| 134 | |
| 135 | syms == 2 is not saved since that immediately leads to a single code. left |
| 136 | must be even, since it represents the number of available bit patterns at |
| 137 | the current length, which is double the number at the previous length. left |
| 138 | ends at syms-1 since left == syms immediately results in a single code. |
| 139 | (left > sym is not allowed since that would result in an incomplete code.) |
| 140 | len is less than max, since the code completes immediately when len == max. |
| 141 | |
| 142 | The offset into the array is calculated for the three indices with the first |
| 143 | one (syms) being outermost, and the last one (len) being innermost. We build |
| 144 | the array with length max-1 lists for the len index, with syms-3 of those |
| 145 | for each symbol. There are totsym-2 of those, with each one varying in |
| 146 | length as a function of sym. See the calculation of index in map() for the |
| 147 | index, and the calculation of size in main() for the size of the array. |
| 148 | |
| 149 | For the deflate example of 286 symbols limited to 15-bit codes, the array |
| 150 | has 284,284 entries, taking up 2.17 MB for an 8-byte big_t. More than half |
| 151 | of the space allocated for saved results is actually used -- not all |
| 152 | possible triplets are reached in the generation of valid prefix codes. |
| 153 | */ |
| 154 | |
| 155 | /* The array for tracking visited states, done[], is itself indexed identically |
| 156 | to the num[] array as described above for the (syms, left, len) triplet. |
| 157 | Each element in the array is further indexed by the (mem, rem) doublet, |
| 158 | where mem is the amount of inflate table space used so far, and rem is the |
| 159 | remaining unused entries in the current inflate sub-table. Each indexed |
| 160 | element is simply one bit indicating whether the state has been visited or |
| 161 | not. Since the ranges for mem and rem are not known a priori, each bit |
| 162 | vector is of a variable size, and grows as needed to accommodate the visited |
| 163 | states. mem and rem are used to calculate a single index in a triangular |
| 164 | array. Since the range of mem is expected in the default case to be about |
| 165 | ten times larger than the range of rem, the array is skewed to reduce the |
| 166 | memory usage, with eight times the range for mem than for rem. See the |
| 167 | calculations for offset and bit in been_here() for the details. |
| 168 | |
| 169 | For the deflate example of 286 symbols limited to 15-bit codes, the bit |
| 170 | vectors grow to total 5.5 MB, in addition to the 4.3 MB done array itself. |
| 171 | */ |
| 172 | |
| 173 | // Type for a variable-length, allocated string. |
| 174 | typedef struct { |
| 175 | char *str; // pointer to allocated string |
| 176 | size_t size; // size of allocation |
| 177 | size_t len; // length of string, not including terminating zero |
| 178 | } string_t; |
| 179 | |
| 180 | // Clear a string_t. |
| 181 | local void string_clear(string_t *s) { |
| 182 | s->str[0] = 0; |
| 183 | s->len = 0; |
| 184 | } |
| 185 | |
| 186 | // Initialize a string_t. |
| 187 | local void string_init(string_t *s) { |
| 188 | s->size = 16; |
| 189 | s->str = malloc(s->size); |
| 190 | assert(s->str != NULL && "out of memory"); |
| 191 | string_clear(s); |
| 192 | } |
| 193 | |
| 194 | // Release the allocation of a string_t. |
| 195 | local void string_free(string_t *s) { |
| 196 | free(s->str); |
| 197 | s->str = NULL; |
| 198 | s->size = 0; |
| 199 | s->len = 0; |
| 200 | } |
| 201 | |
| 202 | // Save the results of printf with fmt and the subsequent argument list to s. |
| 203 | // Each call appends to s. The allocated space for s is increased as needed. |
| 204 | local void string_printf(string_t *s, char *fmt, ...) { |
| 205 | va_list ap; |
| 206 | va_start(ap, fmt); |
| 207 | size_t len = s->len; |
| 208 | int ret = vsnprintf(s->str + len, s->size - len, fmt, ap); |
| 209 | assert(ret >= 0 && "out of memory"); |
| 210 | s->len += ret; |
| 211 | if (s->size < s->len + 1) { |
| 212 | do { |
| 213 | s->size <<= 1; |
| 214 | assert(s->size != 0 && "overflow"); |
| 215 | } while (s->size < s->len + 1); |
| 216 | s->str = realloc(s->str, s->size); |
| 217 | assert(s->str != NULL && "out of memory"); |
| 218 | vsnprintf(s->str + len, s->size - len, fmt, ap); |
| 219 | } |
| 220 | va_end(ap); |
| 221 | } |
| 222 | |
| 223 | // Globals to avoid propagating constants or constant pointers recursively. |
| 224 | struct { |
| 225 | int max; // maximum allowed bit length for the codes |
| 226 | int root; // size of base code table in bits |
| 227 | int large; // largest code table so far |
| 228 | size_t size; // number of elements in num and done |
| 229 | big_t tot; // total number of codes with maximum tables size |
| 230 | string_t out; // display of subcodes for maximum tables size |
| 231 | int *code; // number of symbols assigned to each bit length |
| 232 | big_t *num; // saved results array for code counting |
| 233 | struct tab *done; // states already evaluated array |
| 234 | } g; |
| 235 | |
| 236 | // Index function for num[] and done[]. |
| 237 | local inline size_t map(int syms, int left, int len) { |
| 238 | return ((size_t)((syms - 1) >> 1) * ((syms - 2) >> 1) + |
| 239 | (left >> 1) - 1) * (g.max - 1) + |
| 240 | len - 1; |
| 241 | } |
| 242 | |
| 243 | // Free allocated space in globals. |
| 244 | local void cleanup(void) { |
| 245 | if (g.done != NULL) { |
| 246 | for (size_t n = 0; n < g.size; n++) |
| 247 | if (g.done[n].len) |
| 248 | free(g.done[n].vec); |
| 249 | g.size = 0; |
| 250 | free(g.done); g.done = NULL; |
| 251 | } |
| 252 | free(g.num); g.num = NULL; |
| 253 | free(g.code); g.code = NULL; |
| 254 | string_free(&g.out); |
| 255 | } |
| 256 | |
| 257 | // Return the number of possible prefix codes using bit patterns of lengths len |
| 258 | // through max inclusive, coding syms symbols, with left bit patterns of length |
| 259 | // len unused -- return -1 if there is an overflow in the counting. Keep a |
| 260 | // record of previous results in num to prevent repeating the same calculation. |
| 261 | local big_t count(int syms, int left, int len) { |
| 262 | // see if only one possible code |
| 263 | if (syms == left) |
| 264 | return 1; |
| 265 | |
| 266 | // note and verify the expected state |
| 267 | assert(syms > left && left > 0 && len < g.max); |
| 268 | |
| 269 | // see if we've done this one already |
| 270 | size_t index = map(syms, left, len); |
| 271 | big_t got = g.num[index]; |
| 272 | if (got) |
| 273 | return got; // we have -- return the saved result |
| 274 | |
| 275 | // we need to use at least this many bit patterns so that the code won't be |
| 276 | // incomplete at the next length (more bit patterns than symbols) |
| 277 | int least = (left << 1) - syms; |
| 278 | if (least < 0) |
| 279 | least = 0; |
| 280 | |
| 281 | // we can use at most this many bit patterns, lest there not be enough |
| 282 | // available for the remaining symbols at the maximum length (if there were |
| 283 | // no limit to the code length, this would become: most = left - 1) |
| 284 | int most = (((code_t)left << (g.max - len)) - syms) / |
| 285 | (((code_t)1 << (g.max - len)) - 1); |
| 286 | |
| 287 | // count all possible codes from this juncture and add them up |
| 288 | big_t sum = 0; |
| 289 | for (int use = least; use <= most; use++) { |
| 290 | got = count(syms - use, (left - use) << 1, len + 1); |
| 291 | sum += got; |
| 292 | if (got == (big_t)-1 || sum < got) // overflow |
| 293 | return (big_t)-1; |
| 294 | } |
| 295 | |
| 296 | // verify that all recursive calls are productive |
| 297 | assert(sum != 0); |
| 298 | |
| 299 | // save the result and return it |
| 300 | g.num[index] = sum; |
| 301 | return sum; |
| 302 | } |
| 303 | |
| 304 | // Return true if we've been here before, set to true if not. Set a bit in a |
| 305 | // bit vector to indicate visiting this state. Each (syms,len,left) state has a |
| 306 | // variable size bit vector indexed by (mem,rem). The bit vector is lengthened |
| 307 | // as needed to allow setting the (mem,rem) bit. |
| 308 | local int been_here(int syms, int left, int len, int mem, int rem) { |
| 309 | // point to vector for (syms,left,len), bit in vector for (mem,rem) |
| 310 | size_t index = map(syms, left, len); |
| 311 | mem -= 1 << g.root; // mem always includes the root table |
| 312 | mem >>= 1; // mem and rem are always even |
| 313 | rem >>= 1; |
| 314 | size_t offset = (mem >> 3) + rem; |
| 315 | offset = ((offset * (offset + 1)) >> 1) + rem; |
| 316 | int bit = 1 << (mem & 7); |
| 317 | |
| 318 | // see if we've been here |
| 319 | size_t length = g.done[index].len; |
| 320 | if (offset < length && (g.done[index].vec[offset] & bit) != 0) |
| 321 | return 1; // done this! |
| 322 | |
| 323 | // we haven't been here before -- set the bit to show we have now |
| 324 | |
| 325 | // see if we need to lengthen the vector in order to set the bit |
| 326 | if (length <= offset) { |
| 327 | // if we have one already, enlarge it, zero out the appended space |
| 328 | char *vector; |
| 329 | if (length) { |
| 330 | do { |
| 331 | length <<= 1; |
| 332 | } while (length <= offset); |
| 333 | vector = realloc(g.done[index].vec, length); |
| 334 | assert(vector != NULL && "out of memory"); |
| 335 | memset(vector + g.done[index].len, 0, length - g.done[index].len); |
| 336 | } |
| 337 | |
| 338 | // otherwise we need to make a new vector and zero it out |
| 339 | else { |
| 340 | length = 16; |
| 341 | while (length <= offset) |
| 342 | length <<= 1; |
| 343 | vector = calloc(length, 1); |
| 344 | assert(vector != NULL && "out of memory"); |
| 345 | } |
| 346 | |
| 347 | // install the new vector |
| 348 | g.done[index].len = length; |
| 349 | g.done[index].vec = vector; |
| 350 | } |
| 351 | |
| 352 | // set the bit |
| 353 | g.done[index].vec[offset] |= bit; |
| 354 | return 0; |
| 355 | } |
| 356 | |
| 357 | // Examine all possible codes from the given node (syms, len, left). Compute |
| 358 | // the amount of memory required to build inflate's decoding tables, where the |
| 359 | // number of code structures used so far is mem, and the number remaining in |
| 360 | // the current sub-table is rem. |
| 361 | local void examine(int syms, int left, int len, int mem, int rem) { |
| 362 | // see if we have a complete code |
| 363 | if (syms == left) { |
| 364 | // set the last code entry |
| 365 | g.code[len] = left; |
| 366 | |
| 367 | // complete computation of memory used by this code |
| 368 | while (rem < left) { |
| 369 | left -= rem; |
| 370 | rem = 1 << (len - g.root); |
| 371 | mem += rem; |
| 372 | } |
| 373 | assert(rem == left); |
| 374 | |
| 375 | // if this is at the maximum, show the sub-code |
| 376 | if (mem >= g.large) { |
| 377 | // if this is a new maximum, update the maximum and clear out the |
| 378 | // printed sub-codes from the previous maximum |
| 379 | if (mem > g.large) { |
| 380 | g.large = mem; |
| 381 | string_clear(&g.out); |
| 382 | } |
| 383 | |
| 384 | // compute the starting state for this sub-code |
| 385 | syms = 0; |
| 386 | left = 1 << g.max; |
| 387 | for (int bits = g.max; bits > g.root; bits--) { |
| 388 | syms += g.code[bits]; |
| 389 | left -= g.code[bits]; |
| 390 | assert((left & 1) == 0); |
| 391 | left >>= 1; |
| 392 | } |
| 393 | |
| 394 | // print the starting state and the resulting sub-code to g.out |
| 395 | string_printf(&g.out, "<%u, %u, %u>:", |
| 396 | syms, g.root + 1, ((1 << g.root) - left) << 1); |
| 397 | for (int bits = g.root + 1; bits <= g.max; bits++) |
| 398 | if (g.code[bits]) |
| 399 | string_printf(&g.out, " %d[%d]", g.code[bits], bits); |
| 400 | string_printf(&g.out, "\n"); |
| 401 | } |
| 402 | |
| 403 | // remove entries as we drop back down in the recursion |
| 404 | g.code[len] = 0; |
| 405 | return; |
| 406 | } |
| 407 | |
| 408 | // prune the tree if we can |
| 409 | if (been_here(syms, left, len, mem, rem)) |
| 410 | return; |
| 411 | |
| 412 | // we need to use at least this many bit patterns so that the code won't be |
| 413 | // incomplete at the next length (more bit patterns than symbols) |
| 414 | int least = (left << 1) - syms; |
| 415 | if (least < 0) |
| 416 | least = 0; |
| 417 | |
| 418 | // we can use at most this many bit patterns, lest there not be enough |
| 419 | // available for the remaining symbols at the maximum length (if there were |
| 420 | // no limit to the code length, this would become: most = left - 1) |
| 421 | int most = (((code_t)left << (g.max - len)) - syms) / |
| 422 | (((code_t)1 << (g.max - len)) - 1); |
| 423 | |
| 424 | // occupy least table spaces, creating new sub-tables as needed |
| 425 | int use = least; |
| 426 | while (rem < use) { |
| 427 | use -= rem; |
| 428 | rem = 1 << (len - g.root); |
| 429 | mem += rem; |
| 430 | } |
| 431 | rem -= use; |
| 432 | |
| 433 | // examine codes from here, updating table space as we go |
| 434 | for (use = least; use <= most; use++) { |
| 435 | g.code[len] = use; |
| 436 | examine(syms - use, (left - use) << 1, len + 1, |
| 437 | mem + (rem ? 1 << (len - g.root) : 0), rem << 1); |
| 438 | if (rem == 0) { |
| 439 | rem = 1 << (len - g.root); |
| 440 | mem += rem; |
| 441 | } |
| 442 | rem--; |
| 443 | } |
| 444 | |
| 445 | // remove entries as we drop back down in the recursion |
| 446 | g.code[len] = 0; |
| 447 | } |
| 448 | |
| 449 | // Look at all sub-codes starting with root + 1 bits. Look at only the valid |
| 450 | // intermediate code states (syms, left, len). For each completed code, |
| 451 | // calculate the amount of memory required by inflate to build the decoding |
| 452 | // tables. Find the maximum amount of memory required and show the codes that |
| 453 | // require that maximum. |
| 454 | local void enough(int syms) { |
| 455 | // clear code |
| 456 | for (int n = 0; n <= g.max; n++) |
| 457 | g.code[n] = 0; |
| 458 | |
| 459 | // look at all (root + 1) bit and longer codes |
| 460 | string_clear(&g.out); // empty saved results |
| 461 | g.large = 1 << g.root; // base table |
| 462 | if (g.root < g.max) // otherwise, there's only a base table |
| 463 | for (int n = 3; n <= syms; n++) |
| 464 | for (int left = 2; left < n; left += 2) { |
| 465 | // look at all reachable (root + 1) bit nodes, and the |
| 466 | // resulting codes (complete at root + 2 or more) |
| 467 | size_t index = map(n, left, g.root + 1); |
| 468 | if (g.root + 1 < g.max && g.num[index]) // reachable node |
| 469 | examine(n, left, g.root + 1, 1 << g.root, 0); |
| 470 | |
| 471 | // also look at root bit codes with completions at root + 1 |
| 472 | // bits (not saved in num, since complete), just in case |
| 473 | if (g.num[index - 1] && n <= left << 1) |
| 474 | examine((n - left) << 1, (n - left) << 1, g.root + 1, |
| 475 | 1 << g.root, 0); |
| 476 | } |
| 477 | |
| 478 | // done |
| 479 | printf("maximum of %d table entries for root = %d\n", g.large, g.root); |
| 480 | fputs(g.out.str, stdout); |
| 481 | } |
| 482 | |
| 483 | // Examine and show the total number of possible prefix codes for a given |
| 484 | // maximum number of symbols, initial root table size, and maximum code length |
| 485 | // in bits -- those are the command arguments in that order. The default values |
| 486 | // are 286, 9, and 15 respectively, for the deflate literal/length code. The |
| 487 | // possible codes are counted for each number of coded symbols from two to the |
| 488 | // maximum. The counts for each of those and the total number of codes are |
| 489 | // shown. The maximum number of inflate table entires is then calculated across |
| 490 | // all possible codes. Each new maximum number of table entries and the |
| 491 | // associated sub-code (starting at root + 1 == 10 bits) is shown. |
| 492 | // |
| 493 | // To count and examine prefix codes that are not length-limited, provide a |
| 494 | // maximum length equal to the number of symbols minus one. |
| 495 | // |
| 496 | // For the deflate literal/length code, use "enough". For the deflate distance |
| 497 | // code, use "enough 30 6". |
| 498 | int main(int argc, char **argv) { |
| 499 | // set up globals for cleanup() |
| 500 | g.code = NULL; |
| 501 | g.num = NULL; |
| 502 | g.done = NULL; |
| 503 | string_init(&g.out); |
| 504 | |
| 505 | // get arguments -- default to the deflate literal/length code |
| 506 | int syms = 286; |
| 507 | g.root = 9; |
| 508 | g.max = 15; |
| 509 | if (argc > 1) { |
| 510 | syms = atoi(argv[1]); |
| 511 | if (argc > 2) { |
| 512 | g.root = atoi(argv[2]); |
| 513 | if (argc > 3) |
| 514 | g.max = atoi(argv[3]); |
| 515 | } |
| 516 | } |
| 517 | if (argc > 4 || syms < 2 || g.root < 1 || g.max < 1) { |
| 518 | fputs("invalid arguments, need: [sym >= 2 [root >= 1 [max >= 1]]]\n", |
| 519 | stderr); |
| 520 | return 1; |
| 521 | } |
| 522 | |
| 523 | // if not restricting the code length, the longest is syms - 1 |
| 524 | if (g.max > syms - 1) |
| 525 | g.max = syms - 1; |
| 526 | |
| 527 | // determine the number of bits in a code_t |
| 528 | int bits = 0; |
| 529 | for (code_t word = 1; word; word <<= 1) |
| 530 | bits++; |
| 531 | |
| 532 | // make sure that the calculation of most will not overflow |
| 533 | if (g.max > bits || (code_t)(syms - 2) >= ((code_t)-1 >> (g.max - 1))) { |
| 534 | fputs("abort: code length too long for internal types\n", stderr); |
| 535 | return 1; |
| 536 | } |
| 537 | |
| 538 | // reject impossible code requests |
| 539 | if ((code_t)(syms - 1) > ((code_t)1 << g.max) - 1) { |
| 540 | fprintf(stderr, "%d symbols cannot be coded in %d bits\n", |
| 541 | syms, g.max); |
| 542 | return 1; |
| 543 | } |
| 544 | |
| 545 | // allocate code vector |
| 546 | g.code = calloc(g.max + 1, sizeof(int)); |
| 547 | assert(g.code != NULL && "out of memory"); |
| 548 | |
| 549 | // determine size of saved results array, checking for overflows, |
| 550 | // allocate and clear the array (set all to zero with calloc()) |
| 551 | if (syms == 2) // iff max == 1 |
| 552 | g.num = NULL; // won't be saving any results |
| 553 | else { |
| 554 | g.size = syms >> 1; |
| 555 | int n = (syms - 1) >> 1; |
| 556 | assert(g.size <= (size_t)-1 / n && "overflow"); |
| 557 | g.size *= n; |
| 558 | n = g.max - 1; |
| 559 | assert(g.size <= (size_t)-1 / n && "overflow"); |
| 560 | g.size *= n; |
| 561 | g.num = calloc(g.size, sizeof(big_t)); |
| 562 | assert(g.num != NULL && "out of memory"); |
| 563 | } |
| 564 | |
| 565 | // count possible codes for all numbers of symbols, add up counts |
| 566 | big_t sum = 0; |
| 567 | for (int n = 2; n <= syms; n++) { |
| 568 | big_t got = count(n, 2, 1); |
| 569 | sum += got; |
| 570 | assert(got != (big_t)-1 && sum >= got && "overflow"); |
| 571 | } |
| 572 | printf("%"PRIbig" total codes for 2 to %d symbols", sum, syms); |
| 573 | if (g.max < syms - 1) |
| 574 | printf(" (%d-bit length limit)\n", g.max); |
| 575 | else |
| 576 | puts(" (no length limit)"); |
| 577 | |
| 578 | // allocate and clear done array for been_here() |
| 579 | if (syms == 2) |
| 580 | g.done = NULL; |
| 581 | else { |
| 582 | g.done = calloc(g.size, sizeof(struct tab)); |
| 583 | assert(g.done != NULL && "out of memory"); |
| 584 | } |
| 585 | |
| 586 | // find and show maximum inflate table usage |
| 587 | if (g.root > g.max) // reduce root to max length |
| 588 | g.root = g.max; |
| 589 | if ((code_t)syms < ((code_t)1 << (g.root + 1))) |
| 590 | enough(syms); |
| 591 | else |
| 592 | fputs("cannot handle minimum code lengths > root", stderr); |
| 593 | |
| 594 | // done |
| 595 | cleanup(); |
| 596 | return 0; |
| 597 | } |
| 598 |
+1
-1
| --- compat/zlib/examples/gzappend.c | ||
| +++ compat/zlib/examples/gzappend.c | ||
| @@ -135,11 +135,11 @@ | ||
| 135 | 135 | last = list + (len - 1); |
| 136 | 136 | |
| 137 | 137 | /* do simple left shift by one */ |
| 138 | 138 | if (rot == 1) { |
| 139 | 139 | tmp = *list; |
| 140 | - memcpy(list, list + 1, len - 1); | |
| 140 | + memmove(list, list + 1, len - 1); | |
| 141 | 141 | *last = tmp; |
| 142 | 142 | return; |
| 143 | 143 | } |
| 144 | 144 | |
| 145 | 145 | /* do simple right shift by one */ |
| 146 | 146 |
| --- compat/zlib/examples/gzappend.c | |
| +++ compat/zlib/examples/gzappend.c | |
| @@ -135,11 +135,11 @@ | |
| 135 | last = list + (len - 1); |
| 136 | |
| 137 | /* do simple left shift by one */ |
| 138 | if (rot == 1) { |
| 139 | tmp = *list; |
| 140 | memcpy(list, list + 1, len - 1); |
| 141 | *last = tmp; |
| 142 | return; |
| 143 | } |
| 144 | |
| 145 | /* do simple right shift by one */ |
| 146 |
| --- compat/zlib/examples/gzappend.c | |
| +++ compat/zlib/examples/gzappend.c | |
| @@ -135,11 +135,11 @@ | |
| 135 | last = list + (len - 1); |
| 136 | |
| 137 | /* do simple left shift by one */ |
| 138 | if (rot == 1) { |
| 139 | tmp = *list; |
| 140 | memmove(list, list + 1, len - 1); |
| 141 | *last = tmp; |
| 142 | return; |
| 143 | } |
| 144 | |
| 145 | /* do simple right shift by one */ |
| 146 |
+4
-2
| --- compat/zlib/examples/gzlog.c | ||
| +++ compat/zlib/examples/gzlog.c | ||
| @@ -1,10 +1,10 @@ | ||
| 1 | 1 | /* |
| 2 | 2 | * gzlog.c |
| 3 | - * Copyright (C) 2004, 2008, 2012, 2016 Mark Adler, all rights reserved | |
| 3 | + * Copyright (C) 2004, 2008, 2012, 2016, 2019 Mark Adler, all rights reserved | |
| 4 | 4 | * For conditions of distribution and use, see copyright notice in gzlog.h |
| 5 | - * version 2.2, 14 Aug 2012 | |
| 5 | + * version 2.3, 25 May 2019 | |
| 6 | 6 | */ |
| 7 | 7 | |
| 8 | 8 | /* |
| 9 | 9 | gzlog provides a mechanism for frequently appending short strings to a gzip |
| 10 | 10 | file that is efficient both in execution time and compression ratio. The |
| @@ -754,16 +754,18 @@ | ||
| 754 | 754 | (data = malloc(st.st_size)) == NULL) { |
| 755 | 755 | log_log(log, op, "allocation failure"); |
| 756 | 756 | return -2; |
| 757 | 757 | } |
| 758 | 758 | if ((fd = open(log->path, O_RDONLY, 0)) < 0) { |
| 759 | + free(data); | |
| 759 | 760 | log_log(log, op, ".add file read failure"); |
| 760 | 761 | return -1; |
| 761 | 762 | } |
| 762 | 763 | ret = (size_t)read(fd, data, len) != len; |
| 763 | 764 | close(fd); |
| 764 | 765 | if (ret) { |
| 766 | + free(data); | |
| 765 | 767 | log_log(log, op, ".add file read failure"); |
| 766 | 768 | return -1; |
| 767 | 769 | } |
| 768 | 770 | log_log(log, op, "loaded .add file"); |
| 769 | 771 | } |
| 770 | 772 | |
| 771 | 773 | ADDED compat/zlib/examples/gznorm.c |
| --- compat/zlib/examples/gzlog.c | |
| +++ compat/zlib/examples/gzlog.c | |
| @@ -1,10 +1,10 @@ | |
| 1 | /* |
| 2 | * gzlog.c |
| 3 | * Copyright (C) 2004, 2008, 2012, 2016 Mark Adler, all rights reserved |
| 4 | * For conditions of distribution and use, see copyright notice in gzlog.h |
| 5 | * version 2.2, 14 Aug 2012 |
| 6 | */ |
| 7 | |
| 8 | /* |
| 9 | gzlog provides a mechanism for frequently appending short strings to a gzip |
| 10 | file that is efficient both in execution time and compression ratio. The |
| @@ -754,16 +754,18 @@ | |
| 754 | (data = malloc(st.st_size)) == NULL) { |
| 755 | log_log(log, op, "allocation failure"); |
| 756 | return -2; |
| 757 | } |
| 758 | if ((fd = open(log->path, O_RDONLY, 0)) < 0) { |
| 759 | log_log(log, op, ".add file read failure"); |
| 760 | return -1; |
| 761 | } |
| 762 | ret = (size_t)read(fd, data, len) != len; |
| 763 | close(fd); |
| 764 | if (ret) { |
| 765 | log_log(log, op, ".add file read failure"); |
| 766 | return -1; |
| 767 | } |
| 768 | log_log(log, op, "loaded .add file"); |
| 769 | } |
| 770 | |
| 771 | DDED compat/zlib/examples/gznorm.c |
| --- compat/zlib/examples/gzlog.c | |
| +++ compat/zlib/examples/gzlog.c | |
| @@ -1,10 +1,10 @@ | |
| 1 | /* |
| 2 | * gzlog.c |
| 3 | * Copyright (C) 2004, 2008, 2012, 2016, 2019 Mark Adler, all rights reserved |
| 4 | * For conditions of distribution and use, see copyright notice in gzlog.h |
| 5 | * version 2.3, 25 May 2019 |
| 6 | */ |
| 7 | |
| 8 | /* |
| 9 | gzlog provides a mechanism for frequently appending short strings to a gzip |
| 10 | file that is efficient both in execution time and compression ratio. The |
| @@ -754,16 +754,18 @@ | |
| 754 | (data = malloc(st.st_size)) == NULL) { |
| 755 | log_log(log, op, "allocation failure"); |
| 756 | return -2; |
| 757 | } |
| 758 | if ((fd = open(log->path, O_RDONLY, 0)) < 0) { |
| 759 | free(data); |
| 760 | log_log(log, op, ".add file read failure"); |
| 761 | return -1; |
| 762 | } |
| 763 | ret = (size_t)read(fd, data, len) != len; |
| 764 | close(fd); |
| 765 | if (ret) { |
| 766 | free(data); |
| 767 | log_log(log, op, ".add file read failure"); |
| 768 | return -1; |
| 769 | } |
| 770 | log_log(log, op, "loaded .add file"); |
| 771 | } |
| 772 | |
| 773 | DDED compat/zlib/examples/gznorm.c |
| --- a/compat/zlib/examples/gznorm.c | ||
| +++ b/compat/zlib/examples/gznorm.c | ||
| @@ -0,0 +1,466 @@ | ||
| 1 | +/* gznorm.c -- normalize a gzip stream | |
| 2 | + * Copyright (C) 2018 Mark Adler | |
| 3 | + * For conditions of distribution and use, see copyright notice in zlib.h | |
| 4 | + * Version 1.0 7 Oct 2018 Mark Adler */ | |
| 5 | + | |
| 6 | +// gznorm takes a gzip stream, potentially containing multiple members, and | |
| 7 | +// converts it to a gzip stream with a single member. In addition the gzip | |
| 8 | +// header is normalized, removing the file name and time stamp, and setting the | |
| 9 | +// other header contents (XFL, OS) to fixed values. gznorm does not recompress | |
| 10 | +// the data, so it is fast, but no advantage is gained from the history that | |
| 11 | +// could be available acnclude <stdio.h> // fread, fwrite, putc, fflush, ferror, fprintf, | |
| 12 | + // vsnprintf, stdout, stderr, NULL, FILE | |
| 13 | +#include <stdlib.h> // malloc, free | |
| 14 | +#include <string.h> // strerror | |
| 15 | +#include <errno.h> // errno | |
| 16 | +#include <stdarg.h> // va_list, va_start, va_end | |
| 17 | +#include "zlib.h" // inflateInit2, inflate, inflateReset, inflateEnd, | |
| 18 | + // z_stream, z_off_t, crc32_combine, Z_NULL, Z_BLOCK, | |
| 19 | + // Z_OK, Z_STREAM_END, Z_BUF_ERROR, Z_DATA_ERROR, | |
| 20 | + // Z_MEM_ERROR | |
| 21 | + | |
| 22 | +#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__) | |
| 23 | +# include <fcntl.h> | |
| 24 | +# include <io.h> | |
| 25 | +# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) | |
| 26 | +#else | |
| 27 | +# define SET_BINARY_MODE(file) | |
| 28 | +#endif | |
| 29 | + | |
| 30 | +#define local static | |
| 31 | + | |
| 32 | +// printf to an allocated string. Return the string, or NULL if the printf or | |
| 33 | +// allocation fails. | |
| 34 | +local char *aprintf(char *fmt, ...) { | |
| 35 | + // Get the length of the result of the printf. | |
| 36 | + va_list args; | |
| 37 | + va_start(args, fmt); | |
| 38 | + int len = vsnprintf(NULL, 0, fmt, args); | |
| 39 | + va_end(args); | |
| 40 | + if (len < 0) | |
| 41 | + return NULL; | |
| 42 | + | |
| 43 | + // Allocate the required space and printf to it. | |
| 44 | + char *str = malloc(len + 1); | |
| 45 | + if (str == NULL) | |
| 46 | + return NULL; | |
| 47 | + va_start(args, fmt); | |
| 48 | + vsnprintf(str, len + 1, fmt, args); | |
| 49 | + va_end(args); | |
| 50 | + return str; | |
| 51 | +} | |
| 52 | + | |
| 53 | +// Return with an error, putting an allocated error message in *err. Doing an | |
| 54 | +// inflateEnd() on an already ended state, or one with state set to Z_NULL, is | |
| 55 | +// permitted. | |
| 56 | +#define BYE(...) \ | |
| 57 | + do { \ | |
| 58 | + inflateEnd(&strm); \ | |
| 59 | + *err = aprintf(__VA_ARGS__); \ | |
| 60 | + return 1; \ | |
| 61 | + } while (0) | |
| 62 | + | |
| 63 | +// Chunk size for buffered reads and for decompression. Twice this many bytes | |
| 64 | +// will be allocated on the stack by gzip_normalize(). Must fit in an unsigned. | |
| 65 | +#define CHUNK 16384 | |
| 66 | + | |
| 67 | +// Read a gzip stream from in and write an equivalent normalized gzip stream to | |
| 68 | +// out. If given no input, an empty gzip stream will be written. If successful, | |
| 69 | +// 0 is returned, and *err is set to NULL. On error, 1 is returned, where the | |
| 70 | +// details of the error are returned in *err, a pointer to an allocated string. | |
| 71 | +// | |
| 72 | +// The input may be a stream with multiple gzip members, which is converted to | |
| 73 | +// a single gzip member on the output. Each gzip member is decompressed at the | |
| 74 | +// level of deflate blocks. This enables clearing the last-block bit, shifting | |
| 75 | +// the compressed data to concatenate to the previous member's compressed data, | |
| 76 | +// which can end at an arbitrary bit boundary, and identifying stored blocks in | |
| 77 | +// order to resynchronize those to byte boundaries. The deflate compressed data | |
| 78 | +// is terminated with a 10-bit empty fixed block. If any members on the input | |
| 79 | +// end with a 10-bit empty fixed block, then that block is excised from the | |
| 80 | +// stream. This avoids appending empty fixed blocks for every normalization, | |
| 81 | +// and assures that gzip_normalize applied a second time will not change the | |
| 82 | +// input. The pad bits after stored block headers and after the final deflate | |
| 83 | +// block are all forced to zeros. | |
| 84 | +local int gzip_normalize(FILE *in, FILE *out, char **err) { | |
| 85 | + // initialize the inflate engine to process a gzip member | |
| 86 | + z_stream strm; | |
| 87 | + strm.zalloc = Z_NULL; | |
| 88 | + strm.zfree = Z_NULL; | |
| 89 | + strm.opaque = Z_NULL; | |
| 90 | + strm.avail_in = 0; | |
| 91 | + strm.next_in = Z_NULL; | |
| 92 | + if (inflateInit2(&strm, 15 + 16) != Z_OK) | |
| 93 | + BYE("out of memory"); | |
| 94 | + | |
| 95 | + // State while processing the input gzip stream. | |
| 96 | + enum { // BETWEEN -> HEAD -> BLOCK -> TAIL -> BETWEEN -> ... | |
| 97 | + BETWEEN, // between gzip members (must end in this state) | |
| 98 | + HEAD, // reading a gzip header | |
| 99 | + BLOCK, // reading deflate blocks | |
| 100 | + TAIL // reading a gzip trailer | |
| 101 | + } state = BETWEEN; // current component being processed | |
| 102 | + unsigned long crc = 0; // accumulated CRC of uncompressed data | |
| 103 | + unsigned long len = 0; // accumulated length of uncompressed data | |
| 104 | + unsigned long buf = 0; // deflate stream bit buffer of num bits | |
| 105 | + int num = 0; // number of bits in buf (at bottom) | |
| 106 | + | |
| 107 | + // Write a canonical gzip header (no mod time, file name, comment, extra | |
| 108 | + // block, or extra flags, and OS is marked as unknown). | |
| 109 | + fwrite("\x1f\x8b\x08\0\0\0\0\0\0\xff", 1, 10, out); | |
| 110 | + | |
| 111 | + // Process the gzip stream from in until reaching the end of the input, | |
| 112 | + // encountering invalid input, or experiencing an i/o error. | |
| 113 | + int more; // true if not at the end of the input | |
| 114 | + do { | |
| 115 | + // State inside this loop. | |
| 116 | + unsigned char *put; // next input buffer location to process | |
| 117 | + int prev; // number of bits from previous block in | |
| 118 | + // the bit buffer, or -1 if not at the | |
| 119 | + // start of a block | |
| 120 | + unsigned long long memb; // uncompressed length of member | |
| 121 | + size_t tail; // number of trailer bytes read (0..8) | |
| 122 | + unsigned long part; // accumulated trailer component | |
| 123 | + | |
| 124 | + // Get the next chunk of input from in. | |
| 125 | + unsigned char dat[CHUNK]; | |
| 126 | + strm.avail_in = fread(dat, 1, CHUNK, in); | |
| 127 | + if (strm.avail_in == 0) | |
| 128 | + break; | |
| 129 | + more = strm.avail_in == CHUNK; | |
| 130 | + strm.next_in = put = dat; | |
| 131 | + | |
| 132 | + // Run that chunk of input through the inflate engine to exhaustion. | |
| 133 | + do { | |
| 134 | + // At this point it is assured that strm.avail_in > 0. | |
| 135 | + | |
| 136 | + // Inflate until the end of a gzip component (header, deflate | |
| 137 | + // block, trailer) is reached, or until all of the chunk is | |
| 138 | + // consumed. The resulting decompressed data is discarded, though | |
| 139 | + // the total size of the decompressed data in each member is | |
| 140 | + // tracked, for the calculation of the total CRC. | |
| 141 | + do { | |
| 142 | + // inflate and handle any errors | |
| 143 | + unsigned char scrap[CHUNK]; | |
| 144 | + strm.avail_out = CHUNK; | |
| 145 | + strm.next_out = scrap; | |
| 146 | + int ret = inflate(&strm, Z_BLOCK); | |
| 147 | + if (ret == Z_MEM_ERROR) | |
| 148 | + BYE("out of memory"); | |
| 149 | + if (ret == Z_DATA_ERROR) | |
| 150 | + BYE("input invalid: %s", strm.msg); | |
| 151 | + if (ret != Z_OK && ret != Z_BUF_ERROR && ret != Z_STREAM_END) | |
| 152 | + BYE("internal error"); | |
| 153 | + | |
| 154 | + // Update the number of uncompressed bytes generated in this | |
| 155 | + // member. The actual count (not modulo 2^32) is required to | |
| 156 | + // correctly compute the total CRC. | |
| 157 | + unsigned got = CHUNK - strm.avail_out; | |
| 158 | + memb += got; | |
| 159 | + if (memb < got) | |
| 160 | + BYE("overflow error"); | |
| 161 | + | |
| 162 | + // Continue to process this chunk until it is consumed, or | |
| 163 | + // until the end of a component (header, deflate block, or | |
| 164 | + // trailer) is reached. | |
| 165 | + } while (strm.avail_out == 0 && (strm.data_type & 0x80) == 0); | |
| 166 | + | |
| 167 | + // Since strm.avail_in was > 0 for the inflate call, some input was | |
| 168 | + // just consumed. It is therefore assured that put < strm.next_in. | |
| 169 | + | |
| 170 | + // Disposition the consumed component or part of a component. | |
| 171 | + switch (state) { | |
| 172 | + case BETWEEN: | |
| 173 | + state = HEAD; | |
| 174 | + // Fall through to HEAD when some or all of the header is | |
| 175 | + // processed. | |
| 176 | + | |
| 177 | + case HEAD: | |
| 178 | + // Discard the header. | |
| 179 | + if (strm.data_type & 0x80) { | |
| 180 | + // End of header reached -- deflate blocks follow. | |
| 181 | + put = strm.next_in; | |
| 182 | + prev = num; | |
| 183 | + memb = 0; | |
| 184 | + state = BLOCK; | |
| 185 | + } | |
| 186 | + break; | |
| 187 | + | |
| 188 | + case BLOCK: | |
| 189 | + // Copy the deflate stream to the output, but with the | |
| 190 | + // last-block-bit cleared. Re-synchronize stored block | |
| 191 | + // headers to the output byte boundaries. The bytes at | |
| 192 | + // put..strm.next_in-1 is the compressed data that has been | |
| 193 | + // processed and is ready to be copied to the output. | |
| 194 | + | |
| 195 | + // At this point, it is assured that new compressed data is | |
| 196 | + // available, i.e., put < strm.next_in. If prev is -1, then | |
| 197 | + // that compressed data starts in the middle of a deflate | |
| 198 | + // block. If prev is not -1, then the bits in the bit | |
| 199 | + // buffer, possibly combined with the bits in *put, contain | |
| 200 | + // the three-bit header of the new deflate block. In that | |
| 201 | + // case, prev is the number of bits from the previous block | |
| 202 | + // that remain in the bit buffer. Since num is the number | |
| 203 | + // of bits in the bit buffer, we have that num - prev is | |
| 204 | + // the number of bits from the new block currently in the | |
| 205 | + // bit buffer. | |
| 206 | + | |
| 207 | + // If strm.data_type & 0xc0 is 0x80, then the last byte of | |
| 208 | + // the available compressed data includes the last bits of | |
| 209 | + // the end of a deflate block. In that case, that last byte | |
| 210 | + // also has strm.data_type & 0x1f bits of the next deflate | |
| 211 | + // block, in the range 0..7. If strm.data_type & 0xc0 is | |
| 212 | + // 0xc0, then the last byte of the compressed data is the | |
| 213 | + // end of the deflate stream, followed by strm.data_type & | |
| 214 | + // 0x1f pad bits, also in the range 0..7. | |
| 215 | + | |
| 216 | + // Set bits to the number of bits not yet consumed from the | |
| 217 | + // last byte. If we are at the end of the block, bits is | |
| 218 | + // either the number of bits in the last byte belonging to | |
| 219 | + // the next block, or the number of pad bits after the | |
| 220 | + // final block. In either of those cases, bits is in the | |
| 221 | + // range 0..7. | |
| 222 | + ; // (required due to C syntax oddity) | |
| 223 | + int bits = strm.data_type & 0x1f; | |
| 224 | + | |
| 225 | + if (prev != -1) { | |
| 226 | + // We are at the start of a new block. Clear the last | |
| 227 | + // block bit, and check for special cases. If it is a | |
| 228 | + // stored block, then emit the header and pad to the | |
| 229 | + // next byte boundary. If it is a final, empty fixed | |
| 230 | + // block, then excise it. | |
| 231 | + | |
| 232 | + // Some or all of the three header bits for this block | |
| 233 | + // may already be in the bit buffer. Load any remaining | |
| 234 | + // header bits into the bit buffer. | |
| 235 | + if (num - prev < 3) { | |
| 236 | + buf += (unsigned long)*put++ << num; | |
| 237 | + num += 8; | |
| 238 | + } | |
| 239 | + | |
| 240 | + // Set last to have a 1 in the position of the last | |
| 241 | + // block bit in the bit buffer. | |
| 242 | + unsigned long last = (unsigned long)1 << prev; | |
| 243 | + | |
| 244 | + if (((buf >> prev) & 7) == 3) { | |
| 245 | + // This is a final fixed block. Load at least ten | |
| 246 | + // bits from this block, including the header, into | |
| 247 | + // the bit buffer. We already have at least three, | |
| 248 | + // so at most one more byte needs to be loaded. | |
| 249 | + if (num - prev < 10) { | |
| 250 | + if (put == strm.next_in) | |
| 251 | + // Need to go get and process more input. | |
| 252 | + // We'll end up back here to finish this. | |
| 253 | + break; | |
| 254 | + buf += (unsigned long)*put++ << num; | |
| 255 | + num += 8; | |
| 256 | + } | |
| 257 | + if (((buf >> prev) & 0x3ff) == 3) { | |
| 258 | + // That final fixed block is empty. Delete it | |
| 259 | + // to avoid adding an empty block every time a | |
| 260 | + // gzip stream is normalized. | |
| 261 | + num = prev; | |
| 262 | + buf &= last - 1; // zero the pad bits | |
| 263 | + } | |
| 264 | + } | |
| 265 | + else if (((buf >> prev) & 6) == 0) { | |
| 266 | + // This is a stored block. Flush to the next | |
| 267 | + // byte boundary after the three-bit header. | |
| 268 | + num = (prev + 10) & ~7; | |
| 269 | + buf &= last - 1; // zero the pad bits | |
| 270 | + } | |
| 271 | + | |
| 272 | + // Clear the last block bit. | |
| 273 | + buf &= ~last; | |
| 274 | + | |
| 275 | + // Write out complete bytes in the bit buffer. | |
| 276 | + while (num >= 8) { | |
| 277 | + putc(buf, out); | |
| 278 | + buf >>= 8; | |
| 279 | + num -= 8; | |
| 280 | + } | |
| 281 | + | |
| 282 | + // If no more bytes left to process, then we have | |
| 283 | + // consumed the byte that had bits from the next block. | |
| 284 | + if (put == strm.next_in) | |
| 285 | + bits = 0; | |
| 286 | + } | |
| 287 | + | |
| 288 | + // We are done handling the deflate block header. Now copy | |
| 289 | + // all or almost all of the remaining compressed data that | |
| 290 | + // has been processed so far. Don't copy one byte at the | |
| 291 | + // end if it contains bits from the next deflate block or | |
| 292 | + // pad bits at the end of a deflate block. | |
| 293 | + | |
| 294 | + // mix is 1 if we are at the end of a deflate block, and if | |
| 295 | + // some of the bits in the last byte follow this block. mix | |
| 296 | + // is 0 if we are in the middle of a deflate block, if the | |
| 297 | + // deflate block ended on a byte boundary, or if all of the | |
| 298 | + // compressed data processed so far has been consumed. | |
| 299 | + int mix = (strm.data_type & 0x80) && bits; | |
| 300 | + | |
| 301 | + // Copy all of the processed compressed data to the output, | |
| 302 | + // except for the last byte if it contains bits from the | |
| 303 | + // next deflate block or pad bits at the end of the deflate | |
| 304 | + // stream. Copy the data after shifting in num bits from | |
| 305 | + // buf in front of it, leaving num bits from the end of the | |
| 306 | + // compressed data in buf when done. | |
| 307 | + unsigned char *end = strm.next_in - mix; | |
| 308 | + if (put < end) { | |
| 309 | + if (num) | |
| 310 | + // Insert num bits from buf before the data being | |
| 311 | + // copied. | |
| 312 | + do { | |
| 313 | + buf += (unsigned)(*put++) << num; | |
| 314 | + putc(buf, out); | |
| 315 | + buf >>= 8; | |
| 316 | + } while (put < end); | |
| 317 | + else { | |
| 318 | + // No shifting needed -- write directly. | |
| 319 | + fwrite(put, 1, end - put, out); | |
| 320 | + put = end; | |
| 321 | + } | |
| 322 | + } | |
| 323 | + | |
| 324 | + // Process the last processed byte if it wasn't written. | |
| 325 | + if (mix) { | |
| 326 | + // Load the last byte into the bit buffer. | |
| 327 | + buf += (unsigned)(*put++) << num; | |
| 328 | + num += 8; | |
| 329 | + | |
| 330 | + if (strm.data_type & 0x40) { | |
| 331 | + // We are at the end of the deflate stream and | |
| 332 | + // there are bits pad bits. Discard the pad bits | |
| 333 | + // and write a byte to the output, if available. | |
| 334 | + // Leave the num bits left over in buf to prepend | |
| 335 | + // to the next deflate stream. | |
| 336 | + num -= bits; | |
| 337 | + if (num >= 8) { | |
| 338 | + putc(buf, out); | |
| 339 | + num -= 8; | |
| 340 | + buf >>= 8; | |
| 341 | + } | |
| 342 | + | |
| 343 | + // Force the pad bits in the bit buffer to zeros. | |
| 344 | + buf &= ((unsigned long)1 << num) - 1; | |
| 345 | + | |
| 346 | + // Don't need to set prev here since going to TAIL. | |
| 347 | + } | |
| 348 | + else | |
| 349 | + // At the end of an internal deflate block. Leave | |
| 350 | + // the last byte in the bit buffer to examine on | |
| 351 | + // the next entry to BLOCK, when more bits from the | |
| 352 | + // next block will be available. | |
| 353 | + prev = num - bits; // number of bits in buffer | |
| 354 | + // from current block | |
| 355 | + } | |
| 356 | + | |
| 357 | + // Don't have a byte left over, so we are in the middle of | |
| 358 | + // a deflate block, or the deflate block ended on a byte | |
| 359 | + // boundary. Set prev appropriately for the next entry into | |
| 360 | + // BLOCK. | |
| 361 | + else if (strm.data_type & 0x80) | |
| 362 | + // The block ended on a byte boundary, so no header | |
| 363 | + // bits are in the bit buffer. | |
| 364 | + prev = num; | |
| 365 | + else | |
| 366 | + // In the middle of a deflate block, so no header here. | |
| 367 | + prev = -1; | |
| 368 | + | |
| 369 | + // Check for the end of the deflate stream. | |
| 370 | + if ((strm.data_type & 0xc0) == 0xc0) { | |
| 371 | + // That ends the deflate stream on the input side, the | |
| 372 | + // pad bits were discarded, and any remaining bits from | |
| 373 | + // the last block in the stream are saved in the bit | |
| 374 | + // buffer to prepend to the next stream. Process the | |
| 375 | + // gzip trailer next. | |
| 376 | + tail = 0; | |
| 377 | + part = 0; | |
| 378 | + state = TAIL; | |
| 379 | + } | |
| 380 | + break; | |
| 381 | + | |
| 382 | + case TAIL: | |
| 383 | + // Accumulate available trailer bytes to update the total | |
| 384 | + // CRC and the total uncompressed length. | |
| 385 | + do { | |
| 386 | + part = (part >> 8) + ((unsigned long)(*put++) << 24); | |
| 387 | + tail++; | |
| 388 | + if (tail == 4) { | |
| 389 | + // Update the total CRC. | |
| 390 | + z_off_t len2 = memb; | |
| 391 | + if (len2 < 0 || (unsigned long long)len2 != memb) | |
| 392 | + BYE("overflow error"); | |
| 393 | + crc = crc ? crc32_combine(crc, part, len2) : part; | |
| 394 | + part = 0; | |
| 395 | + } | |
| 396 | + else if (tail == 8) { | |
| 397 | + // Update the total uncompressed length. (It's ok | |
| 398 | + // if this sum is done modulo 2^32.) | |
| 399 | + len += part; | |
| 400 | + | |
| 401 | + // At the end of a member. Set up to inflate an | |
| 402 | + // immediately following gzip member. (If we made | |
| 403 | + // it this far, then the trailer was valid.) | |
| 404 | + if (inflateReset(&strm) != Z_OK) | |
| 405 | + BYE("internal error"); | |
| 406 | + state = BETWEEN; | |
| 407 | + break; | |
| 408 | + } | |
| 409 | + } while (put < strm.next_in); | |
| 410 | + break; | |
| 411 | + } | |
| 412 | + | |
| 413 | + // Process the input buffer until completely consumed. | |
| 414 | + } while (strm.avail_in > 0); | |
| 415 | + | |
| 416 | + // Process input until end of file, invalid input, or i/o error. | |
| 417 | + } while (more); | |
| 418 | + | |
| 419 | + // Done with the inflate engine. | |
| 420 | + inflateEnd(&strm); | |
| 421 | + | |
| 422 | + // Verify the validity of the input. | |
| 423 | + if (state != BETWEEN) | |
| 424 | + BYE("input invalid: incomplete gzip stream"); | |
| 425 | + | |
| 426 | + // Write the remaining deflate stream bits, followed by a terminating | |
| 427 | + // deflate fixed block. | |
| 428 | + buf += (unsigned long)3 << num; | |
| 429 | + putc(buf, out); | |
| 430 | + putc(buf >> 8, out); | |
| 431 | + if (num > 6) | |
| 432 | + putc(0, out); | |
| 433 | + | |
| 434 | + // Write the gzip trailer, which is the CRC and the uncompressed length | |
| 435 | + // modulo 2^32, both in little-endian order. | |
| 436 | + putc(crc, out); | |
| 437 | + putc(crc >> 8, out); | |
| 438 | + putc(crc >> 16, out); | |
| 439 | + putc(crc >> 24, out); | |
| 440 | + putc(len, out); | |
| 441 | + putc(len >> 8, out); | |
| 442 | + putc(len >> 16, out); | |
| 443 | + putc(len >> 24, out); | |
| 444 | + fflush(out); | |
| 445 | + | |
| 446 | + // Check for any i/o errors. | |
| 447 | + if (ferror(in) || ferror(out)) | |
| 448 | + BYE("i/o error: %s", strerror(errno)); | |
| 449 | + | |
| 450 | + // All good! | |
| 451 | + *err = NULL; | |
| 452 | + return 0; | |
| 453 | +} | |
| 454 | + | |
| 455 | +// Normalize the gzip stream on stdin, writing the result to stdout. | |
| 456 | +int main(void) { | |
| 457 | + // Avoid end-of-line conversions on evil operating systems. | |
| 458 | + SET_BINARY_MODE(stdin); | |
| 459 | + SET_BINARY_MODE(stdout); | |
| 460 | + | |
| 461 | + // Normalize from stdin to stdout, returning 1 on error, 0 if ok. | |
| 462 | + char *err; | |
| 463 | + int ret = gzip_normalize(stdin, stdout, &err); | |
| 464 | + if (ret) | |
| 465 | + fprintf(stderr, "gznorm error: %s\n", err); | |
| 466 | + fr |
| --- a/compat/zlib/examples/gznorm.c | |
| +++ b/compat/zlib/examples/gznorm.c | |
| @@ -0,0 +1,466 @@ | |
| --- a/compat/zlib/examples/gznorm.c | |
| +++ b/compat/zlib/examples/gznorm.c | |
| @@ -0,0 +1,466 @@ | |
| 1 | /* gznorm.c -- normalize a gzip stream |
| 2 | * Copyright (C) 2018 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | * Version 1.0 7 Oct 2018 Mark Adler */ |
| 5 | |
| 6 | // gznorm takes a gzip stream, potentially containing multiple members, and |
| 7 | // converts it to a gzip stream with a single member. In addition the gzip |
| 8 | // header is normalized, removing the file name and time stamp, and setting the |
| 9 | // other header contents (XFL, OS) to fixed values. gznorm does not recompress |
| 10 | // the data, so it is fast, but no advantage is gained from the history that |
| 11 | // could be available acnclude <stdio.h> // fread, fwrite, putc, fflush, ferror, fprintf, |
| 12 | // vsnprintf, stdout, stderr, NULL, FILE |
| 13 | #include <stdlib.h> // malloc, free |
| 14 | #include <string.h> // strerror |
| 15 | #include <errno.h> // errno |
| 16 | #include <stdarg.h> // va_list, va_start, va_end |
| 17 | #include "zlib.h" // inflateInit2, inflate, inflateReset, inflateEnd, |
| 18 | // z_stream, z_off_t, crc32_combine, Z_NULL, Z_BLOCK, |
| 19 | // Z_OK, Z_STREAM_END, Z_BUF_ERROR, Z_DATA_ERROR, |
| 20 | // Z_MEM_ERROR |
| 21 | |
| 22 | #if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__) |
| 23 | # include <fcntl.h> |
| 24 | # include <io.h> |
| 25 | # define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) |
| 26 | #else |
| 27 | # define SET_BINARY_MODE(file) |
| 28 | #endif |
| 29 | |
| 30 | #define local static |
| 31 | |
| 32 | // printf to an allocated string. Return the string, or NULL if the printf or |
| 33 | // allocation fails. |
| 34 | local char *aprintf(char *fmt, ...) { |
| 35 | // Get the length of the result of the printf. |
| 36 | va_list args; |
| 37 | va_start(args, fmt); |
| 38 | int len = vsnprintf(NULL, 0, fmt, args); |
| 39 | va_end(args); |
| 40 | if (len < 0) |
| 41 | return NULL; |
| 42 | |
| 43 | // Allocate the required space and printf to it. |
| 44 | char *str = malloc(len + 1); |
| 45 | if (str == NULL) |
| 46 | return NULL; |
| 47 | va_start(args, fmt); |
| 48 | vsnprintf(str, len + 1, fmt, args); |
| 49 | va_end(args); |
| 50 | return str; |
| 51 | } |
| 52 | |
| 53 | // Return with an error, putting an allocated error message in *err. Doing an |
| 54 | // inflateEnd() on an already ended state, or one with state set to Z_NULL, is |
| 55 | // permitted. |
| 56 | #define BYE(...) \ |
| 57 | do { \ |
| 58 | inflateEnd(&strm); \ |
| 59 | *err = aprintf(__VA_ARGS__); \ |
| 60 | return 1; \ |
| 61 | } while (0) |
| 62 | |
| 63 | // Chunk size for buffered reads and for decompression. Twice this many bytes |
| 64 | // will be allocated on the stack by gzip_normalize(). Must fit in an unsigned. |
| 65 | #define CHUNK 16384 |
| 66 | |
| 67 | // Read a gzip stream from in and write an equivalent normalized gzip stream to |
| 68 | // out. If given no input, an empty gzip stream will be written. If successful, |
| 69 | // 0 is returned, and *err is set to NULL. On error, 1 is returned, where the |
| 70 | // details of the error are returned in *err, a pointer to an allocated string. |
| 71 | // |
| 72 | // The input may be a stream with multiple gzip members, which is converted to |
| 73 | // a single gzip member on the output. Each gzip member is decompressed at the |
| 74 | // level of deflate blocks. This enables clearing the last-block bit, shifting |
| 75 | // the compressed data to concatenate to the previous member's compressed data, |
| 76 | // which can end at an arbitrary bit boundary, and identifying stored blocks in |
| 77 | // order to resynchronize those to byte boundaries. The deflate compressed data |
| 78 | // is terminated with a 10-bit empty fixed block. If any members on the input |
| 79 | // end with a 10-bit empty fixed block, then that block is excised from the |
| 80 | // stream. This avoids appending empty fixed blocks for every normalization, |
| 81 | // and assures that gzip_normalize applied a second time will not change the |
| 82 | // input. The pad bits after stored block headers and after the final deflate |
| 83 | // block are all forced to zeros. |
| 84 | local int gzip_normalize(FILE *in, FILE *out, char **err) { |
| 85 | // initialize the inflate engine to process a gzip member |
| 86 | z_stream strm; |
| 87 | strm.zalloc = Z_NULL; |
| 88 | strm.zfree = Z_NULL; |
| 89 | strm.opaque = Z_NULL; |
| 90 | strm.avail_in = 0; |
| 91 | strm.next_in = Z_NULL; |
| 92 | if (inflateInit2(&strm, 15 + 16) != Z_OK) |
| 93 | BYE("out of memory"); |
| 94 | |
| 95 | // State while processing the input gzip stream. |
| 96 | enum { // BETWEEN -> HEAD -> BLOCK -> TAIL -> BETWEEN -> ... |
| 97 | BETWEEN, // between gzip members (must end in this state) |
| 98 | HEAD, // reading a gzip header |
| 99 | BLOCK, // reading deflate blocks |
| 100 | TAIL // reading a gzip trailer |
| 101 | } state = BETWEEN; // current component being processed |
| 102 | unsigned long crc = 0; // accumulated CRC of uncompressed data |
| 103 | unsigned long len = 0; // accumulated length of uncompressed data |
| 104 | unsigned long buf = 0; // deflate stream bit buffer of num bits |
| 105 | int num = 0; // number of bits in buf (at bottom) |
| 106 | |
| 107 | // Write a canonical gzip header (no mod time, file name, comment, extra |
| 108 | // block, or extra flags, and OS is marked as unknown). |
| 109 | fwrite("\x1f\x8b\x08\0\0\0\0\0\0\xff", 1, 10, out); |
| 110 | |
| 111 | // Process the gzip stream from in until reaching the end of the input, |
| 112 | // encountering invalid input, or experiencing an i/o error. |
| 113 | int more; // true if not at the end of the input |
| 114 | do { |
| 115 | // State inside this loop. |
| 116 | unsigned char *put; // next input buffer location to process |
| 117 | int prev; // number of bits from previous block in |
| 118 | // the bit buffer, or -1 if not at the |
| 119 | // start of a block |
| 120 | unsigned long long memb; // uncompressed length of member |
| 121 | size_t tail; // number of trailer bytes read (0..8) |
| 122 | unsigned long part; // accumulated trailer component |
| 123 | |
| 124 | // Get the next chunk of input from in. |
| 125 | unsigned char dat[CHUNK]; |
| 126 | strm.avail_in = fread(dat, 1, CHUNK, in); |
| 127 | if (strm.avail_in == 0) |
| 128 | break; |
| 129 | more = strm.avail_in == CHUNK; |
| 130 | strm.next_in = put = dat; |
| 131 | |
| 132 | // Run that chunk of input through the inflate engine to exhaustion. |
| 133 | do { |
| 134 | // At this point it is assured that strm.avail_in > 0. |
| 135 | |
| 136 | // Inflate until the end of a gzip component (header, deflate |
| 137 | // block, trailer) is reached, or until all of the chunk is |
| 138 | // consumed. The resulting decompressed data is discarded, though |
| 139 | // the total size of the decompressed data in each member is |
| 140 | // tracked, for the calculation of the total CRC. |
| 141 | do { |
| 142 | // inflate and handle any errors |
| 143 | unsigned char scrap[CHUNK]; |
| 144 | strm.avail_out = CHUNK; |
| 145 | strm.next_out = scrap; |
| 146 | int ret = inflate(&strm, Z_BLOCK); |
| 147 | if (ret == Z_MEM_ERROR) |
| 148 | BYE("out of memory"); |
| 149 | if (ret == Z_DATA_ERROR) |
| 150 | BYE("input invalid: %s", strm.msg); |
| 151 | if (ret != Z_OK && ret != Z_BUF_ERROR && ret != Z_STREAM_END) |
| 152 | BYE("internal error"); |
| 153 | |
| 154 | // Update the number of uncompressed bytes generated in this |
| 155 | // member. The actual count (not modulo 2^32) is required to |
| 156 | // correctly compute the total CRC. |
| 157 | unsigned got = CHUNK - strm.avail_out; |
| 158 | memb += got; |
| 159 | if (memb < got) |
| 160 | BYE("overflow error"); |
| 161 | |
| 162 | // Continue to process this chunk until it is consumed, or |
| 163 | // until the end of a component (header, deflate block, or |
| 164 | // trailer) is reached. |
| 165 | } while (strm.avail_out == 0 && (strm.data_type & 0x80) == 0); |
| 166 | |
| 167 | // Since strm.avail_in was > 0 for the inflate call, some input was |
| 168 | // just consumed. It is therefore assured that put < strm.next_in. |
| 169 | |
| 170 | // Disposition the consumed component or part of a component. |
| 171 | switch (state) { |
| 172 | case BETWEEN: |
| 173 | state = HEAD; |
| 174 | // Fall through to HEAD when some or all of the header is |
| 175 | // processed. |
| 176 | |
| 177 | case HEAD: |
| 178 | // Discard the header. |
| 179 | if (strm.data_type & 0x80) { |
| 180 | // End of header reached -- deflate blocks follow. |
| 181 | put = strm.next_in; |
| 182 | prev = num; |
| 183 | memb = 0; |
| 184 | state = BLOCK; |
| 185 | } |
| 186 | break; |
| 187 | |
| 188 | case BLOCK: |
| 189 | // Copy the deflate stream to the output, but with the |
| 190 | // last-block-bit cleared. Re-synchronize stored block |
| 191 | // headers to the output byte boundaries. The bytes at |
| 192 | // put..strm.next_in-1 is the compressed data that has been |
| 193 | // processed and is ready to be copied to the output. |
| 194 | |
| 195 | // At this point, it is assured that new compressed data is |
| 196 | // available, i.e., put < strm.next_in. If prev is -1, then |
| 197 | // that compressed data starts in the middle of a deflate |
| 198 | // block. If prev is not -1, then the bits in the bit |
| 199 | // buffer, possibly combined with the bits in *put, contain |
| 200 | // the three-bit header of the new deflate block. In that |
| 201 | // case, prev is the number of bits from the previous block |
| 202 | // that remain in the bit buffer. Since num is the number |
| 203 | // of bits in the bit buffer, we have that num - prev is |
| 204 | // the number of bits from the new block currently in the |
| 205 | // bit buffer. |
| 206 | |
| 207 | // If strm.data_type & 0xc0 is 0x80, then the last byte of |
| 208 | // the available compressed data includes the last bits of |
| 209 | // the end of a deflate block. In that case, that last byte |
| 210 | // also has strm.data_type & 0x1f bits of the next deflate |
| 211 | // block, in the range 0..7. If strm.data_type & 0xc0 is |
| 212 | // 0xc0, then the last byte of the compressed data is the |
| 213 | // end of the deflate stream, followed by strm.data_type & |
| 214 | // 0x1f pad bits, also in the range 0..7. |
| 215 | |
| 216 | // Set bits to the number of bits not yet consumed from the |
| 217 | // last byte. If we are at the end of the block, bits is |
| 218 | // either the number of bits in the last byte belonging to |
| 219 | // the next block, or the number of pad bits after the |
| 220 | // final block. In either of those cases, bits is in the |
| 221 | // range 0..7. |
| 222 | ; // (required due to C syntax oddity) |
| 223 | int bits = strm.data_type & 0x1f; |
| 224 | |
| 225 | if (prev != -1) { |
| 226 | // We are at the start of a new block. Clear the last |
| 227 | // block bit, and check for special cases. If it is a |
| 228 | // stored block, then emit the header and pad to the |
| 229 | // next byte boundary. If it is a final, empty fixed |
| 230 | // block, then excise it. |
| 231 | |
| 232 | // Some or all of the three header bits for this block |
| 233 | // may already be in the bit buffer. Load any remaining |
| 234 | // header bits into the bit buffer. |
| 235 | if (num - prev < 3) { |
| 236 | buf += (unsigned long)*put++ << num; |
| 237 | num += 8; |
| 238 | } |
| 239 | |
| 240 | // Set last to have a 1 in the position of the last |
| 241 | // block bit in the bit buffer. |
| 242 | unsigned long last = (unsigned long)1 << prev; |
| 243 | |
| 244 | if (((buf >> prev) & 7) == 3) { |
| 245 | // This is a final fixed block. Load at least ten |
| 246 | // bits from this block, including the header, into |
| 247 | // the bit buffer. We already have at least three, |
| 248 | // so at most one more byte needs to be loaded. |
| 249 | if (num - prev < 10) { |
| 250 | if (put == strm.next_in) |
| 251 | // Need to go get and process more input. |
| 252 | // We'll end up back here to finish this. |
| 253 | break; |
| 254 | buf += (unsigned long)*put++ << num; |
| 255 | num += 8; |
| 256 | } |
| 257 | if (((buf >> prev) & 0x3ff) == 3) { |
| 258 | // That final fixed block is empty. Delete it |
| 259 | // to avoid adding an empty block every time a |
| 260 | // gzip stream is normalized. |
| 261 | num = prev; |
| 262 | buf &= last - 1; // zero the pad bits |
| 263 | } |
| 264 | } |
| 265 | else if (((buf >> prev) & 6) == 0) { |
| 266 | // This is a stored block. Flush to the next |
| 267 | // byte boundary after the three-bit header. |
| 268 | num = (prev + 10) & ~7; |
| 269 | buf &= last - 1; // zero the pad bits |
| 270 | } |
| 271 | |
| 272 | // Clear the last block bit. |
| 273 | buf &= ~last; |
| 274 | |
| 275 | // Write out complete bytes in the bit buffer. |
| 276 | while (num >= 8) { |
| 277 | putc(buf, out); |
| 278 | buf >>= 8; |
| 279 | num -= 8; |
| 280 | } |
| 281 | |
| 282 | // If no more bytes left to process, then we have |
| 283 | // consumed the byte that had bits from the next block. |
| 284 | if (put == strm.next_in) |
| 285 | bits = 0; |
| 286 | } |
| 287 | |
| 288 | // We are done handling the deflate block header. Now copy |
| 289 | // all or almost all of the remaining compressed data that |
| 290 | // has been processed so far. Don't copy one byte at the |
| 291 | // end if it contains bits from the next deflate block or |
| 292 | // pad bits at the end of a deflate block. |
| 293 | |
| 294 | // mix is 1 if we are at the end of a deflate block, and if |
| 295 | // some of the bits in the last byte follow this block. mix |
| 296 | // is 0 if we are in the middle of a deflate block, if the |
| 297 | // deflate block ended on a byte boundary, or if all of the |
| 298 | // compressed data processed so far has been consumed. |
| 299 | int mix = (strm.data_type & 0x80) && bits; |
| 300 | |
| 301 | // Copy all of the processed compressed data to the output, |
| 302 | // except for the last byte if it contains bits from the |
| 303 | // next deflate block or pad bits at the end of the deflate |
| 304 | // stream. Copy the data after shifting in num bits from |
| 305 | // buf in front of it, leaving num bits from the end of the |
| 306 | // compressed data in buf when done. |
| 307 | unsigned char *end = strm.next_in - mix; |
| 308 | if (put < end) { |
| 309 | if (num) |
| 310 | // Insert num bits from buf before the data being |
| 311 | // copied. |
| 312 | do { |
| 313 | buf += (unsigned)(*put++) << num; |
| 314 | putc(buf, out); |
| 315 | buf >>= 8; |
| 316 | } while (put < end); |
| 317 | else { |
| 318 | // No shifting needed -- write directly. |
| 319 | fwrite(put, 1, end - put, out); |
| 320 | put = end; |
| 321 | } |
| 322 | } |
| 323 | |
| 324 | // Process the last processed byte if it wasn't written. |
| 325 | if (mix) { |
| 326 | // Load the last byte into the bit buffer. |
| 327 | buf += (unsigned)(*put++) << num; |
| 328 | num += 8; |
| 329 | |
| 330 | if (strm.data_type & 0x40) { |
| 331 | // We are at the end of the deflate stream and |
| 332 | // there are bits pad bits. Discard the pad bits |
| 333 | // and write a byte to the output, if available. |
| 334 | // Leave the num bits left over in buf to prepend |
| 335 | // to the next deflate stream. |
| 336 | num -= bits; |
| 337 | if (num >= 8) { |
| 338 | putc(buf, out); |
| 339 | num -= 8; |
| 340 | buf >>= 8; |
| 341 | } |
| 342 | |
| 343 | // Force the pad bits in the bit buffer to zeros. |
| 344 | buf &= ((unsigned long)1 << num) - 1; |
| 345 | |
| 346 | // Don't need to set prev here since going to TAIL. |
| 347 | } |
| 348 | else |
| 349 | // At the end of an internal deflate block. Leave |
| 350 | // the last byte in the bit buffer to examine on |
| 351 | // the next entry to BLOCK, when more bits from the |
| 352 | // next block will be available. |
| 353 | prev = num - bits; // number of bits in buffer |
| 354 | // from current block |
| 355 | } |
| 356 | |
| 357 | // Don't have a byte left over, so we are in the middle of |
| 358 | // a deflate block, or the deflate block ended on a byte |
| 359 | // boundary. Set prev appropriately for the next entry into |
| 360 | // BLOCK. |
| 361 | else if (strm.data_type & 0x80) |
| 362 | // The block ended on a byte boundary, so no header |
| 363 | // bits are in the bit buffer. |
| 364 | prev = num; |
| 365 | else |
| 366 | // In the middle of a deflate block, so no header here. |
| 367 | prev = -1; |
| 368 | |
| 369 | // Check for the end of the deflate stream. |
| 370 | if ((strm.data_type & 0xc0) == 0xc0) { |
| 371 | // That ends the deflate stream on the input side, the |
| 372 | // pad bits were discarded, and any remaining bits from |
| 373 | // the last block in the stream are saved in the bit |
| 374 | // buffer to prepend to the next stream. Process the |
| 375 | // gzip trailer next. |
| 376 | tail = 0; |
| 377 | part = 0; |
| 378 | state = TAIL; |
| 379 | } |
| 380 | break; |
| 381 | |
| 382 | case TAIL: |
| 383 | // Accumulate available trailer bytes to update the total |
| 384 | // CRC and the total uncompressed length. |
| 385 | do { |
| 386 | part = (part >> 8) + ((unsigned long)(*put++) << 24); |
| 387 | tail++; |
| 388 | if (tail == 4) { |
| 389 | // Update the total CRC. |
| 390 | z_off_t len2 = memb; |
| 391 | if (len2 < 0 || (unsigned long long)len2 != memb) |
| 392 | BYE("overflow error"); |
| 393 | crc = crc ? crc32_combine(crc, part, len2) : part; |
| 394 | part = 0; |
| 395 | } |
| 396 | else if (tail == 8) { |
| 397 | // Update the total uncompressed length. (It's ok |
| 398 | // if this sum is done modulo 2^32.) |
| 399 | len += part; |
| 400 | |
| 401 | // At the end of a member. Set up to inflate an |
| 402 | // immediately following gzip member. (If we made |
| 403 | // it this far, then the trailer was valid.) |
| 404 | if (inflateReset(&strm) != Z_OK) |
| 405 | BYE("internal error"); |
| 406 | state = BETWEEN; |
| 407 | break; |
| 408 | } |
| 409 | } while (put < strm.next_in); |
| 410 | break; |
| 411 | } |
| 412 | |
| 413 | // Process the input buffer until completely consumed. |
| 414 | } while (strm.avail_in > 0); |
| 415 | |
| 416 | // Process input until end of file, invalid input, or i/o error. |
| 417 | } while (more); |
| 418 | |
| 419 | // Done with the inflate engine. |
| 420 | inflateEnd(&strm); |
| 421 | |
| 422 | // Verify the validity of the input. |
| 423 | if (state != BETWEEN) |
| 424 | BYE("input invalid: incomplete gzip stream"); |
| 425 | |
| 426 | // Write the remaining deflate stream bits, followed by a terminating |
| 427 | // deflate fixed block. |
| 428 | buf += (unsigned long)3 << num; |
| 429 | putc(buf, out); |
| 430 | putc(buf >> 8, out); |
| 431 | if (num > 6) |
| 432 | putc(0, out); |
| 433 | |
| 434 | // Write the gzip trailer, which is the CRC and the uncompressed length |
| 435 | // modulo 2^32, both in little-endian order. |
| 436 | putc(crc, out); |
| 437 | putc(crc >> 8, out); |
| 438 | putc(crc >> 16, out); |
| 439 | putc(crc >> 24, out); |
| 440 | putc(len, out); |
| 441 | putc(len >> 8, out); |
| 442 | putc(len >> 16, out); |
| 443 | putc(len >> 24, out); |
| 444 | fflush(out); |
| 445 | |
| 446 | // Check for any i/o errors. |
| 447 | if (ferror(in) || ferror(out)) |
| 448 | BYE("i/o error: %s", strerror(errno)); |
| 449 | |
| 450 | // All good! |
| 451 | *err = NULL; |
| 452 | return 0; |
| 453 | } |
| 454 | |
| 455 | // Normalize the gzip stream on stdin, writing the result to stdout. |
| 456 | int main(void) { |
| 457 | // Avoid end-of-line conversions on evil operating systems. |
| 458 | SET_BINARY_MODE(stdin); |
| 459 | SET_BINARY_MODE(stdout); |
| 460 | |
| 461 | // Normalize from stdin to stdout, returning 1 on error, 0 if ok. |
| 462 | char *err; |
| 463 | int ret = gzip_normalize(stdin, stdout, &err); |
| 464 | if (ret) |
| 465 | fprintf(stderr, "gznorm error: %s\n", err); |
| 466 | fr |
+172
-102
| --- compat/zlib/examples/zran.c | ||
| +++ compat/zlib/examples/zran.c | ||
| @@ -1,13 +1,15 @@ | ||
| 1 | 1 | /* zran.c -- example of zlib/gzip stream indexing and random access |
| 2 | - * Copyright (C) 2005, 2012 Mark Adler | |
| 2 | + * Copyright (C) 2005, 2012, 2018 Mark Adler | |
| 3 | 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | - Version 1.1 29 Sep 2012 Mark Adler */ | |
| 4 | + * Version 1.2 14 Oct 2018 Mark Adler */ | |
| 5 | 5 | |
| 6 | 6 | /* Version History: |
| 7 | 7 | 1.0 29 May 2005 First version |
| 8 | 8 | 1.1 29 Sep 2012 Fix memory reallocation error |
| 9 | + 1.2 14 Oct 2018 Handle gzip streams with multiple members | |
| 10 | + Add a header file to facilitate usage in applications | |
| 9 | 11 | */ |
| 10 | 12 | |
| 11 | 13 | /* Illustrate the use of Z_BLOCK, inflatePrime(), and inflateSetDictionary() |
| 12 | 14 | for random access of a compressed file. A file containing a zlib or gzip |
| 13 | 15 | stream is provided on the command line. The compressed stream is decoded in |
| @@ -18,15 +20,15 @@ | ||
| 18 | 20 | |
| 19 | 21 | An access point can be created at the start of any deflate block, by saving |
| 20 | 22 | the starting file offset and bit of that block, and the 32K bytes of |
| 21 | 23 | uncompressed data that precede that block. Also the uncompressed offset of |
| 22 | 24 | that block is saved to provide a referece for locating a desired starting |
| 23 | - point in the uncompressed stream. build_index() works by decompressing the | |
| 24 | - input zlib or gzip stream a block at a time, and at the end of each block | |
| 25 | - deciding if enough uncompressed data has gone by to justify the creation of | |
| 26 | - a new access point. If so, that point is saved in a data structure that | |
| 27 | - grows as needed to accommodate the points. | |
| 25 | + point in the uncompressed stream. deflate_index_build() works by | |
| 26 | + decompressing the input zlib or gzip stream a block at a time, and at the | |
| 27 | + end of each block deciding if enough uncompressed data has gone by to | |
| 28 | + justify the creation of a new access point. If so, that point is saved in a | |
| 29 | + data structure that grows as needed to accommodate the points. | |
| 28 | 30 | |
| 29 | 31 | To use the index, an offset in the uncompressed data is provided, for which |
| 30 | 32 | the latest access point at or preceding that offset is located in the index. |
| 31 | 33 | The input file is positioned to the specified location in the index, and if |
| 32 | 34 | necessary the first few bits of the compressed data is read from the file. |
| @@ -41,11 +43,12 @@ | ||
| 41 | 43 | then further index entries would be generated and added. |
| 42 | 44 | |
| 43 | 45 | There is some fair bit of overhead to starting inflation for the random |
| 44 | 46 | access, mainly copying the 32K byte dictionary. So if small pieces of the |
| 45 | 47 | file are being accessed, it would make sense to implement a cache to hold |
| 46 | - some lookahead and avoid many calls to extract() for small lengths. | |
| 48 | + some lookahead and avoid many calls to deflate_index_extract() for small | |
| 49 | + lengths. | |
| 47 | 50 | |
| 48 | 51 | Another way to build an index would be to use inflateCopy(). That would |
| 49 | 52 | not be constrained to have access points at block boundaries, but requires |
| 50 | 53 | more memory per access point, and also cannot be saved to file due to the |
| 51 | 54 | use of pointers in the state. The approach here allows for storage of the |
| @@ -54,74 +57,69 @@ | ||
| 54 | 57 | |
| 55 | 58 | #include <stdio.h> |
| 56 | 59 | #include <stdlib.h> |
| 57 | 60 | #include <string.h> |
| 58 | 61 | #include "zlib.h" |
| 62 | +#include "zran.h" | |
| 59 | 63 | |
| 60 | -#define local static | |
| 61 | - | |
| 62 | -#define SPAN 1048576L /* desired distance between access points */ | |
| 63 | 64 | #define WINSIZE 32768U /* sliding window size */ |
| 64 | 65 | #define CHUNK 16384 /* file input buffer size */ |
| 65 | 66 | |
| 66 | -/* access point entry */ | |
| 67 | +/* Access point entry. */ | |
| 67 | 68 | struct point { |
| 68 | 69 | off_t out; /* corresponding offset in uncompressed data */ |
| 69 | 70 | off_t in; /* offset in input file of first full byte */ |
| 70 | - int bits; /* number of bits (1-7) from byte at in - 1, or 0 */ | |
| 71 | + int bits; /* number of bits (1-7) from byte at in-1, or 0 */ | |
| 71 | 72 | unsigned char window[WINSIZE]; /* preceding 32K of uncompressed data */ |
| 72 | 73 | }; |
| 73 | 74 | |
| 74 | -/* access point list */ | |
| 75 | -struct access { | |
| 76 | - int have; /* number of list entries filled in */ | |
| 77 | - int size; /* number of list entries allocated */ | |
| 78 | - struct point *list; /* allocated list */ | |
| 79 | -}; | |
| 80 | - | |
| 81 | -/* Deallocate an index built by build_index() */ | |
| 82 | -local void free_index(struct access *index) | |
| 75 | +/* See comments in zran.h. */ | |
| 76 | +void deflate_index_free(struct deflate_index *index) | |
| 83 | 77 | { |
| 84 | 78 | if (index != NULL) { |
| 85 | 79 | free(index->list); |
| 86 | 80 | free(index); |
| 87 | 81 | } |
| 88 | 82 | } |
| 89 | 83 | |
| 90 | -/* Add an entry to the access point list. If out of memory, deallocate the | |
| 91 | - existing list and return NULL. */ | |
| 92 | -local struct access *addpoint(struct access *index, int bits, | |
| 93 | - off_t in, off_t out, unsigned left, unsigned char *window) | |
| 84 | +/* Add an entry to the access point list. If out of memory, deallocate the | |
| 85 | + existing list and return NULL. index->gzip is the allocated size of the | |
| 86 | + index in point entries, until it is time for deflate_index_build() to | |
| 87 | + return, at which point gzip is set to indicate a gzip file or not. | |
| 88 | + */ | |
| 89 | +static struct deflate_index *addpoint(struct deflate_index *index, int bits, | |
| 90 | + off_t in, off_t out, unsigned left, | |
| 91 | + unsigned char *window) | |
| 94 | 92 | { |
| 95 | 93 | struct point *next; |
| 96 | 94 | |
| 97 | 95 | /* if list is empty, create it (start with eight points) */ |
| 98 | 96 | if (index == NULL) { |
| 99 | - index = malloc(sizeof(struct access)); | |
| 97 | + index = malloc(sizeof(struct deflate_index)); | |
| 100 | 98 | if (index == NULL) return NULL; |
| 101 | 99 | index->list = malloc(sizeof(struct point) << 3); |
| 102 | 100 | if (index->list == NULL) { |
| 103 | 101 | free(index); |
| 104 | 102 | return NULL; |
| 105 | 103 | } |
| 106 | - index->size = 8; | |
| 104 | + index->gzip = 8; | |
| 107 | 105 | index->have = 0; |
| 108 | 106 | } |
| 109 | 107 | |
| 110 | 108 | /* if list is full, make it bigger */ |
| 111 | - else if (index->have == index->size) { | |
| 112 | - index->size <<= 1; | |
| 113 | - next = realloc(index->list, sizeof(struct point) * index->size); | |
| 109 | + else if (index->have == index->gzip) { | |
| 110 | + index->gzip <<= 1; | |
| 111 | + next = realloc(index->list, sizeof(struct point) * index->gzip); | |
| 114 | 112 | if (next == NULL) { |
| 115 | - free_index(index); | |
| 113 | + deflate_index_free(index); | |
| 116 | 114 | return NULL; |
| 117 | 115 | } |
| 118 | 116 | index->list = next; |
| 119 | 117 | } |
| 120 | 118 | |
| 121 | 119 | /* fill in entry and increment how many we have */ |
| 122 | - next = index->list + index->have; | |
| 120 | + next = (struct point *)(index->list) + index->have; | |
| 123 | 121 | next->bits = bits; |
| 124 | 122 | next->in = in; |
| 125 | 123 | next->out = out; |
| 126 | 124 | if (left) |
| 127 | 125 | memcpy(next->window, window + WINSIZE - left, left); |
| @@ -131,24 +129,18 @@ | ||
| 131 | 129 | |
| 132 | 130 | /* return list, possibly reallocated */ |
| 133 | 131 | return index; |
| 134 | 132 | } |
| 135 | 133 | |
| 136 | -/* Make one entire pass through the compressed stream and build an index, with | |
| 137 | - access points about every span bytes of uncompressed output -- span is | |
| 138 | - chosen to balance the speed of random access against the memory requirements | |
| 139 | - of the list, about 32K bytes per access point. Note that data after the end | |
| 140 | - of the first zlib or gzip stream in the file is ignored. build_index() | |
| 141 | - returns the number of access points on success (>= 1), Z_MEM_ERROR for out | |
| 142 | - of memory, Z_DATA_ERROR for an error in the input file, or Z_ERRNO for a | |
| 143 | - file read error. On success, *built points to the resulting index. */ | |
| 144 | -local int build_index(FILE *in, off_t span, struct access **built) | |
| 134 | +/* See comments in zran.h. */ | |
| 135 | +int deflate_index_build(FILE *in, off_t span, struct deflate_index **built) | |
| 145 | 136 | { |
| 146 | 137 | int ret; |
| 138 | + int gzip = 0; /* true if reading a gzip file */ | |
| 147 | 139 | off_t totin, totout; /* our own total counters to avoid 4GB limit */ |
| 148 | 140 | off_t last; /* totout value of last access point */ |
| 149 | - struct access *index; /* access points being generated */ | |
| 141 | + struct deflate_index *index; /* access points being generated */ | |
| 150 | 142 | z_stream strm; |
| 151 | 143 | unsigned char input[CHUNK]; |
| 152 | 144 | unsigned char window[WINSIZE]; |
| 153 | 145 | |
| 154 | 146 | /* initialize inflate */ |
| @@ -161,26 +153,31 @@ | ||
| 161 | 153 | if (ret != Z_OK) |
| 162 | 154 | return ret; |
| 163 | 155 | |
| 164 | 156 | /* inflate the input, maintain a sliding window, and build an index -- this |
| 165 | 157 | also validates the integrity of the compressed data using the check |
| 166 | - information at the end of the gzip or zlib stream */ | |
| 158 | + information in the gzip or zlib stream */ | |
| 167 | 159 | totin = totout = last = 0; |
| 168 | 160 | index = NULL; /* will be allocated by first addpoint() */ |
| 169 | 161 | strm.avail_out = 0; |
| 170 | 162 | do { |
| 171 | 163 | /* get some compressed data from input file */ |
| 172 | 164 | strm.avail_in = fread(input, 1, CHUNK, in); |
| 173 | 165 | if (ferror(in)) { |
| 174 | 166 | ret = Z_ERRNO; |
| 175 | - goto build_index_error; | |
| 167 | + goto deflate_index_build_error; | |
| 176 | 168 | } |
| 177 | 169 | if (strm.avail_in == 0) { |
| 178 | 170 | ret = Z_DATA_ERROR; |
| 179 | - goto build_index_error; | |
| 171 | + goto deflate_index_build_error; | |
| 180 | 172 | } |
| 181 | 173 | strm.next_in = input; |
| 174 | + | |
| 175 | + /* check for a gzip stream */ | |
| 176 | + if (totin == 0 && strm.avail_in >= 3 && | |
| 177 | + input[0] == 31 && input[1] == 139 && input[2] == 8) | |
| 178 | + gzip = 1; | |
| 182 | 179 | |
| 183 | 180 | /* process all of that, or until end of stream */ |
| 184 | 181 | do { |
| 185 | 182 | /* reset sliding window if necessary */ |
| 186 | 183 | if (strm.avail_out == 0) { |
| @@ -196,13 +193,21 @@ | ||
| 196 | 193 | totin -= strm.avail_in; |
| 197 | 194 | totout -= strm.avail_out; |
| 198 | 195 | if (ret == Z_NEED_DICT) |
| 199 | 196 | ret = Z_DATA_ERROR; |
| 200 | 197 | if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR) |
| 201 | - goto build_index_error; | |
| 202 | - if (ret == Z_STREAM_END) | |
| 198 | + goto deflate_index_build_error; | |
| 199 | + if (ret == Z_STREAM_END) { | |
| 200 | + if (gzip && | |
| 201 | + (strm.avail_in || ungetc(getc(in), in) != EOF)) { | |
| 202 | + ret = inflateReset(&strm); | |
| 203 | + if (ret != Z_OK) | |
| 204 | + goto deflate_index_build_error; | |
| 205 | + continue; | |
| 206 | + } | |
| 203 | 207 | break; |
| 208 | + } | |
| 204 | 209 | |
| 205 | 210 | /* if at end of block, consider adding an index entry (note that if |
| 206 | 211 | data_type indicates an end-of-block, then all of the |
| 207 | 212 | uncompressed data from that block has been delivered, and none |
| 208 | 213 | of the compressed data after that block has been consumed, |
| @@ -215,41 +220,35 @@ | ||
| 215 | 220 | (totout == 0 || totout - last > span)) { |
| 216 | 221 | index = addpoint(index, strm.data_type & 7, totin, |
| 217 | 222 | totout, strm.avail_out, window); |
| 218 | 223 | if (index == NULL) { |
| 219 | 224 | ret = Z_MEM_ERROR; |
| 220 | - goto build_index_error; | |
| 225 | + goto deflate_index_build_error; | |
| 221 | 226 | } |
| 222 | 227 | last = totout; |
| 223 | 228 | } |
| 224 | 229 | } while (strm.avail_in != 0); |
| 225 | 230 | } while (ret != Z_STREAM_END); |
| 226 | 231 | |
| 227 | 232 | /* clean up and return index (release unused entries in list) */ |
| 228 | 233 | (void)inflateEnd(&strm); |
| 229 | 234 | index->list = realloc(index->list, sizeof(struct point) * index->have); |
| 230 | - index->size = index->have; | |
| 235 | + index->gzip = gzip; | |
| 236 | + index->length = totout; | |
| 231 | 237 | *built = index; |
| 232 | - return index->size; | |
| 238 | + return index->have; | |
| 233 | 239 | |
| 234 | 240 | /* return error */ |
| 235 | - build_index_error: | |
| 241 | + deflate_index_build_error: | |
| 236 | 242 | (void)inflateEnd(&strm); |
| 237 | - if (index != NULL) | |
| 238 | - free_index(index); | |
| 243 | + deflate_index_free(index); | |
| 239 | 244 | return ret; |
| 240 | 245 | } |
| 241 | 246 | |
| 242 | -/* Use the index to read len bytes from offset into buf, return bytes read or | |
| 243 | - negative for error (Z_DATA_ERROR or Z_MEM_ERROR). If data is requested past | |
| 244 | - the end of the uncompressed data, then extract() will return a value less | |
| 245 | - than len, indicating how much as actually read into buf. This function | |
| 246 | - should not return a data error unless the file was modified since the index | |
| 247 | - was generated. extract() may also return Z_ERRNO if there is an error on | |
| 248 | - reading or seeking the input file. */ | |
| 249 | -local int extract(FILE *in, struct access *index, off_t offset, | |
| 250 | - unsigned char *buf, int len) | |
| 247 | +/* See comments in zran.h. */ | |
| 248 | +int deflate_index_extract(FILE *in, struct deflate_index *index, off_t offset, | |
| 249 | + unsigned char *buf, int len) | |
| 251 | 250 | { |
| 252 | 251 | int ret, skip; |
| 253 | 252 | z_stream strm; |
| 254 | 253 | struct point *here; |
| 255 | 254 | unsigned char input[CHUNK]; |
| @@ -274,16 +273,16 @@ | ||
| 274 | 273 | ret = inflateInit2(&strm, -15); /* raw inflate */ |
| 275 | 274 | if (ret != Z_OK) |
| 276 | 275 | return ret; |
| 277 | 276 | ret = fseeko(in, here->in - (here->bits ? 1 : 0), SEEK_SET); |
| 278 | 277 | if (ret == -1) |
| 279 | - goto extract_ret; | |
| 278 | + goto deflate_index_extract_ret; | |
| 280 | 279 | if (here->bits) { |
| 281 | 280 | ret = getc(in); |
| 282 | 281 | if (ret == -1) { |
| 283 | 282 | ret = ferror(in) ? Z_ERRNO : Z_DATA_ERROR; |
| 284 | - goto extract_ret; | |
| 283 | + goto deflate_index_extract_ret; | |
| 285 | 284 | } |
| 286 | 285 | (void)inflatePrime(&strm, here->bits, ret >> (8 - here->bits)); |
| 287 | 286 | } |
| 288 | 287 | (void)inflateSetDictionary(&strm, here->window, WINSIZE); |
| 289 | 288 | |
| @@ -291,89 +290,157 @@ | ||
| 291 | 290 | offset -= here->out; |
| 292 | 291 | strm.avail_in = 0; |
| 293 | 292 | skip = 1; /* while skipping to offset */ |
| 294 | 293 | do { |
| 295 | 294 | /* define where to put uncompressed data, and how much */ |
| 296 | - if (offset == 0 && skip) { /* at offset now */ | |
| 297 | - strm.avail_out = len; | |
| 298 | - strm.next_out = buf; | |
| 299 | - skip = 0; /* only do this once */ | |
| 300 | - } | |
| 301 | 295 | if (offset > WINSIZE) { /* skip WINSIZE bytes */ |
| 302 | 296 | strm.avail_out = WINSIZE; |
| 303 | 297 | strm.next_out = discard; |
| 304 | 298 | offset -= WINSIZE; |
| 305 | 299 | } |
| 306 | - else if (offset != 0) { /* last skip */ | |
| 300 | + else if (offset > 0) { /* last skip */ | |
| 307 | 301 | strm.avail_out = (unsigned)offset; |
| 308 | 302 | strm.next_out = discard; |
| 309 | 303 | offset = 0; |
| 310 | 304 | } |
| 305 | + else if (skip) { /* at offset now */ | |
| 306 | + strm.avail_out = len; | |
| 307 | + strm.next_out = buf; | |
| 308 | + skip = 0; /* only do this once */ | |
| 309 | + } | |
| 311 | 310 | |
| 312 | 311 | /* uncompress until avail_out filled, or end of stream */ |
| 313 | 312 | do { |
| 314 | 313 | if (strm.avail_in == 0) { |
| 315 | 314 | strm.avail_in = fread(input, 1, CHUNK, in); |
| 316 | 315 | if (ferror(in)) { |
| 317 | 316 | ret = Z_ERRNO; |
| 318 | - goto extract_ret; | |
| 317 | + goto deflate_index_extract_ret; | |
| 319 | 318 | } |
| 320 | 319 | if (strm.avail_in == 0) { |
| 321 | 320 | ret = Z_DATA_ERROR; |
| 322 | - goto extract_ret; | |
| 321 | + goto deflate_index_extract_ret; | |
| 323 | 322 | } |
| 324 | 323 | strm.next_in = input; |
| 325 | 324 | } |
| 326 | 325 | ret = inflate(&strm, Z_NO_FLUSH); /* normal inflate */ |
| 327 | 326 | if (ret == Z_NEED_DICT) |
| 328 | 327 | ret = Z_DATA_ERROR; |
| 329 | 328 | if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR) |
| 330 | - goto extract_ret; | |
| 331 | - if (ret == Z_STREAM_END) | |
| 332 | - break; | |
| 333 | - } while (strm.avail_out != 0); | |
| 334 | - | |
| 335 | - /* if reach end of stream, then don't keep trying to get more */ | |
| 336 | - if (ret == Z_STREAM_END) | |
| 337 | - break; | |
| 338 | - | |
| 339 | - /* do until offset reached and requested data read, or stream ends */ | |
| 340 | - } while (skip); | |
| 341 | - | |
| 342 | - /* compute number of uncompressed bytes read after offset */ | |
| 343 | - ret = skip ? 0 : len - strm.avail_out; | |
| 344 | - | |
| 345 | - /* clean up and return bytes read or error */ | |
| 346 | - extract_ret: | |
| 329 | + goto deflate_index_extract_ret; | |
| 330 | + if (ret == Z_STREAM_END) { | |
| 331 | + /* the raw deflate stream has ended */ | |
| 332 | + if (index->gzip == 0) | |
| 333 | + /* this is a zlib stream that has ended -- done */ | |
| 334 | + break; | |
| 335 | + | |
| 336 | + /* near the end of a gzip member, which might be followed by | |
| 337 | + another gzip member -- skip the gzip trailer and see if | |
| 338 | + there is more input after it */ | |
| 339 | + if (strm.avail_in < 8) { | |
| 340 | + fseeko(in, 8 - strm.avail_in, SEEK_CUR); | |
| 341 | + strm.avail_in = 0; | |
| 342 | + } | |
| 343 | + else { | |
| 344 | + strm.avail_in -= 8; | |
| 345 | + strm.next_in += 8; | |
| 346 | + } | |
| 347 | + if (strm.avail_in == 0 && ungetc(getc(in), in) == EOF) | |
| 348 | + /* the input ended after the gzip trailer -- done */ | |
| 349 | + break; | |
| 350 | + | |
| 351 | + /* there is more input, so another gzip member should follow -- | |
| 352 | + validate and skip the gzip header */ | |
| 353 | + ret = inflateReset2(&strm, 31); | |
| 354 | + if (ret != Z_OK) | |
| 355 | + goto deflate_index_extract_ret; | |
| 356 | + do { | |
| 357 | + if (strm.avail_in == 0) { | |
| 358 | + strm.avail_in = fread(input, 1, CHUNK, in); | |
| 359 | + if (ferror(in)) { | |
| 360 | + ret = Z_ERRNO; | |
| 361 | + goto deflate_index_extract_ret; | |
| 362 | + } | |
| 363 | + if (strm.avail_in == 0) { | |
| 364 | + ret = Z_DATA_ERROR; | |
| 365 | + goto deflate_index_extract_ret; | |
| 366 | + } | |
| 367 | + strm.next_in = input; | |
| 368 | + } | |
| 369 | + ret = inflate(&strm, Z_BLOCK); | |
| 370 | + if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR) | |
| 371 | + goto deflate_index_extract_ret; | |
| 372 | + } while ((strm.data_type & 128) == 0); | |
| 373 | + | |
| 374 | + /* set up to continue decompression of the raw deflate stream | |
| 375 | + that follows the gzip header */ | |
| 376 | + ret = inflateReset2(&strm, -15); | |
| 377 | + if (ret != Z_OK) | |
| 378 | + goto deflate_index_extract_ret; | |
| 379 | + } | |
| 380 | + | |
| 381 | + /* continue to process the available input before reading more */ | |
| 382 | + } while (strm.avail_out != 0); | |
| 383 | + | |
| 384 | + if (ret == Z_STREAM_END) | |
| 385 | + /* reached the end of the compressed data -- return the data that | |
| 386 | + was available, possibly less than requested */ | |
| 387 | + break; | |
| 388 | + | |
| 389 | + /* do until offset reached and requested data read */ | |
| 390 | + } while (skip); | |
| 391 | + | |
| 392 | + /* compute the number of uncompressed bytes read after the offset */ | |
| 393 | + ret = skip ? 0 : len - strm.avail_out; | |
| 394 | + | |
| 395 | + /* clean up and return the bytes read, or the negative error */ | |
| 396 | + deflate_index_extract_ret: | |
| 347 | 397 | (void)inflateEnd(&strm); |
| 348 | 398 | return ret; |
| 349 | 399 | } |
| 350 | 400 | |
| 351 | -/* Demonstrate the use of build_index() and extract() by processing the file | |
| 352 | - provided on the command line, and the extracting 16K from about 2/3rds of | |
| 353 | - the way through the uncompressed output, and writing that to stdout. */ | |
| 401 | +#ifdef TEST | |
| 402 | + | |
| 403 | +#define SPAN 1048576L /* desired distance between access points */ | |
| 404 | +#define LEN 16384 /* number of bytes to extract */ | |
| 405 | + | |
| 406 | +/* Demonstrate the use of deflate_index_build() and deflate_index_extract() by | |
| 407 | + processing the file provided on the command line, and extracting LEN bytes | |
| 408 | + from 2/3rds of the way through the uncompressed output, writing that to | |
| 409 | + stdout. An offset can be provided as the second argument, in which case the | |
| 410 | + data is extracted from there instead. */ | |
| 354 | 411 | int main(int argc, char **argv) |
| 355 | 412 | { |
| 356 | 413 | int len; |
| 357 | - off_t offset; | |
| 414 | + off_t offset = -1; | |
| 358 | 415 | FILE *in; |
| 359 | - struct access *index = NULL; | |
| 360 | - unsigned char buf[CHUNK]; | |
| 416 | + struct deflate_index *index = NULL; | |
| 417 | + unsigned char buf[LEN]; | |
| 361 | 418 | |
| 362 | 419 | /* open input file */ |
| 363 | - if (argc != 2) { | |
| 364 | - fprintf(stderr, "usage: zran file.gz\n"); | |
| 420 | + if (argc < 2 || argc > 3) { | |
| 421 | + fprintf(stderr, "usage: zran file.gz [offset]\n"); | |
| 365 | 422 | return 1; |
| 366 | 423 | } |
| 367 | 424 | in = fopen(argv[1], "rb"); |
| 368 | 425 | if (in == NULL) { |
| 369 | 426 | fprintf(stderr, "zran: could not open %s for reading\n", argv[1]); |
| 370 | 427 | return 1; |
| 371 | 428 | } |
| 429 | + | |
| 430 | + /* get optional offset */ | |
| 431 | + if (argc == 3) { | |
| 432 | + char *end; | |
| 433 | + offset = strtoll(argv[2], &end, 10); | |
| 434 | + if (*end || offset < 0) { | |
| 435 | + fprintf(stderr, "zran: %s is not a valid offset\n", argv[2]); | |
| 436 | + return 1; | |
| 437 | + } | |
| 438 | + } | |
| 372 | 439 | |
| 373 | 440 | /* build index */ |
| 374 | - len = build_index(in, SPAN, &index); | |
| 441 | + len = deflate_index_build(in, SPAN, &index); | |
| 375 | 442 | if (len < 0) { |
| 376 | 443 | fclose(in); |
| 377 | 444 | switch (len) { |
| 378 | 445 | case Z_MEM_ERROR: |
| 379 | 446 | fprintf(stderr, "zran: out of memory\n"); |
| @@ -390,20 +457,23 @@ | ||
| 390 | 457 | return 1; |
| 391 | 458 | } |
| 392 | 459 | fprintf(stderr, "zran: built index with %d access points\n", len); |
| 393 | 460 | |
| 394 | 461 | /* use index by reading some bytes from an arbitrary offset */ |
| 395 | - offset = (index->list[index->have - 1].out << 1) / 3; | |
| 396 | - len = extract(in, index, offset, buf, CHUNK); | |
| 462 | + if (offset == -1) | |
| 463 | + offset = (index->length << 1) / 3; | |
| 464 | + len = deflate_index_extract(in, index, offset, buf, LEN); | |
| 397 | 465 | if (len < 0) |
| 398 | 466 | fprintf(stderr, "zran: extraction failed: %s error\n", |
| 399 | 467 | len == Z_MEM_ERROR ? "out of memory" : "input corrupted"); |
| 400 | 468 | else { |
| 401 | 469 | fwrite(buf, 1, len, stdout); |
| 402 | 470 | fprintf(stderr, "zran: extracted %d bytes at %llu\n", len, offset); |
| 403 | 471 | } |
| 404 | 472 | |
| 405 | 473 | /* clean up and exit */ |
| 406 | - free_index(index); | |
| 474 | + deflate_index_free(index); | |
| 407 | 475 | fclose(in); |
| 408 | 476 | return 0; |
| 409 | 477 | } |
| 478 | + | |
| 479 | +#endif | |
| 410 | 480 | |
| 411 | 481 | ADDED compat/zlib/examples/zran.h |
| --- compat/zlib/examples/zran.c | |
| +++ compat/zlib/examples/zran.c | |
| @@ -1,13 +1,15 @@ | |
| 1 | /* zran.c -- example of zlib/gzip stream indexing and random access |
| 2 | * Copyright (C) 2005, 2012 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | Version 1.1 29 Sep 2012 Mark Adler */ |
| 5 | |
| 6 | /* Version History: |
| 7 | 1.0 29 May 2005 First version |
| 8 | 1.1 29 Sep 2012 Fix memory reallocation error |
| 9 | */ |
| 10 | |
| 11 | /* Illustrate the use of Z_BLOCK, inflatePrime(), and inflateSetDictionary() |
| 12 | for random access of a compressed file. A file containing a zlib or gzip |
| 13 | stream is provided on the command line. The compressed stream is decoded in |
| @@ -18,15 +20,15 @@ | |
| 18 | |
| 19 | An access point can be created at the start of any deflate block, by saving |
| 20 | the starting file offset and bit of that block, and the 32K bytes of |
| 21 | uncompressed data that precede that block. Also the uncompressed offset of |
| 22 | that block is saved to provide a referece for locating a desired starting |
| 23 | point in the uncompressed stream. build_index() works by decompressing the |
| 24 | input zlib or gzip stream a block at a time, and at the end of each block |
| 25 | deciding if enough uncompressed data has gone by to justify the creation of |
| 26 | a new access point. If so, that point is saved in a data structure that |
| 27 | grows as needed to accommodate the points. |
| 28 | |
| 29 | To use the index, an offset in the uncompressed data is provided, for which |
| 30 | the latest access point at or preceding that offset is located in the index. |
| 31 | The input file is positioned to the specified location in the index, and if |
| 32 | necessary the first few bits of the compressed data is read from the file. |
| @@ -41,11 +43,12 @@ | |
| 41 | then further index entries would be generated and added. |
| 42 | |
| 43 | There is some fair bit of overhead to starting inflation for the random |
| 44 | access, mainly copying the 32K byte dictionary. So if small pieces of the |
| 45 | file are being accessed, it would make sense to implement a cache to hold |
| 46 | some lookahead and avoid many calls to extract() for small lengths. |
| 47 | |
| 48 | Another way to build an index would be to use inflateCopy(). That would |
| 49 | not be constrained to have access points at block boundaries, but requires |
| 50 | more memory per access point, and also cannot be saved to file due to the |
| 51 | use of pointers in the state. The approach here allows for storage of the |
| @@ -54,74 +57,69 @@ | |
| 54 | |
| 55 | #include <stdio.h> |
| 56 | #include <stdlib.h> |
| 57 | #include <string.h> |
| 58 | #include "zlib.h" |
| 59 | |
| 60 | #define local static |
| 61 | |
| 62 | #define SPAN 1048576L /* desired distance between access points */ |
| 63 | #define WINSIZE 32768U /* sliding window size */ |
| 64 | #define CHUNK 16384 /* file input buffer size */ |
| 65 | |
| 66 | /* access point entry */ |
| 67 | struct point { |
| 68 | off_t out; /* corresponding offset in uncompressed data */ |
| 69 | off_t in; /* offset in input file of first full byte */ |
| 70 | int bits; /* number of bits (1-7) from byte at in - 1, or 0 */ |
| 71 | unsigned char window[WINSIZE]; /* preceding 32K of uncompressed data */ |
| 72 | }; |
| 73 | |
| 74 | /* access point list */ |
| 75 | struct access { |
| 76 | int have; /* number of list entries filled in */ |
| 77 | int size; /* number of list entries allocated */ |
| 78 | struct point *list; /* allocated list */ |
| 79 | }; |
| 80 | |
| 81 | /* Deallocate an index built by build_index() */ |
| 82 | local void free_index(struct access *index) |
| 83 | { |
| 84 | if (index != NULL) { |
| 85 | free(index->list); |
| 86 | free(index); |
| 87 | } |
| 88 | } |
| 89 | |
| 90 | /* Add an entry to the access point list. If out of memory, deallocate the |
| 91 | existing list and return NULL. */ |
| 92 | local struct access *addpoint(struct access *index, int bits, |
| 93 | off_t in, off_t out, unsigned left, unsigned char *window) |
| 94 | { |
| 95 | struct point *next; |
| 96 | |
| 97 | /* if list is empty, create it (start with eight points) */ |
| 98 | if (index == NULL) { |
| 99 | index = malloc(sizeof(struct access)); |
| 100 | if (index == NULL) return NULL; |
| 101 | index->list = malloc(sizeof(struct point) << 3); |
| 102 | if (index->list == NULL) { |
| 103 | free(index); |
| 104 | return NULL; |
| 105 | } |
| 106 | index->size = 8; |
| 107 | index->have = 0; |
| 108 | } |
| 109 | |
| 110 | /* if list is full, make it bigger */ |
| 111 | else if (index->have == index->size) { |
| 112 | index->size <<= 1; |
| 113 | next = realloc(index->list, sizeof(struct point) * index->size); |
| 114 | if (next == NULL) { |
| 115 | free_index(index); |
| 116 | return NULL; |
| 117 | } |
| 118 | index->list = next; |
| 119 | } |
| 120 | |
| 121 | /* fill in entry and increment how many we have */ |
| 122 | next = index->list + index->have; |
| 123 | next->bits = bits; |
| 124 | next->in = in; |
| 125 | next->out = out; |
| 126 | if (left) |
| 127 | memcpy(next->window, window + WINSIZE - left, left); |
| @@ -131,24 +129,18 @@ | |
| 131 | |
| 132 | /* return list, possibly reallocated */ |
| 133 | return index; |
| 134 | } |
| 135 | |
| 136 | /* Make one entire pass through the compressed stream and build an index, with |
| 137 | access points about every span bytes of uncompressed output -- span is |
| 138 | chosen to balance the speed of random access against the memory requirements |
| 139 | of the list, about 32K bytes per access point. Note that data after the end |
| 140 | of the first zlib or gzip stream in the file is ignored. build_index() |
| 141 | returns the number of access points on success (>= 1), Z_MEM_ERROR for out |
| 142 | of memory, Z_DATA_ERROR for an error in the input file, or Z_ERRNO for a |
| 143 | file read error. On success, *built points to the resulting index. */ |
| 144 | local int build_index(FILE *in, off_t span, struct access **built) |
| 145 | { |
| 146 | int ret; |
| 147 | off_t totin, totout; /* our own total counters to avoid 4GB limit */ |
| 148 | off_t last; /* totout value of last access point */ |
| 149 | struct access *index; /* access points being generated */ |
| 150 | z_stream strm; |
| 151 | unsigned char input[CHUNK]; |
| 152 | unsigned char window[WINSIZE]; |
| 153 | |
| 154 | /* initialize inflate */ |
| @@ -161,26 +153,31 @@ | |
| 161 | if (ret != Z_OK) |
| 162 | return ret; |
| 163 | |
| 164 | /* inflate the input, maintain a sliding window, and build an index -- this |
| 165 | also validates the integrity of the compressed data using the check |
| 166 | information at the end of the gzip or zlib stream */ |
| 167 | totin = totout = last = 0; |
| 168 | index = NULL; /* will be allocated by first addpoint() */ |
| 169 | strm.avail_out = 0; |
| 170 | do { |
| 171 | /* get some compressed data from input file */ |
| 172 | strm.avail_in = fread(input, 1, CHUNK, in); |
| 173 | if (ferror(in)) { |
| 174 | ret = Z_ERRNO; |
| 175 | goto build_index_error; |
| 176 | } |
| 177 | if (strm.avail_in == 0) { |
| 178 | ret = Z_DATA_ERROR; |
| 179 | goto build_index_error; |
| 180 | } |
| 181 | strm.next_in = input; |
| 182 | |
| 183 | /* process all of that, or until end of stream */ |
| 184 | do { |
| 185 | /* reset sliding window if necessary */ |
| 186 | if (strm.avail_out == 0) { |
| @@ -196,13 +193,21 @@ | |
| 196 | totin -= strm.avail_in; |
| 197 | totout -= strm.avail_out; |
| 198 | if (ret == Z_NEED_DICT) |
| 199 | ret = Z_DATA_ERROR; |
| 200 | if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR) |
| 201 | goto build_index_error; |
| 202 | if (ret == Z_STREAM_END) |
| 203 | break; |
| 204 | |
| 205 | /* if at end of block, consider adding an index entry (note that if |
| 206 | data_type indicates an end-of-block, then all of the |
| 207 | uncompressed data from that block has been delivered, and none |
| 208 | of the compressed data after that block has been consumed, |
| @@ -215,41 +220,35 @@ | |
| 215 | (totout == 0 || totout - last > span)) { |
| 216 | index = addpoint(index, strm.data_type & 7, totin, |
| 217 | totout, strm.avail_out, window); |
| 218 | if (index == NULL) { |
| 219 | ret = Z_MEM_ERROR; |
| 220 | goto build_index_error; |
| 221 | } |
| 222 | last = totout; |
| 223 | } |
| 224 | } while (strm.avail_in != 0); |
| 225 | } while (ret != Z_STREAM_END); |
| 226 | |
| 227 | /* clean up and return index (release unused entries in list) */ |
| 228 | (void)inflateEnd(&strm); |
| 229 | index->list = realloc(index->list, sizeof(struct point) * index->have); |
| 230 | index->size = index->have; |
| 231 | *built = index; |
| 232 | return index->size; |
| 233 | |
| 234 | /* return error */ |
| 235 | build_index_error: |
| 236 | (void)inflateEnd(&strm); |
| 237 | if (index != NULL) |
| 238 | free_index(index); |
| 239 | return ret; |
| 240 | } |
| 241 | |
| 242 | /* Use the index to read len bytes from offset into buf, return bytes read or |
| 243 | negative for error (Z_DATA_ERROR or Z_MEM_ERROR). If data is requested past |
| 244 | the end of the uncompressed data, then extract() will return a value less |
| 245 | than len, indicating how much as actually read into buf. This function |
| 246 | should not return a data error unless the file was modified since the index |
| 247 | was generated. extract() may also return Z_ERRNO if there is an error on |
| 248 | reading or seeking the input file. */ |
| 249 | local int extract(FILE *in, struct access *index, off_t offset, |
| 250 | unsigned char *buf, int len) |
| 251 | { |
| 252 | int ret, skip; |
| 253 | z_stream strm; |
| 254 | struct point *here; |
| 255 | unsigned char input[CHUNK]; |
| @@ -274,16 +273,16 @@ | |
| 274 | ret = inflateInit2(&strm, -15); /* raw inflate */ |
| 275 | if (ret != Z_OK) |
| 276 | return ret; |
| 277 | ret = fseeko(in, here->in - (here->bits ? 1 : 0), SEEK_SET); |
| 278 | if (ret == -1) |
| 279 | goto extract_ret; |
| 280 | if (here->bits) { |
| 281 | ret = getc(in); |
| 282 | if (ret == -1) { |
| 283 | ret = ferror(in) ? Z_ERRNO : Z_DATA_ERROR; |
| 284 | goto extract_ret; |
| 285 | } |
| 286 | (void)inflatePrime(&strm, here->bits, ret >> (8 - here->bits)); |
| 287 | } |
| 288 | (void)inflateSetDictionary(&strm, here->window, WINSIZE); |
| 289 | |
| @@ -291,89 +290,157 @@ | |
| 291 | offset -= here->out; |
| 292 | strm.avail_in = 0; |
| 293 | skip = 1; /* while skipping to offset */ |
| 294 | do { |
| 295 | /* define where to put uncompressed data, and how much */ |
| 296 | if (offset == 0 && skip) { /* at offset now */ |
| 297 | strm.avail_out = len; |
| 298 | strm.next_out = buf; |
| 299 | skip = 0; /* only do this once */ |
| 300 | } |
| 301 | if (offset > WINSIZE) { /* skip WINSIZE bytes */ |
| 302 | strm.avail_out = WINSIZE; |
| 303 | strm.next_out = discard; |
| 304 | offset -= WINSIZE; |
| 305 | } |
| 306 | else if (offset != 0) { /* last skip */ |
| 307 | strm.avail_out = (unsigned)offset; |
| 308 | strm.next_out = discard; |
| 309 | offset = 0; |
| 310 | } |
| 311 | |
| 312 | /* uncompress until avail_out filled, or end of stream */ |
| 313 | do { |
| 314 | if (strm.avail_in == 0) { |
| 315 | strm.avail_in = fread(input, 1, CHUNK, in); |
| 316 | if (ferror(in)) { |
| 317 | ret = Z_ERRNO; |
| 318 | goto extract_ret; |
| 319 | } |
| 320 | if (strm.avail_in == 0) { |
| 321 | ret = Z_DATA_ERROR; |
| 322 | goto extract_ret; |
| 323 | } |
| 324 | strm.next_in = input; |
| 325 | } |
| 326 | ret = inflate(&strm, Z_NO_FLUSH); /* normal inflate */ |
| 327 | if (ret == Z_NEED_DICT) |
| 328 | ret = Z_DATA_ERROR; |
| 329 | if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR) |
| 330 | goto extract_ret; |
| 331 | if (ret == Z_STREAM_END) |
| 332 | break; |
| 333 | } while (strm.avail_out != 0); |
| 334 | |
| 335 | /* if reach end of stream, then don't keep trying to get more */ |
| 336 | if (ret == Z_STREAM_END) |
| 337 | break; |
| 338 | |
| 339 | /* do until offset reached and requested data read, or stream ends */ |
| 340 | } while (skip); |
| 341 | |
| 342 | /* compute number of uncompressed bytes read after offset */ |
| 343 | ret = skip ? 0 : len - strm.avail_out; |
| 344 | |
| 345 | /* clean up and return bytes read or error */ |
| 346 | extract_ret: |
| 347 | (void)inflateEnd(&strm); |
| 348 | return ret; |
| 349 | } |
| 350 | |
| 351 | /* Demonstrate the use of build_index() and extract() by processing the file |
| 352 | provided on the command line, and the extracting 16K from about 2/3rds of |
| 353 | the way through the uncompressed output, and writing that to stdout. */ |
| 354 | int main(int argc, char **argv) |
| 355 | { |
| 356 | int len; |
| 357 | off_t offset; |
| 358 | FILE *in; |
| 359 | struct access *index = NULL; |
| 360 | unsigned char buf[CHUNK]; |
| 361 | |
| 362 | /* open input file */ |
| 363 | if (argc != 2) { |
| 364 | fprintf(stderr, "usage: zran file.gz\n"); |
| 365 | return 1; |
| 366 | } |
| 367 | in = fopen(argv[1], "rb"); |
| 368 | if (in == NULL) { |
| 369 | fprintf(stderr, "zran: could not open %s for reading\n", argv[1]); |
| 370 | return 1; |
| 371 | } |
| 372 | |
| 373 | /* build index */ |
| 374 | len = build_index(in, SPAN, &index); |
| 375 | if (len < 0) { |
| 376 | fclose(in); |
| 377 | switch (len) { |
| 378 | case Z_MEM_ERROR: |
| 379 | fprintf(stderr, "zran: out of memory\n"); |
| @@ -390,20 +457,23 @@ | |
| 390 | return 1; |
| 391 | } |
| 392 | fprintf(stderr, "zran: built index with %d access points\n", len); |
| 393 | |
| 394 | /* use index by reading some bytes from an arbitrary offset */ |
| 395 | offset = (index->list[index->have - 1].out << 1) / 3; |
| 396 | len = extract(in, index, offset, buf, CHUNK); |
| 397 | if (len < 0) |
| 398 | fprintf(stderr, "zran: extraction failed: %s error\n", |
| 399 | len == Z_MEM_ERROR ? "out of memory" : "input corrupted"); |
| 400 | else { |
| 401 | fwrite(buf, 1, len, stdout); |
| 402 | fprintf(stderr, "zran: extracted %d bytes at %llu\n", len, offset); |
| 403 | } |
| 404 | |
| 405 | /* clean up and exit */ |
| 406 | free_index(index); |
| 407 | fclose(in); |
| 408 | return 0; |
| 409 | } |
| 410 | |
| 411 | DDED compat/zlib/examples/zran.h |
| --- compat/zlib/examples/zran.c | |
| +++ compat/zlib/examples/zran.c | |
| @@ -1,13 +1,15 @@ | |
| 1 | /* zran.c -- example of zlib/gzip stream indexing and random access |
| 2 | * Copyright (C) 2005, 2012, 2018 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | * Version 1.2 14 Oct 2018 Mark Adler */ |
| 5 | |
| 6 | /* Version History: |
| 7 | 1.0 29 May 2005 First version |
| 8 | 1.1 29 Sep 2012 Fix memory reallocation error |
| 9 | 1.2 14 Oct 2018 Handle gzip streams with multiple members |
| 10 | Add a header file to facilitate usage in applications |
| 11 | */ |
| 12 | |
| 13 | /* Illustrate the use of Z_BLOCK, inflatePrime(), and inflateSetDictionary() |
| 14 | for random access of a compressed file. A file containing a zlib or gzip |
| 15 | stream is provided on the command line. The compressed stream is decoded in |
| @@ -18,15 +20,15 @@ | |
| 20 | |
| 21 | An access point can be created at the start of any deflate block, by saving |
| 22 | the starting file offset and bit of that block, and the 32K bytes of |
| 23 | uncompressed data that precede that block. Also the uncompressed offset of |
| 24 | that block is saved to provide a referece for locating a desired starting |
| 25 | point in the uncompressed stream. deflate_index_build() works by |
| 26 | decompressing the input zlib or gzip stream a block at a time, and at the |
| 27 | end of each block deciding if enough uncompressed data has gone by to |
| 28 | justify the creation of a new access point. If so, that point is saved in a |
| 29 | data structure that grows as needed to accommodate the points. |
| 30 | |
| 31 | To use the index, an offset in the uncompressed data is provided, for which |
| 32 | the latest access point at or preceding that offset is located in the index. |
| 33 | The input file is positioned to the specified location in the index, and if |
| 34 | necessary the first few bits of the compressed data is read from the file. |
| @@ -41,11 +43,12 @@ | |
| 43 | then further index entries would be generated and added. |
| 44 | |
| 45 | There is some fair bit of overhead to starting inflation for the random |
| 46 | access, mainly copying the 32K byte dictionary. So if small pieces of the |
| 47 | file are being accessed, it would make sense to implement a cache to hold |
| 48 | some lookahead and avoid many calls to deflate_index_extract() for small |
| 49 | lengths. |
| 50 | |
| 51 | Another way to build an index would be to use inflateCopy(). That would |
| 52 | not be constrained to have access points at block boundaries, but requires |
| 53 | more memory per access point, and also cannot be saved to file due to the |
| 54 | use of pointers in the state. The approach here allows for storage of the |
| @@ -54,74 +57,69 @@ | |
| 57 | |
| 58 | #include <stdio.h> |
| 59 | #include <stdlib.h> |
| 60 | #include <string.h> |
| 61 | #include "zlib.h" |
| 62 | #include "zran.h" |
| 63 | |
| 64 | #define WINSIZE 32768U /* sliding window size */ |
| 65 | #define CHUNK 16384 /* file input buffer size */ |
| 66 | |
| 67 | /* Access point entry. */ |
| 68 | struct point { |
| 69 | off_t out; /* corresponding offset in uncompressed data */ |
| 70 | off_t in; /* offset in input file of first full byte */ |
| 71 | int bits; /* number of bits (1-7) from byte at in-1, or 0 */ |
| 72 | unsigned char window[WINSIZE]; /* preceding 32K of uncompressed data */ |
| 73 | }; |
| 74 | |
| 75 | /* See comments in zran.h. */ |
| 76 | void deflate_index_free(struct deflate_index *index) |
| 77 | { |
| 78 | if (index != NULL) { |
| 79 | free(index->list); |
| 80 | free(index); |
| 81 | } |
| 82 | } |
| 83 | |
| 84 | /* Add an entry to the access point list. If out of memory, deallocate the |
| 85 | existing list and return NULL. index->gzip is the allocated size of the |
| 86 | index in point entries, until it is time for deflate_index_build() to |
| 87 | return, at which point gzip is set to indicate a gzip file or not. |
| 88 | */ |
| 89 | static struct deflate_index *addpoint(struct deflate_index *index, int bits, |
| 90 | off_t in, off_t out, unsigned left, |
| 91 | unsigned char *window) |
| 92 | { |
| 93 | struct point *next; |
| 94 | |
| 95 | /* if list is empty, create it (start with eight points) */ |
| 96 | if (index == NULL) { |
| 97 | index = malloc(sizeof(struct deflate_index)); |
| 98 | if (index == NULL) return NULL; |
| 99 | index->list = malloc(sizeof(struct point) << 3); |
| 100 | if (index->list == NULL) { |
| 101 | free(index); |
| 102 | return NULL; |
| 103 | } |
| 104 | index->gzip = 8; |
| 105 | index->have = 0; |
| 106 | } |
| 107 | |
| 108 | /* if list is full, make it bigger */ |
| 109 | else if (index->have == index->gzip) { |
| 110 | index->gzip <<= 1; |
| 111 | next = realloc(index->list, sizeof(struct point) * index->gzip); |
| 112 | if (next == NULL) { |
| 113 | deflate_index_free(index); |
| 114 | return NULL; |
| 115 | } |
| 116 | index->list = next; |
| 117 | } |
| 118 | |
| 119 | /* fill in entry and increment how many we have */ |
| 120 | next = (struct point *)(index->list) + index->have; |
| 121 | next->bits = bits; |
| 122 | next->in = in; |
| 123 | next->out = out; |
| 124 | if (left) |
| 125 | memcpy(next->window, window + WINSIZE - left, left); |
| @@ -131,24 +129,18 @@ | |
| 129 | |
| 130 | /* return list, possibly reallocated */ |
| 131 | return index; |
| 132 | } |
| 133 | |
| 134 | /* See comments in zran.h. */ |
| 135 | int deflate_index_build(FILE *in, off_t span, struct deflate_index **built) |
| 136 | { |
| 137 | int ret; |
| 138 | int gzip = 0; /* true if reading a gzip file */ |
| 139 | off_t totin, totout; /* our own total counters to avoid 4GB limit */ |
| 140 | off_t last; /* totout value of last access point */ |
| 141 | struct deflate_index *index; /* access points being generated */ |
| 142 | z_stream strm; |
| 143 | unsigned char input[CHUNK]; |
| 144 | unsigned char window[WINSIZE]; |
| 145 | |
| 146 | /* initialize inflate */ |
| @@ -161,26 +153,31 @@ | |
| 153 | if (ret != Z_OK) |
| 154 | return ret; |
| 155 | |
| 156 | /* inflate the input, maintain a sliding window, and build an index -- this |
| 157 | also validates the integrity of the compressed data using the check |
| 158 | information in the gzip or zlib stream */ |
| 159 | totin = totout = last = 0; |
| 160 | index = NULL; /* will be allocated by first addpoint() */ |
| 161 | strm.avail_out = 0; |
| 162 | do { |
| 163 | /* get some compressed data from input file */ |
| 164 | strm.avail_in = fread(input, 1, CHUNK, in); |
| 165 | if (ferror(in)) { |
| 166 | ret = Z_ERRNO; |
| 167 | goto deflate_index_build_error; |
| 168 | } |
| 169 | if (strm.avail_in == 0) { |
| 170 | ret = Z_DATA_ERROR; |
| 171 | goto deflate_index_build_error; |
| 172 | } |
| 173 | strm.next_in = input; |
| 174 | |
| 175 | /* check for a gzip stream */ |
| 176 | if (totin == 0 && strm.avail_in >= 3 && |
| 177 | input[0] == 31 && input[1] == 139 && input[2] == 8) |
| 178 | gzip = 1; |
| 179 | |
| 180 | /* process all of that, or until end of stream */ |
| 181 | do { |
| 182 | /* reset sliding window if necessary */ |
| 183 | if (strm.avail_out == 0) { |
| @@ -196,13 +193,21 @@ | |
| 193 | totin -= strm.avail_in; |
| 194 | totout -= strm.avail_out; |
| 195 | if (ret == Z_NEED_DICT) |
| 196 | ret = Z_DATA_ERROR; |
| 197 | if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR) |
| 198 | goto deflate_index_build_error; |
| 199 | if (ret == Z_STREAM_END) { |
| 200 | if (gzip && |
| 201 | (strm.avail_in || ungetc(getc(in), in) != EOF)) { |
| 202 | ret = inflateReset(&strm); |
| 203 | if (ret != Z_OK) |
| 204 | goto deflate_index_build_error; |
| 205 | continue; |
| 206 | } |
| 207 | break; |
| 208 | } |
| 209 | |
| 210 | /* if at end of block, consider adding an index entry (note that if |
| 211 | data_type indicates an end-of-block, then all of the |
| 212 | uncompressed data from that block has been delivered, and none |
| 213 | of the compressed data after that block has been consumed, |
| @@ -215,41 +220,35 @@ | |
| 220 | (totout == 0 || totout - last > span)) { |
| 221 | index = addpoint(index, strm.data_type & 7, totin, |
| 222 | totout, strm.avail_out, window); |
| 223 | if (index == NULL) { |
| 224 | ret = Z_MEM_ERROR; |
| 225 | goto deflate_index_build_error; |
| 226 | } |
| 227 | last = totout; |
| 228 | } |
| 229 | } while (strm.avail_in != 0); |
| 230 | } while (ret != Z_STREAM_END); |
| 231 | |
| 232 | /* clean up and return index (release unused entries in list) */ |
| 233 | (void)inflateEnd(&strm); |
| 234 | index->list = realloc(index->list, sizeof(struct point) * index->have); |
| 235 | index->gzip = gzip; |
| 236 | index->length = totout; |
| 237 | *built = index; |
| 238 | return index->have; |
| 239 | |
| 240 | /* return error */ |
| 241 | deflate_index_build_error: |
| 242 | (void)inflateEnd(&strm); |
| 243 | deflate_index_free(index); |
| 244 | return ret; |
| 245 | } |
| 246 | |
| 247 | /* See comments in zran.h. */ |
| 248 | int deflate_index_extract(FILE *in, struct deflate_index *index, off_t offset, |
| 249 | unsigned char *buf, int len) |
| 250 | { |
| 251 | int ret, skip; |
| 252 | z_stream strm; |
| 253 | struct point *here; |
| 254 | unsigned char input[CHUNK]; |
| @@ -274,16 +273,16 @@ | |
| 273 | ret = inflateInit2(&strm, -15); /* raw inflate */ |
| 274 | if (ret != Z_OK) |
| 275 | return ret; |
| 276 | ret = fseeko(in, here->in - (here->bits ? 1 : 0), SEEK_SET); |
| 277 | if (ret == -1) |
| 278 | goto deflate_index_extract_ret; |
| 279 | if (here->bits) { |
| 280 | ret = getc(in); |
| 281 | if (ret == -1) { |
| 282 | ret = ferror(in) ? Z_ERRNO : Z_DATA_ERROR; |
| 283 | goto deflate_index_extract_ret; |
| 284 | } |
| 285 | (void)inflatePrime(&strm, here->bits, ret >> (8 - here->bits)); |
| 286 | } |
| 287 | (void)inflateSetDictionary(&strm, here->window, WINSIZE); |
| 288 | |
| @@ -291,89 +290,157 @@ | |
| 290 | offset -= here->out; |
| 291 | strm.avail_in = 0; |
| 292 | skip = 1; /* while skipping to offset */ |
| 293 | do { |
| 294 | /* define where to put uncompressed data, and how much */ |
| 295 | if (offset > WINSIZE) { /* skip WINSIZE bytes */ |
| 296 | strm.avail_out = WINSIZE; |
| 297 | strm.next_out = discard; |
| 298 | offset -= WINSIZE; |
| 299 | } |
| 300 | else if (offset > 0) { /* last skip */ |
| 301 | strm.avail_out = (unsigned)offset; |
| 302 | strm.next_out = discard; |
| 303 | offset = 0; |
| 304 | } |
| 305 | else if (skip) { /* at offset now */ |
| 306 | strm.avail_out = len; |
| 307 | strm.next_out = buf; |
| 308 | skip = 0; /* only do this once */ |
| 309 | } |
| 310 | |
| 311 | /* uncompress until avail_out filled, or end of stream */ |
| 312 | do { |
| 313 | if (strm.avail_in == 0) { |
| 314 | strm.avail_in = fread(input, 1, CHUNK, in); |
| 315 | if (ferror(in)) { |
| 316 | ret = Z_ERRNO; |
| 317 | goto deflate_index_extract_ret; |
| 318 | } |
| 319 | if (strm.avail_in == 0) { |
| 320 | ret = Z_DATA_ERROR; |
| 321 | goto deflate_index_extract_ret; |
| 322 | } |
| 323 | strm.next_in = input; |
| 324 | } |
| 325 | ret = inflate(&strm, Z_NO_FLUSH); /* normal inflate */ |
| 326 | if (ret == Z_NEED_DICT) |
| 327 | ret = Z_DATA_ERROR; |
| 328 | if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR) |
| 329 | goto deflate_index_extract_ret; |
| 330 | if (ret == Z_STREAM_END) { |
| 331 | /* the raw deflate stream has ended */ |
| 332 | if (index->gzip == 0) |
| 333 | /* this is a zlib stream that has ended -- done */ |
| 334 | break; |
| 335 | |
| 336 | /* near the end of a gzip member, which might be followed by |
| 337 | another gzip member -- skip the gzip trailer and see if |
| 338 | there is more input after it */ |
| 339 | if (strm.avail_in < 8) { |
| 340 | fseeko(in, 8 - strm.avail_in, SEEK_CUR); |
| 341 | strm.avail_in = 0; |
| 342 | } |
| 343 | else { |
| 344 | strm.avail_in -= 8; |
| 345 | strm.next_in += 8; |
| 346 | } |
| 347 | if (strm.avail_in == 0 && ungetc(getc(in), in) == EOF) |
| 348 | /* the input ended after the gzip trailer -- done */ |
| 349 | break; |
| 350 | |
| 351 | /* there is more input, so another gzip member should follow -- |
| 352 | validate and skip the gzip header */ |
| 353 | ret = inflateReset2(&strm, 31); |
| 354 | if (ret != Z_OK) |
| 355 | goto deflate_index_extract_ret; |
| 356 | do { |
| 357 | if (strm.avail_in == 0) { |
| 358 | strm.avail_in = fread(input, 1, CHUNK, in); |
| 359 | if (ferror(in)) { |
| 360 | ret = Z_ERRNO; |
| 361 | goto deflate_index_extract_ret; |
| 362 | } |
| 363 | if (strm.avail_in == 0) { |
| 364 | ret = Z_DATA_ERROR; |
| 365 | goto deflate_index_extract_ret; |
| 366 | } |
| 367 | strm.next_in = input; |
| 368 | } |
| 369 | ret = inflate(&strm, Z_BLOCK); |
| 370 | if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR) |
| 371 | goto deflate_index_extract_ret; |
| 372 | } while ((strm.data_type & 128) == 0); |
| 373 | |
| 374 | /* set up to continue decompression of the raw deflate stream |
| 375 | that follows the gzip header */ |
| 376 | ret = inflateReset2(&strm, -15); |
| 377 | if (ret != Z_OK) |
| 378 | goto deflate_index_extract_ret; |
| 379 | } |
| 380 | |
| 381 | /* continue to process the available input before reading more */ |
| 382 | } while (strm.avail_out != 0); |
| 383 | |
| 384 | if (ret == Z_STREAM_END) |
| 385 | /* reached the end of the compressed data -- return the data that |
| 386 | was available, possibly less than requested */ |
| 387 | break; |
| 388 | |
| 389 | /* do until offset reached and requested data read */ |
| 390 | } while (skip); |
| 391 | |
| 392 | /* compute the number of uncompressed bytes read after the offset */ |
| 393 | ret = skip ? 0 : len - strm.avail_out; |
| 394 | |
| 395 | /* clean up and return the bytes read, or the negative error */ |
| 396 | deflate_index_extract_ret: |
| 397 | (void)inflateEnd(&strm); |
| 398 | return ret; |
| 399 | } |
| 400 | |
| 401 | #ifdef TEST |
| 402 | |
| 403 | #define SPAN 1048576L /* desired distance between access points */ |
| 404 | #define LEN 16384 /* number of bytes to extract */ |
| 405 | |
| 406 | /* Demonstrate the use of deflate_index_build() and deflate_index_extract() by |
| 407 | processing the file provided on the command line, and extracting LEN bytes |
| 408 | from 2/3rds of the way through the uncompressed output, writing that to |
| 409 | stdout. An offset can be provided as the second argument, in which case the |
| 410 | data is extracted from there instead. */ |
| 411 | int main(int argc, char **argv) |
| 412 | { |
| 413 | int len; |
| 414 | off_t offset = -1; |
| 415 | FILE *in; |
| 416 | struct deflate_index *index = NULL; |
| 417 | unsigned char buf[LEN]; |
| 418 | |
| 419 | /* open input file */ |
| 420 | if (argc < 2 || argc > 3) { |
| 421 | fprintf(stderr, "usage: zran file.gz [offset]\n"); |
| 422 | return 1; |
| 423 | } |
| 424 | in = fopen(argv[1], "rb"); |
| 425 | if (in == NULL) { |
| 426 | fprintf(stderr, "zran: could not open %s for reading\n", argv[1]); |
| 427 | return 1; |
| 428 | } |
| 429 | |
| 430 | /* get optional offset */ |
| 431 | if (argc == 3) { |
| 432 | char *end; |
| 433 | offset = strtoll(argv[2], &end, 10); |
| 434 | if (*end || offset < 0) { |
| 435 | fprintf(stderr, "zran: %s is not a valid offset\n", argv[2]); |
| 436 | return 1; |
| 437 | } |
| 438 | } |
| 439 | |
| 440 | /* build index */ |
| 441 | len = deflate_index_build(in, SPAN, &index); |
| 442 | if (len < 0) { |
| 443 | fclose(in); |
| 444 | switch (len) { |
| 445 | case Z_MEM_ERROR: |
| 446 | fprintf(stderr, "zran: out of memory\n"); |
| @@ -390,20 +457,23 @@ | |
| 457 | return 1; |
| 458 | } |
| 459 | fprintf(stderr, "zran: built index with %d access points\n", len); |
| 460 | |
| 461 | /* use index by reading some bytes from an arbitrary offset */ |
| 462 | if (offset == -1) |
| 463 | offset = (index->length << 1) / 3; |
| 464 | len = deflate_index_extract(in, index, offset, buf, LEN); |
| 465 | if (len < 0) |
| 466 | fprintf(stderr, "zran: extraction failed: %s error\n", |
| 467 | len == Z_MEM_ERROR ? "out of memory" : "input corrupted"); |
| 468 | else { |
| 469 | fwrite(buf, 1, len, stdout); |
| 470 | fprintf(stderr, "zran: extracted %d bytes at %llu\n", len, offset); |
| 471 | } |
| 472 | |
| 473 | /* clean up and exit */ |
| 474 | deflate_index_free(index); |
| 475 | fclose(in); |
| 476 | return 0; |
| 477 | } |
| 478 | |
| 479 | #endif |
| 480 | |
| 481 | DDED compat/zlib/examples/zran.h |
| --- a/compat/zlib/examples/zran.h | ||
| +++ b/compat/zlib/examples/zran.h | ||
| @@ -0,0 +1,7 @@ | ||
| 1 | +/* zran.h -- example of zlib/gzip stream indexing and random access | |
| 2 | + * Copyright (C) 2005, 2012, 2018 (C) 2005, 2012, 2018, 2023012, 2018, 2023, 2024, 2025 Mark Adler | |
| 3 | + * For conditions of distribution2 14 Oct 2018 * Version 1.7 16 May 2025 * Access point list. */ | |
| 4 | +{ | |
| 5 | + int have; /* number of list entries */ | |
| 6 | + int gzip; /* 1 if the index is of a gzip file, 0 if it is of a | |
| 7 | + zlib stream */ |
| --- a/compat/zlib/examples/zran.h | |
| +++ b/compat/zlib/examples/zran.h | |
| @@ -0,0 +1,7 @@ | |
| --- a/compat/zlib/examples/zran.h | |
| +++ b/compat/zlib/examples/zran.h | |
| @@ -0,0 +1,7 @@ | |
| 1 | /* zran.h -- example of zlib/gzip stream indexing and random access |
| 2 | * Copyright (C) 2005, 2012, 2018 (C) 2005, 2012, 2018, 2023012, 2018, 2023, 2024, 2025 Mark Adler |
| 3 | * For conditions of distribution2 14 Oct 2018 * Version 1.7 16 May 2025 * Access point list. */ |
| 4 | { |
| 5 | int have; /* number of list entries */ |
| 6 | int gzip; /* 1 if the index is of a gzip file, 0 if it is of a |
| 7 | zlib stream */ |
+3
-2
| --- compat/zlib/gzguts.h | ||
| +++ compat/zlib/gzguts.h | ||
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | /* gzguts.h -- zlib internal header definitions for gz* operations |
| 2 | - * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler | |
| 2 | + * Copyright (C) 2004-2019 Mark Adler | |
| 3 | 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | 4 | */ |
| 5 | 5 | |
| 6 | 6 | #ifdef _LARGEFILE64_SOURCE |
| 7 | 7 | # ifndef _LARGEFILE_SOURCE |
| @@ -37,11 +37,11 @@ | ||
| 37 | 37 | |
| 38 | 38 | #if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32) |
| 39 | 39 | # include <io.h> |
| 40 | 40 | #endif |
| 41 | 41 | |
| 42 | -#if defined(_WIN32) || defined(__CYGWIN__) | |
| 42 | +#if defined(_WIN32) | |
| 43 | 43 | # define WIDECHAR |
| 44 | 44 | #endif |
| 45 | 45 | |
| 46 | 46 | #ifdef WINAPI_FAMILY |
| 47 | 47 | # define open _open |
| @@ -188,10 +188,11 @@ | ||
| 188 | 188 | int eof; /* true if end of input file reached */ |
| 189 | 189 | int past; /* true if read requested past end */ |
| 190 | 190 | /* just for writing */ |
| 191 | 191 | int level; /* compression level */ |
| 192 | 192 | int strategy; /* compression strategy */ |
| 193 | + int reset; /* true if a reset is pending after a Z_FINISH */ | |
| 193 | 194 | /* seek request */ |
| 194 | 195 | z_off64_t skip; /* amount to skip (already rewound if backwards) */ |
| 195 | 196 | int seek; /* true if seek request pending */ |
| 196 | 197 | /* error information */ |
| 197 | 198 | int err; /* error code */ |
| 198 | 199 |
| --- compat/zlib/gzguts.h | |
| +++ compat/zlib/gzguts.h | |
| @@ -1,7 +1,7 @@ | |
| 1 | /* gzguts.h -- zlib internal header definitions for gz* operations |
| 2 | * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | #ifdef _LARGEFILE64_SOURCE |
| 7 | # ifndef _LARGEFILE_SOURCE |
| @@ -37,11 +37,11 @@ | |
| 37 | |
| 38 | #if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32) |
| 39 | # include <io.h> |
| 40 | #endif |
| 41 | |
| 42 | #if defined(_WIN32) || defined(__CYGWIN__) |
| 43 | # define WIDECHAR |
| 44 | #endif |
| 45 | |
| 46 | #ifdef WINAPI_FAMILY |
| 47 | # define open _open |
| @@ -188,10 +188,11 @@ | |
| 188 | int eof; /* true if end of input file reached */ |
| 189 | int past; /* true if read requested past end */ |
| 190 | /* just for writing */ |
| 191 | int level; /* compression level */ |
| 192 | int strategy; /* compression strategy */ |
| 193 | /* seek request */ |
| 194 | z_off64_t skip; /* amount to skip (already rewound if backwards) */ |
| 195 | int seek; /* true if seek request pending */ |
| 196 | /* error information */ |
| 197 | int err; /* error code */ |
| 198 |
| --- compat/zlib/gzguts.h | |
| +++ compat/zlib/gzguts.h | |
| @@ -1,7 +1,7 @@ | |
| 1 | /* gzguts.h -- zlib internal header definitions for gz* operations |
| 2 | * Copyright (C) 2004-2019 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | #ifdef _LARGEFILE64_SOURCE |
| 7 | # ifndef _LARGEFILE_SOURCE |
| @@ -37,11 +37,11 @@ | |
| 37 | |
| 38 | #if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32) |
| 39 | # include <io.h> |
| 40 | #endif |
| 41 | |
| 42 | #if defined(_WIN32) |
| 43 | # define WIDECHAR |
| 44 | #endif |
| 45 | |
| 46 | #ifdef WINAPI_FAMILY |
| 47 | # define open _open |
| @@ -188,10 +188,11 @@ | |
| 188 | int eof; /* true if end of input file reached */ |
| 189 | int past; /* true if read requested past end */ |
| 190 | /* just for writing */ |
| 191 | int level; /* compression level */ |
| 192 | int strategy; /* compression strategy */ |
| 193 | int reset; /* true if a reset is pending after a Z_FINISH */ |
| 194 | /* seek request */ |
| 195 | z_off64_t skip; /* amount to skip (already rewound if backwards) */ |
| 196 | int seek; /* true if seek request pending */ |
| 197 | /* error information */ |
| 198 | int err; /* error code */ |
| 199 |
+5
-3
| --- compat/zlib/gzlib.c | ||
| +++ compat/zlib/gzlib.c | ||
| @@ -1,13 +1,13 @@ | ||
| 1 | 1 | /* gzlib.c -- zlib functions common to reading and writing gzip files |
| 2 | - * Copyright (C) 2004-2017 Mark Adler | |
| 2 | + * Copyright (C) 2004-2019 Mark Adler | |
| 3 | 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | 4 | */ |
| 5 | 5 | |
| 6 | 6 | #include "gzguts.h" |
| 7 | 7 | |
| 8 | -#if defined(_WIN32) && !defined(__BORLANDC__) && !defined(__MINGW32__) | |
| 8 | +#if defined(_WIN32) && !defined(__BORLANDC__) | |
| 9 | 9 | # define LSEEK _lseeki64 |
| 10 | 10 | #else |
| 11 | 11 | #if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 |
| 12 | 12 | # define LSEEK lseek64 |
| 13 | 13 | #else |
| @@ -79,10 +79,12 @@ | ||
| 79 | 79 | if (state->mode == GZ_READ) { /* for reading ... */ |
| 80 | 80 | state->eof = 0; /* not at end of file */ |
| 81 | 81 | state->past = 0; /* have not read past end yet */ |
| 82 | 82 | state->how = LOOK; /* look for gzip header */ |
| 83 | 83 | } |
| 84 | + else /* for writing ... */ | |
| 85 | + state->reset = 0; /* no deflateReset pending */ | |
| 84 | 86 | state->seek = 0; /* no seek request pending */ |
| 85 | 87 | gz_error(state, Z_OK, NULL); /* clear error */ |
| 86 | 88 | state->x.pos = 0; /* no uncompressed data yet */ |
| 87 | 89 | state->strm.avail_in = 0; /* no input data yet */ |
| 88 | 90 | } |
| @@ -395,11 +397,11 @@ | ||
| 395 | 397 | state->seek = 0; |
| 396 | 398 | |
| 397 | 399 | /* if within raw area while reading, just go there */ |
| 398 | 400 | if (state->mode == GZ_READ && state->how == COPY && |
| 399 | 401 | state->x.pos + offset >= 0) { |
| 400 | - ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR); | |
| 402 | + ret = LSEEK(state->fd, offset - (z_off64_t)state->x.have, SEEK_CUR); | |
| 401 | 403 | if (ret == -1) |
| 402 | 404 | return -1; |
| 403 | 405 | state->x.have = 0; |
| 404 | 406 | state->eof = 0; |
| 405 | 407 | state->past = 0; |
| 406 | 408 |
| --- compat/zlib/gzlib.c | |
| +++ compat/zlib/gzlib.c | |
| @@ -1,13 +1,13 @@ | |
| 1 | /* gzlib.c -- zlib functions common to reading and writing gzip files |
| 2 | * Copyright (C) 2004-2017 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | #include "gzguts.h" |
| 7 | |
| 8 | #if defined(_WIN32) && !defined(__BORLANDC__) && !defined(__MINGW32__) |
| 9 | # define LSEEK _lseeki64 |
| 10 | #else |
| 11 | #if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 |
| 12 | # define LSEEK lseek64 |
| 13 | #else |
| @@ -79,10 +79,12 @@ | |
| 79 | if (state->mode == GZ_READ) { /* for reading ... */ |
| 80 | state->eof = 0; /* not at end of file */ |
| 81 | state->past = 0; /* have not read past end yet */ |
| 82 | state->how = LOOK; /* look for gzip header */ |
| 83 | } |
| 84 | state->seek = 0; /* no seek request pending */ |
| 85 | gz_error(state, Z_OK, NULL); /* clear error */ |
| 86 | state->x.pos = 0; /* no uncompressed data yet */ |
| 87 | state->strm.avail_in = 0; /* no input data yet */ |
| 88 | } |
| @@ -395,11 +397,11 @@ | |
| 395 | state->seek = 0; |
| 396 | |
| 397 | /* if within raw area while reading, just go there */ |
| 398 | if (state->mode == GZ_READ && state->how == COPY && |
| 399 | state->x.pos + offset >= 0) { |
| 400 | ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR); |
| 401 | if (ret == -1) |
| 402 | return -1; |
| 403 | state->x.have = 0; |
| 404 | state->eof = 0; |
| 405 | state->past = 0; |
| 406 |
| --- compat/zlib/gzlib.c | |
| +++ compat/zlib/gzlib.c | |
| @@ -1,13 +1,13 @@ | |
| 1 | /* gzlib.c -- zlib functions common to reading and writing gzip files |
| 2 | * Copyright (C) 2004-2019 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | #include "gzguts.h" |
| 7 | |
| 8 | #if defined(_WIN32) && !defined(__BORLANDC__) |
| 9 | # define LSEEK _lseeki64 |
| 10 | #else |
| 11 | #if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 |
| 12 | # define LSEEK lseek64 |
| 13 | #else |
| @@ -79,10 +79,12 @@ | |
| 79 | if (state->mode == GZ_READ) { /* for reading ... */ |
| 80 | state->eof = 0; /* not at end of file */ |
| 81 | state->past = 0; /* have not read past end yet */ |
| 82 | state->how = LOOK; /* look for gzip header */ |
| 83 | } |
| 84 | else /* for writing ... */ |
| 85 | state->reset = 0; /* no deflateReset pending */ |
| 86 | state->seek = 0; /* no seek request pending */ |
| 87 | gz_error(state, Z_OK, NULL); /* clear error */ |
| 88 | state->x.pos = 0; /* no uncompressed data yet */ |
| 89 | state->strm.avail_in = 0; /* no input data yet */ |
| 90 | } |
| @@ -395,11 +397,11 @@ | |
| 397 | state->seek = 0; |
| 398 | |
| 399 | /* if within raw area while reading, just go there */ |
| 400 | if (state->mode == GZ_READ && state->how == COPY && |
| 401 | state->x.pos + offset >= 0) { |
| 402 | ret = LSEEK(state->fd, offset - (z_off64_t)state->x.have, SEEK_CUR); |
| 403 | if (ret == -1) |
| 404 | return -1; |
| 405 | state->x.have = 0; |
| 406 | state->eof = 0; |
| 407 | state->past = 0; |
| 408 |
+5
-7
| --- compat/zlib/gzread.c | ||
| +++ compat/zlib/gzread.c | ||
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | /* gzread.c -- zlib functions for reading gzip files |
| 2 | - * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler | |
| 2 | + * Copyright (C) 2004-2017 Mark Adler | |
| 3 | 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | 4 | */ |
| 5 | 5 | |
| 6 | 6 | #include "gzguts.h" |
| 7 | 7 | |
| @@ -312,13 +312,13 @@ | ||
| 312 | 312 | |
| 313 | 313 | /* get len bytes to buf, or less than len if at the end */ |
| 314 | 314 | got = 0; |
| 315 | 315 | do { |
| 316 | 316 | /* set n to the maximum amount of len that fits in an unsigned int */ |
| 317 | - n = -1; | |
| 317 | + n = (unsigned)-1; | |
| 318 | 318 | if (n > len) |
| 319 | - n = len; | |
| 319 | + n = (unsigned)len; | |
| 320 | 320 | |
| 321 | 321 | /* first just try copying data from the output buffer */ |
| 322 | 322 | if (state->x.have) { |
| 323 | 323 | if (state->x.have < n) |
| 324 | 324 | n = state->x.have; |
| @@ -395,11 +395,11 @@ | ||
| 395 | 395 | gz_error(state, Z_STREAM_ERROR, "request does not fit in an int"); |
| 396 | 396 | return -1; |
| 397 | 397 | } |
| 398 | 398 | |
| 399 | 399 | /* read len or fewer bytes to buf */ |
| 400 | - len = gz_read(state, buf, len); | |
| 400 | + len = (unsigned)gz_read(state, buf, len); | |
| 401 | 401 | |
| 402 | 402 | /* check for an error */ |
| 403 | 403 | if (len == 0 && state->err != Z_OK && state->err != Z_BUF_ERROR) |
| 404 | 404 | return -1; |
| 405 | 405 | |
| @@ -445,11 +445,10 @@ | ||
| 445 | 445 | # undef gzgetc |
| 446 | 446 | #endif |
| 447 | 447 | int ZEXPORT gzgetc(file) |
| 448 | 448 | gzFile file; |
| 449 | 449 | { |
| 450 | - int ret; | |
| 451 | 450 | unsigned char buf[1]; |
| 452 | 451 | gz_statep state; |
| 453 | 452 | |
| 454 | 453 | /* get internal structure */ |
| 455 | 454 | if (file == NULL) |
| @@ -467,12 +466,11 @@ | ||
| 467 | 466 | state->x.pos++; |
| 468 | 467 | return *(state->x.next)++; |
| 469 | 468 | } |
| 470 | 469 | |
| 471 | 470 | /* nothing there -- try gz_read() */ |
| 472 | - ret = gz_read(state, buf, 1); | |
| 473 | - return ret < 1 ? -1 : buf[0]; | |
| 471 | + return gz_read(state, buf, 1) < 1 ? -1 : buf[0]; | |
| 474 | 472 | } |
| 475 | 473 | |
| 476 | 474 | int ZEXPORT gzgetc_(file) |
| 477 | 475 | gzFile file; |
| 478 | 476 | { |
| 479 | 477 |
| --- compat/zlib/gzread.c | |
| +++ compat/zlib/gzread.c | |
| @@ -1,7 +1,7 @@ | |
| 1 | /* gzread.c -- zlib functions for reading gzip files |
| 2 | * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | #include "gzguts.h" |
| 7 | |
| @@ -312,13 +312,13 @@ | |
| 312 | |
| 313 | /* get len bytes to buf, or less than len if at the end */ |
| 314 | got = 0; |
| 315 | do { |
| 316 | /* set n to the maximum amount of len that fits in an unsigned int */ |
| 317 | n = -1; |
| 318 | if (n > len) |
| 319 | n = len; |
| 320 | |
| 321 | /* first just try copying data from the output buffer */ |
| 322 | if (state->x.have) { |
| 323 | if (state->x.have < n) |
| 324 | n = state->x.have; |
| @@ -395,11 +395,11 @@ | |
| 395 | gz_error(state, Z_STREAM_ERROR, "request does not fit in an int"); |
| 396 | return -1; |
| 397 | } |
| 398 | |
| 399 | /* read len or fewer bytes to buf */ |
| 400 | len = gz_read(state, buf, len); |
| 401 | |
| 402 | /* check for an error */ |
| 403 | if (len == 0 && state->err != Z_OK && state->err != Z_BUF_ERROR) |
| 404 | return -1; |
| 405 | |
| @@ -445,11 +445,10 @@ | |
| 445 | # undef gzgetc |
| 446 | #endif |
| 447 | int ZEXPORT gzgetc(file) |
| 448 | gzFile file; |
| 449 | { |
| 450 | int ret; |
| 451 | unsigned char buf[1]; |
| 452 | gz_statep state; |
| 453 | |
| 454 | /* get internal structure */ |
| 455 | if (file == NULL) |
| @@ -467,12 +466,11 @@ | |
| 467 | state->x.pos++; |
| 468 | return *(state->x.next)++; |
| 469 | } |
| 470 | |
| 471 | /* nothing there -- try gz_read() */ |
| 472 | ret = gz_read(state, buf, 1); |
| 473 | return ret < 1 ? -1 : buf[0]; |
| 474 | } |
| 475 | |
| 476 | int ZEXPORT gzgetc_(file) |
| 477 | gzFile file; |
| 478 | { |
| 479 |
| --- compat/zlib/gzread.c | |
| +++ compat/zlib/gzread.c | |
| @@ -1,7 +1,7 @@ | |
| 1 | /* gzread.c -- zlib functions for reading gzip files |
| 2 | * Copyright (C) 2004-2017 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | #include "gzguts.h" |
| 7 | |
| @@ -312,13 +312,13 @@ | |
| 312 | |
| 313 | /* get len bytes to buf, or less than len if at the end */ |
| 314 | got = 0; |
| 315 | do { |
| 316 | /* set n to the maximum amount of len that fits in an unsigned int */ |
| 317 | n = (unsigned)-1; |
| 318 | if (n > len) |
| 319 | n = (unsigned)len; |
| 320 | |
| 321 | /* first just try copying data from the output buffer */ |
| 322 | if (state->x.have) { |
| 323 | if (state->x.have < n) |
| 324 | n = state->x.have; |
| @@ -395,11 +395,11 @@ | |
| 395 | gz_error(state, Z_STREAM_ERROR, "request does not fit in an int"); |
| 396 | return -1; |
| 397 | } |
| 398 | |
| 399 | /* read len or fewer bytes to buf */ |
| 400 | len = (unsigned)gz_read(state, buf, len); |
| 401 | |
| 402 | /* check for an error */ |
| 403 | if (len == 0 && state->err != Z_OK && state->err != Z_BUF_ERROR) |
| 404 | return -1; |
| 405 | |
| @@ -445,11 +445,10 @@ | |
| 445 | # undef gzgetc |
| 446 | #endif |
| 447 | int ZEXPORT gzgetc(file) |
| 448 | gzFile file; |
| 449 | { |
| 450 | unsigned char buf[1]; |
| 451 | gz_statep state; |
| 452 | |
| 453 | /* get internal structure */ |
| 454 | if (file == NULL) |
| @@ -467,12 +466,11 @@ | |
| 466 | state->x.pos++; |
| 467 | return *(state->x.next)++; |
| 468 | } |
| 469 | |
| 470 | /* nothing there -- try gz_read() */ |
| 471 | return gz_read(state, buf, 1) < 1 ? -1 : buf[0]; |
| 472 | } |
| 473 | |
| 474 | int ZEXPORT gzgetc_(file) |
| 475 | gzFile file; |
| 476 | { |
| 477 |
+25
-13
| --- compat/zlib/gzwrite.c | ||
| +++ compat/zlib/gzwrite.c | ||
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | /* gzwrite.c -- zlib functions for writing gzip files |
| 2 | - * Copyright (C) 2004-2017 Mark Adler | |
| 2 | + * Copyright (C) 2004-2019 Mark Adler | |
| 3 | 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | 4 | */ |
| 5 | 5 | |
| 6 | 6 | #include "gzguts.h" |
| 7 | 7 | |
| @@ -94,10 +94,19 @@ | ||
| 94 | 94 | strm->avail_in -= (unsigned)writ; |
| 95 | 95 | strm->next_in += writ; |
| 96 | 96 | } |
| 97 | 97 | return 0; |
| 98 | 98 | } |
| 99 | + | |
| 100 | + /* check for a pending reset */ | |
| 101 | + if (state->reset) { | |
| 102 | + /* don't start a new gzip member unless there is data to write */ | |
| 103 | + if (strm->avail_in == 0) | |
| 104 | + return 0; | |
| 105 | + deflateReset(strm); | |
| 106 | + state->reset = 0; | |
| 107 | + } | |
| 99 | 108 | |
| 100 | 109 | /* run deflate() on provided input until it produces no more output */ |
| 101 | 110 | ret = Z_OK; |
| 102 | 111 | do { |
| 103 | 112 | /* write out current buffer contents if full, or if flushing, but if |
| @@ -132,11 +141,11 @@ | ||
| 132 | 141 | have -= strm->avail_out; |
| 133 | 142 | } while (have); |
| 134 | 143 | |
| 135 | 144 | /* if that completed a deflate stream, allow another to start */ |
| 136 | 145 | if (flush == Z_FINISH) |
| 137 | - deflateReset(strm); | |
| 146 | + state->reset = 1; | |
| 138 | 147 | |
| 139 | 148 | /* all done, no errors */ |
| 140 | 149 | return 0; |
| 141 | 150 | } |
| 142 | 151 | |
| @@ -207,11 +216,11 @@ | ||
| 207 | 216 | state->strm.next_in = state->in; |
| 208 | 217 | have = (unsigned)((state->strm.next_in + state->strm.avail_in) - |
| 209 | 218 | state->in); |
| 210 | 219 | copy = state->size - have; |
| 211 | 220 | if (copy > len) |
| 212 | - copy = len; | |
| 221 | + copy = (unsigned)len; | |
| 213 | 222 | memcpy(state->in + have, buf, copy); |
| 214 | 223 | state->strm.avail_in += copy; |
| 215 | 224 | state->x.pos += copy; |
| 216 | 225 | buf = (const char *)buf + copy; |
| 217 | 226 | len -= copy; |
| @@ -227,11 +236,11 @@ | ||
| 227 | 236 | /* directly compress user buffer to file */ |
| 228 | 237 | state->strm.next_in = (z_const Bytef *)buf; |
| 229 | 238 | do { |
| 230 | 239 | unsigned n = (unsigned)-1; |
| 231 | 240 | if (n > len) |
| 232 | - n = len; | |
| 241 | + n = (unsigned)len; | |
| 233 | 242 | state->strm.avail_in = n; |
| 234 | 243 | state->x.pos += n; |
| 235 | 244 | if (gz_comp(state, Z_NO_FLUSH) == -1) |
| 236 | 245 | return 0; |
| 237 | 246 | len -= n; |
| @@ -347,16 +356,15 @@ | ||
| 347 | 356 | return -1; |
| 348 | 357 | return c & 0xff; |
| 349 | 358 | } |
| 350 | 359 | |
| 351 | 360 | /* -- see zlib.h -- */ |
| 352 | -int ZEXPORT gzputs(file, str) | |
| 361 | +int ZEXPORT gzputs(file, s) | |
| 353 | 362 | gzFile file; |
| 354 | - const char *str; | |
| 363 | + const char *s; | |
| 355 | 364 | { |
| 356 | - int ret; | |
| 357 | - z_size_t len; | |
| 365 | + z_size_t len, put; | |
| 358 | 366 | gz_statep state; |
| 359 | 367 | |
| 360 | 368 | /* get internal structure */ |
| 361 | 369 | if (file == NULL) |
| 362 | 370 | return -1; |
| @@ -365,13 +373,17 @@ | ||
| 365 | 373 | /* check that we're writing and that there's no error */ |
| 366 | 374 | if (state->mode != GZ_WRITE || state->err != Z_OK) |
| 367 | 375 | return -1; |
| 368 | 376 | |
| 369 | 377 | /* write string */ |
| 370 | - len = strlen(str); | |
| 371 | - ret = gz_write(state, str, len); | |
| 372 | - return ret == 0 && len != 0 ? -1 : ret; | |
| 378 | + len = strlen(s); | |
| 379 | + if ((int)len < 0 || (unsigned)len != len) { | |
| 380 | + gz_error(state, Z_STREAM_ERROR, "string length does not fit in int"); | |
| 381 | + return -1; | |
| 382 | + } | |
| 383 | + put = gz_write(state, s, len); | |
| 384 | + return put < len ? -1 : (int)len; | |
| 373 | 385 | } |
| 374 | 386 | |
| 375 | 387 | #if defined(STDC) || defined(Z_HAVE_STDARG_H) |
| 376 | 388 | #include <stdarg.h> |
| 377 | 389 | |
| @@ -439,11 +451,11 @@ | ||
| 439 | 451 | if (strm->avail_in >= state->size) { |
| 440 | 452 | left = strm->avail_in - state->size; |
| 441 | 453 | strm->avail_in = state->size; |
| 442 | 454 | if (gz_comp(state, Z_NO_FLUSH) == -1) |
| 443 | 455 | return state->err; |
| 444 | - memcpy(state->in, state->in + state->size, left); | |
| 456 | + memmove(state->in, state->in + state->size, left); | |
| 445 | 457 | strm->next_in = state->in; |
| 446 | 458 | strm->avail_in = left; |
| 447 | 459 | } |
| 448 | 460 | return len; |
| 449 | 461 | } |
| @@ -538,11 +550,11 @@ | ||
| 538 | 550 | if (strm->avail_in >= state->size) { |
| 539 | 551 | left = strm->avail_in - state->size; |
| 540 | 552 | strm->avail_in = state->size; |
| 541 | 553 | if (gz_comp(state, Z_NO_FLUSH) == -1) |
| 542 | 554 | return state->err; |
| 543 | - memcpy(state->in, state->in + state->size, left); | |
| 555 | + memmove(state->in, state->in + state->size, left); | |
| 544 | 556 | strm->next_in = state->in; |
| 545 | 557 | strm->avail_in = left; |
| 546 | 558 | } |
| 547 | 559 | return (int)len; |
| 548 | 560 | } |
| 549 | 561 |
| --- compat/zlib/gzwrite.c | |
| +++ compat/zlib/gzwrite.c | |
| @@ -1,7 +1,7 @@ | |
| 1 | /* gzwrite.c -- zlib functions for writing gzip files |
| 2 | * Copyright (C) 2004-2017 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | #include "gzguts.h" |
| 7 | |
| @@ -94,10 +94,19 @@ | |
| 94 | strm->avail_in -= (unsigned)writ; |
| 95 | strm->next_in += writ; |
| 96 | } |
| 97 | return 0; |
| 98 | } |
| 99 | |
| 100 | /* run deflate() on provided input until it produces no more output */ |
| 101 | ret = Z_OK; |
| 102 | do { |
| 103 | /* write out current buffer contents if full, or if flushing, but if |
| @@ -132,11 +141,11 @@ | |
| 132 | have -= strm->avail_out; |
| 133 | } while (have); |
| 134 | |
| 135 | /* if that completed a deflate stream, allow another to start */ |
| 136 | if (flush == Z_FINISH) |
| 137 | deflateReset(strm); |
| 138 | |
| 139 | /* all done, no errors */ |
| 140 | return 0; |
| 141 | } |
| 142 | |
| @@ -207,11 +216,11 @@ | |
| 207 | state->strm.next_in = state->in; |
| 208 | have = (unsigned)((state->strm.next_in + state->strm.avail_in) - |
| 209 | state->in); |
| 210 | copy = state->size - have; |
| 211 | if (copy > len) |
| 212 | copy = len; |
| 213 | memcpy(state->in + have, buf, copy); |
| 214 | state->strm.avail_in += copy; |
| 215 | state->x.pos += copy; |
| 216 | buf = (const char *)buf + copy; |
| 217 | len -= copy; |
| @@ -227,11 +236,11 @@ | |
| 227 | /* directly compress user buffer to file */ |
| 228 | state->strm.next_in = (z_const Bytef *)buf; |
| 229 | do { |
| 230 | unsigned n = (unsigned)-1; |
| 231 | if (n > len) |
| 232 | n = len; |
| 233 | state->strm.avail_in = n; |
| 234 | state->x.pos += n; |
| 235 | if (gz_comp(state, Z_NO_FLUSH) == -1) |
| 236 | return 0; |
| 237 | len -= n; |
| @@ -347,16 +356,15 @@ | |
| 347 | return -1; |
| 348 | return c & 0xff; |
| 349 | } |
| 350 | |
| 351 | /* -- see zlib.h -- */ |
| 352 | int ZEXPORT gzputs(file, str) |
| 353 | gzFile file; |
| 354 | const char *str; |
| 355 | { |
| 356 | int ret; |
| 357 | z_size_t len; |
| 358 | gz_statep state; |
| 359 | |
| 360 | /* get internal structure */ |
| 361 | if (file == NULL) |
| 362 | return -1; |
| @@ -365,13 +373,17 @@ | |
| 365 | /* check that we're writing and that there's no error */ |
| 366 | if (state->mode != GZ_WRITE || state->err != Z_OK) |
| 367 | return -1; |
| 368 | |
| 369 | /* write string */ |
| 370 | len = strlen(str); |
| 371 | ret = gz_write(state, str, len); |
| 372 | return ret == 0 && len != 0 ? -1 : ret; |
| 373 | } |
| 374 | |
| 375 | #if defined(STDC) || defined(Z_HAVE_STDARG_H) |
| 376 | #include <stdarg.h> |
| 377 | |
| @@ -439,11 +451,11 @@ | |
| 439 | if (strm->avail_in >= state->size) { |
| 440 | left = strm->avail_in - state->size; |
| 441 | strm->avail_in = state->size; |
| 442 | if (gz_comp(state, Z_NO_FLUSH) == -1) |
| 443 | return state->err; |
| 444 | memcpy(state->in, state->in + state->size, left); |
| 445 | strm->next_in = state->in; |
| 446 | strm->avail_in = left; |
| 447 | } |
| 448 | return len; |
| 449 | } |
| @@ -538,11 +550,11 @@ | |
| 538 | if (strm->avail_in >= state->size) { |
| 539 | left = strm->avail_in - state->size; |
| 540 | strm->avail_in = state->size; |
| 541 | if (gz_comp(state, Z_NO_FLUSH) == -1) |
| 542 | return state->err; |
| 543 | memcpy(state->in, state->in + state->size, left); |
| 544 | strm->next_in = state->in; |
| 545 | strm->avail_in = left; |
| 546 | } |
| 547 | return (int)len; |
| 548 | } |
| 549 |
| --- compat/zlib/gzwrite.c | |
| +++ compat/zlib/gzwrite.c | |
| @@ -1,7 +1,7 @@ | |
| 1 | /* gzwrite.c -- zlib functions for writing gzip files |
| 2 | * Copyright (C) 2004-2019 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | #include "gzguts.h" |
| 7 | |
| @@ -94,10 +94,19 @@ | |
| 94 | strm->avail_in -= (unsigned)writ; |
| 95 | strm->next_in += writ; |
| 96 | } |
| 97 | return 0; |
| 98 | } |
| 99 | |
| 100 | /* check for a pending reset */ |
| 101 | if (state->reset) { |
| 102 | /* don't start a new gzip member unless there is data to write */ |
| 103 | if (strm->avail_in == 0) |
| 104 | return 0; |
| 105 | deflateReset(strm); |
| 106 | state->reset = 0; |
| 107 | } |
| 108 | |
| 109 | /* run deflate() on provided input until it produces no more output */ |
| 110 | ret = Z_OK; |
| 111 | do { |
| 112 | /* write out current buffer contents if full, or if flushing, but if |
| @@ -132,11 +141,11 @@ | |
| 141 | have -= strm->avail_out; |
| 142 | } while (have); |
| 143 | |
| 144 | /* if that completed a deflate stream, allow another to start */ |
| 145 | if (flush == Z_FINISH) |
| 146 | state->reset = 1; |
| 147 | |
| 148 | /* all done, no errors */ |
| 149 | return 0; |
| 150 | } |
| 151 | |
| @@ -207,11 +216,11 @@ | |
| 216 | state->strm.next_in = state->in; |
| 217 | have = (unsigned)((state->strm.next_in + state->strm.avail_in) - |
| 218 | state->in); |
| 219 | copy = state->size - have; |
| 220 | if (copy > len) |
| 221 | copy = (unsigned)len; |
| 222 | memcpy(state->in + have, buf, copy); |
| 223 | state->strm.avail_in += copy; |
| 224 | state->x.pos += copy; |
| 225 | buf = (const char *)buf + copy; |
| 226 | len -= copy; |
| @@ -227,11 +236,11 @@ | |
| 236 | /* directly compress user buffer to file */ |
| 237 | state->strm.next_in = (z_const Bytef *)buf; |
| 238 | do { |
| 239 | unsigned n = (unsigned)-1; |
| 240 | if (n > len) |
| 241 | n = (unsigned)len; |
| 242 | state->strm.avail_in = n; |
| 243 | state->x.pos += n; |
| 244 | if (gz_comp(state, Z_NO_FLUSH) == -1) |
| 245 | return 0; |
| 246 | len -= n; |
| @@ -347,16 +356,15 @@ | |
| 356 | return -1; |
| 357 | return c & 0xff; |
| 358 | } |
| 359 | |
| 360 | /* -- see zlib.h -- */ |
| 361 | int ZEXPORT gzputs(file, s) |
| 362 | gzFile file; |
| 363 | const char *s; |
| 364 | { |
| 365 | z_size_t len, put; |
| 366 | gz_statep state; |
| 367 | |
| 368 | /* get internal structure */ |
| 369 | if (file == NULL) |
| 370 | return -1; |
| @@ -365,13 +373,17 @@ | |
| 373 | /* check that we're writing and that there's no error */ |
| 374 | if (state->mode != GZ_WRITE || state->err != Z_OK) |
| 375 | return -1; |
| 376 | |
| 377 | /* write string */ |
| 378 | len = strlen(s); |
| 379 | if ((int)len < 0 || (unsigned)len != len) { |
| 380 | gz_error(state, Z_STREAM_ERROR, "string length does not fit in int"); |
| 381 | return -1; |
| 382 | } |
| 383 | put = gz_write(state, s, len); |
| 384 | return put < len ? -1 : (int)len; |
| 385 | } |
| 386 | |
| 387 | #if defined(STDC) || defined(Z_HAVE_STDARG_H) |
| 388 | #include <stdarg.h> |
| 389 | |
| @@ -439,11 +451,11 @@ | |
| 451 | if (strm->avail_in >= state->size) { |
| 452 | left = strm->avail_in - state->size; |
| 453 | strm->avail_in = state->size; |
| 454 | if (gz_comp(state, Z_NO_FLUSH) == -1) |
| 455 | return state->err; |
| 456 | memmove(state->in, state->in + state->size, left); |
| 457 | strm->next_in = state->in; |
| 458 | strm->avail_in = left; |
| 459 | } |
| 460 | return len; |
| 461 | } |
| @@ -538,11 +550,11 @@ | |
| 550 | if (strm->avail_in >= state->size) { |
| 551 | left = strm->avail_in - state->size; |
| 552 | strm->avail_in = state->size; |
| 553 | if (gz_comp(state, Z_NO_FLUSH) == -1) |
| 554 | return state->err; |
| 555 | memmove(state->in, state->in + state->size, left); |
| 556 | strm->next_in = state->in; |
| 557 | strm->avail_in = left; |
| 558 | } |
| 559 | return (int)len; |
| 560 | } |
| 561 |
+2
-1
| --- compat/zlib/infback.c | ||
| +++ compat/zlib/infback.c | ||
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | /* infback.c -- inflate using a call-back interface |
| 2 | - * Copyright (C) 1995-2016 Mark Adler | |
| 2 | + * Copyright (C) 1995-2022 Mark Adler | |
| 3 | 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | 4 | */ |
| 5 | 5 | |
| 6 | 6 | /* |
| 7 | 7 | This code is largely copied from inflate.c. Normally either infback.o or |
| @@ -475,10 +475,11 @@ | ||
| 475 | 475 | state->mode = BAD; |
| 476 | 476 | break; |
| 477 | 477 | } |
| 478 | 478 | Tracev((stderr, "inflate: codes ok\n")); |
| 479 | 479 | state->mode = LEN; |
| 480 | + /* fallthrough */ | |
| 480 | 481 | |
| 481 | 482 | case LEN: |
| 482 | 483 | /* use inflate_fast() if we have enough input and output */ |
| 483 | 484 | if (have >= 6 && left >= 258) { |
| 484 | 485 | RESTORE(); |
| 485 | 486 |
| --- compat/zlib/infback.c | |
| +++ compat/zlib/infback.c | |
| @@ -1,7 +1,7 @@ | |
| 1 | /* infback.c -- inflate using a call-back interface |
| 2 | * Copyright (C) 1995-2016 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | /* |
| 7 | This code is largely copied from inflate.c. Normally either infback.o or |
| @@ -475,10 +475,11 @@ | |
| 475 | state->mode = BAD; |
| 476 | break; |
| 477 | } |
| 478 | Tracev((stderr, "inflate: codes ok\n")); |
| 479 | state->mode = LEN; |
| 480 | |
| 481 | case LEN: |
| 482 | /* use inflate_fast() if we have enough input and output */ |
| 483 | if (have >= 6 && left >= 258) { |
| 484 | RESTORE(); |
| 485 |
| --- compat/zlib/infback.c | |
| +++ compat/zlib/infback.c | |
| @@ -1,7 +1,7 @@ | |
| 1 | /* infback.c -- inflate using a call-back interface |
| 2 | * Copyright (C) 1995-2022 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | /* |
| 7 | This code is largely copied from inflate.c. Normally either infback.o or |
| @@ -475,10 +475,11 @@ | |
| 475 | state->mode = BAD; |
| 476 | break; |
| 477 | } |
| 478 | Tracev((stderr, "inflate: codes ok\n")); |
| 479 | state->mode = LEN; |
| 480 | /* fallthrough */ |
| 481 | |
| 482 | case LEN: |
| 483 | /* use inflate_fast() if we have enough input and output */ |
| 484 | if (have >= 6 && left >= 258) { |
| 485 | RESTORE(); |
| 486 |
+14
-14
| --- compat/zlib/inffast.c | ||
| +++ compat/zlib/inffast.c | ||
| @@ -68,11 +68,11 @@ | ||
| 68 | 68 | unsigned bits; /* local strm->bits */ |
| 69 | 69 | code const FAR *lcode; /* local strm->lencode */ |
| 70 | 70 | code const FAR *dcode; /* local strm->distcode */ |
| 71 | 71 | unsigned lmask; /* mask for first level of length codes */ |
| 72 | 72 | unsigned dmask; /* mask for first level of distance codes */ |
| 73 | - code here; /* retrieved table entry */ | |
| 73 | + code const *here; /* retrieved table entry */ | |
| 74 | 74 | unsigned op; /* code bits, operation, extra bits, or */ |
| 75 | 75 | /* window position, window bytes to copy */ |
| 76 | 76 | unsigned len; /* match length, unused bytes */ |
| 77 | 77 | unsigned dist; /* match distance */ |
| 78 | 78 | unsigned char FAR *from; /* where to copy match from */ |
| @@ -105,24 +105,24 @@ | ||
| 105 | 105 | hold += (unsigned long)(*in++) << bits; |
| 106 | 106 | bits += 8; |
| 107 | 107 | hold += (unsigned long)(*in++) << bits; |
| 108 | 108 | bits += 8; |
| 109 | 109 | } |
| 110 | - here = lcode[hold & lmask]; | |
| 110 | + here = lcode + (hold & lmask); | |
| 111 | 111 | dolen: |
| 112 | - op = (unsigned)(here.bits); | |
| 112 | + op = (unsigned)(here->bits); | |
| 113 | 113 | hold >>= op; |
| 114 | 114 | bits -= op; |
| 115 | - op = (unsigned)(here.op); | |
| 115 | + op = (unsigned)(here->op); | |
| 116 | 116 | if (op == 0) { /* literal */ |
| 117 | - Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? | |
| 117 | + Tracevv((stderr, here->val >= 0x20 && here->val < 0x7f ? | |
| 118 | 118 | "inflate: literal '%c'\n" : |
| 119 | - "inflate: literal 0x%02x\n", here.val)); | |
| 120 | - *out++ = (unsigned char)(here.val); | |
| 119 | + "inflate: literal 0x%02x\n", here->val)); | |
| 120 | + *out++ = (unsigned char)(here->val); | |
| 121 | 121 | } |
| 122 | 122 | else if (op & 16) { /* length base */ |
| 123 | - len = (unsigned)(here.val); | |
| 123 | + len = (unsigned)(here->val); | |
| 124 | 124 | op &= 15; /* number of extra bits */ |
| 125 | 125 | if (op) { |
| 126 | 126 | if (bits < op) { |
| 127 | 127 | hold += (unsigned long)(*in++) << bits; |
| 128 | 128 | bits += 8; |
| @@ -136,18 +136,18 @@ | ||
| 136 | 136 | hold += (unsigned long)(*in++) << bits; |
| 137 | 137 | bits += 8; |
| 138 | 138 | hold += (unsigned long)(*in++) << bits; |
| 139 | 139 | bits += 8; |
| 140 | 140 | } |
| 141 | - here = dcode[hold & dmask]; | |
| 141 | + here = dcode + (hold & dmask); | |
| 142 | 142 | dodist: |
| 143 | - op = (unsigned)(here.bits); | |
| 143 | + op = (unsigned)(here->bits); | |
| 144 | 144 | hold >>= op; |
| 145 | 145 | bits -= op; |
| 146 | - op = (unsigned)(here.op); | |
| 146 | + op = (unsigned)(here->op); | |
| 147 | 147 | if (op & 16) { /* distance base */ |
| 148 | - dist = (unsigned)(here.val); | |
| 148 | + dist = (unsigned)(here->val); | |
| 149 | 149 | op &= 15; /* number of extra bits */ |
| 150 | 150 | if (bits < op) { |
| 151 | 151 | hold += (unsigned long)(*in++) << bits; |
| 152 | 152 | bits += 8; |
| 153 | 153 | if (bits < op) { |
| @@ -262,21 +262,21 @@ | ||
| 262 | 262 | *out++ = *from++; |
| 263 | 263 | } |
| 264 | 264 | } |
| 265 | 265 | } |
| 266 | 266 | else if ((op & 64) == 0) { /* 2nd level distance code */ |
| 267 | - here = dcode[here.val + (hold & ((1U << op) - 1))]; | |
| 267 | + here = dcode + here->val + (hold & ((1U << op) - 1)); | |
| 268 | 268 | goto dodist; |
| 269 | 269 | } |
| 270 | 270 | else { |
| 271 | 271 | strm->msg = (char *)"invalid distance code"; |
| 272 | 272 | state->mode = BAD; |
| 273 | 273 | break; |
| 274 | 274 | } |
| 275 | 275 | } |
| 276 | 276 | else if ((op & 64) == 0) { /* 2nd level length code */ |
| 277 | - here = lcode[here.val + (hold & ((1U << op) - 1))]; | |
| 277 | + here = lcode + here->val + (hold & ((1U << op) - 1)); | |
| 278 | 278 | goto dolen; |
| 279 | 279 | } |
| 280 | 280 | else if (op & 32) { /* end-of-block */ |
| 281 | 281 | Tracevv((stderr, "inflate: end of block\n")); |
| 282 | 282 | state->mode = TYPE; |
| 283 | 283 |
| --- compat/zlib/inffast.c | |
| +++ compat/zlib/inffast.c | |
| @@ -68,11 +68,11 @@ | |
| 68 | unsigned bits; /* local strm->bits */ |
| 69 | code const FAR *lcode; /* local strm->lencode */ |
| 70 | code const FAR *dcode; /* local strm->distcode */ |
| 71 | unsigned lmask; /* mask for first level of length codes */ |
| 72 | unsigned dmask; /* mask for first level of distance codes */ |
| 73 | code here; /* retrieved table entry */ |
| 74 | unsigned op; /* code bits, operation, extra bits, or */ |
| 75 | /* window position, window bytes to copy */ |
| 76 | unsigned len; /* match length, unused bytes */ |
| 77 | unsigned dist; /* match distance */ |
| 78 | unsigned char FAR *from; /* where to copy match from */ |
| @@ -105,24 +105,24 @@ | |
| 105 | hold += (unsigned long)(*in++) << bits; |
| 106 | bits += 8; |
| 107 | hold += (unsigned long)(*in++) << bits; |
| 108 | bits += 8; |
| 109 | } |
| 110 | here = lcode[hold & lmask]; |
| 111 | dolen: |
| 112 | op = (unsigned)(here.bits); |
| 113 | hold >>= op; |
| 114 | bits -= op; |
| 115 | op = (unsigned)(here.op); |
| 116 | if (op == 0) { /* literal */ |
| 117 | Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? |
| 118 | "inflate: literal '%c'\n" : |
| 119 | "inflate: literal 0x%02x\n", here.val)); |
| 120 | *out++ = (unsigned char)(here.val); |
| 121 | } |
| 122 | else if (op & 16) { /* length base */ |
| 123 | len = (unsigned)(here.val); |
| 124 | op &= 15; /* number of extra bits */ |
| 125 | if (op) { |
| 126 | if (bits < op) { |
| 127 | hold += (unsigned long)(*in++) << bits; |
| 128 | bits += 8; |
| @@ -136,18 +136,18 @@ | |
| 136 | hold += (unsigned long)(*in++) << bits; |
| 137 | bits += 8; |
| 138 | hold += (unsigned long)(*in++) << bits; |
| 139 | bits += 8; |
| 140 | } |
| 141 | here = dcode[hold & dmask]; |
| 142 | dodist: |
| 143 | op = (unsigned)(here.bits); |
| 144 | hold >>= op; |
| 145 | bits -= op; |
| 146 | op = (unsigned)(here.op); |
| 147 | if (op & 16) { /* distance base */ |
| 148 | dist = (unsigned)(here.val); |
| 149 | op &= 15; /* number of extra bits */ |
| 150 | if (bits < op) { |
| 151 | hold += (unsigned long)(*in++) << bits; |
| 152 | bits += 8; |
| 153 | if (bits < op) { |
| @@ -262,21 +262,21 @@ | |
| 262 | *out++ = *from++; |
| 263 | } |
| 264 | } |
| 265 | } |
| 266 | else if ((op & 64) == 0) { /* 2nd level distance code */ |
| 267 | here = dcode[here.val + (hold & ((1U << op) - 1))]; |
| 268 | goto dodist; |
| 269 | } |
| 270 | else { |
| 271 | strm->msg = (char *)"invalid distance code"; |
| 272 | state->mode = BAD; |
| 273 | break; |
| 274 | } |
| 275 | } |
| 276 | else if ((op & 64) == 0) { /* 2nd level length code */ |
| 277 | here = lcode[here.val + (hold & ((1U << op) - 1))]; |
| 278 | goto dolen; |
| 279 | } |
| 280 | else if (op & 32) { /* end-of-block */ |
| 281 | Tracevv((stderr, "inflate: end of block\n")); |
| 282 | state->mode = TYPE; |
| 283 |
| --- compat/zlib/inffast.c | |
| +++ compat/zlib/inffast.c | |
| @@ -68,11 +68,11 @@ | |
| 68 | unsigned bits; /* local strm->bits */ |
| 69 | code const FAR *lcode; /* local strm->lencode */ |
| 70 | code const FAR *dcode; /* local strm->distcode */ |
| 71 | unsigned lmask; /* mask for first level of length codes */ |
| 72 | unsigned dmask; /* mask for first level of distance codes */ |
| 73 | code const *here; /* retrieved table entry */ |
| 74 | unsigned op; /* code bits, operation, extra bits, or */ |
| 75 | /* window position, window bytes to copy */ |
| 76 | unsigned len; /* match length, unused bytes */ |
| 77 | unsigned dist; /* match distance */ |
| 78 | unsigned char FAR *from; /* where to copy match from */ |
| @@ -105,24 +105,24 @@ | |
| 105 | hold += (unsigned long)(*in++) << bits; |
| 106 | bits += 8; |
| 107 | hold += (unsigned long)(*in++) << bits; |
| 108 | bits += 8; |
| 109 | } |
| 110 | here = lcode + (hold & lmask); |
| 111 | dolen: |
| 112 | op = (unsigned)(here->bits); |
| 113 | hold >>= op; |
| 114 | bits -= op; |
| 115 | op = (unsigned)(here->op); |
| 116 | if (op == 0) { /* literal */ |
| 117 | Tracevv((stderr, here->val >= 0x20 && here->val < 0x7f ? |
| 118 | "inflate: literal '%c'\n" : |
| 119 | "inflate: literal 0x%02x\n", here->val)); |
| 120 | *out++ = (unsigned char)(here->val); |
| 121 | } |
| 122 | else if (op & 16) { /* length base */ |
| 123 | len = (unsigned)(here->val); |
| 124 | op &= 15; /* number of extra bits */ |
| 125 | if (op) { |
| 126 | if (bits < op) { |
| 127 | hold += (unsigned long)(*in++) << bits; |
| 128 | bits += 8; |
| @@ -136,18 +136,18 @@ | |
| 136 | hold += (unsigned long)(*in++) << bits; |
| 137 | bits += 8; |
| 138 | hold += (unsigned long)(*in++) << bits; |
| 139 | bits += 8; |
| 140 | } |
| 141 | here = dcode + (hold & dmask); |
| 142 | dodist: |
| 143 | op = (unsigned)(here->bits); |
| 144 | hold >>= op; |
| 145 | bits -= op; |
| 146 | op = (unsigned)(here->op); |
| 147 | if (op & 16) { /* distance base */ |
| 148 | dist = (unsigned)(here->val); |
| 149 | op &= 15; /* number of extra bits */ |
| 150 | if (bits < op) { |
| 151 | hold += (unsigned long)(*in++) << bits; |
| 152 | bits += 8; |
| 153 | if (bits < op) { |
| @@ -262,21 +262,21 @@ | |
| 262 | *out++ = *from++; |
| 263 | } |
| 264 | } |
| 265 | } |
| 266 | else if ((op & 64) == 0) { /* 2nd level distance code */ |
| 267 | here = dcode + here->val + (hold & ((1U << op) - 1)); |
| 268 | goto dodist; |
| 269 | } |
| 270 | else { |
| 271 | strm->msg = (char *)"invalid distance code"; |
| 272 | state->mode = BAD; |
| 273 | break; |
| 274 | } |
| 275 | } |
| 276 | else if ((op & 64) == 0) { /* 2nd level length code */ |
| 277 | here = lcode + here->val + (hold & ((1U << op) - 1)); |
| 278 | goto dolen; |
| 279 | } |
| 280 | else if (op & 32) { /* end-of-block */ |
| 281 | Tracevv((stderr, "inflate: end of block\n")); |
| 282 | state->mode = TYPE; |
| 283 |
+39
-8
| --- compat/zlib/inflate.c | ||
| +++ compat/zlib/inflate.c | ||
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | /* inflate.c -- zlib decompression |
| 2 | - * Copyright (C) 1995-2016 Mark Adler | |
| 2 | + * Copyright (C) 1995-2022 Mark Adler | |
| 3 | 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | 4 | */ |
| 5 | 5 | |
| 6 | 6 | /* |
| 7 | 7 | * Change history: |
| @@ -128,10 +128,11 @@ | ||
| 128 | 128 | if (state->wrap) /* to support ill-conceived Java test suite */ |
| 129 | 129 | strm->adler = state->wrap & 1; |
| 130 | 130 | state->mode = HEAD; |
| 131 | 131 | state->last = 0; |
| 132 | 132 | state->havedict = 0; |
| 133 | + state->flags = -1; | |
| 133 | 134 | state->dmax = 32768U; |
| 134 | 135 | state->head = Z_NULL; |
| 135 | 136 | state->hold = 0; |
| 136 | 137 | state->bits = 0; |
| 137 | 138 | state->lencode = state->distcode = state->next = state->codes; |
| @@ -445,14 +446,14 @@ | ||
| 445 | 446 | |
| 446 | 447 | /* Macros for inflate(): */ |
| 447 | 448 | |
| 448 | 449 | /* check function to use adler32() for zlib or crc32() for gzip */ |
| 449 | 450 | #ifdef GUNZIP |
| 450 | -# define UPDATE(check, buf, len) \ | |
| 451 | +# define UPDATE_CHECK(check, buf, len) \ | |
| 451 | 452 | (state->flags ? crc32(check, buf, len) : adler32(check, buf, len)) |
| 452 | 453 | #else |
| 453 | -# define UPDATE(check, buf, len) adler32(check, buf, len) | |
| 454 | +# define UPDATE_CHECK(check, buf, len) adler32(check, buf, len) | |
| 454 | 455 | #endif |
| 455 | 456 | |
| 456 | 457 | /* check macros for header crc */ |
| 457 | 458 | #ifdef GUNZIP |
| 458 | 459 | # define CRC2(check, word) \ |
| @@ -668,11 +669,10 @@ | ||
| 668 | 669 | CRC2(state->check, hold); |
| 669 | 670 | INITBITS(); |
| 670 | 671 | state->mode = FLAGS; |
| 671 | 672 | break; |
| 672 | 673 | } |
| 673 | - state->flags = 0; /* expect zlib header */ | |
| 674 | 674 | if (state->head != Z_NULL) |
| 675 | 675 | state->head->done = -1; |
| 676 | 676 | if (!(state->wrap & 1) || /* check if zlib header allowed */ |
| 677 | 677 | #else |
| 678 | 678 | if ( |
| @@ -695,10 +695,11 @@ | ||
| 695 | 695 | strm->msg = (char *)"invalid window size"; |
| 696 | 696 | state->mode = BAD; |
| 697 | 697 | break; |
| 698 | 698 | } |
| 699 | 699 | state->dmax = 1U << len; |
| 700 | + state->flags = 0; /* indicate zlib header */ | |
| 700 | 701 | Tracev((stderr, "inflate: zlib header ok\n")); |
| 701 | 702 | strm->adler = state->check = adler32(0L, Z_NULL, 0); |
| 702 | 703 | state->mode = hold & 0x200 ? DICTID : TYPE; |
| 703 | 704 | INITBITS(); |
| 704 | 705 | break; |
| @@ -720,18 +721,20 @@ | ||
| 720 | 721 | state->head->text = (int)((hold >> 8) & 1); |
| 721 | 722 | if ((state->flags & 0x0200) && (state->wrap & 4)) |
| 722 | 723 | CRC2(state->check, hold); |
| 723 | 724 | INITBITS(); |
| 724 | 725 | state->mode = TIME; |
| 726 | + /* fallthrough */ | |
| 725 | 727 | case TIME: |
| 726 | 728 | NEEDBITS(32); |
| 727 | 729 | if (state->head != Z_NULL) |
| 728 | 730 | state->head->time = hold; |
| 729 | 731 | if ((state->flags & 0x0200) && (state->wrap & 4)) |
| 730 | 732 | CRC4(state->check, hold); |
| 731 | 733 | INITBITS(); |
| 732 | 734 | state->mode = OS; |
| 735 | + /* fallthrough */ | |
| 733 | 736 | case OS: |
| 734 | 737 | NEEDBITS(16); |
| 735 | 738 | if (state->head != Z_NULL) { |
| 736 | 739 | state->head->xflags = (int)(hold & 0xff); |
| 737 | 740 | state->head->os = (int)(hold >> 8); |
| @@ -738,10 +741,11 @@ | ||
| 738 | 741 | } |
| 739 | 742 | if ((state->flags & 0x0200) && (state->wrap & 4)) |
| 740 | 743 | CRC2(state->check, hold); |
| 741 | 744 | INITBITS(); |
| 742 | 745 | state->mode = EXLEN; |
| 746 | + /* fallthrough */ | |
| 743 | 747 | case EXLEN: |
| 744 | 748 | if (state->flags & 0x0400) { |
| 745 | 749 | NEEDBITS(16); |
| 746 | 750 | state->length = (unsigned)(hold); |
| 747 | 751 | if (state->head != Z_NULL) |
| @@ -751,10 +755,11 @@ | ||
| 751 | 755 | INITBITS(); |
| 752 | 756 | } |
| 753 | 757 | else if (state->head != Z_NULL) |
| 754 | 758 | state->head->extra = Z_NULL; |
| 755 | 759 | state->mode = EXTRA; |
| 760 | + /* fallthrough */ | |
| 756 | 761 | case EXTRA: |
| 757 | 762 | if (state->flags & 0x0400) { |
| 758 | 763 | copy = state->length; |
| 759 | 764 | if (copy > have) copy = have; |
| 760 | 765 | if (copy) { |
| @@ -773,10 +778,11 @@ | ||
| 773 | 778 | } |
| 774 | 779 | if (state->length) goto inf_leave; |
| 775 | 780 | } |
| 776 | 781 | state->length = 0; |
| 777 | 782 | state->mode = NAME; |
| 783 | + /* fallthrough */ | |
| 778 | 784 | case NAME: |
| 779 | 785 | if (state->flags & 0x0800) { |
| 780 | 786 | if (have == 0) goto inf_leave; |
| 781 | 787 | copy = 0; |
| 782 | 788 | do { |
| @@ -794,10 +800,11 @@ | ||
| 794 | 800 | } |
| 795 | 801 | else if (state->head != Z_NULL) |
| 796 | 802 | state->head->name = Z_NULL; |
| 797 | 803 | state->length = 0; |
| 798 | 804 | state->mode = COMMENT; |
| 805 | + /* fallthrough */ | |
| 799 | 806 | case COMMENT: |
| 800 | 807 | if (state->flags & 0x1000) { |
| 801 | 808 | if (have == 0) goto inf_leave; |
| 802 | 809 | copy = 0; |
| 803 | 810 | do { |
| @@ -814,10 +821,11 @@ | ||
| 814 | 821 | if (len) goto inf_leave; |
| 815 | 822 | } |
| 816 | 823 | else if (state->head != Z_NULL) |
| 817 | 824 | state->head->comment = Z_NULL; |
| 818 | 825 | state->mode = HCRC; |
| 826 | + /* fallthrough */ | |
| 819 | 827 | case HCRC: |
| 820 | 828 | if (state->flags & 0x0200) { |
| 821 | 829 | NEEDBITS(16); |
| 822 | 830 | if ((state->wrap & 4) && hold != (state->check & 0xffff)) { |
| 823 | 831 | strm->msg = (char *)"header crc mismatch"; |
| @@ -837,19 +845,22 @@ | ||
| 837 | 845 | case DICTID: |
| 838 | 846 | NEEDBITS(32); |
| 839 | 847 | strm->adler = state->check = ZSWAP32(hold); |
| 840 | 848 | INITBITS(); |
| 841 | 849 | state->mode = DICT; |
| 850 | + /* fallthrough */ | |
| 842 | 851 | case DICT: |
| 843 | 852 | if (state->havedict == 0) { |
| 844 | 853 | RESTORE(); |
| 845 | 854 | return Z_NEED_DICT; |
| 846 | 855 | } |
| 847 | 856 | strm->adler = state->check = adler32(0L, Z_NULL, 0); |
| 848 | 857 | state->mode = TYPE; |
| 858 | + /* fallthrough */ | |
| 849 | 859 | case TYPE: |
| 850 | 860 | if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave; |
| 861 | + /* fallthrough */ | |
| 851 | 862 | case TYPEDO: |
| 852 | 863 | if (state->last) { |
| 853 | 864 | BYTEBITS(); |
| 854 | 865 | state->mode = CHECK; |
| 855 | 866 | break; |
| @@ -896,12 +907,14 @@ | ||
| 896 | 907 | Tracev((stderr, "inflate: stored length %u\n", |
| 897 | 908 | state->length)); |
| 898 | 909 | INITBITS(); |
| 899 | 910 | state->mode = COPY_; |
| 900 | 911 | if (flush == Z_TREES) goto inf_leave; |
| 912 | + /* fallthrough */ | |
| 901 | 913 | case COPY_: |
| 902 | 914 | state->mode = COPY; |
| 915 | + /* fallthrough */ | |
| 903 | 916 | case COPY: |
| 904 | 917 | copy = state->length; |
| 905 | 918 | if (copy) { |
| 906 | 919 | if (copy > have) copy = have; |
| 907 | 920 | if (copy > left) copy = left; |
| @@ -933,10 +946,11 @@ | ||
| 933 | 946 | } |
| 934 | 947 | #endif |
| 935 | 948 | Tracev((stderr, "inflate: table sizes ok\n")); |
| 936 | 949 | state->have = 0; |
| 937 | 950 | state->mode = LENLENS; |
| 951 | + /* fallthrough */ | |
| 938 | 952 | case LENLENS: |
| 939 | 953 | while (state->have < state->ncode) { |
| 940 | 954 | NEEDBITS(3); |
| 941 | 955 | state->lens[order[state->have++]] = (unsigned short)BITS(3); |
| 942 | 956 | DROPBITS(3); |
| @@ -954,10 +968,11 @@ | ||
| 954 | 968 | break; |
| 955 | 969 | } |
| 956 | 970 | Tracev((stderr, "inflate: code lengths ok\n")); |
| 957 | 971 | state->have = 0; |
| 958 | 972 | state->mode = CODELENS; |
| 973 | + /* fallthrough */ | |
| 959 | 974 | case CODELENS: |
| 960 | 975 | while (state->have < state->nlen + state->ndist) { |
| 961 | 976 | for (;;) { |
| 962 | 977 | here = state->lencode[BITS(state->lenbits)]; |
| 963 | 978 | if ((unsigned)(here.bits) <= bits) break; |
| @@ -1037,12 +1052,14 @@ | ||
| 1037 | 1052 | break; |
| 1038 | 1053 | } |
| 1039 | 1054 | Tracev((stderr, "inflate: codes ok\n")); |
| 1040 | 1055 | state->mode = LEN_; |
| 1041 | 1056 | if (flush == Z_TREES) goto inf_leave; |
| 1057 | + /* fallthrough */ | |
| 1042 | 1058 | case LEN_: |
| 1043 | 1059 | state->mode = LEN; |
| 1060 | + /* fallthrough */ | |
| 1044 | 1061 | case LEN: |
| 1045 | 1062 | if (have >= 6 && left >= 258) { |
| 1046 | 1063 | RESTORE(); |
| 1047 | 1064 | inflate_fast(strm, out); |
| 1048 | 1065 | LOAD(); |
| @@ -1088,10 +1105,11 @@ | ||
| 1088 | 1105 | state->mode = BAD; |
| 1089 | 1106 | break; |
| 1090 | 1107 | } |
| 1091 | 1108 | state->extra = (unsigned)(here.op) & 15; |
| 1092 | 1109 | state->mode = LENEXT; |
| 1110 | + /* fallthrough */ | |
| 1093 | 1111 | case LENEXT: |
| 1094 | 1112 | if (state->extra) { |
| 1095 | 1113 | NEEDBITS(state->extra); |
| 1096 | 1114 | state->length += BITS(state->extra); |
| 1097 | 1115 | DROPBITS(state->extra); |
| @@ -1098,10 +1116,11 @@ | ||
| 1098 | 1116 | state->back += state->extra; |
| 1099 | 1117 | } |
| 1100 | 1118 | Tracevv((stderr, "inflate: length %u\n", state->length)); |
| 1101 | 1119 | state->was = state->length; |
| 1102 | 1120 | state->mode = DIST; |
| 1121 | + /* fallthrough */ | |
| 1103 | 1122 | case DIST: |
| 1104 | 1123 | for (;;) { |
| 1105 | 1124 | here = state->distcode[BITS(state->distbits)]; |
| 1106 | 1125 | if ((unsigned)(here.bits) <= bits) break; |
| 1107 | 1126 | PULLBYTE(); |
| @@ -1125,10 +1144,11 @@ | ||
| 1125 | 1144 | break; |
| 1126 | 1145 | } |
| 1127 | 1146 | state->offset = (unsigned)here.val; |
| 1128 | 1147 | state->extra = (unsigned)(here.op) & 15; |
| 1129 | 1148 | state->mode = DISTEXT; |
| 1149 | + /* fallthrough */ | |
| 1130 | 1150 | case DISTEXT: |
| 1131 | 1151 | if (state->extra) { |
| 1132 | 1152 | NEEDBITS(state->extra); |
| 1133 | 1153 | state->offset += BITS(state->extra); |
| 1134 | 1154 | DROPBITS(state->extra); |
| @@ -1141,10 +1161,11 @@ | ||
| 1141 | 1161 | break; |
| 1142 | 1162 | } |
| 1143 | 1163 | #endif |
| 1144 | 1164 | Tracevv((stderr, "inflate: distance %u\n", state->offset)); |
| 1145 | 1165 | state->mode = MATCH; |
| 1166 | + /* fallthrough */ | |
| 1146 | 1167 | case MATCH: |
| 1147 | 1168 | if (left == 0) goto inf_leave; |
| 1148 | 1169 | copy = out - left; |
| 1149 | 1170 | if (state->offset > copy) { /* copy from window */ |
| 1150 | 1171 | copy = state->offset - copy; |
| @@ -1200,11 +1221,11 @@ | ||
| 1200 | 1221 | out -= left; |
| 1201 | 1222 | strm->total_out += out; |
| 1202 | 1223 | state->total += out; |
| 1203 | 1224 | if ((state->wrap & 4) && out) |
| 1204 | 1225 | strm->adler = state->check = |
| 1205 | - UPDATE(state->check, put - out, out); | |
| 1226 | + UPDATE_CHECK(state->check, put - out, out); | |
| 1206 | 1227 | out = left; |
| 1207 | 1228 | if ((state->wrap & 4) && ( |
| 1208 | 1229 | #ifdef GUNZIP |
| 1209 | 1230 | state->flags ? hold : |
| 1210 | 1231 | #endif |
| @@ -1216,32 +1237,35 @@ | ||
| 1216 | 1237 | INITBITS(); |
| 1217 | 1238 | Tracev((stderr, "inflate: check matches trailer\n")); |
| 1218 | 1239 | } |
| 1219 | 1240 | #ifdef GUNZIP |
| 1220 | 1241 | state->mode = LENGTH; |
| 1242 | + /* fallthrough */ | |
| 1221 | 1243 | case LENGTH: |
| 1222 | 1244 | if (state->wrap && state->flags) { |
| 1223 | 1245 | NEEDBITS(32); |
| 1224 | - if (hold != (state->total & 0xffffffffUL)) { | |
| 1246 | + if ((state->wrap & 4) && hold != (state->total & 0xffffffff)) { | |
| 1225 | 1247 | strm->msg = (char *)"incorrect length check"; |
| 1226 | 1248 | state->mode = BAD; |
| 1227 | 1249 | break; |
| 1228 | 1250 | } |
| 1229 | 1251 | INITBITS(); |
| 1230 | 1252 | Tracev((stderr, "inflate: length matches trailer\n")); |
| 1231 | 1253 | } |
| 1232 | 1254 | #endif |
| 1233 | 1255 | state->mode = DONE; |
| 1256 | + /* fallthrough */ | |
| 1234 | 1257 | case DONE: |
| 1235 | 1258 | ret = Z_STREAM_END; |
| 1236 | 1259 | goto inf_leave; |
| 1237 | 1260 | case BAD: |
| 1238 | 1261 | ret = Z_DATA_ERROR; |
| 1239 | 1262 | goto inf_leave; |
| 1240 | 1263 | case MEM: |
| 1241 | 1264 | return Z_MEM_ERROR; |
| 1242 | 1265 | case SYNC: |
| 1266 | + /* fallthrough */ | |
| 1243 | 1267 | default: |
| 1244 | 1268 | return Z_STREAM_ERROR; |
| 1245 | 1269 | } |
| 1246 | 1270 | |
| 1247 | 1271 | /* |
| @@ -1263,11 +1287,11 @@ | ||
| 1263 | 1287 | strm->total_in += in; |
| 1264 | 1288 | strm->total_out += out; |
| 1265 | 1289 | state->total += out; |
| 1266 | 1290 | if ((state->wrap & 4) && out) |
| 1267 | 1291 | strm->adler = state->check = |
| 1268 | - UPDATE(state->check, strm->next_out - out, out); | |
| 1292 | + UPDATE_CHECK(state->check, strm->next_out - out, out); | |
| 1269 | 1293 | strm->data_type = (int)state->bits + (state->last ? 64 : 0) + |
| 1270 | 1294 | (state->mode == TYPE ? 128 : 0) + |
| 1271 | 1295 | (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0); |
| 1272 | 1296 | if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK) |
| 1273 | 1297 | ret = Z_BUF_ERROR; |
| @@ -1399,10 +1423,11 @@ | ||
| 1399 | 1423 | |
| 1400 | 1424 | int ZEXPORT inflateSync(strm) |
| 1401 | 1425 | z_streamp strm; |
| 1402 | 1426 | { |
| 1403 | 1427 | unsigned len; /* number of bytes to look at or looked at */ |
| 1428 | + int flags; /* temporary to save header status */ | |
| 1404 | 1429 | unsigned long in, out; /* temporary to save total_in and total_out */ |
| 1405 | 1430 | unsigned char buf[4]; /* to restore bit buffer to byte string */ |
| 1406 | 1431 | struct inflate_state FAR *state; |
| 1407 | 1432 | |
| 1408 | 1433 | /* check parameters */ |
| @@ -1431,13 +1456,19 @@ | ||
| 1431 | 1456 | strm->next_in += len; |
| 1432 | 1457 | strm->total_in += len; |
| 1433 | 1458 | |
| 1434 | 1459 | /* return no joy or set up to restart inflate() on a new block */ |
| 1435 | 1460 | if (state->have != 4) return Z_DATA_ERROR; |
| 1461 | + if (state->flags == -1) | |
| 1462 | + state->wrap = 0; /* if no header yet, treat as raw */ | |
| 1463 | + else | |
| 1464 | + state->wrap &= ~4; /* no point in computing a check value now */ | |
| 1465 | + flags = state->flags; | |
| 1436 | 1466 | in = strm->total_in; out = strm->total_out; |
| 1437 | 1467 | inflateReset(strm); |
| 1438 | 1468 | strm->total_in = in; strm->total_out = out; |
| 1469 | + state->flags = flags; | |
| 1439 | 1470 | state->mode = TYPE; |
| 1440 | 1471 | return Z_OK; |
| 1441 | 1472 | } |
| 1442 | 1473 | |
| 1443 | 1474 | /* |
| @@ -1529,11 +1560,11 @@ | ||
| 1529 | 1560 | { |
| 1530 | 1561 | struct inflate_state FAR *state; |
| 1531 | 1562 | |
| 1532 | 1563 | if (inflateStateCheck(strm)) return Z_STREAM_ERROR; |
| 1533 | 1564 | state = (struct inflate_state FAR *)strm->state; |
| 1534 | - if (check) | |
| 1565 | + if (check && state->wrap) | |
| 1535 | 1566 | state->wrap |= 4; |
| 1536 | 1567 | else |
| 1537 | 1568 | state->wrap &= ~4; |
| 1538 | 1569 | return Z_OK; |
| 1539 | 1570 | } |
| 1540 | 1571 |
| --- compat/zlib/inflate.c | |
| +++ compat/zlib/inflate.c | |
| @@ -1,7 +1,7 @@ | |
| 1 | /* inflate.c -- zlib decompression |
| 2 | * Copyright (C) 1995-2016 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | /* |
| 7 | * Change history: |
| @@ -128,10 +128,11 @@ | |
| 128 | if (state->wrap) /* to support ill-conceived Java test suite */ |
| 129 | strm->adler = state->wrap & 1; |
| 130 | state->mode = HEAD; |
| 131 | state->last = 0; |
| 132 | state->havedict = 0; |
| 133 | state->dmax = 32768U; |
| 134 | state->head = Z_NULL; |
| 135 | state->hold = 0; |
| 136 | state->bits = 0; |
| 137 | state->lencode = state->distcode = state->next = state->codes; |
| @@ -445,14 +446,14 @@ | |
| 445 | |
| 446 | /* Macros for inflate(): */ |
| 447 | |
| 448 | /* check function to use adler32() for zlib or crc32() for gzip */ |
| 449 | #ifdef GUNZIP |
| 450 | # define UPDATE(check, buf, len) \ |
| 451 | (state->flags ? crc32(check, buf, len) : adler32(check, buf, len)) |
| 452 | #else |
| 453 | # define UPDATE(check, buf, len) adler32(check, buf, len) |
| 454 | #endif |
| 455 | |
| 456 | /* check macros for header crc */ |
| 457 | #ifdef GUNZIP |
| 458 | # define CRC2(check, word) \ |
| @@ -668,11 +669,10 @@ | |
| 668 | CRC2(state->check, hold); |
| 669 | INITBITS(); |
| 670 | state->mode = FLAGS; |
| 671 | break; |
| 672 | } |
| 673 | state->flags = 0; /* expect zlib header */ |
| 674 | if (state->head != Z_NULL) |
| 675 | state->head->done = -1; |
| 676 | if (!(state->wrap & 1) || /* check if zlib header allowed */ |
| 677 | #else |
| 678 | if ( |
| @@ -695,10 +695,11 @@ | |
| 695 | strm->msg = (char *)"invalid window size"; |
| 696 | state->mode = BAD; |
| 697 | break; |
| 698 | } |
| 699 | state->dmax = 1U << len; |
| 700 | Tracev((stderr, "inflate: zlib header ok\n")); |
| 701 | strm->adler = state->check = adler32(0L, Z_NULL, 0); |
| 702 | state->mode = hold & 0x200 ? DICTID : TYPE; |
| 703 | INITBITS(); |
| 704 | break; |
| @@ -720,18 +721,20 @@ | |
| 720 | state->head->text = (int)((hold >> 8) & 1); |
| 721 | if ((state->flags & 0x0200) && (state->wrap & 4)) |
| 722 | CRC2(state->check, hold); |
| 723 | INITBITS(); |
| 724 | state->mode = TIME; |
| 725 | case TIME: |
| 726 | NEEDBITS(32); |
| 727 | if (state->head != Z_NULL) |
| 728 | state->head->time = hold; |
| 729 | if ((state->flags & 0x0200) && (state->wrap & 4)) |
| 730 | CRC4(state->check, hold); |
| 731 | INITBITS(); |
| 732 | state->mode = OS; |
| 733 | case OS: |
| 734 | NEEDBITS(16); |
| 735 | if (state->head != Z_NULL) { |
| 736 | state->head->xflags = (int)(hold & 0xff); |
| 737 | state->head->os = (int)(hold >> 8); |
| @@ -738,10 +741,11 @@ | |
| 738 | } |
| 739 | if ((state->flags & 0x0200) && (state->wrap & 4)) |
| 740 | CRC2(state->check, hold); |
| 741 | INITBITS(); |
| 742 | state->mode = EXLEN; |
| 743 | case EXLEN: |
| 744 | if (state->flags & 0x0400) { |
| 745 | NEEDBITS(16); |
| 746 | state->length = (unsigned)(hold); |
| 747 | if (state->head != Z_NULL) |
| @@ -751,10 +755,11 @@ | |
| 751 | INITBITS(); |
| 752 | } |
| 753 | else if (state->head != Z_NULL) |
| 754 | state->head->extra = Z_NULL; |
| 755 | state->mode = EXTRA; |
| 756 | case EXTRA: |
| 757 | if (state->flags & 0x0400) { |
| 758 | copy = state->length; |
| 759 | if (copy > have) copy = have; |
| 760 | if (copy) { |
| @@ -773,10 +778,11 @@ | |
| 773 | } |
| 774 | if (state->length) goto inf_leave; |
| 775 | } |
| 776 | state->length = 0; |
| 777 | state->mode = NAME; |
| 778 | case NAME: |
| 779 | if (state->flags & 0x0800) { |
| 780 | if (have == 0) goto inf_leave; |
| 781 | copy = 0; |
| 782 | do { |
| @@ -794,10 +800,11 @@ | |
| 794 | } |
| 795 | else if (state->head != Z_NULL) |
| 796 | state->head->name = Z_NULL; |
| 797 | state->length = 0; |
| 798 | state->mode = COMMENT; |
| 799 | case COMMENT: |
| 800 | if (state->flags & 0x1000) { |
| 801 | if (have == 0) goto inf_leave; |
| 802 | copy = 0; |
| 803 | do { |
| @@ -814,10 +821,11 @@ | |
| 814 | if (len) goto inf_leave; |
| 815 | } |
| 816 | else if (state->head != Z_NULL) |
| 817 | state->head->comment = Z_NULL; |
| 818 | state->mode = HCRC; |
| 819 | case HCRC: |
| 820 | if (state->flags & 0x0200) { |
| 821 | NEEDBITS(16); |
| 822 | if ((state->wrap & 4) && hold != (state->check & 0xffff)) { |
| 823 | strm->msg = (char *)"header crc mismatch"; |
| @@ -837,19 +845,22 @@ | |
| 837 | case DICTID: |
| 838 | NEEDBITS(32); |
| 839 | strm->adler = state->check = ZSWAP32(hold); |
| 840 | INITBITS(); |
| 841 | state->mode = DICT; |
| 842 | case DICT: |
| 843 | if (state->havedict == 0) { |
| 844 | RESTORE(); |
| 845 | return Z_NEED_DICT; |
| 846 | } |
| 847 | strm->adler = state->check = adler32(0L, Z_NULL, 0); |
| 848 | state->mode = TYPE; |
| 849 | case TYPE: |
| 850 | if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave; |
| 851 | case TYPEDO: |
| 852 | if (state->last) { |
| 853 | BYTEBITS(); |
| 854 | state->mode = CHECK; |
| 855 | break; |
| @@ -896,12 +907,14 @@ | |
| 896 | Tracev((stderr, "inflate: stored length %u\n", |
| 897 | state->length)); |
| 898 | INITBITS(); |
| 899 | state->mode = COPY_; |
| 900 | if (flush == Z_TREES) goto inf_leave; |
| 901 | case COPY_: |
| 902 | state->mode = COPY; |
| 903 | case COPY: |
| 904 | copy = state->length; |
| 905 | if (copy) { |
| 906 | if (copy > have) copy = have; |
| 907 | if (copy > left) copy = left; |
| @@ -933,10 +946,11 @@ | |
| 933 | } |
| 934 | #endif |
| 935 | Tracev((stderr, "inflate: table sizes ok\n")); |
| 936 | state->have = 0; |
| 937 | state->mode = LENLENS; |
| 938 | case LENLENS: |
| 939 | while (state->have < state->ncode) { |
| 940 | NEEDBITS(3); |
| 941 | state->lens[order[state->have++]] = (unsigned short)BITS(3); |
| 942 | DROPBITS(3); |
| @@ -954,10 +968,11 @@ | |
| 954 | break; |
| 955 | } |
| 956 | Tracev((stderr, "inflate: code lengths ok\n")); |
| 957 | state->have = 0; |
| 958 | state->mode = CODELENS; |
| 959 | case CODELENS: |
| 960 | while (state->have < state->nlen + state->ndist) { |
| 961 | for (;;) { |
| 962 | here = state->lencode[BITS(state->lenbits)]; |
| 963 | if ((unsigned)(here.bits) <= bits) break; |
| @@ -1037,12 +1052,14 @@ | |
| 1037 | break; |
| 1038 | } |
| 1039 | Tracev((stderr, "inflate: codes ok\n")); |
| 1040 | state->mode = LEN_; |
| 1041 | if (flush == Z_TREES) goto inf_leave; |
| 1042 | case LEN_: |
| 1043 | state->mode = LEN; |
| 1044 | case LEN: |
| 1045 | if (have >= 6 && left >= 258) { |
| 1046 | RESTORE(); |
| 1047 | inflate_fast(strm, out); |
| 1048 | LOAD(); |
| @@ -1088,10 +1105,11 @@ | |
| 1088 | state->mode = BAD; |
| 1089 | break; |
| 1090 | } |
| 1091 | state->extra = (unsigned)(here.op) & 15; |
| 1092 | state->mode = LENEXT; |
| 1093 | case LENEXT: |
| 1094 | if (state->extra) { |
| 1095 | NEEDBITS(state->extra); |
| 1096 | state->length += BITS(state->extra); |
| 1097 | DROPBITS(state->extra); |
| @@ -1098,10 +1116,11 @@ | |
| 1098 | state->back += state->extra; |
| 1099 | } |
| 1100 | Tracevv((stderr, "inflate: length %u\n", state->length)); |
| 1101 | state->was = state->length; |
| 1102 | state->mode = DIST; |
| 1103 | case DIST: |
| 1104 | for (;;) { |
| 1105 | here = state->distcode[BITS(state->distbits)]; |
| 1106 | if ((unsigned)(here.bits) <= bits) break; |
| 1107 | PULLBYTE(); |
| @@ -1125,10 +1144,11 @@ | |
| 1125 | break; |
| 1126 | } |
| 1127 | state->offset = (unsigned)here.val; |
| 1128 | state->extra = (unsigned)(here.op) & 15; |
| 1129 | state->mode = DISTEXT; |
| 1130 | case DISTEXT: |
| 1131 | if (state->extra) { |
| 1132 | NEEDBITS(state->extra); |
| 1133 | state->offset += BITS(state->extra); |
| 1134 | DROPBITS(state->extra); |
| @@ -1141,10 +1161,11 @@ | |
| 1141 | break; |
| 1142 | } |
| 1143 | #endif |
| 1144 | Tracevv((stderr, "inflate: distance %u\n", state->offset)); |
| 1145 | state->mode = MATCH; |
| 1146 | case MATCH: |
| 1147 | if (left == 0) goto inf_leave; |
| 1148 | copy = out - left; |
| 1149 | if (state->offset > copy) { /* copy from window */ |
| 1150 | copy = state->offset - copy; |
| @@ -1200,11 +1221,11 @@ | |
| 1200 | out -= left; |
| 1201 | strm->total_out += out; |
| 1202 | state->total += out; |
| 1203 | if ((state->wrap & 4) && out) |
| 1204 | strm->adler = state->check = |
| 1205 | UPDATE(state->check, put - out, out); |
| 1206 | out = left; |
| 1207 | if ((state->wrap & 4) && ( |
| 1208 | #ifdef GUNZIP |
| 1209 | state->flags ? hold : |
| 1210 | #endif |
| @@ -1216,32 +1237,35 @@ | |
| 1216 | INITBITS(); |
| 1217 | Tracev((stderr, "inflate: check matches trailer\n")); |
| 1218 | } |
| 1219 | #ifdef GUNZIP |
| 1220 | state->mode = LENGTH; |
| 1221 | case LENGTH: |
| 1222 | if (state->wrap && state->flags) { |
| 1223 | NEEDBITS(32); |
| 1224 | if (hold != (state->total & 0xffffffffUL)) { |
| 1225 | strm->msg = (char *)"incorrect length check"; |
| 1226 | state->mode = BAD; |
| 1227 | break; |
| 1228 | } |
| 1229 | INITBITS(); |
| 1230 | Tracev((stderr, "inflate: length matches trailer\n")); |
| 1231 | } |
| 1232 | #endif |
| 1233 | state->mode = DONE; |
| 1234 | case DONE: |
| 1235 | ret = Z_STREAM_END; |
| 1236 | goto inf_leave; |
| 1237 | case BAD: |
| 1238 | ret = Z_DATA_ERROR; |
| 1239 | goto inf_leave; |
| 1240 | case MEM: |
| 1241 | return Z_MEM_ERROR; |
| 1242 | case SYNC: |
| 1243 | default: |
| 1244 | return Z_STREAM_ERROR; |
| 1245 | } |
| 1246 | |
| 1247 | /* |
| @@ -1263,11 +1287,11 @@ | |
| 1263 | strm->total_in += in; |
| 1264 | strm->total_out += out; |
| 1265 | state->total += out; |
| 1266 | if ((state->wrap & 4) && out) |
| 1267 | strm->adler = state->check = |
| 1268 | UPDATE(state->check, strm->next_out - out, out); |
| 1269 | strm->data_type = (int)state->bits + (state->last ? 64 : 0) + |
| 1270 | (state->mode == TYPE ? 128 : 0) + |
| 1271 | (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0); |
| 1272 | if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK) |
| 1273 | ret = Z_BUF_ERROR; |
| @@ -1399,10 +1423,11 @@ | |
| 1399 | |
| 1400 | int ZEXPORT inflateSync(strm) |
| 1401 | z_streamp strm; |
| 1402 | { |
| 1403 | unsigned len; /* number of bytes to look at or looked at */ |
| 1404 | unsigned long in, out; /* temporary to save total_in and total_out */ |
| 1405 | unsigned char buf[4]; /* to restore bit buffer to byte string */ |
| 1406 | struct inflate_state FAR *state; |
| 1407 | |
| 1408 | /* check parameters */ |
| @@ -1431,13 +1456,19 @@ | |
| 1431 | strm->next_in += len; |
| 1432 | strm->total_in += len; |
| 1433 | |
| 1434 | /* return no joy or set up to restart inflate() on a new block */ |
| 1435 | if (state->have != 4) return Z_DATA_ERROR; |
| 1436 | in = strm->total_in; out = strm->total_out; |
| 1437 | inflateReset(strm); |
| 1438 | strm->total_in = in; strm->total_out = out; |
| 1439 | state->mode = TYPE; |
| 1440 | return Z_OK; |
| 1441 | } |
| 1442 | |
| 1443 | /* |
| @@ -1529,11 +1560,11 @@ | |
| 1529 | { |
| 1530 | struct inflate_state FAR *state; |
| 1531 | |
| 1532 | if (inflateStateCheck(strm)) return Z_STREAM_ERROR; |
| 1533 | state = (struct inflate_state FAR *)strm->state; |
| 1534 | if (check) |
| 1535 | state->wrap |= 4; |
| 1536 | else |
| 1537 | state->wrap &= ~4; |
| 1538 | return Z_OK; |
| 1539 | } |
| 1540 |
| --- compat/zlib/inflate.c | |
| +++ compat/zlib/inflate.c | |
| @@ -1,7 +1,7 @@ | |
| 1 | /* inflate.c -- zlib decompression |
| 2 | * Copyright (C) 1995-2022 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | /* |
| 7 | * Change history: |
| @@ -128,10 +128,11 @@ | |
| 128 | if (state->wrap) /* to support ill-conceived Java test suite */ |
| 129 | strm->adler = state->wrap & 1; |
| 130 | state->mode = HEAD; |
| 131 | state->last = 0; |
| 132 | state->havedict = 0; |
| 133 | state->flags = -1; |
| 134 | state->dmax = 32768U; |
| 135 | state->head = Z_NULL; |
| 136 | state->hold = 0; |
| 137 | state->bits = 0; |
| 138 | state->lencode = state->distcode = state->next = state->codes; |
| @@ -445,14 +446,14 @@ | |
| 446 | |
| 447 | /* Macros for inflate(): */ |
| 448 | |
| 449 | /* check function to use adler32() for zlib or crc32() for gzip */ |
| 450 | #ifdef GUNZIP |
| 451 | # define UPDATE_CHECK(check, buf, len) \ |
| 452 | (state->flags ? crc32(check, buf, len) : adler32(check, buf, len)) |
| 453 | #else |
| 454 | # define UPDATE_CHECK(check, buf, len) adler32(check, buf, len) |
| 455 | #endif |
| 456 | |
| 457 | /* check macros for header crc */ |
| 458 | #ifdef GUNZIP |
| 459 | # define CRC2(check, word) \ |
| @@ -668,11 +669,10 @@ | |
| 669 | CRC2(state->check, hold); |
| 670 | INITBITS(); |
| 671 | state->mode = FLAGS; |
| 672 | break; |
| 673 | } |
| 674 | if (state->head != Z_NULL) |
| 675 | state->head->done = -1; |
| 676 | if (!(state->wrap & 1) || /* check if zlib header allowed */ |
| 677 | #else |
| 678 | if ( |
| @@ -695,10 +695,11 @@ | |
| 695 | strm->msg = (char *)"invalid window size"; |
| 696 | state->mode = BAD; |
| 697 | break; |
| 698 | } |
| 699 | state->dmax = 1U << len; |
| 700 | state->flags = 0; /* indicate zlib header */ |
| 701 | Tracev((stderr, "inflate: zlib header ok\n")); |
| 702 | strm->adler = state->check = adler32(0L, Z_NULL, 0); |
| 703 | state->mode = hold & 0x200 ? DICTID : TYPE; |
| 704 | INITBITS(); |
| 705 | break; |
| @@ -720,18 +721,20 @@ | |
| 721 | state->head->text = (int)((hold >> 8) & 1); |
| 722 | if ((state->flags & 0x0200) && (state->wrap & 4)) |
| 723 | CRC2(state->check, hold); |
| 724 | INITBITS(); |
| 725 | state->mode = TIME; |
| 726 | /* fallthrough */ |
| 727 | case TIME: |
| 728 | NEEDBITS(32); |
| 729 | if (state->head != Z_NULL) |
| 730 | state->head->time = hold; |
| 731 | if ((state->flags & 0x0200) && (state->wrap & 4)) |
| 732 | CRC4(state->check, hold); |
| 733 | INITBITS(); |
| 734 | state->mode = OS; |
| 735 | /* fallthrough */ |
| 736 | case OS: |
| 737 | NEEDBITS(16); |
| 738 | if (state->head != Z_NULL) { |
| 739 | state->head->xflags = (int)(hold & 0xff); |
| 740 | state->head->os = (int)(hold >> 8); |
| @@ -738,10 +741,11 @@ | |
| 741 | } |
| 742 | if ((state->flags & 0x0200) && (state->wrap & 4)) |
| 743 | CRC2(state->check, hold); |
| 744 | INITBITS(); |
| 745 | state->mode = EXLEN; |
| 746 | /* fallthrough */ |
| 747 | case EXLEN: |
| 748 | if (state->flags & 0x0400) { |
| 749 | NEEDBITS(16); |
| 750 | state->length = (unsigned)(hold); |
| 751 | if (state->head != Z_NULL) |
| @@ -751,10 +755,11 @@ | |
| 755 | INITBITS(); |
| 756 | } |
| 757 | else if (state->head != Z_NULL) |
| 758 | state->head->extra = Z_NULL; |
| 759 | state->mode = EXTRA; |
| 760 | /* fallthrough */ |
| 761 | case EXTRA: |
| 762 | if (state->flags & 0x0400) { |
| 763 | copy = state->length; |
| 764 | if (copy > have) copy = have; |
| 765 | if (copy) { |
| @@ -773,10 +778,11 @@ | |
| 778 | } |
| 779 | if (state->length) goto inf_leave; |
| 780 | } |
| 781 | state->length = 0; |
| 782 | state->mode = NAME; |
| 783 | /* fallthrough */ |
| 784 | case NAME: |
| 785 | if (state->flags & 0x0800) { |
| 786 | if (have == 0) goto inf_leave; |
| 787 | copy = 0; |
| 788 | do { |
| @@ -794,10 +800,11 @@ | |
| 800 | } |
| 801 | else if (state->head != Z_NULL) |
| 802 | state->head->name = Z_NULL; |
| 803 | state->length = 0; |
| 804 | state->mode = COMMENT; |
| 805 | /* fallthrough */ |
| 806 | case COMMENT: |
| 807 | if (state->flags & 0x1000) { |
| 808 | if (have == 0) goto inf_leave; |
| 809 | copy = 0; |
| 810 | do { |
| @@ -814,10 +821,11 @@ | |
| 821 | if (len) goto inf_leave; |
| 822 | } |
| 823 | else if (state->head != Z_NULL) |
| 824 | state->head->comment = Z_NULL; |
| 825 | state->mode = HCRC; |
| 826 | /* fallthrough */ |
| 827 | case HCRC: |
| 828 | if (state->flags & 0x0200) { |
| 829 | NEEDBITS(16); |
| 830 | if ((state->wrap & 4) && hold != (state->check & 0xffff)) { |
| 831 | strm->msg = (char *)"header crc mismatch"; |
| @@ -837,19 +845,22 @@ | |
| 845 | case DICTID: |
| 846 | NEEDBITS(32); |
| 847 | strm->adler = state->check = ZSWAP32(hold); |
| 848 | INITBITS(); |
| 849 | state->mode = DICT; |
| 850 | /* fallthrough */ |
| 851 | case DICT: |
| 852 | if (state->havedict == 0) { |
| 853 | RESTORE(); |
| 854 | return Z_NEED_DICT; |
| 855 | } |
| 856 | strm->adler = state->check = adler32(0L, Z_NULL, 0); |
| 857 | state->mode = TYPE; |
| 858 | /* fallthrough */ |
| 859 | case TYPE: |
| 860 | if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave; |
| 861 | /* fallthrough */ |
| 862 | case TYPEDO: |
| 863 | if (state->last) { |
| 864 | BYTEBITS(); |
| 865 | state->mode = CHECK; |
| 866 | break; |
| @@ -896,12 +907,14 @@ | |
| 907 | Tracev((stderr, "inflate: stored length %u\n", |
| 908 | state->length)); |
| 909 | INITBITS(); |
| 910 | state->mode = COPY_; |
| 911 | if (flush == Z_TREES) goto inf_leave; |
| 912 | /* fallthrough */ |
| 913 | case COPY_: |
| 914 | state->mode = COPY; |
| 915 | /* fallthrough */ |
| 916 | case COPY: |
| 917 | copy = state->length; |
| 918 | if (copy) { |
| 919 | if (copy > have) copy = have; |
| 920 | if (copy > left) copy = left; |
| @@ -933,10 +946,11 @@ | |
| 946 | } |
| 947 | #endif |
| 948 | Tracev((stderr, "inflate: table sizes ok\n")); |
| 949 | state->have = 0; |
| 950 | state->mode = LENLENS; |
| 951 | /* fallthrough */ |
| 952 | case LENLENS: |
| 953 | while (state->have < state->ncode) { |
| 954 | NEEDBITS(3); |
| 955 | state->lens[order[state->have++]] = (unsigned short)BITS(3); |
| 956 | DROPBITS(3); |
| @@ -954,10 +968,11 @@ | |
| 968 | break; |
| 969 | } |
| 970 | Tracev((stderr, "inflate: code lengths ok\n")); |
| 971 | state->have = 0; |
| 972 | state->mode = CODELENS; |
| 973 | /* fallthrough */ |
| 974 | case CODELENS: |
| 975 | while (state->have < state->nlen + state->ndist) { |
| 976 | for (;;) { |
| 977 | here = state->lencode[BITS(state->lenbits)]; |
| 978 | if ((unsigned)(here.bits) <= bits) break; |
| @@ -1037,12 +1052,14 @@ | |
| 1052 | break; |
| 1053 | } |
| 1054 | Tracev((stderr, "inflate: codes ok\n")); |
| 1055 | state->mode = LEN_; |
| 1056 | if (flush == Z_TREES) goto inf_leave; |
| 1057 | /* fallthrough */ |
| 1058 | case LEN_: |
| 1059 | state->mode = LEN; |
| 1060 | /* fallthrough */ |
| 1061 | case LEN: |
| 1062 | if (have >= 6 && left >= 258) { |
| 1063 | RESTORE(); |
| 1064 | inflate_fast(strm, out); |
| 1065 | LOAD(); |
| @@ -1088,10 +1105,11 @@ | |
| 1105 | state->mode = BAD; |
| 1106 | break; |
| 1107 | } |
| 1108 | state->extra = (unsigned)(here.op) & 15; |
| 1109 | state->mode = LENEXT; |
| 1110 | /* fallthrough */ |
| 1111 | case LENEXT: |
| 1112 | if (state->extra) { |
| 1113 | NEEDBITS(state->extra); |
| 1114 | state->length += BITS(state->extra); |
| 1115 | DROPBITS(state->extra); |
| @@ -1098,10 +1116,11 @@ | |
| 1116 | state->back += state->extra; |
| 1117 | } |
| 1118 | Tracevv((stderr, "inflate: length %u\n", state->length)); |
| 1119 | state->was = state->length; |
| 1120 | state->mode = DIST; |
| 1121 | /* fallthrough */ |
| 1122 | case DIST: |
| 1123 | for (;;) { |
| 1124 | here = state->distcode[BITS(state->distbits)]; |
| 1125 | if ((unsigned)(here.bits) <= bits) break; |
| 1126 | PULLBYTE(); |
| @@ -1125,10 +1144,11 @@ | |
| 1144 | break; |
| 1145 | } |
| 1146 | state->offset = (unsigned)here.val; |
| 1147 | state->extra = (unsigned)(here.op) & 15; |
| 1148 | state->mode = DISTEXT; |
| 1149 | /* fallthrough */ |
| 1150 | case DISTEXT: |
| 1151 | if (state->extra) { |
| 1152 | NEEDBITS(state->extra); |
| 1153 | state->offset += BITS(state->extra); |
| 1154 | DROPBITS(state->extra); |
| @@ -1141,10 +1161,11 @@ | |
| 1161 | break; |
| 1162 | } |
| 1163 | #endif |
| 1164 | Tracevv((stderr, "inflate: distance %u\n", state->offset)); |
| 1165 | state->mode = MATCH; |
| 1166 | /* fallthrough */ |
| 1167 | case MATCH: |
| 1168 | if (left == 0) goto inf_leave; |
| 1169 | copy = out - left; |
| 1170 | if (state->offset > copy) { /* copy from window */ |
| 1171 | copy = state->offset - copy; |
| @@ -1200,11 +1221,11 @@ | |
| 1221 | out -= left; |
| 1222 | strm->total_out += out; |
| 1223 | state->total += out; |
| 1224 | if ((state->wrap & 4) && out) |
| 1225 | strm->adler = state->check = |
| 1226 | UPDATE_CHECK(state->check, put - out, out); |
| 1227 | out = left; |
| 1228 | if ((state->wrap & 4) && ( |
| 1229 | #ifdef GUNZIP |
| 1230 | state->flags ? hold : |
| 1231 | #endif |
| @@ -1216,32 +1237,35 @@ | |
| 1237 | INITBITS(); |
| 1238 | Tracev((stderr, "inflate: check matches trailer\n")); |
| 1239 | } |
| 1240 | #ifdef GUNZIP |
| 1241 | state->mode = LENGTH; |
| 1242 | /* fallthrough */ |
| 1243 | case LENGTH: |
| 1244 | if (state->wrap && state->flags) { |
| 1245 | NEEDBITS(32); |
| 1246 | if ((state->wrap & 4) && hold != (state->total & 0xffffffff)) { |
| 1247 | strm->msg = (char *)"incorrect length check"; |
| 1248 | state->mode = BAD; |
| 1249 | break; |
| 1250 | } |
| 1251 | INITBITS(); |
| 1252 | Tracev((stderr, "inflate: length matches trailer\n")); |
| 1253 | } |
| 1254 | #endif |
| 1255 | state->mode = DONE; |
| 1256 | /* fallthrough */ |
| 1257 | case DONE: |
| 1258 | ret = Z_STREAM_END; |
| 1259 | goto inf_leave; |
| 1260 | case BAD: |
| 1261 | ret = Z_DATA_ERROR; |
| 1262 | goto inf_leave; |
| 1263 | case MEM: |
| 1264 | return Z_MEM_ERROR; |
| 1265 | case SYNC: |
| 1266 | /* fallthrough */ |
| 1267 | default: |
| 1268 | return Z_STREAM_ERROR; |
| 1269 | } |
| 1270 | |
| 1271 | /* |
| @@ -1263,11 +1287,11 @@ | |
| 1287 | strm->total_in += in; |
| 1288 | strm->total_out += out; |
| 1289 | state->total += out; |
| 1290 | if ((state->wrap & 4) && out) |
| 1291 | strm->adler = state->check = |
| 1292 | UPDATE_CHECK(state->check, strm->next_out - out, out); |
| 1293 | strm->data_type = (int)state->bits + (state->last ? 64 : 0) + |
| 1294 | (state->mode == TYPE ? 128 : 0) + |
| 1295 | (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0); |
| 1296 | if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK) |
| 1297 | ret = Z_BUF_ERROR; |
| @@ -1399,10 +1423,11 @@ | |
| 1423 | |
| 1424 | int ZEXPORT inflateSync(strm) |
| 1425 | z_streamp strm; |
| 1426 | { |
| 1427 | unsigned len; /* number of bytes to look at or looked at */ |
| 1428 | int flags; /* temporary to save header status */ |
| 1429 | unsigned long in, out; /* temporary to save total_in and total_out */ |
| 1430 | unsigned char buf[4]; /* to restore bit buffer to byte string */ |
| 1431 | struct inflate_state FAR *state; |
| 1432 | |
| 1433 | /* check parameters */ |
| @@ -1431,13 +1456,19 @@ | |
| 1456 | strm->next_in += len; |
| 1457 | strm->total_in += len; |
| 1458 | |
| 1459 | /* return no joy or set up to restart inflate() on a new block */ |
| 1460 | if (state->have != 4) return Z_DATA_ERROR; |
| 1461 | if (state->flags == -1) |
| 1462 | state->wrap = 0; /* if no header yet, treat as raw */ |
| 1463 | else |
| 1464 | state->wrap &= ~4; /* no point in computing a check value now */ |
| 1465 | flags = state->flags; |
| 1466 | in = strm->total_in; out = strm->total_out; |
| 1467 | inflateReset(strm); |
| 1468 | strm->total_in = in; strm->total_out = out; |
| 1469 | state->flags = flags; |
| 1470 | state->mode = TYPE; |
| 1471 | return Z_OK; |
| 1472 | } |
| 1473 | |
| 1474 | /* |
| @@ -1529,11 +1560,11 @@ | |
| 1560 | { |
| 1561 | struct inflate_state FAR *state; |
| 1562 | |
| 1563 | if (inflateStateCheck(strm)) return Z_STREAM_ERROR; |
| 1564 | state = (struct inflate_state FAR *)strm->state; |
| 1565 | if (check && state->wrap) |
| 1566 | state->wrap |= 4; |
| 1567 | else |
| 1568 | state->wrap &= ~4; |
| 1569 | return Z_OK; |
| 1570 | } |
| 1571 |
+3
-2
| --- compat/zlib/inflate.h | ||
| +++ compat/zlib/inflate.h | ||
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | /* inflate.h -- internal inflate state definition |
| 2 | - * Copyright (C) 1995-2016 Mark Adler | |
| 2 | + * Copyright (C) 1995-2019 Mark Adler | |
| 3 | 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | 4 | */ |
| 5 | 5 | |
| 6 | 6 | /* WARNING: this file should *not* be used by applications. It is |
| 7 | 7 | part of the implementation of the compression library and is |
| @@ -84,11 +84,12 @@ | ||
| 84 | 84 | inflate_mode mode; /* current inflate mode */ |
| 85 | 85 | int last; /* true if processing last block */ |
| 86 | 86 | int wrap; /* bit 0 true for zlib, bit 1 true for gzip, |
| 87 | 87 | bit 2 true to validate check value */ |
| 88 | 88 | int havedict; /* true if dictionary provided */ |
| 89 | - int flags; /* gzip header method and flags (0 if zlib) */ | |
| 89 | + int flags; /* gzip header method and flags, 0 if zlib, or | |
| 90 | + -1 if raw or no header yet */ | |
| 90 | 91 | unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */ |
| 91 | 92 | unsigned long check; /* protected copy of check value */ |
| 92 | 93 | unsigned long total; /* protected copy of output count */ |
| 93 | 94 | gz_headerp head; /* where to save gzip header information */ |
| 94 | 95 | /* sliding window */ |
| 95 | 96 |
| --- compat/zlib/inflate.h | |
| +++ compat/zlib/inflate.h | |
| @@ -1,7 +1,7 @@ | |
| 1 | /* inflate.h -- internal inflate state definition |
| 2 | * Copyright (C) 1995-2016 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | /* WARNING: this file should *not* be used by applications. It is |
| 7 | part of the implementation of the compression library and is |
| @@ -84,11 +84,12 @@ | |
| 84 | inflate_mode mode; /* current inflate mode */ |
| 85 | int last; /* true if processing last block */ |
| 86 | int wrap; /* bit 0 true for zlib, bit 1 true for gzip, |
| 87 | bit 2 true to validate check value */ |
| 88 | int havedict; /* true if dictionary provided */ |
| 89 | int flags; /* gzip header method and flags (0 if zlib) */ |
| 90 | unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */ |
| 91 | unsigned long check; /* protected copy of check value */ |
| 92 | unsigned long total; /* protected copy of output count */ |
| 93 | gz_headerp head; /* where to save gzip header information */ |
| 94 | /* sliding window */ |
| 95 |
| --- compat/zlib/inflate.h | |
| +++ compat/zlib/inflate.h | |
| @@ -1,7 +1,7 @@ | |
| 1 | /* inflate.h -- internal inflate state definition |
| 2 | * Copyright (C) 1995-2019 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | /* WARNING: this file should *not* be used by applications. It is |
| 7 | part of the implementation of the compression library and is |
| @@ -84,11 +84,12 @@ | |
| 84 | inflate_mode mode; /* current inflate mode */ |
| 85 | int last; /* true if processing last block */ |
| 86 | int wrap; /* bit 0 true for zlib, bit 1 true for gzip, |
| 87 | bit 2 true to validate check value */ |
| 88 | int havedict; /* true if dictionary provided */ |
| 89 | int flags; /* gzip header method and flags, 0 if zlib, or |
| 90 | -1 if raw or no header yet */ |
| 91 | unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */ |
| 92 | unsigned long check; /* protected copy of check value */ |
| 93 | unsigned long total; /* protected copy of output count */ |
| 94 | gz_headerp head; /* where to save gzip header information */ |
| 95 | /* sliding window */ |
| 96 |
+3
-3
| --- compat/zlib/inftrees.c | ||
| +++ compat/zlib/inftrees.c | ||
| @@ -1,17 +1,17 @@ | ||
| 1 | 1 | /* inftrees.c -- generate Huffman trees for efficient decoding |
| 2 | - * Copyright (C) 1995-2017 Mark Adler | |
| 2 | + * Copyright (C) 1995-2022 Mark Adler | |
| 3 | 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | 4 | */ |
| 5 | 5 | |
| 6 | 6 | #include "zutil.h" |
| 7 | 7 | #include "inftrees.h" |
| 8 | 8 | |
| 9 | 9 | #define MAXBITS 15 |
| 10 | 10 | |
| 11 | 11 | const char inflate_copyright[] = |
| 12 | - " inflate 1.2.11 Copyright 1995-2017 Mark Adler "; | |
| 12 | + " inflate 1.2.12 Copyright 1995-2022 Mark Adler "; | |
| 13 | 13 | /* |
| 14 | 14 | If you use the zlib library in a product, an acknowledgment is welcome |
| 15 | 15 | in the documentation of your product. If for some reason you cannot |
| 16 | 16 | include such an acknowledgment, I would appreciate that you keep this |
| 17 | 17 | copyright string in the executable of your product. |
| @@ -60,11 +60,11 @@ | ||
| 60 | 60 | static const unsigned short lbase[31] = { /* Length codes 257..285 base */ |
| 61 | 61 | 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, |
| 62 | 62 | 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; |
| 63 | 63 | static const unsigned short lext[31] = { /* Length codes 257..285 extra */ |
| 64 | 64 | 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, |
| 65 | - 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 77, 202}; | |
| 65 | + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 199, 202}; | |
| 66 | 66 | static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ |
| 67 | 67 | 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, |
| 68 | 68 | 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, |
| 69 | 69 | 8193, 12289, 16385, 24577, 0, 0}; |
| 70 | 70 | static const unsigned short dext[32] = { /* Distance codes 0..29 extra */ |
| 71 | 71 |
| --- compat/zlib/inftrees.c | |
| +++ compat/zlib/inftrees.c | |
| @@ -1,17 +1,17 @@ | |
| 1 | /* inftrees.c -- generate Huffman trees for efficient decoding |
| 2 | * Copyright (C) 1995-2017 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | #include "zutil.h" |
| 7 | #include "inftrees.h" |
| 8 | |
| 9 | #define MAXBITS 15 |
| 10 | |
| 11 | const char inflate_copyright[] = |
| 12 | " inflate 1.2.11 Copyright 1995-2017 Mark Adler "; |
| 13 | /* |
| 14 | If you use the zlib library in a product, an acknowledgment is welcome |
| 15 | in the documentation of your product. If for some reason you cannot |
| 16 | include such an acknowledgment, I would appreciate that you keep this |
| 17 | copyright string in the executable of your product. |
| @@ -60,11 +60,11 @@ | |
| 60 | static const unsigned short lbase[31] = { /* Length codes 257..285 base */ |
| 61 | 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, |
| 62 | 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; |
| 63 | static const unsigned short lext[31] = { /* Length codes 257..285 extra */ |
| 64 | 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, |
| 65 | 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 77, 202}; |
| 66 | static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ |
| 67 | 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, |
| 68 | 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, |
| 69 | 8193, 12289, 16385, 24577, 0, 0}; |
| 70 | static const unsigned short dext[32] = { /* Distance codes 0..29 extra */ |
| 71 |
| --- compat/zlib/inftrees.c | |
| +++ compat/zlib/inftrees.c | |
| @@ -1,17 +1,17 @@ | |
| 1 | /* inftrees.c -- generate Huffman trees for efficient decoding |
| 2 | * Copyright (C) 1995-2022 Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | #include "zutil.h" |
| 7 | #include "inftrees.h" |
| 8 | |
| 9 | #define MAXBITS 15 |
| 10 | |
| 11 | const char inflate_copyright[] = |
| 12 | " inflate 1.2.12 Copyright 1995-2022 Mark Adler "; |
| 13 | /* |
| 14 | If you use the zlib library in a product, an acknowledgment is welcome |
| 15 | in the documentation of your product. If for some reason you cannot |
| 16 | include such an acknowledgment, I would appreciate that you keep this |
| 17 | copyright string in the executable of your product. |
| @@ -60,11 +60,11 @@ | |
| 60 | static const unsigned short lbase[31] = { /* Length codes 257..285 base */ |
| 61 | 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, |
| 62 | 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; |
| 63 | static const unsigned short lext[31] = { /* Length codes 257..285 extra */ |
| 64 | 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, |
| 65 | 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 199, 202}; |
| 66 | static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ |
| 67 | 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, |
| 68 | 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, |
| 69 | 8193, 12289, 16385, 24577, 0, 0}; |
| 70 | static const unsigned short dext[32] = { /* Distance codes 0..29 extra */ |
| 71 |
+1
-1
| --- compat/zlib/os400/README400 | ||
| +++ compat/zlib/os400/README400 | ||
| @@ -1,6 +1,6 @@ | ||
| 1 | - ZLIB version 1.2.11 for OS/400 installation instructions | |
| 1 | + ZLIB version 1.2.12 for OS/400 installation instructions | |
| 2 | 2 | |
| 3 | 3 | 1) Download and unpack the zlib tarball to some IFS directory. |
| 4 | 4 | (i.e.: /path/to/the/zlib/ifs/source/directory) |
| 5 | 5 | |
| 6 | 6 | If the installed IFS command suppors gzip format, this is straightforward, |
| 7 | 7 |
| --- compat/zlib/os400/README400 | |
| +++ compat/zlib/os400/README400 | |
| @@ -1,6 +1,6 @@ | |
| 1 | ZLIB version 1.2.11 for OS/400 installation instructions |
| 2 | |
| 3 | 1) Download and unpack the zlib tarball to some IFS directory. |
| 4 | (i.e.: /path/to/the/zlib/ifs/source/directory) |
| 5 | |
| 6 | If the installed IFS command suppors gzip format, this is straightforward, |
| 7 |
| --- compat/zlib/os400/README400 | |
| +++ compat/zlib/os400/README400 | |
| @@ -1,6 +1,6 @@ | |
| 1 | ZLIB version 1.2.12 for OS/400 installation instructions |
| 2 | |
| 3 | 1) Download and unpack the zlib tarball to some IFS directory. |
| 4 | (i.e.: /path/to/the/zlib/ifs/source/directory) |
| 5 | |
| 6 | If the installed IFS command suppors gzip format, this is straightforward, |
| 7 |
+3
-3
| --- compat/zlib/os400/zlib.inc | ||
| +++ compat/zlib/os400/zlib.inc | ||
| @@ -1,9 +1,9 @@ | ||
| 1 | 1 | * ZLIB.INC - Interface to the general purpose compression library |
| 2 | 2 | * |
| 3 | 3 | * ILE RPG400 version by Patrick Monnerat, DATASPHERE. |
| 4 | - * Version 1.2.11 | |
| 4 | + * Version 1.2.12 | |
| 5 | 5 | * |
| 6 | 6 | * |
| 7 | 7 | * WARNING: |
| 8 | 8 | * Procedures inflateInit(), inflateInit2(), deflateInit(), |
| 9 | 9 | * deflateInit2() and inflateBackInit() need to be called with |
| @@ -20,16 +20,16 @@ | ||
| 20 | 20 | * Constants |
| 21 | 21 | ************************************************************************** |
| 22 | 22 | * |
| 23 | 23 | * Versioning information. |
| 24 | 24 | * |
| 25 | - D ZLIB_VERSION C '1.2.11' | |
| 25 | + D ZLIB_VERSION C '1.2.12' | |
| 26 | 26 | D ZLIB_VERNUM C X'12a0' |
| 27 | 27 | D ZLIB_VER_MAJOR C 1 |
| 28 | 28 | D ZLIB_VER_MINOR C 2 |
| 29 | 29 | D ZLIB_VER_REVISION... |
| 30 | - D C 11 | |
| 30 | + D C 12 | |
| 31 | 31 | D ZLIB_VER_SUBREVISION... |
| 32 | 32 | D C 0 |
| 33 | 33 | * |
| 34 | 34 | * Other equates. |
| 35 | 35 | * |
| 36 | 36 |
| --- compat/zlib/os400/zlib.inc | |
| +++ compat/zlib/os400/zlib.inc | |
| @@ -1,9 +1,9 @@ | |
| 1 | * ZLIB.INC - Interface to the general purpose compression library |
| 2 | * |
| 3 | * ILE RPG400 version by Patrick Monnerat, DATASPHERE. |
| 4 | * Version 1.2.11 |
| 5 | * |
| 6 | * |
| 7 | * WARNING: |
| 8 | * Procedures inflateInit(), inflateInit2(), deflateInit(), |
| 9 | * deflateInit2() and inflateBackInit() need to be called with |
| @@ -20,16 +20,16 @@ | |
| 20 | * Constants |
| 21 | ************************************************************************** |
| 22 | * |
| 23 | * Versioning information. |
| 24 | * |
| 25 | D ZLIB_VERSION C '1.2.11' |
| 26 | D ZLIB_VERNUM C X'12a0' |
| 27 | D ZLIB_VER_MAJOR C 1 |
| 28 | D ZLIB_VER_MINOR C 2 |
| 29 | D ZLIB_VER_REVISION... |
| 30 | D C 11 |
| 31 | D ZLIB_VER_SUBREVISION... |
| 32 | D C 0 |
| 33 | * |
| 34 | * Other equates. |
| 35 | * |
| 36 |
| --- compat/zlib/os400/zlib.inc | |
| +++ compat/zlib/os400/zlib.inc | |
| @@ -1,9 +1,9 @@ | |
| 1 | * ZLIB.INC - Interface to the general purpose compression library |
| 2 | * |
| 3 | * ILE RPG400 version by Patrick Monnerat, DATASPHERE. |
| 4 | * Version 1.2.12 |
| 5 | * |
| 6 | * |
| 7 | * WARNING: |
| 8 | * Procedures inflateInit(), inflateInit2(), deflateInit(), |
| 9 | * deflateInit2() and inflateBackInit() need to be called with |
| @@ -20,16 +20,16 @@ | |
| 20 | * Constants |
| 21 | ************************************************************************** |
| 22 | * |
| 23 | * Versioning information. |
| 24 | * |
| 25 | D ZLIB_VERSION C '1.2.12' |
| 26 | D ZLIB_VERNUM C X'12a0' |
| 27 | D ZLIB_VER_MAJOR C 1 |
| 28 | D ZLIB_VER_MINOR C 2 |
| 29 | D ZLIB_VER_REVISION... |
| 30 | D C 12 |
| 31 | D ZLIB_VER_SUBREVISION... |
| 32 | D C 0 |
| 33 | * |
| 34 | * Other equates. |
| 35 | * |
| 36 |
+5
-5
| --- compat/zlib/qnx/package.qpg | ||
| +++ compat/zlib/qnx/package.qpg | ||
| @@ -23,14 +23,14 @@ | ||
| 23 | 23 | |
| 24 | 24 | <QPG:Values> |
| 25 | 25 | <QPG:Files> |
| 26 | 26 | <QPG:Add file="../zconf.h" install="/opt/include/" user="root:sys" permission="644"/> |
| 27 | 27 | <QPG:Add file="../zlib.h" install="/opt/include/" user="root:sys" permission="644"/> |
| 28 | - <QPG:Add file="../libz.so.1.2.11" install="/opt/lib/" user="root:bin" permission="644"/> | |
| 29 | - <QPG:Add file="libz.so" install="/opt/lib/" component="dev" filetype="symlink" linkto="libz.so.1.2.11"/> | |
| 30 | - <QPG:Add file="libz.so.1" install="/opt/lib/" filetype="symlink" linkto="libz.so.1.2.11"/> | |
| 31 | - <QPG:Add file="../libz.so.1.2.11" install="/opt/lib/" component="slib"/> | |
| 28 | + <QPG:Add file="../libz.so.1.2.12" install="/opt/lib/" user="root:bin" permission="644"/> | |
| 29 | + <QPG:Add file="libz.so" install="/opt/lib/" component="dev" filetype="symlink" linkto="libz.so.1.2.12"/> | |
| 30 | + <QPG:Add file="libz.so.1" install="/opt/lib/" filetype="symlink" linkto="libz.so.1.2.12"/> | |
| 31 | + <QPG:Add file="../libz.so.1.2.12" install="/opt/lib/" component="slib"/> | |
| 32 | 32 | </QPG:Files> |
| 33 | 33 | |
| 34 | 34 | <QPG:PackageFilter> |
| 35 | 35 | <QPM:PackageManifest> |
| 36 | 36 | <QPM:PackageDescription> |
| @@ -61,11 +61,11 @@ | ||
| 61 | 61 | <QPM:ProductDescriptionURL>http://www.gzip.org/zlib</QPM:ProductDescriptionURL> |
| 62 | 62 | <QPM:ProductDescriptionEmbedURL></QPM:ProductDescriptionEmbedURL> |
| 63 | 63 | </QPM:ProductDescription> |
| 64 | 64 | |
| 65 | 65 | <QPM:ReleaseDescription> |
| 66 | - <QPM:ReleaseVersion>1.2.11</QPM:ReleaseVersion> | |
| 66 | + <QPM:ReleaseVersion>1.2.12</QPM:ReleaseVersion> | |
| 67 | 67 | <QPM:ReleaseUrgency>Medium</QPM:ReleaseUrgency> |
| 68 | 68 | <QPM:ReleaseStability>Stable</QPM:ReleaseStability> |
| 69 | 69 | <QPM:ReleaseNoteMinor></QPM:ReleaseNoteMinor> |
| 70 | 70 | <QPM:ReleaseNoteMajor></QPM:ReleaseNoteMajor> |
| 71 | 71 | <QPM:ExcludeCountries> |
| 72 | 72 |
| --- compat/zlib/qnx/package.qpg | |
| +++ compat/zlib/qnx/package.qpg | |
| @@ -23,14 +23,14 @@ | |
| 23 | |
| 24 | <QPG:Values> |
| 25 | <QPG:Files> |
| 26 | <QPG:Add file="../zconf.h" install="/opt/include/" user="root:sys" permission="644"/> |
| 27 | <QPG:Add file="../zlib.h" install="/opt/include/" user="root:sys" permission="644"/> |
| 28 | <QPG:Add file="../libz.so.1.2.11" install="/opt/lib/" user="root:bin" permission="644"/> |
| 29 | <QPG:Add file="libz.so" install="/opt/lib/" component="dev" filetype="symlink" linkto="libz.so.1.2.11"/> |
| 30 | <QPG:Add file="libz.so.1" install="/opt/lib/" filetype="symlink" linkto="libz.so.1.2.11"/> |
| 31 | <QPG:Add file="../libz.so.1.2.11" install="/opt/lib/" component="slib"/> |
| 32 | </QPG:Files> |
| 33 | |
| 34 | <QPG:PackageFilter> |
| 35 | <QPM:PackageManifest> |
| 36 | <QPM:PackageDescription> |
| @@ -61,11 +61,11 @@ | |
| 61 | <QPM:ProductDescriptionURL>http://www.gzip.org/zlib</QPM:ProductDescriptionURL> |
| 62 | <QPM:ProductDescriptionEmbedURL></QPM:ProductDescriptionEmbedURL> |
| 63 | </QPM:ProductDescription> |
| 64 | |
| 65 | <QPM:ReleaseDescription> |
| 66 | <QPM:ReleaseVersion>1.2.11</QPM:ReleaseVersion> |
| 67 | <QPM:ReleaseUrgency>Medium</QPM:ReleaseUrgency> |
| 68 | <QPM:ReleaseStability>Stable</QPM:ReleaseStability> |
| 69 | <QPM:ReleaseNoteMinor></QPM:ReleaseNoteMinor> |
| 70 | <QPM:ReleaseNoteMajor></QPM:ReleaseNoteMajor> |
| 71 | <QPM:ExcludeCountries> |
| 72 |
| --- compat/zlib/qnx/package.qpg | |
| +++ compat/zlib/qnx/package.qpg | |
| @@ -23,14 +23,14 @@ | |
| 23 | |
| 24 | <QPG:Values> |
| 25 | <QPG:Files> |
| 26 | <QPG:Add file="../zconf.h" install="/opt/include/" user="root:sys" permission="644"/> |
| 27 | <QPG:Add file="../zlib.h" install="/opt/include/" user="root:sys" permission="644"/> |
| 28 | <QPG:Add file="../libz.so.1.2.12" install="/opt/lib/" user="root:bin" permission="644"/> |
| 29 | <QPG:Add file="libz.so" install="/opt/lib/" component="dev" filetype="symlink" linkto="libz.so.1.2.12"/> |
| 30 | <QPG:Add file="libz.so.1" install="/opt/lib/" filetype="symlink" linkto="libz.so.1.2.12"/> |
| 31 | <QPG:Add file="../libz.so.1.2.12" install="/opt/lib/" component="slib"/> |
| 32 | </QPG:Files> |
| 33 | |
| 34 | <QPG:PackageFilter> |
| 35 | <QPM:PackageManifest> |
| 36 | <QPM:PackageDescription> |
| @@ -61,11 +61,11 @@ | |
| 61 | <QPM:ProductDescriptionURL>http://www.gzip.org/zlib</QPM:ProductDescriptionURL> |
| 62 | <QPM:ProductDescriptionEmbedURL></QPM:ProductDescriptionEmbedURL> |
| 63 | </QPM:ProductDescription> |
| 64 | |
| 65 | <QPM:ReleaseDescription> |
| 66 | <QPM:ReleaseVersion>1.2.12</QPM:ReleaseVersion> |
| 67 | <QPM:ReleaseUrgency>Medium</QPM:ReleaseUrgency> |
| 68 | <QPM:ReleaseStability>Stable</QPM:ReleaseStability> |
| 69 | <QPM:ReleaseNoteMinor></QPM:ReleaseNoteMinor> |
| 70 | <QPM:ReleaseNoteMajor></QPM:ReleaseNoteMajor> |
| 71 | <QPM:ExcludeCountries> |
| 72 |
+2
-3
| --- compat/zlib/test/example.c | ||
| +++ compat/zlib/test/example.c | ||
| @@ -438,13 +438,12 @@ | ||
| 438 | 438 | d_stream.avail_in = (uInt)comprLen-2; /* read all compressed data */ |
| 439 | 439 | err = inflateSync(&d_stream); /* but skip the damaged part */ |
| 440 | 440 | CHECK_ERR(err, "inflateSync"); |
| 441 | 441 | |
| 442 | 442 | err = inflate(&d_stream, Z_FINISH); |
| 443 | - if (err != Z_DATA_ERROR) { | |
| 444 | - fprintf(stderr, "inflate should report DATA_ERROR\n"); | |
| 445 | - /* Because of incorrect adler32 */ | |
| 443 | + if (err != Z_STREAM_END) { | |
| 444 | + fprintf(stderr, "inflate should report Z_STREAM_END\n"); | |
| 446 | 445 | exit(1); |
| 447 | 446 | } |
| 448 | 447 | err = inflateEnd(&d_stream); |
| 449 | 448 | CHECK_ERR(err, "inflateEnd"); |
| 450 | 449 | |
| 451 | 450 |
| --- compat/zlib/test/example.c | |
| +++ compat/zlib/test/example.c | |
| @@ -438,13 +438,12 @@ | |
| 438 | d_stream.avail_in = (uInt)comprLen-2; /* read all compressed data */ |
| 439 | err = inflateSync(&d_stream); /* but skip the damaged part */ |
| 440 | CHECK_ERR(err, "inflateSync"); |
| 441 | |
| 442 | err = inflate(&d_stream, Z_FINISH); |
| 443 | if (err != Z_DATA_ERROR) { |
| 444 | fprintf(stderr, "inflate should report DATA_ERROR\n"); |
| 445 | /* Because of incorrect adler32 */ |
| 446 | exit(1); |
| 447 | } |
| 448 | err = inflateEnd(&d_stream); |
| 449 | CHECK_ERR(err, "inflateEnd"); |
| 450 | |
| 451 |
| --- compat/zlib/test/example.c | |
| +++ compat/zlib/test/example.c | |
| @@ -438,13 +438,12 @@ | |
| 438 | d_stream.avail_in = (uInt)comprLen-2; /* read all compressed data */ |
| 439 | err = inflateSync(&d_stream); /* but skip the damaged part */ |
| 440 | CHECK_ERR(err, "inflateSync"); |
| 441 | |
| 442 | err = inflate(&d_stream, Z_FINISH); |
| 443 | if (err != Z_STREAM_END) { |
| 444 | fprintf(stderr, "inflate should report Z_STREAM_END\n"); |
| 445 | exit(1); |
| 446 | } |
| 447 | err = inflateEnd(&d_stream); |
| 448 | CHECK_ERR(err, "inflateEnd"); |
| 449 | |
| 450 |
+2
-2
| --- compat/zlib/treebuild.xml | ||
| +++ compat/zlib/treebuild.xml | ||
| @@ -1,8 +1,8 @@ | ||
| 1 | 1 | <?xml version="1.0" ?> |
| 2 | -<package name="zlib" version="1.2.11"> | |
| 3 | - <library name="zlib" dlversion="1.2.11" dlname="z"> | |
| 2 | +<package name="zlib" version="1.2.12"> | |
| 3 | + <library name="zlib" dlversion="1.2.12" dlname="z"> | |
| 4 | 4 | <property name="description"> zip compression library </property> |
| 5 | 5 | <property name="include-target-dir" value="$(@PACKAGE/install-includedir)" /> |
| 6 | 6 | |
| 7 | 7 | <!-- fixme: not implemented yet --> |
| 8 | 8 | <property name="compiler/c/inline" value="yes" /> |
| 9 | 9 |
| --- compat/zlib/treebuild.xml | |
| +++ compat/zlib/treebuild.xml | |
| @@ -1,8 +1,8 @@ | |
| 1 | <?xml version="1.0" ?> |
| 2 | <package name="zlib" version="1.2.11"> |
| 3 | <library name="zlib" dlversion="1.2.11" dlname="z"> |
| 4 | <property name="description"> zip compression library </property> |
| 5 | <property name="include-target-dir" value="$(@PACKAGE/install-includedir)" /> |
| 6 | |
| 7 | <!-- fixme: not implemented yet --> |
| 8 | <property name="compiler/c/inline" value="yes" /> |
| 9 |
| --- compat/zlib/treebuild.xml | |
| +++ compat/zlib/treebuild.xml | |
| @@ -1,8 +1,8 @@ | |
| 1 | <?xml version="1.0" ?> |
| 2 | <package name="zlib" version="1.2.12"> |
| 3 | <library name="zlib" dlversion="1.2.12" dlname="z"> |
| 4 | <property name="description"> zip compression library </property> |
| 5 | <property name="include-target-dir" value="$(@PACKAGE/install-includedir)" /> |
| 6 | |
| 7 | <!-- fixme: not implemented yet --> |
| 8 | <property name="compiler/c/inline" value="yes" /> |
| 9 |
+27
-48
| --- compat/zlib/trees.c | ||
| +++ compat/zlib/trees.c | ||
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | /* trees.c -- output deflated data using Huffman coding |
| 2 | - * Copyright (C) 1995-2017 Jean-loup Gailly | |
| 2 | + * Copyright (C) 1995-2021 Jean-loup Gailly | |
| 3 | 3 | * detect_data_type() function provided freely by Cosmin Truta, 2006 |
| 4 | 4 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 5 | 5 | */ |
| 6 | 6 | |
| 7 | 7 | /* |
| @@ -147,11 +147,11 @@ | ||
| 147 | 147 | local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes, |
| 148 | 148 | int blcodes)); |
| 149 | 149 | local void compress_block OF((deflate_state *s, const ct_data *ltree, |
| 150 | 150 | const ct_data *dtree)); |
| 151 | 151 | local int detect_data_type OF((deflate_state *s)); |
| 152 | -local unsigned bi_reverse OF((unsigned value, int length)); | |
| 152 | +local unsigned bi_reverse OF((unsigned code, int len)); | |
| 153 | 153 | local void bi_windup OF((deflate_state *s)); |
| 154 | 154 | local void bi_flush OF((deflate_state *s)); |
| 155 | 155 | |
| 156 | 156 | #ifdef GEN_TREES_H |
| 157 | 157 | local void gen_trees_header OF((void)); |
| @@ -414,11 +414,11 @@ | ||
| 414 | 414 | for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; |
| 415 | 415 | for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; |
| 416 | 416 | |
| 417 | 417 | s->dyn_ltree[END_BLOCK].Freq = 1; |
| 418 | 418 | s->opt_len = s->static_len = 0L; |
| 419 | - s->last_lit = s->matches = 0; | |
| 419 | + s->sym_next = s->matches = 0; | |
| 420 | 420 | } |
| 421 | 421 | |
| 422 | 422 | #define SMALLEST 1 |
| 423 | 423 | /* Index within the heap array of least frequent node in the Huffman tree */ |
| 424 | 424 | |
| @@ -868,11 +868,12 @@ | ||
| 868 | 868 | { |
| 869 | 869 | send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */ |
| 870 | 870 | bi_windup(s); /* align on byte boundary */ |
| 871 | 871 | put_short(s, (ush)stored_len); |
| 872 | 872 | put_short(s, (ush)~stored_len); |
| 873 | - zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len); | |
| 873 | + if (stored_len) | |
| 874 | + zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len); | |
| 874 | 875 | s->pending += stored_len; |
| 875 | 876 | #ifdef ZLIB_DEBUG |
| 876 | 877 | s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; |
| 877 | 878 | s->compressed_len += (stored_len + 4) << 3; |
| 878 | 879 | s->bits_sent += 2*16; |
| @@ -945,11 +946,11 @@ | ||
| 945 | 946 | opt_lenb = (s->opt_len+3+7)>>3; |
| 946 | 947 | static_lenb = (s->static_len+3+7)>>3; |
| 947 | 948 | |
| 948 | 949 | Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", |
| 949 | 950 | opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, |
| 950 | - s->last_lit)); | |
| 951 | + s->sym_next / 3)); | |
| 951 | 952 | |
| 952 | 953 | if (static_lenb <= opt_lenb) opt_lenb = static_lenb; |
| 953 | 954 | |
| 954 | 955 | } else { |
| 955 | 956 | Assert(buf != (char*)0, "lost buf"); |
| @@ -1014,12 +1015,13 @@ | ||
| 1014 | 1015 | int ZLIB_INTERNAL _tr_tally (s, dist, lc) |
| 1015 | 1016 | deflate_state *s; |
| 1016 | 1017 | unsigned dist; /* distance of matched string */ |
| 1017 | 1018 | unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ |
| 1018 | 1019 | { |
| 1019 | - s->d_buf[s->last_lit] = (ush)dist; | |
| 1020 | - s->l_buf[s->last_lit++] = (uch)lc; | |
| 1020 | + s->sym_buf[s->sym_next++] = dist; | |
| 1021 | + s->sym_buf[s->sym_next++] = dist >> 8; | |
| 1022 | + s->sym_buf[s->sym_next++] = lc; | |
| 1021 | 1023 | if (dist == 0) { |
| 1022 | 1024 | /* lc is the unmatched char */ |
| 1023 | 1025 | s->dyn_ltree[lc].Freq++; |
| 1024 | 1026 | } else { |
| 1025 | 1027 | s->matches++; |
| @@ -1030,34 +1032,11 @@ | ||
| 1030 | 1032 | (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); |
| 1031 | 1033 | |
| 1032 | 1034 | s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++; |
| 1033 | 1035 | s->dyn_dtree[d_code(dist)].Freq++; |
| 1034 | 1036 | } |
| 1035 | - | |
| 1036 | -#ifdef TRUNCATE_BLOCK | |
| 1037 | - /* Try to guess if it is profitable to stop the current block here */ | |
| 1038 | - if ((s->last_lit & 0x1fff) == 0 && s->level > 2) { | |
| 1039 | - /* Compute an upper bound for the compressed length */ | |
| 1040 | - ulg out_length = (ulg)s->last_lit*8L; | |
| 1041 | - ulg in_length = (ulg)((long)s->strstart - s->block_start); | |
| 1042 | - int dcode; | |
| 1043 | - for (dcode = 0; dcode < D_CODES; dcode++) { | |
| 1044 | - out_length += (ulg)s->dyn_dtree[dcode].Freq * | |
| 1045 | - (5L+extra_dbits[dcode]); | |
| 1046 | - } | |
| 1047 | - out_length >>= 3; | |
| 1048 | - Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", | |
| 1049 | - s->last_lit, in_length, out_length, | |
| 1050 | - 100L - out_length*100L/in_length)); | |
| 1051 | - if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1; | |
| 1052 | - } | |
| 1053 | -#endif | |
| 1054 | - return (s->last_lit == s->lit_bufsize-1); | |
| 1055 | - /* We avoid equality with lit_bufsize because of wraparound at 64K | |
| 1056 | - * on 16 bit machines and because stored blocks are restricted to | |
| 1057 | - * 64K-1 bytes. | |
| 1058 | - */ | |
| 1037 | + return (s->sym_next == s->sym_end); | |
| 1059 | 1038 | } |
| 1060 | 1039 | |
| 1061 | 1040 | /* =========================================================================== |
| 1062 | 1041 | * Send the block data compressed using the given Huffman trees |
| 1063 | 1042 | */ |
| @@ -1066,17 +1045,18 @@ | ||
| 1066 | 1045 | const ct_data *ltree; /* literal tree */ |
| 1067 | 1046 | const ct_data *dtree; /* distance tree */ |
| 1068 | 1047 | { |
| 1069 | 1048 | unsigned dist; /* distance of matched string */ |
| 1070 | 1049 | int lc; /* match length or unmatched char (if dist == 0) */ |
| 1071 | - unsigned lx = 0; /* running index in l_buf */ | |
| 1050 | + unsigned sx = 0; /* running index in sym_buf */ | |
| 1072 | 1051 | unsigned code; /* the code to send */ |
| 1073 | 1052 | int extra; /* number of extra bits to send */ |
| 1074 | 1053 | |
| 1075 | - if (s->last_lit != 0) do { | |
| 1076 | - dist = s->d_buf[lx]; | |
| 1077 | - lc = s->l_buf[lx++]; | |
| 1054 | + if (s->sym_next != 0) do { | |
| 1055 | + dist = s->sym_buf[sx++] & 0xff; | |
| 1056 | + dist += (unsigned)(s->sym_buf[sx++] & 0xff) << 8; | |
| 1057 | + lc = s->sym_buf[sx++]; | |
| 1078 | 1058 | if (dist == 0) { |
| 1079 | 1059 | send_code(s, lc, ltree); /* send a literal byte */ |
| 1080 | 1060 | Tracecv(isgraph(lc), (stderr," '%c' ", lc)); |
| 1081 | 1061 | } else { |
| 1082 | 1062 | /* Here, lc is the match length - MIN_MATCH */ |
| @@ -1097,56 +1077,55 @@ | ||
| 1097 | 1077 | dist -= (unsigned)base_dist[code]; |
| 1098 | 1078 | send_bits(s, dist, extra); /* send the extra distance bits */ |
| 1099 | 1079 | } |
| 1100 | 1080 | } /* literal or match pair ? */ |
| 1101 | 1081 | |
| 1102 | - /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ | |
| 1103 | - Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, | |
| 1104 | - "pendingBuf overflow"); | |
| 1082 | + /* Check that the overlay between pending_buf and sym_buf is ok: */ | |
| 1083 | + Assert(s->pending < s->lit_bufsize + sx, "pendingBuf overflow"); | |
| 1105 | 1084 | |
| 1106 | - } while (lx < s->last_lit); | |
| 1085 | + } while (sx < s->sym_next); | |
| 1107 | 1086 | |
| 1108 | 1087 | send_code(s, END_BLOCK, ltree); |
| 1109 | 1088 | } |
| 1110 | 1089 | |
| 1111 | 1090 | /* =========================================================================== |
| 1112 | 1091 | * Check if the data type is TEXT or BINARY, using the following algorithm: |
| 1113 | 1092 | * - TEXT if the two conditions below are satisfied: |
| 1114 | 1093 | * a) There are no non-portable control characters belonging to the |
| 1115 | - * "black list" (0..6, 14..25, 28..31). | |
| 1094 | + * "block list" (0..6, 14..25, 28..31). | |
| 1116 | 1095 | * b) There is at least one printable character belonging to the |
| 1117 | - * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). | |
| 1096 | + * "allow list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). | |
| 1118 | 1097 | * - BINARY otherwise. |
| 1119 | 1098 | * - The following partially-portable control characters form a |
| 1120 | 1099 | * "gray list" that is ignored in this detection algorithm: |
| 1121 | 1100 | * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). |
| 1122 | 1101 | * IN assertion: the fields Freq of dyn_ltree are set. |
| 1123 | 1102 | */ |
| 1124 | 1103 | local int detect_data_type(s) |
| 1125 | 1104 | deflate_state *s; |
| 1126 | 1105 | { |
| 1127 | - /* black_mask is the bit mask of black-listed bytes | |
| 1106 | + /* block_mask is the bit mask of block-listed bytes | |
| 1128 | 1107 | * set bits 0..6, 14..25, and 28..31 |
| 1129 | 1108 | * 0xf3ffc07f = binary 11110011111111111100000001111111 |
| 1130 | 1109 | */ |
| 1131 | - unsigned long black_mask = 0xf3ffc07fUL; | |
| 1110 | + unsigned long block_mask = 0xf3ffc07fUL; | |
| 1132 | 1111 | int n; |
| 1133 | 1112 | |
| 1134 | - /* Check for non-textual ("black-listed") bytes. */ | |
| 1135 | - for (n = 0; n <= 31; n++, black_mask >>= 1) | |
| 1136 | - if ((black_mask & 1) && (s->dyn_ltree[n].Freq != 0)) | |
| 1113 | + /* Check for non-textual ("block-listed") bytes. */ | |
| 1114 | + for (n = 0; n <= 31; n++, block_mask >>= 1) | |
| 1115 | + if ((block_mask & 1) && (s->dyn_ltree[n].Freq != 0)) | |
| 1137 | 1116 | return Z_BINARY; |
| 1138 | 1117 | |
| 1139 | - /* Check for textual ("white-listed") bytes. */ | |
| 1118 | + /* Check for textual ("allow-listed") bytes. */ | |
| 1140 | 1119 | if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0 |
| 1141 | 1120 | || s->dyn_ltree[13].Freq != 0) |
| 1142 | 1121 | return Z_TEXT; |
| 1143 | 1122 | for (n = 32; n < LITERALS; n++) |
| 1144 | 1123 | if (s->dyn_ltree[n].Freq != 0) |
| 1145 | 1124 | return Z_TEXT; |
| 1146 | 1125 | |
| 1147 | - /* There are no "black-listed" or "white-listed" bytes: | |
| 1126 | + /* There are no "block-listed" or "allow-listed" bytes: | |
| 1148 | 1127 | * this stream either is empty or has tolerated ("gray-listed") bytes only. |
| 1149 | 1128 | */ |
| 1150 | 1129 | return Z_BINARY; |
| 1151 | 1130 | } |
| 1152 | 1131 | |
| 1153 | 1132 |
| --- compat/zlib/trees.c | |
| +++ compat/zlib/trees.c | |
| @@ -1,7 +1,7 @@ | |
| 1 | /* trees.c -- output deflated data using Huffman coding |
| 2 | * Copyright (C) 1995-2017 Jean-loup Gailly |
| 3 | * detect_data_type() function provided freely by Cosmin Truta, 2006 |
| 4 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 5 | */ |
| 6 | |
| 7 | /* |
| @@ -147,11 +147,11 @@ | |
| 147 | local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes, |
| 148 | int blcodes)); |
| 149 | local void compress_block OF((deflate_state *s, const ct_data *ltree, |
| 150 | const ct_data *dtree)); |
| 151 | local int detect_data_type OF((deflate_state *s)); |
| 152 | local unsigned bi_reverse OF((unsigned value, int length)); |
| 153 | local void bi_windup OF((deflate_state *s)); |
| 154 | local void bi_flush OF((deflate_state *s)); |
| 155 | |
| 156 | #ifdef GEN_TREES_H |
| 157 | local void gen_trees_header OF((void)); |
| @@ -414,11 +414,11 @@ | |
| 414 | for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; |
| 415 | for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; |
| 416 | |
| 417 | s->dyn_ltree[END_BLOCK].Freq = 1; |
| 418 | s->opt_len = s->static_len = 0L; |
| 419 | s->last_lit = s->matches = 0; |
| 420 | } |
| 421 | |
| 422 | #define SMALLEST 1 |
| 423 | /* Index within the heap array of least frequent node in the Huffman tree */ |
| 424 | |
| @@ -868,11 +868,12 @@ | |
| 868 | { |
| 869 | send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */ |
| 870 | bi_windup(s); /* align on byte boundary */ |
| 871 | put_short(s, (ush)stored_len); |
| 872 | put_short(s, (ush)~stored_len); |
| 873 | zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len); |
| 874 | s->pending += stored_len; |
| 875 | #ifdef ZLIB_DEBUG |
| 876 | s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; |
| 877 | s->compressed_len += (stored_len + 4) << 3; |
| 878 | s->bits_sent += 2*16; |
| @@ -945,11 +946,11 @@ | |
| 945 | opt_lenb = (s->opt_len+3+7)>>3; |
| 946 | static_lenb = (s->static_len+3+7)>>3; |
| 947 | |
| 948 | Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", |
| 949 | opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, |
| 950 | s->last_lit)); |
| 951 | |
| 952 | if (static_lenb <= opt_lenb) opt_lenb = static_lenb; |
| 953 | |
| 954 | } else { |
| 955 | Assert(buf != (char*)0, "lost buf"); |
| @@ -1014,12 +1015,13 @@ | |
| 1014 | int ZLIB_INTERNAL _tr_tally (s, dist, lc) |
| 1015 | deflate_state *s; |
| 1016 | unsigned dist; /* distance of matched string */ |
| 1017 | unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ |
| 1018 | { |
| 1019 | s->d_buf[s->last_lit] = (ush)dist; |
| 1020 | s->l_buf[s->last_lit++] = (uch)lc; |
| 1021 | if (dist == 0) { |
| 1022 | /* lc is the unmatched char */ |
| 1023 | s->dyn_ltree[lc].Freq++; |
| 1024 | } else { |
| 1025 | s->matches++; |
| @@ -1030,34 +1032,11 @@ | |
| 1030 | (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); |
| 1031 | |
| 1032 | s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++; |
| 1033 | s->dyn_dtree[d_code(dist)].Freq++; |
| 1034 | } |
| 1035 | |
| 1036 | #ifdef TRUNCATE_BLOCK |
| 1037 | /* Try to guess if it is profitable to stop the current block here */ |
| 1038 | if ((s->last_lit & 0x1fff) == 0 && s->level > 2) { |
| 1039 | /* Compute an upper bound for the compressed length */ |
| 1040 | ulg out_length = (ulg)s->last_lit*8L; |
| 1041 | ulg in_length = (ulg)((long)s->strstart - s->block_start); |
| 1042 | int dcode; |
| 1043 | for (dcode = 0; dcode < D_CODES; dcode++) { |
| 1044 | out_length += (ulg)s->dyn_dtree[dcode].Freq * |
| 1045 | (5L+extra_dbits[dcode]); |
| 1046 | } |
| 1047 | out_length >>= 3; |
| 1048 | Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", |
| 1049 | s->last_lit, in_length, out_length, |
| 1050 | 100L - out_length*100L/in_length)); |
| 1051 | if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1; |
| 1052 | } |
| 1053 | #endif |
| 1054 | return (s->last_lit == s->lit_bufsize-1); |
| 1055 | /* We avoid equality with lit_bufsize because of wraparound at 64K |
| 1056 | * on 16 bit machines and because stored blocks are restricted to |
| 1057 | * 64K-1 bytes. |
| 1058 | */ |
| 1059 | } |
| 1060 | |
| 1061 | /* =========================================================================== |
| 1062 | * Send the block data compressed using the given Huffman trees |
| 1063 | */ |
| @@ -1066,17 +1045,18 @@ | |
| 1066 | const ct_data *ltree; /* literal tree */ |
| 1067 | const ct_data *dtree; /* distance tree */ |
| 1068 | { |
| 1069 | unsigned dist; /* distance of matched string */ |
| 1070 | int lc; /* match length or unmatched char (if dist == 0) */ |
| 1071 | unsigned lx = 0; /* running index in l_buf */ |
| 1072 | unsigned code; /* the code to send */ |
| 1073 | int extra; /* number of extra bits to send */ |
| 1074 | |
| 1075 | if (s->last_lit != 0) do { |
| 1076 | dist = s->d_buf[lx]; |
| 1077 | lc = s->l_buf[lx++]; |
| 1078 | if (dist == 0) { |
| 1079 | send_code(s, lc, ltree); /* send a literal byte */ |
| 1080 | Tracecv(isgraph(lc), (stderr," '%c' ", lc)); |
| 1081 | } else { |
| 1082 | /* Here, lc is the match length - MIN_MATCH */ |
| @@ -1097,56 +1077,55 @@ | |
| 1097 | dist -= (unsigned)base_dist[code]; |
| 1098 | send_bits(s, dist, extra); /* send the extra distance bits */ |
| 1099 | } |
| 1100 | } /* literal or match pair ? */ |
| 1101 | |
| 1102 | /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ |
| 1103 | Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, |
| 1104 | "pendingBuf overflow"); |
| 1105 | |
| 1106 | } while (lx < s->last_lit); |
| 1107 | |
| 1108 | send_code(s, END_BLOCK, ltree); |
| 1109 | } |
| 1110 | |
| 1111 | /* =========================================================================== |
| 1112 | * Check if the data type is TEXT or BINARY, using the following algorithm: |
| 1113 | * - TEXT if the two conditions below are satisfied: |
| 1114 | * a) There are no non-portable control characters belonging to the |
| 1115 | * "black list" (0..6, 14..25, 28..31). |
| 1116 | * b) There is at least one printable character belonging to the |
| 1117 | * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). |
| 1118 | * - BINARY otherwise. |
| 1119 | * - The following partially-portable control characters form a |
| 1120 | * "gray list" that is ignored in this detection algorithm: |
| 1121 | * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). |
| 1122 | * IN assertion: the fields Freq of dyn_ltree are set. |
| 1123 | */ |
| 1124 | local int detect_data_type(s) |
| 1125 | deflate_state *s; |
| 1126 | { |
| 1127 | /* black_mask is the bit mask of black-listed bytes |
| 1128 | * set bits 0..6, 14..25, and 28..31 |
| 1129 | * 0xf3ffc07f = binary 11110011111111111100000001111111 |
| 1130 | */ |
| 1131 | unsigned long black_mask = 0xf3ffc07fUL; |
| 1132 | int n; |
| 1133 | |
| 1134 | /* Check for non-textual ("black-listed") bytes. */ |
| 1135 | for (n = 0; n <= 31; n++, black_mask >>= 1) |
| 1136 | if ((black_mask & 1) && (s->dyn_ltree[n].Freq != 0)) |
| 1137 | return Z_BINARY; |
| 1138 | |
| 1139 | /* Check for textual ("white-listed") bytes. */ |
| 1140 | if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0 |
| 1141 | || s->dyn_ltree[13].Freq != 0) |
| 1142 | return Z_TEXT; |
| 1143 | for (n = 32; n < LITERALS; n++) |
| 1144 | if (s->dyn_ltree[n].Freq != 0) |
| 1145 | return Z_TEXT; |
| 1146 | |
| 1147 | /* There are no "black-listed" or "white-listed" bytes: |
| 1148 | * this stream either is empty or has tolerated ("gray-listed") bytes only. |
| 1149 | */ |
| 1150 | return Z_BINARY; |
| 1151 | } |
| 1152 | |
| 1153 |
| --- compat/zlib/trees.c | |
| +++ compat/zlib/trees.c | |
| @@ -1,7 +1,7 @@ | |
| 1 | /* trees.c -- output deflated data using Huffman coding |
| 2 | * Copyright (C) 1995-2021 Jean-loup Gailly |
| 3 | * detect_data_type() function provided freely by Cosmin Truta, 2006 |
| 4 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 5 | */ |
| 6 | |
| 7 | /* |
| @@ -147,11 +147,11 @@ | |
| 147 | local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes, |
| 148 | int blcodes)); |
| 149 | local void compress_block OF((deflate_state *s, const ct_data *ltree, |
| 150 | const ct_data *dtree)); |
| 151 | local int detect_data_type OF((deflate_state *s)); |
| 152 | local unsigned bi_reverse OF((unsigned code, int len)); |
| 153 | local void bi_windup OF((deflate_state *s)); |
| 154 | local void bi_flush OF((deflate_state *s)); |
| 155 | |
| 156 | #ifdef GEN_TREES_H |
| 157 | local void gen_trees_header OF((void)); |
| @@ -414,11 +414,11 @@ | |
| 414 | for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; |
| 415 | for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; |
| 416 | |
| 417 | s->dyn_ltree[END_BLOCK].Freq = 1; |
| 418 | s->opt_len = s->static_len = 0L; |
| 419 | s->sym_next = s->matches = 0; |
| 420 | } |
| 421 | |
| 422 | #define SMALLEST 1 |
| 423 | /* Index within the heap array of least frequent node in the Huffman tree */ |
| 424 | |
| @@ -868,11 +868,12 @@ | |
| 868 | { |
| 869 | send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */ |
| 870 | bi_windup(s); /* align on byte boundary */ |
| 871 | put_short(s, (ush)stored_len); |
| 872 | put_short(s, (ush)~stored_len); |
| 873 | if (stored_len) |
| 874 | zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len); |
| 875 | s->pending += stored_len; |
| 876 | #ifdef ZLIB_DEBUG |
| 877 | s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; |
| 878 | s->compressed_len += (stored_len + 4) << 3; |
| 879 | s->bits_sent += 2*16; |
| @@ -945,11 +946,11 @@ | |
| 946 | opt_lenb = (s->opt_len+3+7)>>3; |
| 947 | static_lenb = (s->static_len+3+7)>>3; |
| 948 | |
| 949 | Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", |
| 950 | opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, |
| 951 | s->sym_next / 3)); |
| 952 | |
| 953 | if (static_lenb <= opt_lenb) opt_lenb = static_lenb; |
| 954 | |
| 955 | } else { |
| 956 | Assert(buf != (char*)0, "lost buf"); |
| @@ -1014,12 +1015,13 @@ | |
| 1015 | int ZLIB_INTERNAL _tr_tally (s, dist, lc) |
| 1016 | deflate_state *s; |
| 1017 | unsigned dist; /* distance of matched string */ |
| 1018 | unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ |
| 1019 | { |
| 1020 | s->sym_buf[s->sym_next++] = dist; |
| 1021 | s->sym_buf[s->sym_next++] = dist >> 8; |
| 1022 | s->sym_buf[s->sym_next++] = lc; |
| 1023 | if (dist == 0) { |
| 1024 | /* lc is the unmatched char */ |
| 1025 | s->dyn_ltree[lc].Freq++; |
| 1026 | } else { |
| 1027 | s->matches++; |
| @@ -1030,34 +1032,11 @@ | |
| 1032 | (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); |
| 1033 | |
| 1034 | s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++; |
| 1035 | s->dyn_dtree[d_code(dist)].Freq++; |
| 1036 | } |
| 1037 | return (s->sym_next == s->sym_end); |
| 1038 | } |
| 1039 | |
| 1040 | /* =========================================================================== |
| 1041 | * Send the block data compressed using the given Huffman trees |
| 1042 | */ |
| @@ -1066,17 +1045,18 @@ | |
| 1045 | const ct_data *ltree; /* literal tree */ |
| 1046 | const ct_data *dtree; /* distance tree */ |
| 1047 | { |
| 1048 | unsigned dist; /* distance of matched string */ |
| 1049 | int lc; /* match length or unmatched char (if dist == 0) */ |
| 1050 | unsigned sx = 0; /* running index in sym_buf */ |
| 1051 | unsigned code; /* the code to send */ |
| 1052 | int extra; /* number of extra bits to send */ |
| 1053 | |
| 1054 | if (s->sym_next != 0) do { |
| 1055 | dist = s->sym_buf[sx++] & 0xff; |
| 1056 | dist += (unsigned)(s->sym_buf[sx++] & 0xff) << 8; |
| 1057 | lc = s->sym_buf[sx++]; |
| 1058 | if (dist == 0) { |
| 1059 | send_code(s, lc, ltree); /* send a literal byte */ |
| 1060 | Tracecv(isgraph(lc), (stderr," '%c' ", lc)); |
| 1061 | } else { |
| 1062 | /* Here, lc is the match length - MIN_MATCH */ |
| @@ -1097,56 +1077,55 @@ | |
| 1077 | dist -= (unsigned)base_dist[code]; |
| 1078 | send_bits(s, dist, extra); /* send the extra distance bits */ |
| 1079 | } |
| 1080 | } /* literal or match pair ? */ |
| 1081 | |
| 1082 | /* Check that the overlay between pending_buf and sym_buf is ok: */ |
| 1083 | Assert(s->pending < s->lit_bufsize + sx, "pendingBuf overflow"); |
| 1084 | |
| 1085 | } while (sx < s->sym_next); |
| 1086 | |
| 1087 | send_code(s, END_BLOCK, ltree); |
| 1088 | } |
| 1089 | |
| 1090 | /* =========================================================================== |
| 1091 | * Check if the data type is TEXT or BINARY, using the following algorithm: |
| 1092 | * - TEXT if the two conditions below are satisfied: |
| 1093 | * a) There are no non-portable control characters belonging to the |
| 1094 | * "block list" (0..6, 14..25, 28..31). |
| 1095 | * b) There is at least one printable character belonging to the |
| 1096 | * "allow list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). |
| 1097 | * - BINARY otherwise. |
| 1098 | * - The following partially-portable control characters form a |
| 1099 | * "gray list" that is ignored in this detection algorithm: |
| 1100 | * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). |
| 1101 | * IN assertion: the fields Freq of dyn_ltree are set. |
| 1102 | */ |
| 1103 | local int detect_data_type(s) |
| 1104 | deflate_state *s; |
| 1105 | { |
| 1106 | /* block_mask is the bit mask of block-listed bytes |
| 1107 | * set bits 0..6, 14..25, and 28..31 |
| 1108 | * 0xf3ffc07f = binary 11110011111111111100000001111111 |
| 1109 | */ |
| 1110 | unsigned long block_mask = 0xf3ffc07fUL; |
| 1111 | int n; |
| 1112 | |
| 1113 | /* Check for non-textual ("block-listed") bytes. */ |
| 1114 | for (n = 0; n <= 31; n++, block_mask >>= 1) |
| 1115 | if ((block_mask & 1) && (s->dyn_ltree[n].Freq != 0)) |
| 1116 | return Z_BINARY; |
| 1117 | |
| 1118 | /* Check for textual ("allow-listed") bytes. */ |
| 1119 | if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0 |
| 1120 | || s->dyn_ltree[13].Freq != 0) |
| 1121 | return Z_TEXT; |
| 1122 | for (n = 32; n < LITERALS; n++) |
| 1123 | if (s->dyn_ltree[n].Freq != 0) |
| 1124 | return Z_TEXT; |
| 1125 | |
| 1126 | /* There are no "block-listed" or "allow-listed" bytes: |
| 1127 | * this stream either is empty or has tolerated ("gray-listed") bytes only. |
| 1128 | */ |
| 1129 | return Z_BINARY; |
| 1130 | } |
| 1131 | |
| 1132 |
| --- compat/zlib/win32/Makefile.bor | ||
| +++ compat/zlib/win32/Makefile.bor | ||
| @@ -1,11 +1,10 @@ | ||
| 1 | 1 | # Makefile for zlib |
| 2 | 2 | # Borland C++ for Win32 |
| 3 | 3 | # |
| 4 | 4 | # Usage: |
| 5 | 5 | # make -f win32/Makefile.bor |
| 6 | -# make -f win32/Makefile.bor LOCAL_ZLIB=-DASMV OBJA=match.obj OBJPA=+match.obj | |
| 7 | 6 | |
| 8 | 7 | # ------------ Borland C++ ------------ |
| 9 | 8 | |
| 10 | 9 | # Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7) |
| 11 | 10 | # should be added to the environment via "set LOCAL_ZLIB=-DFOO" or |
| 12 | 11 |
| --- compat/zlib/win32/Makefile.bor | |
| +++ compat/zlib/win32/Makefile.bor | |
| @@ -1,11 +1,10 @@ | |
| 1 | # Makefile for zlib |
| 2 | # Borland C++ for Win32 |
| 3 | # |
| 4 | # Usage: |
| 5 | # make -f win32/Makefile.bor |
| 6 | # make -f win32/Makefile.bor LOCAL_ZLIB=-DASMV OBJA=match.obj OBJPA=+match.obj |
| 7 | |
| 8 | # ------------ Borland C++ ------------ |
| 9 | |
| 10 | # Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7) |
| 11 | # should be added to the environment via "set LOCAL_ZLIB=-DFOO" or |
| 12 |
| --- compat/zlib/win32/Makefile.bor | |
| +++ compat/zlib/win32/Makefile.bor | |
| @@ -1,11 +1,10 @@ | |
| 1 | # Makefile for zlib |
| 2 | # Borland C++ for Win32 |
| 3 | # |
| 4 | # Usage: |
| 5 | # make -f win32/Makefile.bor |
| 6 | |
| 7 | # ------------ Borland C++ ------------ |
| 8 | |
| 9 | # Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7) |
| 10 | # should be added to the environment via "set LOCAL_ZLIB=-DFOO" or |
| 11 |
| --- compat/zlib/win32/Makefile.gcc | ||
| +++ compat/zlib/win32/Makefile.gcc | ||
| @@ -9,14 +9,10 @@ | ||
| 9 | 9 | |
| 10 | 10 | # To compile, or to compile and test, type from the top level zlib directory: |
| 11 | 11 | # |
| 12 | 12 | # make -fwin32/Makefile.gcc; make test testdll -fwin32/Makefile.gcc |
| 13 | 13 | # |
| 14 | -# To use the asm code, type: | |
| 15 | -# cp contrib/asm?86/match.S ./match.S | |
| 16 | -# make LOC=-DASMV OBJA=match.o -fwin32/Makefile.gcc | |
| 17 | -# | |
| 18 | 14 | # To install libz.a, zconf.h and zlib.h in the system directories, type: |
| 19 | 15 | # |
| 20 | 16 | # make install -fwin32/Makefile.gcc |
| 21 | 17 | # |
| 22 | 18 | # BINARY_PATH, INCLUDE_PATH and LIBRARY_PATH must be set. |
| @@ -36,11 +32,10 @@ | ||
| 36 | 32 | # |
| 37 | 33 | # Set to 1 if shared object needs to be installed |
| 38 | 34 | # |
| 39 | 35 | SHARED_MODE=0 |
| 40 | 36 | |
| 41 | -#LOC = -DASMV | |
| 42 | 37 | #LOC = -DZLIB_DEBUG -g |
| 43 | 38 | |
| 44 | 39 | PREFIX = |
| 45 | 40 | CC = $(PREFIX)gcc |
| 46 | 41 | CFLAGS = $(LOC) -O3 -Wall |
| 47 | 42 |
| --- compat/zlib/win32/Makefile.gcc | |
| +++ compat/zlib/win32/Makefile.gcc | |
| @@ -9,14 +9,10 @@ | |
| 9 | |
| 10 | # To compile, or to compile and test, type from the top level zlib directory: |
| 11 | # |
| 12 | # make -fwin32/Makefile.gcc; make test testdll -fwin32/Makefile.gcc |
| 13 | # |
| 14 | # To use the asm code, type: |
| 15 | # cp contrib/asm?86/match.S ./match.S |
| 16 | # make LOC=-DASMV OBJA=match.o -fwin32/Makefile.gcc |
| 17 | # |
| 18 | # To install libz.a, zconf.h and zlib.h in the system directories, type: |
| 19 | # |
| 20 | # make install -fwin32/Makefile.gcc |
| 21 | # |
| 22 | # BINARY_PATH, INCLUDE_PATH and LIBRARY_PATH must be set. |
| @@ -36,11 +32,10 @@ | |
| 36 | # |
| 37 | # Set to 1 if shared object needs to be installed |
| 38 | # |
| 39 | SHARED_MODE=0 |
| 40 | |
| 41 | #LOC = -DASMV |
| 42 | #LOC = -DZLIB_DEBUG -g |
| 43 | |
| 44 | PREFIX = |
| 45 | CC = $(PREFIX)gcc |
| 46 | CFLAGS = $(LOC) -O3 -Wall |
| 47 |
| --- compat/zlib/win32/Makefile.gcc | |
| +++ compat/zlib/win32/Makefile.gcc | |
| @@ -9,14 +9,10 @@ | |
| 9 | |
| 10 | # To compile, or to compile and test, type from the top level zlib directory: |
| 11 | # |
| 12 | # make -fwin32/Makefile.gcc; make test testdll -fwin32/Makefile.gcc |
| 13 | # |
| 14 | # To install libz.a, zconf.h and zlib.h in the system directories, type: |
| 15 | # |
| 16 | # make install -fwin32/Makefile.gcc |
| 17 | # |
| 18 | # BINARY_PATH, INCLUDE_PATH and LIBRARY_PATH must be set. |
| @@ -36,11 +32,10 @@ | |
| 32 | # |
| 33 | # Set to 1 if shared object needs to be installed |
| 34 | # |
| 35 | SHARED_MODE=0 |
| 36 | |
| 37 | #LOC = -DZLIB_DEBUG -g |
| 38 | |
| 39 | PREFIX = |
| 40 | CC = $(PREFIX)gcc |
| 41 | CFLAGS = $(LOC) -O3 -Wall |
| 42 |
| --- compat/zlib/win32/Makefile.msc | ||
| +++ compat/zlib/win32/Makefile.msc | ||
| @@ -2,14 +2,10 @@ | ||
| 2 | 2 | # zlib is copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler |
| 3 | 3 | # |
| 4 | 4 | # Usage: |
| 5 | 5 | # nmake -f win32/Makefile.msc (standard build) |
| 6 | 6 | # nmake -f win32/Makefile.msc LOC=-DFOO (nonstandard build) |
| 7 | -# nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" \ | |
| 8 | -# OBJA="inffas32.obj match686.obj" (use ASM code, x86) | |
| 9 | -# nmake -f win32/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF -I." \ | |
| 10 | -# OBJA="inffasx64.obj gvmat64.obj inffas8664.obj" (use ASM code, x64) | |
| 11 | 7 | |
| 12 | 8 | # The toplevel directory of the source tree. |
| 13 | 9 | # |
| 14 | 10 | TOP = . |
| 15 | 11 | |
| 16 | 12 |
| --- compat/zlib/win32/Makefile.msc | |
| +++ compat/zlib/win32/Makefile.msc | |
| @@ -2,14 +2,10 @@ | |
| 2 | # zlib is copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler |
| 3 | # |
| 4 | # Usage: |
| 5 | # nmake -f win32/Makefile.msc (standard build) |
| 6 | # nmake -f win32/Makefile.msc LOC=-DFOO (nonstandard build) |
| 7 | # nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" \ |
| 8 | # OBJA="inffas32.obj match686.obj" (use ASM code, x86) |
| 9 | # nmake -f win32/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF -I." \ |
| 10 | # OBJA="inffasx64.obj gvmat64.obj inffas8664.obj" (use ASM code, x64) |
| 11 | |
| 12 | # The toplevel directory of the source tree. |
| 13 | # |
| 14 | TOP = . |
| 15 | |
| 16 |
| --- compat/zlib/win32/Makefile.msc | |
| +++ compat/zlib/win32/Makefile.msc | |
| @@ -2,14 +2,10 @@ | |
| 2 | # zlib is copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler |
| 3 | # |
| 4 | # Usage: |
| 5 | # nmake -f win32/Makefile.msc (standard build) |
| 6 | # nmake -f win32/Makefile.msc LOC=-DFOO (nonstandard build) |
| 7 | |
| 8 | # The toplevel directory of the source tree. |
| 9 | # |
| 10 | TOP = . |
| 11 | |
| 12 |
| --- compat/zlib/win32/README-WIN32.txt | ||
| +++ compat/zlib/win32/README-WIN32.txt | ||
| @@ -1,8 +1,8 @@ | ||
| 1 | 1 | ZLIB DATA COMPRESSION LIBRARY |
| 2 | 2 | |
| 3 | -zlib 1.2.11 is a general purpose data compression library. All the code is | |
| 3 | +zlib 1.2.12 is a general purpose data compression library. All the code is | |
| 4 | 4 | thread safe. The data format used by the zlib library is described by RFCs |
| 5 | 5 | (Request for Comments) 1950 to 1952 in the files |
| 6 | 6 | http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) |
| 7 | 7 | and rfc1952.txt (gzip format). |
| 8 | 8 | |
| @@ -20,11 +20,11 @@ | ||
| 20 | 20 | before asking for help. |
| 21 | 21 | |
| 22 | 22 | |
| 23 | 23 | Manifest: |
| 24 | 24 | |
| 25 | -The package zlib-1.2.11-win32-x86.zip will contain the following files: | |
| 25 | +The package zlib-1.2.12-win32-x86.zip will contain the following files: | |
| 26 | 26 | |
| 27 | 27 | README-WIN32.txt This document |
| 28 | 28 | ChangeLog Changes since previous zlib packages |
| 29 | 29 | DLL_FAQ.txt Frequently asked questions about zlib1.dll |
| 30 | 30 | zlib.3.pdf Documentation of this library in Adobe Acrobat format |
| 31 | 31 |
| --- compat/zlib/win32/README-WIN32.txt | |
| +++ compat/zlib/win32/README-WIN32.txt | |
| @@ -1,8 +1,8 @@ | |
| 1 | ZLIB DATA COMPRESSION LIBRARY |
| 2 | |
| 3 | zlib 1.2.11 is a general purpose data compression library. All the code is |
| 4 | thread safe. The data format used by the zlib library is described by RFCs |
| 5 | (Request for Comments) 1950 to 1952 in the files |
| 6 | http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) |
| 7 | and rfc1952.txt (gzip format). |
| 8 | |
| @@ -20,11 +20,11 @@ | |
| 20 | before asking for help. |
| 21 | |
| 22 | |
| 23 | Manifest: |
| 24 | |
| 25 | The package zlib-1.2.11-win32-x86.zip will contain the following files: |
| 26 | |
| 27 | README-WIN32.txt This document |
| 28 | ChangeLog Changes since previous zlib packages |
| 29 | DLL_FAQ.txt Frequently asked questions about zlib1.dll |
| 30 | zlib.3.pdf Documentation of this library in Adobe Acrobat format |
| 31 |
| --- compat/zlib/win32/README-WIN32.txt | |
| +++ compat/zlib/win32/README-WIN32.txt | |
| @@ -1,8 +1,8 @@ | |
| 1 | ZLIB DATA COMPRESSION LIBRARY |
| 2 | |
| 3 | zlib 1.2.12 is a general purpose data compression library. All the code is |
| 4 | thread safe. The data format used by the zlib library is described by RFCs |
| 5 | (Request for Comments) 1950 to 1952 in the files |
| 6 | http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) |
| 7 | and rfc1952.txt (gzip format). |
| 8 | |
| @@ -20,11 +20,11 @@ | |
| 20 | before asking for help. |
| 21 | |
| 22 | |
| 23 | Manifest: |
| 24 | |
| 25 | The package zlib-1.2.12-win32-x86.zip will contain the following files: |
| 26 | |
| 27 | README-WIN32.txt This document |
| 28 | ChangeLog Changes since previous zlib packages |
| 29 | DLL_FAQ.txt Frequently asked questions about zlib1.dll |
| 30 | zlib.3.pdf Documentation of this library in Adobe Acrobat format |
| 31 |
| --- compat/zlib/win32/zlib.def | ||
| +++ compat/zlib/win32/zlib.def | ||
| @@ -67,17 +67,20 @@ | ||
| 67 | 67 | gzseek64 |
| 68 | 68 | gztell64 |
| 69 | 69 | gzoffset64 |
| 70 | 70 | adler32_combine64 |
| 71 | 71 | crc32_combine64 |
| 72 | + crc32_combine_gen64 | |
| 72 | 73 | ; checksum functions |
| 73 | 74 | adler32 |
| 74 | 75 | adler32_z |
| 75 | 76 | crc32 |
| 76 | 77 | crc32_z |
| 77 | 78 | adler32_combine |
| 78 | 79 | crc32_combine |
| 80 | + crc32_combine_gen | |
| 81 | + crc32_combine_op | |
| 79 | 82 | ; various hacks, don't look :) |
| 80 | 83 | deflateInit_ |
| 81 | 84 | deflateInit2_ |
| 82 | 85 | inflateInit_ |
| 83 | 86 | inflateInit2_ |
| 84 | 87 |
| --- compat/zlib/win32/zlib.def | |
| +++ compat/zlib/win32/zlib.def | |
| @@ -67,17 +67,20 @@ | |
| 67 | gzseek64 |
| 68 | gztell64 |
| 69 | gzoffset64 |
| 70 | adler32_combine64 |
| 71 | crc32_combine64 |
| 72 | ; checksum functions |
| 73 | adler32 |
| 74 | adler32_z |
| 75 | crc32 |
| 76 | crc32_z |
| 77 | adler32_combine |
| 78 | crc32_combine |
| 79 | ; various hacks, don't look :) |
| 80 | deflateInit_ |
| 81 | deflateInit2_ |
| 82 | inflateInit_ |
| 83 | inflateInit2_ |
| 84 |
| --- compat/zlib/win32/zlib.def | |
| +++ compat/zlib/win32/zlib.def | |
| @@ -67,17 +67,20 @@ | |
| 67 | gzseek64 |
| 68 | gztell64 |
| 69 | gzoffset64 |
| 70 | adler32_combine64 |
| 71 | crc32_combine64 |
| 72 | crc32_combine_gen64 |
| 73 | ; checksum functions |
| 74 | adler32 |
| 75 | adler32_z |
| 76 | crc32 |
| 77 | crc32_z |
| 78 | adler32_combine |
| 79 | crc32_combine |
| 80 | crc32_combine_gen |
| 81 | crc32_combine_op |
| 82 | ; various hacks, don't look :) |
| 83 | deflateInit_ |
| 84 | deflateInit2_ |
| 85 | inflateInit_ |
| 86 | inflateInit2_ |
| 87 |
+2
-2
| --- compat/zlib/zconf.h | ||
| +++ compat/zlib/zconf.h | ||
| @@ -429,15 +429,15 @@ | ||
| 429 | 429 | typedef Z_U4 z_crc_t; |
| 430 | 430 | #else |
| 431 | 431 | typedef unsigned long z_crc_t; |
| 432 | 432 | #endif |
| 433 | 433 | |
| 434 | -#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ | |
| 434 | +#ifdef HAVE_UNISTD_H /* was set to #if 1 by ./configure */ | |
| 435 | 435 | # define Z_HAVE_UNISTD_H |
| 436 | 436 | #endif |
| 437 | 437 | |
| 438 | -#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */ | |
| 438 | +#if 1 /* was set to #if 1 by ./configure */ | |
| 439 | 439 | # define Z_HAVE_STDARG_H |
| 440 | 440 | #endif |
| 441 | 441 | |
| 442 | 442 | #ifdef STDC |
| 443 | 443 | # ifndef Z_SOLO |
| 444 | 444 |
| --- compat/zlib/zconf.h | |
| +++ compat/zlib/zconf.h | |
| @@ -429,15 +429,15 @@ | |
| 429 | typedef Z_U4 z_crc_t; |
| 430 | #else |
| 431 | typedef unsigned long z_crc_t; |
| 432 | #endif |
| 433 | |
| 434 | #ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ |
| 435 | # define Z_HAVE_UNISTD_H |
| 436 | #endif |
| 437 | |
| 438 | #ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */ |
| 439 | # define Z_HAVE_STDARG_H |
| 440 | #endif |
| 441 | |
| 442 | #ifdef STDC |
| 443 | # ifndef Z_SOLO |
| 444 |
| --- compat/zlib/zconf.h | |
| +++ compat/zlib/zconf.h | |
| @@ -429,15 +429,15 @@ | |
| 429 | typedef Z_U4 z_crc_t; |
| 430 | #else |
| 431 | typedef unsigned long z_crc_t; |
| 432 | #endif |
| 433 | |
| 434 | #ifdef HAVE_UNISTD_H /* was set to #if 1 by ./configure */ |
| 435 | # define Z_HAVE_UNISTD_H |
| 436 | #endif |
| 437 | |
| 438 | #if 1 /* was set to #if 1 by ./configure */ |
| 439 | # define Z_HAVE_STDARG_H |
| 440 | #endif |
| 441 | |
| 442 | #ifdef STDC |
| 443 | # ifndef Z_SOLO |
| 444 |
+3
-3
| --- compat/zlib/zlib.3 | ||
| +++ compat/zlib/zlib.3 | ||
| @@ -1,6 +1,6 @@ | ||
| 1 | -.TH ZLIB 3 "15 Jan 2017" | |
| 1 | +.TH ZLIB 3 "27 Mar 2022" | |
| 2 | 2 | .SH NAME |
| 3 | 3 | zlib \- compression/decompression library |
| 4 | 4 | .SH SYNOPSIS |
| 5 | 5 | [see |
| 6 | 6 | .I zlib.h |
| @@ -103,13 +103,13 @@ | ||
| 103 | 103 | .LP |
| 104 | 104 | before asking for help. |
| 105 | 105 | Send questions and/or comments to [email protected], |
| 106 | 106 | or (for the Windows DLL version) to Gilles Vollant ([email protected]). |
| 107 | 107 | .SH AUTHORS AND LICENSE |
| 108 | -Version 1.2.11 | |
| 108 | +Version 1.2.12 | |
| 109 | 109 | .LP |
| 110 | -Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler | |
| 110 | +Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler | |
| 111 | 111 | .LP |
| 112 | 112 | This software is provided 'as-is', without any express or implied |
| 113 | 113 | warranty. In no event will the authors be held liable for any damages |
| 114 | 114 | arising from the use of this software. |
| 115 | 115 | .LP |
| 116 | 116 |
| --- compat/zlib/zlib.3 | |
| +++ compat/zlib/zlib.3 | |
| @@ -1,6 +1,6 @@ | |
| 1 | .TH ZLIB 3 "15 Jan 2017" |
| 2 | .SH NAME |
| 3 | zlib \- compression/decompression library |
| 4 | .SH SYNOPSIS |
| 5 | [see |
| 6 | .I zlib.h |
| @@ -103,13 +103,13 @@ | |
| 103 | .LP |
| 104 | before asking for help. |
| 105 | Send questions and/or comments to [email protected], |
| 106 | or (for the Windows DLL version) to Gilles Vollant ([email protected]). |
| 107 | .SH AUTHORS AND LICENSE |
| 108 | Version 1.2.11 |
| 109 | .LP |
| 110 | Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler |
| 111 | .LP |
| 112 | This software is provided 'as-is', without any express or implied |
| 113 | warranty. In no event will the authors be held liable for any damages |
| 114 | arising from the use of this software. |
| 115 | .LP |
| 116 |
| --- compat/zlib/zlib.3 | |
| +++ compat/zlib/zlib.3 | |
| @@ -1,6 +1,6 @@ | |
| 1 | .TH ZLIB 3 "27 Mar 2022" |
| 2 | .SH NAME |
| 3 | zlib \- compression/decompression library |
| 4 | .SH SYNOPSIS |
| 5 | [see |
| 6 | .I zlib.h |
| @@ -103,13 +103,13 @@ | |
| 103 | .LP |
| 104 | before asking for help. |
| 105 | Send questions and/or comments to [email protected], |
| 106 | or (for the Windows DLL version) to Gilles Vollant ([email protected]). |
| 107 | .SH AUTHORS AND LICENSE |
| 108 | Version 1.2.12 |
| 109 | .LP |
| 110 | Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler |
| 111 | .LP |
| 112 | This software is provided 'as-is', without any express or implied |
| 113 | warranty. In no event will the authors be held liable for any damages |
| 114 | arising from the use of this software. |
| 115 | .LP |
| 116 |
| --- compat/zlib/zlib.3.pdf | ||
| +++ compat/zlib/zlib.3.pdf | ||
| cannot compute difference between binary files | ||
| 1 | 1 |
| --- compat/zlib/zlib.3.pdf | |
| +++ compat/zlib/zlib.3.pdf | |
| 0 | annot compute difference between binary files |
| 1 |
| --- compat/zlib/zlib.3.pdf | |
| +++ compat/zlib/zlib.3.pdf | |
| 0 | annot compute difference between binary files |
| 1 |
+123
-100
| --- compat/zlib/zlib.h | ||
| +++ compat/zlib/zlib.h | ||
| @@ -1,9 +1,9 @@ | ||
| 1 | 1 | /* zlib.h -- interface of the 'zlib' general purpose compression library |
| 2 | - version 1.2.11, January 15th, 2017 | |
| 2 | + version 1.2.12, March 11th, 2022 | |
| 3 | 3 | |
| 4 | - Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler | |
| 4 | + Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler | |
| 5 | 5 | |
| 6 | 6 | This software is provided 'as-is', without any express or implied |
| 7 | 7 | warranty. In no event will the authors be held liable for any damages |
| 8 | 8 | arising from the use of this software. |
| 9 | 9 | |
| @@ -35,15 +35,15 @@ | ||
| 35 | 35 | |
| 36 | 36 | #ifdef __cplusplus |
| 37 | 37 | extern "C" { |
| 38 | 38 | #endif |
| 39 | 39 | |
| 40 | -#define ZLIB_VERSION "1.2.11" | |
| 41 | -#define ZLIB_VERNUM 0x12b0 | |
| 40 | +#define ZLIB_VERSION "1.2.12" | |
| 41 | +#define ZLIB_VERNUM 0x12c0 | |
| 42 | 42 | #define ZLIB_VER_MAJOR 1 |
| 43 | 43 | #define ZLIB_VER_MINOR 2 |
| 44 | -#define ZLIB_VER_REVISION 11 | |
| 44 | +#define ZLIB_VER_REVISION 12 | |
| 45 | 45 | #define ZLIB_VER_SUBREVISION 0 |
| 46 | 46 | |
| 47 | 47 | /* |
| 48 | 48 | The 'zlib' compression library provides in-memory compression and |
| 49 | 49 | decompression functions, including integrity checks of the uncompressed data. |
| @@ -541,12 +541,11 @@ | ||
| 541 | 541 | int windowBits, |
| 542 | 542 | int memLevel, |
| 543 | 543 | int strategy)); |
| 544 | 544 | |
| 545 | 545 | This is another version of deflateInit with more compression options. The |
| 546 | - fields next_in, zalloc, zfree and opaque must be initialized before by the | |
| 547 | - caller. | |
| 546 | + fields zalloc, zfree and opaque must be initialized before by the caller. | |
| 548 | 547 | |
| 549 | 548 | The method parameter is the compression method. It must be Z_DEFLATED in |
| 550 | 549 | this version of the library. |
| 551 | 550 | |
| 552 | 551 | The windowBits parameter is the base two logarithm of the window size |
| @@ -710,15 +709,16 @@ | ||
| 710 | 709 | Dynamically update the compression level and compression strategy. The |
| 711 | 710 | interpretation of level and strategy is as in deflateInit2(). This can be |
| 712 | 711 | used to switch between compression and straight copy of the input data, or |
| 713 | 712 | to switch to a different kind of input data requiring a different strategy. |
| 714 | 713 | If the compression approach (which is a function of the level) or the |
| 715 | - strategy is changed, and if any input has been consumed in a previous | |
| 716 | - deflate() call, then the input available so far is compressed with the old | |
| 717 | - level and strategy using deflate(strm, Z_BLOCK). There are three approaches | |
| 718 | - for the compression levels 0, 1..3, and 4..9 respectively. The new level | |
| 719 | - and strategy will take effect at the next call of deflate(). | |
| 714 | + strategy is changed, and if there have been any deflate() calls since the | |
| 715 | + state was initialized or reset, then the input available so far is | |
| 716 | + compressed with the old level and strategy using deflate(strm, Z_BLOCK). | |
| 717 | + There are three approaches for the compression levels 0, 1..3, and 4..9 | |
| 718 | + respectively. The new level and strategy will take effect at the next call | |
| 719 | + of deflate(). | |
| 720 | 720 | |
| 721 | 721 | If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does |
| 722 | 722 | not have enough output space to complete, then the parameter change will not |
| 723 | 723 | take effect. In this case, deflateParams() can be called again with the |
| 724 | 724 | same parameters and more output space to try again. |
| @@ -863,13 +863,15 @@ | ||
| 863 | 863 | windowBits can also be greater than 15 for optional gzip decoding. Add |
| 864 | 864 | 32 to windowBits to enable zlib and gzip decoding with automatic header |
| 865 | 865 | detection, or add 16 to decode only the gzip format (the zlib format will |
| 866 | 866 | return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a |
| 867 | 867 | CRC-32 instead of an Adler-32. Unlike the gunzip utility and gzread() (see |
| 868 | - below), inflate() will not automatically decode concatenated gzip streams. | |
| 869 | - inflate() will return Z_STREAM_END at the end of the gzip stream. The state | |
| 870 | - would need to be reset to continue decoding a subsequent gzip stream. | |
| 868 | + below), inflate() will *not* automatically decode concatenated gzip members. | |
| 869 | + inflate() will return Z_STREAM_END at the end of the gzip member. The state | |
| 870 | + would need to be reset to continue decoding a subsequent gzip member. This | |
| 871 | + *must* be done if there is more data after a gzip member, in order for the | |
| 872 | + decompression to be compliant with the gzip standard (RFC 1952). | |
| 871 | 873 | |
| 872 | 874 | inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough |
| 873 | 875 | memory, Z_VERSION_ERROR if the zlib library version is incompatible with the |
| 874 | 876 | version assumed by the caller, or Z_STREAM_ERROR if the parameters are |
| 875 | 877 | invalid, such as a null pointer to the structure. msg is set to null if |
| @@ -1300,18 +1302,18 @@ | ||
| 1300 | 1302 | typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */ |
| 1301 | 1303 | |
| 1302 | 1304 | /* |
| 1303 | 1305 | ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); |
| 1304 | 1306 | |
| 1305 | - Opens a gzip (.gz) file for reading or writing. The mode parameter is as | |
| 1306 | - in fopen ("rb" or "wb") but can also include a compression level ("wb9") or | |
| 1307 | - a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only | |
| 1308 | - compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F' | |
| 1309 | - for fixed code compression as in "wb9F". (See the description of | |
| 1310 | - deflateInit2 for more information about the strategy parameter.) 'T' will | |
| 1311 | - request transparent writing or appending with no compression and not using | |
| 1312 | - the gzip format. | |
| 1307 | + Open the gzip (.gz) file at path for reading and decompressing, or | |
| 1308 | + compressing and writing. The mode parameter is as in fopen ("rb" or "wb") | |
| 1309 | + but can also include a compression level ("wb9") or a strategy: 'f' for | |
| 1310 | + filtered data as in "wb6f", 'h' for Huffman-only compression as in "wb1h", | |
| 1311 | + 'R' for run-length encoding as in "wb1R", or 'F' for fixed code compression | |
| 1312 | + as in "wb9F". (See the description of deflateInit2 for more information | |
| 1313 | + about the strategy parameter.) 'T' will request transparent writing or | |
| 1314 | + appending with no compression and not using the gzip format. | |
| 1313 | 1315 | |
| 1314 | 1316 | "a" can be used instead of "w" to request that the gzip stream that will |
| 1315 | 1317 | be written be appended to the file. "+" will result in an error, since |
| 1316 | 1318 | reading and writing to the same gzip file is not supported. The addition of |
| 1317 | 1319 | "x" when writing will create the file exclusively, which fails if the file |
| @@ -1337,13 +1339,13 @@ | ||
| 1337 | 1339 | file could not be opened. |
| 1338 | 1340 | */ |
| 1339 | 1341 | |
| 1340 | 1342 | ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); |
| 1341 | 1343 | /* |
| 1342 | - gzdopen associates a gzFile with the file descriptor fd. File descriptors | |
| 1343 | - are obtained from calls like open, dup, creat, pipe or fileno (if the file | |
| 1344 | - has been previously opened with fopen). The mode parameter is as in gzopen. | |
| 1344 | + Associate a gzFile with the file descriptor fd. File descriptors are | |
| 1345 | + obtained from calls like open, dup, creat, pipe or fileno (if the file has | |
| 1346 | + been previously opened with fopen). The mode parameter is as in gzopen. | |
| 1345 | 1347 | |
| 1346 | 1348 | The next call of gzclose on the returned gzFile will also close the file |
| 1347 | 1349 | descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor |
| 1348 | 1350 | fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd, |
| 1349 | 1351 | mode);. The duplicated descriptor should be saved to avoid a leak, since |
| @@ -1360,38 +1362,38 @@ | ||
| 1360 | 1362 | will not detect if fd is invalid (unless fd is -1). |
| 1361 | 1363 | */ |
| 1362 | 1364 | |
| 1363 | 1365 | ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size)); |
| 1364 | 1366 | /* |
| 1365 | - Set the internal buffer size used by this library's functions. The | |
| 1366 | - default buffer size is 8192 bytes. This function must be called after | |
| 1367 | - gzopen() or gzdopen(), and before any other calls that read or write the | |
| 1368 | - file. The buffer memory allocation is always deferred to the first read or | |
| 1369 | - write. Three times that size in buffer space is allocated. A larger buffer | |
| 1370 | - size of, for example, 64K or 128K bytes will noticeably increase the speed | |
| 1371 | - of decompression (reading). | |
| 1367 | + Set the internal buffer size used by this library's functions for file to | |
| 1368 | + size. The default buffer size is 8192 bytes. This function must be called | |
| 1369 | + after gzopen() or gzdopen(), and before any other calls that read or write | |
| 1370 | + the file. The buffer memory allocation is always deferred to the first read | |
| 1371 | + or write. Three times that size in buffer space is allocated. A larger | |
| 1372 | + buffer size of, for example, 64K or 128K bytes will noticeably increase the | |
| 1373 | + speed of decompression (reading). | |
| 1372 | 1374 | |
| 1373 | 1375 | The new buffer size also affects the maximum length for gzprintf(). |
| 1374 | 1376 | |
| 1375 | 1377 | gzbuffer() returns 0 on success, or -1 on failure, such as being called |
| 1376 | 1378 | too late. |
| 1377 | 1379 | */ |
| 1378 | 1380 | |
| 1379 | 1381 | ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); |
| 1380 | 1382 | /* |
| 1381 | - Dynamically update the compression level or strategy. See the description | |
| 1382 | - of deflateInit2 for the meaning of these parameters. Previously provided | |
| 1383 | - data is flushed before the parameter change. | |
| 1383 | + Dynamically update the compression level and strategy for file. See the | |
| 1384 | + description of deflateInit2 for the meaning of these parameters. Previously | |
| 1385 | + provided data is flushed before applying the parameter changes. | |
| 1384 | 1386 | |
| 1385 | 1387 | gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not |
| 1386 | 1388 | opened for writing, Z_ERRNO if there is an error writing the flushed data, |
| 1387 | 1389 | or Z_MEM_ERROR if there is a memory allocation error. |
| 1388 | 1390 | */ |
| 1389 | 1391 | |
| 1390 | 1392 | ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); |
| 1391 | 1393 | /* |
| 1392 | - Reads the given number of uncompressed bytes from the compressed file. If | |
| 1394 | + Read and decompress up to len uncompressed bytes from file into buf. If | |
| 1393 | 1395 | the input file is not in gzip format, gzread copies the given number of |
| 1394 | 1396 | bytes into the buffer directly from the file. |
| 1395 | 1397 | |
| 1396 | 1398 | After reaching the end of a gzip stream in the input, gzread will continue |
| 1397 | 1399 | to read, looking for another gzip stream. Any number of gzip streams may be |
| @@ -1418,15 +1420,15 @@ | ||
| 1418 | 1420 | */ |
| 1419 | 1421 | |
| 1420 | 1422 | ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems, |
| 1421 | 1423 | gzFile file)); |
| 1422 | 1424 | /* |
| 1423 | - Read up to nitems items of size size from file to buf, otherwise operating | |
| 1424 | - as gzread() does. This duplicates the interface of stdio's fread(), with | |
| 1425 | - size_t request and return types. If the library defines size_t, then | |
| 1426 | - z_size_t is identical to size_t. If not, then z_size_t is an unsigned | |
| 1427 | - integer type that can contain a pointer. | |
| 1425 | + Read and decompress up to nitems items of size size from file into buf, | |
| 1426 | + otherwise operating as gzread() does. This duplicates the interface of | |
| 1427 | + stdio's fread(), with size_t request and return types. If the library | |
| 1428 | + defines size_t, then z_size_t is identical to size_t. If not, then z_size_t | |
| 1429 | + is an unsigned integer type that can contain a pointer. | |
| 1428 | 1430 | |
| 1429 | 1431 | gzfread() returns the number of full items read of size size, or zero if |
| 1430 | 1432 | the end of the file was reached and a full item could not be read, or if |
| 1431 | 1433 | there was an error. gzerror() must be consulted if zero is returned in |
| 1432 | 1434 | order to determine if there was an error. If the multiplication of size and |
| @@ -1441,22 +1443,20 @@ | ||
| 1441 | 1443 | is the same as the behavior of fread() implementations in common libraries, |
| 1442 | 1444 | but it prevents the direct use of gzfread() to read a concurrently written |
| 1443 | 1445 | file, reseting and retrying on end-of-file, when size is not 1. |
| 1444 | 1446 | */ |
| 1445 | 1447 | |
| 1446 | -ZEXTERN int ZEXPORT gzwrite OF((gzFile file, | |
| 1447 | - voidpc buf, unsigned len)); | |
| 1448 | +ZEXTERN int ZEXPORT gzwrite OF((gzFile file, voidpc buf, unsigned len)); | |
| 1448 | 1449 | /* |
| 1449 | - Writes the given number of uncompressed bytes into the compressed file. | |
| 1450 | - gzwrite returns the number of uncompressed bytes written or 0 in case of | |
| 1451 | - error. | |
| 1450 | + Compress and write the len uncompressed bytes at buf to file. gzwrite | |
| 1451 | + returns the number of uncompressed bytes written or 0 in case of error. | |
| 1452 | 1452 | */ |
| 1453 | 1453 | |
| 1454 | 1454 | ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size, |
| 1455 | 1455 | z_size_t nitems, gzFile file)); |
| 1456 | 1456 | /* |
| 1457 | - gzfwrite() writes nitems items of size size from buf to file, duplicating | |
| 1457 | + Compress and write nitems items of size size from buf to file, duplicating | |
| 1458 | 1458 | the interface of stdio's fwrite(), with size_t request and return types. If |
| 1459 | 1459 | the library defines size_t, then z_size_t is identical to size_t. If not, |
| 1460 | 1460 | then z_size_t is an unsigned integer type that can contain a pointer. |
| 1461 | 1461 | |
| 1462 | 1462 | gzfwrite() returns the number of full items written of size size, or zero |
| @@ -1465,63 +1465,64 @@ | ||
| 1465 | 1465 | is returned, and the error state is set to Z_STREAM_ERROR. |
| 1466 | 1466 | */ |
| 1467 | 1467 | |
| 1468 | 1468 | ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...)); |
| 1469 | 1469 | /* |
| 1470 | - Converts, formats, and writes the arguments to the compressed file under | |
| 1471 | - control of the format string, as in fprintf. gzprintf returns the number of | |
| 1470 | + Convert, format, compress, and write the arguments (...) to file under | |
| 1471 | + control of the string format, as in fprintf. gzprintf returns the number of | |
| 1472 | 1472 | uncompressed bytes actually written, or a negative zlib error code in case |
| 1473 | 1473 | of error. The number of uncompressed bytes written is limited to 8191, or |
| 1474 | 1474 | one less than the buffer size given to gzbuffer(). The caller should assure |
| 1475 | 1475 | that this limit is not exceeded. If it is exceeded, then gzprintf() will |
| 1476 | 1476 | return an error (0) with nothing written. In this case, there may also be a |
| 1477 | 1477 | buffer overflow with unpredictable consequences, which is possible only if |
| 1478 | - zlib was compiled with the insecure functions sprintf() or vsprintf() | |
| 1478 | + zlib was compiled with the insecure functions sprintf() or vsprintf(), | |
| 1479 | 1479 | because the secure snprintf() or vsnprintf() functions were not available. |
| 1480 | 1480 | This can be determined using zlibCompileFlags(). |
| 1481 | 1481 | */ |
| 1482 | 1482 | |
| 1483 | 1483 | ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); |
| 1484 | 1484 | /* |
| 1485 | - Writes the given null-terminated string to the compressed file, excluding | |
| 1485 | + Compress and write the given null-terminated string s to file, excluding | |
| 1486 | 1486 | the terminating null character. |
| 1487 | 1487 | |
| 1488 | 1488 | gzputs returns the number of characters written, or -1 in case of error. |
| 1489 | 1489 | */ |
| 1490 | 1490 | |
| 1491 | 1491 | ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); |
| 1492 | 1492 | /* |
| 1493 | - Reads bytes from the compressed file until len-1 characters are read, or a | |
| 1494 | - newline character is read and transferred to buf, or an end-of-file | |
| 1495 | - condition is encountered. If any characters are read or if len == 1, the | |
| 1496 | - string is terminated with a null character. If no characters are read due | |
| 1497 | - to an end-of-file or len < 1, then the buffer is left untouched. | |
| 1493 | + Read and decompress bytes from file into buf, until len-1 characters are | |
| 1494 | + read, or until a newline character is read and transferred to buf, or an | |
| 1495 | + end-of-file condition is encountered. If any characters are read or if len | |
| 1496 | + is one, the string is terminated with a null character. If no characters | |
| 1497 | + are read due to an end-of-file or len is less than one, then the buffer is | |
| 1498 | + left untouched. | |
| 1498 | 1499 | |
| 1499 | 1500 | gzgets returns buf which is a null-terminated string, or it returns NULL |
| 1500 | 1501 | for end-of-file or in case of error. If there was an error, the contents at |
| 1501 | 1502 | buf are indeterminate. |
| 1502 | 1503 | */ |
| 1503 | 1504 | |
| 1504 | 1505 | ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); |
| 1505 | 1506 | /* |
| 1506 | - Writes c, converted to an unsigned char, into the compressed file. gzputc | |
| 1507 | + Compress and write c, converted to an unsigned char, into file. gzputc | |
| 1507 | 1508 | returns the value that was written, or -1 in case of error. |
| 1508 | 1509 | */ |
| 1509 | 1510 | |
| 1510 | 1511 | ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); |
| 1511 | 1512 | /* |
| 1512 | - Reads one byte from the compressed file. gzgetc returns this byte or -1 | |
| 1513 | + Read and decompress one byte from file. gzgetc returns this byte or -1 | |
| 1513 | 1514 | in case of end of file or error. This is implemented as a macro for speed. |
| 1514 | 1515 | As such, it does not do all of the checking the other functions do. I.e. |
| 1515 | 1516 | it does not check to see if file is NULL, nor whether the structure file |
| 1516 | 1517 | points to has been clobbered or not. |
| 1517 | 1518 | */ |
| 1518 | 1519 | |
| 1519 | 1520 | ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); |
| 1520 | 1521 | /* |
| 1521 | - Push one character back onto the stream to be read as the first character | |
| 1522 | - on the next read. At least one character of push-back is allowed. | |
| 1522 | + Push c back onto the stream for file to be read as the first character on | |
| 1523 | + the next read. At least one character of push-back is always allowed. | |
| 1523 | 1524 | gzungetc() returns the character pushed, or -1 on failure. gzungetc() will |
| 1524 | 1525 | fail if c is -1, and may fail if a character has been pushed but not read |
| 1525 | 1526 | yet. If gzungetc is used immediately after gzopen or gzdopen, at least the |
| 1526 | 1527 | output buffer size of pushed characters is allowed. (See gzbuffer above.) |
| 1527 | 1528 | The pushed character will be discarded if the stream is repositioned with |
| @@ -1528,13 +1529,13 @@ | ||
| 1528 | 1529 | gzseek() or gzrewind(). |
| 1529 | 1530 | */ |
| 1530 | 1531 | |
| 1531 | 1532 | ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); |
| 1532 | 1533 | /* |
| 1533 | - Flushes all pending output into the compressed file. The parameter flush | |
| 1534 | - is as in the deflate() function. The return value is the zlib error number | |
| 1535 | - (see function gzerror below). gzflush is only permitted when writing. | |
| 1534 | + Flush all pending output to file. The parameter flush is as in the | |
| 1535 | + deflate() function. The return value is the zlib error number (see function | |
| 1536 | + gzerror below). gzflush is only permitted when writing. | |
| 1536 | 1537 | |
| 1537 | 1538 | If the flush parameter is Z_FINISH, the remaining data is written and the |
| 1538 | 1539 | gzip stream is completed in the output. If gzwrite() is called again, a new |
| 1539 | 1540 | gzip stream will be started in the output. gzread() is able to read such |
| 1540 | 1541 | concatenated gzip streams. |
| @@ -1545,12 +1546,12 @@ | ||
| 1545 | 1546 | |
| 1546 | 1547 | /* |
| 1547 | 1548 | ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, |
| 1548 | 1549 | z_off_t offset, int whence)); |
| 1549 | 1550 | |
| 1550 | - Sets the starting position for the next gzread or gzwrite on the given | |
| 1551 | - compressed file. The offset represents a number of bytes in the | |
| 1551 | + Set the starting position to offset relative to whence for the next gzread | |
| 1552 | + or gzwrite on file. The offset represents a number of bytes in the | |
| 1552 | 1553 | uncompressed data stream. The whence parameter is defined as in lseek(2); |
| 1553 | 1554 | the value SEEK_END is not supported. |
| 1554 | 1555 | |
| 1555 | 1556 | If the file is opened for reading, this function is emulated but can be |
| 1556 | 1557 | extremely slow. If the file is opened for writing, only forward seeks are |
| @@ -1563,54 +1564,54 @@ | ||
| 1563 | 1564 | would be before the current position. |
| 1564 | 1565 | */ |
| 1565 | 1566 | |
| 1566 | 1567 | ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); |
| 1567 | 1568 | /* |
| 1568 | - Rewinds the given file. This function is supported only for reading. | |
| 1569 | + Rewind file. This function is supported only for reading. | |
| 1569 | 1570 | |
| 1570 | - gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) | |
| 1571 | + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET). | |
| 1571 | 1572 | */ |
| 1572 | 1573 | |
| 1573 | 1574 | /* |
| 1574 | 1575 | ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); |
| 1575 | 1576 | |
| 1576 | - Returns the starting position for the next gzread or gzwrite on the given | |
| 1577 | - compressed file. This position represents a number of bytes in the | |
| 1578 | - uncompressed data stream, and is zero when starting, even if appending or | |
| 1579 | - reading a gzip stream from the middle of a file using gzdopen(). | |
| 1577 | + Return the starting position for the next gzread or gzwrite on file. | |
| 1578 | + This position represents a number of bytes in the uncompressed data stream, | |
| 1579 | + and is zero when starting, even if appending or reading a gzip stream from | |
| 1580 | + the middle of a file using gzdopen(). | |
| 1580 | 1581 | |
| 1581 | 1582 | gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) |
| 1582 | 1583 | */ |
| 1583 | 1584 | |
| 1584 | 1585 | /* |
| 1585 | 1586 | ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file)); |
| 1586 | 1587 | |
| 1587 | - Returns the current offset in the file being read or written. This offset | |
| 1588 | - includes the count of bytes that precede the gzip stream, for example when | |
| 1589 | - appending or when using gzdopen() for reading. When reading, the offset | |
| 1590 | - does not include as yet unused buffered input. This information can be used | |
| 1591 | - for a progress indicator. On error, gzoffset() returns -1. | |
| 1588 | + Return the current compressed (actual) read or write offset of file. This | |
| 1589 | + offset includes the count of bytes that precede the gzip stream, for example | |
| 1590 | + when appending or when using gzdopen() for reading. When reading, the | |
| 1591 | + offset does not include as yet unused buffered input. This information can | |
| 1592 | + be used for a progress indicator. On error, gzoffset() returns -1. | |
| 1592 | 1593 | */ |
| 1593 | 1594 | |
| 1594 | 1595 | ZEXTERN int ZEXPORT gzeof OF((gzFile file)); |
| 1595 | 1596 | /* |
| 1596 | - Returns true (1) if the end-of-file indicator has been set while reading, | |
| 1597 | - false (0) otherwise. Note that the end-of-file indicator is set only if the | |
| 1598 | - read tried to go past the end of the input, but came up short. Therefore, | |
| 1599 | - just like feof(), gzeof() may return false even if there is no more data to | |
| 1600 | - read, in the event that the last read request was for the exact number of | |
| 1601 | - bytes remaining in the input file. This will happen if the input file size | |
| 1602 | - is an exact multiple of the buffer size. | |
| 1597 | + Return true (1) if the end-of-file indicator for file has been set while | |
| 1598 | + reading, false (0) otherwise. Note that the end-of-file indicator is set | |
| 1599 | + only if the read tried to go past the end of the input, but came up short. | |
| 1600 | + Therefore, just like feof(), gzeof() may return false even if there is no | |
| 1601 | + more data to read, in the event that the last read request was for the exact | |
| 1602 | + number of bytes remaining in the input file. This will happen if the input | |
| 1603 | + file size is an exact multiple of the buffer size. | |
| 1603 | 1604 | |
| 1604 | 1605 | If gzeof() returns true, then the read functions will return no more data, |
| 1605 | 1606 | unless the end-of-file indicator is reset by gzclearerr() and the input file |
| 1606 | 1607 | has grown since the previous end of file was detected. |
| 1607 | 1608 | */ |
| 1608 | 1609 | |
| 1609 | 1610 | ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); |
| 1610 | 1611 | /* |
| 1611 | - Returns true (1) if file is being copied directly while reading, or false | |
| 1612 | + Return true (1) if file is being copied directly while reading, or false | |
| 1612 | 1613 | (0) if file is a gzip stream being decompressed. |
| 1613 | 1614 | |
| 1614 | 1615 | If the input file is empty, gzdirect() will return true, since the input |
| 1615 | 1616 | does not contain a gzip stream. |
| 1616 | 1617 | |
| @@ -1627,12 +1628,12 @@ | ||
| 1627 | 1628 | gzip file reading and decompression, which may not be desired.) |
| 1628 | 1629 | */ |
| 1629 | 1630 | |
| 1630 | 1631 | ZEXTERN int ZEXPORT gzclose OF((gzFile file)); |
| 1631 | 1632 | /* |
| 1632 | - Flushes all pending output if necessary, closes the compressed file and | |
| 1633 | - deallocates the (de)compression state. Note that once file is closed, you | |
| 1633 | + Flush all pending output for file, if necessary, close file and | |
| 1634 | + deallocate the (de)compression state. Note that once file is closed, you | |
| 1634 | 1635 | cannot call gzerror with file, since its structures have been deallocated. |
| 1635 | 1636 | gzclose must not be called more than once on the same file, just as free |
| 1636 | 1637 | must not be called more than once on the same allocation. |
| 1637 | 1638 | |
| 1638 | 1639 | gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a |
| @@ -1652,14 +1653,14 @@ | ||
| 1652 | 1653 | zlib library. |
| 1653 | 1654 | */ |
| 1654 | 1655 | |
| 1655 | 1656 | ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); |
| 1656 | 1657 | /* |
| 1657 | - Returns the error message for the last error which occurred on the given | |
| 1658 | - compressed file. errnum is set to zlib error number. If an error occurred | |
| 1659 | - in the file system and not in the compression library, errnum is set to | |
| 1660 | - Z_ERRNO and the application may consult errno to get the exact error code. | |
| 1658 | + Return the error message for the last error which occurred on file. | |
| 1659 | + errnum is set to zlib error number. If an error occurred in the file system | |
| 1660 | + and not in the compression library, errnum is set to Z_ERRNO and the | |
| 1661 | + application may consult errno to get the exact error code. | |
| 1661 | 1662 | |
| 1662 | 1663 | The application must not modify the returned string. Future calls to |
| 1663 | 1664 | this function may invalidate the previously returned string. If file is |
| 1664 | 1665 | closed, then the string previously returned by gzerror will no longer be |
| 1665 | 1666 | available. |
| @@ -1668,11 +1669,11 @@ | ||
| 1668 | 1669 | functions above that do not distinguish those cases in their return values. |
| 1669 | 1670 | */ |
| 1670 | 1671 | |
| 1671 | 1672 | ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); |
| 1672 | 1673 | /* |
| 1673 | - Clears the error and end-of-file flags for file. This is analogous to the | |
| 1674 | + Clear the error and end-of-file flags for file. This is analogous to the | |
| 1674 | 1675 | clearerr() function in stdio. This is useful for continuing to read a gzip |
| 1675 | 1676 | file that is being written concurrently. |
| 1676 | 1677 | */ |
| 1677 | 1678 | |
| 1678 | 1679 | #endif /* !Z_SOLO */ |
| @@ -1686,12 +1687,13 @@ | ||
| 1686 | 1687 | */ |
| 1687 | 1688 | |
| 1688 | 1689 | ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); |
| 1689 | 1690 | /* |
| 1690 | 1691 | Update a running Adler-32 checksum with the bytes buf[0..len-1] and |
| 1691 | - return the updated checksum. If buf is Z_NULL, this function returns the | |
| 1692 | - required initial value for the checksum. | |
| 1692 | + return the updated checksum. An Adler-32 value is in the range of a 32-bit | |
| 1693 | + unsigned integer. If buf is Z_NULL, this function returns the required | |
| 1694 | + initial value for the checksum. | |
| 1693 | 1695 | |
| 1694 | 1696 | An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed |
| 1695 | 1697 | much faster. |
| 1696 | 1698 | |
| 1697 | 1699 | Usage example: |
| @@ -1720,16 +1722,17 @@ | ||
| 1720 | 1722 | seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. Note |
| 1721 | 1723 | that the z_off_t type (like off_t) is a signed integer. If len2 is |
| 1722 | 1724 | negative, the result has no meaning or utility. |
| 1723 | 1725 | */ |
| 1724 | 1726 | |
| 1725 | -ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); | |
| 1727 | +ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); | |
| 1726 | 1728 | /* |
| 1727 | 1729 | Update a running CRC-32 with the bytes buf[0..len-1] and return the |
| 1728 | - updated CRC-32. If buf is Z_NULL, this function returns the required | |
| 1729 | - initial value for the crc. Pre- and post-conditioning (one's complement) is | |
| 1730 | - performed within this function so it shouldn't be done by the application. | |
| 1730 | + updated CRC-32. A CRC-32 value is in the range of a 32-bit unsigned integer. | |
| 1731 | + If buf is Z_NULL, this function returns the required initial value for the | |
| 1732 | + crc. Pre- and post-conditioning (one's complement) is performed within this | |
| 1733 | + function so it shouldn't be done by the application. | |
| 1731 | 1734 | |
| 1732 | 1735 | Usage example: |
| 1733 | 1736 | |
| 1734 | 1737 | uLong crc = crc32(0L, Z_NULL, 0); |
| 1735 | 1738 | |
| @@ -1737,11 +1740,11 @@ | ||
| 1737 | 1740 | crc = crc32(crc, buffer, length); |
| 1738 | 1741 | } |
| 1739 | 1742 | if (crc != original_crc) error(); |
| 1740 | 1743 | */ |
| 1741 | 1744 | |
| 1742 | -ZEXTERN uLong ZEXPORT crc32_z OF((uLong adler, const Bytef *buf, | |
| 1745 | +ZEXTERN uLong ZEXPORT crc32_z OF((uLong crc, const Bytef *buf, | |
| 1743 | 1746 | z_size_t len)); |
| 1744 | 1747 | /* |
| 1745 | 1748 | Same as crc32(), but with a size_t length. |
| 1746 | 1749 | */ |
| 1747 | 1750 | |
| @@ -1752,10 +1755,24 @@ | ||
| 1752 | 1755 | seq1 and seq2 with lengths len1 and len2, CRC-32 check values were |
| 1753 | 1756 | calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 |
| 1754 | 1757 | check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and |
| 1755 | 1758 | len2. |
| 1756 | 1759 | */ |
| 1760 | + | |
| 1761 | +/* | |
| 1762 | +ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t len2)); | |
| 1763 | + | |
| 1764 | + Return the operator corresponding to length len2, to be used with | |
| 1765 | + crc32_combine_op(). | |
| 1766 | +*/ | |
| 1767 | + | |
| 1768 | +ZEXTERN uLong ZEXPORT crc32_combine_op OF((uLong crc1, uLong crc2, uLong op)); | |
| 1769 | +/* | |
| 1770 | + Give the same result as crc32_combine(), using op in place of len2. op is | |
| 1771 | + is generated from len2 by crc32_combine_gen(). This will be faster than | |
| 1772 | + crc32_combine() if the generated op is used more than once. | |
| 1773 | +*/ | |
| 1757 | 1774 | |
| 1758 | 1775 | |
| 1759 | 1776 | /* various hacks, don't look :) */ |
| 1760 | 1777 | |
| 1761 | 1778 | /* deflateInit and inflateInit are macros to allow checking the zlib version |
| @@ -1840,10 +1857,11 @@ | ||
| 1840 | 1857 | ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); |
| 1841 | 1858 | ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); |
| 1842 | 1859 | ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); |
| 1843 | 1860 | ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t)); |
| 1844 | 1861 | ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t)); |
| 1862 | + ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off64_t)); | |
| 1845 | 1863 | #endif |
| 1846 | 1864 | |
| 1847 | 1865 | #if !defined(ZLIB_INTERNAL) && defined(Z_WANT64) |
| 1848 | 1866 | # ifdef Z_PREFIX_SET |
| 1849 | 1867 | # define z_gzopen z_gzopen64 |
| @@ -1850,39 +1868,44 @@ | ||
| 1850 | 1868 | # define z_gzseek z_gzseek64 |
| 1851 | 1869 | # define z_gztell z_gztell64 |
| 1852 | 1870 | # define z_gzoffset z_gzoffset64 |
| 1853 | 1871 | # define z_adler32_combine z_adler32_combine64 |
| 1854 | 1872 | # define z_crc32_combine z_crc32_combine64 |
| 1873 | +# define z_crc32_combine_gen z_crc32_combine_gen64 | |
| 1855 | 1874 | # else |
| 1856 | 1875 | # define gzopen gzopen64 |
| 1857 | 1876 | # define gzseek gzseek64 |
| 1858 | 1877 | # define gztell gztell64 |
| 1859 | 1878 | # define gzoffset gzoffset64 |
| 1860 | 1879 | # define adler32_combine adler32_combine64 |
| 1861 | 1880 | # define crc32_combine crc32_combine64 |
| 1881 | +# define crc32_combine_gen crc32_combine_gen64 | |
| 1862 | 1882 | # endif |
| 1863 | 1883 | # ifndef Z_LARGE64 |
| 1864 | 1884 | ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); |
| 1865 | 1885 | ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int)); |
| 1866 | 1886 | ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile)); |
| 1867 | 1887 | ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile)); |
| 1868 | 1888 | ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); |
| 1869 | 1889 | ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); |
| 1890 | + ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off_t)); | |
| 1870 | 1891 | # endif |
| 1871 | 1892 | #else |
| 1872 | 1893 | ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *)); |
| 1873 | 1894 | ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int)); |
| 1874 | 1895 | ZEXTERN z_off_t ZEXPORT gztell OF((gzFile)); |
| 1875 | 1896 | ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile)); |
| 1876 | 1897 | ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); |
| 1877 | 1898 | ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); |
| 1899 | + ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t)); | |
| 1878 | 1900 | #endif |
| 1879 | 1901 | |
| 1880 | 1902 | #else /* Z_SOLO */ |
| 1881 | 1903 | |
| 1882 | 1904 | ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); |
| 1883 | 1905 | ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); |
| 1906 | + ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t)); | |
| 1884 | 1907 | |
| 1885 | 1908 | #endif /* !Z_SOLO */ |
| 1886 | 1909 | |
| 1887 | 1910 | /* undocumented functions */ |
| 1888 | 1911 | ZEXTERN const char * ZEXPORT zError OF((int)); |
| @@ -1891,11 +1914,11 @@ | ||
| 1891 | 1914 | ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int)); |
| 1892 | 1915 | ZEXTERN int ZEXPORT inflateValidate OF((z_streamp, int)); |
| 1893 | 1916 | ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF ((z_streamp)); |
| 1894 | 1917 | ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp)); |
| 1895 | 1918 | ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp)); |
| 1896 | -#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(Z_SOLO) | |
| 1919 | +#if defined(_WIN32) && !defined(Z_SOLO) | |
| 1897 | 1920 | ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path, |
| 1898 | 1921 | const char *mode)); |
| 1899 | 1922 | #endif |
| 1900 | 1923 | #if defined(STDC) || defined(Z_HAVE_STDARG_H) |
| 1901 | 1924 | # ifndef Z_SOLO |
| 1902 | 1925 |
| --- compat/zlib/zlib.h | |
| +++ compat/zlib/zlib.h | |
| @@ -1,9 +1,9 @@ | |
| 1 | /* zlib.h -- interface of the 'zlib' general purpose compression library |
| 2 | version 1.2.11, January 15th, 2017 |
| 3 | |
| 4 | Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler |
| 5 | |
| 6 | This software is provided 'as-is', without any express or implied |
| 7 | warranty. In no event will the authors be held liable for any damages |
| 8 | arising from the use of this software. |
| 9 | |
| @@ -35,15 +35,15 @@ | |
| 35 | |
| 36 | #ifdef __cplusplus |
| 37 | extern "C" { |
| 38 | #endif |
| 39 | |
| 40 | #define ZLIB_VERSION "1.2.11" |
| 41 | #define ZLIB_VERNUM 0x12b0 |
| 42 | #define ZLIB_VER_MAJOR 1 |
| 43 | #define ZLIB_VER_MINOR 2 |
| 44 | #define ZLIB_VER_REVISION 11 |
| 45 | #define ZLIB_VER_SUBREVISION 0 |
| 46 | |
| 47 | /* |
| 48 | The 'zlib' compression library provides in-memory compression and |
| 49 | decompression functions, including integrity checks of the uncompressed data. |
| @@ -541,12 +541,11 @@ | |
| 541 | int windowBits, |
| 542 | int memLevel, |
| 543 | int strategy)); |
| 544 | |
| 545 | This is another version of deflateInit with more compression options. The |
| 546 | fields next_in, zalloc, zfree and opaque must be initialized before by the |
| 547 | caller. |
| 548 | |
| 549 | The method parameter is the compression method. It must be Z_DEFLATED in |
| 550 | this version of the library. |
| 551 | |
| 552 | The windowBits parameter is the base two logarithm of the window size |
| @@ -710,15 +709,16 @@ | |
| 710 | Dynamically update the compression level and compression strategy. The |
| 711 | interpretation of level and strategy is as in deflateInit2(). This can be |
| 712 | used to switch between compression and straight copy of the input data, or |
| 713 | to switch to a different kind of input data requiring a different strategy. |
| 714 | If the compression approach (which is a function of the level) or the |
| 715 | strategy is changed, and if any input has been consumed in a previous |
| 716 | deflate() call, then the input available so far is compressed with the old |
| 717 | level and strategy using deflate(strm, Z_BLOCK). There are three approaches |
| 718 | for the compression levels 0, 1..3, and 4..9 respectively. The new level |
| 719 | and strategy will take effect at the next call of deflate(). |
| 720 | |
| 721 | If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does |
| 722 | not have enough output space to complete, then the parameter change will not |
| 723 | take effect. In this case, deflateParams() can be called again with the |
| 724 | same parameters and more output space to try again. |
| @@ -863,13 +863,15 @@ | |
| 863 | windowBits can also be greater than 15 for optional gzip decoding. Add |
| 864 | 32 to windowBits to enable zlib and gzip decoding with automatic header |
| 865 | detection, or add 16 to decode only the gzip format (the zlib format will |
| 866 | return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a |
| 867 | CRC-32 instead of an Adler-32. Unlike the gunzip utility and gzread() (see |
| 868 | below), inflate() will not automatically decode concatenated gzip streams. |
| 869 | inflate() will return Z_STREAM_END at the end of the gzip stream. The state |
| 870 | would need to be reset to continue decoding a subsequent gzip stream. |
| 871 | |
| 872 | inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough |
| 873 | memory, Z_VERSION_ERROR if the zlib library version is incompatible with the |
| 874 | version assumed by the caller, or Z_STREAM_ERROR if the parameters are |
| 875 | invalid, such as a null pointer to the structure. msg is set to null if |
| @@ -1300,18 +1302,18 @@ | |
| 1300 | typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */ |
| 1301 | |
| 1302 | /* |
| 1303 | ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); |
| 1304 | |
| 1305 | Opens a gzip (.gz) file for reading or writing. The mode parameter is as |
| 1306 | in fopen ("rb" or "wb") but can also include a compression level ("wb9") or |
| 1307 | a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only |
| 1308 | compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F' |
| 1309 | for fixed code compression as in "wb9F". (See the description of |
| 1310 | deflateInit2 for more information about the strategy parameter.) 'T' will |
| 1311 | request transparent writing or appending with no compression and not using |
| 1312 | the gzip format. |
| 1313 | |
| 1314 | "a" can be used instead of "w" to request that the gzip stream that will |
| 1315 | be written be appended to the file. "+" will result in an error, since |
| 1316 | reading and writing to the same gzip file is not supported. The addition of |
| 1317 | "x" when writing will create the file exclusively, which fails if the file |
| @@ -1337,13 +1339,13 @@ | |
| 1337 | file could not be opened. |
| 1338 | */ |
| 1339 | |
| 1340 | ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); |
| 1341 | /* |
| 1342 | gzdopen associates a gzFile with the file descriptor fd. File descriptors |
| 1343 | are obtained from calls like open, dup, creat, pipe or fileno (if the file |
| 1344 | has been previously opened with fopen). The mode parameter is as in gzopen. |
| 1345 | |
| 1346 | The next call of gzclose on the returned gzFile will also close the file |
| 1347 | descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor |
| 1348 | fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd, |
| 1349 | mode);. The duplicated descriptor should be saved to avoid a leak, since |
| @@ -1360,38 +1362,38 @@ | |
| 1360 | will not detect if fd is invalid (unless fd is -1). |
| 1361 | */ |
| 1362 | |
| 1363 | ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size)); |
| 1364 | /* |
| 1365 | Set the internal buffer size used by this library's functions. The |
| 1366 | default buffer size is 8192 bytes. This function must be called after |
| 1367 | gzopen() or gzdopen(), and before any other calls that read or write the |
| 1368 | file. The buffer memory allocation is always deferred to the first read or |
| 1369 | write. Three times that size in buffer space is allocated. A larger buffer |
| 1370 | size of, for example, 64K or 128K bytes will noticeably increase the speed |
| 1371 | of decompression (reading). |
| 1372 | |
| 1373 | The new buffer size also affects the maximum length for gzprintf(). |
| 1374 | |
| 1375 | gzbuffer() returns 0 on success, or -1 on failure, such as being called |
| 1376 | too late. |
| 1377 | */ |
| 1378 | |
| 1379 | ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); |
| 1380 | /* |
| 1381 | Dynamically update the compression level or strategy. See the description |
| 1382 | of deflateInit2 for the meaning of these parameters. Previously provided |
| 1383 | data is flushed before the parameter change. |
| 1384 | |
| 1385 | gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not |
| 1386 | opened for writing, Z_ERRNO if there is an error writing the flushed data, |
| 1387 | or Z_MEM_ERROR if there is a memory allocation error. |
| 1388 | */ |
| 1389 | |
| 1390 | ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); |
| 1391 | /* |
| 1392 | Reads the given number of uncompressed bytes from the compressed file. If |
| 1393 | the input file is not in gzip format, gzread copies the given number of |
| 1394 | bytes into the buffer directly from the file. |
| 1395 | |
| 1396 | After reaching the end of a gzip stream in the input, gzread will continue |
| 1397 | to read, looking for another gzip stream. Any number of gzip streams may be |
| @@ -1418,15 +1420,15 @@ | |
| 1418 | */ |
| 1419 | |
| 1420 | ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems, |
| 1421 | gzFile file)); |
| 1422 | /* |
| 1423 | Read up to nitems items of size size from file to buf, otherwise operating |
| 1424 | as gzread() does. This duplicates the interface of stdio's fread(), with |
| 1425 | size_t request and return types. If the library defines size_t, then |
| 1426 | z_size_t is identical to size_t. If not, then z_size_t is an unsigned |
| 1427 | integer type that can contain a pointer. |
| 1428 | |
| 1429 | gzfread() returns the number of full items read of size size, or zero if |
| 1430 | the end of the file was reached and a full item could not be read, or if |
| 1431 | there was an error. gzerror() must be consulted if zero is returned in |
| 1432 | order to determine if there was an error. If the multiplication of size and |
| @@ -1441,22 +1443,20 @@ | |
| 1441 | is the same as the behavior of fread() implementations in common libraries, |
| 1442 | but it prevents the direct use of gzfread() to read a concurrently written |
| 1443 | file, reseting and retrying on end-of-file, when size is not 1. |
| 1444 | */ |
| 1445 | |
| 1446 | ZEXTERN int ZEXPORT gzwrite OF((gzFile file, |
| 1447 | voidpc buf, unsigned len)); |
| 1448 | /* |
| 1449 | Writes the given number of uncompressed bytes into the compressed file. |
| 1450 | gzwrite returns the number of uncompressed bytes written or 0 in case of |
| 1451 | error. |
| 1452 | */ |
| 1453 | |
| 1454 | ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size, |
| 1455 | z_size_t nitems, gzFile file)); |
| 1456 | /* |
| 1457 | gzfwrite() writes nitems items of size size from buf to file, duplicating |
| 1458 | the interface of stdio's fwrite(), with size_t request and return types. If |
| 1459 | the library defines size_t, then z_size_t is identical to size_t. If not, |
| 1460 | then z_size_t is an unsigned integer type that can contain a pointer. |
| 1461 | |
| 1462 | gzfwrite() returns the number of full items written of size size, or zero |
| @@ -1465,63 +1465,64 @@ | |
| 1465 | is returned, and the error state is set to Z_STREAM_ERROR. |
| 1466 | */ |
| 1467 | |
| 1468 | ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...)); |
| 1469 | /* |
| 1470 | Converts, formats, and writes the arguments to the compressed file under |
| 1471 | control of the format string, as in fprintf. gzprintf returns the number of |
| 1472 | uncompressed bytes actually written, or a negative zlib error code in case |
| 1473 | of error. The number of uncompressed bytes written is limited to 8191, or |
| 1474 | one less than the buffer size given to gzbuffer(). The caller should assure |
| 1475 | that this limit is not exceeded. If it is exceeded, then gzprintf() will |
| 1476 | return an error (0) with nothing written. In this case, there may also be a |
| 1477 | buffer overflow with unpredictable consequences, which is possible only if |
| 1478 | zlib was compiled with the insecure functions sprintf() or vsprintf() |
| 1479 | because the secure snprintf() or vsnprintf() functions were not available. |
| 1480 | This can be determined using zlibCompileFlags(). |
| 1481 | */ |
| 1482 | |
| 1483 | ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); |
| 1484 | /* |
| 1485 | Writes the given null-terminated string to the compressed file, excluding |
| 1486 | the terminating null character. |
| 1487 | |
| 1488 | gzputs returns the number of characters written, or -1 in case of error. |
| 1489 | */ |
| 1490 | |
| 1491 | ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); |
| 1492 | /* |
| 1493 | Reads bytes from the compressed file until len-1 characters are read, or a |
| 1494 | newline character is read and transferred to buf, or an end-of-file |
| 1495 | condition is encountered. If any characters are read or if len == 1, the |
| 1496 | string is terminated with a null character. If no characters are read due |
| 1497 | to an end-of-file or len < 1, then the buffer is left untouched. |
| 1498 | |
| 1499 | gzgets returns buf which is a null-terminated string, or it returns NULL |
| 1500 | for end-of-file or in case of error. If there was an error, the contents at |
| 1501 | buf are indeterminate. |
| 1502 | */ |
| 1503 | |
| 1504 | ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); |
| 1505 | /* |
| 1506 | Writes c, converted to an unsigned char, into the compressed file. gzputc |
| 1507 | returns the value that was written, or -1 in case of error. |
| 1508 | */ |
| 1509 | |
| 1510 | ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); |
| 1511 | /* |
| 1512 | Reads one byte from the compressed file. gzgetc returns this byte or -1 |
| 1513 | in case of end of file or error. This is implemented as a macro for speed. |
| 1514 | As such, it does not do all of the checking the other functions do. I.e. |
| 1515 | it does not check to see if file is NULL, nor whether the structure file |
| 1516 | points to has been clobbered or not. |
| 1517 | */ |
| 1518 | |
| 1519 | ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); |
| 1520 | /* |
| 1521 | Push one character back onto the stream to be read as the first character |
| 1522 | on the next read. At least one character of push-back is allowed. |
| 1523 | gzungetc() returns the character pushed, or -1 on failure. gzungetc() will |
| 1524 | fail if c is -1, and may fail if a character has been pushed but not read |
| 1525 | yet. If gzungetc is used immediately after gzopen or gzdopen, at least the |
| 1526 | output buffer size of pushed characters is allowed. (See gzbuffer above.) |
| 1527 | The pushed character will be discarded if the stream is repositioned with |
| @@ -1528,13 +1529,13 @@ | |
| 1528 | gzseek() or gzrewind(). |
| 1529 | */ |
| 1530 | |
| 1531 | ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); |
| 1532 | /* |
| 1533 | Flushes all pending output into the compressed file. The parameter flush |
| 1534 | is as in the deflate() function. The return value is the zlib error number |
| 1535 | (see function gzerror below). gzflush is only permitted when writing. |
| 1536 | |
| 1537 | If the flush parameter is Z_FINISH, the remaining data is written and the |
| 1538 | gzip stream is completed in the output. If gzwrite() is called again, a new |
| 1539 | gzip stream will be started in the output. gzread() is able to read such |
| 1540 | concatenated gzip streams. |
| @@ -1545,12 +1546,12 @@ | |
| 1545 | |
| 1546 | /* |
| 1547 | ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, |
| 1548 | z_off_t offset, int whence)); |
| 1549 | |
| 1550 | Sets the starting position for the next gzread or gzwrite on the given |
| 1551 | compressed file. The offset represents a number of bytes in the |
| 1552 | uncompressed data stream. The whence parameter is defined as in lseek(2); |
| 1553 | the value SEEK_END is not supported. |
| 1554 | |
| 1555 | If the file is opened for reading, this function is emulated but can be |
| 1556 | extremely slow. If the file is opened for writing, only forward seeks are |
| @@ -1563,54 +1564,54 @@ | |
| 1563 | would be before the current position. |
| 1564 | */ |
| 1565 | |
| 1566 | ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); |
| 1567 | /* |
| 1568 | Rewinds the given file. This function is supported only for reading. |
| 1569 | |
| 1570 | gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) |
| 1571 | */ |
| 1572 | |
| 1573 | /* |
| 1574 | ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); |
| 1575 | |
| 1576 | Returns the starting position for the next gzread or gzwrite on the given |
| 1577 | compressed file. This position represents a number of bytes in the |
| 1578 | uncompressed data stream, and is zero when starting, even if appending or |
| 1579 | reading a gzip stream from the middle of a file using gzdopen(). |
| 1580 | |
| 1581 | gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) |
| 1582 | */ |
| 1583 | |
| 1584 | /* |
| 1585 | ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file)); |
| 1586 | |
| 1587 | Returns the current offset in the file being read or written. This offset |
| 1588 | includes the count of bytes that precede the gzip stream, for example when |
| 1589 | appending or when using gzdopen() for reading. When reading, the offset |
| 1590 | does not include as yet unused buffered input. This information can be used |
| 1591 | for a progress indicator. On error, gzoffset() returns -1. |
| 1592 | */ |
| 1593 | |
| 1594 | ZEXTERN int ZEXPORT gzeof OF((gzFile file)); |
| 1595 | /* |
| 1596 | Returns true (1) if the end-of-file indicator has been set while reading, |
| 1597 | false (0) otherwise. Note that the end-of-file indicator is set only if the |
| 1598 | read tried to go past the end of the input, but came up short. Therefore, |
| 1599 | just like feof(), gzeof() may return false even if there is no more data to |
| 1600 | read, in the event that the last read request was for the exact number of |
| 1601 | bytes remaining in the input file. This will happen if the input file size |
| 1602 | is an exact multiple of the buffer size. |
| 1603 | |
| 1604 | If gzeof() returns true, then the read functions will return no more data, |
| 1605 | unless the end-of-file indicator is reset by gzclearerr() and the input file |
| 1606 | has grown since the previous end of file was detected. |
| 1607 | */ |
| 1608 | |
| 1609 | ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); |
| 1610 | /* |
| 1611 | Returns true (1) if file is being copied directly while reading, or false |
| 1612 | (0) if file is a gzip stream being decompressed. |
| 1613 | |
| 1614 | If the input file is empty, gzdirect() will return true, since the input |
| 1615 | does not contain a gzip stream. |
| 1616 | |
| @@ -1627,12 +1628,12 @@ | |
| 1627 | gzip file reading and decompression, which may not be desired.) |
| 1628 | */ |
| 1629 | |
| 1630 | ZEXTERN int ZEXPORT gzclose OF((gzFile file)); |
| 1631 | /* |
| 1632 | Flushes all pending output if necessary, closes the compressed file and |
| 1633 | deallocates the (de)compression state. Note that once file is closed, you |
| 1634 | cannot call gzerror with file, since its structures have been deallocated. |
| 1635 | gzclose must not be called more than once on the same file, just as free |
| 1636 | must not be called more than once on the same allocation. |
| 1637 | |
| 1638 | gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a |
| @@ -1652,14 +1653,14 @@ | |
| 1652 | zlib library. |
| 1653 | */ |
| 1654 | |
| 1655 | ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); |
| 1656 | /* |
| 1657 | Returns the error message for the last error which occurred on the given |
| 1658 | compressed file. errnum is set to zlib error number. If an error occurred |
| 1659 | in the file system and not in the compression library, errnum is set to |
| 1660 | Z_ERRNO and the application may consult errno to get the exact error code. |
| 1661 | |
| 1662 | The application must not modify the returned string. Future calls to |
| 1663 | this function may invalidate the previously returned string. If file is |
| 1664 | closed, then the string previously returned by gzerror will no longer be |
| 1665 | available. |
| @@ -1668,11 +1669,11 @@ | |
| 1668 | functions above that do not distinguish those cases in their return values. |
| 1669 | */ |
| 1670 | |
| 1671 | ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); |
| 1672 | /* |
| 1673 | Clears the error and end-of-file flags for file. This is analogous to the |
| 1674 | clearerr() function in stdio. This is useful for continuing to read a gzip |
| 1675 | file that is being written concurrently. |
| 1676 | */ |
| 1677 | |
| 1678 | #endif /* !Z_SOLO */ |
| @@ -1686,12 +1687,13 @@ | |
| 1686 | */ |
| 1687 | |
| 1688 | ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); |
| 1689 | /* |
| 1690 | Update a running Adler-32 checksum with the bytes buf[0..len-1] and |
| 1691 | return the updated checksum. If buf is Z_NULL, this function returns the |
| 1692 | required initial value for the checksum. |
| 1693 | |
| 1694 | An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed |
| 1695 | much faster. |
| 1696 | |
| 1697 | Usage example: |
| @@ -1720,16 +1722,17 @@ | |
| 1720 | seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. Note |
| 1721 | that the z_off_t type (like off_t) is a signed integer. If len2 is |
| 1722 | negative, the result has no meaning or utility. |
| 1723 | */ |
| 1724 | |
| 1725 | ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); |
| 1726 | /* |
| 1727 | Update a running CRC-32 with the bytes buf[0..len-1] and return the |
| 1728 | updated CRC-32. If buf is Z_NULL, this function returns the required |
| 1729 | initial value for the crc. Pre- and post-conditioning (one's complement) is |
| 1730 | performed within this function so it shouldn't be done by the application. |
| 1731 | |
| 1732 | Usage example: |
| 1733 | |
| 1734 | uLong crc = crc32(0L, Z_NULL, 0); |
| 1735 | |
| @@ -1737,11 +1740,11 @@ | |
| 1737 | crc = crc32(crc, buffer, length); |
| 1738 | } |
| 1739 | if (crc != original_crc) error(); |
| 1740 | */ |
| 1741 | |
| 1742 | ZEXTERN uLong ZEXPORT crc32_z OF((uLong adler, const Bytef *buf, |
| 1743 | z_size_t len)); |
| 1744 | /* |
| 1745 | Same as crc32(), but with a size_t length. |
| 1746 | */ |
| 1747 | |
| @@ -1752,10 +1755,24 @@ | |
| 1752 | seq1 and seq2 with lengths len1 and len2, CRC-32 check values were |
| 1753 | calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 |
| 1754 | check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and |
| 1755 | len2. |
| 1756 | */ |
| 1757 | |
| 1758 | |
| 1759 | /* various hacks, don't look :) */ |
| 1760 | |
| 1761 | /* deflateInit and inflateInit are macros to allow checking the zlib version |
| @@ -1840,10 +1857,11 @@ | |
| 1840 | ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); |
| 1841 | ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); |
| 1842 | ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); |
| 1843 | ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t)); |
| 1844 | ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t)); |
| 1845 | #endif |
| 1846 | |
| 1847 | #if !defined(ZLIB_INTERNAL) && defined(Z_WANT64) |
| 1848 | # ifdef Z_PREFIX_SET |
| 1849 | # define z_gzopen z_gzopen64 |
| @@ -1850,39 +1868,44 @@ | |
| 1850 | # define z_gzseek z_gzseek64 |
| 1851 | # define z_gztell z_gztell64 |
| 1852 | # define z_gzoffset z_gzoffset64 |
| 1853 | # define z_adler32_combine z_adler32_combine64 |
| 1854 | # define z_crc32_combine z_crc32_combine64 |
| 1855 | # else |
| 1856 | # define gzopen gzopen64 |
| 1857 | # define gzseek gzseek64 |
| 1858 | # define gztell gztell64 |
| 1859 | # define gzoffset gzoffset64 |
| 1860 | # define adler32_combine adler32_combine64 |
| 1861 | # define crc32_combine crc32_combine64 |
| 1862 | # endif |
| 1863 | # ifndef Z_LARGE64 |
| 1864 | ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); |
| 1865 | ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int)); |
| 1866 | ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile)); |
| 1867 | ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile)); |
| 1868 | ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); |
| 1869 | ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); |
| 1870 | # endif |
| 1871 | #else |
| 1872 | ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *)); |
| 1873 | ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int)); |
| 1874 | ZEXTERN z_off_t ZEXPORT gztell OF((gzFile)); |
| 1875 | ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile)); |
| 1876 | ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); |
| 1877 | ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); |
| 1878 | #endif |
| 1879 | |
| 1880 | #else /* Z_SOLO */ |
| 1881 | |
| 1882 | ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); |
| 1883 | ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); |
| 1884 | |
| 1885 | #endif /* !Z_SOLO */ |
| 1886 | |
| 1887 | /* undocumented functions */ |
| 1888 | ZEXTERN const char * ZEXPORT zError OF((int)); |
| @@ -1891,11 +1914,11 @@ | |
| 1891 | ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int)); |
| 1892 | ZEXTERN int ZEXPORT inflateValidate OF((z_streamp, int)); |
| 1893 | ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF ((z_streamp)); |
| 1894 | ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp)); |
| 1895 | ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp)); |
| 1896 | #if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(Z_SOLO) |
| 1897 | ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path, |
| 1898 | const char *mode)); |
| 1899 | #endif |
| 1900 | #if defined(STDC) || defined(Z_HAVE_STDARG_H) |
| 1901 | # ifndef Z_SOLO |
| 1902 |
| --- compat/zlib/zlib.h | |
| +++ compat/zlib/zlib.h | |
| @@ -1,9 +1,9 @@ | |
| 1 | /* zlib.h -- interface of the 'zlib' general purpose compression library |
| 2 | version 1.2.12, March 11th, 2022 |
| 3 | |
| 4 | Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler |
| 5 | |
| 6 | This software is provided 'as-is', without any express or implied |
| 7 | warranty. In no event will the authors be held liable for any damages |
| 8 | arising from the use of this software. |
| 9 | |
| @@ -35,15 +35,15 @@ | |
| 35 | |
| 36 | #ifdef __cplusplus |
| 37 | extern "C" { |
| 38 | #endif |
| 39 | |
| 40 | #define ZLIB_VERSION "1.2.12" |
| 41 | #define ZLIB_VERNUM 0x12c0 |
| 42 | #define ZLIB_VER_MAJOR 1 |
| 43 | #define ZLIB_VER_MINOR 2 |
| 44 | #define ZLIB_VER_REVISION 12 |
| 45 | #define ZLIB_VER_SUBREVISION 0 |
| 46 | |
| 47 | /* |
| 48 | The 'zlib' compression library provides in-memory compression and |
| 49 | decompression functions, including integrity checks of the uncompressed data. |
| @@ -541,12 +541,11 @@ | |
| 541 | int windowBits, |
| 542 | int memLevel, |
| 543 | int strategy)); |
| 544 | |
| 545 | This is another version of deflateInit with more compression options. The |
| 546 | fields zalloc, zfree and opaque must be initialized before by the caller. |
| 547 | |
| 548 | The method parameter is the compression method. It must be Z_DEFLATED in |
| 549 | this version of the library. |
| 550 | |
| 551 | The windowBits parameter is the base two logarithm of the window size |
| @@ -710,15 +709,16 @@ | |
| 709 | Dynamically update the compression level and compression strategy. The |
| 710 | interpretation of level and strategy is as in deflateInit2(). This can be |
| 711 | used to switch between compression and straight copy of the input data, or |
| 712 | to switch to a different kind of input data requiring a different strategy. |
| 713 | If the compression approach (which is a function of the level) or the |
| 714 | strategy is changed, and if there have been any deflate() calls since the |
| 715 | state was initialized or reset, then the input available so far is |
| 716 | compressed with the old level and strategy using deflate(strm, Z_BLOCK). |
| 717 | There are three approaches for the compression levels 0, 1..3, and 4..9 |
| 718 | respectively. The new level and strategy will take effect at the next call |
| 719 | of deflate(). |
| 720 | |
| 721 | If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does |
| 722 | not have enough output space to complete, then the parameter change will not |
| 723 | take effect. In this case, deflateParams() can be called again with the |
| 724 | same parameters and more output space to try again. |
| @@ -863,13 +863,15 @@ | |
| 863 | windowBits can also be greater than 15 for optional gzip decoding. Add |
| 864 | 32 to windowBits to enable zlib and gzip decoding with automatic header |
| 865 | detection, or add 16 to decode only the gzip format (the zlib format will |
| 866 | return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a |
| 867 | CRC-32 instead of an Adler-32. Unlike the gunzip utility and gzread() (see |
| 868 | below), inflate() will *not* automatically decode concatenated gzip members. |
| 869 | inflate() will return Z_STREAM_END at the end of the gzip member. The state |
| 870 | would need to be reset to continue decoding a subsequent gzip member. This |
| 871 | *must* be done if there is more data after a gzip member, in order for the |
| 872 | decompression to be compliant with the gzip standard (RFC 1952). |
| 873 | |
| 874 | inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough |
| 875 | memory, Z_VERSION_ERROR if the zlib library version is incompatible with the |
| 876 | version assumed by the caller, or Z_STREAM_ERROR if the parameters are |
| 877 | invalid, such as a null pointer to the structure. msg is set to null if |
| @@ -1300,18 +1302,18 @@ | |
| 1302 | typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */ |
| 1303 | |
| 1304 | /* |
| 1305 | ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); |
| 1306 | |
| 1307 | Open the gzip (.gz) file at path for reading and decompressing, or |
| 1308 | compressing and writing. The mode parameter is as in fopen ("rb" or "wb") |
| 1309 | but can also include a compression level ("wb9") or a strategy: 'f' for |
| 1310 | filtered data as in "wb6f", 'h' for Huffman-only compression as in "wb1h", |
| 1311 | 'R' for run-length encoding as in "wb1R", or 'F' for fixed code compression |
| 1312 | as in "wb9F". (See the description of deflateInit2 for more information |
| 1313 | about the strategy parameter.) 'T' will request transparent writing or |
| 1314 | appending with no compression and not using the gzip format. |
| 1315 | |
| 1316 | "a" can be used instead of "w" to request that the gzip stream that will |
| 1317 | be written be appended to the file. "+" will result in an error, since |
| 1318 | reading and writing to the same gzip file is not supported. The addition of |
| 1319 | "x" when writing will create the file exclusively, which fails if the file |
| @@ -1337,13 +1339,13 @@ | |
| 1339 | file could not be opened. |
| 1340 | */ |
| 1341 | |
| 1342 | ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); |
| 1343 | /* |
| 1344 | Associate a gzFile with the file descriptor fd. File descriptors are |
| 1345 | obtained from calls like open, dup, creat, pipe or fileno (if the file has |
| 1346 | been previously opened with fopen). The mode parameter is as in gzopen. |
| 1347 | |
| 1348 | The next call of gzclose on the returned gzFile will also close the file |
| 1349 | descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor |
| 1350 | fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd, |
| 1351 | mode);. The duplicated descriptor should be saved to avoid a leak, since |
| @@ -1360,38 +1362,38 @@ | |
| 1362 | will not detect if fd is invalid (unless fd is -1). |
| 1363 | */ |
| 1364 | |
| 1365 | ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size)); |
| 1366 | /* |
| 1367 | Set the internal buffer size used by this library's functions for file to |
| 1368 | size. The default buffer size is 8192 bytes. This function must be called |
| 1369 | after gzopen() or gzdopen(), and before any other calls that read or write |
| 1370 | the file. The buffer memory allocation is always deferred to the first read |
| 1371 | or write. Three times that size in buffer space is allocated. A larger |
| 1372 | buffer size of, for example, 64K or 128K bytes will noticeably increase the |
| 1373 | speed of decompression (reading). |
| 1374 | |
| 1375 | The new buffer size also affects the maximum length for gzprintf(). |
| 1376 | |
| 1377 | gzbuffer() returns 0 on success, or -1 on failure, such as being called |
| 1378 | too late. |
| 1379 | */ |
| 1380 | |
| 1381 | ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); |
| 1382 | /* |
| 1383 | Dynamically update the compression level and strategy for file. See the |
| 1384 | description of deflateInit2 for the meaning of these parameters. Previously |
| 1385 | provided data is flushed before applying the parameter changes. |
| 1386 | |
| 1387 | gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not |
| 1388 | opened for writing, Z_ERRNO if there is an error writing the flushed data, |
| 1389 | or Z_MEM_ERROR if there is a memory allocation error. |
| 1390 | */ |
| 1391 | |
| 1392 | ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); |
| 1393 | /* |
| 1394 | Read and decompress up to len uncompressed bytes from file into buf. If |
| 1395 | the input file is not in gzip format, gzread copies the given number of |
| 1396 | bytes into the buffer directly from the file. |
| 1397 | |
| 1398 | After reaching the end of a gzip stream in the input, gzread will continue |
| 1399 | to read, looking for another gzip stream. Any number of gzip streams may be |
| @@ -1418,15 +1420,15 @@ | |
| 1420 | */ |
| 1421 | |
| 1422 | ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems, |
| 1423 | gzFile file)); |
| 1424 | /* |
| 1425 | Read and decompress up to nitems items of size size from file into buf, |
| 1426 | otherwise operating as gzread() does. This duplicates the interface of |
| 1427 | stdio's fread(), with size_t request and return types. If the library |
| 1428 | defines size_t, then z_size_t is identical to size_t. If not, then z_size_t |
| 1429 | is an unsigned integer type that can contain a pointer. |
| 1430 | |
| 1431 | gzfread() returns the number of full items read of size size, or zero if |
| 1432 | the end of the file was reached and a full item could not be read, or if |
| 1433 | there was an error. gzerror() must be consulted if zero is returned in |
| 1434 | order to determine if there was an error. If the multiplication of size and |
| @@ -1441,22 +1443,20 @@ | |
| 1443 | is the same as the behavior of fread() implementations in common libraries, |
| 1444 | but it prevents the direct use of gzfread() to read a concurrently written |
| 1445 | file, reseting and retrying on end-of-file, when size is not 1. |
| 1446 | */ |
| 1447 | |
| 1448 | ZEXTERN int ZEXPORT gzwrite OF((gzFile file, voidpc buf, unsigned len)); |
| 1449 | /* |
| 1450 | Compress and write the len uncompressed bytes at buf to file. gzwrite |
| 1451 | returns the number of uncompressed bytes written or 0 in case of error. |
| 1452 | */ |
| 1453 | |
| 1454 | ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size, |
| 1455 | z_size_t nitems, gzFile file)); |
| 1456 | /* |
| 1457 | Compress and write nitems items of size size from buf to file, duplicating |
| 1458 | the interface of stdio's fwrite(), with size_t request and return types. If |
| 1459 | the library defines size_t, then z_size_t is identical to size_t. If not, |
| 1460 | then z_size_t is an unsigned integer type that can contain a pointer. |
| 1461 | |
| 1462 | gzfwrite() returns the number of full items written of size size, or zero |
| @@ -1465,63 +1465,64 @@ | |
| 1465 | is returned, and the error state is set to Z_STREAM_ERROR. |
| 1466 | */ |
| 1467 | |
| 1468 | ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...)); |
| 1469 | /* |
| 1470 | Convert, format, compress, and write the arguments (...) to file under |
| 1471 | control of the string format, as in fprintf. gzprintf returns the number of |
| 1472 | uncompressed bytes actually written, or a negative zlib error code in case |
| 1473 | of error. The number of uncompressed bytes written is limited to 8191, or |
| 1474 | one less than the buffer size given to gzbuffer(). The caller should assure |
| 1475 | that this limit is not exceeded. If it is exceeded, then gzprintf() will |
| 1476 | return an error (0) with nothing written. In this case, there may also be a |
| 1477 | buffer overflow with unpredictable consequences, which is possible only if |
| 1478 | zlib was compiled with the insecure functions sprintf() or vsprintf(), |
| 1479 | because the secure snprintf() or vsnprintf() functions were not available. |
| 1480 | This can be determined using zlibCompileFlags(). |
| 1481 | */ |
| 1482 | |
| 1483 | ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); |
| 1484 | /* |
| 1485 | Compress and write the given null-terminated string s to file, excluding |
| 1486 | the terminating null character. |
| 1487 | |
| 1488 | gzputs returns the number of characters written, or -1 in case of error. |
| 1489 | */ |
| 1490 | |
| 1491 | ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); |
| 1492 | /* |
| 1493 | Read and decompress bytes from file into buf, until len-1 characters are |
| 1494 | read, or until a newline character is read and transferred to buf, or an |
| 1495 | end-of-file condition is encountered. If any characters are read or if len |
| 1496 | is one, the string is terminated with a null character. If no characters |
| 1497 | are read due to an end-of-file or len is less than one, then the buffer is |
| 1498 | left untouched. |
| 1499 | |
| 1500 | gzgets returns buf which is a null-terminated string, or it returns NULL |
| 1501 | for end-of-file or in case of error. If there was an error, the contents at |
| 1502 | buf are indeterminate. |
| 1503 | */ |
| 1504 | |
| 1505 | ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); |
| 1506 | /* |
| 1507 | Compress and write c, converted to an unsigned char, into file. gzputc |
| 1508 | returns the value that was written, or -1 in case of error. |
| 1509 | */ |
| 1510 | |
| 1511 | ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); |
| 1512 | /* |
| 1513 | Read and decompress one byte from file. gzgetc returns this byte or -1 |
| 1514 | in case of end of file or error. This is implemented as a macro for speed. |
| 1515 | As such, it does not do all of the checking the other functions do. I.e. |
| 1516 | it does not check to see if file is NULL, nor whether the structure file |
| 1517 | points to has been clobbered or not. |
| 1518 | */ |
| 1519 | |
| 1520 | ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); |
| 1521 | /* |
| 1522 | Push c back onto the stream for file to be read as the first character on |
| 1523 | the next read. At least one character of push-back is always allowed. |
| 1524 | gzungetc() returns the character pushed, or -1 on failure. gzungetc() will |
| 1525 | fail if c is -1, and may fail if a character has been pushed but not read |
| 1526 | yet. If gzungetc is used immediately after gzopen or gzdopen, at least the |
| 1527 | output buffer size of pushed characters is allowed. (See gzbuffer above.) |
| 1528 | The pushed character will be discarded if the stream is repositioned with |
| @@ -1528,13 +1529,13 @@ | |
| 1529 | gzseek() or gzrewind(). |
| 1530 | */ |
| 1531 | |
| 1532 | ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); |
| 1533 | /* |
| 1534 | Flush all pending output to file. The parameter flush is as in the |
| 1535 | deflate() function. The return value is the zlib error number (see function |
| 1536 | gzerror below). gzflush is only permitted when writing. |
| 1537 | |
| 1538 | If the flush parameter is Z_FINISH, the remaining data is written and the |
| 1539 | gzip stream is completed in the output. If gzwrite() is called again, a new |
| 1540 | gzip stream will be started in the output. gzread() is able to read such |
| 1541 | concatenated gzip streams. |
| @@ -1545,12 +1546,12 @@ | |
| 1546 | |
| 1547 | /* |
| 1548 | ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, |
| 1549 | z_off_t offset, int whence)); |
| 1550 | |
| 1551 | Set the starting position to offset relative to whence for the next gzread |
| 1552 | or gzwrite on file. The offset represents a number of bytes in the |
| 1553 | uncompressed data stream. The whence parameter is defined as in lseek(2); |
| 1554 | the value SEEK_END is not supported. |
| 1555 | |
| 1556 | If the file is opened for reading, this function is emulated but can be |
| 1557 | extremely slow. If the file is opened for writing, only forward seeks are |
| @@ -1563,54 +1564,54 @@ | |
| 1564 | would be before the current position. |
| 1565 | */ |
| 1566 | |
| 1567 | ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); |
| 1568 | /* |
| 1569 | Rewind file. This function is supported only for reading. |
| 1570 | |
| 1571 | gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET). |
| 1572 | */ |
| 1573 | |
| 1574 | /* |
| 1575 | ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); |
| 1576 | |
| 1577 | Return the starting position for the next gzread or gzwrite on file. |
| 1578 | This position represents a number of bytes in the uncompressed data stream, |
| 1579 | and is zero when starting, even if appending or reading a gzip stream from |
| 1580 | the middle of a file using gzdopen(). |
| 1581 | |
| 1582 | gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) |
| 1583 | */ |
| 1584 | |
| 1585 | /* |
| 1586 | ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file)); |
| 1587 | |
| 1588 | Return the current compressed (actual) read or write offset of file. This |
| 1589 | offset includes the count of bytes that precede the gzip stream, for example |
| 1590 | when appending or when using gzdopen() for reading. When reading, the |
| 1591 | offset does not include as yet unused buffered input. This information can |
| 1592 | be used for a progress indicator. On error, gzoffset() returns -1. |
| 1593 | */ |
| 1594 | |
| 1595 | ZEXTERN int ZEXPORT gzeof OF((gzFile file)); |
| 1596 | /* |
| 1597 | Return true (1) if the end-of-file indicator for file has been set while |
| 1598 | reading, false (0) otherwise. Note that the end-of-file indicator is set |
| 1599 | only if the read tried to go past the end of the input, but came up short. |
| 1600 | Therefore, just like feof(), gzeof() may return false even if there is no |
| 1601 | more data to read, in the event that the last read request was for the exact |
| 1602 | number of bytes remaining in the input file. This will happen if the input |
| 1603 | file size is an exact multiple of the buffer size. |
| 1604 | |
| 1605 | If gzeof() returns true, then the read functions will return no more data, |
| 1606 | unless the end-of-file indicator is reset by gzclearerr() and the input file |
| 1607 | has grown since the previous end of file was detected. |
| 1608 | */ |
| 1609 | |
| 1610 | ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); |
| 1611 | /* |
| 1612 | Return true (1) if file is being copied directly while reading, or false |
| 1613 | (0) if file is a gzip stream being decompressed. |
| 1614 | |
| 1615 | If the input file is empty, gzdirect() will return true, since the input |
| 1616 | does not contain a gzip stream. |
| 1617 | |
| @@ -1627,12 +1628,12 @@ | |
| 1628 | gzip file reading and decompression, which may not be desired.) |
| 1629 | */ |
| 1630 | |
| 1631 | ZEXTERN int ZEXPORT gzclose OF((gzFile file)); |
| 1632 | /* |
| 1633 | Flush all pending output for file, if necessary, close file and |
| 1634 | deallocate the (de)compression state. Note that once file is closed, you |
| 1635 | cannot call gzerror with file, since its structures have been deallocated. |
| 1636 | gzclose must not be called more than once on the same file, just as free |
| 1637 | must not be called more than once on the same allocation. |
| 1638 | |
| 1639 | gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a |
| @@ -1652,14 +1653,14 @@ | |
| 1653 | zlib library. |
| 1654 | */ |
| 1655 | |
| 1656 | ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); |
| 1657 | /* |
| 1658 | Return the error message for the last error which occurred on file. |
| 1659 | errnum is set to zlib error number. If an error occurred in the file system |
| 1660 | and not in the compression library, errnum is set to Z_ERRNO and the |
| 1661 | application may consult errno to get the exact error code. |
| 1662 | |
| 1663 | The application must not modify the returned string. Future calls to |
| 1664 | this function may invalidate the previously returned string. If file is |
| 1665 | closed, then the string previously returned by gzerror will no longer be |
| 1666 | available. |
| @@ -1668,11 +1669,11 @@ | |
| 1669 | functions above that do not distinguish those cases in their return values. |
| 1670 | */ |
| 1671 | |
| 1672 | ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); |
| 1673 | /* |
| 1674 | Clear the error and end-of-file flags for file. This is analogous to the |
| 1675 | clearerr() function in stdio. This is useful for continuing to read a gzip |
| 1676 | file that is being written concurrently. |
| 1677 | */ |
| 1678 | |
| 1679 | #endif /* !Z_SOLO */ |
| @@ -1686,12 +1687,13 @@ | |
| 1687 | */ |
| 1688 | |
| 1689 | ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); |
| 1690 | /* |
| 1691 | Update a running Adler-32 checksum with the bytes buf[0..len-1] and |
| 1692 | return the updated checksum. An Adler-32 value is in the range of a 32-bit |
| 1693 | unsigned integer. If buf is Z_NULL, this function returns the required |
| 1694 | initial value for the checksum. |
| 1695 | |
| 1696 | An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed |
| 1697 | much faster. |
| 1698 | |
| 1699 | Usage example: |
| @@ -1720,16 +1722,17 @@ | |
| 1722 | seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. Note |
| 1723 | that the z_off_t type (like off_t) is a signed integer. If len2 is |
| 1724 | negative, the result has no meaning or utility. |
| 1725 | */ |
| 1726 | |
| 1727 | ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); |
| 1728 | /* |
| 1729 | Update a running CRC-32 with the bytes buf[0..len-1] and return the |
| 1730 | updated CRC-32. A CRC-32 value is in the range of a 32-bit unsigned integer. |
| 1731 | If buf is Z_NULL, this function returns the required initial value for the |
| 1732 | crc. Pre- and post-conditioning (one's complement) is performed within this |
| 1733 | function so it shouldn't be done by the application. |
| 1734 | |
| 1735 | Usage example: |
| 1736 | |
| 1737 | uLong crc = crc32(0L, Z_NULL, 0); |
| 1738 | |
| @@ -1737,11 +1740,11 @@ | |
| 1740 | crc = crc32(crc, buffer, length); |
| 1741 | } |
| 1742 | if (crc != original_crc) error(); |
| 1743 | */ |
| 1744 | |
| 1745 | ZEXTERN uLong ZEXPORT crc32_z OF((uLong crc, const Bytef *buf, |
| 1746 | z_size_t len)); |
| 1747 | /* |
| 1748 | Same as crc32(), but with a size_t length. |
| 1749 | */ |
| 1750 | |
| @@ -1752,10 +1755,24 @@ | |
| 1755 | seq1 and seq2 with lengths len1 and len2, CRC-32 check values were |
| 1756 | calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 |
| 1757 | check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and |
| 1758 | len2. |
| 1759 | */ |
| 1760 | |
| 1761 | /* |
| 1762 | ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t len2)); |
| 1763 | |
| 1764 | Return the operator corresponding to length len2, to be used with |
| 1765 | crc32_combine_op(). |
| 1766 | */ |
| 1767 | |
| 1768 | ZEXTERN uLong ZEXPORT crc32_combine_op OF((uLong crc1, uLong crc2, uLong op)); |
| 1769 | /* |
| 1770 | Give the same result as crc32_combine(), using op in place of len2. op is |
| 1771 | is generated from len2 by crc32_combine_gen(). This will be faster than |
| 1772 | crc32_combine() if the generated op is used more than once. |
| 1773 | */ |
| 1774 | |
| 1775 | |
| 1776 | /* various hacks, don't look :) */ |
| 1777 | |
| 1778 | /* deflateInit and inflateInit are macros to allow checking the zlib version |
| @@ -1840,10 +1857,11 @@ | |
| 1857 | ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); |
| 1858 | ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); |
| 1859 | ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); |
| 1860 | ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t)); |
| 1861 | ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t)); |
| 1862 | ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off64_t)); |
| 1863 | #endif |
| 1864 | |
| 1865 | #if !defined(ZLIB_INTERNAL) && defined(Z_WANT64) |
| 1866 | # ifdef Z_PREFIX_SET |
| 1867 | # define z_gzopen z_gzopen64 |
| @@ -1850,39 +1868,44 @@ | |
| 1868 | # define z_gzseek z_gzseek64 |
| 1869 | # define z_gztell z_gztell64 |
| 1870 | # define z_gzoffset z_gzoffset64 |
| 1871 | # define z_adler32_combine z_adler32_combine64 |
| 1872 | # define z_crc32_combine z_crc32_combine64 |
| 1873 | # define z_crc32_combine_gen z_crc32_combine_gen64 |
| 1874 | # else |
| 1875 | # define gzopen gzopen64 |
| 1876 | # define gzseek gzseek64 |
| 1877 | # define gztell gztell64 |
| 1878 | # define gzoffset gzoffset64 |
| 1879 | # define adler32_combine adler32_combine64 |
| 1880 | # define crc32_combine crc32_combine64 |
| 1881 | # define crc32_combine_gen crc32_combine_gen64 |
| 1882 | # endif |
| 1883 | # ifndef Z_LARGE64 |
| 1884 | ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); |
| 1885 | ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int)); |
| 1886 | ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile)); |
| 1887 | ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile)); |
| 1888 | ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); |
| 1889 | ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); |
| 1890 | ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off_t)); |
| 1891 | # endif |
| 1892 | #else |
| 1893 | ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *)); |
| 1894 | ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int)); |
| 1895 | ZEXTERN z_off_t ZEXPORT gztell OF((gzFile)); |
| 1896 | ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile)); |
| 1897 | ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); |
| 1898 | ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); |
| 1899 | ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t)); |
| 1900 | #endif |
| 1901 | |
| 1902 | #else /* Z_SOLO */ |
| 1903 | |
| 1904 | ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); |
| 1905 | ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); |
| 1906 | ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t)); |
| 1907 | |
| 1908 | #endif /* !Z_SOLO */ |
| 1909 | |
| 1910 | /* undocumented functions */ |
| 1911 | ZEXTERN const char * ZEXPORT zError OF((int)); |
| @@ -1891,11 +1914,11 @@ | |
| 1914 | ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int)); |
| 1915 | ZEXTERN int ZEXPORT inflateValidate OF((z_streamp, int)); |
| 1916 | ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF ((z_streamp)); |
| 1917 | ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp)); |
| 1918 | ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp)); |
| 1919 | #if defined(_WIN32) && !defined(Z_SOLO) |
| 1920 | ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path, |
| 1921 | const char *mode)); |
| 1922 | #endif |
| 1923 | #if defined(STDC) || defined(Z_HAVE_STDARG_H) |
| 1924 | # ifndef Z_SOLO |
| 1925 |
+6
| --- compat/zlib/zlib.map | ||
| +++ compat/zlib/zlib.map | ||
| @@ -90,5 +90,11 @@ | ||
| 90 | 90 | gzfwrite; |
| 91 | 91 | deflateGetDictionary; |
| 92 | 92 | adler32_z; |
| 93 | 93 | crc32_z; |
| 94 | 94 | } ZLIB_1.2.7.1; |
| 95 | + | |
| 96 | +ZLIB_1.2.12 { | |
| 97 | + crc32_combine_gen; | |
| 98 | + crc32_combine_gen64; | |
| 99 | + crc32_combine_op; | |
| 100 | +} ZLIB_1.2.9; | |
| 95 | 101 |
| --- compat/zlib/zlib.map | |
| +++ compat/zlib/zlib.map | |
| @@ -90,5 +90,11 @@ | |
| 90 | gzfwrite; |
| 91 | deflateGetDictionary; |
| 92 | adler32_z; |
| 93 | crc32_z; |
| 94 | } ZLIB_1.2.7.1; |
| 95 |
| --- compat/zlib/zlib.map | |
| +++ compat/zlib/zlib.map | |
| @@ -90,5 +90,11 @@ | |
| 90 | gzfwrite; |
| 91 | deflateGetDictionary; |
| 92 | adler32_z; |
| 93 | crc32_z; |
| 94 | } ZLIB_1.2.7.1; |
| 95 | |
| 96 | ZLIB_1.2.12 { |
| 97 | crc32_combine_gen; |
| 98 | crc32_combine_gen64; |
| 99 | crc32_combine_op; |
| 100 | } ZLIB_1.2.9; |
| 101 |
+2
-2
| --- compat/zlib/zutil.c | ||
| +++ compat/zlib/zutil.c | ||
| @@ -134,12 +134,12 @@ | ||
| 134 | 134 | int err; |
| 135 | 135 | { |
| 136 | 136 | return ERR_MSG(err); |
| 137 | 137 | } |
| 138 | 138 | |
| 139 | -#if defined(_WIN32_WCE) | |
| 140 | - /* The Microsoft C Run-Time Library for Windows CE doesn't have | |
| 139 | +#if defined(_WIN32_WCE) && _WIN32_WCE < 0x800 | |
| 140 | + /* The older Microsoft C Run-Time Library for Windows CE doesn't have | |
| 141 | 141 | * errno. We define it as a global variable to simplify porting. |
| 142 | 142 | * Its value is always 0 and should not be used. |
| 143 | 143 | */ |
| 144 | 144 | int errno = 0; |
| 145 | 145 | #endif |
| 146 | 146 |
| --- compat/zlib/zutil.c | |
| +++ compat/zlib/zutil.c | |
| @@ -134,12 +134,12 @@ | |
| 134 | int err; |
| 135 | { |
| 136 | return ERR_MSG(err); |
| 137 | } |
| 138 | |
| 139 | #if defined(_WIN32_WCE) |
| 140 | /* The Microsoft C Run-Time Library for Windows CE doesn't have |
| 141 | * errno. We define it as a global variable to simplify porting. |
| 142 | * Its value is always 0 and should not be used. |
| 143 | */ |
| 144 | int errno = 0; |
| 145 | #endif |
| 146 |
| --- compat/zlib/zutil.c | |
| +++ compat/zlib/zutil.c | |
| @@ -134,12 +134,12 @@ | |
| 134 | int err; |
| 135 | { |
| 136 | return ERR_MSG(err); |
| 137 | } |
| 138 | |
| 139 | #if defined(_WIN32_WCE) && _WIN32_WCE < 0x800 |
| 140 | /* The older Microsoft C Run-Time Library for Windows CE doesn't have |
| 141 | * errno. We define it as a global variable to simplify porting. |
| 142 | * Its value is always 0 and should not be used. |
| 143 | */ |
| 144 | int errno = 0; |
| 145 | #endif |
| 146 |
+12
-9
| --- compat/zlib/zutil.h | ||
| +++ compat/zlib/zutil.h | ||
| @@ -1,7 +1,7 @@ | ||
| 1 | 1 | /* zutil.h -- internal interface and configuration of the compression library |
| 2 | - * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler | |
| 2 | + * Copyright (C) 1995-2022 Jean-loup Gailly, Mark Adler | |
| 3 | 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | 4 | */ |
| 5 | 5 | |
| 6 | 6 | /* WARNING: this file should *not* be used by applications. It is |
| 7 | 7 | part of the implementation of the compression library and is |
| @@ -27,14 +27,10 @@ | ||
| 27 | 27 | # endif |
| 28 | 28 | # include <string.h> |
| 29 | 29 | # include <stdlib.h> |
| 30 | 30 | #endif |
| 31 | 31 | |
| 32 | -#ifdef Z_SOLO | |
| 33 | - typedef long ptrdiff_t; /* guess -- will be caught if guess is wrong */ | |
| 34 | -#endif | |
| 35 | - | |
| 36 | 32 | #ifndef local |
| 37 | 33 | # define local static |
| 38 | 34 | #endif |
| 39 | 35 | /* since "static" is used to mean two completely different things in C, we |
| 40 | 36 | define "local" for the non-static meaning of "static", for readability |
| @@ -43,10 +39,21 @@ | ||
| 43 | 39 | typedef unsigned char uch; |
| 44 | 40 | typedef uch FAR uchf; |
| 45 | 41 | typedef unsigned short ush; |
| 46 | 42 | typedef ush FAR ushf; |
| 47 | 43 | typedef unsigned long ulg; |
| 44 | + | |
| 45 | +#if !defined(Z_U8) && !defined(Z_SOLO) && defined(STDC) | |
| 46 | +# include <limits.h> | |
| 47 | +# if (ULONG_MAX == 0xffffffffffffffff) | |
| 48 | +# define Z_U8 unsigned long | |
| 49 | +# elif (ULLONG_MAX == 0xffffffffffffffff) | |
| 50 | +# define Z_U8 unsigned long long | |
| 51 | +# elif (UINT_MAX == 0xffffffffffffffff) | |
| 52 | +# define Z_U8 unsigned | |
| 53 | +# endif | |
| 54 | +#endif | |
| 48 | 55 | |
| 49 | 56 | extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ |
| 50 | 57 | /* (size given to avoid silly warnings with Visual C++) */ |
| 51 | 58 | |
| 52 | 59 | #define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] |
| @@ -168,14 +175,10 @@ | ||
| 168 | 175 | #endif |
| 169 | 176 | |
| 170 | 177 | #if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX |
| 171 | 178 | # if defined(_WIN32_WCE) |
| 172 | 179 | # define fdopen(fd,mode) NULL /* No fdopen() */ |
| 173 | -# ifndef _PTRDIFF_T_DEFINED | |
| 174 | - typedef int ptrdiff_t; | |
| 175 | -# define _PTRDIFF_T_DEFINED | |
| 176 | -# endif | |
| 177 | 180 | # else |
| 178 | 181 | # define fdopen(fd,type) _fdopen(fd,type) |
| 179 | 182 | # endif |
| 180 | 183 | #endif |
| 181 | 184 | |
| 182 | 185 | |
| 183 | 186 | ADDED containers/Dockerfile-nojail.patch |
| 184 | 187 | ADDED containers/busybox-config |
| --- compat/zlib/zutil.h | |
| +++ compat/zlib/zutil.h | |
| @@ -1,7 +1,7 @@ | |
| 1 | /* zutil.h -- internal interface and configuration of the compression library |
| 2 | * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | /* WARNING: this file should *not* be used by applications. It is |
| 7 | part of the implementation of the compression library and is |
| @@ -27,14 +27,10 @@ | |
| 27 | # endif |
| 28 | # include <string.h> |
| 29 | # include <stdlib.h> |
| 30 | #endif |
| 31 | |
| 32 | #ifdef Z_SOLO |
| 33 | typedef long ptrdiff_t; /* guess -- will be caught if guess is wrong */ |
| 34 | #endif |
| 35 | |
| 36 | #ifndef local |
| 37 | # define local static |
| 38 | #endif |
| 39 | /* since "static" is used to mean two completely different things in C, we |
| 40 | define "local" for the non-static meaning of "static", for readability |
| @@ -43,10 +39,21 @@ | |
| 43 | typedef unsigned char uch; |
| 44 | typedef uch FAR uchf; |
| 45 | typedef unsigned short ush; |
| 46 | typedef ush FAR ushf; |
| 47 | typedef unsigned long ulg; |
| 48 | |
| 49 | extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ |
| 50 | /* (size given to avoid silly warnings with Visual C++) */ |
| 51 | |
| 52 | #define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] |
| @@ -168,14 +175,10 @@ | |
| 168 | #endif |
| 169 | |
| 170 | #if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX |
| 171 | # if defined(_WIN32_WCE) |
| 172 | # define fdopen(fd,mode) NULL /* No fdopen() */ |
| 173 | # ifndef _PTRDIFF_T_DEFINED |
| 174 | typedef int ptrdiff_t; |
| 175 | # define _PTRDIFF_T_DEFINED |
| 176 | # endif |
| 177 | # else |
| 178 | # define fdopen(fd,type) _fdopen(fd,type) |
| 179 | # endif |
| 180 | #endif |
| 181 | |
| 182 | |
| 183 | DDED containers/Dockerfile-nojail.patch |
| 184 | DDED containers/busybox-config |
| --- compat/zlib/zutil.h | |
| +++ compat/zlib/zutil.h | |
| @@ -1,7 +1,7 @@ | |
| 1 | /* zutil.h -- internal interface and configuration of the compression library |
| 2 | * Copyright (C) 1995-2022 Jean-loup Gailly, Mark Adler |
| 3 | * For conditions of distribution and use, see copyright notice in zlib.h |
| 4 | */ |
| 5 | |
| 6 | /* WARNING: this file should *not* be used by applications. It is |
| 7 | part of the implementation of the compression library and is |
| @@ -27,14 +27,10 @@ | |
| 27 | # endif |
| 28 | # include <string.h> |
| 29 | # include <stdlib.h> |
| 30 | #endif |
| 31 | |
| 32 | #ifndef local |
| 33 | # define local static |
| 34 | #endif |
| 35 | /* since "static" is used to mean two completely different things in C, we |
| 36 | define "local" for the non-static meaning of "static", for readability |
| @@ -43,10 +39,21 @@ | |
| 39 | typedef unsigned char uch; |
| 40 | typedef uch FAR uchf; |
| 41 | typedef unsigned short ush; |
| 42 | typedef ush FAR ushf; |
| 43 | typedef unsigned long ulg; |
| 44 | |
| 45 | #if !defined(Z_U8) && !defined(Z_SOLO) && defined(STDC) |
| 46 | # include <limits.h> |
| 47 | # if (ULONG_MAX == 0xffffffffffffffff) |
| 48 | # define Z_U8 unsigned long |
| 49 | # elif (ULLONG_MAX == 0xffffffffffffffff) |
| 50 | # define Z_U8 unsigned long long |
| 51 | # elif (UINT_MAX == 0xffffffffffffffff) |
| 52 | # define Z_U8 unsigned |
| 53 | # endif |
| 54 | #endif |
| 55 | |
| 56 | extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ |
| 57 | /* (size given to avoid silly warnings with Visual C++) */ |
| 58 | |
| 59 | #define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] |
| @@ -168,14 +175,10 @@ | |
| 175 | #endif |
| 176 | |
| 177 | #if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX |
| 178 | # if defined(_WIN32_WCE) |
| 179 | # define fdopen(fd,mode) NULL /* No fdopen() */ |
| 180 | # else |
| 181 | # define fdopen(fd,type) _fdopen(fd,type) |
| 182 | # endif |
| 183 | #endif |
| 184 | |
| 185 | |
| 186 | DDED containers/Dockerfile-nojail.patch |
| 187 | DDED containers/busybox-config |
| --- a/containers/Dockerfile-nojail.patch | ||
| +++ b/containers/Dockerfile-nojail.patch | ||
| @@ -0,0 +1,11 @@ | ||
| 1 | +Index: Doc62,13 +62: DocIndebbx/busybox /bin/ | |
| 2 | + etc/os-release /etc/ | |
| 3 | +@@ -84,19 +84,17 @@ | |
| 4 | + 61,13 +61fossil", "server",101,13 +101,13 @@ | |
| 5 | + 18,10 +118,9 @@ | |
| 6 | + ## x:0:0:SysAdmin:/:/bin/nologin' > /etc/passwd9@GO,U:\ | |
| 7 | + && echo 'root:x:0:root'M@N0,C:> /etc/groupA@Hc,b:\ | |
| 8 | + && addgroup -S -g ${UID} fossilj@N0,1v:adduser -S -h `pwd` -g 'Fossil User' -G fossil -u ${UID} fossil \ | |
| 9 | +- && install -d -m 700 -o fossil -g fossil log museumG@NG,o:\ | |
| 10 | +- && install -d -m 755 -o fossil -g fossil devN@N0,3:\ | |
| 11 | +-19@AQ,1:-b@B_,t:+ && install -d -m 700 -o fossil -g fossil log museum26@C9,1: a@EG,1f@FW,_@HE,L@Hj,B:bin/fossil a@HD,f@LC,R:ha1sum "$@"' > /bin/sha1sum9@GO,b@LG,F:ha3sum "$@"' > H@K~,1P@LC,w@Me,O@NW,f:bin/sha?sum |
| --- a/containers/Dockerfile-nojail.patch | |
| +++ b/containers/Dockerfile-nojail.patch | |
| @@ -0,0 +1,11 @@ | |
| --- a/containers/Dockerfile-nojail.patch | |
| +++ b/containers/Dockerfile-nojail.patch | |
| @@ -0,0 +1,11 @@ | |
| 1 | Index: Doc62,13 +62: DocIndebbx/busybox /bin/ |
| 2 | etc/os-release /etc/ |
| 3 | @@ -84,19 +84,17 @@ |
| 4 | 61,13 +61fossil", "server",101,13 +101,13 @@ |
| 5 | 18,10 +118,9 @@ |
| 6 | ## x:0:0:SysAdmin:/:/bin/nologin' > /etc/passwd9@GO,U:\ |
| 7 | && echo 'root:x:0:root'M@N0,C:> /etc/groupA@Hc,b:\ |
| 8 | && addgroup -S -g ${UID} fossilj@N0,1v:adduser -S -h `pwd` -g 'Fossil User' -G fossil -u ${UID} fossil \ |
| 9 | - && install -d -m 700 -o fossil -g fossil log museumG@NG,o:\ |
| 10 | - && install -d -m 755 -o fossil -g fossil devN@N0,3:\ |
| 11 | -19@AQ,1:-b@B_,t:+ && install -d -m 700 -o fossil -g fossil log museum26@C9,1: a@EG,1f@FW,_@HE,L@Hj,B:bin/fossil a@HD,f@LC,R:ha1sum "$@"' > /bin/sha1sum9@GO,b@LG,F:ha3sum "$@"' > H@K~,1P@LC,w@Me,O@NW,f:bin/sha?sum |
+1200
| --- a/containers/busybox-config | ||
| +++ b/containers/busybox-config | ||
| @@ -0,0 +1,1200 @@ | ||
| 1 | +# | |
| 2 | +# Automatically generated make config: don't edit | |
| 3 | +# Busybox version: 1.35.0 | |
| 4 | +# Tue Aug 16 02:15:21 2022 | |
| 5 | +# | |
| 6 | +CONFIG_HAVE_DOT_CONFIG=y | |
| 7 | + | |
| 8 | +# | |
| 9 | +# Settings | |
| 10 | +# | |
| 11 | +CONFIG_DESKTOP=y | |
| 12 | +# CONFIG_EXTRA_COMPAT is not set | |
| 13 | +# CONFIG_FEDORA_COMPAT is not set | |
| 14 | +CONFIG_INCLUDE_SUSv2=y | |
| 15 | +CONFIG_LONG_OPTS=y | |
| 16 | +CONFIG_SHOW_USAGE=y | |
| 17 | +CONFIG_FEATURE_VERBOSE_USAGE=y | |
| 18 | +CONFIG_FEATURE_COMPRESS_USAGE=y | |
| 19 | +CONFIG_LFS=y | |
| 20 | +# CONFIG_PAM is not set | |
| 21 | +CONFIG_FEATURE_DEVPTS=y | |
| 22 | +CONFIG_FEATURE_UTMP=y | |
| 23 | +CONFIG_FEATURE_WTMP=y | |
| 24 | +CONFIG_FEATURE_PIDFILE=y | |
| 25 | +CONFIG_PID_FILE_PATH="/var/run" | |
| 26 | +CONFIG_BUSYBOX=y | |
| 27 | +CONFIG_FEATURE_SHOW_SCRIPT=y | |
| 28 | +CONFIG_FEATURE_INSTALLER=y | |
| 29 | +# CONFIG_INSTALL_NO_USR is not set | |
| 30 | +CONFIG_FEATURE_SUID=y | |
| 31 | +CONFIG_FEATURE_SUID_CONFIG=y | |
| 32 | +CONFIG_FEATURE_SUID_CONFIG_QUIET=y | |
| 33 | +# CONFIG_FEATURE_PREFER_APPLETS is not set | |
| 34 | +CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" | |
| 35 | +# CONFIG_SELINUX is not set | |
| 36 | +# CONFIG_FEATURE_CLEAN_UP is not set | |
| 37 | +CONFIG_FEATURE_SYSLOG_INFO=y | |
| 38 | +CONFIG_FEATURE_SYSLOG=y | |
| 39 | + | |
| 40 | +# | |
| 41 | +# Build Options | |
| 42 | +# | |
| 43 | +CONFIG_STATIC=y | |
| 44 | +# CONFIG_PIE is not set | |
| 45 | +# CONFIG_NOMMU is not set | |
| 46 | +# CONFIG_BUILD_LIBBUSYBOX is not set | |
| 47 | +# CONFIG_FEATURE_LIBBUSYBOX_STATIC is not set | |
| 48 | +# CONFIG_FEATURE_INDIVIDUAL is not set | |
| 49 | +# CONFIG_FEATURE_SHARED_BUSYBOX is not set | |
| 50 | +CONFIG_CROSS_COMPILER_PREFIX="" | |
| 51 | +CONFIG_SYSROOT="" | |
| 52 | +CONFIG_EXTRA_CFLAGS="" | |
| 53 | +CONFIG_EXTRA_LDFLAGS="" | |
| 54 | +CONFIG_EXTRA_LDLIBS="" | |
| 55 | +# CONFIG_USE_PORTABLE_CODE is not set | |
| 56 | +CONFIG_STACK_OPTIMIZATION_386=y | |
| 57 | +CONFIG_STATIC_LIBGCC=y | |
| 58 | + | |
| 59 | +# | |
| 60 | +# Installation Options ("make install" behavior) | |
| 61 | +# | |
| 62 | +CONFIG_INSTALL_APPLET_SYMLINKS=y | |
| 63 | +# CONFIG_INSTALL_APPLET_HARDLINKS is not set | |
| 64 | +# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set | |
| 65 | +# CONFIG_INSTALL_APPLET_DONT is not set | |
| 66 | +# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set | |
| 67 | +# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set | |
| 68 | +# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set | |
| 69 | +CONFIG_PREFIX="./_install" | |
| 70 | + | |
| 71 | +# | |
| 72 | +# Debugging Options | |
| 73 | +# | |
| 74 | +# CONFIG_DEBUG is not set | |
| 75 | +# CONFIG_DEBUG_PESSIMIZE is not set | |
| 76 | +# CONFIG_DEBUG_SANITIZE is not set | |
| 77 | +# CONFIG_UNIT_TEST is not set | |
| 78 | +# CONFIG_WERROR is not set | |
| 79 | +# CONFIG_WARN_SIMPLE_MSG is not set | |
| 80 | +CONFIG_NO_DEBUG_LIB=y | |
| 81 | +# CONFIG_DMALLOC is not set | |
| 82 | +# CONFIG_EFENCE is not set | |
| 83 | + | |
| 84 | +# | |
| 85 | +# Library Tuning | |
| 86 | +# | |
| 87 | +# CONFIG_FEATURE_USE_BSS_TAIL is not set | |
| 88 | +CONFIG_FLOAT_DURATION=y | |
| 89 | +CONFIG_FEATURE_RTMINMAX=y | |
| 90 | +CONFIG_FEATURE_RTMINMAX_USE_LIBC_DEFINITIONS=y | |
| 91 | +CONFIG_FEATURE_BUFFERS_USE_MALLOC=y | |
| 92 | +# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set | |
| 93 | +# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set | |
| 94 | +CONFIG_PASSWORD_MINLEN=6 | |
| 95 | +CONFIG_MD5_SMALL=1 | |
| 96 | +CONFIG_SHA3_SMALL=1 | |
| 97 | +CONFIG_FEATURE_NON_POSIX_CP=y | |
| 98 | +# CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set | |
| 99 | +CONFIG_FEATURE_USE_SENDFILE=y | |
| 100 | +CONFIG_FEATURE_COPYBUF_KB=4 | |
| 101 | +CONFIG_MONOTONIC_SYSCALL=y | |
| 102 | +CONFIG_IOCTL_HEX2STR_ERROR=y | |
| 103 | +CONFIG_FEATURE_EDITING=y | |
| 104 | +CONFIG_FEATURE_EDITING_MAX_LEN=1024 | |
| 105 | +# CONFIG_FEATURE_EDITING_VI is not set | |
| 106 | +CONFIG_FEATURE_EDITING_HISTORY=255 | |
| 107 | +CONFIG_FEATURE_EDITING_SAVEHISTORY=y | |
| 108 | +# CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set | |
| 109 | +CONFIG_FEATURE_REVERSE_SEARCH=y | |
| 110 | +CONFIG_FEATURE_TAB_COMPLETION=y | |
| 111 | +CONFIG_FEATURE_USERNAME_COMPLETION=y | |
| 112 | +CONFIG_FEATURE_EDITING_FANCY_PROMPT=y | |
| 113 | +CONFIG_FEATURE_EDITING_WINCH=y | |
| 114 | +# CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set | |
| 115 | +# CONFIG_LOCALE_SUPPORT is not set | |
| 116 | +CONFIG_UNICODE_SUPPORT=y | |
| 117 | +# CONFIG_UNICODE_USING_LOCALE is not set | |
| 118 | +# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set | |
| 119 | +CONFIG_SUBST_WCHAR=63 | |
| 120 | +CONFIG_LAST_SUPPORTED_WCHAR=767 | |
| 121 | +# CONFIG_UNICODE_COMBINING_WCHARS is not set | |
| 122 | +# CONFIG_UNICODE_WIDE_WCHARS is not set | |
| 123 | +# CONFIG_UNICODE_BIDI_SUPPORT is not set | |
| 124 | +# CONFIG_UNICODE_NEUTRAL_TABLE is not set | |
| 125 | +# CONFIG_UNICODE_PRESERVE_BROKEN is not set | |
| 126 | + | |
| 127 | +# | |
| 128 | +# Applets | |
| 129 | +# | |
| 130 | + | |
| 131 | +# | |
| 132 | +# Archival Utilities | |
| 133 | +# | |
| 134 | +# CONFIG_FEATURE_SEAMLESS_XZ is not set | |
| 135 | +# CONFIG_FEATURE_SEAMLESS_LZMA is not set | |
| 136 | +# CONFIG_FEATURE_SEAMLESS_BZ2 is not set | |
| 137 | +CONFIG_FEATURE_SEAMLESS_GZ=y | |
| 138 | +# CONFIG_FEATURE_SEAMLESS_Z is not set | |
| 139 | +# CONFIG_AR is not set | |
| 140 | +# CONFIG_FEATURE_AR_LONG_FILENAMES is not set | |
| 141 | +# CONFIG_FEATURE_AR_CREATE is not set | |
| 142 | +# CONFIG_UNCOMPRESS is not set | |
| 143 | +CONFIG_GUNZIP=y | |
| 144 | +CONFIG_ZCAT=y | |
| 145 | +CONFIG_FEATURE_GUNZIP_LONG_OPTIONS=y | |
| 146 | +# CONFIG_BUNZIP2 is not set | |
| 147 | +# CONFIG_BZCAT is not set | |
| 148 | +# CONFIG_UNLZMA is not set | |
| 149 | +# CONFIG_LZCAT is not set | |
| 150 | +# CONFIG_LZMA is not set | |
| 151 | +# CONFIG_UNXZ is not set | |
| 152 | +# CONFIG_XZCAT is not set | |
| 153 | +# CONFIG_XZ is not set | |
| 154 | +# CONFIG_BZIP2 is not set | |
| 155 | +CONFIG_BZIP2_SMALL=0 | |
| 156 | +# CONFIG_FEATURE_BZIP2_DECOMPRESS is not set | |
| 157 | +# CONFIG_CPIO is not set | |
| 158 | +# CONFIG_FEATURE_CPIO_O is not set | |
| 159 | +# CONFIG_FEATURE_CPIO_P is not set | |
| 160 | +# CONFIG_FEATURE_CPIO_IGNORE_DEVNO is not set | |
| 161 | +# CONFIG_FEATURE_CPIO_RENUMBER_INODES is not set | |
| 162 | +# CONFIG_DPKG is not set | |
| 163 | +# CONFIG_DPKG_DEB is not set | |
| 164 | +CONFIG_GZIP=y | |
| 165 | +CONFIG_FEATURE_GZIP_LONG_OPTIONS=y | |
| 166 | +CONFIG_GZIP_FAST=0 | |
| 167 | +# CONFIG_FEATURE_GZIP_LEVELS is not set | |
| 168 | +CONFIG_FEATURE_GZIP_DECOMPRESS=y | |
| 169 | +# CONFIG_LZOP is not set | |
| 170 | +# CONFIG_UNLZOP is not set | |
| 171 | +# CONFIG_LZOPCAT is not set | |
| 172 | +# CONFIG_LZOP_COMPR_HIGH is not set | |
| 173 | +# CONFIG_RPM is not set | |
| 174 | +# CONFIG_RPM2CPIO is not set | |
| 175 | +CONFIG_TAR=y | |
| 176 | +CONFIG_FEATURE_TAR_LONG_OPTIONS=y | |
| 177 | +CONFIG_FEATURE_TAR_CREATE=y | |
| 178 | +CONFIG_FEATURE_TAR_AUTODETECT=y | |
| 179 | +CONFIG_FEATURE_TAR_FROM=y | |
| 180 | +# CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set | |
| 181 | +# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set | |
| 182 | +CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y | |
| 183 | +# CONFIG_FEATURE_TAR_TO_COMMAND is not set | |
| 184 | +CONFIG_FEATURE_TAR_UNAME_GNAME=y | |
| 185 | +CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y | |
| 186 | +# CONFIG_FEATURE_TAR_SELINUX is not set | |
| 187 | +CONFIG_UNZIP=y | |
| 188 | +CONFIG_FEATURE_UNZIP_CDF=y | |
| 189 | +CONFIG_FEATURE_UNZIP_BZIP2=y | |
| 190 | +CONFIG_FEATURE_UNZIP_LZMA=y | |
| 191 | +CONFIG_FEATURE_UNZIP_XZ=y | |
| 192 | +# CONFIG_FEATURE_LZMA_FAST is not set | |
| 193 | + | |
| 194 | +# | |
| 195 | +# Coreutils | |
| 196 | +# | |
| 197 | +CONFIG_FEATURE_VERBOSE=y | |
| 198 | + | |
| 199 | +# | |
| 200 | +# Common options for date and touch | |
| 201 | +# | |
| 202 | +CONFIG_FEATURE_TIMEZONE=y | |
| 203 | + | |
| 204 | +# | |
| 205 | +# Common options for cp and mv | |
| 206 | +# | |
| 207 | +CONFIG_FEATURE_PRESERVE_HARDLINKS=y | |
| 208 | + | |
| 209 | +# | |
| 210 | +# Common options for df, du, ls | |
| 211 | +# | |
| 212 | +CONFIG_FEATURE_HUMAN_READABLE=y | |
| 213 | +CONFIG_BASENAME=y | |
| 214 | +CONFIG_CAT=y | |
| 215 | +CONFIG_FEATURE_CATN=y | |
| 216 | +CONFIG_FEATURE_CATV=y | |
| 217 | +CONFIG_CHGRP=y | |
| 218 | +CONFIG_CHMOD=y | |
| 219 | +CONFIG_CHOWN=y | |
| 220 | +CONFIG_FEATURE_CHOWN_LONG_OPTIONS=y | |
| 221 | +CONFIG_CHROOT=y | |
| 222 | +# CONFIG_CKSUM is not set | |
| 223 | +# CONFIG_CRC32 is not set | |
| 224 | +CONFIG_COMM=y | |
| 225 | +CONFIG_CP=y | |
| 226 | +CONFIG_FEATURE_CP_LONG_OPTIONS=y | |
| 227 | +CONFIG_FEATURE_CP_REFLINK=y | |
| 228 | +CONFIG_CUT=y | |
| 229 | +CONFIG_FEATURE_CUT_REGEX=y | |
| 230 | +CONFIG_DATE=y | |
| 231 | +CONFIG_FEATURE_DATE_ISOFMT=y | |
| 232 | +# CONFIG_FEATURE_DATE_NANO is not set | |
| 233 | +CONFIG_FEATURE_DATE_COMPAT=y | |
| 234 | +CONFIG_DD=y | |
| 235 | +CONFIG_FEATURE_DD_SIGNAL_HANDLING=y | |
| 236 | +CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y | |
| 237 | +CONFIG_FEATURE_DD_IBS_OBS=y | |
| 238 | +CONFIG_FEATURE_DD_STATUS=y | |
| 239 | +CONFIG_DF=y | |
| 240 | +CONFIG_FEATURE_DF_FANCY=y | |
| 241 | +CONFIG_FEATURE_SKIP_ROOTFS=y | |
| 242 | +CONFIG_DIRNAME=y | |
| 243 | +CONFIG_DOS2UNIX=y | |
| 244 | +CONFIG_UNIX2DOS=y | |
| 245 | +CONFIG_DU=y | |
| 246 | +CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y | |
| 247 | +# CONFIG_ECHO is not set | |
| 248 | +CONFIG_FEATURE_FANCY_ECHO=y | |
| 249 | +CONFIG_ENV=y | |
| 250 | +CONFIG_EXPAND=y | |
| 251 | +CONFIG_UNEXPAND=y | |
| 252 | +CONFIG_EXPR=y | |
| 253 | +CONFIG_EXPR_MATH_SUPPORT_64=y | |
| 254 | +# CONFIG_FACTOR is not set | |
| 255 | +CONFIG_FALSE=y | |
| 256 | +CONFIG_FOLD=y | |
| 257 | +CONFIG_HEAD=y | |
| 258 | +CONFIG_FEATURE_FANCY_HEAD=y | |
| 259 | +CONFIG_HOSTID=y | |
| 260 | +CONFIG_ID=y | |
| 261 | +CONFIG_GROUPS=y | |
| 262 | +CONFIG_INSTALL=y | |
| 263 | +CONFIG_FEATURE_INSTALL_LONG_OPTIONS=y | |
| 264 | +CONFIG_LINK=y | |
| 265 | +CONFIG_LN=y | |
| 266 | +# CONFIG_LOGNAME is not set | |
| 267 | +CONFIG_LS=y | |
| 268 | +CONFIG_FEATURE_LS_FILETYPES=y | |
| 269 | +CONFIG_FEATURE_LS_FOLLOWLINKS=y | |
| 270 | +CONFIG_FEATURE_LS_RECURSIVE=y | |
| 271 | +CONFIG_FEATURE_LS_WIDTH=y | |
| 272 | +CONFIG_FEATURE_LS_SORTFILES=y | |
| 273 | +CONFIG_FEATURE_LS_TIMESTAMPS=y | |
| 274 | +CONFIG_FEATURE_LS_USERNAME=y | |
| 275 | +CONFIG_FEATURE_LS_COLOR=y | |
| 276 | +CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y | |
| 277 | +# CONFIG_MD5SUM is not set | |
| 278 | +# CONFIG_SHA1SUM is not set | |
| 279 | +# CONFIG_SHA256SUM is not set | |
| 280 | +# CONFIG_SHA512SUM is not set | |
| 281 | +# CONFIG_SHA3SUM is not set | |
| 282 | +# CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set | |
| 283 | +CONFIG_MKDIR=y | |
| 284 | +CONFIG_MKFIFO=y | |
| 285 | +CONFIG_MKNOD=y | |
| 286 | +CONFIG_MKTEMP=y | |
| 287 | +CONFIG_MV=y | |
| 288 | +CONFIG_NICE=y | |
| 289 | +CONFIG_NL=y | |
| 290 | +CONFIG_NOHUP=y | |
| 291 | +CONFIG_NPROC=y | |
| 292 | +CONFIG_OD=y | |
| 293 | +CONFIG_PASTE=y | |
| 294 | +# CONFIG_PRINTENV is not set | |
| 295 | +# CONFIG_PRINTF is not set | |
| 296 | +CONFIG_PWD=y | |
| 297 | +CONFIG_READLINK=y | |
| 298 | +CONFIG_FEATURE_READLINK_FOLLOW=y | |
| 299 | +CONFIG_REALPATH=y | |
| 300 | +CONFIG_RM=y | |
| 301 | +CONFIG_RMDIR=y | |
| 302 | +CONFIG_SEQ=y | |
| 303 | +CONFIG_SHRED=y | |
| 304 | +CONFIG_SHUF=y | |
| 305 | +CONFIG_SLEEP=y | |
| 306 | +CONFIG_FEATURE_FANCY_SLEEP=y | |
| 307 | +CONFIG_SORT=y | |
| 308 | +# CONFIG_FEATURE_SORT_BIG is not set | |
| 309 | +# CONFIG_FEATURE_SORT_OPTIMIZE_MEMORY is not set | |
| 310 | +CONFIG_SPLIT=y | |
| 311 | +CONFIG_FEATURE_SPLIT_FANCY=y | |
| 312 | +CONFIG_STAT=y | |
| 313 | +CONFIG_FEATURE_STAT_FORMAT=y | |
| 314 | +CONFIG_FEATURE_STAT_FILESYSTEM=y | |
| 315 | +CONFIG_STTY=y | |
| 316 | +# CONFIG_SUM is not set | |
| 317 | +CONFIG_SYNC=y | |
| 318 | +CONFIG_FEATURE_SYNC_FANCY=y | |
| 319 | +CONFIG_FSYNC=y | |
| 320 | +CONFIG_TAC=y | |
| 321 | +CONFIG_TAIL=y | |
| 322 | +CONFIG_FEATURE_FANCY_TAIL=y | |
| 323 | +CONFIG_TEE=y | |
| 324 | +CONFIG_FEATURE_TEE_USE_BLOCK_IO=y | |
| 325 | +# CONFIG_TEST is not set | |
| 326 | +# CONFIG_TEST1 is not set | |
| 327 | +# CONFIG_TEST2 is not set | |
| 328 | +# CONFIG_FEATURE_TEST_64 is not set | |
| 329 | +CONFIG_TIMEOUT=y | |
| 330 | +CONFIG_TOUCH=y | |
| 331 | +CONFIG_FEATURE_TOUCH_SUSV3=y | |
| 332 | +CONFIG_TR=y | |
| 333 | +CONFIG_FEATURE_TR_CLASSES=y | |
| 334 | +CONFIG_FEATURE_TR_EQUIV=y | |
| 335 | +CONFIG_TRUE=y | |
| 336 | +CONFIG_TRUNCATE=y | |
| 337 | +CONFIG_TTY=y | |
| 338 | +CONFIG_UNAME=y | |
| 339 | +CONFIG_UNAME_OSNAME="GNU/Linux" | |
| 340 | +CONFIG_BB_ARCH=y | |
| 341 | +CONFIG_UNIQ=y | |
| 342 | +CONFIG_UNLINK=y | |
| 343 | +CONFIG_USLEEP=y | |
| 344 | +CONFIG_UUDECODE=y | |
| 345 | +CONFIG_BASE32=y | |
| 346 | +CONFIG_BASE64=y | |
| 347 | +CONFIG_UUENCODE=y | |
| 348 | +CONFIG_WC=y | |
| 349 | +CONFIG_FEATURE_WC_LARGE=y | |
| 350 | +CONFIG_WHO=y | |
| 351 | +CONFIG_W=y | |
| 352 | +CONFIG_USERS=y | |
| 353 | +CONFIG_WHOAMI=y | |
| 354 | +CONFIG_YES=y | |
| 355 | + | |
| 356 | +# | |
| 357 | +# Console Utilities | |
| 358 | +# | |
| 359 | +# CONFIG_CHVT is not set | |
| 360 | +CONFIG_CLEAR=y | |
| 361 | +# CONFIG_DEALLOCVT is not set | |
| 362 | +# CONFIG_DUMPKMAP is not set | |
| 363 | +# CONFIG_FGCONSOLE is not set | |
| 364 | +# CONFIG_KBD_MODE is not set | |
| 365 | +# CONFIG_LOADFONT is not set | |
| 366 | +# CONFIG_SETFONT is not set | |
| 367 | +# CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set | |
| 368 | +CONFIG_DEFAULT_SETFONT_DIR="" | |
| 369 | +# CONFIG_FEATURE_LOADFONT_PSF2 is not set | |
| 370 | +# CONFIG_FEATURE_LOADFONT_RAW is not set | |
| 371 | +# CONFIG_LOADKMAP is not set | |
| 372 | +# CONFIG_OPENVT is not set | |
| 373 | +# CONFIG_RESET is not set | |
| 374 | +# CONFIG_RESIZE is not set | |
| 375 | +# CONFIG_FEATURE_RESIZE_PRINT is not set | |
| 376 | +# CONFIG_SETCONSOLE is not set | |
| 377 | +# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set | |
| 378 | +# CONFIG_SETKEYCODES is not set | |
| 379 | +# CONFIG_SETLOGCONS is not set | |
| 380 | +# CONFIG_SHOWKEY is not set | |
| 381 | + | |
| 382 | +# | |
| 383 | +# Debian Utilities | |
| 384 | +# | |
| 385 | +# CONFIG_PIPE_PROGRESS is not set | |
| 386 | +# CONFIG_RUN_PARTS is not set | |
| 387 | +# CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set | |
| 388 | +# CONFIG_FEATURE_RUN_PARTS_FANCY is not set | |
| 389 | +# CONFIG_START_STOP_DAEMON is not set | |
| 390 | +# CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set | |
| 391 | +# CONFIG_FEATURE_START_STOP_DAEMON_FANCY is not set | |
| 392 | +CONFIG_WHICH=y | |
| 393 | + | |
| 394 | +# | |
| 395 | +# klibc-utils | |
| 396 | +# | |
| 397 | +# CONFIG_MINIPS is not set | |
| 398 | +# CONFIG_NUKE is not set | |
| 399 | +# CONFIG_RESUME is not set | |
| 400 | +# CONFIG_RUN_INIT is not set | |
| 401 | + | |
| 402 | +# | |
| 403 | +# Editors | |
| 404 | +# | |
| 405 | +# CONFIG_AWK is not set | |
| 406 | +# CONFIG_FEATURE_AWK_LIBM is not set | |
| 407 | +# CONFIG_FEATURE_AWK_GNU_EXTENSIONS is not set | |
| 408 | +# CONFIG_CMP is not set | |
| 409 | +CONFIG_DIFF=y | |
| 410 | +CONFIG_FEATURE_DIFF_LONG_OPTIONS=y | |
| 411 | +CONFIG_FEATURE_DIFF_DIR=y | |
| 412 | +# CONFIG_ED is not set | |
| 413 | +CONFIG_PATCH=y | |
| 414 | +CONFIG_SED=y | |
| 415 | +CONFIG_VI=y | |
| 416 | +CONFIG_FEATURE_VI_MAX_LEN=4096 | |
| 417 | +# CONFIG_FEATURE_VI_8BIT is not set | |
| 418 | +CONFIG_FEATURE_VI_COLON=y | |
| 419 | +CONFIG_FEATURE_VI_COLON_EXPAND=y | |
| 420 | +CONFIG_FEATURE_VI_YANKMARK=y | |
| 421 | +CONFIG_FEATURE_VI_SEARCH=y | |
| 422 | +# CONFIG_FEATURE_VI_REGEX_SEARCH is not set | |
| 423 | +CONFIG_FEATURE_VI_USE_SIGNALS=y | |
| 424 | +CONFIG_FEATURE_VI_DOT_CMD=y | |
| 425 | +CONFIG_FEATURE_VI_READONLY=y | |
| 426 | +CONFIG_FEATURE_VI_SETOPTS=y | |
| 427 | +CONFIG_FEATURE_VI_SET=y | |
| 428 | +CONFIG_FEATURE_VI_WIN_RESIZE=y | |
| 429 | +CONFIG_FEATURE_VI_ASK_TERMINAL=y | |
| 430 | +CONFIG_FEATURE_VI_UNDO=y | |
| 431 | +CONFIG_FEATURE_VI_UNDO_QUEUE=y | |
| 432 | +CONFIG_FEATURE_VI_UNDO_QUEUE_MAX=256 | |
| 433 | +CONFIG_FEATURE_VI_VERBOSE_STATUS=y | |
| 434 | +CONFIG_FEATURE_ALLOW_EXEC=y | |
| 435 | + | |
| 436 | +# | |
| 437 | +# Finding Utilities | |
| 438 | +# | |
| 439 | +CONFIG_FIND=y | |
| 440 | +CONFIG_FEATURE_FIND_PRINT0=y | |
| 441 | +CONFIG_FEATURE_FIND_MTIME=y | |
| 442 | +CONFIG_FEATURE_FIND_ATIME=y | |
| 443 | +CONFIG_FEATURE_FIND_CTIME=y | |
| 444 | +CONFIG_FEATURE_FIND_MMIN=y | |
| 445 | +CONFIG_FEATURE_FIND_AMIN=y | |
| 446 | +CONFIG_FEATURE_FIND_CMIN=y | |
| 447 | +CONFIG_FEATURE_FIND_PERM=y | |
| 448 | +CONFIG_FEATURE_FIND_TYPE=y | |
| 449 | +CONFIG_FEATURE_FIND_EXECUTABLE=y | |
| 450 | +CONFIG_FEATURE_FIND_XDEV=y | |
| 451 | +CONFIG_FEATURE_FIND_MAXDEPTH=y | |
| 452 | +CONFIG_FEATURE_FIND_NEWER=y | |
| 453 | +CONFIG_FEATURE_FIND_INUM=y | |
| 454 | +CONFIG_FEATURE_FIND_SAMEFILE=y | |
| 455 | +CONFIG_FEATURE_FIND_EXEC=y | |
| 456 | +CONFIG_FEATURE_FIND_EXEC_PLUS=y | |
| 457 | +CONFIG_FEATURE_FIND_USER=y | |
| 458 | +CONFIG_FEATURE_FIND_GROUP=y | |
| 459 | +CONFIG_FEATURE_FIND_NOT=y | |
| 460 | +CONFIG_FEATURE_FIND_DEPTH=y | |
| 461 | +CONFIG_FEATURE_FIND_PAREN=y | |
| 462 | +CONFIG_FEATURE_FIND_SIZE=y | |
| 463 | +CONFIG_FEATURE_FIND_PRUNE=y | |
| 464 | +CONFIG_FEATURE_FIND_QUIT=y | |
| 465 | +CONFIG_FEATURE_FIND_DELETE=y | |
| 466 | +CONFIG_FEATURE_FIND_EMPTY=y | |
| 467 | +CONFIG_FEATURE_FIND_PATH=y | |
| 468 | +CONFIG_FEATURE_FIND_REGEX=y | |
| 469 | +# CONFIG_FEATURE_FIND_CONTEXT is not set | |
| 470 | +CONFIG_FEATURE_FIND_LINKS=y | |
| 471 | +CONFIG_GREP=y | |
| 472 | +# CONFIG_EGREP is not set | |
| 473 | +# CONFIG_FGREP is not set | |
| 474 | +CONFIG_FEATURE_GREP_CONTEXT=y | |
| 475 | +CONFIG_XARGS=y | |
| 476 | +CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y | |
| 477 | +CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y | |
| 478 | +CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y | |
| 479 | +CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y | |
| 480 | +CONFIG_FEATURE_XARGS_SUPPORT_REPL_STR=y | |
| 481 | +CONFIG_FEATURE_XARGS_SUPPORT_PARALLEL=y | |
| 482 | +CONFIG_FEATURE_XARGS_SUPPORT_ARGS_FILE=y | |
| 483 | + | |
| 484 | +# | |
| 485 | +# Init Utilities | |
| 486 | +# | |
| 487 | +# CONFIG_BOOTCHARTD is not set | |
| 488 | +# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set | |
| 489 | +# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set | |
| 490 | +# CONFIG_HALT is not set | |
| 491 | +# CONFIG_POWEROFF is not set | |
| 492 | +# CONFIG_REBOOT is not set | |
| 493 | +# CONFIG_FEATURE_WAIT_FOR_INIT is not set | |
| 494 | +# CONFIG_FEATURE_CALL_TELINIT is not set | |
| 495 | +CONFIG_TELINIT_PATH="" | |
| 496 | +# CONFIG_INIT is not set | |
| 497 | +# CONFIG_LINUXRC is not set | |
| 498 | +# CONFIG_FEATURE_USE_INITTAB is not set | |
| 499 | +# CONFIG_FEATURE_KILL_REMOVED is not set | |
| 500 | +CONFIG_FEATURE_KILL_DELAY=0 | |
| 501 | +# CONFIG_FEATURE_INIT_SCTTY is not set | |
| 502 | +# CONFIG_FEATURE_INIT_SYSLOG is not set | |
| 503 | +# CONFIG_FEATURE_INIT_QUIET is not set | |
| 504 | +# CONFIG_FEATURE_INIT_COREDUMPS is not set | |
| 505 | +CONFIG_INIT_TERMINAL_TYPE="" | |
| 506 | +# CONFIG_FEATURE_INIT_MODIFY_CMDLINE is not set | |
| 507 | + | |
| 508 | +# | |
| 509 | +# Login/Password Management Utilities | |
| 510 | +# | |
| 511 | +# CONFIG_FEATURE_SHADOWPASSWDS is not set | |
| 512 | +CONFIG_USE_BB_PWD_GRP=y | |
| 513 | +# CONFIG_USE_BB_SHADOW is not set | |
| 514 | +CONFIG_USE_BB_CRYPT=y | |
| 515 | +CONFIG_USE_BB_CRYPT_SHA=y | |
| 516 | +# CONFIG_ADD_SHELL is not set | |
| 517 | +# CONFIG_REMOVE_SHELL is not set | |
| 518 | +CONFIG_ADDGROUP=y | |
| 519 | +# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set | |
| 520 | +CONFIG_ADDUSER=y | |
| 521 | +# CONFIG_FEATURE_CHECK_NAMES is not set | |
| 522 | +CONFIG_LAST_ID=60000 | |
| 523 | +CONFIG_FIRST_SYSTEM_ID=100 | |
| 524 | +CONFIG_LAST_SYSTEM_ID=999 | |
| 525 | +# CONFIG_CHPASSWD is not set | |
| 526 | +CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="" | |
| 527 | +# CONFIG_CRYPTPW is not set | |
| 528 | +# CONFIG_MKPASSWD is not set | |
| 529 | +# CONFIG_DELUSER is not set | |
| 530 | +# CONFIG_DELGROUP is not set | |
| 531 | +# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set | |
| 532 | +# CONFIG_GETTY is not set | |
| 533 | +# CONFIG_LOGIN is not set | |
| 534 | +# CONFIG_LOGIN_SESSION_AS_CHILD is not set | |
| 535 | +# CONFIG_LOGIN_SCRIPTS is not set | |
| 536 | +# CONFIG_FEATURE_NOLOGIN is not set | |
| 537 | +# CONFIG_FEATURE_SECURETTY is not set | |
| 538 | +# CONFIG_PASSWD is not set | |
| 539 | +# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set | |
| 540 | +# CONFIG_SU is not set | |
| 541 | +# CONFIG_FEATURE_SU_SYSLOG is not set | |
| 542 | +# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set | |
| 543 | +# CONFIG_FEATURE_SU_BLANK_PW_NEEDS_SECURE_TTY is not set | |
| 544 | +# CONFIG_SULOGIN is not set | |
| 545 | +# CONFIG_VLOCK is not set | |
| 546 | + | |
| 547 | +# | |
| 548 | +# Linux Ext2 FS Progs | |
| 549 | +# | |
| 550 | +# CONFIG_CHATTR is not set | |
| 551 | +# CONFIG_FSCK is not set | |
| 552 | +# CONFIG_LSATTR is not set | |
| 553 | +# CONFIG_TUNE2FS is not set | |
| 554 | + | |
| 555 | +# | |
| 556 | +# Linux Module Utilities | |
| 557 | +# | |
| 558 | +# CONFIG_MODPROBE_SMALL is not set | |
| 559 | +# CONFIG_DEPMOD is not set | |
| 560 | +# CONFIG_INSMOD is not set | |
| 561 | +# CONFIG_LSMOD is not set | |
| 562 | +# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set | |
| 563 | +# CONFIG_MODINFO is not set | |
| 564 | +# CONFIG_MODPROBE is not set | |
| 565 | +# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set | |
| 566 | +# CONFIG_RMMOD is not set | |
| 567 | + | |
| 568 | +# | |
| 569 | +# Options common to multiple modutils | |
| 570 | +# | |
| 571 | +# CONFIG_FEATURE_CMDLINE_MODULE_OPTIONS is not set | |
| 572 | +# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set | |
| 573 | +# CONFIG_FEATURE_2_4_MODULES is not set | |
| 574 | +# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set | |
| 575 | +# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set | |
| 576 | +# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set | |
| 577 | +# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set | |
| 578 | +# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set | |
| 579 | +# CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set | |
| 580 | +# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set | |
| 581 | +# CONFIG_FEATURE_MODUTILS_ALIAS is not set | |
| 582 | +# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set | |
| 583 | +CONFIG_DEFAULT_MODULES_DIR="" | |
| 584 | +CONFIG_DEFAULT_DEPMOD_FILE="" | |
| 585 | + | |
| 586 | +# | |
| 587 | +# Linux System Utilities | |
| 588 | +# | |
| 589 | +# CONFIG_ACPID is not set | |
| 590 | +# CONFIG_FEATURE_ACPID_COMPAT is not set | |
| 591 | +# CONFIG_BLKDISCARD is not set | |
| 592 | +# CONFIG_BLKID is not set | |
| 593 | +# CONFIG_FEATURE_BLKID_TYPE is not set | |
| 594 | +# CONFIG_BLOCKDEV is not set | |
| 595 | +# CONFIG_CAL is not set | |
| 596 | +# CONFIG_CHRT is not set | |
| 597 | +# CONFIG_DMESG is not set | |
| 598 | +# CONFIG_FEATURE_DMESG_PRETTY is not set | |
| 599 | +# CONFIG_EJECT is not set | |
| 600 | +# CONFIG_FEATURE_EJECT_SCSI is not set | |
| 601 | +# CONFIG_FALLOCATE is not set | |
| 602 | +# CONFIG_FATATTR is not set | |
| 603 | +# CONFIG_FBSET is not set | |
| 604 | +# CONFIG_FEATURE_FBSET_FANCY is not set | |
| 605 | +# CONFIG_FEATURE_FBSET_READMODE is not set | |
| 606 | +# CONFIG_FDFORMAT is not set | |
| 607 | +# CONFIG_FDISK is not set | |
| 608 | +# CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set | |
| 609 | +# CONFIG_FEATURE_FDISK_WRITABLE is not set | |
| 610 | +# CONFIG_FEATURE_AIX_LABEL is not set | |
| 611 | +# CONFIG_FEATURE_SGI_LABEL is not set | |
| 612 | +# CONFIG_FEATURE_SUN_LABEL is not set | |
| 613 | +# CONFIG_FEATURE_OSF_LABEL is not set | |
| 614 | +# CONFIG_FEATURE_GPT_LABEL is not set | |
| 615 | +# CONFIG_FEATURE_FDISK_ADVANCED is not set | |
| 616 | +# CONFIG_FINDFS is not set | |
| 617 | +# CONFIG_FLOCK is not set | |
| 618 | +# CONFIG_FDFLUSH is not set | |
| 619 | +# CONFIG_FREERAMDISK is not set | |
| 620 | +# CONFIG_FSCK_MINIX is not set | |
| 621 | +# CONFIG_FSFREEZE is not set | |
| 622 | +# CONFIG_FSTRIM is not set | |
| 623 | +# CONFIG_GETOPT is not set | |
| 624 | +# CONFIG_FEATURE_GETOPT_LONG is not set | |
| 625 | +CONFIG_HEXDUMP=y | |
| 626 | +CONFIG_HD=y | |
| 627 | +CONFIG_XXD=y | |
| 628 | +# CONFIG_HWCLOCK is not set | |
| 629 | +# CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set | |
| 630 | +# CONFIG_IONICE is not set | |
| 631 | +# CONFIG_IPCRM is not set | |
| 632 | +# CONFIG_IPCS is not set | |
| 633 | +# CONFIG_LAST is not set | |
| 634 | +# CONFIG_FEATURE_LAST_FANCY is not set | |
| 635 | +# CONFIG_LOSETUP is not set | |
| 636 | +# CONFIG_LSPCI is not set | |
| 637 | +# CONFIG_LSUSB is not set | |
| 638 | +# CONFIG_MDEV is not set | |
| 639 | +# CONFIG_FEATURE_MDEV_CONF is not set | |
| 640 | +# CONFIG_FEATURE_MDEV_RENAME is not set | |
| 641 | +# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set | |
| 642 | +# CONFIG_FEATURE_MDEV_EXEC is not set | |
| 643 | +# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set | |
| 644 | +# CONFIG_FEATURE_MDEV_DAEMON is not set | |
| 645 | +# CONFIG_MESG is not set | |
| 646 | +# CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP is not set | |
| 647 | +# CONFIG_MKE2FS is not set | |
| 648 | +# CONFIG_MKFS_EXT2 is not set | |
| 649 | +# CONFIG_MKFS_MINIX is not set | |
| 650 | +# CONFIG_FEATURE_MINIX2 is not set | |
| 651 | +# CONFIG_MKFS_REISER is not set | |
| 652 | +# CONFIG_MKDOSFS is not set | |
| 653 | +# CONFIG_MKFS_VFAT is not set | |
| 654 | +# CONFIG_MKSWAP is not set | |
| 655 | +# CONFIG_FEATURE_MKSWAP_UUID is not set | |
| 656 | +CONFIG_MORE=y | |
| 657 | +CONFIG_MOUNT=y | |
| 658 | +CONFIG_FEATURE_MOUNT_FAKE=y | |
| 659 | +CONFIG_FEATURE_MOUNT_VERBOSE=y | |
| 660 | +# CONFIG_FEATURE_MOUNT_HELPERS is not set | |
| 661 | +# CONFIG_FEATURE_MOUNT_LABEL is not set | |
| 662 | +# CONFIG_FEATURE_MOUNT_NFS is not set | |
| 663 | +# CONFIG_FEATURE_MOUNT_CIFS is not set | |
| 664 | +CONFIG_FEATURE_MOUNT_FLAGS=y | |
| 665 | +CONFIG_FEATURE_MOUNT_FSTAB=y | |
| 666 | +CONFIG_FEATURE_MOUNT_OTHERTAB=y | |
| 667 | +# CONFIG_MOUNTPOINT is not set | |
| 668 | +CONFIG_NOLOGIN=y | |
| 669 | +# CONFIG_NOLOGIN_DEPENDENCIES is not set | |
| 670 | +# CONFIG_NSENTER is not set | |
| 671 | +# CONFIG_PIVOT_ROOT is not set | |
| 672 | +# CONFIG_RDATE is not set | |
| 673 | +# CONFIG_RDEV is not set | |
| 674 | +# CONFIG_READPROFILE is not set | |
| 675 | +CONFIG_RENICE=y | |
| 676 | +CONFIG_REV=y | |
| 677 | +# CONFIG_RTCWAKE is not set | |
| 678 | +# CONFIG_SCRIPT is not set | |
| 679 | +# CONFIG_SCRIPTREPLAY is not set | |
| 680 | +# CONFIG_SETARCH is not set | |
| 681 | +# CONFIG_LINUX32 is not set | |
| 682 | +# CONFIG_LINUX64 is not set | |
| 683 | +# CONFIG_SETPRIV is not set | |
| 684 | +# CONFIG_FEATURE_SETPRIV_DUMP is not set | |
| 685 | +# CONFIG_FEATURE_SETPRIV_CAPABILITIES is not set | |
| 686 | +# CONFIG_FEATURE_SETPRIV_CAPABILITY_NAMES is not set | |
| 687 | +# CONFIG_SETSID is not set | |
| 688 | +# CONFIG_SWAPON is not set | |
| 689 | +# CONFIG_FEATURE_SWAPON_DISCARD is not set | |
| 690 | +# CONFIG_FEATURE_SWAPON_PRI is not set | |
| 691 | +# CONFIG_SWAPOFF is not set | |
| 692 | +# CONFIG_FEATURE_SWAPONOFF_LABEL is not set | |
| 693 | +# CONFIG_SWITCH_ROOT is not set | |
| 694 | +# CONFIG_TASKSET is not set | |
| 695 | +# CONFIG_FEATURE_TASKSET_FANCY is not set | |
| 696 | +# CONFIG_FEATURE_TASKSET_CPULIST is not set | |
| 697 | +# CONFIG_UEVENT is not set | |
| 698 | +CONFIG_UMOUNT=y | |
| 699 | +CONFIG_FEATURE_UMOUNT_ALL=y | |
| 700 | +# CONFIG_UNSHARE is not set | |
| 701 | +# CONFIG_WALL is not set | |
| 702 | + | |
| 703 | +# | |
| 704 | +# Common options for mount/umount | |
| 705 | +# | |
| 706 | +# CONFIG_FEATURE_MOUNT_LOOP is not set | |
| 707 | +# CONFIG_FEATURE_MOUNT_LOOP_CREATE is not set | |
| 708 | +# CONFIG_FEATURE_MTAB_SUPPORT is not set | |
| 709 | +# CONFIG_VOLUMEID is not set | |
| 710 | +# CONFIG_FEATURE_VOLUMEID_BCACHE is not set | |
| 711 | +# CONFIG_FEATURE_VOLUMEID_BTRFS is not set | |
| 712 | +# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set | |
| 713 | +# CONFIG_FEATURE_VOLUMEID_EROFS is not set | |
| 714 | +# CONFIG_FEATURE_VOLUMEID_EXFAT is not set | |
| 715 | +# CONFIG_FEATURE_VOLUMEID_EXT is not set | |
| 716 | +# CONFIG_FEATURE_VOLUMEID_F2FS is not set | |
| 717 | +# CONFIG_FEATURE_VOLUMEID_FAT is not set | |
| 718 | +# CONFIG_FEATURE_VOLUMEID_HFS is not set | |
| 719 | +# CONFIG_FEATURE_VOLUMEID_ISO9660 is not set | |
| 720 | +# CONFIG_FEATURE_VOLUMEID_JFS is not set | |
| 721 | +# CONFIG_FEATURE_VOLUMEID_LFS is not set | |
| 722 | +# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set | |
| 723 | +# CONFIG_FEATURE_VOLUMEID_LINUXSWAP is not set | |
| 724 | +# CONFIG_FEATURE_VOLUMEID_LUKS is not set | |
| 725 | +# CONFIG_FEATURE_VOLUMEID_MINIX is not set | |
| 726 | +# CONFIG_FEATURE_VOLUMEID_NILFS is not set | |
| 727 | +# CONFIG_FEATURE_VOLUMEID_NTFS is not set | |
| 728 | +# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set | |
| 729 | +# CONFIG_FEATURE_VOLUMEID_REISERFS is not set | |
| 730 | +# CONFIG_FEATURE_VOLUMEID_ROMFS is not set | |
| 731 | +# CONFIG_FEATURE_VOLUMEID_SQUASHFS is not set | |
| 732 | +# CONFIG_FEATURE_VOLUMEID_SYSV is not set | |
| 733 | +# CONFIG_FEATURE_VOLUMEID_UBIFS is not set | |
| 734 | +# CONFIG_FEATURE_VOLUMEID_UDF is not set | |
| 735 | +# CONFIG_FEATURE_VOLUMEID_XFS is not set | |
| 736 | + | |
| 737 | +# | |
| 738 | +# Miscellaneous Utilities | |
| 739 | +# | |
| 740 | +# CONFIG_ADJTIMEX is not set | |
| 741 | +# CONFIG_ASCII is not set | |
| 742 | +# CONFIG_BBCONFIG is not set | |
| 743 | +# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set | |
| 744 | +CONFIG_BC=y | |
| 745 | +# CONFIG_DC is not set | |
| 746 | +CONFIG_FEATURE_DC_BIG=y | |
| 747 | +# CONFIG_FEATURE_DC_LIBM is not set | |
| 748 | +# CONFIG_FEATURE_BC_INTERACTIVE is not set | |
| 749 | +# CONFIG_FEATURE_BC_LONG_OPTIONS is not set | |
| 750 | +# CONFIG_BEEP is not set | |
| 751 | +CONFIG_FEATURE_BEEP_FREQ=0 | |
| 752 | +CONFIG_FEATURE_BEEP_LENGTH_MS=0 | |
| 753 | +# CONFIG_CHAT is not set | |
| 754 | +# CONFIG_FEATURE_CHAT_NOFAIL is not set | |
| 755 | +# CONFIG_FEATURE_CHAT_TTY_HIFI is not set | |
| 756 | +# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set | |
| 757 | +# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set | |
| 758 | +# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set | |
| 759 | +# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set | |
| 760 | +# CONFIG_FEATURE_CHAT_CLR_ABORT is not set | |
| 761 | +# CONFIG_CONSPY is not set | |
| 762 | +CONFIG_CROND=y | |
| 763 | +CONFIG_FEATURE_CROND_D=y | |
| 764 | +CONFIG_FEATURE_CROND_CALL_SENDMAIL=y | |
| 765 | +CONFIG_FEATURE_CROND_SPECIAL_TIMES=y | |
| 766 | +CONFIG_FEATURE_CROND_DIR="/var/spool/cron" | |
| 767 | +CONFIG_CRONTAB=y | |
| 768 | +# CONFIG_DEVFSD is not set | |
| 769 | +# CONFIG_DEVFSD_MODLOAD is not set | |
| 770 | +# CONFIG_DEVFSD_FG_NP is not set | |
| 771 | +# CONFIG_DEVFSD_VERBOSE is not set | |
| 772 | +# CONFIG_FEATURE_DEVFS is not set | |
| 773 | +# CONFIG_DEVMEM is not set | |
| 774 | +# CONFIG_FBSPLASH is not set | |
| 775 | +# CONFIG_FLASH_ERASEALL is not set | |
| 776 | +# CONFIG_FLASH_LOCK is not set | |
| 777 | +# CONFIG_FLASH_UNLOCK is not set | |
| 778 | +# CONFIG_FLASHCP is not set | |
| 779 | +# CONFIG_HDPARM is not set | |
| 780 | +# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set | |
| 781 | +# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set | |
| 782 | +# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set | |
| 783 | +# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set | |
| 784 | +# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set | |
| 785 | +# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set | |
| 786 | +CONFIG_HEXEDIT=y | |
| 787 | +# CONFIG_I2CGET is not set | |
| 788 | +# CONFIG_I2CSET is not set | |
| 789 | +# CONFIG_I2CDUMP is not set | |
| 790 | +# CONFIG_I2CDETECT is not set | |
| 791 | +# CONFIG_I2CTRANSFER is not set | |
| 792 | +# CONFIG_INOTIFYD is not set | |
| 793 | +CONFIG_LESS=y | |
| 794 | +CONFIG_FEATURE_LESS_MAXLINES=9999999 | |
| 795 | +CONFIG_FEATURE_LESS_BRACKETS=y | |
| 796 | +CONFIG_FEATURE_LESS_FLAGS=y | |
| 797 | +CONFIG_FEATURE_LESS_TRUNCATE=y | |
| 798 | +CONFIG_FEATURE_LESS_MARKS=y | |
| 799 | +CONFIG_FEATURE_LESS_REGEXP=y | |
| 800 | +CONFIG_FEATURE_LESS_WINCH=y | |
| 801 | +CONFIG_FEATURE_LESS_ASK_TERMINAL=y | |
| 802 | +CONFIG_FEATURE_LESS_DASHCMD=y | |
| 803 | +CONFIG_FEATURE_LESS_LINENUMS=y | |
| 804 | +CONFIG_FEATURE_LESS_RAW=y | |
| 805 | +CONFIG_FEATURE_LESS_ENV=y | |
| 806 | +# CONFIG_LSSCSI is not set | |
| 807 | +# CONFIG_MAKEDEVS is not set | |
| 808 | +# CONFIG_FEATURE_MAKEDEVS_LEAF is not set | |
| 809 | +# CONFIG_FEATURE_MAKEDEVS_TABLE is not set | |
| 810 | +# CONFIG_MAN is not set | |
| 811 | +# CONFIG_MICROCOM is not set | |
| 812 | +# CONFIG_MIM is not set | |
| 813 | +# CONFIG_MT is not set | |
| 814 | +# CONFIG_NANDWRITE is not set | |
| 815 | +# CONFIG_NANDDUMP is not set | |
| 816 | +# CONFIG_PARTPROBE is not set | |
| 817 | +# CONFIG_RAIDAUTORUN is not set | |
| 818 | +# CONFIG_READAHEAD is not set | |
| 819 | +# CONFIG_RFKILL is not set | |
| 820 | +# CONFIG_RUNLEVEL is not set | |
| 821 | +# CONFIG_RX is not set | |
| 822 | +# CONFIG_SETFATTR is not set | |
| 823 | +# CONFIG_SETSERIAL is not set | |
| 824 | +CONFIG_STRINGS=y | |
| 825 | +CONFIG_TIME=y | |
| 826 | +# CONFIG_TS is not set | |
| 827 | +# CONFIG_TTYSIZE is not set | |
| 828 | +# CONFIG_UBIATTACH is not set | |
| 829 | +# CONFIG_UBIDETACH is not set | |
| 830 | +# CONFIG_UBIMKVOL is not set | |
| 831 | +# CONFIG_UBIRMVOL is not set | |
| 832 | +# CONFIG_UBIRSVOL is not set | |
| 833 | +# CONFIG_UBIUPDATEVOL is not set | |
| 834 | +# CONFIG_UBIRENAME is not set | |
| 835 | +# CONFIG_VOLNAME is not set | |
| 836 | +# CONFIG_WATCHDOG is not set | |
| 837 | +# CONFIG_FEATURE_WATCHDOG_OPEN_TWICE is not set | |
| 838 | + | |
| 839 | +# | |
| 840 | +# Networking Utilities | |
| 841 | +# | |
| 842 | +CONFIG_FEATURE_IPV6=y | |
| 843 | +# CONFIG_FEATURE_UNIX_LOCAL is not set | |
| 844 | +CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y | |
| 845 | +# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set | |
| 846 | +# CONFIG_FEATURE_ETC_NETWORKS is not set | |
| 847 | +# CONFIG_FEATURE_ETC_SERVICES is not set | |
| 848 | +# CONFIG_FEATURE_HWIB is not set | |
| 849 | +# CONFIG_FEATURE_TLS_SHA1 is not set | |
| 850 | +# CONFIG_ARP is not set | |
| 851 | +# CONFIG_ARPING is not set | |
| 852 | +# CONFIG_BRCTL is not set | |
| 853 | +# CONFIG_FEATURE_BRCTL_FANCY is not set | |
| 854 | +# CONFIG_FEATURE_BRCTL_SHOW is not set | |
| 855 | +# CONFIG_DNSD is not set | |
| 856 | +# CONFIG_ETHER_WAKE is not set | |
| 857 | +# CONFIG_FTPD is not set | |
| 858 | +# CONFIG_FEATURE_FTPD_WRITE is not set | |
| 859 | +# CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST is not set | |
| 860 | +# CONFIG_FEATURE_FTPD_AUTHENTICATION is not set | |
| 861 | +# CONFIG_FTPGET is not set | |
| 862 | +# CONFIG_FTPPUT is not set | |
| 863 | +# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set | |
| 864 | +# CONFIG_HOSTNAME is not set | |
| 865 | +# CONFIG_DNSDOMAINNAME is not set | |
| 866 | +# CONFIG_HTTPD is not set | |
| 867 | +CONFIG_FEATURE_HTTPD_PORT_DEFAULT=0 | |
| 868 | +# CONFIG_FEATURE_HTTPD_RANGES is not set | |
| 869 | +# CONFIG_FEATURE_HTTPD_SETUID is not set | |
| 870 | +# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set | |
| 871 | +# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set | |
| 872 | +# CONFIG_FEATURE_HTTPD_CGI is not set | |
| 873 | +# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set | |
| 874 | +# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set | |
| 875 | +# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set | |
| 876 | +# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set | |
| 877 | +# CONFIG_FEATURE_HTTPD_PROXY is not set | |
| 878 | +# CONFIG_FEATURE_HTTPD_GZIP is not set | |
| 879 | +# CONFIG_FEATURE_HTTPD_ETAG is not set | |
| 880 | +# CONFIG_FEATURE_HTTPD_LAST_MODIFIED is not set | |
| 881 | +# CONFIG_FEATURE_HTTPD_DATE is not set | |
| 882 | +# CONFIG_FEATURE_HTTPD_ACL_IP is not set | |
| 883 | +CONFIG_IFCONFIG=y | |
| 884 | +CONFIG_FEATURE_IFCONFIG_STATUS=y | |
| 885 | +# CONFIG_FEATURE_IFCONFIG_SLIP is not set | |
| 886 | +CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y | |
| 887 | +CONFIG_FEATURE_IFCONFIG_HW=y | |
| 888 | +CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y | |
| 889 | +# CONFIG_IFENSLAVE is not set | |
| 890 | +# CONFIG_IFPLUGD is not set | |
| 891 | +# CONFIG_IFUP is not set | |
| 892 | +# CONFIG_IFDOWN is not set | |
| 893 | +CONFIG_IFUPDOWN_IFSTATE_PATH="" | |
| 894 | +# CONFIG_FEATURE_IFUPDOWN_IP is not set | |
| 895 | +# CONFIG_FEATURE_IFUPDOWN_IPV4 is not set | |
| 896 | +# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set | |
| 897 | +# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set | |
| 898 | +# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set | |
| 899 | +CONFIG_INETD=y | |
| 900 | +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set | |
| 901 | +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set | |
| 902 | +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set | |
| 903 | +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set | |
| 904 | +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set | |
| 905 | +# CONFIG_FEATURE_INETD_RPC is not set | |
| 906 | +CONFIG_IP=y | |
| 907 | +# CONFIG_IPADDR is not set | |
| 908 | +# CONFIG_IPLINK is not set | |
| 909 | +# CONFIG_IPROUTE is not set | |
| 910 | +# CONFIG_IPTUNNEL is not set | |
| 911 | +# CONFIG_IPRULE is not set | |
| 912 | +# CONFIG_IPNEIGH is not set | |
| 913 | +CONFIG_FEATURE_IP_ADDRESS=y | |
| 914 | +CONFIG_FEATURE_IP_LINK=y | |
| 915 | +CONFIG_FEATURE_IP_ROUTE=y | |
| 916 | +CONFIG_FEATURE_IP_ROUTE_DIR="/etc/iproute2" | |
| 917 | +# CONFIG_FEATURE_IP_TUNNEL is not set | |
| 918 | +# CONFIG_FEATURE_IP_RULE is not set | |
| 919 | +CONFIG_FEATURE_IP_NEIGH=y | |
| 920 | +# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set | |
| 921 | +CONFIG_IPCALC=y | |
| 922 | +CONFIG_FEATURE_IPCALC_LONG_OPTIONS=y | |
| 923 | +CONFIG_FEATURE_IPCALC_FANCY=y | |
| 924 | +# CONFIG_FAKEIDENTD is not set | |
| 925 | +# CONFIG_NAMEIF is not set | |
| 926 | +# CONFIG_FEATURE_NAMEIF_EXTENDED is not set | |
| 927 | +# CONFIG_NBDCLIENT is not set | |
| 928 | +CONFIG_NC=y | |
| 929 | +# CONFIG_NETCAT is not set | |
| 930 | +CONFIG_NC_SERVER=y | |
| 931 | +CONFIG_NC_EXTRA=y | |
| 932 | +CONFIG_NC_110_COMPAT=y | |
| 933 | +# CONFIG_NETSTAT is not set | |
| 934 | +# CONFIG_FEATURE_NETSTAT_WIDE is not set | |
| 935 | +# CONFIG_FEATURE_NETSTAT_PRG is not set | |
| 936 | +# CONFIG_NSLOOKUP is not set | |
| 937 | +# CONFIG_FEATURE_NSLOOKUP_BIG is not set | |
| 938 | +# CONFIG_FEATURE_NSLOOKUP_LONG_OPTIONS is not set | |
| 939 | +# CONFIG_NTPD is not set | |
| 940 | +# CONFIG_FEATURE_NTPD_SERVER is not set | |
| 941 | +# CONFIG_FEATURE_NTPD_CONF is not set | |
| 942 | +# CONFIG_FEATURE_NTP_AUTH is not set | |
| 943 | +# CONFIG_PING is not set | |
| 944 | +# CONFIG_PING6 is not set | |
| 945 | +# CONFIG_FEATURE_FANCY_PING is not set | |
| 946 | +# CONFIG_PSCAN is not set | |
| 947 | +CONFIG_ROUTE=y | |
| 948 | +# CONFIG_SLATTACH is not set | |
| 949 | +CONFIG_SSL_CLIENT=y | |
| 950 | +# CONFIG_TC is not set | |
| 951 | +# CONFIG_FEATURE_TC_INGRESS is not set | |
| 952 | +# CONFIG_TCPSVD is not set | |
| 953 | +# CONFIG_UDPSVD is not set | |
| 954 | +# CONFIG_TELNET is not set | |
| 955 | +# CONFIG_FEATURE_TELNET_TTYPE is not set | |
| 956 | +# CONFIG_FEATURE_TELNET_AUTOLOGIN is not set | |
| 957 | +# CONFIG_FEATURE_TELNET_WIDTH is not set | |
| 958 | +# CONFIG_TELNETD is not set | |
| 959 | +# CONFIG_FEATURE_TELNETD_STANDALONE is not set | |
| 960 | +CONFIG_FEATURE_TELNETD_PORT_DEFAULT=0 | |
| 961 | +# CONFIG_FEATURE_TELNETD_INETD_WAIT is not set | |
| 962 | +# CONFIG_TFTP is not set | |
| 963 | +# CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set | |
| 964 | +# CONFIG_FEATURE_TFTP_HPA_COMPAT is not set | |
| 965 | +# CONFIG_TFTPD is not set | |
| 966 | +# CONFIG_FEATURE_TFTP_GET is not set | |
| 967 | +# CONFIG_FEATURE_TFTP_PUT is not set | |
| 968 | +# CONFIG_FEATURE_TFTP_BLOCKSIZE is not set | |
| 969 | +# CONFIG_TFTP_DEBUG is not set | |
| 970 | +CONFIG_TLS=y | |
| 971 | +# CONFIG_TRACEROUTE is not set | |
| 972 | +# CONFIG_TRACEROUTE6 is not set | |
| 973 | +# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set | |
| 974 | +# CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set | |
| 975 | +# CONFIG_TUNCTL is not set | |
| 976 | +# CONFIG_FEATURE_TUNCTL_UG is not set | |
| 977 | +# CONFIG_VCONFIG is not set | |
| 978 | +CONFIG_WGET=y | |
| 979 | +CONFIG_FEATURE_WGET_LONG_OPTIONS=y | |
| 980 | +CONFIG_FEATURE_WGET_STATUSBAR=y | |
| 981 | +CONFIG_FEATURE_WGET_FTP=y | |
| 982 | +CONFIG_FEATURE_WGET_AUTHENTICATION=y | |
| 983 | +CONFIG_FEATURE_WGET_TIMEOUT=y | |
| 984 | +CONFIG_FEATURE_WGET_HTTPS=y | |
| 985 | +CONFIG_FEATURE_WGET_OPENSSL=y | |
| 986 | +CONFIG_WHOIS=y | |
| 987 | +# CONFIG_ZCIP is not set | |
| 988 | +# CONFIG_UDHCPD is not set | |
| 989 | +# CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set | |
| 990 | +# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set | |
| 991 | +CONFIG_DHCPD_LEASES_FILE="" | |
| 992 | +# CONFIG_DUMPLEASES is not set | |
| 993 | +# CONFIG_DHCPRELAY is not set | |
| 994 | +# CONFIG_UDHCPC is not set | |
| 995 | +# CONFIG_FEATURE_UDHCPC_ARPING is not set | |
| 996 | +# CONFIG_FEATURE_UDHCPC_SANITIZEOPT is not set | |
| 997 | +CONFIG_UDHCPC_DEFAULT_SCRIPT="" | |
| 998 | +# CONFIG_UDHCPC6 is not set | |
| 999 | +# CONFIG_FEATURE_UDHCPC6_RFC3646 is not set | |
| 1000 | +# CONFIG_FEATURE_UDHCPC6_RFC4704 is not set | |
| 1001 | +# CONFIG_FEATURE_UDHCPC6_RFC4833 is not set | |
| 1002 | +# CONFIG_FEATURE_UDHCPC6_RFC5970 is not set | |
| 1003 | +CONFIG_UDHCPC_DEFAULT_INTERFACE="" | |
| 1004 | +# CONFIG_FEATURE_UDHCP_PORT is not set | |
| 1005 | +CONFIG_UDHCP_DEBUG=0 | |
| 1006 | +CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=0 | |
| 1007 | +# CONFIG_FEATURE_UDHCP_RFC3397 is not set | |
| 1008 | +# CONFIG_FEATURE_UDHCP_8021Q is not set | |
| 1009 | +CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="" | |
| 1010 | + | |
| 1011 | +# | |
| 1012 | +# Print Utilities | |
| 1013 | +# | |
| 1014 | +# CONFIG_LPD is not set | |
| 1015 | +# CONFIG_LPR is not set | |
| 1016 | +# CONFIG_LPQ is not set | |
| 1017 | + | |
| 1018 | +# | |
| 1019 | +# Mail Utilities | |
| 1020 | +# | |
| 1021 | +CONFIG_FEATURE_MIME_CHARSET="utf-8" | |
| 1022 | +# CONFIG_MAKEMIME is not set | |
| 1023 | +# CONFIG_POPMAILDIR is not set | |
| 1024 | +# CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set | |
| 1025 | +# CONFIG_REFORMIME is not set | |
| 1026 | +# CONFIG_FEATURE_REFORMIME_COMPAT is not set | |
| 1027 | +CONFIG_SENDMAIL=y | |
| 1028 | + | |
| 1029 | +# | |
| 1030 | +# Process Utilities | |
| 1031 | +# | |
| 1032 | +# CONFIG_FEATURE_FAST_TOP is not set | |
| 1033 | +CONFIG_FEATURE_SHOW_THREADS=y | |
| 1034 | +CONFIG_FREE=y | |
| 1035 | +CONFIG_FUSER=y | |
| 1036 | +CONFIG_IOSTAT=y | |
| 1037 | +CONFIG_KILL=y | |
| 1038 | +CONFIG_KILLALL=y | |
| 1039 | +# CONFIG_KILLALL5 is not set | |
| 1040 | +CONFIG_LSOF=y | |
| 1041 | +CONFIG_MPSTAT=y | |
| 1042 | +CONFIG_NMETER=y | |
| 1043 | +CONFIG_PGREP=y | |
| 1044 | +CONFIG_PKILL=y | |
| 1045 | +CONFIG_PIDOF=y | |
| 1046 | +CONFIG_FEATURE_PIDOF_SINGLE=y | |
| 1047 | +CONFIG_FEATURE_PIDOF_OMIT=y | |
| 1048 | +CONFIG_PMAP=y | |
| 1049 | +# CONFIG_POWERTOP is not set | |
| 1050 | +# CONFIG_FEATURE_POWERTOP_INTERACTIVE is not set | |
| 1051 | +CONFIG_PS=y | |
| 1052 | +# CONFIG_FEATURE_PS_WIDE is not set | |
| 1053 | +# CONFIG_FEATURE_PS_LONG is not set | |
| 1054 | +CONFIG_FEATURE_PS_TIME=y | |
| 1055 | +# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set | |
| 1056 | +CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS=y | |
| 1057 | +CONFIG_PSTREE=y | |
| 1058 | +CONFIG_PWDX=y | |
| 1059 | +CONFIG_SMEMCAP=y | |
| 1060 | +CONFIG_BB_SYSCTL=y | |
| 1061 | +CONFIG_TOP=y | |
| 1062 | +CONFIG_FEATURE_TOP_INTERACTIVE=y | |
| 1063 | +CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y | |
| 1064 | +CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y | |
| 1065 | +CONFIG_FEATURE_TOP_SMP_CPU=y | |
| 1066 | +CONFIG_FEATURE_TOP_DECIMALS=y | |
| 1067 | +CONFIG_FEATURE_TOP_SMP_PROCESS=y | |
| 1068 | +CONFIG_FEATURE_TOPMEM=y | |
| 1069 | +CONFIG_UPTIME=y | |
| 1070 | +CONFIG_FEATURE_UPTIME_UTMP_SUPPORT=y | |
| 1071 | +CONFIG_WATCH=y | |
| 1072 | + | |
| 1073 | +# | |
| 1074 | +# Runit Utilities | |
| 1075 | +# | |
| 1076 | +CONFIG_CHPST=y | |
| 1077 | +CONFIG_SETUIDGID=y | |
| 1078 | +CONFIG_ENVUIDGID=y | |
| 1079 | +CONFIG_ENVDIR=y | |
| 1080 | +CONFIG_SOFTLIMIT=y | |
| 1081 | +CONFIG_RUNSV=y | |
| 1082 | +CONFIG_RUNSVDIR=y | |
| 1083 | +# CONFIG_FEATURE_RUNSVDIR_LOG is not set | |
| 1084 | +CONFIG_SV=y | |
| 1085 | +CONFIG_SV_DEFAULT_SERVICE_DIR="/var/service" | |
| 1086 | +CONFIG_SVC=y | |
| 1087 | +CONFIG_SVOK=y | |
| 1088 | +CONFIG_SVLOGD=y | |
| 1089 | +# CONFIG_CHCON is not set | |
| 1090 | +# CONFIG_GETENFORCE is not set | |
| 1091 | +# CONFIG_GETSEBOOL is not set | |
| 1092 | +# CONFIG_LOAD_POLICY is not set | |
| 1093 | +# CONFIG_MATCHPATHCON is not set | |
| 1094 | +# CONFIG_RUNCON is not set | |
| 1095 | +# CONFIG_SELINUXENABLED is not set | |
| 1096 | +# CONFIG_SESTATUS is not set | |
| 1097 | +# CONFIG_SETENFORCE is not set | |
| 1098 | +# CONFIG_SETFILES is not set | |
| 1099 | +# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set | |
| 1100 | +# CONFIG_RESTORECON is not set | |
| 1101 | +# CONFIG_SETSEBOOL is not set | |
| 1102 | + | |
| 1103 | +# | |
| 1104 | +# Shells | |
| 1105 | +# | |
| 1106 | +CONFIG_SH_IS_ASH=y | |
| 1107 | +# CONFIG_SH_IS_HUSH is not set | |
| 1108 | +# CONFIG_SH_IS_NONE is not set | |
| 1109 | +# CONFIG_BASH_IS_ASH is not set | |
| 1110 | +# CONFIG_BASH_IS_HUSH is not set | |
| 1111 | +CONFIG_BASH_IS_NONE=y | |
| 1112 | +CONFIG_SHELL_ASH=y | |
| 1113 | +CONFIG_ASH=y | |
| 1114 | +CONFIG_ASH_OPTIMIZE_FOR_SIZE=y | |
| 1115 | +CONFIG_ASH_INTERNAL_GLOB=y | |
| 1116 | +CONFIG_ASH_BASH_COMPAT=y | |
| 1117 | +# CONFIG_ASH_BASH_SOURCE_CURDIR is not set | |
| 1118 | +CONFIG_ASH_BASH_NOT_FOUND_HOOK=y | |
| 1119 | +CONFIG_ASH_JOB_CONTROL=y | |
| 1120 | +CONFIG_ASH_ALIAS=y | |
| 1121 | +CONFIG_ASH_RANDOM_SUPPORT=y | |
| 1122 | +CONFIG_ASH_EXPAND_PRMT=y | |
| 1123 | +CONFIG_ASH_IDLE_TIMEOUT=y | |
| 1124 | +CONFIG_ASH_MAIL=y | |
| 1125 | +CONFIG_ASH_ECHO=y | |
| 1126 | +CONFIG_ASH_PRINTF=y | |
| 1127 | +CONFIG_ASH_TEST=y | |
| 1128 | +CONFIG_ASH_HELP=y | |
| 1129 | +CONFIG_ASH_GETOPTS=y | |
| 1130 | +CONFIG_ASH_CMDCMD=y | |
| 1131 | +# CONFIG_CTTYHACK is not set | |
| 1132 | +# CONFIG_HUSH is not set | |
| 1133 | +# CONFIG_SHELL_HUSH is not set | |
| 1134 | +# CONFIG_HUSH_BASH_COMPAT is not set | |
| 1135 | +# CONFIG_HUSH_BRACE_EXPANSION is not set | |
| 1136 | +# CONFIG_HUSH_BASH_SOURCE_CURDIR is not set | |
| 1137 | +# CONFIG_HUSH_LINENO_VAR is not set | |
| 1138 | +# CONFIG_HUSH_INTERACTIVE is not set | |
| 1139 | +# CONFIG_HUSH_SAVEHISTORY is not set | |
| 1140 | +# CONFIG_HUSH_JOB is not set | |
| 1141 | +# CONFIG_HUSH_TICK is not set | |
| 1142 | +# CONFIG_HUSH_IF is not set | |
| 1143 | +# CONFIG_HUSH_LOOPS is not set | |
| 1144 | +# CONFIG_HUSH_CASE is not set | |
| 1145 | +# CONFIG_HUSH_FUNCTIONS is not set | |
| 1146 | +# CONFIG_HUSH_LOCAL is not set | |
| 1147 | +# CONFIG_HUSH_RANDOM_SUPPORT is not set | |
| 1148 | +# CONFIG_HUSH_MODE_X is not set | |
| 1149 | +# CONFIG_HUSH_ECHO is not set | |
| 1150 | +# CONFIG_HUSH_PRINTF is not set | |
| 1151 | +# CONFIG_HUSH_TEST is not set | |
| 1152 | +# CONFIG_HUSH_HELP is not set | |
| 1153 | +# CONFIG_HUSH_EXPORT is not set | |
| 1154 | +# CONFIG_HUSH_EXPORT_N is not set | |
| 1155 | +# CONFIG_HUSH_READONLY is not set | |
| 1156 | +# CONFIG_HUSH_KILL is not set | |
| 1157 | +# CONFIG_HUSH_WAIT is not set | |
| 1158 | +# CONFIG_HUSH_COMMAND is not set | |
| 1159 | +# CONFIG_HUSH_TRAP is not set | |
| 1160 | +# CONFIG_HUSH_TYPE is not set | |
| 1161 | +# CONFIG_HUSH_TIMES is not set | |
| 1162 | +# CONFIG_HUSH_READ is not set | |
| 1163 | +# CONFIG_HUSH_SET is not set | |
| 1164 | +# CONFIG_HUSH_UNSET is not set | |
| 1165 | +# CONFIG_HUSH_ULIMIT is not set | |
| 1166 | +# CONFIG_HUSH_UMASK is not set | |
| 1167 | +# CONFIG_HUSH_GETOPTS is not set | |
| 1168 | +# CONFIG_HUSH_MEMLEAK is not set | |
| 1169 | + | |
| 1170 | +# | |
| 1171 | +# Options common to all shells | |
| 1172 | +# | |
| 1173 | +CONFIG_FEATURE_SH_MATH=y | |
| 1174 | +CONFIG_FEATURE_SH_MATH_64=y | |
| 1175 | +CONFIG_FEATURE_SH_MATH_BASE=y | |
| 1176 | +CONFIG_FEATURE_SH_EXTRA_QUIET=y | |
| 1177 | +# CONFIG_FEATURE_SH_STANDALONE is not set | |
| 1178 | +# CONFIG_FEATURE_SH_NOFORK is not set | |
| 1179 | +CONFIG_FEATURE_SH_READ_FRAC=y | |
| 1180 | +CONFIG_FEATURE_SH_HISTFILESIZE=y | |
| 1181 | +CONFIG_FEATURE_SH_EMBEDDED_SCRIPTS=y | |
| 1182 | + | |
| 1183 | +# | |
| 1184 | +# System Logging Utilities | |
| 1185 | +# | |
| 1186 | +# CONFIG_KLOGD is not set | |
| 1187 | +# CONFIG_FEATURE_KLOGD_KLOGCTL is not set | |
| 1188 | +# CONFIG_LOGGER is not set | |
| 1189 | +# CONFIG_LOGREAD is not set | |
| 1190 | +# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set | |
| 1191 | +# CONFIG_SYSLOGD is not set | |
| 1192 | +# CONFIG_FEATURE_ROTATE_LOGFILE is not set | |
| 1193 | +# CONFIG_FEATURE_REMOTE_LOG is not set | |
| 1194 | +# CONFIG_FEATURE_SYSLOGD_DUP is not set | |
| 1195 | +# CONFIG_FEATURE_SYSLOGD_CFG is not set | |
| 1196 | +# CONFIG_FEATURE_SYSLOGD_PRECISE_TIMESTAMPS is not set | |
| 1197 | +CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=0 | |
| 1198 | +# CONFIG_FEATURE_IPC_SYSLOG is not set | |
| 1199 | +CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0 | |
| 1200 | +# CONFIG_FEATURE_KMSG_SYSLOG is not set |
| --- a/containers/busybox-config | |
| +++ b/containers/busybox-config | |
| @@ -0,0 +1,1200 @@ | |
| --- a/containers/busybox-config | |
| +++ b/containers/busybox-config | |
| @@ -0,0 +1,1200 @@ | |
| 1 | # |
| 2 | # Automatically generated make config: don't edit |
| 3 | # Busybox version: 1.35.0 |
| 4 | # Tue Aug 16 02:15:21 2022 |
| 5 | # |
| 6 | CONFIG_HAVE_DOT_CONFIG=y |
| 7 | |
| 8 | # |
| 9 | # Settings |
| 10 | # |
| 11 | CONFIG_DESKTOP=y |
| 12 | # CONFIG_EXTRA_COMPAT is not set |
| 13 | # CONFIG_FEDORA_COMPAT is not set |
| 14 | CONFIG_INCLUDE_SUSv2=y |
| 15 | CONFIG_LONG_OPTS=y |
| 16 | CONFIG_SHOW_USAGE=y |
| 17 | CONFIG_FEATURE_VERBOSE_USAGE=y |
| 18 | CONFIG_FEATURE_COMPRESS_USAGE=y |
| 19 | CONFIG_LFS=y |
| 20 | # CONFIG_PAM is not set |
| 21 | CONFIG_FEATURE_DEVPTS=y |
| 22 | CONFIG_FEATURE_UTMP=y |
| 23 | CONFIG_FEATURE_WTMP=y |
| 24 | CONFIG_FEATURE_PIDFILE=y |
| 25 | CONFIG_PID_FILE_PATH="/var/run" |
| 26 | CONFIG_BUSYBOX=y |
| 27 | CONFIG_FEATURE_SHOW_SCRIPT=y |
| 28 | CONFIG_FEATURE_INSTALLER=y |
| 29 | # CONFIG_INSTALL_NO_USR is not set |
| 30 | CONFIG_FEATURE_SUID=y |
| 31 | CONFIG_FEATURE_SUID_CONFIG=y |
| 32 | CONFIG_FEATURE_SUID_CONFIG_QUIET=y |
| 33 | # CONFIG_FEATURE_PREFER_APPLETS is not set |
| 34 | CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" |
| 35 | # CONFIG_SELINUX is not set |
| 36 | # CONFIG_FEATURE_CLEAN_UP is not set |
| 37 | CONFIG_FEATURE_SYSLOG_INFO=y |
| 38 | CONFIG_FEATURE_SYSLOG=y |
| 39 | |
| 40 | # |
| 41 | # Build Options |
| 42 | # |
| 43 | CONFIG_STATIC=y |
| 44 | # CONFIG_PIE is not set |
| 45 | # CONFIG_NOMMU is not set |
| 46 | # CONFIG_BUILD_LIBBUSYBOX is not set |
| 47 | # CONFIG_FEATURE_LIBBUSYBOX_STATIC is not set |
| 48 | # CONFIG_FEATURE_INDIVIDUAL is not set |
| 49 | # CONFIG_FEATURE_SHARED_BUSYBOX is not set |
| 50 | CONFIG_CROSS_COMPILER_PREFIX="" |
| 51 | CONFIG_SYSROOT="" |
| 52 | CONFIG_EXTRA_CFLAGS="" |
| 53 | CONFIG_EXTRA_LDFLAGS="" |
| 54 | CONFIG_EXTRA_LDLIBS="" |
| 55 | # CONFIG_USE_PORTABLE_CODE is not set |
| 56 | CONFIG_STACK_OPTIMIZATION_386=y |
| 57 | CONFIG_STATIC_LIBGCC=y |
| 58 | |
| 59 | # |
| 60 | # Installation Options ("make install" behavior) |
| 61 | # |
| 62 | CONFIG_INSTALL_APPLET_SYMLINKS=y |
| 63 | # CONFIG_INSTALL_APPLET_HARDLINKS is not set |
| 64 | # CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set |
| 65 | # CONFIG_INSTALL_APPLET_DONT is not set |
| 66 | # CONFIG_INSTALL_SH_APPLET_SYMLINK is not set |
| 67 | # CONFIG_INSTALL_SH_APPLET_HARDLINK is not set |
| 68 | # CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set |
| 69 | CONFIG_PREFIX="./_install" |
| 70 | |
| 71 | # |
| 72 | # Debugging Options |
| 73 | # |
| 74 | # CONFIG_DEBUG is not set |
| 75 | # CONFIG_DEBUG_PESSIMIZE is not set |
| 76 | # CONFIG_DEBUG_SANITIZE is not set |
| 77 | # CONFIG_UNIT_TEST is not set |
| 78 | # CONFIG_WERROR is not set |
| 79 | # CONFIG_WARN_SIMPLE_MSG is not set |
| 80 | CONFIG_NO_DEBUG_LIB=y |
| 81 | # CONFIG_DMALLOC is not set |
| 82 | # CONFIG_EFENCE is not set |
| 83 | |
| 84 | # |
| 85 | # Library Tuning |
| 86 | # |
| 87 | # CONFIG_FEATURE_USE_BSS_TAIL is not set |
| 88 | CONFIG_FLOAT_DURATION=y |
| 89 | CONFIG_FEATURE_RTMINMAX=y |
| 90 | CONFIG_FEATURE_RTMINMAX_USE_LIBC_DEFINITIONS=y |
| 91 | CONFIG_FEATURE_BUFFERS_USE_MALLOC=y |
| 92 | # CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set |
| 93 | # CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set |
| 94 | CONFIG_PASSWORD_MINLEN=6 |
| 95 | CONFIG_MD5_SMALL=1 |
| 96 | CONFIG_SHA3_SMALL=1 |
| 97 | CONFIG_FEATURE_NON_POSIX_CP=y |
| 98 | # CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set |
| 99 | CONFIG_FEATURE_USE_SENDFILE=y |
| 100 | CONFIG_FEATURE_COPYBUF_KB=4 |
| 101 | CONFIG_MONOTONIC_SYSCALL=y |
| 102 | CONFIG_IOCTL_HEX2STR_ERROR=y |
| 103 | CONFIG_FEATURE_EDITING=y |
| 104 | CONFIG_FEATURE_EDITING_MAX_LEN=1024 |
| 105 | # CONFIG_FEATURE_EDITING_VI is not set |
| 106 | CONFIG_FEATURE_EDITING_HISTORY=255 |
| 107 | CONFIG_FEATURE_EDITING_SAVEHISTORY=y |
| 108 | # CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set |
| 109 | CONFIG_FEATURE_REVERSE_SEARCH=y |
| 110 | CONFIG_FEATURE_TAB_COMPLETION=y |
| 111 | CONFIG_FEATURE_USERNAME_COMPLETION=y |
| 112 | CONFIG_FEATURE_EDITING_FANCY_PROMPT=y |
| 113 | CONFIG_FEATURE_EDITING_WINCH=y |
| 114 | # CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set |
| 115 | # CONFIG_LOCALE_SUPPORT is not set |
| 116 | CONFIG_UNICODE_SUPPORT=y |
| 117 | # CONFIG_UNICODE_USING_LOCALE is not set |
| 118 | # CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set |
| 119 | CONFIG_SUBST_WCHAR=63 |
| 120 | CONFIG_LAST_SUPPORTED_WCHAR=767 |
| 121 | # CONFIG_UNICODE_COMBINING_WCHARS is not set |
| 122 | # CONFIG_UNICODE_WIDE_WCHARS is not set |
| 123 | # CONFIG_UNICODE_BIDI_SUPPORT is not set |
| 124 | # CONFIG_UNICODE_NEUTRAL_TABLE is not set |
| 125 | # CONFIG_UNICODE_PRESERVE_BROKEN is not set |
| 126 | |
| 127 | # |
| 128 | # Applets |
| 129 | # |
| 130 | |
| 131 | # |
| 132 | # Archival Utilities |
| 133 | # |
| 134 | # CONFIG_FEATURE_SEAMLESS_XZ is not set |
| 135 | # CONFIG_FEATURE_SEAMLESS_LZMA is not set |
| 136 | # CONFIG_FEATURE_SEAMLESS_BZ2 is not set |
| 137 | CONFIG_FEATURE_SEAMLESS_GZ=y |
| 138 | # CONFIG_FEATURE_SEAMLESS_Z is not set |
| 139 | # CONFIG_AR is not set |
| 140 | # CONFIG_FEATURE_AR_LONG_FILENAMES is not set |
| 141 | # CONFIG_FEATURE_AR_CREATE is not set |
| 142 | # CONFIG_UNCOMPRESS is not set |
| 143 | CONFIG_GUNZIP=y |
| 144 | CONFIG_ZCAT=y |
| 145 | CONFIG_FEATURE_GUNZIP_LONG_OPTIONS=y |
| 146 | # CONFIG_BUNZIP2 is not set |
| 147 | # CONFIG_BZCAT is not set |
| 148 | # CONFIG_UNLZMA is not set |
| 149 | # CONFIG_LZCAT is not set |
| 150 | # CONFIG_LZMA is not set |
| 151 | # CONFIG_UNXZ is not set |
| 152 | # CONFIG_XZCAT is not set |
| 153 | # CONFIG_XZ is not set |
| 154 | # CONFIG_BZIP2 is not set |
| 155 | CONFIG_BZIP2_SMALL=0 |
| 156 | # CONFIG_FEATURE_BZIP2_DECOMPRESS is not set |
| 157 | # CONFIG_CPIO is not set |
| 158 | # CONFIG_FEATURE_CPIO_O is not set |
| 159 | # CONFIG_FEATURE_CPIO_P is not set |
| 160 | # CONFIG_FEATURE_CPIO_IGNORE_DEVNO is not set |
| 161 | # CONFIG_FEATURE_CPIO_RENUMBER_INODES is not set |
| 162 | # CONFIG_DPKG is not set |
| 163 | # CONFIG_DPKG_DEB is not set |
| 164 | CONFIG_GZIP=y |
| 165 | CONFIG_FEATURE_GZIP_LONG_OPTIONS=y |
| 166 | CONFIG_GZIP_FAST=0 |
| 167 | # CONFIG_FEATURE_GZIP_LEVELS is not set |
| 168 | CONFIG_FEATURE_GZIP_DECOMPRESS=y |
| 169 | # CONFIG_LZOP is not set |
| 170 | # CONFIG_UNLZOP is not set |
| 171 | # CONFIG_LZOPCAT is not set |
| 172 | # CONFIG_LZOP_COMPR_HIGH is not set |
| 173 | # CONFIG_RPM is not set |
| 174 | # CONFIG_RPM2CPIO is not set |
| 175 | CONFIG_TAR=y |
| 176 | CONFIG_FEATURE_TAR_LONG_OPTIONS=y |
| 177 | CONFIG_FEATURE_TAR_CREATE=y |
| 178 | CONFIG_FEATURE_TAR_AUTODETECT=y |
| 179 | CONFIG_FEATURE_TAR_FROM=y |
| 180 | # CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set |
| 181 | # CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set |
| 182 | CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y |
| 183 | # CONFIG_FEATURE_TAR_TO_COMMAND is not set |
| 184 | CONFIG_FEATURE_TAR_UNAME_GNAME=y |
| 185 | CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y |
| 186 | # CONFIG_FEATURE_TAR_SELINUX is not set |
| 187 | CONFIG_UNZIP=y |
| 188 | CONFIG_FEATURE_UNZIP_CDF=y |
| 189 | CONFIG_FEATURE_UNZIP_BZIP2=y |
| 190 | CONFIG_FEATURE_UNZIP_LZMA=y |
| 191 | CONFIG_FEATURE_UNZIP_XZ=y |
| 192 | # CONFIG_FEATURE_LZMA_FAST is not set |
| 193 | |
| 194 | # |
| 195 | # Coreutils |
| 196 | # |
| 197 | CONFIG_FEATURE_VERBOSE=y |
| 198 | |
| 199 | # |
| 200 | # Common options for date and touch |
| 201 | # |
| 202 | CONFIG_FEATURE_TIMEZONE=y |
| 203 | |
| 204 | # |
| 205 | # Common options for cp and mv |
| 206 | # |
| 207 | CONFIG_FEATURE_PRESERVE_HARDLINKS=y |
| 208 | |
| 209 | # |
| 210 | # Common options for df, du, ls |
| 211 | # |
| 212 | CONFIG_FEATURE_HUMAN_READABLE=y |
| 213 | CONFIG_BASENAME=y |
| 214 | CONFIG_CAT=y |
| 215 | CONFIG_FEATURE_CATN=y |
| 216 | CONFIG_FEATURE_CATV=y |
| 217 | CONFIG_CHGRP=y |
| 218 | CONFIG_CHMOD=y |
| 219 | CONFIG_CHOWN=y |
| 220 | CONFIG_FEATURE_CHOWN_LONG_OPTIONS=y |
| 221 | CONFIG_CHROOT=y |
| 222 | # CONFIG_CKSUM is not set |
| 223 | # CONFIG_CRC32 is not set |
| 224 | CONFIG_COMM=y |
| 225 | CONFIG_CP=y |
| 226 | CONFIG_FEATURE_CP_LONG_OPTIONS=y |
| 227 | CONFIG_FEATURE_CP_REFLINK=y |
| 228 | CONFIG_CUT=y |
| 229 | CONFIG_FEATURE_CUT_REGEX=y |
| 230 | CONFIG_DATE=y |
| 231 | CONFIG_FEATURE_DATE_ISOFMT=y |
| 232 | # CONFIG_FEATURE_DATE_NANO is not set |
| 233 | CONFIG_FEATURE_DATE_COMPAT=y |
| 234 | CONFIG_DD=y |
| 235 | CONFIG_FEATURE_DD_SIGNAL_HANDLING=y |
| 236 | CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y |
| 237 | CONFIG_FEATURE_DD_IBS_OBS=y |
| 238 | CONFIG_FEATURE_DD_STATUS=y |
| 239 | CONFIG_DF=y |
| 240 | CONFIG_FEATURE_DF_FANCY=y |
| 241 | CONFIG_FEATURE_SKIP_ROOTFS=y |
| 242 | CONFIG_DIRNAME=y |
| 243 | CONFIG_DOS2UNIX=y |
| 244 | CONFIG_UNIX2DOS=y |
| 245 | CONFIG_DU=y |
| 246 | CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y |
| 247 | # CONFIG_ECHO is not set |
| 248 | CONFIG_FEATURE_FANCY_ECHO=y |
| 249 | CONFIG_ENV=y |
| 250 | CONFIG_EXPAND=y |
| 251 | CONFIG_UNEXPAND=y |
| 252 | CONFIG_EXPR=y |
| 253 | CONFIG_EXPR_MATH_SUPPORT_64=y |
| 254 | # CONFIG_FACTOR is not set |
| 255 | CONFIG_FALSE=y |
| 256 | CONFIG_FOLD=y |
| 257 | CONFIG_HEAD=y |
| 258 | CONFIG_FEATURE_FANCY_HEAD=y |
| 259 | CONFIG_HOSTID=y |
| 260 | CONFIG_ID=y |
| 261 | CONFIG_GROUPS=y |
| 262 | CONFIG_INSTALL=y |
| 263 | CONFIG_FEATURE_INSTALL_LONG_OPTIONS=y |
| 264 | CONFIG_LINK=y |
| 265 | CONFIG_LN=y |
| 266 | # CONFIG_LOGNAME is not set |
| 267 | CONFIG_LS=y |
| 268 | CONFIG_FEATURE_LS_FILETYPES=y |
| 269 | CONFIG_FEATURE_LS_FOLLOWLINKS=y |
| 270 | CONFIG_FEATURE_LS_RECURSIVE=y |
| 271 | CONFIG_FEATURE_LS_WIDTH=y |
| 272 | CONFIG_FEATURE_LS_SORTFILES=y |
| 273 | CONFIG_FEATURE_LS_TIMESTAMPS=y |
| 274 | CONFIG_FEATURE_LS_USERNAME=y |
| 275 | CONFIG_FEATURE_LS_COLOR=y |
| 276 | CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y |
| 277 | # CONFIG_MD5SUM is not set |
| 278 | # CONFIG_SHA1SUM is not set |
| 279 | # CONFIG_SHA256SUM is not set |
| 280 | # CONFIG_SHA512SUM is not set |
| 281 | # CONFIG_SHA3SUM is not set |
| 282 | # CONFIG_FEATURE_MD5_SHA1_SUM_CHECK is not set |
| 283 | CONFIG_MKDIR=y |
| 284 | CONFIG_MKFIFO=y |
| 285 | CONFIG_MKNOD=y |
| 286 | CONFIG_MKTEMP=y |
| 287 | CONFIG_MV=y |
| 288 | CONFIG_NICE=y |
| 289 | CONFIG_NL=y |
| 290 | CONFIG_NOHUP=y |
| 291 | CONFIG_NPROC=y |
| 292 | CONFIG_OD=y |
| 293 | CONFIG_PASTE=y |
| 294 | # CONFIG_PRINTENV is not set |
| 295 | # CONFIG_PRINTF is not set |
| 296 | CONFIG_PWD=y |
| 297 | CONFIG_READLINK=y |
| 298 | CONFIG_FEATURE_READLINK_FOLLOW=y |
| 299 | CONFIG_REALPATH=y |
| 300 | CONFIG_RM=y |
| 301 | CONFIG_RMDIR=y |
| 302 | CONFIG_SEQ=y |
| 303 | CONFIG_SHRED=y |
| 304 | CONFIG_SHUF=y |
| 305 | CONFIG_SLEEP=y |
| 306 | CONFIG_FEATURE_FANCY_SLEEP=y |
| 307 | CONFIG_SORT=y |
| 308 | # CONFIG_FEATURE_SORT_BIG is not set |
| 309 | # CONFIG_FEATURE_SORT_OPTIMIZE_MEMORY is not set |
| 310 | CONFIG_SPLIT=y |
| 311 | CONFIG_FEATURE_SPLIT_FANCY=y |
| 312 | CONFIG_STAT=y |
| 313 | CONFIG_FEATURE_STAT_FORMAT=y |
| 314 | CONFIG_FEATURE_STAT_FILESYSTEM=y |
| 315 | CONFIG_STTY=y |
| 316 | # CONFIG_SUM is not set |
| 317 | CONFIG_SYNC=y |
| 318 | CONFIG_FEATURE_SYNC_FANCY=y |
| 319 | CONFIG_FSYNC=y |
| 320 | CONFIG_TAC=y |
| 321 | CONFIG_TAIL=y |
| 322 | CONFIG_FEATURE_FANCY_TAIL=y |
| 323 | CONFIG_TEE=y |
| 324 | CONFIG_FEATURE_TEE_USE_BLOCK_IO=y |
| 325 | # CONFIG_TEST is not set |
| 326 | # CONFIG_TEST1 is not set |
| 327 | # CONFIG_TEST2 is not set |
| 328 | # CONFIG_FEATURE_TEST_64 is not set |
| 329 | CONFIG_TIMEOUT=y |
| 330 | CONFIG_TOUCH=y |
| 331 | CONFIG_FEATURE_TOUCH_SUSV3=y |
| 332 | CONFIG_TR=y |
| 333 | CONFIG_FEATURE_TR_CLASSES=y |
| 334 | CONFIG_FEATURE_TR_EQUIV=y |
| 335 | CONFIG_TRUE=y |
| 336 | CONFIG_TRUNCATE=y |
| 337 | CONFIG_TTY=y |
| 338 | CONFIG_UNAME=y |
| 339 | CONFIG_UNAME_OSNAME="GNU/Linux" |
| 340 | CONFIG_BB_ARCH=y |
| 341 | CONFIG_UNIQ=y |
| 342 | CONFIG_UNLINK=y |
| 343 | CONFIG_USLEEP=y |
| 344 | CONFIG_UUDECODE=y |
| 345 | CONFIG_BASE32=y |
| 346 | CONFIG_BASE64=y |
| 347 | CONFIG_UUENCODE=y |
| 348 | CONFIG_WC=y |
| 349 | CONFIG_FEATURE_WC_LARGE=y |
| 350 | CONFIG_WHO=y |
| 351 | CONFIG_W=y |
| 352 | CONFIG_USERS=y |
| 353 | CONFIG_WHOAMI=y |
| 354 | CONFIG_YES=y |
| 355 | |
| 356 | # |
| 357 | # Console Utilities |
| 358 | # |
| 359 | # CONFIG_CHVT is not set |
| 360 | CONFIG_CLEAR=y |
| 361 | # CONFIG_DEALLOCVT is not set |
| 362 | # CONFIG_DUMPKMAP is not set |
| 363 | # CONFIG_FGCONSOLE is not set |
| 364 | # CONFIG_KBD_MODE is not set |
| 365 | # CONFIG_LOADFONT is not set |
| 366 | # CONFIG_SETFONT is not set |
| 367 | # CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set |
| 368 | CONFIG_DEFAULT_SETFONT_DIR="" |
| 369 | # CONFIG_FEATURE_LOADFONT_PSF2 is not set |
| 370 | # CONFIG_FEATURE_LOADFONT_RAW is not set |
| 371 | # CONFIG_LOADKMAP is not set |
| 372 | # CONFIG_OPENVT is not set |
| 373 | # CONFIG_RESET is not set |
| 374 | # CONFIG_RESIZE is not set |
| 375 | # CONFIG_FEATURE_RESIZE_PRINT is not set |
| 376 | # CONFIG_SETCONSOLE is not set |
| 377 | # CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set |
| 378 | # CONFIG_SETKEYCODES is not set |
| 379 | # CONFIG_SETLOGCONS is not set |
| 380 | # CONFIG_SHOWKEY is not set |
| 381 | |
| 382 | # |
| 383 | # Debian Utilities |
| 384 | # |
| 385 | # CONFIG_PIPE_PROGRESS is not set |
| 386 | # CONFIG_RUN_PARTS is not set |
| 387 | # CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS is not set |
| 388 | # CONFIG_FEATURE_RUN_PARTS_FANCY is not set |
| 389 | # CONFIG_START_STOP_DAEMON is not set |
| 390 | # CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set |
| 391 | # CONFIG_FEATURE_START_STOP_DAEMON_FANCY is not set |
| 392 | CONFIG_WHICH=y |
| 393 | |
| 394 | # |
| 395 | # klibc-utils |
| 396 | # |
| 397 | # CONFIG_MINIPS is not set |
| 398 | # CONFIG_NUKE is not set |
| 399 | # CONFIG_RESUME is not set |
| 400 | # CONFIG_RUN_INIT is not set |
| 401 | |
| 402 | # |
| 403 | # Editors |
| 404 | # |
| 405 | # CONFIG_AWK is not set |
| 406 | # CONFIG_FEATURE_AWK_LIBM is not set |
| 407 | # CONFIG_FEATURE_AWK_GNU_EXTENSIONS is not set |
| 408 | # CONFIG_CMP is not set |
| 409 | CONFIG_DIFF=y |
| 410 | CONFIG_FEATURE_DIFF_LONG_OPTIONS=y |
| 411 | CONFIG_FEATURE_DIFF_DIR=y |
| 412 | # CONFIG_ED is not set |
| 413 | CONFIG_PATCH=y |
| 414 | CONFIG_SED=y |
| 415 | CONFIG_VI=y |
| 416 | CONFIG_FEATURE_VI_MAX_LEN=4096 |
| 417 | # CONFIG_FEATURE_VI_8BIT is not set |
| 418 | CONFIG_FEATURE_VI_COLON=y |
| 419 | CONFIG_FEATURE_VI_COLON_EXPAND=y |
| 420 | CONFIG_FEATURE_VI_YANKMARK=y |
| 421 | CONFIG_FEATURE_VI_SEARCH=y |
| 422 | # CONFIG_FEATURE_VI_REGEX_SEARCH is not set |
| 423 | CONFIG_FEATURE_VI_USE_SIGNALS=y |
| 424 | CONFIG_FEATURE_VI_DOT_CMD=y |
| 425 | CONFIG_FEATURE_VI_READONLY=y |
| 426 | CONFIG_FEATURE_VI_SETOPTS=y |
| 427 | CONFIG_FEATURE_VI_SET=y |
| 428 | CONFIG_FEATURE_VI_WIN_RESIZE=y |
| 429 | CONFIG_FEATURE_VI_ASK_TERMINAL=y |
| 430 | CONFIG_FEATURE_VI_UNDO=y |
| 431 | CONFIG_FEATURE_VI_UNDO_QUEUE=y |
| 432 | CONFIG_FEATURE_VI_UNDO_QUEUE_MAX=256 |
| 433 | CONFIG_FEATURE_VI_VERBOSE_STATUS=y |
| 434 | CONFIG_FEATURE_ALLOW_EXEC=y |
| 435 | |
| 436 | # |
| 437 | # Finding Utilities |
| 438 | # |
| 439 | CONFIG_FIND=y |
| 440 | CONFIG_FEATURE_FIND_PRINT0=y |
| 441 | CONFIG_FEATURE_FIND_MTIME=y |
| 442 | CONFIG_FEATURE_FIND_ATIME=y |
| 443 | CONFIG_FEATURE_FIND_CTIME=y |
| 444 | CONFIG_FEATURE_FIND_MMIN=y |
| 445 | CONFIG_FEATURE_FIND_AMIN=y |
| 446 | CONFIG_FEATURE_FIND_CMIN=y |
| 447 | CONFIG_FEATURE_FIND_PERM=y |
| 448 | CONFIG_FEATURE_FIND_TYPE=y |
| 449 | CONFIG_FEATURE_FIND_EXECUTABLE=y |
| 450 | CONFIG_FEATURE_FIND_XDEV=y |
| 451 | CONFIG_FEATURE_FIND_MAXDEPTH=y |
| 452 | CONFIG_FEATURE_FIND_NEWER=y |
| 453 | CONFIG_FEATURE_FIND_INUM=y |
| 454 | CONFIG_FEATURE_FIND_SAMEFILE=y |
| 455 | CONFIG_FEATURE_FIND_EXEC=y |
| 456 | CONFIG_FEATURE_FIND_EXEC_PLUS=y |
| 457 | CONFIG_FEATURE_FIND_USER=y |
| 458 | CONFIG_FEATURE_FIND_GROUP=y |
| 459 | CONFIG_FEATURE_FIND_NOT=y |
| 460 | CONFIG_FEATURE_FIND_DEPTH=y |
| 461 | CONFIG_FEATURE_FIND_PAREN=y |
| 462 | CONFIG_FEATURE_FIND_SIZE=y |
| 463 | CONFIG_FEATURE_FIND_PRUNE=y |
| 464 | CONFIG_FEATURE_FIND_QUIT=y |
| 465 | CONFIG_FEATURE_FIND_DELETE=y |
| 466 | CONFIG_FEATURE_FIND_EMPTY=y |
| 467 | CONFIG_FEATURE_FIND_PATH=y |
| 468 | CONFIG_FEATURE_FIND_REGEX=y |
| 469 | # CONFIG_FEATURE_FIND_CONTEXT is not set |
| 470 | CONFIG_FEATURE_FIND_LINKS=y |
| 471 | CONFIG_GREP=y |
| 472 | # CONFIG_EGREP is not set |
| 473 | # CONFIG_FGREP is not set |
| 474 | CONFIG_FEATURE_GREP_CONTEXT=y |
| 475 | CONFIG_XARGS=y |
| 476 | CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y |
| 477 | CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y |
| 478 | CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y |
| 479 | CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y |
| 480 | CONFIG_FEATURE_XARGS_SUPPORT_REPL_STR=y |
| 481 | CONFIG_FEATURE_XARGS_SUPPORT_PARALLEL=y |
| 482 | CONFIG_FEATURE_XARGS_SUPPORT_ARGS_FILE=y |
| 483 | |
| 484 | # |
| 485 | # Init Utilities |
| 486 | # |
| 487 | # CONFIG_BOOTCHARTD is not set |
| 488 | # CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set |
| 489 | # CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set |
| 490 | # CONFIG_HALT is not set |
| 491 | # CONFIG_POWEROFF is not set |
| 492 | # CONFIG_REBOOT is not set |
| 493 | # CONFIG_FEATURE_WAIT_FOR_INIT is not set |
| 494 | # CONFIG_FEATURE_CALL_TELINIT is not set |
| 495 | CONFIG_TELINIT_PATH="" |
| 496 | # CONFIG_INIT is not set |
| 497 | # CONFIG_LINUXRC is not set |
| 498 | # CONFIG_FEATURE_USE_INITTAB is not set |
| 499 | # CONFIG_FEATURE_KILL_REMOVED is not set |
| 500 | CONFIG_FEATURE_KILL_DELAY=0 |
| 501 | # CONFIG_FEATURE_INIT_SCTTY is not set |
| 502 | # CONFIG_FEATURE_INIT_SYSLOG is not set |
| 503 | # CONFIG_FEATURE_INIT_QUIET is not set |
| 504 | # CONFIG_FEATURE_INIT_COREDUMPS is not set |
| 505 | CONFIG_INIT_TERMINAL_TYPE="" |
| 506 | # CONFIG_FEATURE_INIT_MODIFY_CMDLINE is not set |
| 507 | |
| 508 | # |
| 509 | # Login/Password Management Utilities |
| 510 | # |
| 511 | # CONFIG_FEATURE_SHADOWPASSWDS is not set |
| 512 | CONFIG_USE_BB_PWD_GRP=y |
| 513 | # CONFIG_USE_BB_SHADOW is not set |
| 514 | CONFIG_USE_BB_CRYPT=y |
| 515 | CONFIG_USE_BB_CRYPT_SHA=y |
| 516 | # CONFIG_ADD_SHELL is not set |
| 517 | # CONFIG_REMOVE_SHELL is not set |
| 518 | CONFIG_ADDGROUP=y |
| 519 | # CONFIG_FEATURE_ADDUSER_TO_GROUP is not set |
| 520 | CONFIG_ADDUSER=y |
| 521 | # CONFIG_FEATURE_CHECK_NAMES is not set |
| 522 | CONFIG_LAST_ID=60000 |
| 523 | CONFIG_FIRST_SYSTEM_ID=100 |
| 524 | CONFIG_LAST_SYSTEM_ID=999 |
| 525 | # CONFIG_CHPASSWD is not set |
| 526 | CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="" |
| 527 | # CONFIG_CRYPTPW is not set |
| 528 | # CONFIG_MKPASSWD is not set |
| 529 | # CONFIG_DELUSER is not set |
| 530 | # CONFIG_DELGROUP is not set |
| 531 | # CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set |
| 532 | # CONFIG_GETTY is not set |
| 533 | # CONFIG_LOGIN is not set |
| 534 | # CONFIG_LOGIN_SESSION_AS_CHILD is not set |
| 535 | # CONFIG_LOGIN_SCRIPTS is not set |
| 536 | # CONFIG_FEATURE_NOLOGIN is not set |
| 537 | # CONFIG_FEATURE_SECURETTY is not set |
| 538 | # CONFIG_PASSWD is not set |
| 539 | # CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set |
| 540 | # CONFIG_SU is not set |
| 541 | # CONFIG_FEATURE_SU_SYSLOG is not set |
| 542 | # CONFIG_FEATURE_SU_CHECKS_SHELLS is not set |
| 543 | # CONFIG_FEATURE_SU_BLANK_PW_NEEDS_SECURE_TTY is not set |
| 544 | # CONFIG_SULOGIN is not set |
| 545 | # CONFIG_VLOCK is not set |
| 546 | |
| 547 | # |
| 548 | # Linux Ext2 FS Progs |
| 549 | # |
| 550 | # CONFIG_CHATTR is not set |
| 551 | # CONFIG_FSCK is not set |
| 552 | # CONFIG_LSATTR is not set |
| 553 | # CONFIG_TUNE2FS is not set |
| 554 | |
| 555 | # |
| 556 | # Linux Module Utilities |
| 557 | # |
| 558 | # CONFIG_MODPROBE_SMALL is not set |
| 559 | # CONFIG_DEPMOD is not set |
| 560 | # CONFIG_INSMOD is not set |
| 561 | # CONFIG_LSMOD is not set |
| 562 | # CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set |
| 563 | # CONFIG_MODINFO is not set |
| 564 | # CONFIG_MODPROBE is not set |
| 565 | # CONFIG_FEATURE_MODPROBE_BLACKLIST is not set |
| 566 | # CONFIG_RMMOD is not set |
| 567 | |
| 568 | # |
| 569 | # Options common to multiple modutils |
| 570 | # |
| 571 | # CONFIG_FEATURE_CMDLINE_MODULE_OPTIONS is not set |
| 572 | # CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set |
| 573 | # CONFIG_FEATURE_2_4_MODULES is not set |
| 574 | # CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set |
| 575 | # CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set |
| 576 | # CONFIG_FEATURE_INSMOD_LOADINKMEM is not set |
| 577 | # CONFIG_FEATURE_INSMOD_LOAD_MAP is not set |
| 578 | # CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set |
| 579 | # CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set |
| 580 | # CONFIG_FEATURE_INSMOD_TRY_MMAP is not set |
| 581 | # CONFIG_FEATURE_MODUTILS_ALIAS is not set |
| 582 | # CONFIG_FEATURE_MODUTILS_SYMBOLS is not set |
| 583 | CONFIG_DEFAULT_MODULES_DIR="" |
| 584 | CONFIG_DEFAULT_DEPMOD_FILE="" |
| 585 | |
| 586 | # |
| 587 | # Linux System Utilities |
| 588 | # |
| 589 | # CONFIG_ACPID is not set |
| 590 | # CONFIG_FEATURE_ACPID_COMPAT is not set |
| 591 | # CONFIG_BLKDISCARD is not set |
| 592 | # CONFIG_BLKID is not set |
| 593 | # CONFIG_FEATURE_BLKID_TYPE is not set |
| 594 | # CONFIG_BLOCKDEV is not set |
| 595 | # CONFIG_CAL is not set |
| 596 | # CONFIG_CHRT is not set |
| 597 | # CONFIG_DMESG is not set |
| 598 | # CONFIG_FEATURE_DMESG_PRETTY is not set |
| 599 | # CONFIG_EJECT is not set |
| 600 | # CONFIG_FEATURE_EJECT_SCSI is not set |
| 601 | # CONFIG_FALLOCATE is not set |
| 602 | # CONFIG_FATATTR is not set |
| 603 | # CONFIG_FBSET is not set |
| 604 | # CONFIG_FEATURE_FBSET_FANCY is not set |
| 605 | # CONFIG_FEATURE_FBSET_READMODE is not set |
| 606 | # CONFIG_FDFORMAT is not set |
| 607 | # CONFIG_FDISK is not set |
| 608 | # CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set |
| 609 | # CONFIG_FEATURE_FDISK_WRITABLE is not set |
| 610 | # CONFIG_FEATURE_AIX_LABEL is not set |
| 611 | # CONFIG_FEATURE_SGI_LABEL is not set |
| 612 | # CONFIG_FEATURE_SUN_LABEL is not set |
| 613 | # CONFIG_FEATURE_OSF_LABEL is not set |
| 614 | # CONFIG_FEATURE_GPT_LABEL is not set |
| 615 | # CONFIG_FEATURE_FDISK_ADVANCED is not set |
| 616 | # CONFIG_FINDFS is not set |
| 617 | # CONFIG_FLOCK is not set |
| 618 | # CONFIG_FDFLUSH is not set |
| 619 | # CONFIG_FREERAMDISK is not set |
| 620 | # CONFIG_FSCK_MINIX is not set |
| 621 | # CONFIG_FSFREEZE is not set |
| 622 | # CONFIG_FSTRIM is not set |
| 623 | # CONFIG_GETOPT is not set |
| 624 | # CONFIG_FEATURE_GETOPT_LONG is not set |
| 625 | CONFIG_HEXDUMP=y |
| 626 | CONFIG_HD=y |
| 627 | CONFIG_XXD=y |
| 628 | # CONFIG_HWCLOCK is not set |
| 629 | # CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set |
| 630 | # CONFIG_IONICE is not set |
| 631 | # CONFIG_IPCRM is not set |
| 632 | # CONFIG_IPCS is not set |
| 633 | # CONFIG_LAST is not set |
| 634 | # CONFIG_FEATURE_LAST_FANCY is not set |
| 635 | # CONFIG_LOSETUP is not set |
| 636 | # CONFIG_LSPCI is not set |
| 637 | # CONFIG_LSUSB is not set |
| 638 | # CONFIG_MDEV is not set |
| 639 | # CONFIG_FEATURE_MDEV_CONF is not set |
| 640 | # CONFIG_FEATURE_MDEV_RENAME is not set |
| 641 | # CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set |
| 642 | # CONFIG_FEATURE_MDEV_EXEC is not set |
| 643 | # CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set |
| 644 | # CONFIG_FEATURE_MDEV_DAEMON is not set |
| 645 | # CONFIG_MESG is not set |
| 646 | # CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP is not set |
| 647 | # CONFIG_MKE2FS is not set |
| 648 | # CONFIG_MKFS_EXT2 is not set |
| 649 | # CONFIG_MKFS_MINIX is not set |
| 650 | # CONFIG_FEATURE_MINIX2 is not set |
| 651 | # CONFIG_MKFS_REISER is not set |
| 652 | # CONFIG_MKDOSFS is not set |
| 653 | # CONFIG_MKFS_VFAT is not set |
| 654 | # CONFIG_MKSWAP is not set |
| 655 | # CONFIG_FEATURE_MKSWAP_UUID is not set |
| 656 | CONFIG_MORE=y |
| 657 | CONFIG_MOUNT=y |
| 658 | CONFIG_FEATURE_MOUNT_FAKE=y |
| 659 | CONFIG_FEATURE_MOUNT_VERBOSE=y |
| 660 | # CONFIG_FEATURE_MOUNT_HELPERS is not set |
| 661 | # CONFIG_FEATURE_MOUNT_LABEL is not set |
| 662 | # CONFIG_FEATURE_MOUNT_NFS is not set |
| 663 | # CONFIG_FEATURE_MOUNT_CIFS is not set |
| 664 | CONFIG_FEATURE_MOUNT_FLAGS=y |
| 665 | CONFIG_FEATURE_MOUNT_FSTAB=y |
| 666 | CONFIG_FEATURE_MOUNT_OTHERTAB=y |
| 667 | # CONFIG_MOUNTPOINT is not set |
| 668 | CONFIG_NOLOGIN=y |
| 669 | # CONFIG_NOLOGIN_DEPENDENCIES is not set |
| 670 | # CONFIG_NSENTER is not set |
| 671 | # CONFIG_PIVOT_ROOT is not set |
| 672 | # CONFIG_RDATE is not set |
| 673 | # CONFIG_RDEV is not set |
| 674 | # CONFIG_READPROFILE is not set |
| 675 | CONFIG_RENICE=y |
| 676 | CONFIG_REV=y |
| 677 | # CONFIG_RTCWAKE is not set |
| 678 | # CONFIG_SCRIPT is not set |
| 679 | # CONFIG_SCRIPTREPLAY is not set |
| 680 | # CONFIG_SETARCH is not set |
| 681 | # CONFIG_LINUX32 is not set |
| 682 | # CONFIG_LINUX64 is not set |
| 683 | # CONFIG_SETPRIV is not set |
| 684 | # CONFIG_FEATURE_SETPRIV_DUMP is not set |
| 685 | # CONFIG_FEATURE_SETPRIV_CAPABILITIES is not set |
| 686 | # CONFIG_FEATURE_SETPRIV_CAPABILITY_NAMES is not set |
| 687 | # CONFIG_SETSID is not set |
| 688 | # CONFIG_SWAPON is not set |
| 689 | # CONFIG_FEATURE_SWAPON_DISCARD is not set |
| 690 | # CONFIG_FEATURE_SWAPON_PRI is not set |
| 691 | # CONFIG_SWAPOFF is not set |
| 692 | # CONFIG_FEATURE_SWAPONOFF_LABEL is not set |
| 693 | # CONFIG_SWITCH_ROOT is not set |
| 694 | # CONFIG_TASKSET is not set |
| 695 | # CONFIG_FEATURE_TASKSET_FANCY is not set |
| 696 | # CONFIG_FEATURE_TASKSET_CPULIST is not set |
| 697 | # CONFIG_UEVENT is not set |
| 698 | CONFIG_UMOUNT=y |
| 699 | CONFIG_FEATURE_UMOUNT_ALL=y |
| 700 | # CONFIG_UNSHARE is not set |
| 701 | # CONFIG_WALL is not set |
| 702 | |
| 703 | # |
| 704 | # Common options for mount/umount |
| 705 | # |
| 706 | # CONFIG_FEATURE_MOUNT_LOOP is not set |
| 707 | # CONFIG_FEATURE_MOUNT_LOOP_CREATE is not set |
| 708 | # CONFIG_FEATURE_MTAB_SUPPORT is not set |
| 709 | # CONFIG_VOLUMEID is not set |
| 710 | # CONFIG_FEATURE_VOLUMEID_BCACHE is not set |
| 711 | # CONFIG_FEATURE_VOLUMEID_BTRFS is not set |
| 712 | # CONFIG_FEATURE_VOLUMEID_CRAMFS is not set |
| 713 | # CONFIG_FEATURE_VOLUMEID_EROFS is not set |
| 714 | # CONFIG_FEATURE_VOLUMEID_EXFAT is not set |
| 715 | # CONFIG_FEATURE_VOLUMEID_EXT is not set |
| 716 | # CONFIG_FEATURE_VOLUMEID_F2FS is not set |
| 717 | # CONFIG_FEATURE_VOLUMEID_FAT is not set |
| 718 | # CONFIG_FEATURE_VOLUMEID_HFS is not set |
| 719 | # CONFIG_FEATURE_VOLUMEID_ISO9660 is not set |
| 720 | # CONFIG_FEATURE_VOLUMEID_JFS is not set |
| 721 | # CONFIG_FEATURE_VOLUMEID_LFS is not set |
| 722 | # CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set |
| 723 | # CONFIG_FEATURE_VOLUMEID_LINUXSWAP is not set |
| 724 | # CONFIG_FEATURE_VOLUMEID_LUKS is not set |
| 725 | # CONFIG_FEATURE_VOLUMEID_MINIX is not set |
| 726 | # CONFIG_FEATURE_VOLUMEID_NILFS is not set |
| 727 | # CONFIG_FEATURE_VOLUMEID_NTFS is not set |
| 728 | # CONFIG_FEATURE_VOLUMEID_OCFS2 is not set |
| 729 | # CONFIG_FEATURE_VOLUMEID_REISERFS is not set |
| 730 | # CONFIG_FEATURE_VOLUMEID_ROMFS is not set |
| 731 | # CONFIG_FEATURE_VOLUMEID_SQUASHFS is not set |
| 732 | # CONFIG_FEATURE_VOLUMEID_SYSV is not set |
| 733 | # CONFIG_FEATURE_VOLUMEID_UBIFS is not set |
| 734 | # CONFIG_FEATURE_VOLUMEID_UDF is not set |
| 735 | # CONFIG_FEATURE_VOLUMEID_XFS is not set |
| 736 | |
| 737 | # |
| 738 | # Miscellaneous Utilities |
| 739 | # |
| 740 | # CONFIG_ADJTIMEX is not set |
| 741 | # CONFIG_ASCII is not set |
| 742 | # CONFIG_BBCONFIG is not set |
| 743 | # CONFIG_FEATURE_COMPRESS_BBCONFIG is not set |
| 744 | CONFIG_BC=y |
| 745 | # CONFIG_DC is not set |
| 746 | CONFIG_FEATURE_DC_BIG=y |
| 747 | # CONFIG_FEATURE_DC_LIBM is not set |
| 748 | # CONFIG_FEATURE_BC_INTERACTIVE is not set |
| 749 | # CONFIG_FEATURE_BC_LONG_OPTIONS is not set |
| 750 | # CONFIG_BEEP is not set |
| 751 | CONFIG_FEATURE_BEEP_FREQ=0 |
| 752 | CONFIG_FEATURE_BEEP_LENGTH_MS=0 |
| 753 | # CONFIG_CHAT is not set |
| 754 | # CONFIG_FEATURE_CHAT_NOFAIL is not set |
| 755 | # CONFIG_FEATURE_CHAT_TTY_HIFI is not set |
| 756 | # CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set |
| 757 | # CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set |
| 758 | # CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set |
| 759 | # CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set |
| 760 | # CONFIG_FEATURE_CHAT_CLR_ABORT is not set |
| 761 | # CONFIG_CONSPY is not set |
| 762 | CONFIG_CROND=y |
| 763 | CONFIG_FEATURE_CROND_D=y |
| 764 | CONFIG_FEATURE_CROND_CALL_SENDMAIL=y |
| 765 | CONFIG_FEATURE_CROND_SPECIAL_TIMES=y |
| 766 | CONFIG_FEATURE_CROND_DIR="/var/spool/cron" |
| 767 | CONFIG_CRONTAB=y |
| 768 | # CONFIG_DEVFSD is not set |
| 769 | # CONFIG_DEVFSD_MODLOAD is not set |
| 770 | # CONFIG_DEVFSD_FG_NP is not set |
| 771 | # CONFIG_DEVFSD_VERBOSE is not set |
| 772 | # CONFIG_FEATURE_DEVFS is not set |
| 773 | # CONFIG_DEVMEM is not set |
| 774 | # CONFIG_FBSPLASH is not set |
| 775 | # CONFIG_FLASH_ERASEALL is not set |
| 776 | # CONFIG_FLASH_LOCK is not set |
| 777 | # CONFIG_FLASH_UNLOCK is not set |
| 778 | # CONFIG_FLASHCP is not set |
| 779 | # CONFIG_HDPARM is not set |
| 780 | # CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set |
| 781 | # CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set |
| 782 | # CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set |
| 783 | # CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set |
| 784 | # CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set |
| 785 | # CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set |
| 786 | CONFIG_HEXEDIT=y |
| 787 | # CONFIG_I2CGET is not set |
| 788 | # CONFIG_I2CSET is not set |
| 789 | # CONFIG_I2CDUMP is not set |
| 790 | # CONFIG_I2CDETECT is not set |
| 791 | # CONFIG_I2CTRANSFER is not set |
| 792 | # CONFIG_INOTIFYD is not set |
| 793 | CONFIG_LESS=y |
| 794 | CONFIG_FEATURE_LESS_MAXLINES=9999999 |
| 795 | CONFIG_FEATURE_LESS_BRACKETS=y |
| 796 | CONFIG_FEATURE_LESS_FLAGS=y |
| 797 | CONFIG_FEATURE_LESS_TRUNCATE=y |
| 798 | CONFIG_FEATURE_LESS_MARKS=y |
| 799 | CONFIG_FEATURE_LESS_REGEXP=y |
| 800 | CONFIG_FEATURE_LESS_WINCH=y |
| 801 | CONFIG_FEATURE_LESS_ASK_TERMINAL=y |
| 802 | CONFIG_FEATURE_LESS_DASHCMD=y |
| 803 | CONFIG_FEATURE_LESS_LINENUMS=y |
| 804 | CONFIG_FEATURE_LESS_RAW=y |
| 805 | CONFIG_FEATURE_LESS_ENV=y |
| 806 | # CONFIG_LSSCSI is not set |
| 807 | # CONFIG_MAKEDEVS is not set |
| 808 | # CONFIG_FEATURE_MAKEDEVS_LEAF is not set |
| 809 | # CONFIG_FEATURE_MAKEDEVS_TABLE is not set |
| 810 | # CONFIG_MAN is not set |
| 811 | # CONFIG_MICROCOM is not set |
| 812 | # CONFIG_MIM is not set |
| 813 | # CONFIG_MT is not set |
| 814 | # CONFIG_NANDWRITE is not set |
| 815 | # CONFIG_NANDDUMP is not set |
| 816 | # CONFIG_PARTPROBE is not set |
| 817 | # CONFIG_RAIDAUTORUN is not set |
| 818 | # CONFIG_READAHEAD is not set |
| 819 | # CONFIG_RFKILL is not set |
| 820 | # CONFIG_RUNLEVEL is not set |
| 821 | # CONFIG_RX is not set |
| 822 | # CONFIG_SETFATTR is not set |
| 823 | # CONFIG_SETSERIAL is not set |
| 824 | CONFIG_STRINGS=y |
| 825 | CONFIG_TIME=y |
| 826 | # CONFIG_TS is not set |
| 827 | # CONFIG_TTYSIZE is not set |
| 828 | # CONFIG_UBIATTACH is not set |
| 829 | # CONFIG_UBIDETACH is not set |
| 830 | # CONFIG_UBIMKVOL is not set |
| 831 | # CONFIG_UBIRMVOL is not set |
| 832 | # CONFIG_UBIRSVOL is not set |
| 833 | # CONFIG_UBIUPDATEVOL is not set |
| 834 | # CONFIG_UBIRENAME is not set |
| 835 | # CONFIG_VOLNAME is not set |
| 836 | # CONFIG_WATCHDOG is not set |
| 837 | # CONFIG_FEATURE_WATCHDOG_OPEN_TWICE is not set |
| 838 | |
| 839 | # |
| 840 | # Networking Utilities |
| 841 | # |
| 842 | CONFIG_FEATURE_IPV6=y |
| 843 | # CONFIG_FEATURE_UNIX_LOCAL is not set |
| 844 | CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y |
| 845 | # CONFIG_VERBOSE_RESOLUTION_ERRORS is not set |
| 846 | # CONFIG_FEATURE_ETC_NETWORKS is not set |
| 847 | # CONFIG_FEATURE_ETC_SERVICES is not set |
| 848 | # CONFIG_FEATURE_HWIB is not set |
| 849 | # CONFIG_FEATURE_TLS_SHA1 is not set |
| 850 | # CONFIG_ARP is not set |
| 851 | # CONFIG_ARPING is not set |
| 852 | # CONFIG_BRCTL is not set |
| 853 | # CONFIG_FEATURE_BRCTL_FANCY is not set |
| 854 | # CONFIG_FEATURE_BRCTL_SHOW is not set |
| 855 | # CONFIG_DNSD is not set |
| 856 | # CONFIG_ETHER_WAKE is not set |
| 857 | # CONFIG_FTPD is not set |
| 858 | # CONFIG_FEATURE_FTPD_WRITE is not set |
| 859 | # CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST is not set |
| 860 | # CONFIG_FEATURE_FTPD_AUTHENTICATION is not set |
| 861 | # CONFIG_FTPGET is not set |
| 862 | # CONFIG_FTPPUT is not set |
| 863 | # CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set |
| 864 | # CONFIG_HOSTNAME is not set |
| 865 | # CONFIG_DNSDOMAINNAME is not set |
| 866 | # CONFIG_HTTPD is not set |
| 867 | CONFIG_FEATURE_HTTPD_PORT_DEFAULT=0 |
| 868 | # CONFIG_FEATURE_HTTPD_RANGES is not set |
| 869 | # CONFIG_FEATURE_HTTPD_SETUID is not set |
| 870 | # CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set |
| 871 | # CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set |
| 872 | # CONFIG_FEATURE_HTTPD_CGI is not set |
| 873 | # CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set |
| 874 | # CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set |
| 875 | # CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set |
| 876 | # CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set |
| 877 | # CONFIG_FEATURE_HTTPD_PROXY is not set |
| 878 | # CONFIG_FEATURE_HTTPD_GZIP is not set |
| 879 | # CONFIG_FEATURE_HTTPD_ETAG is not set |
| 880 | # CONFIG_FEATURE_HTTPD_LAST_MODIFIED is not set |
| 881 | # CONFIG_FEATURE_HTTPD_DATE is not set |
| 882 | # CONFIG_FEATURE_HTTPD_ACL_IP is not set |
| 883 | CONFIG_IFCONFIG=y |
| 884 | CONFIG_FEATURE_IFCONFIG_STATUS=y |
| 885 | # CONFIG_FEATURE_IFCONFIG_SLIP is not set |
| 886 | CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y |
| 887 | CONFIG_FEATURE_IFCONFIG_HW=y |
| 888 | CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y |
| 889 | # CONFIG_IFENSLAVE is not set |
| 890 | # CONFIG_IFPLUGD is not set |
| 891 | # CONFIG_IFUP is not set |
| 892 | # CONFIG_IFDOWN is not set |
| 893 | CONFIG_IFUPDOWN_IFSTATE_PATH="" |
| 894 | # CONFIG_FEATURE_IFUPDOWN_IP is not set |
| 895 | # CONFIG_FEATURE_IFUPDOWN_IPV4 is not set |
| 896 | # CONFIG_FEATURE_IFUPDOWN_IPV6 is not set |
| 897 | # CONFIG_FEATURE_IFUPDOWN_MAPPING is not set |
| 898 | # CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set |
| 899 | CONFIG_INETD=y |
| 900 | # CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set |
| 901 | # CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set |
| 902 | # CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set |
| 903 | # CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set |
| 904 | # CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set |
| 905 | # CONFIG_FEATURE_INETD_RPC is not set |
| 906 | CONFIG_IP=y |
| 907 | # CONFIG_IPADDR is not set |
| 908 | # CONFIG_IPLINK is not set |
| 909 | # CONFIG_IPROUTE is not set |
| 910 | # CONFIG_IPTUNNEL is not set |
| 911 | # CONFIG_IPRULE is not set |
| 912 | # CONFIG_IPNEIGH is not set |
| 913 | CONFIG_FEATURE_IP_ADDRESS=y |
| 914 | CONFIG_FEATURE_IP_LINK=y |
| 915 | CONFIG_FEATURE_IP_ROUTE=y |
| 916 | CONFIG_FEATURE_IP_ROUTE_DIR="/etc/iproute2" |
| 917 | # CONFIG_FEATURE_IP_TUNNEL is not set |
| 918 | # CONFIG_FEATURE_IP_RULE is not set |
| 919 | CONFIG_FEATURE_IP_NEIGH=y |
| 920 | # CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set |
| 921 | CONFIG_IPCALC=y |
| 922 | CONFIG_FEATURE_IPCALC_LONG_OPTIONS=y |
| 923 | CONFIG_FEATURE_IPCALC_FANCY=y |
| 924 | # CONFIG_FAKEIDENTD is not set |
| 925 | # CONFIG_NAMEIF is not set |
| 926 | # CONFIG_FEATURE_NAMEIF_EXTENDED is not set |
| 927 | # CONFIG_NBDCLIENT is not set |
| 928 | CONFIG_NC=y |
| 929 | # CONFIG_NETCAT is not set |
| 930 | CONFIG_NC_SERVER=y |
| 931 | CONFIG_NC_EXTRA=y |
| 932 | CONFIG_NC_110_COMPAT=y |
| 933 | # CONFIG_NETSTAT is not set |
| 934 | # CONFIG_FEATURE_NETSTAT_WIDE is not set |
| 935 | # CONFIG_FEATURE_NETSTAT_PRG is not set |
| 936 | # CONFIG_NSLOOKUP is not set |
| 937 | # CONFIG_FEATURE_NSLOOKUP_BIG is not set |
| 938 | # CONFIG_FEATURE_NSLOOKUP_LONG_OPTIONS is not set |
| 939 | # CONFIG_NTPD is not set |
| 940 | # CONFIG_FEATURE_NTPD_SERVER is not set |
| 941 | # CONFIG_FEATURE_NTPD_CONF is not set |
| 942 | # CONFIG_FEATURE_NTP_AUTH is not set |
| 943 | # CONFIG_PING is not set |
| 944 | # CONFIG_PING6 is not set |
| 945 | # CONFIG_FEATURE_FANCY_PING is not set |
| 946 | # CONFIG_PSCAN is not set |
| 947 | CONFIG_ROUTE=y |
| 948 | # CONFIG_SLATTACH is not set |
| 949 | CONFIG_SSL_CLIENT=y |
| 950 | # CONFIG_TC is not set |
| 951 | # CONFIG_FEATURE_TC_INGRESS is not set |
| 952 | # CONFIG_TCPSVD is not set |
| 953 | # CONFIG_UDPSVD is not set |
| 954 | # CONFIG_TELNET is not set |
| 955 | # CONFIG_FEATURE_TELNET_TTYPE is not set |
| 956 | # CONFIG_FEATURE_TELNET_AUTOLOGIN is not set |
| 957 | # CONFIG_FEATURE_TELNET_WIDTH is not set |
| 958 | # CONFIG_TELNETD is not set |
| 959 | # CONFIG_FEATURE_TELNETD_STANDALONE is not set |
| 960 | CONFIG_FEATURE_TELNETD_PORT_DEFAULT=0 |
| 961 | # CONFIG_FEATURE_TELNETD_INETD_WAIT is not set |
| 962 | # CONFIG_TFTP is not set |
| 963 | # CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set |
| 964 | # CONFIG_FEATURE_TFTP_HPA_COMPAT is not set |
| 965 | # CONFIG_TFTPD is not set |
| 966 | # CONFIG_FEATURE_TFTP_GET is not set |
| 967 | # CONFIG_FEATURE_TFTP_PUT is not set |
| 968 | # CONFIG_FEATURE_TFTP_BLOCKSIZE is not set |
| 969 | # CONFIG_TFTP_DEBUG is not set |
| 970 | CONFIG_TLS=y |
| 971 | # CONFIG_TRACEROUTE is not set |
| 972 | # CONFIG_TRACEROUTE6 is not set |
| 973 | # CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set |
| 974 | # CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set |
| 975 | # CONFIG_TUNCTL is not set |
| 976 | # CONFIG_FEATURE_TUNCTL_UG is not set |
| 977 | # CONFIG_VCONFIG is not set |
| 978 | CONFIG_WGET=y |
| 979 | CONFIG_FEATURE_WGET_LONG_OPTIONS=y |
| 980 | CONFIG_FEATURE_WGET_STATUSBAR=y |
| 981 | CONFIG_FEATURE_WGET_FTP=y |
| 982 | CONFIG_FEATURE_WGET_AUTHENTICATION=y |
| 983 | CONFIG_FEATURE_WGET_TIMEOUT=y |
| 984 | CONFIG_FEATURE_WGET_HTTPS=y |
| 985 | CONFIG_FEATURE_WGET_OPENSSL=y |
| 986 | CONFIG_WHOIS=y |
| 987 | # CONFIG_ZCIP is not set |
| 988 | # CONFIG_UDHCPD is not set |
| 989 | # CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set |
| 990 | # CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set |
| 991 | CONFIG_DHCPD_LEASES_FILE="" |
| 992 | # CONFIG_DUMPLEASES is not set |
| 993 | # CONFIG_DHCPRELAY is not set |
| 994 | # CONFIG_UDHCPC is not set |
| 995 | # CONFIG_FEATURE_UDHCPC_ARPING is not set |
| 996 | # CONFIG_FEATURE_UDHCPC_SANITIZEOPT is not set |
| 997 | CONFIG_UDHCPC_DEFAULT_SCRIPT="" |
| 998 | # CONFIG_UDHCPC6 is not set |
| 999 | # CONFIG_FEATURE_UDHCPC6_RFC3646 is not set |
| 1000 | # CONFIG_FEATURE_UDHCPC6_RFC4704 is not set |
| 1001 | # CONFIG_FEATURE_UDHCPC6_RFC4833 is not set |
| 1002 | # CONFIG_FEATURE_UDHCPC6_RFC5970 is not set |
| 1003 | CONFIG_UDHCPC_DEFAULT_INTERFACE="" |
| 1004 | # CONFIG_FEATURE_UDHCP_PORT is not set |
| 1005 | CONFIG_UDHCP_DEBUG=0 |
| 1006 | CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=0 |
| 1007 | # CONFIG_FEATURE_UDHCP_RFC3397 is not set |
| 1008 | # CONFIG_FEATURE_UDHCP_8021Q is not set |
| 1009 | CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="" |
| 1010 | |
| 1011 | # |
| 1012 | # Print Utilities |
| 1013 | # |
| 1014 | # CONFIG_LPD is not set |
| 1015 | # CONFIG_LPR is not set |
| 1016 | # CONFIG_LPQ is not set |
| 1017 | |
| 1018 | # |
| 1019 | # Mail Utilities |
| 1020 | # |
| 1021 | CONFIG_FEATURE_MIME_CHARSET="utf-8" |
| 1022 | # CONFIG_MAKEMIME is not set |
| 1023 | # CONFIG_POPMAILDIR is not set |
| 1024 | # CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set |
| 1025 | # CONFIG_REFORMIME is not set |
| 1026 | # CONFIG_FEATURE_REFORMIME_COMPAT is not set |
| 1027 | CONFIG_SENDMAIL=y |
| 1028 | |
| 1029 | # |
| 1030 | # Process Utilities |
| 1031 | # |
| 1032 | # CONFIG_FEATURE_FAST_TOP is not set |
| 1033 | CONFIG_FEATURE_SHOW_THREADS=y |
| 1034 | CONFIG_FREE=y |
| 1035 | CONFIG_FUSER=y |
| 1036 | CONFIG_IOSTAT=y |
| 1037 | CONFIG_KILL=y |
| 1038 | CONFIG_KILLALL=y |
| 1039 | # CONFIG_KILLALL5 is not set |
| 1040 | CONFIG_LSOF=y |
| 1041 | CONFIG_MPSTAT=y |
| 1042 | CONFIG_NMETER=y |
| 1043 | CONFIG_PGREP=y |
| 1044 | CONFIG_PKILL=y |
| 1045 | CONFIG_PIDOF=y |
| 1046 | CONFIG_FEATURE_PIDOF_SINGLE=y |
| 1047 | CONFIG_FEATURE_PIDOF_OMIT=y |
| 1048 | CONFIG_PMAP=y |
| 1049 | # CONFIG_POWERTOP is not set |
| 1050 | # CONFIG_FEATURE_POWERTOP_INTERACTIVE is not set |
| 1051 | CONFIG_PS=y |
| 1052 | # CONFIG_FEATURE_PS_WIDE is not set |
| 1053 | # CONFIG_FEATURE_PS_LONG is not set |
| 1054 | CONFIG_FEATURE_PS_TIME=y |
| 1055 | # CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set |
| 1056 | CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS=y |
| 1057 | CONFIG_PSTREE=y |
| 1058 | CONFIG_PWDX=y |
| 1059 | CONFIG_SMEMCAP=y |
| 1060 | CONFIG_BB_SYSCTL=y |
| 1061 | CONFIG_TOP=y |
| 1062 | CONFIG_FEATURE_TOP_INTERACTIVE=y |
| 1063 | CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y |
| 1064 | CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y |
| 1065 | CONFIG_FEATURE_TOP_SMP_CPU=y |
| 1066 | CONFIG_FEATURE_TOP_DECIMALS=y |
| 1067 | CONFIG_FEATURE_TOP_SMP_PROCESS=y |
| 1068 | CONFIG_FEATURE_TOPMEM=y |
| 1069 | CONFIG_UPTIME=y |
| 1070 | CONFIG_FEATURE_UPTIME_UTMP_SUPPORT=y |
| 1071 | CONFIG_WATCH=y |
| 1072 | |
| 1073 | # |
| 1074 | # Runit Utilities |
| 1075 | # |
| 1076 | CONFIG_CHPST=y |
| 1077 | CONFIG_SETUIDGID=y |
| 1078 | CONFIG_ENVUIDGID=y |
| 1079 | CONFIG_ENVDIR=y |
| 1080 | CONFIG_SOFTLIMIT=y |
| 1081 | CONFIG_RUNSV=y |
| 1082 | CONFIG_RUNSVDIR=y |
| 1083 | # CONFIG_FEATURE_RUNSVDIR_LOG is not set |
| 1084 | CONFIG_SV=y |
| 1085 | CONFIG_SV_DEFAULT_SERVICE_DIR="/var/service" |
| 1086 | CONFIG_SVC=y |
| 1087 | CONFIG_SVOK=y |
| 1088 | CONFIG_SVLOGD=y |
| 1089 | # CONFIG_CHCON is not set |
| 1090 | # CONFIG_GETENFORCE is not set |
| 1091 | # CONFIG_GETSEBOOL is not set |
| 1092 | # CONFIG_LOAD_POLICY is not set |
| 1093 | # CONFIG_MATCHPATHCON is not set |
| 1094 | # CONFIG_RUNCON is not set |
| 1095 | # CONFIG_SELINUXENABLED is not set |
| 1096 | # CONFIG_SESTATUS is not set |
| 1097 | # CONFIG_SETENFORCE is not set |
| 1098 | # CONFIG_SETFILES is not set |
| 1099 | # CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set |
| 1100 | # CONFIG_RESTORECON is not set |
| 1101 | # CONFIG_SETSEBOOL is not set |
| 1102 | |
| 1103 | # |
| 1104 | # Shells |
| 1105 | # |
| 1106 | CONFIG_SH_IS_ASH=y |
| 1107 | # CONFIG_SH_IS_HUSH is not set |
| 1108 | # CONFIG_SH_IS_NONE is not set |
| 1109 | # CONFIG_BASH_IS_ASH is not set |
| 1110 | # CONFIG_BASH_IS_HUSH is not set |
| 1111 | CONFIG_BASH_IS_NONE=y |
| 1112 | CONFIG_SHELL_ASH=y |
| 1113 | CONFIG_ASH=y |
| 1114 | CONFIG_ASH_OPTIMIZE_FOR_SIZE=y |
| 1115 | CONFIG_ASH_INTERNAL_GLOB=y |
| 1116 | CONFIG_ASH_BASH_COMPAT=y |
| 1117 | # CONFIG_ASH_BASH_SOURCE_CURDIR is not set |
| 1118 | CONFIG_ASH_BASH_NOT_FOUND_HOOK=y |
| 1119 | CONFIG_ASH_JOB_CONTROL=y |
| 1120 | CONFIG_ASH_ALIAS=y |
| 1121 | CONFIG_ASH_RANDOM_SUPPORT=y |
| 1122 | CONFIG_ASH_EXPAND_PRMT=y |
| 1123 | CONFIG_ASH_IDLE_TIMEOUT=y |
| 1124 | CONFIG_ASH_MAIL=y |
| 1125 | CONFIG_ASH_ECHO=y |
| 1126 | CONFIG_ASH_PRINTF=y |
| 1127 | CONFIG_ASH_TEST=y |
| 1128 | CONFIG_ASH_HELP=y |
| 1129 | CONFIG_ASH_GETOPTS=y |
| 1130 | CONFIG_ASH_CMDCMD=y |
| 1131 | # CONFIG_CTTYHACK is not set |
| 1132 | # CONFIG_HUSH is not set |
| 1133 | # CONFIG_SHELL_HUSH is not set |
| 1134 | # CONFIG_HUSH_BASH_COMPAT is not set |
| 1135 | # CONFIG_HUSH_BRACE_EXPANSION is not set |
| 1136 | # CONFIG_HUSH_BASH_SOURCE_CURDIR is not set |
| 1137 | # CONFIG_HUSH_LINENO_VAR is not set |
| 1138 | # CONFIG_HUSH_INTERACTIVE is not set |
| 1139 | # CONFIG_HUSH_SAVEHISTORY is not set |
| 1140 | # CONFIG_HUSH_JOB is not set |
| 1141 | # CONFIG_HUSH_TICK is not set |
| 1142 | # CONFIG_HUSH_IF is not set |
| 1143 | # CONFIG_HUSH_LOOPS is not set |
| 1144 | # CONFIG_HUSH_CASE is not set |
| 1145 | # CONFIG_HUSH_FUNCTIONS is not set |
| 1146 | # CONFIG_HUSH_LOCAL is not set |
| 1147 | # CONFIG_HUSH_RANDOM_SUPPORT is not set |
| 1148 | # CONFIG_HUSH_MODE_X is not set |
| 1149 | # CONFIG_HUSH_ECHO is not set |
| 1150 | # CONFIG_HUSH_PRINTF is not set |
| 1151 | # CONFIG_HUSH_TEST is not set |
| 1152 | # CONFIG_HUSH_HELP is not set |
| 1153 | # CONFIG_HUSH_EXPORT is not set |
| 1154 | # CONFIG_HUSH_EXPORT_N is not set |
| 1155 | # CONFIG_HUSH_READONLY is not set |
| 1156 | # CONFIG_HUSH_KILL is not set |
| 1157 | # CONFIG_HUSH_WAIT is not set |
| 1158 | # CONFIG_HUSH_COMMAND is not set |
| 1159 | # CONFIG_HUSH_TRAP is not set |
| 1160 | # CONFIG_HUSH_TYPE is not set |
| 1161 | # CONFIG_HUSH_TIMES is not set |
| 1162 | # CONFIG_HUSH_READ is not set |
| 1163 | # CONFIG_HUSH_SET is not set |
| 1164 | # CONFIG_HUSH_UNSET is not set |
| 1165 | # CONFIG_HUSH_ULIMIT is not set |
| 1166 | # CONFIG_HUSH_UMASK is not set |
| 1167 | # CONFIG_HUSH_GETOPTS is not set |
| 1168 | # CONFIG_HUSH_MEMLEAK is not set |
| 1169 | |
| 1170 | # |
| 1171 | # Options common to all shells |
| 1172 | # |
| 1173 | CONFIG_FEATURE_SH_MATH=y |
| 1174 | CONFIG_FEATURE_SH_MATH_64=y |
| 1175 | CONFIG_FEATURE_SH_MATH_BASE=y |
| 1176 | CONFIG_FEATURE_SH_EXTRA_QUIET=y |
| 1177 | # CONFIG_FEATURE_SH_STANDALONE is not set |
| 1178 | # CONFIG_FEATURE_SH_NOFORK is not set |
| 1179 | CONFIG_FEATURE_SH_READ_FRAC=y |
| 1180 | CONFIG_FEATURE_SH_HISTFILESIZE=y |
| 1181 | CONFIG_FEATURE_SH_EMBEDDED_SCRIPTS=y |
| 1182 | |
| 1183 | # |
| 1184 | # System Logging Utilities |
| 1185 | # |
| 1186 | # CONFIG_KLOGD is not set |
| 1187 | # CONFIG_FEATURE_KLOGD_KLOGCTL is not set |
| 1188 | # CONFIG_LOGGER is not set |
| 1189 | # CONFIG_LOGREAD is not set |
| 1190 | # CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set |
| 1191 | # CONFIG_SYSLOGD is not set |
| 1192 | # CONFIG_FEATURE_ROTATE_LOGFILE is not set |
| 1193 | # CONFIG_FEATURE_REMOTE_LOG is not set |
| 1194 | # CONFIG_FEATURE_SYSLOGD_DUP is not set |
| 1195 | # CONFIG_FEATURE_SYSLOGD_CFG is not set |
| 1196 | # CONFIG_FEATURE_SYSLOGD_PRECISE_TIMESTAMPS is not set |
| 1197 | CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=0 |
| 1198 | # CONFIG_FEATURE_IPC_SYSLOG is not set |
| 1199 | CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0 |
| 1200 | # CONFIG_FEATURE_KMSG_SYSLOG is not set |
+2
-2
| --- extsrc/pikchr-worker.js | ||
| +++ extsrc/pikchr-worker.js | ||
| @@ -66,11 +66,11 @@ | ||
| 66 | 66 | |
| 67 | 67 | {type: 'pikchr', |
| 68 | 68 | data:{ |
| 69 | 69 | pikchr: input text, |
| 70 | 70 | result: rendered result (SVG on success, HTML on error), |
| 71 | - isError: bool, true if .result holds an error report, | |
| 71 | + isError: bool, true if .pikchr holds an error report, | |
| 72 | 72 | flags: integer: flags used to configure the pikchr rendering, |
| 73 | 73 | width: if !isError, width (integer pixels) of the SVG, |
| 74 | 74 | height: if !isError, height (integer pixels) of the SVG |
| 75 | 75 | } |
| 76 | 76 | } |
| @@ -214,8 +214,8 @@ | ||
| 214 | 214 | building with: |
| 215 | 215 | |
| 216 | 216 | emcc ... -sMODULARIZE=1 -sEXPORT_NAME=initPikchrModule |
| 217 | 217 | */ |
| 218 | 218 | initPikchrModule(pikchrModule).then(function(thisModule){ |
| 219 | - wMsg('pikchrshow-ready'); | |
| 219 | + wMsg('pikchr-ready'); | |
| 220 | 220 | }); |
| 221 | 221 | })(); |
| 222 | 222 |
| --- extsrc/pikchr-worker.js | |
| +++ extsrc/pikchr-worker.js | |
| @@ -66,11 +66,11 @@ | |
| 66 | |
| 67 | {type: 'pikchr', |
| 68 | data:{ |
| 69 | pikchr: input text, |
| 70 | result: rendered result (SVG on success, HTML on error), |
| 71 | isError: bool, true if .result holds an error report, |
| 72 | flags: integer: flags used to configure the pikchr rendering, |
| 73 | width: if !isError, width (integer pixels) of the SVG, |
| 74 | height: if !isError, height (integer pixels) of the SVG |
| 75 | } |
| 76 | } |
| @@ -214,8 +214,8 @@ | |
| 214 | building with: |
| 215 | |
| 216 | emcc ... -sMODULARIZE=1 -sEXPORT_NAME=initPikchrModule |
| 217 | */ |
| 218 | initPikchrModule(pikchrModule).then(function(thisModule){ |
| 219 | wMsg('pikchrshow-ready'); |
| 220 | }); |
| 221 | })(); |
| 222 |
| --- extsrc/pikchr-worker.js | |
| +++ extsrc/pikchr-worker.js | |
| @@ -66,11 +66,11 @@ | |
| 66 | |
| 67 | {type: 'pikchr', |
| 68 | data:{ |
| 69 | pikchr: input text, |
| 70 | result: rendered result (SVG on success, HTML on error), |
| 71 | isError: bool, true if .pikchr holds an error report, |
| 72 | flags: integer: flags used to configure the pikchr rendering, |
| 73 | width: if !isError, width (integer pixels) of the SVG, |
| 74 | height: if !isError, height (integer pixels) of the SVG |
| 75 | } |
| 76 | } |
| @@ -214,8 +214,8 @@ | |
| 214 | building with: |
| 215 | |
| 216 | emcc ... -sMODULARIZE=1 -sEXPORT_NAME=initPikchrModule |
| 217 | */ |
| 218 | initPikchrModule(pikchrModule).then(function(thisModule){ |
| 219 | wMsg('pikchr-ready'); |
| 220 | }); |
| 221 | })(); |
| 222 |
+4
-6
| --- extsrc/pikchr.c | ||
| +++ extsrc/pikchr.c | ||
| @@ -5836,14 +5836,11 @@ | ||
| 5836 | 5836 | pik_reset_samepath(p); |
| 5837 | 5837 | do{ |
| 5838 | 5838 | n = pik_next_rpath(p, pErr); |
| 5839 | 5839 | }while( n<1 ); |
| 5840 | 5840 | if( pHeading ){ |
| 5841 | - if( rHdg<0.0 || rHdg>360.0 ){ | |
| 5842 | - pik_error(p, pHeading, "headings should be between 0 and 360"); | |
| 5843 | - return; | |
| 5844 | - } | |
| 5841 | + rHdg = fmod(rHdg,360.0); | |
| 5845 | 5842 | }else if( pEdgept->eEdge==CP_C ){ |
| 5846 | 5843 | pik_error(p, pEdgept, "syntax error"); |
| 5847 | 5844 | return; |
| 5848 | 5845 | }else{ |
| 5849 | 5846 | rHdg = pik_hdg_angle[pEdgept->eEdge]; |
| @@ -7889,13 +7886,14 @@ | ||
| 7889 | 7886 | /* Print a usage comment for the shell and exit. */ |
| 7890 | 7887 | static void usage(const char *argv0){ |
| 7891 | 7888 | fprintf(stderr, "usage: %s [OPTIONS] FILE ...\n", argv0); |
| 7892 | 7889 | fprintf(stderr, |
| 7893 | 7890 | "Convert Pikchr input files into SVG. Filename \"-\" means stdin.\n" |
| 7891 | + "All output goes to stdout.\n" | |
| 7894 | 7892 | "Options:\n" |
| 7895 | 7893 | " --dont-stop Process all files even if earlier files have errors\n" |
| 7896 | - " --svg-only Omit raw SVG without the HTML wrapper\n" | |
| 7894 | + " --svg-only Emit raw SVG without the HTML wrapper\n" | |
| 7897 | 7895 | ); |
| 7898 | 7896 | exit(1); |
| 7899 | 7897 | } |
| 7900 | 7898 | |
| 7901 | 7899 | /* Send text to standard output, but escape HTML markup */ |
| @@ -8131,6 +8129,6 @@ | ||
| 8131 | 8129 | |
| 8132 | 8130 | |
| 8133 | 8131 | #endif /* PIKCHR_TCL */ |
| 8134 | 8132 | |
| 8135 | 8133 | |
| 8136 | -#line 8161 "pikchr.c" | |
| 8134 | +#line 8159 "pikchr.c" | |
| 8137 | 8135 |
| --- extsrc/pikchr.c | |
| +++ extsrc/pikchr.c | |
| @@ -5836,14 +5836,11 @@ | |
| 5836 | pik_reset_samepath(p); |
| 5837 | do{ |
| 5838 | n = pik_next_rpath(p, pErr); |
| 5839 | }while( n<1 ); |
| 5840 | if( pHeading ){ |
| 5841 | if( rHdg<0.0 || rHdg>360.0 ){ |
| 5842 | pik_error(p, pHeading, "headings should be between 0 and 360"); |
| 5843 | return; |
| 5844 | } |
| 5845 | }else if( pEdgept->eEdge==CP_C ){ |
| 5846 | pik_error(p, pEdgept, "syntax error"); |
| 5847 | return; |
| 5848 | }else{ |
| 5849 | rHdg = pik_hdg_angle[pEdgept->eEdge]; |
| @@ -7889,13 +7886,14 @@ | |
| 7889 | /* Print a usage comment for the shell and exit. */ |
| 7890 | static void usage(const char *argv0){ |
| 7891 | fprintf(stderr, "usage: %s [OPTIONS] FILE ...\n", argv0); |
| 7892 | fprintf(stderr, |
| 7893 | "Convert Pikchr input files into SVG. Filename \"-\" means stdin.\n" |
| 7894 | "Options:\n" |
| 7895 | " --dont-stop Process all files even if earlier files have errors\n" |
| 7896 | " --svg-only Omit raw SVG without the HTML wrapper\n" |
| 7897 | ); |
| 7898 | exit(1); |
| 7899 | } |
| 7900 | |
| 7901 | /* Send text to standard output, but escape HTML markup */ |
| @@ -8131,6 +8129,6 @@ | |
| 8131 | |
| 8132 | |
| 8133 | #endif /* PIKCHR_TCL */ |
| 8134 | |
| 8135 | |
| 8136 | #line 8161 "pikchr.c" |
| 8137 |
| --- extsrc/pikchr.c | |
| +++ extsrc/pikchr.c | |
| @@ -5836,14 +5836,11 @@ | |
| 5836 | pik_reset_samepath(p); |
| 5837 | do{ |
| 5838 | n = pik_next_rpath(p, pErr); |
| 5839 | }while( n<1 ); |
| 5840 | if( pHeading ){ |
| 5841 | rHdg = fmod(rHdg,360.0); |
| 5842 | }else if( pEdgept->eEdge==CP_C ){ |
| 5843 | pik_error(p, pEdgept, "syntax error"); |
| 5844 | return; |
| 5845 | }else{ |
| 5846 | rHdg = pik_hdg_angle[pEdgept->eEdge]; |
| @@ -7889,13 +7886,14 @@ | |
| 7886 | /* Print a usage comment for the shell and exit. */ |
| 7887 | static void usage(const char *argv0){ |
| 7888 | fprintf(stderr, "usage: %s [OPTIONS] FILE ...\n", argv0); |
| 7889 | fprintf(stderr, |
| 7890 | "Convert Pikchr input files into SVG. Filename \"-\" means stdin.\n" |
| 7891 | "All output goes to stdout.\n" |
| 7892 | "Options:\n" |
| 7893 | " --dont-stop Process all files even if earlier files have errors\n" |
| 7894 | " --svg-only Emit raw SVG without the HTML wrapper\n" |
| 7895 | ); |
| 7896 | exit(1); |
| 7897 | } |
| 7898 | |
| 7899 | /* Send text to standard output, but escape HTML markup */ |
| @@ -8131,6 +8129,6 @@ | |
| 8129 | |
| 8130 | |
| 8131 | #endif /* PIKCHR_TCL */ |
| 8132 | |
| 8133 | |
| 8134 | #line 8159 "pikchr.c" |
| 8135 |
| --- extsrc/pikchr.wasm | ||
| +++ extsrc/pikchr.wasm | ||
| cannot compute difference between binary files | ||
| 1 | 1 |
| --- extsrc/pikchr.wasm | |
| +++ extsrc/pikchr.wasm | |
| 0 | annot compute difference between binary files |
| 1 |
| --- extsrc/pikchr.wasm | |
| +++ extsrc/pikchr.wasm | |
| 0 | annot compute difference between binary files |
| 1 |
+234
-90
| --- extsrc/shell.c | ||
| +++ extsrc/shell.c | ||
| @@ -53,10 +53,19 @@ | ||
| 53 | 53 | */ |
| 54 | 54 | #if !defined(SQLITE_OS_WINRT) |
| 55 | 55 | # define SQLITE_OS_WINRT 0 |
| 56 | 56 | #endif |
| 57 | 57 | |
| 58 | +/* | |
| 59 | +** If SQLITE_SHELL_FIDDLE is defined then the shell is modified | |
| 60 | +** somewhat for use as a WASM module in a web browser. This flag | |
| 61 | +** should only be used when building the "fiddle" web application, as | |
| 62 | +** the browser-mode build has much different user input requirements | |
| 63 | +** and this build mode rewires the user input subsystem to account for | |
| 64 | +** that. | |
| 65 | +*/ | |
| 66 | + | |
| 58 | 67 | /* |
| 59 | 68 | ** Warning pragmas copied from msvc.h in the core. |
| 60 | 69 | */ |
| 61 | 70 | #if defined(_MSC_VER) |
| 62 | 71 | #pragma warning(disable : 4054) |
| @@ -245,21 +254,10 @@ | ||
| 245 | 254 | #else |
| 246 | 255 | # define setBinaryMode(X,Y) |
| 247 | 256 | # define setTextMode(X,Y) |
| 248 | 257 | #endif |
| 249 | 258 | |
| 250 | -/* | |
| 251 | -** When compiling with emcc (a.k.a. emscripten), we're building a | |
| 252 | -** WebAssembly (WASM) bundle and need to disable and rewire a few | |
| 253 | -** things. | |
| 254 | -*/ | |
| 255 | -#ifdef __EMSCRIPTEN__ | |
| 256 | -#define SQLITE_SHELL_WASM_MODE | |
| 257 | -#else | |
| 258 | -#undef SQLITE_SHELL_WASM_MODE | |
| 259 | -#endif | |
| 260 | - | |
| 261 | 259 | /* True if the timer is enabled */ |
| 262 | 260 | static int enableTimer = 0; |
| 263 | 261 | |
| 264 | 262 | /* Return the current wall-clock time */ |
| 265 | 263 | static sqlite3_int64 timeOfDay(void){ |
| @@ -717,11 +715,11 @@ | ||
| 717 | 715 | ** |
| 718 | 716 | ** The result is stored in space obtained from malloc() and must either |
| 719 | 717 | ** be freed by the caller or else passed back into this routine via the |
| 720 | 718 | ** zPrior argument for reuse. |
| 721 | 719 | */ |
| 722 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 720 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 723 | 721 | static char *one_input_line(FILE *in, char *zPrior, int isContinuation){ |
| 724 | 722 | char *zPrompt; |
| 725 | 723 | char *zResult; |
| 726 | 724 | if( in!=0 ){ |
| 727 | 725 | zResult = local_getline(zPrior, in); |
| @@ -737,11 +735,11 @@ | ||
| 737 | 735 | if( zResult && *zResult ) shell_add_history(zResult); |
| 738 | 736 | #endif |
| 739 | 737 | } |
| 740 | 738 | return zResult; |
| 741 | 739 | } |
| 742 | -#endif /* !SQLITE_SHELL_WASM_MODE */ | |
| 740 | +#endif /* !SQLITE_SHELL_FIDDLE */ | |
| 743 | 741 | |
| 744 | 742 | /* |
| 745 | 743 | ** Return the value of a hexadecimal digit. Return -1 if the input |
| 746 | 744 | ** is not a hex digit. |
| 747 | 745 | */ |
| @@ -3794,10 +3792,11 @@ | ||
| 3794 | 3792 | #define re_compile sqlite3re_compile |
| 3795 | 3793 | #define re_free sqlite3re_free |
| 3796 | 3794 | |
| 3797 | 3795 | /* The end-of-input character */ |
| 3798 | 3796 | #define RE_EOF 0 /* End of input */ |
| 3797 | +#define RE_START 0xfffffff /* Start of input - larger than an UTF-8 */ | |
| 3799 | 3798 | |
| 3800 | 3799 | /* The NFA is implemented as sequence of opcodes taken from the following |
| 3801 | 3800 | ** set. Each opcode has a single integer argument. |
| 3802 | 3801 | */ |
| 3803 | 3802 | #define RE_OP_MATCH 1 /* Match the one character in the argument */ |
| @@ -3815,10 +3814,37 @@ | ||
| 3815 | 3814 | #define RE_OP_DIGIT 13 /* digit: [0-9] */ |
| 3816 | 3815 | #define RE_OP_NOTDIGIT 14 /* Not a digit */ |
| 3817 | 3816 | #define RE_OP_SPACE 15 /* space: [ \t\n\r\v\f] */ |
| 3818 | 3817 | #define RE_OP_NOTSPACE 16 /* Not a digit */ |
| 3819 | 3818 | #define RE_OP_BOUNDARY 17 /* Boundary between word and non-word */ |
| 3819 | +#define RE_OP_ATSTART 18 /* Currently at the start of the string */ | |
| 3820 | + | |
| 3821 | +#if defined(SQLITE_DEBUG) | |
| 3822 | +/* Opcode names used for symbolic debugging */ | |
| 3823 | +static const char *ReOpName[] = { | |
| 3824 | + "EOF", | |
| 3825 | + "MATCH", | |
| 3826 | + "ANY", | |
| 3827 | + "ANYSTAR", | |
| 3828 | + "FORK", | |
| 3829 | + "GOTO", | |
| 3830 | + "ACCEPT", | |
| 3831 | + "CC_INC", | |
| 3832 | + "CC_EXC", | |
| 3833 | + "CC_VALUE", | |
| 3834 | + "CC_RANGE", | |
| 3835 | + "WORD", | |
| 3836 | + "NOTWORD", | |
| 3837 | + "DIGIT", | |
| 3838 | + "NOTDIGIT", | |
| 3839 | + "SPACE", | |
| 3840 | + "NOTSPACE", | |
| 3841 | + "BOUNDARY", | |
| 3842 | + "ATSTART", | |
| 3843 | +}; | |
| 3844 | +#endif /* SQLITE_DEBUG */ | |
| 3845 | + | |
| 3820 | 3846 | |
| 3821 | 3847 | /* Each opcode is a "state" in the NFA */ |
| 3822 | 3848 | typedef unsigned short ReStateNumber; |
| 3823 | 3849 | |
| 3824 | 3850 | /* Because this is an NFA and not a DFA, multiple states can be active at |
| @@ -3849,11 +3875,11 @@ | ||
| 3849 | 3875 | const char *zErr; /* Error message to return */ |
| 3850 | 3876 | char *aOp; /* Operators for the virtual machine */ |
| 3851 | 3877 | int *aArg; /* Arguments to each operator */ |
| 3852 | 3878 | unsigned (*xNextChar)(ReInput*); /* Next character function */ |
| 3853 | 3879 | unsigned char zInit[12]; /* Initial text to match */ |
| 3854 | - int nInit; /* Number of characters in zInit */ | |
| 3880 | + int nInit; /* Number of bytes in zInit */ | |
| 3855 | 3881 | unsigned nState; /* Number of entries in aOp[] and aArg[] */ |
| 3856 | 3882 | unsigned nAlloc; /* Slots allocated for aOp[] and aArg[] */ |
| 3857 | 3883 | }; |
| 3858 | 3884 | |
| 3859 | 3885 | /* Add a state to the given state set if it is not already there */ |
| @@ -3922,11 +3948,11 @@ | ||
| 3922 | 3948 | ReStateSet aStateSet[2], *pThis, *pNext; |
| 3923 | 3949 | ReStateNumber aSpace[100]; |
| 3924 | 3950 | ReStateNumber *pToFree; |
| 3925 | 3951 | unsigned int i = 0; |
| 3926 | 3952 | unsigned int iSwap = 0; |
| 3927 | - int c = RE_EOF+1; | |
| 3953 | + int c = RE_START; | |
| 3928 | 3954 | int cPrev = 0; |
| 3929 | 3955 | int rc = 0; |
| 3930 | 3956 | ReInput in; |
| 3931 | 3957 | |
| 3932 | 3958 | in.z = zIn; |
| @@ -3941,10 +3967,11 @@ | ||
| 3941 | 3967 | strncmp((const char*)zIn+in.i, (const char*)pRe->zInit, pRe->nInit)!=0) |
| 3942 | 3968 | ){ |
| 3943 | 3969 | in.i++; |
| 3944 | 3970 | } |
| 3945 | 3971 | if( in.i+pRe->nInit>in.mx ) return 0; |
| 3972 | + c = RE_START-1; | |
| 3946 | 3973 | } |
| 3947 | 3974 | |
| 3948 | 3975 | if( pRe->nState<=(sizeof(aSpace)/(sizeof(aSpace[0])*2)) ){ |
| 3949 | 3976 | pToFree = 0; |
| 3950 | 3977 | aStateSet[0].aState = aSpace; |
| @@ -3968,10 +3995,14 @@ | ||
| 3968 | 3995 | int x = pThis->aState[i]; |
| 3969 | 3996 | switch( pRe->aOp[x] ){ |
| 3970 | 3997 | case RE_OP_MATCH: { |
| 3971 | 3998 | if( pRe->aArg[x]==c ) re_add_state(pNext, x+1); |
| 3972 | 3999 | break; |
| 4000 | + } | |
| 4001 | + case RE_OP_ATSTART: { | |
| 4002 | + if( cPrev==RE_START ) re_add_state(pThis, x+1); | |
| 4003 | + break; | |
| 3973 | 4004 | } |
| 3974 | 4005 | case RE_OP_ANY: { |
| 3975 | 4006 | if( c!=0 ) re_add_state(pNext, x+1); |
| 3976 | 4007 | break; |
| 3977 | 4008 | } |
| @@ -4050,11 +4081,13 @@ | ||
| 4050 | 4081 | } |
| 4051 | 4082 | } |
| 4052 | 4083 | } |
| 4053 | 4084 | } |
| 4054 | 4085 | for(i=0; i<pNext->nState; i++){ |
| 4055 | - if( pRe->aOp[pNext->aState[i]]==RE_OP_ACCEPT ){ rc = 1; break; } | |
| 4086 | + int x = pNext->aState[i]; | |
| 4087 | + while( pRe->aOp[x]==RE_OP_GOTO ) x += pRe->aArg[x]; | |
| 4088 | + if( pRe->aOp[x]==RE_OP_ACCEPT ){ rc = 1; break; } | |
| 4056 | 4089 | } |
| 4057 | 4090 | re_match_end: |
| 4058 | 4091 | sqlite3_free(pToFree); |
| 4059 | 4092 | return rc; |
| 4060 | 4093 | } |
| @@ -4205,11 +4238,10 @@ | ||
| 4205 | 4238 | const char *zErr; |
| 4206 | 4239 | while( (c = p->xNextChar(&p->sIn))!=0 ){ |
| 4207 | 4240 | iStart = p->nState; |
| 4208 | 4241 | switch( c ){ |
| 4209 | 4242 | case '|': |
| 4210 | - case '$': | |
| 4211 | 4243 | case ')': { |
| 4212 | 4244 | p->sIn.i--; |
| 4213 | 4245 | return 0; |
| 4214 | 4246 | } |
| 4215 | 4247 | case '(': { |
| @@ -4241,10 +4273,18 @@ | ||
| 4241 | 4273 | } |
| 4242 | 4274 | case '?': { |
| 4243 | 4275 | if( iPrev<0 ) return "'?' without operand"; |
| 4244 | 4276 | re_insert(p, iPrev, RE_OP_FORK, p->nState - iPrev+1); |
| 4245 | 4277 | break; |
| 4278 | + } | |
| 4279 | + case '$': { | |
| 4280 | + re_append(p, RE_OP_MATCH, RE_EOF); | |
| 4281 | + break; | |
| 4282 | + } | |
| 4283 | + case '^': { | |
| 4284 | + re_append(p, RE_OP_ATSTART, 0); | |
| 4285 | + break; | |
| 4246 | 4286 | } |
| 4247 | 4287 | case '{': { |
| 4248 | 4288 | int m = 0, n = 0; |
| 4249 | 4289 | int sz, j; |
| 4250 | 4290 | if( iPrev<0 ) return "'{m,n}' without operand"; |
| @@ -4260,10 +4300,11 @@ | ||
| 4260 | 4300 | p->sIn.i++; |
| 4261 | 4301 | sz = p->nState - iPrev; |
| 4262 | 4302 | if( m==0 ){ |
| 4263 | 4303 | if( n==0 ) return "both m and n are zero in '{m,n}'"; |
| 4264 | 4304 | re_insert(p, iPrev, RE_OP_FORK, sz+1); |
| 4305 | + iPrev++; | |
| 4265 | 4306 | n--; |
| 4266 | 4307 | }else{ |
| 4267 | 4308 | for(j=1; j<m; j++) re_copy(p, iPrev, sz); |
| 4268 | 4309 | } |
| 4269 | 4310 | for(j=m; j<n; j++){ |
| @@ -4378,15 +4419,11 @@ | ||
| 4378 | 4419 | zErr = re_subcompile_re(pRe); |
| 4379 | 4420 | if( zErr ){ |
| 4380 | 4421 | re_free(pRe); |
| 4381 | 4422 | return zErr; |
| 4382 | 4423 | } |
| 4383 | - if( rePeek(pRe)=='$' && pRe->sIn.i+1>=pRe->sIn.mx ){ | |
| 4384 | - re_append(pRe, RE_OP_MATCH, RE_EOF); | |
| 4385 | - re_append(pRe, RE_OP_ACCEPT, 0); | |
| 4386 | - *ppRe = pRe; | |
| 4387 | - }else if( pRe->sIn.i>=pRe->sIn.mx ){ | |
| 4424 | + if( pRe->sIn.i>=pRe->sIn.mx ){ | |
| 4388 | 4425 | re_append(pRe, RE_OP_ACCEPT, 0); |
| 4389 | 4426 | *ppRe = pRe; |
| 4390 | 4427 | }else{ |
| 4391 | 4428 | re_free(pRe); |
| 4392 | 4429 | return "unrecognized character"; |
| @@ -4407,11 +4444,11 @@ | ||
| 4407 | 4444 | pRe->zInit[j++] = (unsigned char)x; |
| 4408 | 4445 | }else if( x<=0xfff ){ |
| 4409 | 4446 | pRe->zInit[j++] = (unsigned char)(0xc0 | (x>>6)); |
| 4410 | 4447 | pRe->zInit[j++] = 0x80 | (x&0x3f); |
| 4411 | 4448 | }else if( x<=0xffff ){ |
| 4412 | - pRe->zInit[j++] = (unsigned char)(0xd0 | (x>>12)); | |
| 4449 | + pRe->zInit[j++] = (unsigned char)(0xe0 | (x>>12)); | |
| 4413 | 4450 | pRe->zInit[j++] = 0x80 | ((x>>6)&0x3f); |
| 4414 | 4451 | pRe->zInit[j++] = 0x80 | (x&0x3f); |
| 4415 | 4452 | }else{ |
| 4416 | 4453 | break; |
| 4417 | 4454 | } |
| @@ -4465,10 +4502,71 @@ | ||
| 4465 | 4502 | } |
| 4466 | 4503 | if( setAux ){ |
| 4467 | 4504 | sqlite3_set_auxdata(context, 0, pRe, (void(*)(void*))re_free); |
| 4468 | 4505 | } |
| 4469 | 4506 | } |
| 4507 | + | |
| 4508 | +#if defined(SQLITE_DEBUG) | |
| 4509 | +/* | |
| 4510 | +** This function is used for testing and debugging only. It is only available | |
| 4511 | +** if the SQLITE_DEBUG compile-time option is used. | |
| 4512 | +** | |
| 4513 | +** Compile a regular expression and then convert the compiled expression into | |
| 4514 | +** text and return that text. | |
| 4515 | +*/ | |
| 4516 | +static void re_bytecode_func( | |
| 4517 | + sqlite3_context *context, | |
| 4518 | + int argc, | |
| 4519 | + sqlite3_value **argv | |
| 4520 | +){ | |
| 4521 | + const char *zPattern; | |
| 4522 | + const char *zErr; | |
| 4523 | + ReCompiled *pRe; | |
| 4524 | + sqlite3_str *pStr; | |
| 4525 | + int i; | |
| 4526 | + int n; | |
| 4527 | + char *z; | |
| 4528 | + | |
| 4529 | + zPattern = (const char*)sqlite3_value_text(argv[0]); | |
| 4530 | + if( zPattern==0 ) return; | |
| 4531 | + zErr = re_compile(&pRe, zPattern, sqlite3_user_data(context)!=0); | |
| 4532 | + if( zErr ){ | |
| 4533 | + re_free(pRe); | |
| 4534 | + sqlite3_result_error(context, zErr, -1); | |
| 4535 | + return; | |
| 4536 | + } | |
| 4537 | + if( pRe==0 ){ | |
| 4538 | + sqlite3_result_error_nomem(context); | |
| 4539 | + return; | |
| 4540 | + } | |
| 4541 | + pStr = sqlite3_str_new(0); | |
| 4542 | + if( pStr==0 ) goto re_bytecode_func_err; | |
| 4543 | + if( pRe->nInit>0 ){ | |
| 4544 | + sqlite3_str_appendf(pStr, "INIT "); | |
| 4545 | + for(i=0; i<pRe->nInit; i++){ | |
| 4546 | + sqlite3_str_appendf(pStr, "%02x", pRe->zInit[i]); | |
| 4547 | + } | |
| 4548 | + sqlite3_str_appendf(pStr, "\n"); | |
| 4549 | + } | |
| 4550 | + for(i=0; (unsigned)i<pRe->nState; i++){ | |
| 4551 | + sqlite3_str_appendf(pStr, "%-8s %4d\n", | |
| 4552 | + ReOpName[(unsigned char)pRe->aOp[i]], pRe->aArg[i]); | |
| 4553 | + } | |
| 4554 | + n = sqlite3_str_length(pStr); | |
| 4555 | + z = sqlite3_str_finish(pStr); | |
| 4556 | + if( n==0 ){ | |
| 4557 | + sqlite3_free(z); | |
| 4558 | + }else{ | |
| 4559 | + sqlite3_result_text(context, z, n-1, sqlite3_free); | |
| 4560 | + } | |
| 4561 | + | |
| 4562 | +re_bytecode_func_err: | |
| 4563 | + re_free(pRe); | |
| 4564 | +} | |
| 4565 | + | |
| 4566 | +#endif /* SQLITE_DEBUG */ | |
| 4567 | + | |
| 4470 | 4568 | |
| 4471 | 4569 | /* |
| 4472 | 4570 | ** Invoke this routine to register the regexp() function with the |
| 4473 | 4571 | ** SQLite database connection. |
| 4474 | 4572 | */ |
| @@ -4490,16 +4588,23 @@ | ||
| 4490 | 4588 | /* The regexpi(PATTERN,STRING) function is a case-insensitive version |
| 4491 | 4589 | ** of regexp(PATTERN,STRING). */ |
| 4492 | 4590 | rc = sqlite3_create_function(db, "regexpi", 2, |
| 4493 | 4591 | SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, |
| 4494 | 4592 | (void*)db, re_sql_func, 0, 0); |
| 4593 | +#if defined(SQLITE_DEBUG) | |
| 4594 | + if( rc==SQLITE_OK ){ | |
| 4595 | + rc = sqlite3_create_function(db, "regexp_bytecode", 1, | |
| 4596 | + SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, | |
| 4597 | + 0, re_bytecode_func, 0, 0); | |
| 4598 | + } | |
| 4599 | +#endif /* SQLITE_DEBUG */ | |
| 4495 | 4600 | } |
| 4496 | 4601 | return rc; |
| 4497 | 4602 | } |
| 4498 | 4603 | |
| 4499 | 4604 | /************************* End ../ext/misc/regexp.c ********************/ |
| 4500 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 4605 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 4501 | 4606 | /************************* Begin ../ext/misc/fileio.c ******************/ |
| 4502 | 4607 | /* |
| 4503 | 4608 | ** 2014-06-13 |
| 4504 | 4609 | ** |
| 4505 | 4610 | ** The author disclaims copyright to this source code. In place of |
| @@ -10047,10 +10152,14 @@ | ||
| 10047 | 10152 | ** Return true if zId must be quoted in order to use it as an SQL |
| 10048 | 10153 | ** identifier, or false otherwise. |
| 10049 | 10154 | */ |
| 10050 | 10155 | static int idxIdentifierRequiresQuotes(const char *zId){ |
| 10051 | 10156 | int i; |
| 10157 | + int nId = STRLEN(zId); | |
| 10158 | + | |
| 10159 | + if( sqlite3_keyword_check(zId, nId) ) return 1; | |
| 10160 | + | |
| 10052 | 10161 | for(i=0; zId[i]; i++){ |
| 10053 | 10162 | if( !(zId[i]=='_') |
| 10054 | 10163 | && !(zId[i]>='0' && zId[i]<='9') |
| 10055 | 10164 | && !(zId[i]>='a' && zId[i]<='z') |
| 10056 | 10165 | && !(zId[i]>='A' && zId[i]<='Z') |
| @@ -12248,19 +12357,19 @@ | ||
| 12248 | 12357 | int nIndent; /* Size of array aiIndent[] */ |
| 12249 | 12358 | int iIndent; /* Index of current op in aiIndent[] */ |
| 12250 | 12359 | char *zNonce; /* Nonce for temporary safe-mode excapes */ |
| 12251 | 12360 | EQPGraph sGraph; /* Information for the graphical EXPLAIN QUERY PLAN */ |
| 12252 | 12361 | ExpertInfo expert; /* Valid if previous command was ".expert OPT..." */ |
| 12253 | -#ifdef SQLITE_SHELL_WASM_MODE | |
| 12362 | +#ifdef SQLITE_SHELL_FIDDLE | |
| 12254 | 12363 | struct { |
| 12255 | 12364 | const char * zInput; /* Input string from wasm/JS proxy */ |
| 12256 | 12365 | const char * zPos; /* Cursor pos into zInput */ |
| 12257 | 12366 | } wasm; |
| 12258 | 12367 | #endif |
| 12259 | 12368 | }; |
| 12260 | 12369 | |
| 12261 | -#ifdef SQLITE_SHELL_WASM_MODE | |
| 12370 | +#ifdef SQLITE_SHELL_FIDDLE | |
| 12262 | 12371 | static ShellState shellState; |
| 12263 | 12372 | #endif |
| 12264 | 12373 | |
| 12265 | 12374 | |
| 12266 | 12375 | /* Allowed values for ShellState.autoEQP |
| @@ -12588,14 +12697,27 @@ | ||
| 12588 | 12697 | /* |
| 12589 | 12698 | ** Output the given string as a hex-encoded blob (eg. X'1234' ) |
| 12590 | 12699 | */ |
| 12591 | 12700 | static void output_hex_blob(FILE *out, const void *pBlob, int nBlob){ |
| 12592 | 12701 | int i; |
| 12593 | - char *zBlob = (char *)pBlob; | |
| 12594 | - raw_printf(out,"X'"); | |
| 12595 | - for(i=0; i<nBlob; i++){ raw_printf(out,"%02x",zBlob[i]&0xff); } | |
| 12596 | - raw_printf(out,"'"); | |
| 12702 | + unsigned char *aBlob = (unsigned char*)pBlob; | |
| 12703 | + | |
| 12704 | + char *zStr = sqlite3_malloc(nBlob*2 + 1); | |
| 12705 | + shell_check_oom(zStr); | |
| 12706 | + | |
| 12707 | + for(i=0; i<nBlob; i++){ | |
| 12708 | + static const char aHex[] = { | |
| 12709 | + '0', '1', '2', '3', '4', '5', '6', '7', | |
| 12710 | + '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' | |
| 12711 | + }; | |
| 12712 | + zStr[i*2] = aHex[ (aBlob[i] >> 4) ]; | |
| 12713 | + zStr[i*2+1] = aHex[ (aBlob[i] & 0x0F) ]; | |
| 12714 | + } | |
| 12715 | + zStr[i*2] = '\0'; | |
| 12716 | + | |
| 12717 | + raw_printf(out,"X'%s'", zStr); | |
| 12718 | + sqlite3_free(zStr); | |
| 12597 | 12719 | } |
| 12598 | 12720 | |
| 12599 | 12721 | /* |
| 12600 | 12722 | ** Find a string that is not found anywhere in z[]. Return a pointer |
| 12601 | 12723 | ** to that string. |
| @@ -12924,11 +13046,11 @@ | ||
| 12924 | 13046 | UNUSED_PARAMETER(zA2); |
| 12925 | 13047 | UNUSED_PARAMETER(zA3); |
| 12926 | 13048 | UNUSED_PARAMETER(zA4); |
| 12927 | 13049 | switch( op ){ |
| 12928 | 13050 | case SQLITE_ATTACH: { |
| 12929 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 13051 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 12930 | 13052 | /* In WASM builds the filesystem is a virtual sandbox, so |
| 12931 | 13053 | ** there's no harm in using ATTACH. */ |
| 12932 | 13054 | failIfSafeMode(p, "cannot run ATTACH in safe mode"); |
| 12933 | 13055 | #endif |
| 12934 | 13056 | break; |
| @@ -12997,19 +13119,41 @@ | ||
| 12997 | 13119 | /* |
| 12998 | 13120 | ** Print a schema statement. Part of MODE_Semi and MODE_Pretty output. |
| 12999 | 13121 | ** |
| 13000 | 13122 | ** This routine converts some CREATE TABLE statements for shadow tables |
| 13001 | 13123 | ** in FTS3/4/5 into CREATE TABLE IF NOT EXISTS statements. |
| 13124 | +** | |
| 13125 | +** If the schema statement in z[] contains a start-of-comment and if | |
| 13126 | +** sqlite3_complete() returns false, try to terminate the comment before | |
| 13127 | +** printing the result. https://sqlite.org/forum/forumpost/d7be961c5c | |
| 13002 | 13128 | */ |
| 13003 | 13129 | static void printSchemaLine(FILE *out, const char *z, const char *zTail){ |
| 13130 | + char *zToFree = 0; | |
| 13004 | 13131 | if( z==0 ) return; |
| 13005 | 13132 | if( zTail==0 ) return; |
| 13133 | + if( zTail[0]==';' && (strstr(z, "/*")!=0 || strstr(z,"--")!=0) ){ | |
| 13134 | + const char *zOrig = z; | |
| 13135 | + static const char *azTerm[] = { "", "*/", "\n" }; | |
| 13136 | + int i; | |
| 13137 | + for(i=0; i<ArraySize(azTerm); i++){ | |
| 13138 | + char *zNew = sqlite3_mprintf("%s%s;", zOrig, azTerm[i]); | |
| 13139 | + if( sqlite3_complete(zNew) ){ | |
| 13140 | + size_t n = strlen(zNew); | |
| 13141 | + zNew[n-1] = 0; | |
| 13142 | + zToFree = zNew; | |
| 13143 | + z = zNew; | |
| 13144 | + break; | |
| 13145 | + } | |
| 13146 | + sqlite3_free(zNew); | |
| 13147 | + } | |
| 13148 | + } | |
| 13006 | 13149 | if( sqlite3_strglob("CREATE TABLE ['\"]*", z)==0 ){ |
| 13007 | 13150 | utf8_printf(out, "CREATE TABLE IF NOT EXISTS %s%s", z+13, zTail); |
| 13008 | 13151 | }else{ |
| 13009 | 13152 | utf8_printf(out, "%s%s", z, zTail); |
| 13010 | 13153 | } |
| 13154 | + sqlite3_free(zToFree); | |
| 13011 | 13155 | } |
| 13012 | 13156 | static void printSchemaLineN(FILE *out, char *z, int n, const char *zTail){ |
| 13013 | 13157 | char c = z[n]; |
| 13014 | 13158 | z[n] = 0; |
| 13015 | 13159 | printSchemaLine(out, z, zTail); |
| @@ -15338,11 +15482,11 @@ | ||
| 15338 | 15482 | ** There must be two or more spaces between the end of the command and the |
| 15339 | 15483 | ** start of the description of what that command does. |
| 15340 | 15484 | */ |
| 15341 | 15485 | static const char *(azHelp[]) = { |
| 15342 | 15486 | #if defined(SQLITE_HAVE_ZLIB) && !defined(SQLITE_OMIT_VIRTUALTABLE) \ |
| 15343 | - && !defined(SQLITE_SHELL_WASM_MODE) | |
| 15487 | + && !defined(SQLITE_SHELL_FIDDLE) | |
| 15344 | 15488 | ".archive ... Manage SQL archives", |
| 15345 | 15489 | " Each command must have exactly one of the following options:", |
| 15346 | 15490 | " -c, --create Create a new archive", |
| 15347 | 15491 | " -u, --update Add or update files with changed mtime", |
| 15348 | 15492 | " -i, --insert Like -u but always add even if unchanged", |
| @@ -15364,23 +15508,23 @@ | ||
| 15364 | 15508 | " http://sqlite.org/cli.html#sqlite_archive_support", |
| 15365 | 15509 | #endif |
| 15366 | 15510 | #ifndef SQLITE_OMIT_AUTHORIZATION |
| 15367 | 15511 | ".auth ON|OFF Show authorizer callbacks", |
| 15368 | 15512 | #endif |
| 15369 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 15513 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 15370 | 15514 | ".backup ?DB? FILE Backup DB (default \"main\") to FILE", |
| 15371 | 15515 | " Options:", |
| 15372 | 15516 | " --append Use the appendvfs", |
| 15373 | 15517 | " --async Write to FILE without journal and fsync()", |
| 15374 | 15518 | #endif |
| 15375 | 15519 | ".bail on|off Stop after hitting an error. Default OFF", |
| 15376 | 15520 | ".binary on|off Turn binary output on or off. Default OFF", |
| 15377 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 15521 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 15378 | 15522 | ".cd DIRECTORY Change the working directory to DIRECTORY", |
| 15379 | 15523 | #endif |
| 15380 | 15524 | ".changes on|off Show number of rows changed by SQL", |
| 15381 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 15525 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 15382 | 15526 | ".check GLOB Fail if output since .testcase does not match", |
| 15383 | 15527 | ".clone NEWDB Clone data into NEWDB from the existing database", |
| 15384 | 15528 | #endif |
| 15385 | 15529 | ".connection [close] [#] Open or close an auxiliary database connection", |
| 15386 | 15530 | ".databases List names and files of attached databases", |
| @@ -15402,15 +15546,15 @@ | ||
| 15402 | 15546 | #ifdef SQLITE_DEBUG |
| 15403 | 15547 | " test Show raw EXPLAIN QUERY PLAN output", |
| 15404 | 15548 | " trace Like \"full\" but enable \"PRAGMA vdbe_trace\"", |
| 15405 | 15549 | #endif |
| 15406 | 15550 | " trigger Like \"full\" but also show trigger bytecode", |
| 15407 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 15551 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 15408 | 15552 | ".excel Display the output of next command in spreadsheet", |
| 15409 | 15553 | " --bom Put a UTF8 byte-order mark on intermediate file", |
| 15410 | 15554 | #endif |
| 15411 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 15555 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 15412 | 15556 | ".exit ?CODE? Exit this program with return-code CODE", |
| 15413 | 15557 | #endif |
| 15414 | 15558 | ".expert EXPERIMENTAL. Suggest indexes for queries", |
| 15415 | 15559 | ".explain ?on|off|auto? Change the EXPLAIN formatting mode. Default: auto", |
| 15416 | 15560 | ".filectrl CMD ... Run various sqlite3_file_control() operations", |
| @@ -15417,11 +15561,11 @@ | ||
| 15417 | 15561 | " --schema SCHEMA Use SCHEMA instead of \"main\"", |
| 15418 | 15562 | " --help Show CMD details", |
| 15419 | 15563 | ".fullschema ?--indent? Show schema and the content of sqlite_stat tables", |
| 15420 | 15564 | ".headers on|off Turn display of headers on or off", |
| 15421 | 15565 | ".help ?-all? ?PATTERN? Show help text for PATTERN", |
| 15422 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 15566 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 15423 | 15567 | ".import FILE TABLE Import data from FILE into TABLE", |
| 15424 | 15568 | " Options:", |
| 15425 | 15569 | " --ascii Use \\037 and \\036 as column and row separators", |
| 15426 | 15570 | " --csv Use , and \\n as column and row separators", |
| 15427 | 15571 | " --skip N Skip the first N rows of input", |
| @@ -15446,14 +15590,14 @@ | ||
| 15446 | 15590 | #endif |
| 15447 | 15591 | ".limit ?LIMIT? ?VAL? Display or change the value of an SQLITE_LIMIT", |
| 15448 | 15592 | ".lint OPTIONS Report potential schema issues.", |
| 15449 | 15593 | " Options:", |
| 15450 | 15594 | " fkey-indexes Find missing foreign key indexes", |
| 15451 | -#if !defined(SQLITE_OMIT_LOAD_EXTENSION) && !defined(SQLITE_SHELL_WASM_MODE) | |
| 15595 | +#if !defined(SQLITE_OMIT_LOAD_EXTENSION) && !defined(SQLITE_SHELL_FIDDLE) | |
| 15452 | 15596 | ".load FILE ?ENTRY? Load an extension library", |
| 15453 | 15597 | #endif |
| 15454 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 15598 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 15455 | 15599 | ".log FILE|off Turn logging on or off. FILE can be stderr/stdout", |
| 15456 | 15600 | #endif |
| 15457 | 15601 | ".mode MODE ?OPTIONS? Set output mode", |
| 15458 | 15602 | " MODE is one of:", |
| 15459 | 15603 | " ascii Columns/rows delimited by 0x1F and 0x1E", |
| @@ -15476,15 +15620,15 @@ | ||
| 15476 | 15620 | " --wordwrap B Wrap or not at word boundaries per B (on/off)", |
| 15477 | 15621 | " --ww Shorthand for \"--wordwrap 1\"", |
| 15478 | 15622 | " --quote Quote output text as SQL literals", |
| 15479 | 15623 | " --noquote Do not quote output text", |
| 15480 | 15624 | " TABLE The name of SQL table used for \"insert\" mode", |
| 15481 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 15625 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 15482 | 15626 | ".nonce STRING Suspend safe mode for one command if nonce matches", |
| 15483 | 15627 | #endif |
| 15484 | 15628 | ".nullvalue STRING Use STRING in place of NULL values", |
| 15485 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 15629 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 15486 | 15630 | ".once ?OPTIONS? ?FILE? Output for the next SQL command only to FILE", |
| 15487 | 15631 | " If FILE begins with '|' then open as a pipe", |
| 15488 | 15632 | " --bom Put a UTF8 byte-order mark at the beginning", |
| 15489 | 15633 | " -e Send output to the system text editor", |
| 15490 | 15634 | " -x Send output as CSV to a spreadsheet (same as \".excel\")", |
| @@ -15502,11 +15646,11 @@ | ||
| 15502 | 15646 | #endif |
| 15503 | 15647 | " --new Initialize FILE to an empty database", |
| 15504 | 15648 | " --nofollow Do not follow symbolic links", |
| 15505 | 15649 | " --readonly Open FILE readonly", |
| 15506 | 15650 | " --zip FILE is a ZIP archive", |
| 15507 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 15651 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 15508 | 15652 | ".output ?FILE? Send output to FILE or stdout if FILE is omitted", |
| 15509 | 15653 | " If FILE begins with '|' then open it as a pipe.", |
| 15510 | 15654 | " Options:", |
| 15511 | 15655 | " --bom Prefix output with a UTF8 byte-order mark", |
| 15512 | 15656 | " -e Send output to the system text editor", |
| @@ -15526,11 +15670,11 @@ | ||
| 15526 | 15670 | " --once Do no more than one progress interrupt", |
| 15527 | 15671 | " --quiet|-q No output except at interrupts", |
| 15528 | 15672 | " --reset Reset the count for each input and interrupt", |
| 15529 | 15673 | #endif |
| 15530 | 15674 | ".prompt MAIN CONTINUE Replace the standard prompts", |
| 15531 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 15675 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 15532 | 15676 | ".quit Exit this program", |
| 15533 | 15677 | ".read FILE Read input from FILE or command output", |
| 15534 | 15678 | " If FILE begins with \"|\", it is a command that generates the input.", |
| 15535 | 15679 | #endif |
| 15536 | 15680 | #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB) |
| @@ -15539,11 +15683,11 @@ | ||
| 15539 | 15683 | " --recovery-db NAME Store recovery metadata in database file NAME", |
| 15540 | 15684 | " --lost-and-found TABLE Alternative name for the lost-and-found table", |
| 15541 | 15685 | " --no-rowids Do not attempt to recover rowid values", |
| 15542 | 15686 | " that are not also INTEGER PRIMARY KEYs", |
| 15543 | 15687 | #endif |
| 15544 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 15688 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 15545 | 15689 | ".restore ?DB? FILE Restore content of DB (default \"main\") from FILE", |
| 15546 | 15690 | ".save ?OPTIONS? FILE Write database to FILE (an alias for .backup ...)", |
| 15547 | 15691 | #endif |
| 15548 | 15692 | ".scanstats on|off Turn sqlite3_stmt_scanstatus() metrics on or off", |
| 15549 | 15693 | ".schema ?PATTERN? Show the CREATE statements matching PATTERN", |
| @@ -15576,24 +15720,24 @@ | ||
| 15576 | 15720 | " --sha3-224 Use the sha3-224 algorithm", |
| 15577 | 15721 | " --sha3-256 Use the sha3-256 algorithm (default)", |
| 15578 | 15722 | " --sha3-384 Use the sha3-384 algorithm", |
| 15579 | 15723 | " --sha3-512 Use the sha3-512 algorithm", |
| 15580 | 15724 | " Any other argument is a LIKE pattern for tables to hash", |
| 15581 | -#if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_WASM_MODE) | |
| 15725 | +#if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_FIDDLE) | |
| 15582 | 15726 | ".shell CMD ARGS... Run CMD ARGS... in a system shell", |
| 15583 | 15727 | #endif |
| 15584 | 15728 | ".show Show the current values for various settings", |
| 15585 | 15729 | ".stats ?ARG? Show stats or turn stats on or off", |
| 15586 | 15730 | " off Turn off automatic stat display", |
| 15587 | 15731 | " on Turn on automatic stat display", |
| 15588 | 15732 | " stmt Show statement stats", |
| 15589 | 15733 | " vmstep Show the virtual machine step count only", |
| 15590 | -#if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_WASM_MODE) | |
| 15734 | +#if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_FIDDLE) | |
| 15591 | 15735 | ".system CMD ARGS... Run CMD ARGS... in a system shell", |
| 15592 | 15736 | #endif |
| 15593 | 15737 | ".tables ?TABLE? List names of tables matching LIKE pattern TABLE", |
| 15594 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 15738 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 15595 | 15739 | ".testcase NAME Begin redirecting output to 'testcase-out.txt'", |
| 15596 | 15740 | #endif |
| 15597 | 15741 | ".testctrl CMD ... Run various sqlite3_test_control() operations", |
| 15598 | 15742 | " Run \".testctrl\" with no arguments for details", |
| 15599 | 15743 | ".timeout MS Try opening locked tables for MS milliseconds", |
| @@ -16142,11 +16286,11 @@ | ||
| 16142 | 16286 | sqlite3_uint_init(p->db, 0, 0); |
| 16143 | 16287 | sqlite3_decimal_init(p->db, 0, 0); |
| 16144 | 16288 | sqlite3_regexp_init(p->db, 0, 0); |
| 16145 | 16289 | sqlite3_ieee_init(p->db, 0, 0); |
| 16146 | 16290 | sqlite3_series_init(p->db, 0, 0); |
| 16147 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 16291 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 16148 | 16292 | sqlite3_fileio_init(p->db, 0, 0); |
| 16149 | 16293 | sqlite3_completion_init(p->db, 0, 0); |
| 16150 | 16294 | #endif |
| 16151 | 16295 | #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB) |
| 16152 | 16296 | sqlite3_dbdata_init(p->db, 0, 0); |
| @@ -19272,19 +19416,19 @@ | ||
| 19272 | 19416 | } |
| 19273 | 19417 | }else |
| 19274 | 19418 | #endif |
| 19275 | 19419 | |
| 19276 | 19420 | #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_HAVE_ZLIB) \ |
| 19277 | - && !defined(SQLITE_SHELL_WASM_MODE) | |
| 19421 | + && !defined(SQLITE_SHELL_FIDDLE) | |
| 19278 | 19422 | if( c=='a' && strncmp(azArg[0], "archive", n)==0 ){ |
| 19279 | 19423 | open_db(p, 0); |
| 19280 | 19424 | failIfSafeMode(p, "cannot run .archive in safe mode"); |
| 19281 | 19425 | rc = arDotCommand(p, 0, azArg, nArg); |
| 19282 | 19426 | }else |
| 19283 | 19427 | #endif |
| 19284 | 19428 | |
| 19285 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 19429 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 19286 | 19430 | if( (c=='b' && n>=3 && strncmp(azArg[0], "backup", n)==0) |
| 19287 | 19431 | || (c=='s' && n>=3 && strncmp(azArg[0], "save", n)==0) |
| 19288 | 19432 | ){ |
| 19289 | 19433 | const char *zDestFile = 0; |
| 19290 | 19434 | const char *zDb = 0; |
| @@ -19349,11 +19493,11 @@ | ||
| 19349 | 19493 | utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(pDest)); |
| 19350 | 19494 | rc = 1; |
| 19351 | 19495 | } |
| 19352 | 19496 | close_db(pDest); |
| 19353 | 19497 | }else |
| 19354 | -#endif /* !defined(SQLITE_SHELL_WASM_MODE) */ | |
| 19498 | +#endif /* !defined(SQLITE_SHELL_FIDDLE) */ | |
| 19355 | 19499 | |
| 19356 | 19500 | if( c=='b' && n>=3 && strncmp(azArg[0], "bail", n)==0 ){ |
| 19357 | 19501 | if( nArg==2 ){ |
| 19358 | 19502 | bail_on_error = booleanValue(azArg[1]); |
| 19359 | 19503 | }else{ |
| @@ -19380,11 +19524,11 @@ | ||
| 19380 | 19524 | */ |
| 19381 | 19525 | if( c=='b' && n>=3 && strncmp(azArg[0], "breakpoint", n)==0 ){ |
| 19382 | 19526 | test_breakpoint(); |
| 19383 | 19527 | }else |
| 19384 | 19528 | |
| 19385 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 19529 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 19386 | 19530 | if( c=='c' && strcmp(azArg[0],"cd")==0 ){ |
| 19387 | 19531 | failIfSafeMode(p, "cannot run .cd in safe mode"); |
| 19388 | 19532 | if( nArg==2 ){ |
| 19389 | 19533 | #if defined(_WIN32) || defined(WIN32) |
| 19390 | 19534 | wchar_t *z = sqlite3_win32_utf8_to_unicode(azArg[1]); |
| @@ -19400,11 +19544,11 @@ | ||
| 19400 | 19544 | }else{ |
| 19401 | 19545 | raw_printf(stderr, "Usage: .cd DIRECTORY\n"); |
| 19402 | 19546 | rc = 1; |
| 19403 | 19547 | } |
| 19404 | 19548 | }else |
| 19405 | -#endif /* !defined(SQLITE_SHELL_WASM_MODE) */ | |
| 19549 | +#endif /* !defined(SQLITE_SHELL_FIDDLE) */ | |
| 19406 | 19550 | |
| 19407 | 19551 | if( c=='c' && n>=3 && strncmp(azArg[0], "changes", n)==0 ){ |
| 19408 | 19552 | if( nArg==2 ){ |
| 19409 | 19553 | setOrClearFlag(p, SHFLG_CountChanges, azArg[1]); |
| 19410 | 19554 | }else{ |
| @@ -19411,11 +19555,11 @@ | ||
| 19411 | 19555 | raw_printf(stderr, "Usage: .changes on|off\n"); |
| 19412 | 19556 | rc = 1; |
| 19413 | 19557 | } |
| 19414 | 19558 | }else |
| 19415 | 19559 | |
| 19416 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 19560 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 19417 | 19561 | /* Cancel output redirection, if it is currently set (by .testcase) |
| 19418 | 19562 | ** Then read the content of the testcase-out.txt file and compare against |
| 19419 | 19563 | ** azArg[1]. If there are differences, report an error and exit. |
| 19420 | 19564 | */ |
| 19421 | 19565 | if( c=='c' && n>=3 && strncmp(azArg[0], "check", n)==0 ){ |
| @@ -19436,23 +19580,23 @@ | ||
| 19436 | 19580 | utf8_printf(stdout, "testcase-%s ok\n", p->zTestcase); |
| 19437 | 19581 | p->nCheck++; |
| 19438 | 19582 | } |
| 19439 | 19583 | sqlite3_free(zRes); |
| 19440 | 19584 | }else |
| 19441 | -#endif /* !defined(SQLITE_SHELL_WASM_MODE) */ | |
| 19585 | +#endif /* !defined(SQLITE_SHELL_FIDDLE) */ | |
| 19442 | 19586 | |
| 19443 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 19587 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 19444 | 19588 | if( c=='c' && strncmp(azArg[0], "clone", n)==0 ){ |
| 19445 | 19589 | failIfSafeMode(p, "cannot run .clone in safe mode"); |
| 19446 | 19590 | if( nArg==2 ){ |
| 19447 | 19591 | tryToClone(p, azArg[1]); |
| 19448 | 19592 | }else{ |
| 19449 | 19593 | raw_printf(stderr, "Usage: .clone FILENAME\n"); |
| 19450 | 19594 | rc = 1; |
| 19451 | 19595 | } |
| 19452 | 19596 | }else |
| 19453 | -#endif /* !defined(SQLITE_SHELL_WASM_MODE) */ | |
| 19597 | +#endif /* !defined(SQLITE_SHELL_FIDDLE) */ | |
| 19454 | 19598 | |
| 19455 | 19599 | if( c=='c' && strncmp(azArg[0], "connection", n)==0 ){ |
| 19456 | 19600 | if( nArg==1 ){ |
| 19457 | 19601 | /* List available connections */ |
| 19458 | 19602 | int i; |
| @@ -19737,11 +19881,11 @@ | ||
| 19737 | 19881 | raw_printf(stderr, "Usage: .eqp off|on|trace|trigger|full\n"); |
| 19738 | 19882 | rc = 1; |
| 19739 | 19883 | } |
| 19740 | 19884 | }else |
| 19741 | 19885 | |
| 19742 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 19886 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 19743 | 19887 | if( c=='e' && strncmp(azArg[0], "exit", n)==0 ){ |
| 19744 | 19888 | if( nArg>1 && (rc = (int)integerValue(azArg[1]))!=0 ) exit(rc); |
| 19745 | 19889 | rc = 2; |
| 19746 | 19890 | }else |
| 19747 | 19891 | #endif |
| @@ -19997,11 +20141,11 @@ | ||
| 19997 | 20141 | }else{ |
| 19998 | 20142 | showHelp(p->out, 0); |
| 19999 | 20143 | } |
| 20000 | 20144 | }else |
| 20001 | 20145 | |
| 20002 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 20146 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 20003 | 20147 | if( c=='i' && strncmp(azArg[0], "import", n)==0 ){ |
| 20004 | 20148 | char *zTable = 0; /* Insert data into this table */ |
| 20005 | 20149 | char *zSchema = 0; /* within this schema (may default to "main") */ |
| 20006 | 20150 | char *zFile = 0; /* Name of file to extra content from */ |
| 20007 | 20151 | sqlite3_stmt *pStmt = NULL; /* A statement */ |
| @@ -20288,11 +20432,11 @@ | ||
| 20288 | 20432 | utf8_printf(p->out, |
| 20289 | 20433 | "Added %d rows with %d errors using %d lines of input\n", |
| 20290 | 20434 | sCtx.nRow, sCtx.nErr, sCtx.nLine-1); |
| 20291 | 20435 | } |
| 20292 | 20436 | }else |
| 20293 | -#endif /* !defined(SQLITE_SHELL_WASM_MODE) */ | |
| 20437 | +#endif /* !defined(SQLITE_SHELL_FIDDLE) */ | |
| 20294 | 20438 | |
| 20295 | 20439 | #ifndef SQLITE_UNTESTABLE |
| 20296 | 20440 | if( c=='i' && strncmp(azArg[0], "imposter", n)==0 ){ |
| 20297 | 20441 | char *zSql; |
| 20298 | 20442 | char *zCollist = 0; |
| @@ -20478,11 +20622,11 @@ | ||
| 20478 | 20622 | if( c=='l' && n>2 && strncmp(azArg[0], "lint", n)==0 ){ |
| 20479 | 20623 | open_db(p, 0); |
| 20480 | 20624 | lintDotCommand(p, azArg, nArg); |
| 20481 | 20625 | }else |
| 20482 | 20626 | |
| 20483 | -#if !defined(SQLITE_OMIT_LOAD_EXTENSION) && !defined(SQLITE_SHELL_WASM_MODE) | |
| 20627 | +#if !defined(SQLITE_OMIT_LOAD_EXTENSION) && !defined(SQLITE_SHELL_FIDDLE) | |
| 20484 | 20628 | if( c=='l' && strncmp(azArg[0], "load", n)==0 ){ |
| 20485 | 20629 | const char *zFile, *zProc; |
| 20486 | 20630 | char *zErrMsg = 0; |
| 20487 | 20631 | failIfSafeMode(p, "cannot run .load in safe mode"); |
| 20488 | 20632 | if( nArg<2 ){ |
| @@ -20500,11 +20644,11 @@ | ||
| 20500 | 20644 | rc = 1; |
| 20501 | 20645 | } |
| 20502 | 20646 | }else |
| 20503 | 20647 | #endif |
| 20504 | 20648 | |
| 20505 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 20649 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 20506 | 20650 | if( c=='l' && strncmp(azArg[0], "log", n)==0 ){ |
| 20507 | 20651 | failIfSafeMode(p, "cannot run .log in safe mode"); |
| 20508 | 20652 | if( nArg!=2 ){ |
| 20509 | 20653 | raw_printf(stderr, "Usage: .log FILENAME\n"); |
| 20510 | 20654 | rc = 1; |
| @@ -20637,11 +20781,11 @@ | ||
| 20637 | 20781 | rc = 1; |
| 20638 | 20782 | } |
| 20639 | 20783 | p->cMode = p->mode; |
| 20640 | 20784 | }else |
| 20641 | 20785 | |
| 20642 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 20786 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 20643 | 20787 | if( c=='n' && strcmp(azArg[0], "nonce")==0 ){ |
| 20644 | 20788 | if( nArg!=2 ){ |
| 20645 | 20789 | raw_printf(stderr, "Usage: .nonce NONCE\n"); |
| 20646 | 20790 | rc = 1; |
| 20647 | 20791 | }else if( p->zNonce==0 || strcmp(azArg[1],p->zNonce)!=0 ){ |
| @@ -20652,11 +20796,11 @@ | ||
| 20652 | 20796 | p->bSafeMode = 0; |
| 20653 | 20797 | return 0; /* Return immediately to bypass the safe mode reset |
| 20654 | 20798 | ** at the end of this procedure */ |
| 20655 | 20799 | } |
| 20656 | 20800 | }else |
| 20657 | -#endif /* !defined(SQLITE_SHELL_WASM_MODE) */ | |
| 20801 | +#endif /* !defined(SQLITE_SHELL_FIDDLE) */ | |
| 20658 | 20802 | |
| 20659 | 20803 | if( c=='n' && strncmp(azArg[0], "nullvalue", n)==0 ){ |
| 20660 | 20804 | if( nArg==2 ){ |
| 20661 | 20805 | sqlite3_snprintf(sizeof(p->nullValue), p->nullValue, |
| 20662 | 20806 | "%.*s", (int)ArraySize(p->nullValue)-1, azArg[1]); |
| @@ -20674,11 +20818,11 @@ | ||
| 20674 | 20818 | int openMode = SHELL_OPEN_UNSPEC; |
| 20675 | 20819 | |
| 20676 | 20820 | /* Check for command-line arguments */ |
| 20677 | 20821 | for(iName=1; iName<nArg; iName++){ |
| 20678 | 20822 | const char *z = azArg[iName]; |
| 20679 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 20823 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 20680 | 20824 | if( optionMatch(z,"new") ){ |
| 20681 | 20825 | newFlag = 1; |
| 20682 | 20826 | #ifdef SQLITE_HAVE_ZLIB |
| 20683 | 20827 | }else if( optionMatch(z, "zip") ){ |
| 20684 | 20828 | openMode = SHELL_OPEN_ZIPFILE; |
| @@ -20696,11 +20840,11 @@ | ||
| 20696 | 20840 | openMode = SHELL_OPEN_HEXDB; |
| 20697 | 20841 | }else if( optionMatch(z, "maxsize") && iName+1<nArg ){ |
| 20698 | 20842 | p->szMax = integerValue(azArg[++iName]); |
| 20699 | 20843 | #endif /* SQLITE_OMIT_DESERIALIZE */ |
| 20700 | 20844 | }else |
| 20701 | -#endif /* !SQLITE_SHELL_WASM_MODE */ | |
| 20845 | +#endif /* !SQLITE_SHELL_FIDDLE */ | |
| 20702 | 20846 | if( z[0]=='-' ){ |
| 20703 | 20847 | utf8_printf(stderr, "unknown option: %s\n", z); |
| 20704 | 20848 | rc = 1; |
| 20705 | 20849 | goto meta_command_exit; |
| 20706 | 20850 | }else if( zFN ){ |
| @@ -20724,11 +20868,11 @@ | ||
| 20724 | 20868 | p->szMax = 0; |
| 20725 | 20869 | |
| 20726 | 20870 | /* If a filename is specified, try to open it first */ |
| 20727 | 20871 | if( zFN || p->openMode==SHELL_OPEN_HEXDB ){ |
| 20728 | 20872 | if( newFlag && zFN && !p->bSafeMode ) shellDeleteFile(zFN); |
| 20729 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 20873 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 20730 | 20874 | if( p->bSafeMode |
| 20731 | 20875 | && p->openMode!=SHELL_OPEN_HEXDB |
| 20732 | 20876 | && zFN |
| 20733 | 20877 | && strcmp(zFN,":memory:")!=0 |
| 20734 | 20878 | ){ |
| @@ -20757,11 +20901,11 @@ | ||
| 20757 | 20901 | p->pAuxDb->zDbFilename = 0; |
| 20758 | 20902 | open_db(p, 0); |
| 20759 | 20903 | } |
| 20760 | 20904 | }else |
| 20761 | 20905 | |
| 20762 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 20906 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 20763 | 20907 | if( (c=='o' |
| 20764 | 20908 | && (strncmp(azArg[0], "output", n)==0||strncmp(azArg[0], "once", n)==0)) |
| 20765 | 20909 | || (c=='e' && n==5 && strcmp(azArg[0],"excel")==0) |
| 20766 | 20910 | ){ |
| 20767 | 20911 | char *zFile = 0; |
| @@ -20873,11 +21017,11 @@ | ||
| 20873 | 21017 | sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", zFile); |
| 20874 | 21018 | } |
| 20875 | 21019 | } |
| 20876 | 21020 | sqlite3_free(zFile); |
| 20877 | 21021 | }else |
| 20878 | -#endif /* !defined(SQLITE_SHELL_WASM_MODE) */ | |
| 21022 | +#endif /* !defined(SQLITE_SHELL_FIDDLE) */ | |
| 20879 | 21023 | |
| 20880 | 21024 | if( c=='p' && n>=3 && strncmp(azArg[0], "parameter", n)==0 ){ |
| 20881 | 21025 | open_db(p,0); |
| 20882 | 21026 | if( nArg<=1 ) goto parameter_syntax_error; |
| 20883 | 21027 | |
| @@ -21043,17 +21187,17 @@ | ||
| 21043 | 21187 | if( nArg >= 3) { |
| 21044 | 21188 | strncpy(continuePrompt,azArg[2],(int)ArraySize(continuePrompt)-1); |
| 21045 | 21189 | } |
| 21046 | 21190 | }else |
| 21047 | 21191 | |
| 21048 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 21192 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 21049 | 21193 | if( c=='q' && strncmp(azArg[0], "quit", n)==0 ){ |
| 21050 | 21194 | rc = 2; |
| 21051 | 21195 | }else |
| 21052 | 21196 | #endif |
| 21053 | 21197 | |
| 21054 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 21198 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 21055 | 21199 | if( c=='r' && n>=3 && strncmp(azArg[0], "read", n)==0 ){ |
| 21056 | 21200 | FILE *inSaved = p->in; |
| 21057 | 21201 | int savedLineno = p->lineno; |
| 21058 | 21202 | failIfSafeMode(p, "cannot run .read in safe mode"); |
| 21059 | 21203 | if( nArg!=2 ){ |
| @@ -21084,13 +21228,13 @@ | ||
| 21084 | 21228 | fclose(p->in); |
| 21085 | 21229 | } |
| 21086 | 21230 | p->in = inSaved; |
| 21087 | 21231 | p->lineno = savedLineno; |
| 21088 | 21232 | }else |
| 21089 | -#endif /* !defined(SQLITE_SHELL_WASM_MODE) */ | |
| 21233 | +#endif /* !defined(SQLITE_SHELL_FIDDLE) */ | |
| 21090 | 21234 | |
| 21091 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 21235 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 21092 | 21236 | if( c=='r' && n>=3 && strncmp(azArg[0], "restore", n)==0 ){ |
| 21093 | 21237 | const char *zSrcFile; |
| 21094 | 21238 | const char *zDb; |
| 21095 | 21239 | sqlite3 *pSrc; |
| 21096 | 21240 | sqlite3_backup *pBackup; |
| @@ -21138,11 +21282,11 @@ | ||
| 21138 | 21282 | utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); |
| 21139 | 21283 | rc = 1; |
| 21140 | 21284 | } |
| 21141 | 21285 | close_db(pSrc); |
| 21142 | 21286 | }else |
| 21143 | -#endif /* !defined(SQLITE_SHELL_WASM_MODE) */ | |
| 21287 | +#endif /* !defined(SQLITE_SHELL_FIDDLE) */ | |
| 21144 | 21288 | |
| 21145 | 21289 | if( c=='s' && strncmp(azArg[0], "scanstats", n)==0 ){ |
| 21146 | 21290 | if( nArg==2 ){ |
| 21147 | 21291 | p->scanstatsOn = (u8)booleanValue(azArg[1]); |
| 21148 | 21292 | #ifndef SQLITE_ENABLE_STMT_SCANSTATUS |
| @@ -21764,11 +21908,11 @@ | ||
| 21764 | 21908 | shell_exec(p, zSql, 0); |
| 21765 | 21909 | } |
| 21766 | 21910 | sqlite3_free(zSql); |
| 21767 | 21911 | }else |
| 21768 | 21912 | |
| 21769 | -#if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_WASM_MODE) | |
| 21913 | +#if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_FIDDLE) | |
| 21770 | 21914 | if( c=='s' |
| 21771 | 21915 | && (strncmp(azArg[0], "shell", n)==0 || strncmp(azArg[0],"system",n)==0) |
| 21772 | 21916 | ){ |
| 21773 | 21917 | char *zCmd; |
| 21774 | 21918 | int i, x; |
| @@ -21785,11 +21929,11 @@ | ||
| 21785 | 21929 | } |
| 21786 | 21930 | x = zCmd!=0 ? system(zCmd) : 1; |
| 21787 | 21931 | sqlite3_free(zCmd); |
| 21788 | 21932 | if( x ) raw_printf(stderr, "System command returns %d\n", x); |
| 21789 | 21933 | }else |
| 21790 | -#endif /* !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_WASM_MODE) */ | |
| 21934 | +#endif /* !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_FIDDLE) */ | |
| 21791 | 21935 | |
| 21792 | 21936 | if( c=='s' && strncmp(azArg[0], "show", n)==0 ){ |
| 21793 | 21937 | static const char *azBool[] = { "off", "on", "trigger", "full"}; |
| 21794 | 21938 | const char *zOut; |
| 21795 | 21939 | int i; |
| @@ -21965,11 +22109,11 @@ | ||
| 21965 | 22109 | |
| 21966 | 22110 | for(ii=0; ii<nRow; ii++) sqlite3_free(azResult[ii]); |
| 21967 | 22111 | sqlite3_free(azResult); |
| 21968 | 22112 | }else |
| 21969 | 22113 | |
| 21970 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 22114 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 21971 | 22115 | /* Begin redirecting output to the file "testcase-out.txt" */ |
| 21972 | 22116 | if( c=='t' && strcmp(azArg[0],"testcase")==0 ){ |
| 21973 | 22117 | output_reset(p); |
| 21974 | 22118 | p->out = output_file_open("testcase-out.txt", 0); |
| 21975 | 22119 | if( p->out==0 ){ |
| @@ -21979,11 +22123,11 @@ | ||
| 21979 | 22123 | sqlite3_snprintf(sizeof(p->zTestcase), p->zTestcase, "%s", azArg[1]); |
| 21980 | 22124 | }else{ |
| 21981 | 22125 | sqlite3_snprintf(sizeof(p->zTestcase), p->zTestcase, "?"); |
| 21982 | 22126 | } |
| 21983 | 22127 | }else |
| 21984 | -#endif /* !defined(SQLITE_SHELL_WASM_MODE) */ | |
| 22128 | +#endif /* !defined(SQLITE_SHELL_FIDDLE) */ | |
| 21985 | 22129 | |
| 21986 | 22130 | #ifndef SQLITE_UNTESTABLE |
| 21987 | 22131 | if( c=='t' && n>=8 && strncmp(azArg[0], "testctrl", n)==0 ){ |
| 21988 | 22132 | static const struct { |
| 21989 | 22133 | const char *zCtrlName; /* Name of a test-control option */ |
| @@ -22651,11 +22795,11 @@ | ||
| 22651 | 22795 | |
| 22652 | 22796 | static void echo_group_input(ShellState *p, const char *zDo){ |
| 22653 | 22797 | if( ShellHasFlag(p, SHFLG_Echo) ) utf8_printf(p->out, "%s\n", zDo); |
| 22654 | 22798 | } |
| 22655 | 22799 | |
| 22656 | -#ifdef SQLITE_SHELL_WASM_MODE | |
| 22800 | +#ifdef SQLITE_SHELL_FIDDLE | |
| 22657 | 22801 | /* |
| 22658 | 22802 | ** Alternate one_input_line() impl for wasm mode. This is not in the primary impl |
| 22659 | 22803 | ** because we need the global shellState and cannot access it from that function |
| 22660 | 22804 | ** without moving lots of code around (creating a larger/messier diff). |
| 22661 | 22805 | */ |
| @@ -22682,11 +22826,11 @@ | ||
| 22682 | 22826 | shell_check_oom(zLine); |
| 22683 | 22827 | memcpy(zLine, zBegin, (size_t)nZ); |
| 22684 | 22828 | zLine[nZ] = 0; |
| 22685 | 22829 | return zLine; |
| 22686 | 22830 | } |
| 22687 | -#endif /* SQLITE_SHELL_WASM_MODE */ | |
| 22831 | +#endif /* SQLITE_SHELL_FIDDLE */ | |
| 22688 | 22832 | |
| 22689 | 22833 | /* |
| 22690 | 22834 | ** Read input from *in and process it. If *in==0 then input |
| 22691 | 22835 | ** is interactive - the user is typing it it. Otherwise, input |
| 22692 | 22836 | ** is coming from a file or device. A prompt is issued and history |
| @@ -23065,11 +23209,11 @@ | ||
| 23065 | 23209 | # else |
| 23066 | 23210 | # define SQLITE_SHELL_IS_UTF8 (1) |
| 23067 | 23211 | # endif |
| 23068 | 23212 | #endif |
| 23069 | 23213 | |
| 23070 | -#ifdef SQLITE_SHELL_WASM_MODE | |
| 23214 | +#ifdef SQLITE_SHELL_FIDDLE | |
| 23071 | 23215 | # define main fiddle_main |
| 23072 | 23216 | #endif |
| 23073 | 23217 | |
| 23074 | 23218 | #if SQLITE_SHELL_IS_UTF8 |
| 23075 | 23219 | int SQLITE_CDECL main(int argc, char **argv){ |
| @@ -23076,14 +23220,14 @@ | ||
| 23076 | 23220 | #else |
| 23077 | 23221 | int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ |
| 23078 | 23222 | char **argv; |
| 23079 | 23223 | #endif |
| 23080 | 23224 | #ifdef SQLITE_DEBUG |
| 23081 | - sqlite3_uint64 mem_main_enter = sqlite3_memory_used(); | |
| 23225 | + sqlite3_int64 mem_main_enter = sqlite3_memory_used(); | |
| 23082 | 23226 | #endif |
| 23083 | 23227 | char *zErrMsg = 0; |
| 23084 | -#ifdef SQLITE_SHELL_WASM_MODE | |
| 23228 | +#ifdef SQLITE_SHELL_FIDDLE | |
| 23085 | 23229 | # define data shellState |
| 23086 | 23230 | #else |
| 23087 | 23231 | ShellState data; |
| 23088 | 23232 | #endif |
| 23089 | 23233 | const char *zInitFile = 0; |
| @@ -23099,11 +23243,11 @@ | ||
| 23099 | 23243 | int argcToFree = 0; |
| 23100 | 23244 | #endif |
| 23101 | 23245 | |
| 23102 | 23246 | setBinaryMode(stdin, 0); |
| 23103 | 23247 | setvbuf(stderr, 0, _IONBF, 0); /* Make sure stderr is unbuffered */ |
| 23104 | -#ifdef SQLITE_SHELL_WASM_MODE | |
| 23248 | +#ifdef SQLITE_SHELL_FIDDLE | |
| 23105 | 23249 | stdin_is_interactive = 0; |
| 23106 | 23250 | stdout_is_console = 1; |
| 23107 | 23251 | #else |
| 23108 | 23252 | stdin_is_interactive = isatty(0); |
| 23109 | 23253 | stdout_is_console = isatty(1); |
| @@ -23361,11 +23505,11 @@ | ||
| 23361 | 23505 | utf8_printf(stderr,"%s: Error: no database filename specified\n", Argv0); |
| 23362 | 23506 | return 1; |
| 23363 | 23507 | #endif |
| 23364 | 23508 | } |
| 23365 | 23509 | data.out = stdout; |
| 23366 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 23510 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 23367 | 23511 | sqlite3_appendvfs_init(0,0,0); |
| 23368 | 23512 | #endif |
| 23369 | 23513 | |
| 23370 | 23514 | /* Go ahead and open the database file if it already exists. If the |
| 23371 | 23515 | ** file does not exist, delay opening it. This prevents empty database |
| @@ -23629,11 +23773,11 @@ | ||
| 23629 | 23773 | }else{ |
| 23630 | 23774 | data.in = stdin; |
| 23631 | 23775 | rc = process_input(&data); |
| 23632 | 23776 | } |
| 23633 | 23777 | } |
| 23634 | -#ifndef SQLITE_SHELL_WASM_MODE | |
| 23778 | +#ifndef SQLITE_SHELL_FIDDLE | |
| 23635 | 23779 | /* In WASM mode we have to leave the db state in place so that |
| 23636 | 23780 | ** client code can "push" SQL into it after this call returns. */ |
| 23637 | 23781 | free(azCmd); |
| 23638 | 23782 | set_table_name(&data, 0); |
| 23639 | 23783 | if( data.db ){ |
| @@ -23664,16 +23808,16 @@ | ||
| 23664 | 23808 | if( sqlite3_memory_used()>mem_main_enter ){ |
| 23665 | 23809 | utf8_printf(stderr, "Memory leaked: %u bytes\n", |
| 23666 | 23810 | (unsigned int)(sqlite3_memory_used()-mem_main_enter)); |
| 23667 | 23811 | } |
| 23668 | 23812 | #endif |
| 23669 | -#endif /* !SQLITE_SHELL_WASM_MODE */ | |
| 23813 | +#endif /* !SQLITE_SHELL_FIDDLE */ | |
| 23670 | 23814 | return rc; |
| 23671 | 23815 | } |
| 23672 | 23816 | |
| 23673 | 23817 | |
| 23674 | -#ifdef SQLITE_SHELL_WASM_MODE | |
| 23818 | +#ifdef SQLITE_SHELL_FIDDLE | |
| 23675 | 23819 | /* Only for emcc experimentation purposes. */ |
| 23676 | 23820 | int fiddle_experiment(int a,int b){ |
| 23677 | 23821 | return a + b; |
| 23678 | 23822 | } |
| 23679 | 23823 | |
| @@ -23790,6 +23934,6 @@ | ||
| 23790 | 23934 | shellState.wasm.zPos = zSql; |
| 23791 | 23935 | process_input(&shellState); |
| 23792 | 23936 | memset(&shellState.wasm, 0, sizeof(shellState.wasm)); |
| 23793 | 23937 | } |
| 23794 | 23938 | } |
| 23795 | -#endif /* SQLITE_SHELL_WASM_MODE */ | |
| 23939 | +#endif /* SQLITE_SHELL_FIDDLE */ | |
| 23796 | 23940 |
| --- extsrc/shell.c | |
| +++ extsrc/shell.c | |
| @@ -53,10 +53,19 @@ | |
| 53 | */ |
| 54 | #if !defined(SQLITE_OS_WINRT) |
| 55 | # define SQLITE_OS_WINRT 0 |
| 56 | #endif |
| 57 | |
| 58 | /* |
| 59 | ** Warning pragmas copied from msvc.h in the core. |
| 60 | */ |
| 61 | #if defined(_MSC_VER) |
| 62 | #pragma warning(disable : 4054) |
| @@ -245,21 +254,10 @@ | |
| 245 | #else |
| 246 | # define setBinaryMode(X,Y) |
| 247 | # define setTextMode(X,Y) |
| 248 | #endif |
| 249 | |
| 250 | /* |
| 251 | ** When compiling with emcc (a.k.a. emscripten), we're building a |
| 252 | ** WebAssembly (WASM) bundle and need to disable and rewire a few |
| 253 | ** things. |
| 254 | */ |
| 255 | #ifdef __EMSCRIPTEN__ |
| 256 | #define SQLITE_SHELL_WASM_MODE |
| 257 | #else |
| 258 | #undef SQLITE_SHELL_WASM_MODE |
| 259 | #endif |
| 260 | |
| 261 | /* True if the timer is enabled */ |
| 262 | static int enableTimer = 0; |
| 263 | |
| 264 | /* Return the current wall-clock time */ |
| 265 | static sqlite3_int64 timeOfDay(void){ |
| @@ -717,11 +715,11 @@ | |
| 717 | ** |
| 718 | ** The result is stored in space obtained from malloc() and must either |
| 719 | ** be freed by the caller or else passed back into this routine via the |
| 720 | ** zPrior argument for reuse. |
| 721 | */ |
| 722 | #ifndef SQLITE_SHELL_WASM_MODE |
| 723 | static char *one_input_line(FILE *in, char *zPrior, int isContinuation){ |
| 724 | char *zPrompt; |
| 725 | char *zResult; |
| 726 | if( in!=0 ){ |
| 727 | zResult = local_getline(zPrior, in); |
| @@ -737,11 +735,11 @@ | |
| 737 | if( zResult && *zResult ) shell_add_history(zResult); |
| 738 | #endif |
| 739 | } |
| 740 | return zResult; |
| 741 | } |
| 742 | #endif /* !SQLITE_SHELL_WASM_MODE */ |
| 743 | |
| 744 | /* |
| 745 | ** Return the value of a hexadecimal digit. Return -1 if the input |
| 746 | ** is not a hex digit. |
| 747 | */ |
| @@ -3794,10 +3792,11 @@ | |
| 3794 | #define re_compile sqlite3re_compile |
| 3795 | #define re_free sqlite3re_free |
| 3796 | |
| 3797 | /* The end-of-input character */ |
| 3798 | #define RE_EOF 0 /* End of input */ |
| 3799 | |
| 3800 | /* The NFA is implemented as sequence of opcodes taken from the following |
| 3801 | ** set. Each opcode has a single integer argument. |
| 3802 | */ |
| 3803 | #define RE_OP_MATCH 1 /* Match the one character in the argument */ |
| @@ -3815,10 +3814,37 @@ | |
| 3815 | #define RE_OP_DIGIT 13 /* digit: [0-9] */ |
| 3816 | #define RE_OP_NOTDIGIT 14 /* Not a digit */ |
| 3817 | #define RE_OP_SPACE 15 /* space: [ \t\n\r\v\f] */ |
| 3818 | #define RE_OP_NOTSPACE 16 /* Not a digit */ |
| 3819 | #define RE_OP_BOUNDARY 17 /* Boundary between word and non-word */ |
| 3820 | |
| 3821 | /* Each opcode is a "state" in the NFA */ |
| 3822 | typedef unsigned short ReStateNumber; |
| 3823 | |
| 3824 | /* Because this is an NFA and not a DFA, multiple states can be active at |
| @@ -3849,11 +3875,11 @@ | |
| 3849 | const char *zErr; /* Error message to return */ |
| 3850 | char *aOp; /* Operators for the virtual machine */ |
| 3851 | int *aArg; /* Arguments to each operator */ |
| 3852 | unsigned (*xNextChar)(ReInput*); /* Next character function */ |
| 3853 | unsigned char zInit[12]; /* Initial text to match */ |
| 3854 | int nInit; /* Number of characters in zInit */ |
| 3855 | unsigned nState; /* Number of entries in aOp[] and aArg[] */ |
| 3856 | unsigned nAlloc; /* Slots allocated for aOp[] and aArg[] */ |
| 3857 | }; |
| 3858 | |
| 3859 | /* Add a state to the given state set if it is not already there */ |
| @@ -3922,11 +3948,11 @@ | |
| 3922 | ReStateSet aStateSet[2], *pThis, *pNext; |
| 3923 | ReStateNumber aSpace[100]; |
| 3924 | ReStateNumber *pToFree; |
| 3925 | unsigned int i = 0; |
| 3926 | unsigned int iSwap = 0; |
| 3927 | int c = RE_EOF+1; |
| 3928 | int cPrev = 0; |
| 3929 | int rc = 0; |
| 3930 | ReInput in; |
| 3931 | |
| 3932 | in.z = zIn; |
| @@ -3941,10 +3967,11 @@ | |
| 3941 | strncmp((const char*)zIn+in.i, (const char*)pRe->zInit, pRe->nInit)!=0) |
| 3942 | ){ |
| 3943 | in.i++; |
| 3944 | } |
| 3945 | if( in.i+pRe->nInit>in.mx ) return 0; |
| 3946 | } |
| 3947 | |
| 3948 | if( pRe->nState<=(sizeof(aSpace)/(sizeof(aSpace[0])*2)) ){ |
| 3949 | pToFree = 0; |
| 3950 | aStateSet[0].aState = aSpace; |
| @@ -3968,10 +3995,14 @@ | |
| 3968 | int x = pThis->aState[i]; |
| 3969 | switch( pRe->aOp[x] ){ |
| 3970 | case RE_OP_MATCH: { |
| 3971 | if( pRe->aArg[x]==c ) re_add_state(pNext, x+1); |
| 3972 | break; |
| 3973 | } |
| 3974 | case RE_OP_ANY: { |
| 3975 | if( c!=0 ) re_add_state(pNext, x+1); |
| 3976 | break; |
| 3977 | } |
| @@ -4050,11 +4081,13 @@ | |
| 4050 | } |
| 4051 | } |
| 4052 | } |
| 4053 | } |
| 4054 | for(i=0; i<pNext->nState; i++){ |
| 4055 | if( pRe->aOp[pNext->aState[i]]==RE_OP_ACCEPT ){ rc = 1; break; } |
| 4056 | } |
| 4057 | re_match_end: |
| 4058 | sqlite3_free(pToFree); |
| 4059 | return rc; |
| 4060 | } |
| @@ -4205,11 +4238,10 @@ | |
| 4205 | const char *zErr; |
| 4206 | while( (c = p->xNextChar(&p->sIn))!=0 ){ |
| 4207 | iStart = p->nState; |
| 4208 | switch( c ){ |
| 4209 | case '|': |
| 4210 | case '$': |
| 4211 | case ')': { |
| 4212 | p->sIn.i--; |
| 4213 | return 0; |
| 4214 | } |
| 4215 | case '(': { |
| @@ -4241,10 +4273,18 @@ | |
| 4241 | } |
| 4242 | case '?': { |
| 4243 | if( iPrev<0 ) return "'?' without operand"; |
| 4244 | re_insert(p, iPrev, RE_OP_FORK, p->nState - iPrev+1); |
| 4245 | break; |
| 4246 | } |
| 4247 | case '{': { |
| 4248 | int m = 0, n = 0; |
| 4249 | int sz, j; |
| 4250 | if( iPrev<0 ) return "'{m,n}' without operand"; |
| @@ -4260,10 +4300,11 @@ | |
| 4260 | p->sIn.i++; |
| 4261 | sz = p->nState - iPrev; |
| 4262 | if( m==0 ){ |
| 4263 | if( n==0 ) return "both m and n are zero in '{m,n}'"; |
| 4264 | re_insert(p, iPrev, RE_OP_FORK, sz+1); |
| 4265 | n--; |
| 4266 | }else{ |
| 4267 | for(j=1; j<m; j++) re_copy(p, iPrev, sz); |
| 4268 | } |
| 4269 | for(j=m; j<n; j++){ |
| @@ -4378,15 +4419,11 @@ | |
| 4378 | zErr = re_subcompile_re(pRe); |
| 4379 | if( zErr ){ |
| 4380 | re_free(pRe); |
| 4381 | return zErr; |
| 4382 | } |
| 4383 | if( rePeek(pRe)=='$' && pRe->sIn.i+1>=pRe->sIn.mx ){ |
| 4384 | re_append(pRe, RE_OP_MATCH, RE_EOF); |
| 4385 | re_append(pRe, RE_OP_ACCEPT, 0); |
| 4386 | *ppRe = pRe; |
| 4387 | }else if( pRe->sIn.i>=pRe->sIn.mx ){ |
| 4388 | re_append(pRe, RE_OP_ACCEPT, 0); |
| 4389 | *ppRe = pRe; |
| 4390 | }else{ |
| 4391 | re_free(pRe); |
| 4392 | return "unrecognized character"; |
| @@ -4407,11 +4444,11 @@ | |
| 4407 | pRe->zInit[j++] = (unsigned char)x; |
| 4408 | }else if( x<=0xfff ){ |
| 4409 | pRe->zInit[j++] = (unsigned char)(0xc0 | (x>>6)); |
| 4410 | pRe->zInit[j++] = 0x80 | (x&0x3f); |
| 4411 | }else if( x<=0xffff ){ |
| 4412 | pRe->zInit[j++] = (unsigned char)(0xd0 | (x>>12)); |
| 4413 | pRe->zInit[j++] = 0x80 | ((x>>6)&0x3f); |
| 4414 | pRe->zInit[j++] = 0x80 | (x&0x3f); |
| 4415 | }else{ |
| 4416 | break; |
| 4417 | } |
| @@ -4465,10 +4502,71 @@ | |
| 4465 | } |
| 4466 | if( setAux ){ |
| 4467 | sqlite3_set_auxdata(context, 0, pRe, (void(*)(void*))re_free); |
| 4468 | } |
| 4469 | } |
| 4470 | |
| 4471 | /* |
| 4472 | ** Invoke this routine to register the regexp() function with the |
| 4473 | ** SQLite database connection. |
| 4474 | */ |
| @@ -4490,16 +4588,23 @@ | |
| 4490 | /* The regexpi(PATTERN,STRING) function is a case-insensitive version |
| 4491 | ** of regexp(PATTERN,STRING). */ |
| 4492 | rc = sqlite3_create_function(db, "regexpi", 2, |
| 4493 | SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, |
| 4494 | (void*)db, re_sql_func, 0, 0); |
| 4495 | } |
| 4496 | return rc; |
| 4497 | } |
| 4498 | |
| 4499 | /************************* End ../ext/misc/regexp.c ********************/ |
| 4500 | #ifndef SQLITE_SHELL_WASM_MODE |
| 4501 | /************************* Begin ../ext/misc/fileio.c ******************/ |
| 4502 | /* |
| 4503 | ** 2014-06-13 |
| 4504 | ** |
| 4505 | ** The author disclaims copyright to this source code. In place of |
| @@ -10047,10 +10152,14 @@ | |
| 10047 | ** Return true if zId must be quoted in order to use it as an SQL |
| 10048 | ** identifier, or false otherwise. |
| 10049 | */ |
| 10050 | static int idxIdentifierRequiresQuotes(const char *zId){ |
| 10051 | int i; |
| 10052 | for(i=0; zId[i]; i++){ |
| 10053 | if( !(zId[i]=='_') |
| 10054 | && !(zId[i]>='0' && zId[i]<='9') |
| 10055 | && !(zId[i]>='a' && zId[i]<='z') |
| 10056 | && !(zId[i]>='A' && zId[i]<='Z') |
| @@ -12248,19 +12357,19 @@ | |
| 12248 | int nIndent; /* Size of array aiIndent[] */ |
| 12249 | int iIndent; /* Index of current op in aiIndent[] */ |
| 12250 | char *zNonce; /* Nonce for temporary safe-mode excapes */ |
| 12251 | EQPGraph sGraph; /* Information for the graphical EXPLAIN QUERY PLAN */ |
| 12252 | ExpertInfo expert; /* Valid if previous command was ".expert OPT..." */ |
| 12253 | #ifdef SQLITE_SHELL_WASM_MODE |
| 12254 | struct { |
| 12255 | const char * zInput; /* Input string from wasm/JS proxy */ |
| 12256 | const char * zPos; /* Cursor pos into zInput */ |
| 12257 | } wasm; |
| 12258 | #endif |
| 12259 | }; |
| 12260 | |
| 12261 | #ifdef SQLITE_SHELL_WASM_MODE |
| 12262 | static ShellState shellState; |
| 12263 | #endif |
| 12264 | |
| 12265 | |
| 12266 | /* Allowed values for ShellState.autoEQP |
| @@ -12588,14 +12697,27 @@ | |
| 12588 | /* |
| 12589 | ** Output the given string as a hex-encoded blob (eg. X'1234' ) |
| 12590 | */ |
| 12591 | static void output_hex_blob(FILE *out, const void *pBlob, int nBlob){ |
| 12592 | int i; |
| 12593 | char *zBlob = (char *)pBlob; |
| 12594 | raw_printf(out,"X'"); |
| 12595 | for(i=0; i<nBlob; i++){ raw_printf(out,"%02x",zBlob[i]&0xff); } |
| 12596 | raw_printf(out,"'"); |
| 12597 | } |
| 12598 | |
| 12599 | /* |
| 12600 | ** Find a string that is not found anywhere in z[]. Return a pointer |
| 12601 | ** to that string. |
| @@ -12924,11 +13046,11 @@ | |
| 12924 | UNUSED_PARAMETER(zA2); |
| 12925 | UNUSED_PARAMETER(zA3); |
| 12926 | UNUSED_PARAMETER(zA4); |
| 12927 | switch( op ){ |
| 12928 | case SQLITE_ATTACH: { |
| 12929 | #ifndef SQLITE_SHELL_WASM_MODE |
| 12930 | /* In WASM builds the filesystem is a virtual sandbox, so |
| 12931 | ** there's no harm in using ATTACH. */ |
| 12932 | failIfSafeMode(p, "cannot run ATTACH in safe mode"); |
| 12933 | #endif |
| 12934 | break; |
| @@ -12997,19 +13119,41 @@ | |
| 12997 | /* |
| 12998 | ** Print a schema statement. Part of MODE_Semi and MODE_Pretty output. |
| 12999 | ** |
| 13000 | ** This routine converts some CREATE TABLE statements for shadow tables |
| 13001 | ** in FTS3/4/5 into CREATE TABLE IF NOT EXISTS statements. |
| 13002 | */ |
| 13003 | static void printSchemaLine(FILE *out, const char *z, const char *zTail){ |
| 13004 | if( z==0 ) return; |
| 13005 | if( zTail==0 ) return; |
| 13006 | if( sqlite3_strglob("CREATE TABLE ['\"]*", z)==0 ){ |
| 13007 | utf8_printf(out, "CREATE TABLE IF NOT EXISTS %s%s", z+13, zTail); |
| 13008 | }else{ |
| 13009 | utf8_printf(out, "%s%s", z, zTail); |
| 13010 | } |
| 13011 | } |
| 13012 | static void printSchemaLineN(FILE *out, char *z, int n, const char *zTail){ |
| 13013 | char c = z[n]; |
| 13014 | z[n] = 0; |
| 13015 | printSchemaLine(out, z, zTail); |
| @@ -15338,11 +15482,11 @@ | |
| 15338 | ** There must be two or more spaces between the end of the command and the |
| 15339 | ** start of the description of what that command does. |
| 15340 | */ |
| 15341 | static const char *(azHelp[]) = { |
| 15342 | #if defined(SQLITE_HAVE_ZLIB) && !defined(SQLITE_OMIT_VIRTUALTABLE) \ |
| 15343 | && !defined(SQLITE_SHELL_WASM_MODE) |
| 15344 | ".archive ... Manage SQL archives", |
| 15345 | " Each command must have exactly one of the following options:", |
| 15346 | " -c, --create Create a new archive", |
| 15347 | " -u, --update Add or update files with changed mtime", |
| 15348 | " -i, --insert Like -u but always add even if unchanged", |
| @@ -15364,23 +15508,23 @@ | |
| 15364 | " http://sqlite.org/cli.html#sqlite_archive_support", |
| 15365 | #endif |
| 15366 | #ifndef SQLITE_OMIT_AUTHORIZATION |
| 15367 | ".auth ON|OFF Show authorizer callbacks", |
| 15368 | #endif |
| 15369 | #ifndef SQLITE_SHELL_WASM_MODE |
| 15370 | ".backup ?DB? FILE Backup DB (default \"main\") to FILE", |
| 15371 | " Options:", |
| 15372 | " --append Use the appendvfs", |
| 15373 | " --async Write to FILE without journal and fsync()", |
| 15374 | #endif |
| 15375 | ".bail on|off Stop after hitting an error. Default OFF", |
| 15376 | ".binary on|off Turn binary output on or off. Default OFF", |
| 15377 | #ifndef SQLITE_SHELL_WASM_MODE |
| 15378 | ".cd DIRECTORY Change the working directory to DIRECTORY", |
| 15379 | #endif |
| 15380 | ".changes on|off Show number of rows changed by SQL", |
| 15381 | #ifndef SQLITE_SHELL_WASM_MODE |
| 15382 | ".check GLOB Fail if output since .testcase does not match", |
| 15383 | ".clone NEWDB Clone data into NEWDB from the existing database", |
| 15384 | #endif |
| 15385 | ".connection [close] [#] Open or close an auxiliary database connection", |
| 15386 | ".databases List names and files of attached databases", |
| @@ -15402,15 +15546,15 @@ | |
| 15402 | #ifdef SQLITE_DEBUG |
| 15403 | " test Show raw EXPLAIN QUERY PLAN output", |
| 15404 | " trace Like \"full\" but enable \"PRAGMA vdbe_trace\"", |
| 15405 | #endif |
| 15406 | " trigger Like \"full\" but also show trigger bytecode", |
| 15407 | #ifndef SQLITE_SHELL_WASM_MODE |
| 15408 | ".excel Display the output of next command in spreadsheet", |
| 15409 | " --bom Put a UTF8 byte-order mark on intermediate file", |
| 15410 | #endif |
| 15411 | #ifndef SQLITE_SHELL_WASM_MODE |
| 15412 | ".exit ?CODE? Exit this program with return-code CODE", |
| 15413 | #endif |
| 15414 | ".expert EXPERIMENTAL. Suggest indexes for queries", |
| 15415 | ".explain ?on|off|auto? Change the EXPLAIN formatting mode. Default: auto", |
| 15416 | ".filectrl CMD ... Run various sqlite3_file_control() operations", |
| @@ -15417,11 +15561,11 @@ | |
| 15417 | " --schema SCHEMA Use SCHEMA instead of \"main\"", |
| 15418 | " --help Show CMD details", |
| 15419 | ".fullschema ?--indent? Show schema and the content of sqlite_stat tables", |
| 15420 | ".headers on|off Turn display of headers on or off", |
| 15421 | ".help ?-all? ?PATTERN? Show help text for PATTERN", |
| 15422 | #ifndef SQLITE_SHELL_WASM_MODE |
| 15423 | ".import FILE TABLE Import data from FILE into TABLE", |
| 15424 | " Options:", |
| 15425 | " --ascii Use \\037 and \\036 as column and row separators", |
| 15426 | " --csv Use , and \\n as column and row separators", |
| 15427 | " --skip N Skip the first N rows of input", |
| @@ -15446,14 +15590,14 @@ | |
| 15446 | #endif |
| 15447 | ".limit ?LIMIT? ?VAL? Display or change the value of an SQLITE_LIMIT", |
| 15448 | ".lint OPTIONS Report potential schema issues.", |
| 15449 | " Options:", |
| 15450 | " fkey-indexes Find missing foreign key indexes", |
| 15451 | #if !defined(SQLITE_OMIT_LOAD_EXTENSION) && !defined(SQLITE_SHELL_WASM_MODE) |
| 15452 | ".load FILE ?ENTRY? Load an extension library", |
| 15453 | #endif |
| 15454 | #ifndef SQLITE_SHELL_WASM_MODE |
| 15455 | ".log FILE|off Turn logging on or off. FILE can be stderr/stdout", |
| 15456 | #endif |
| 15457 | ".mode MODE ?OPTIONS? Set output mode", |
| 15458 | " MODE is one of:", |
| 15459 | " ascii Columns/rows delimited by 0x1F and 0x1E", |
| @@ -15476,15 +15620,15 @@ | |
| 15476 | " --wordwrap B Wrap or not at word boundaries per B (on/off)", |
| 15477 | " --ww Shorthand for \"--wordwrap 1\"", |
| 15478 | " --quote Quote output text as SQL literals", |
| 15479 | " --noquote Do not quote output text", |
| 15480 | " TABLE The name of SQL table used for \"insert\" mode", |
| 15481 | #ifndef SQLITE_SHELL_WASM_MODE |
| 15482 | ".nonce STRING Suspend safe mode for one command if nonce matches", |
| 15483 | #endif |
| 15484 | ".nullvalue STRING Use STRING in place of NULL values", |
| 15485 | #ifndef SQLITE_SHELL_WASM_MODE |
| 15486 | ".once ?OPTIONS? ?FILE? Output for the next SQL command only to FILE", |
| 15487 | " If FILE begins with '|' then open as a pipe", |
| 15488 | " --bom Put a UTF8 byte-order mark at the beginning", |
| 15489 | " -e Send output to the system text editor", |
| 15490 | " -x Send output as CSV to a spreadsheet (same as \".excel\")", |
| @@ -15502,11 +15646,11 @@ | |
| 15502 | #endif |
| 15503 | " --new Initialize FILE to an empty database", |
| 15504 | " --nofollow Do not follow symbolic links", |
| 15505 | " --readonly Open FILE readonly", |
| 15506 | " --zip FILE is a ZIP archive", |
| 15507 | #ifndef SQLITE_SHELL_WASM_MODE |
| 15508 | ".output ?FILE? Send output to FILE or stdout if FILE is omitted", |
| 15509 | " If FILE begins with '|' then open it as a pipe.", |
| 15510 | " Options:", |
| 15511 | " --bom Prefix output with a UTF8 byte-order mark", |
| 15512 | " -e Send output to the system text editor", |
| @@ -15526,11 +15670,11 @@ | |
| 15526 | " --once Do no more than one progress interrupt", |
| 15527 | " --quiet|-q No output except at interrupts", |
| 15528 | " --reset Reset the count for each input and interrupt", |
| 15529 | #endif |
| 15530 | ".prompt MAIN CONTINUE Replace the standard prompts", |
| 15531 | #ifndef SQLITE_SHELL_WASM_MODE |
| 15532 | ".quit Exit this program", |
| 15533 | ".read FILE Read input from FILE or command output", |
| 15534 | " If FILE begins with \"|\", it is a command that generates the input.", |
| 15535 | #endif |
| 15536 | #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB) |
| @@ -15539,11 +15683,11 @@ | |
| 15539 | " --recovery-db NAME Store recovery metadata in database file NAME", |
| 15540 | " --lost-and-found TABLE Alternative name for the lost-and-found table", |
| 15541 | " --no-rowids Do not attempt to recover rowid values", |
| 15542 | " that are not also INTEGER PRIMARY KEYs", |
| 15543 | #endif |
| 15544 | #ifndef SQLITE_SHELL_WASM_MODE |
| 15545 | ".restore ?DB? FILE Restore content of DB (default \"main\") from FILE", |
| 15546 | ".save ?OPTIONS? FILE Write database to FILE (an alias for .backup ...)", |
| 15547 | #endif |
| 15548 | ".scanstats on|off Turn sqlite3_stmt_scanstatus() metrics on or off", |
| 15549 | ".schema ?PATTERN? Show the CREATE statements matching PATTERN", |
| @@ -15576,24 +15720,24 @@ | |
| 15576 | " --sha3-224 Use the sha3-224 algorithm", |
| 15577 | " --sha3-256 Use the sha3-256 algorithm (default)", |
| 15578 | " --sha3-384 Use the sha3-384 algorithm", |
| 15579 | " --sha3-512 Use the sha3-512 algorithm", |
| 15580 | " Any other argument is a LIKE pattern for tables to hash", |
| 15581 | #if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_WASM_MODE) |
| 15582 | ".shell CMD ARGS... Run CMD ARGS... in a system shell", |
| 15583 | #endif |
| 15584 | ".show Show the current values for various settings", |
| 15585 | ".stats ?ARG? Show stats or turn stats on or off", |
| 15586 | " off Turn off automatic stat display", |
| 15587 | " on Turn on automatic stat display", |
| 15588 | " stmt Show statement stats", |
| 15589 | " vmstep Show the virtual machine step count only", |
| 15590 | #if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_WASM_MODE) |
| 15591 | ".system CMD ARGS... Run CMD ARGS... in a system shell", |
| 15592 | #endif |
| 15593 | ".tables ?TABLE? List names of tables matching LIKE pattern TABLE", |
| 15594 | #ifndef SQLITE_SHELL_WASM_MODE |
| 15595 | ".testcase NAME Begin redirecting output to 'testcase-out.txt'", |
| 15596 | #endif |
| 15597 | ".testctrl CMD ... Run various sqlite3_test_control() operations", |
| 15598 | " Run \".testctrl\" with no arguments for details", |
| 15599 | ".timeout MS Try opening locked tables for MS milliseconds", |
| @@ -16142,11 +16286,11 @@ | |
| 16142 | sqlite3_uint_init(p->db, 0, 0); |
| 16143 | sqlite3_decimal_init(p->db, 0, 0); |
| 16144 | sqlite3_regexp_init(p->db, 0, 0); |
| 16145 | sqlite3_ieee_init(p->db, 0, 0); |
| 16146 | sqlite3_series_init(p->db, 0, 0); |
| 16147 | #ifndef SQLITE_SHELL_WASM_MODE |
| 16148 | sqlite3_fileio_init(p->db, 0, 0); |
| 16149 | sqlite3_completion_init(p->db, 0, 0); |
| 16150 | #endif |
| 16151 | #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB) |
| 16152 | sqlite3_dbdata_init(p->db, 0, 0); |
| @@ -19272,19 +19416,19 @@ | |
| 19272 | } |
| 19273 | }else |
| 19274 | #endif |
| 19275 | |
| 19276 | #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_HAVE_ZLIB) \ |
| 19277 | && !defined(SQLITE_SHELL_WASM_MODE) |
| 19278 | if( c=='a' && strncmp(azArg[0], "archive", n)==0 ){ |
| 19279 | open_db(p, 0); |
| 19280 | failIfSafeMode(p, "cannot run .archive in safe mode"); |
| 19281 | rc = arDotCommand(p, 0, azArg, nArg); |
| 19282 | }else |
| 19283 | #endif |
| 19284 | |
| 19285 | #ifndef SQLITE_SHELL_WASM_MODE |
| 19286 | if( (c=='b' && n>=3 && strncmp(azArg[0], "backup", n)==0) |
| 19287 | || (c=='s' && n>=3 && strncmp(azArg[0], "save", n)==0) |
| 19288 | ){ |
| 19289 | const char *zDestFile = 0; |
| 19290 | const char *zDb = 0; |
| @@ -19349,11 +19493,11 @@ | |
| 19349 | utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(pDest)); |
| 19350 | rc = 1; |
| 19351 | } |
| 19352 | close_db(pDest); |
| 19353 | }else |
| 19354 | #endif /* !defined(SQLITE_SHELL_WASM_MODE) */ |
| 19355 | |
| 19356 | if( c=='b' && n>=3 && strncmp(azArg[0], "bail", n)==0 ){ |
| 19357 | if( nArg==2 ){ |
| 19358 | bail_on_error = booleanValue(azArg[1]); |
| 19359 | }else{ |
| @@ -19380,11 +19524,11 @@ | |
| 19380 | */ |
| 19381 | if( c=='b' && n>=3 && strncmp(azArg[0], "breakpoint", n)==0 ){ |
| 19382 | test_breakpoint(); |
| 19383 | }else |
| 19384 | |
| 19385 | #ifndef SQLITE_SHELL_WASM_MODE |
| 19386 | if( c=='c' && strcmp(azArg[0],"cd")==0 ){ |
| 19387 | failIfSafeMode(p, "cannot run .cd in safe mode"); |
| 19388 | if( nArg==2 ){ |
| 19389 | #if defined(_WIN32) || defined(WIN32) |
| 19390 | wchar_t *z = sqlite3_win32_utf8_to_unicode(azArg[1]); |
| @@ -19400,11 +19544,11 @@ | |
| 19400 | }else{ |
| 19401 | raw_printf(stderr, "Usage: .cd DIRECTORY\n"); |
| 19402 | rc = 1; |
| 19403 | } |
| 19404 | }else |
| 19405 | #endif /* !defined(SQLITE_SHELL_WASM_MODE) */ |
| 19406 | |
| 19407 | if( c=='c' && n>=3 && strncmp(azArg[0], "changes", n)==0 ){ |
| 19408 | if( nArg==2 ){ |
| 19409 | setOrClearFlag(p, SHFLG_CountChanges, azArg[1]); |
| 19410 | }else{ |
| @@ -19411,11 +19555,11 @@ | |
| 19411 | raw_printf(stderr, "Usage: .changes on|off\n"); |
| 19412 | rc = 1; |
| 19413 | } |
| 19414 | }else |
| 19415 | |
| 19416 | #ifndef SQLITE_SHELL_WASM_MODE |
| 19417 | /* Cancel output redirection, if it is currently set (by .testcase) |
| 19418 | ** Then read the content of the testcase-out.txt file and compare against |
| 19419 | ** azArg[1]. If there are differences, report an error and exit. |
| 19420 | */ |
| 19421 | if( c=='c' && n>=3 && strncmp(azArg[0], "check", n)==0 ){ |
| @@ -19436,23 +19580,23 @@ | |
| 19436 | utf8_printf(stdout, "testcase-%s ok\n", p->zTestcase); |
| 19437 | p->nCheck++; |
| 19438 | } |
| 19439 | sqlite3_free(zRes); |
| 19440 | }else |
| 19441 | #endif /* !defined(SQLITE_SHELL_WASM_MODE) */ |
| 19442 | |
| 19443 | #ifndef SQLITE_SHELL_WASM_MODE |
| 19444 | if( c=='c' && strncmp(azArg[0], "clone", n)==0 ){ |
| 19445 | failIfSafeMode(p, "cannot run .clone in safe mode"); |
| 19446 | if( nArg==2 ){ |
| 19447 | tryToClone(p, azArg[1]); |
| 19448 | }else{ |
| 19449 | raw_printf(stderr, "Usage: .clone FILENAME\n"); |
| 19450 | rc = 1; |
| 19451 | } |
| 19452 | }else |
| 19453 | #endif /* !defined(SQLITE_SHELL_WASM_MODE) */ |
| 19454 | |
| 19455 | if( c=='c' && strncmp(azArg[0], "connection", n)==0 ){ |
| 19456 | if( nArg==1 ){ |
| 19457 | /* List available connections */ |
| 19458 | int i; |
| @@ -19737,11 +19881,11 @@ | |
| 19737 | raw_printf(stderr, "Usage: .eqp off|on|trace|trigger|full\n"); |
| 19738 | rc = 1; |
| 19739 | } |
| 19740 | }else |
| 19741 | |
| 19742 | #ifndef SQLITE_SHELL_WASM_MODE |
| 19743 | if( c=='e' && strncmp(azArg[0], "exit", n)==0 ){ |
| 19744 | if( nArg>1 && (rc = (int)integerValue(azArg[1]))!=0 ) exit(rc); |
| 19745 | rc = 2; |
| 19746 | }else |
| 19747 | #endif |
| @@ -19997,11 +20141,11 @@ | |
| 19997 | }else{ |
| 19998 | showHelp(p->out, 0); |
| 19999 | } |
| 20000 | }else |
| 20001 | |
| 20002 | #ifndef SQLITE_SHELL_WASM_MODE |
| 20003 | if( c=='i' && strncmp(azArg[0], "import", n)==0 ){ |
| 20004 | char *zTable = 0; /* Insert data into this table */ |
| 20005 | char *zSchema = 0; /* within this schema (may default to "main") */ |
| 20006 | char *zFile = 0; /* Name of file to extra content from */ |
| 20007 | sqlite3_stmt *pStmt = NULL; /* A statement */ |
| @@ -20288,11 +20432,11 @@ | |
| 20288 | utf8_printf(p->out, |
| 20289 | "Added %d rows with %d errors using %d lines of input\n", |
| 20290 | sCtx.nRow, sCtx.nErr, sCtx.nLine-1); |
| 20291 | } |
| 20292 | }else |
| 20293 | #endif /* !defined(SQLITE_SHELL_WASM_MODE) */ |
| 20294 | |
| 20295 | #ifndef SQLITE_UNTESTABLE |
| 20296 | if( c=='i' && strncmp(azArg[0], "imposter", n)==0 ){ |
| 20297 | char *zSql; |
| 20298 | char *zCollist = 0; |
| @@ -20478,11 +20622,11 @@ | |
| 20478 | if( c=='l' && n>2 && strncmp(azArg[0], "lint", n)==0 ){ |
| 20479 | open_db(p, 0); |
| 20480 | lintDotCommand(p, azArg, nArg); |
| 20481 | }else |
| 20482 | |
| 20483 | #if !defined(SQLITE_OMIT_LOAD_EXTENSION) && !defined(SQLITE_SHELL_WASM_MODE) |
| 20484 | if( c=='l' && strncmp(azArg[0], "load", n)==0 ){ |
| 20485 | const char *zFile, *zProc; |
| 20486 | char *zErrMsg = 0; |
| 20487 | failIfSafeMode(p, "cannot run .load in safe mode"); |
| 20488 | if( nArg<2 ){ |
| @@ -20500,11 +20644,11 @@ | |
| 20500 | rc = 1; |
| 20501 | } |
| 20502 | }else |
| 20503 | #endif |
| 20504 | |
| 20505 | #ifndef SQLITE_SHELL_WASM_MODE |
| 20506 | if( c=='l' && strncmp(azArg[0], "log", n)==0 ){ |
| 20507 | failIfSafeMode(p, "cannot run .log in safe mode"); |
| 20508 | if( nArg!=2 ){ |
| 20509 | raw_printf(stderr, "Usage: .log FILENAME\n"); |
| 20510 | rc = 1; |
| @@ -20637,11 +20781,11 @@ | |
| 20637 | rc = 1; |
| 20638 | } |
| 20639 | p->cMode = p->mode; |
| 20640 | }else |
| 20641 | |
| 20642 | #ifndef SQLITE_SHELL_WASM_MODE |
| 20643 | if( c=='n' && strcmp(azArg[0], "nonce")==0 ){ |
| 20644 | if( nArg!=2 ){ |
| 20645 | raw_printf(stderr, "Usage: .nonce NONCE\n"); |
| 20646 | rc = 1; |
| 20647 | }else if( p->zNonce==0 || strcmp(azArg[1],p->zNonce)!=0 ){ |
| @@ -20652,11 +20796,11 @@ | |
| 20652 | p->bSafeMode = 0; |
| 20653 | return 0; /* Return immediately to bypass the safe mode reset |
| 20654 | ** at the end of this procedure */ |
| 20655 | } |
| 20656 | }else |
| 20657 | #endif /* !defined(SQLITE_SHELL_WASM_MODE) */ |
| 20658 | |
| 20659 | if( c=='n' && strncmp(azArg[0], "nullvalue", n)==0 ){ |
| 20660 | if( nArg==2 ){ |
| 20661 | sqlite3_snprintf(sizeof(p->nullValue), p->nullValue, |
| 20662 | "%.*s", (int)ArraySize(p->nullValue)-1, azArg[1]); |
| @@ -20674,11 +20818,11 @@ | |
| 20674 | int openMode = SHELL_OPEN_UNSPEC; |
| 20675 | |
| 20676 | /* Check for command-line arguments */ |
| 20677 | for(iName=1; iName<nArg; iName++){ |
| 20678 | const char *z = azArg[iName]; |
| 20679 | #ifndef SQLITE_SHELL_WASM_MODE |
| 20680 | if( optionMatch(z,"new") ){ |
| 20681 | newFlag = 1; |
| 20682 | #ifdef SQLITE_HAVE_ZLIB |
| 20683 | }else if( optionMatch(z, "zip") ){ |
| 20684 | openMode = SHELL_OPEN_ZIPFILE; |
| @@ -20696,11 +20840,11 @@ | |
| 20696 | openMode = SHELL_OPEN_HEXDB; |
| 20697 | }else if( optionMatch(z, "maxsize") && iName+1<nArg ){ |
| 20698 | p->szMax = integerValue(azArg[++iName]); |
| 20699 | #endif /* SQLITE_OMIT_DESERIALIZE */ |
| 20700 | }else |
| 20701 | #endif /* !SQLITE_SHELL_WASM_MODE */ |
| 20702 | if( z[0]=='-' ){ |
| 20703 | utf8_printf(stderr, "unknown option: %s\n", z); |
| 20704 | rc = 1; |
| 20705 | goto meta_command_exit; |
| 20706 | }else if( zFN ){ |
| @@ -20724,11 +20868,11 @@ | |
| 20724 | p->szMax = 0; |
| 20725 | |
| 20726 | /* If a filename is specified, try to open it first */ |
| 20727 | if( zFN || p->openMode==SHELL_OPEN_HEXDB ){ |
| 20728 | if( newFlag && zFN && !p->bSafeMode ) shellDeleteFile(zFN); |
| 20729 | #ifndef SQLITE_SHELL_WASM_MODE |
| 20730 | if( p->bSafeMode |
| 20731 | && p->openMode!=SHELL_OPEN_HEXDB |
| 20732 | && zFN |
| 20733 | && strcmp(zFN,":memory:")!=0 |
| 20734 | ){ |
| @@ -20757,11 +20901,11 @@ | |
| 20757 | p->pAuxDb->zDbFilename = 0; |
| 20758 | open_db(p, 0); |
| 20759 | } |
| 20760 | }else |
| 20761 | |
| 20762 | #ifndef SQLITE_SHELL_WASM_MODE |
| 20763 | if( (c=='o' |
| 20764 | && (strncmp(azArg[0], "output", n)==0||strncmp(azArg[0], "once", n)==0)) |
| 20765 | || (c=='e' && n==5 && strcmp(azArg[0],"excel")==0) |
| 20766 | ){ |
| 20767 | char *zFile = 0; |
| @@ -20873,11 +21017,11 @@ | |
| 20873 | sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", zFile); |
| 20874 | } |
| 20875 | } |
| 20876 | sqlite3_free(zFile); |
| 20877 | }else |
| 20878 | #endif /* !defined(SQLITE_SHELL_WASM_MODE) */ |
| 20879 | |
| 20880 | if( c=='p' && n>=3 && strncmp(azArg[0], "parameter", n)==0 ){ |
| 20881 | open_db(p,0); |
| 20882 | if( nArg<=1 ) goto parameter_syntax_error; |
| 20883 | |
| @@ -21043,17 +21187,17 @@ | |
| 21043 | if( nArg >= 3) { |
| 21044 | strncpy(continuePrompt,azArg[2],(int)ArraySize(continuePrompt)-1); |
| 21045 | } |
| 21046 | }else |
| 21047 | |
| 21048 | #ifndef SQLITE_SHELL_WASM_MODE |
| 21049 | if( c=='q' && strncmp(azArg[0], "quit", n)==0 ){ |
| 21050 | rc = 2; |
| 21051 | }else |
| 21052 | #endif |
| 21053 | |
| 21054 | #ifndef SQLITE_SHELL_WASM_MODE |
| 21055 | if( c=='r' && n>=3 && strncmp(azArg[0], "read", n)==0 ){ |
| 21056 | FILE *inSaved = p->in; |
| 21057 | int savedLineno = p->lineno; |
| 21058 | failIfSafeMode(p, "cannot run .read in safe mode"); |
| 21059 | if( nArg!=2 ){ |
| @@ -21084,13 +21228,13 @@ | |
| 21084 | fclose(p->in); |
| 21085 | } |
| 21086 | p->in = inSaved; |
| 21087 | p->lineno = savedLineno; |
| 21088 | }else |
| 21089 | #endif /* !defined(SQLITE_SHELL_WASM_MODE) */ |
| 21090 | |
| 21091 | #ifndef SQLITE_SHELL_WASM_MODE |
| 21092 | if( c=='r' && n>=3 && strncmp(azArg[0], "restore", n)==0 ){ |
| 21093 | const char *zSrcFile; |
| 21094 | const char *zDb; |
| 21095 | sqlite3 *pSrc; |
| 21096 | sqlite3_backup *pBackup; |
| @@ -21138,11 +21282,11 @@ | |
| 21138 | utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); |
| 21139 | rc = 1; |
| 21140 | } |
| 21141 | close_db(pSrc); |
| 21142 | }else |
| 21143 | #endif /* !defined(SQLITE_SHELL_WASM_MODE) */ |
| 21144 | |
| 21145 | if( c=='s' && strncmp(azArg[0], "scanstats", n)==0 ){ |
| 21146 | if( nArg==2 ){ |
| 21147 | p->scanstatsOn = (u8)booleanValue(azArg[1]); |
| 21148 | #ifndef SQLITE_ENABLE_STMT_SCANSTATUS |
| @@ -21764,11 +21908,11 @@ | |
| 21764 | shell_exec(p, zSql, 0); |
| 21765 | } |
| 21766 | sqlite3_free(zSql); |
| 21767 | }else |
| 21768 | |
| 21769 | #if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_WASM_MODE) |
| 21770 | if( c=='s' |
| 21771 | && (strncmp(azArg[0], "shell", n)==0 || strncmp(azArg[0],"system",n)==0) |
| 21772 | ){ |
| 21773 | char *zCmd; |
| 21774 | int i, x; |
| @@ -21785,11 +21929,11 @@ | |
| 21785 | } |
| 21786 | x = zCmd!=0 ? system(zCmd) : 1; |
| 21787 | sqlite3_free(zCmd); |
| 21788 | if( x ) raw_printf(stderr, "System command returns %d\n", x); |
| 21789 | }else |
| 21790 | #endif /* !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_WASM_MODE) */ |
| 21791 | |
| 21792 | if( c=='s' && strncmp(azArg[0], "show", n)==0 ){ |
| 21793 | static const char *azBool[] = { "off", "on", "trigger", "full"}; |
| 21794 | const char *zOut; |
| 21795 | int i; |
| @@ -21965,11 +22109,11 @@ | |
| 21965 | |
| 21966 | for(ii=0; ii<nRow; ii++) sqlite3_free(azResult[ii]); |
| 21967 | sqlite3_free(azResult); |
| 21968 | }else |
| 21969 | |
| 21970 | #ifndef SQLITE_SHELL_WASM_MODE |
| 21971 | /* Begin redirecting output to the file "testcase-out.txt" */ |
| 21972 | if( c=='t' && strcmp(azArg[0],"testcase")==0 ){ |
| 21973 | output_reset(p); |
| 21974 | p->out = output_file_open("testcase-out.txt", 0); |
| 21975 | if( p->out==0 ){ |
| @@ -21979,11 +22123,11 @@ | |
| 21979 | sqlite3_snprintf(sizeof(p->zTestcase), p->zTestcase, "%s", azArg[1]); |
| 21980 | }else{ |
| 21981 | sqlite3_snprintf(sizeof(p->zTestcase), p->zTestcase, "?"); |
| 21982 | } |
| 21983 | }else |
| 21984 | #endif /* !defined(SQLITE_SHELL_WASM_MODE) */ |
| 21985 | |
| 21986 | #ifndef SQLITE_UNTESTABLE |
| 21987 | if( c=='t' && n>=8 && strncmp(azArg[0], "testctrl", n)==0 ){ |
| 21988 | static const struct { |
| 21989 | const char *zCtrlName; /* Name of a test-control option */ |
| @@ -22651,11 +22795,11 @@ | |
| 22651 | |
| 22652 | static void echo_group_input(ShellState *p, const char *zDo){ |
| 22653 | if( ShellHasFlag(p, SHFLG_Echo) ) utf8_printf(p->out, "%s\n", zDo); |
| 22654 | } |
| 22655 | |
| 22656 | #ifdef SQLITE_SHELL_WASM_MODE |
| 22657 | /* |
| 22658 | ** Alternate one_input_line() impl for wasm mode. This is not in the primary impl |
| 22659 | ** because we need the global shellState and cannot access it from that function |
| 22660 | ** without moving lots of code around (creating a larger/messier diff). |
| 22661 | */ |
| @@ -22682,11 +22826,11 @@ | |
| 22682 | shell_check_oom(zLine); |
| 22683 | memcpy(zLine, zBegin, (size_t)nZ); |
| 22684 | zLine[nZ] = 0; |
| 22685 | return zLine; |
| 22686 | } |
| 22687 | #endif /* SQLITE_SHELL_WASM_MODE */ |
| 22688 | |
| 22689 | /* |
| 22690 | ** Read input from *in and process it. If *in==0 then input |
| 22691 | ** is interactive - the user is typing it it. Otherwise, input |
| 22692 | ** is coming from a file or device. A prompt is issued and history |
| @@ -23065,11 +23209,11 @@ | |
| 23065 | # else |
| 23066 | # define SQLITE_SHELL_IS_UTF8 (1) |
| 23067 | # endif |
| 23068 | #endif |
| 23069 | |
| 23070 | #ifdef SQLITE_SHELL_WASM_MODE |
| 23071 | # define main fiddle_main |
| 23072 | #endif |
| 23073 | |
| 23074 | #if SQLITE_SHELL_IS_UTF8 |
| 23075 | int SQLITE_CDECL main(int argc, char **argv){ |
| @@ -23076,14 +23220,14 @@ | |
| 23076 | #else |
| 23077 | int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ |
| 23078 | char **argv; |
| 23079 | #endif |
| 23080 | #ifdef SQLITE_DEBUG |
| 23081 | sqlite3_uint64 mem_main_enter = sqlite3_memory_used(); |
| 23082 | #endif |
| 23083 | char *zErrMsg = 0; |
| 23084 | #ifdef SQLITE_SHELL_WASM_MODE |
| 23085 | # define data shellState |
| 23086 | #else |
| 23087 | ShellState data; |
| 23088 | #endif |
| 23089 | const char *zInitFile = 0; |
| @@ -23099,11 +23243,11 @@ | |
| 23099 | int argcToFree = 0; |
| 23100 | #endif |
| 23101 | |
| 23102 | setBinaryMode(stdin, 0); |
| 23103 | setvbuf(stderr, 0, _IONBF, 0); /* Make sure stderr is unbuffered */ |
| 23104 | #ifdef SQLITE_SHELL_WASM_MODE |
| 23105 | stdin_is_interactive = 0; |
| 23106 | stdout_is_console = 1; |
| 23107 | #else |
| 23108 | stdin_is_interactive = isatty(0); |
| 23109 | stdout_is_console = isatty(1); |
| @@ -23361,11 +23505,11 @@ | |
| 23361 | utf8_printf(stderr,"%s: Error: no database filename specified\n", Argv0); |
| 23362 | return 1; |
| 23363 | #endif |
| 23364 | } |
| 23365 | data.out = stdout; |
| 23366 | #ifndef SQLITE_SHELL_WASM_MODE |
| 23367 | sqlite3_appendvfs_init(0,0,0); |
| 23368 | #endif |
| 23369 | |
| 23370 | /* Go ahead and open the database file if it already exists. If the |
| 23371 | ** file does not exist, delay opening it. This prevents empty database |
| @@ -23629,11 +23773,11 @@ | |
| 23629 | }else{ |
| 23630 | data.in = stdin; |
| 23631 | rc = process_input(&data); |
| 23632 | } |
| 23633 | } |
| 23634 | #ifndef SQLITE_SHELL_WASM_MODE |
| 23635 | /* In WASM mode we have to leave the db state in place so that |
| 23636 | ** client code can "push" SQL into it after this call returns. */ |
| 23637 | free(azCmd); |
| 23638 | set_table_name(&data, 0); |
| 23639 | if( data.db ){ |
| @@ -23664,16 +23808,16 @@ | |
| 23664 | if( sqlite3_memory_used()>mem_main_enter ){ |
| 23665 | utf8_printf(stderr, "Memory leaked: %u bytes\n", |
| 23666 | (unsigned int)(sqlite3_memory_used()-mem_main_enter)); |
| 23667 | } |
| 23668 | #endif |
| 23669 | #endif /* !SQLITE_SHELL_WASM_MODE */ |
| 23670 | return rc; |
| 23671 | } |
| 23672 | |
| 23673 | |
| 23674 | #ifdef SQLITE_SHELL_WASM_MODE |
| 23675 | /* Only for emcc experimentation purposes. */ |
| 23676 | int fiddle_experiment(int a,int b){ |
| 23677 | return a + b; |
| 23678 | } |
| 23679 | |
| @@ -23790,6 +23934,6 @@ | |
| 23790 | shellState.wasm.zPos = zSql; |
| 23791 | process_input(&shellState); |
| 23792 | memset(&shellState.wasm, 0, sizeof(shellState.wasm)); |
| 23793 | } |
| 23794 | } |
| 23795 | #endif /* SQLITE_SHELL_WASM_MODE */ |
| 23796 |
| --- extsrc/shell.c | |
| +++ extsrc/shell.c | |
| @@ -53,10 +53,19 @@ | |
| 53 | */ |
| 54 | #if !defined(SQLITE_OS_WINRT) |
| 55 | # define SQLITE_OS_WINRT 0 |
| 56 | #endif |
| 57 | |
| 58 | /* |
| 59 | ** If SQLITE_SHELL_FIDDLE is defined then the shell is modified |
| 60 | ** somewhat for use as a WASM module in a web browser. This flag |
| 61 | ** should only be used when building the "fiddle" web application, as |
| 62 | ** the browser-mode build has much different user input requirements |
| 63 | ** and this build mode rewires the user input subsystem to account for |
| 64 | ** that. |
| 65 | */ |
| 66 | |
| 67 | /* |
| 68 | ** Warning pragmas copied from msvc.h in the core. |
| 69 | */ |
| 70 | #if defined(_MSC_VER) |
| 71 | #pragma warning(disable : 4054) |
| @@ -245,21 +254,10 @@ | |
| 254 | #else |
| 255 | # define setBinaryMode(X,Y) |
| 256 | # define setTextMode(X,Y) |
| 257 | #endif |
| 258 | |
| 259 | /* True if the timer is enabled */ |
| 260 | static int enableTimer = 0; |
| 261 | |
| 262 | /* Return the current wall-clock time */ |
| 263 | static sqlite3_int64 timeOfDay(void){ |
| @@ -717,11 +715,11 @@ | |
| 715 | ** |
| 716 | ** The result is stored in space obtained from malloc() and must either |
| 717 | ** be freed by the caller or else passed back into this routine via the |
| 718 | ** zPrior argument for reuse. |
| 719 | */ |
| 720 | #ifndef SQLITE_SHELL_FIDDLE |
| 721 | static char *one_input_line(FILE *in, char *zPrior, int isContinuation){ |
| 722 | char *zPrompt; |
| 723 | char *zResult; |
| 724 | if( in!=0 ){ |
| 725 | zResult = local_getline(zPrior, in); |
| @@ -737,11 +735,11 @@ | |
| 735 | if( zResult && *zResult ) shell_add_history(zResult); |
| 736 | #endif |
| 737 | } |
| 738 | return zResult; |
| 739 | } |
| 740 | #endif /* !SQLITE_SHELL_FIDDLE */ |
| 741 | |
| 742 | /* |
| 743 | ** Return the value of a hexadecimal digit. Return -1 if the input |
| 744 | ** is not a hex digit. |
| 745 | */ |
| @@ -3794,10 +3792,11 @@ | |
| 3792 | #define re_compile sqlite3re_compile |
| 3793 | #define re_free sqlite3re_free |
| 3794 | |
| 3795 | /* The end-of-input character */ |
| 3796 | #define RE_EOF 0 /* End of input */ |
| 3797 | #define RE_START 0xfffffff /* Start of input - larger than an UTF-8 */ |
| 3798 | |
| 3799 | /* The NFA is implemented as sequence of opcodes taken from the following |
| 3800 | ** set. Each opcode has a single integer argument. |
| 3801 | */ |
| 3802 | #define RE_OP_MATCH 1 /* Match the one character in the argument */ |
| @@ -3815,10 +3814,37 @@ | |
| 3814 | #define RE_OP_DIGIT 13 /* digit: [0-9] */ |
| 3815 | #define RE_OP_NOTDIGIT 14 /* Not a digit */ |
| 3816 | #define RE_OP_SPACE 15 /* space: [ \t\n\r\v\f] */ |
| 3817 | #define RE_OP_NOTSPACE 16 /* Not a digit */ |
| 3818 | #define RE_OP_BOUNDARY 17 /* Boundary between word and non-word */ |
| 3819 | #define RE_OP_ATSTART 18 /* Currently at the start of the string */ |
| 3820 | |
| 3821 | #if defined(SQLITE_DEBUG) |
| 3822 | /* Opcode names used for symbolic debugging */ |
| 3823 | static const char *ReOpName[] = { |
| 3824 | "EOF", |
| 3825 | "MATCH", |
| 3826 | "ANY", |
| 3827 | "ANYSTAR", |
| 3828 | "FORK", |
| 3829 | "GOTO", |
| 3830 | "ACCEPT", |
| 3831 | "CC_INC", |
| 3832 | "CC_EXC", |
| 3833 | "CC_VALUE", |
| 3834 | "CC_RANGE", |
| 3835 | "WORD", |
| 3836 | "NOTWORD", |
| 3837 | "DIGIT", |
| 3838 | "NOTDIGIT", |
| 3839 | "SPACE", |
| 3840 | "NOTSPACE", |
| 3841 | "BOUNDARY", |
| 3842 | "ATSTART", |
| 3843 | }; |
| 3844 | #endif /* SQLITE_DEBUG */ |
| 3845 | |
| 3846 | |
| 3847 | /* Each opcode is a "state" in the NFA */ |
| 3848 | typedef unsigned short ReStateNumber; |
| 3849 | |
| 3850 | /* Because this is an NFA and not a DFA, multiple states can be active at |
| @@ -3849,11 +3875,11 @@ | |
| 3875 | const char *zErr; /* Error message to return */ |
| 3876 | char *aOp; /* Operators for the virtual machine */ |
| 3877 | int *aArg; /* Arguments to each operator */ |
| 3878 | unsigned (*xNextChar)(ReInput*); /* Next character function */ |
| 3879 | unsigned char zInit[12]; /* Initial text to match */ |
| 3880 | int nInit; /* Number of bytes in zInit */ |
| 3881 | unsigned nState; /* Number of entries in aOp[] and aArg[] */ |
| 3882 | unsigned nAlloc; /* Slots allocated for aOp[] and aArg[] */ |
| 3883 | }; |
| 3884 | |
| 3885 | /* Add a state to the given state set if it is not already there */ |
| @@ -3922,11 +3948,11 @@ | |
| 3948 | ReStateSet aStateSet[2], *pThis, *pNext; |
| 3949 | ReStateNumber aSpace[100]; |
| 3950 | ReStateNumber *pToFree; |
| 3951 | unsigned int i = 0; |
| 3952 | unsigned int iSwap = 0; |
| 3953 | int c = RE_START; |
| 3954 | int cPrev = 0; |
| 3955 | int rc = 0; |
| 3956 | ReInput in; |
| 3957 | |
| 3958 | in.z = zIn; |
| @@ -3941,10 +3967,11 @@ | |
| 3967 | strncmp((const char*)zIn+in.i, (const char*)pRe->zInit, pRe->nInit)!=0) |
| 3968 | ){ |
| 3969 | in.i++; |
| 3970 | } |
| 3971 | if( in.i+pRe->nInit>in.mx ) return 0; |
| 3972 | c = RE_START-1; |
| 3973 | } |
| 3974 | |
| 3975 | if( pRe->nState<=(sizeof(aSpace)/(sizeof(aSpace[0])*2)) ){ |
| 3976 | pToFree = 0; |
| 3977 | aStateSet[0].aState = aSpace; |
| @@ -3968,10 +3995,14 @@ | |
| 3995 | int x = pThis->aState[i]; |
| 3996 | switch( pRe->aOp[x] ){ |
| 3997 | case RE_OP_MATCH: { |
| 3998 | if( pRe->aArg[x]==c ) re_add_state(pNext, x+1); |
| 3999 | break; |
| 4000 | } |
| 4001 | case RE_OP_ATSTART: { |
| 4002 | if( cPrev==RE_START ) re_add_state(pThis, x+1); |
| 4003 | break; |
| 4004 | } |
| 4005 | case RE_OP_ANY: { |
| 4006 | if( c!=0 ) re_add_state(pNext, x+1); |
| 4007 | break; |
| 4008 | } |
| @@ -4050,11 +4081,13 @@ | |
| 4081 | } |
| 4082 | } |
| 4083 | } |
| 4084 | } |
| 4085 | for(i=0; i<pNext->nState; i++){ |
| 4086 | int x = pNext->aState[i]; |
| 4087 | while( pRe->aOp[x]==RE_OP_GOTO ) x += pRe->aArg[x]; |
| 4088 | if( pRe->aOp[x]==RE_OP_ACCEPT ){ rc = 1; break; } |
| 4089 | } |
| 4090 | re_match_end: |
| 4091 | sqlite3_free(pToFree); |
| 4092 | return rc; |
| 4093 | } |
| @@ -4205,11 +4238,10 @@ | |
| 4238 | const char *zErr; |
| 4239 | while( (c = p->xNextChar(&p->sIn))!=0 ){ |
| 4240 | iStart = p->nState; |
| 4241 | switch( c ){ |
| 4242 | case '|': |
| 4243 | case ')': { |
| 4244 | p->sIn.i--; |
| 4245 | return 0; |
| 4246 | } |
| 4247 | case '(': { |
| @@ -4241,10 +4273,18 @@ | |
| 4273 | } |
| 4274 | case '?': { |
| 4275 | if( iPrev<0 ) return "'?' without operand"; |
| 4276 | re_insert(p, iPrev, RE_OP_FORK, p->nState - iPrev+1); |
| 4277 | break; |
| 4278 | } |
| 4279 | case '$': { |
| 4280 | re_append(p, RE_OP_MATCH, RE_EOF); |
| 4281 | break; |
| 4282 | } |
| 4283 | case '^': { |
| 4284 | re_append(p, RE_OP_ATSTART, 0); |
| 4285 | break; |
| 4286 | } |
| 4287 | case '{': { |
| 4288 | int m = 0, n = 0; |
| 4289 | int sz, j; |
| 4290 | if( iPrev<0 ) return "'{m,n}' without operand"; |
| @@ -4260,10 +4300,11 @@ | |
| 4300 | p->sIn.i++; |
| 4301 | sz = p->nState - iPrev; |
| 4302 | if( m==0 ){ |
| 4303 | if( n==0 ) return "both m and n are zero in '{m,n}'"; |
| 4304 | re_insert(p, iPrev, RE_OP_FORK, sz+1); |
| 4305 | iPrev++; |
| 4306 | n--; |
| 4307 | }else{ |
| 4308 | for(j=1; j<m; j++) re_copy(p, iPrev, sz); |
| 4309 | } |
| 4310 | for(j=m; j<n; j++){ |
| @@ -4378,15 +4419,11 @@ | |
| 4419 | zErr = re_subcompile_re(pRe); |
| 4420 | if( zErr ){ |
| 4421 | re_free(pRe); |
| 4422 | return zErr; |
| 4423 | } |
| 4424 | if( pRe->sIn.i>=pRe->sIn.mx ){ |
| 4425 | re_append(pRe, RE_OP_ACCEPT, 0); |
| 4426 | *ppRe = pRe; |
| 4427 | }else{ |
| 4428 | re_free(pRe); |
| 4429 | return "unrecognized character"; |
| @@ -4407,11 +4444,11 @@ | |
| 4444 | pRe->zInit[j++] = (unsigned char)x; |
| 4445 | }else if( x<=0xfff ){ |
| 4446 | pRe->zInit[j++] = (unsigned char)(0xc0 | (x>>6)); |
| 4447 | pRe->zInit[j++] = 0x80 | (x&0x3f); |
| 4448 | }else if( x<=0xffff ){ |
| 4449 | pRe->zInit[j++] = (unsigned char)(0xe0 | (x>>12)); |
| 4450 | pRe->zInit[j++] = 0x80 | ((x>>6)&0x3f); |
| 4451 | pRe->zInit[j++] = 0x80 | (x&0x3f); |
| 4452 | }else{ |
| 4453 | break; |
| 4454 | } |
| @@ -4465,10 +4502,71 @@ | |
| 4502 | } |
| 4503 | if( setAux ){ |
| 4504 | sqlite3_set_auxdata(context, 0, pRe, (void(*)(void*))re_free); |
| 4505 | } |
| 4506 | } |
| 4507 | |
| 4508 | #if defined(SQLITE_DEBUG) |
| 4509 | /* |
| 4510 | ** This function is used for testing and debugging only. It is only available |
| 4511 | ** if the SQLITE_DEBUG compile-time option is used. |
| 4512 | ** |
| 4513 | ** Compile a regular expression and then convert the compiled expression into |
| 4514 | ** text and return that text. |
| 4515 | */ |
| 4516 | static void re_bytecode_func( |
| 4517 | sqlite3_context *context, |
| 4518 | int argc, |
| 4519 | sqlite3_value **argv |
| 4520 | ){ |
| 4521 | const char *zPattern; |
| 4522 | const char *zErr; |
| 4523 | ReCompiled *pRe; |
| 4524 | sqlite3_str *pStr; |
| 4525 | int i; |
| 4526 | int n; |
| 4527 | char *z; |
| 4528 | |
| 4529 | zPattern = (const char*)sqlite3_value_text(argv[0]); |
| 4530 | if( zPattern==0 ) return; |
| 4531 | zErr = re_compile(&pRe, zPattern, sqlite3_user_data(context)!=0); |
| 4532 | if( zErr ){ |
| 4533 | re_free(pRe); |
| 4534 | sqlite3_result_error(context, zErr, -1); |
| 4535 | return; |
| 4536 | } |
| 4537 | if( pRe==0 ){ |
| 4538 | sqlite3_result_error_nomem(context); |
| 4539 | return; |
| 4540 | } |
| 4541 | pStr = sqlite3_str_new(0); |
| 4542 | if( pStr==0 ) goto re_bytecode_func_err; |
| 4543 | if( pRe->nInit>0 ){ |
| 4544 | sqlite3_str_appendf(pStr, "INIT "); |
| 4545 | for(i=0; i<pRe->nInit; i++){ |
| 4546 | sqlite3_str_appendf(pStr, "%02x", pRe->zInit[i]); |
| 4547 | } |
| 4548 | sqlite3_str_appendf(pStr, "\n"); |
| 4549 | } |
| 4550 | for(i=0; (unsigned)i<pRe->nState; i++){ |
| 4551 | sqlite3_str_appendf(pStr, "%-8s %4d\n", |
| 4552 | ReOpName[(unsigned char)pRe->aOp[i]], pRe->aArg[i]); |
| 4553 | } |
| 4554 | n = sqlite3_str_length(pStr); |
| 4555 | z = sqlite3_str_finish(pStr); |
| 4556 | if( n==0 ){ |
| 4557 | sqlite3_free(z); |
| 4558 | }else{ |
| 4559 | sqlite3_result_text(context, z, n-1, sqlite3_free); |
| 4560 | } |
| 4561 | |
| 4562 | re_bytecode_func_err: |
| 4563 | re_free(pRe); |
| 4564 | } |
| 4565 | |
| 4566 | #endif /* SQLITE_DEBUG */ |
| 4567 | |
| 4568 | |
| 4569 | /* |
| 4570 | ** Invoke this routine to register the regexp() function with the |
| 4571 | ** SQLite database connection. |
| 4572 | */ |
| @@ -4490,16 +4588,23 @@ | |
| 4588 | /* The regexpi(PATTERN,STRING) function is a case-insensitive version |
| 4589 | ** of regexp(PATTERN,STRING). */ |
| 4590 | rc = sqlite3_create_function(db, "regexpi", 2, |
| 4591 | SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, |
| 4592 | (void*)db, re_sql_func, 0, 0); |
| 4593 | #if defined(SQLITE_DEBUG) |
| 4594 | if( rc==SQLITE_OK ){ |
| 4595 | rc = sqlite3_create_function(db, "regexp_bytecode", 1, |
| 4596 | SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, |
| 4597 | 0, re_bytecode_func, 0, 0); |
| 4598 | } |
| 4599 | #endif /* SQLITE_DEBUG */ |
| 4600 | } |
| 4601 | return rc; |
| 4602 | } |
| 4603 | |
| 4604 | /************************* End ../ext/misc/regexp.c ********************/ |
| 4605 | #ifndef SQLITE_SHELL_FIDDLE |
| 4606 | /************************* Begin ../ext/misc/fileio.c ******************/ |
| 4607 | /* |
| 4608 | ** 2014-06-13 |
| 4609 | ** |
| 4610 | ** The author disclaims copyright to this source code. In place of |
| @@ -10047,10 +10152,14 @@ | |
| 10152 | ** Return true if zId must be quoted in order to use it as an SQL |
| 10153 | ** identifier, or false otherwise. |
| 10154 | */ |
| 10155 | static int idxIdentifierRequiresQuotes(const char *zId){ |
| 10156 | int i; |
| 10157 | int nId = STRLEN(zId); |
| 10158 | |
| 10159 | if( sqlite3_keyword_check(zId, nId) ) return 1; |
| 10160 | |
| 10161 | for(i=0; zId[i]; i++){ |
| 10162 | if( !(zId[i]=='_') |
| 10163 | && !(zId[i]>='0' && zId[i]<='9') |
| 10164 | && !(zId[i]>='a' && zId[i]<='z') |
| 10165 | && !(zId[i]>='A' && zId[i]<='Z') |
| @@ -12248,19 +12357,19 @@ | |
| 12357 | int nIndent; /* Size of array aiIndent[] */ |
| 12358 | int iIndent; /* Index of current op in aiIndent[] */ |
| 12359 | char *zNonce; /* Nonce for temporary safe-mode excapes */ |
| 12360 | EQPGraph sGraph; /* Information for the graphical EXPLAIN QUERY PLAN */ |
| 12361 | ExpertInfo expert; /* Valid if previous command was ".expert OPT..." */ |
| 12362 | #ifdef SQLITE_SHELL_FIDDLE |
| 12363 | struct { |
| 12364 | const char * zInput; /* Input string from wasm/JS proxy */ |
| 12365 | const char * zPos; /* Cursor pos into zInput */ |
| 12366 | } wasm; |
| 12367 | #endif |
| 12368 | }; |
| 12369 | |
| 12370 | #ifdef SQLITE_SHELL_FIDDLE |
| 12371 | static ShellState shellState; |
| 12372 | #endif |
| 12373 | |
| 12374 | |
| 12375 | /* Allowed values for ShellState.autoEQP |
| @@ -12588,14 +12697,27 @@ | |
| 12697 | /* |
| 12698 | ** Output the given string as a hex-encoded blob (eg. X'1234' ) |
| 12699 | */ |
| 12700 | static void output_hex_blob(FILE *out, const void *pBlob, int nBlob){ |
| 12701 | int i; |
| 12702 | unsigned char *aBlob = (unsigned char*)pBlob; |
| 12703 | |
| 12704 | char *zStr = sqlite3_malloc(nBlob*2 + 1); |
| 12705 | shell_check_oom(zStr); |
| 12706 | |
| 12707 | for(i=0; i<nBlob; i++){ |
| 12708 | static const char aHex[] = { |
| 12709 | '0', '1', '2', '3', '4', '5', '6', '7', |
| 12710 | '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' |
| 12711 | }; |
| 12712 | zStr[i*2] = aHex[ (aBlob[i] >> 4) ]; |
| 12713 | zStr[i*2+1] = aHex[ (aBlob[i] & 0x0F) ]; |
| 12714 | } |
| 12715 | zStr[i*2] = '\0'; |
| 12716 | |
| 12717 | raw_printf(out,"X'%s'", zStr); |
| 12718 | sqlite3_free(zStr); |
| 12719 | } |
| 12720 | |
| 12721 | /* |
| 12722 | ** Find a string that is not found anywhere in z[]. Return a pointer |
| 12723 | ** to that string. |
| @@ -12924,11 +13046,11 @@ | |
| 13046 | UNUSED_PARAMETER(zA2); |
| 13047 | UNUSED_PARAMETER(zA3); |
| 13048 | UNUSED_PARAMETER(zA4); |
| 13049 | switch( op ){ |
| 13050 | case SQLITE_ATTACH: { |
| 13051 | #ifndef SQLITE_SHELL_FIDDLE |
| 13052 | /* In WASM builds the filesystem is a virtual sandbox, so |
| 13053 | ** there's no harm in using ATTACH. */ |
| 13054 | failIfSafeMode(p, "cannot run ATTACH in safe mode"); |
| 13055 | #endif |
| 13056 | break; |
| @@ -12997,19 +13119,41 @@ | |
| 13119 | /* |
| 13120 | ** Print a schema statement. Part of MODE_Semi and MODE_Pretty output. |
| 13121 | ** |
| 13122 | ** This routine converts some CREATE TABLE statements for shadow tables |
| 13123 | ** in FTS3/4/5 into CREATE TABLE IF NOT EXISTS statements. |
| 13124 | ** |
| 13125 | ** If the schema statement in z[] contains a start-of-comment and if |
| 13126 | ** sqlite3_complete() returns false, try to terminate the comment before |
| 13127 | ** printing the result. https://sqlite.org/forum/forumpost/d7be961c5c |
| 13128 | */ |
| 13129 | static void printSchemaLine(FILE *out, const char *z, const char *zTail){ |
| 13130 | char *zToFree = 0; |
| 13131 | if( z==0 ) return; |
| 13132 | if( zTail==0 ) return; |
| 13133 | if( zTail[0]==';' && (strstr(z, "/*")!=0 || strstr(z,"--")!=0) ){ |
| 13134 | const char *zOrig = z; |
| 13135 | static const char *azTerm[] = { "", "*/", "\n" }; |
| 13136 | int i; |
| 13137 | for(i=0; i<ArraySize(azTerm); i++){ |
| 13138 | char *zNew = sqlite3_mprintf("%s%s;", zOrig, azTerm[i]); |
| 13139 | if( sqlite3_complete(zNew) ){ |
| 13140 | size_t n = strlen(zNew); |
| 13141 | zNew[n-1] = 0; |
| 13142 | zToFree = zNew; |
| 13143 | z = zNew; |
| 13144 | break; |
| 13145 | } |
| 13146 | sqlite3_free(zNew); |
| 13147 | } |
| 13148 | } |
| 13149 | if( sqlite3_strglob("CREATE TABLE ['\"]*", z)==0 ){ |
| 13150 | utf8_printf(out, "CREATE TABLE IF NOT EXISTS %s%s", z+13, zTail); |
| 13151 | }else{ |
| 13152 | utf8_printf(out, "%s%s", z, zTail); |
| 13153 | } |
| 13154 | sqlite3_free(zToFree); |
| 13155 | } |
| 13156 | static void printSchemaLineN(FILE *out, char *z, int n, const char *zTail){ |
| 13157 | char c = z[n]; |
| 13158 | z[n] = 0; |
| 13159 | printSchemaLine(out, z, zTail); |
| @@ -15338,11 +15482,11 @@ | |
| 15482 | ** There must be two or more spaces between the end of the command and the |
| 15483 | ** start of the description of what that command does. |
| 15484 | */ |
| 15485 | static const char *(azHelp[]) = { |
| 15486 | #if defined(SQLITE_HAVE_ZLIB) && !defined(SQLITE_OMIT_VIRTUALTABLE) \ |
| 15487 | && !defined(SQLITE_SHELL_FIDDLE) |
| 15488 | ".archive ... Manage SQL archives", |
| 15489 | " Each command must have exactly one of the following options:", |
| 15490 | " -c, --create Create a new archive", |
| 15491 | " -u, --update Add or update files with changed mtime", |
| 15492 | " -i, --insert Like -u but always add even if unchanged", |
| @@ -15364,23 +15508,23 @@ | |
| 15508 | " http://sqlite.org/cli.html#sqlite_archive_support", |
| 15509 | #endif |
| 15510 | #ifndef SQLITE_OMIT_AUTHORIZATION |
| 15511 | ".auth ON|OFF Show authorizer callbacks", |
| 15512 | #endif |
| 15513 | #ifndef SQLITE_SHELL_FIDDLE |
| 15514 | ".backup ?DB? FILE Backup DB (default \"main\") to FILE", |
| 15515 | " Options:", |
| 15516 | " --append Use the appendvfs", |
| 15517 | " --async Write to FILE without journal and fsync()", |
| 15518 | #endif |
| 15519 | ".bail on|off Stop after hitting an error. Default OFF", |
| 15520 | ".binary on|off Turn binary output on or off. Default OFF", |
| 15521 | #ifndef SQLITE_SHELL_FIDDLE |
| 15522 | ".cd DIRECTORY Change the working directory to DIRECTORY", |
| 15523 | #endif |
| 15524 | ".changes on|off Show number of rows changed by SQL", |
| 15525 | #ifndef SQLITE_SHELL_FIDDLE |
| 15526 | ".check GLOB Fail if output since .testcase does not match", |
| 15527 | ".clone NEWDB Clone data into NEWDB from the existing database", |
| 15528 | #endif |
| 15529 | ".connection [close] [#] Open or close an auxiliary database connection", |
| 15530 | ".databases List names and files of attached databases", |
| @@ -15402,15 +15546,15 @@ | |
| 15546 | #ifdef SQLITE_DEBUG |
| 15547 | " test Show raw EXPLAIN QUERY PLAN output", |
| 15548 | " trace Like \"full\" but enable \"PRAGMA vdbe_trace\"", |
| 15549 | #endif |
| 15550 | " trigger Like \"full\" but also show trigger bytecode", |
| 15551 | #ifndef SQLITE_SHELL_FIDDLE |
| 15552 | ".excel Display the output of next command in spreadsheet", |
| 15553 | " --bom Put a UTF8 byte-order mark on intermediate file", |
| 15554 | #endif |
| 15555 | #ifndef SQLITE_SHELL_FIDDLE |
| 15556 | ".exit ?CODE? Exit this program with return-code CODE", |
| 15557 | #endif |
| 15558 | ".expert EXPERIMENTAL. Suggest indexes for queries", |
| 15559 | ".explain ?on|off|auto? Change the EXPLAIN formatting mode. Default: auto", |
| 15560 | ".filectrl CMD ... Run various sqlite3_file_control() operations", |
| @@ -15417,11 +15561,11 @@ | |
| 15561 | " --schema SCHEMA Use SCHEMA instead of \"main\"", |
| 15562 | " --help Show CMD details", |
| 15563 | ".fullschema ?--indent? Show schema and the content of sqlite_stat tables", |
| 15564 | ".headers on|off Turn display of headers on or off", |
| 15565 | ".help ?-all? ?PATTERN? Show help text for PATTERN", |
| 15566 | #ifndef SQLITE_SHELL_FIDDLE |
| 15567 | ".import FILE TABLE Import data from FILE into TABLE", |
| 15568 | " Options:", |
| 15569 | " --ascii Use \\037 and \\036 as column and row separators", |
| 15570 | " --csv Use , and \\n as column and row separators", |
| 15571 | " --skip N Skip the first N rows of input", |
| @@ -15446,14 +15590,14 @@ | |
| 15590 | #endif |
| 15591 | ".limit ?LIMIT? ?VAL? Display or change the value of an SQLITE_LIMIT", |
| 15592 | ".lint OPTIONS Report potential schema issues.", |
| 15593 | " Options:", |
| 15594 | " fkey-indexes Find missing foreign key indexes", |
| 15595 | #if !defined(SQLITE_OMIT_LOAD_EXTENSION) && !defined(SQLITE_SHELL_FIDDLE) |
| 15596 | ".load FILE ?ENTRY? Load an extension library", |
| 15597 | #endif |
| 15598 | #ifndef SQLITE_SHELL_FIDDLE |
| 15599 | ".log FILE|off Turn logging on or off. FILE can be stderr/stdout", |
| 15600 | #endif |
| 15601 | ".mode MODE ?OPTIONS? Set output mode", |
| 15602 | " MODE is one of:", |
| 15603 | " ascii Columns/rows delimited by 0x1F and 0x1E", |
| @@ -15476,15 +15620,15 @@ | |
| 15620 | " --wordwrap B Wrap or not at word boundaries per B (on/off)", |
| 15621 | " --ww Shorthand for \"--wordwrap 1\"", |
| 15622 | " --quote Quote output text as SQL literals", |
| 15623 | " --noquote Do not quote output text", |
| 15624 | " TABLE The name of SQL table used for \"insert\" mode", |
| 15625 | #ifndef SQLITE_SHELL_FIDDLE |
| 15626 | ".nonce STRING Suspend safe mode for one command if nonce matches", |
| 15627 | #endif |
| 15628 | ".nullvalue STRING Use STRING in place of NULL values", |
| 15629 | #ifndef SQLITE_SHELL_FIDDLE |
| 15630 | ".once ?OPTIONS? ?FILE? Output for the next SQL command only to FILE", |
| 15631 | " If FILE begins with '|' then open as a pipe", |
| 15632 | " --bom Put a UTF8 byte-order mark at the beginning", |
| 15633 | " -e Send output to the system text editor", |
| 15634 | " -x Send output as CSV to a spreadsheet (same as \".excel\")", |
| @@ -15502,11 +15646,11 @@ | |
| 15646 | #endif |
| 15647 | " --new Initialize FILE to an empty database", |
| 15648 | " --nofollow Do not follow symbolic links", |
| 15649 | " --readonly Open FILE readonly", |
| 15650 | " --zip FILE is a ZIP archive", |
| 15651 | #ifndef SQLITE_SHELL_FIDDLE |
| 15652 | ".output ?FILE? Send output to FILE or stdout if FILE is omitted", |
| 15653 | " If FILE begins with '|' then open it as a pipe.", |
| 15654 | " Options:", |
| 15655 | " --bom Prefix output with a UTF8 byte-order mark", |
| 15656 | " -e Send output to the system text editor", |
| @@ -15526,11 +15670,11 @@ | |
| 15670 | " --once Do no more than one progress interrupt", |
| 15671 | " --quiet|-q No output except at interrupts", |
| 15672 | " --reset Reset the count for each input and interrupt", |
| 15673 | #endif |
| 15674 | ".prompt MAIN CONTINUE Replace the standard prompts", |
| 15675 | #ifndef SQLITE_SHELL_FIDDLE |
| 15676 | ".quit Exit this program", |
| 15677 | ".read FILE Read input from FILE or command output", |
| 15678 | " If FILE begins with \"|\", it is a command that generates the input.", |
| 15679 | #endif |
| 15680 | #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB) |
| @@ -15539,11 +15683,11 @@ | |
| 15683 | " --recovery-db NAME Store recovery metadata in database file NAME", |
| 15684 | " --lost-and-found TABLE Alternative name for the lost-and-found table", |
| 15685 | " --no-rowids Do not attempt to recover rowid values", |
| 15686 | " that are not also INTEGER PRIMARY KEYs", |
| 15687 | #endif |
| 15688 | #ifndef SQLITE_SHELL_FIDDLE |
| 15689 | ".restore ?DB? FILE Restore content of DB (default \"main\") from FILE", |
| 15690 | ".save ?OPTIONS? FILE Write database to FILE (an alias for .backup ...)", |
| 15691 | #endif |
| 15692 | ".scanstats on|off Turn sqlite3_stmt_scanstatus() metrics on or off", |
| 15693 | ".schema ?PATTERN? Show the CREATE statements matching PATTERN", |
| @@ -15576,24 +15720,24 @@ | |
| 15720 | " --sha3-224 Use the sha3-224 algorithm", |
| 15721 | " --sha3-256 Use the sha3-256 algorithm (default)", |
| 15722 | " --sha3-384 Use the sha3-384 algorithm", |
| 15723 | " --sha3-512 Use the sha3-512 algorithm", |
| 15724 | " Any other argument is a LIKE pattern for tables to hash", |
| 15725 | #if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_FIDDLE) |
| 15726 | ".shell CMD ARGS... Run CMD ARGS... in a system shell", |
| 15727 | #endif |
| 15728 | ".show Show the current values for various settings", |
| 15729 | ".stats ?ARG? Show stats or turn stats on or off", |
| 15730 | " off Turn off automatic stat display", |
| 15731 | " on Turn on automatic stat display", |
| 15732 | " stmt Show statement stats", |
| 15733 | " vmstep Show the virtual machine step count only", |
| 15734 | #if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_FIDDLE) |
| 15735 | ".system CMD ARGS... Run CMD ARGS... in a system shell", |
| 15736 | #endif |
| 15737 | ".tables ?TABLE? List names of tables matching LIKE pattern TABLE", |
| 15738 | #ifndef SQLITE_SHELL_FIDDLE |
| 15739 | ".testcase NAME Begin redirecting output to 'testcase-out.txt'", |
| 15740 | #endif |
| 15741 | ".testctrl CMD ... Run various sqlite3_test_control() operations", |
| 15742 | " Run \".testctrl\" with no arguments for details", |
| 15743 | ".timeout MS Try opening locked tables for MS milliseconds", |
| @@ -16142,11 +16286,11 @@ | |
| 16286 | sqlite3_uint_init(p->db, 0, 0); |
| 16287 | sqlite3_decimal_init(p->db, 0, 0); |
| 16288 | sqlite3_regexp_init(p->db, 0, 0); |
| 16289 | sqlite3_ieee_init(p->db, 0, 0); |
| 16290 | sqlite3_series_init(p->db, 0, 0); |
| 16291 | #ifndef SQLITE_SHELL_FIDDLE |
| 16292 | sqlite3_fileio_init(p->db, 0, 0); |
| 16293 | sqlite3_completion_init(p->db, 0, 0); |
| 16294 | #endif |
| 16295 | #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB) |
| 16296 | sqlite3_dbdata_init(p->db, 0, 0); |
| @@ -19272,19 +19416,19 @@ | |
| 19416 | } |
| 19417 | }else |
| 19418 | #endif |
| 19419 | |
| 19420 | #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_HAVE_ZLIB) \ |
| 19421 | && !defined(SQLITE_SHELL_FIDDLE) |
| 19422 | if( c=='a' && strncmp(azArg[0], "archive", n)==0 ){ |
| 19423 | open_db(p, 0); |
| 19424 | failIfSafeMode(p, "cannot run .archive in safe mode"); |
| 19425 | rc = arDotCommand(p, 0, azArg, nArg); |
| 19426 | }else |
| 19427 | #endif |
| 19428 | |
| 19429 | #ifndef SQLITE_SHELL_FIDDLE |
| 19430 | if( (c=='b' && n>=3 && strncmp(azArg[0], "backup", n)==0) |
| 19431 | || (c=='s' && n>=3 && strncmp(azArg[0], "save", n)==0) |
| 19432 | ){ |
| 19433 | const char *zDestFile = 0; |
| 19434 | const char *zDb = 0; |
| @@ -19349,11 +19493,11 @@ | |
| 19493 | utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(pDest)); |
| 19494 | rc = 1; |
| 19495 | } |
| 19496 | close_db(pDest); |
| 19497 | }else |
| 19498 | #endif /* !defined(SQLITE_SHELL_FIDDLE) */ |
| 19499 | |
| 19500 | if( c=='b' && n>=3 && strncmp(azArg[0], "bail", n)==0 ){ |
| 19501 | if( nArg==2 ){ |
| 19502 | bail_on_error = booleanValue(azArg[1]); |
| 19503 | }else{ |
| @@ -19380,11 +19524,11 @@ | |
| 19524 | */ |
| 19525 | if( c=='b' && n>=3 && strncmp(azArg[0], "breakpoint", n)==0 ){ |
| 19526 | test_breakpoint(); |
| 19527 | }else |
| 19528 | |
| 19529 | #ifndef SQLITE_SHELL_FIDDLE |
| 19530 | if( c=='c' && strcmp(azArg[0],"cd")==0 ){ |
| 19531 | failIfSafeMode(p, "cannot run .cd in safe mode"); |
| 19532 | if( nArg==2 ){ |
| 19533 | #if defined(_WIN32) || defined(WIN32) |
| 19534 | wchar_t *z = sqlite3_win32_utf8_to_unicode(azArg[1]); |
| @@ -19400,11 +19544,11 @@ | |
| 19544 | }else{ |
| 19545 | raw_printf(stderr, "Usage: .cd DIRECTORY\n"); |
| 19546 | rc = 1; |
| 19547 | } |
| 19548 | }else |
| 19549 | #endif /* !defined(SQLITE_SHELL_FIDDLE) */ |
| 19550 | |
| 19551 | if( c=='c' && n>=3 && strncmp(azArg[0], "changes", n)==0 ){ |
| 19552 | if( nArg==2 ){ |
| 19553 | setOrClearFlag(p, SHFLG_CountChanges, azArg[1]); |
| 19554 | }else{ |
| @@ -19411,11 +19555,11 @@ | |
| 19555 | raw_printf(stderr, "Usage: .changes on|off\n"); |
| 19556 | rc = 1; |
| 19557 | } |
| 19558 | }else |
| 19559 | |
| 19560 | #ifndef SQLITE_SHELL_FIDDLE |
| 19561 | /* Cancel output redirection, if it is currently set (by .testcase) |
| 19562 | ** Then read the content of the testcase-out.txt file and compare against |
| 19563 | ** azArg[1]. If there are differences, report an error and exit. |
| 19564 | */ |
| 19565 | if( c=='c' && n>=3 && strncmp(azArg[0], "check", n)==0 ){ |
| @@ -19436,23 +19580,23 @@ | |
| 19580 | utf8_printf(stdout, "testcase-%s ok\n", p->zTestcase); |
| 19581 | p->nCheck++; |
| 19582 | } |
| 19583 | sqlite3_free(zRes); |
| 19584 | }else |
| 19585 | #endif /* !defined(SQLITE_SHELL_FIDDLE) */ |
| 19586 | |
| 19587 | #ifndef SQLITE_SHELL_FIDDLE |
| 19588 | if( c=='c' && strncmp(azArg[0], "clone", n)==0 ){ |
| 19589 | failIfSafeMode(p, "cannot run .clone in safe mode"); |
| 19590 | if( nArg==2 ){ |
| 19591 | tryToClone(p, azArg[1]); |
| 19592 | }else{ |
| 19593 | raw_printf(stderr, "Usage: .clone FILENAME\n"); |
| 19594 | rc = 1; |
| 19595 | } |
| 19596 | }else |
| 19597 | #endif /* !defined(SQLITE_SHELL_FIDDLE) */ |
| 19598 | |
| 19599 | if( c=='c' && strncmp(azArg[0], "connection", n)==0 ){ |
| 19600 | if( nArg==1 ){ |
| 19601 | /* List available connections */ |
| 19602 | int i; |
| @@ -19737,11 +19881,11 @@ | |
| 19881 | raw_printf(stderr, "Usage: .eqp off|on|trace|trigger|full\n"); |
| 19882 | rc = 1; |
| 19883 | } |
| 19884 | }else |
| 19885 | |
| 19886 | #ifndef SQLITE_SHELL_FIDDLE |
| 19887 | if( c=='e' && strncmp(azArg[0], "exit", n)==0 ){ |
| 19888 | if( nArg>1 && (rc = (int)integerValue(azArg[1]))!=0 ) exit(rc); |
| 19889 | rc = 2; |
| 19890 | }else |
| 19891 | #endif |
| @@ -19997,11 +20141,11 @@ | |
| 20141 | }else{ |
| 20142 | showHelp(p->out, 0); |
| 20143 | } |
| 20144 | }else |
| 20145 | |
| 20146 | #ifndef SQLITE_SHELL_FIDDLE |
| 20147 | if( c=='i' && strncmp(azArg[0], "import", n)==0 ){ |
| 20148 | char *zTable = 0; /* Insert data into this table */ |
| 20149 | char *zSchema = 0; /* within this schema (may default to "main") */ |
| 20150 | char *zFile = 0; /* Name of file to extra content from */ |
| 20151 | sqlite3_stmt *pStmt = NULL; /* A statement */ |
| @@ -20288,11 +20432,11 @@ | |
| 20432 | utf8_printf(p->out, |
| 20433 | "Added %d rows with %d errors using %d lines of input\n", |
| 20434 | sCtx.nRow, sCtx.nErr, sCtx.nLine-1); |
| 20435 | } |
| 20436 | }else |
| 20437 | #endif /* !defined(SQLITE_SHELL_FIDDLE) */ |
| 20438 | |
| 20439 | #ifndef SQLITE_UNTESTABLE |
| 20440 | if( c=='i' && strncmp(azArg[0], "imposter", n)==0 ){ |
| 20441 | char *zSql; |
| 20442 | char *zCollist = 0; |
| @@ -20478,11 +20622,11 @@ | |
| 20622 | if( c=='l' && n>2 && strncmp(azArg[0], "lint", n)==0 ){ |
| 20623 | open_db(p, 0); |
| 20624 | lintDotCommand(p, azArg, nArg); |
| 20625 | }else |
| 20626 | |
| 20627 | #if !defined(SQLITE_OMIT_LOAD_EXTENSION) && !defined(SQLITE_SHELL_FIDDLE) |
| 20628 | if( c=='l' && strncmp(azArg[0], "load", n)==0 ){ |
| 20629 | const char *zFile, *zProc; |
| 20630 | char *zErrMsg = 0; |
| 20631 | failIfSafeMode(p, "cannot run .load in safe mode"); |
| 20632 | if( nArg<2 ){ |
| @@ -20500,11 +20644,11 @@ | |
| 20644 | rc = 1; |
| 20645 | } |
| 20646 | }else |
| 20647 | #endif |
| 20648 | |
| 20649 | #ifndef SQLITE_SHELL_FIDDLE |
| 20650 | if( c=='l' && strncmp(azArg[0], "log", n)==0 ){ |
| 20651 | failIfSafeMode(p, "cannot run .log in safe mode"); |
| 20652 | if( nArg!=2 ){ |
| 20653 | raw_printf(stderr, "Usage: .log FILENAME\n"); |
| 20654 | rc = 1; |
| @@ -20637,11 +20781,11 @@ | |
| 20781 | rc = 1; |
| 20782 | } |
| 20783 | p->cMode = p->mode; |
| 20784 | }else |
| 20785 | |
| 20786 | #ifndef SQLITE_SHELL_FIDDLE |
| 20787 | if( c=='n' && strcmp(azArg[0], "nonce")==0 ){ |
| 20788 | if( nArg!=2 ){ |
| 20789 | raw_printf(stderr, "Usage: .nonce NONCE\n"); |
| 20790 | rc = 1; |
| 20791 | }else if( p->zNonce==0 || strcmp(azArg[1],p->zNonce)!=0 ){ |
| @@ -20652,11 +20796,11 @@ | |
| 20796 | p->bSafeMode = 0; |
| 20797 | return 0; /* Return immediately to bypass the safe mode reset |
| 20798 | ** at the end of this procedure */ |
| 20799 | } |
| 20800 | }else |
| 20801 | #endif /* !defined(SQLITE_SHELL_FIDDLE) */ |
| 20802 | |
| 20803 | if( c=='n' && strncmp(azArg[0], "nullvalue", n)==0 ){ |
| 20804 | if( nArg==2 ){ |
| 20805 | sqlite3_snprintf(sizeof(p->nullValue), p->nullValue, |
| 20806 | "%.*s", (int)ArraySize(p->nullValue)-1, azArg[1]); |
| @@ -20674,11 +20818,11 @@ | |
| 20818 | int openMode = SHELL_OPEN_UNSPEC; |
| 20819 | |
| 20820 | /* Check for command-line arguments */ |
| 20821 | for(iName=1; iName<nArg; iName++){ |
| 20822 | const char *z = azArg[iName]; |
| 20823 | #ifndef SQLITE_SHELL_FIDDLE |
| 20824 | if( optionMatch(z,"new") ){ |
| 20825 | newFlag = 1; |
| 20826 | #ifdef SQLITE_HAVE_ZLIB |
| 20827 | }else if( optionMatch(z, "zip") ){ |
| 20828 | openMode = SHELL_OPEN_ZIPFILE; |
| @@ -20696,11 +20840,11 @@ | |
| 20840 | openMode = SHELL_OPEN_HEXDB; |
| 20841 | }else if( optionMatch(z, "maxsize") && iName+1<nArg ){ |
| 20842 | p->szMax = integerValue(azArg[++iName]); |
| 20843 | #endif /* SQLITE_OMIT_DESERIALIZE */ |
| 20844 | }else |
| 20845 | #endif /* !SQLITE_SHELL_FIDDLE */ |
| 20846 | if( z[0]=='-' ){ |
| 20847 | utf8_printf(stderr, "unknown option: %s\n", z); |
| 20848 | rc = 1; |
| 20849 | goto meta_command_exit; |
| 20850 | }else if( zFN ){ |
| @@ -20724,11 +20868,11 @@ | |
| 20868 | p->szMax = 0; |
| 20869 | |
| 20870 | /* If a filename is specified, try to open it first */ |
| 20871 | if( zFN || p->openMode==SHELL_OPEN_HEXDB ){ |
| 20872 | if( newFlag && zFN && !p->bSafeMode ) shellDeleteFile(zFN); |
| 20873 | #ifndef SQLITE_SHELL_FIDDLE |
| 20874 | if( p->bSafeMode |
| 20875 | && p->openMode!=SHELL_OPEN_HEXDB |
| 20876 | && zFN |
| 20877 | && strcmp(zFN,":memory:")!=0 |
| 20878 | ){ |
| @@ -20757,11 +20901,11 @@ | |
| 20901 | p->pAuxDb->zDbFilename = 0; |
| 20902 | open_db(p, 0); |
| 20903 | } |
| 20904 | }else |
| 20905 | |
| 20906 | #ifndef SQLITE_SHELL_FIDDLE |
| 20907 | if( (c=='o' |
| 20908 | && (strncmp(azArg[0], "output", n)==0||strncmp(azArg[0], "once", n)==0)) |
| 20909 | || (c=='e' && n==5 && strcmp(azArg[0],"excel")==0) |
| 20910 | ){ |
| 20911 | char *zFile = 0; |
| @@ -20873,11 +21017,11 @@ | |
| 21017 | sqlite3_snprintf(sizeof(p->outfile), p->outfile, "%s", zFile); |
| 21018 | } |
| 21019 | } |
| 21020 | sqlite3_free(zFile); |
| 21021 | }else |
| 21022 | #endif /* !defined(SQLITE_SHELL_FIDDLE) */ |
| 21023 | |
| 21024 | if( c=='p' && n>=3 && strncmp(azArg[0], "parameter", n)==0 ){ |
| 21025 | open_db(p,0); |
| 21026 | if( nArg<=1 ) goto parameter_syntax_error; |
| 21027 | |
| @@ -21043,17 +21187,17 @@ | |
| 21187 | if( nArg >= 3) { |
| 21188 | strncpy(continuePrompt,azArg[2],(int)ArraySize(continuePrompt)-1); |
| 21189 | } |
| 21190 | }else |
| 21191 | |
| 21192 | #ifndef SQLITE_SHELL_FIDDLE |
| 21193 | if( c=='q' && strncmp(azArg[0], "quit", n)==0 ){ |
| 21194 | rc = 2; |
| 21195 | }else |
| 21196 | #endif |
| 21197 | |
| 21198 | #ifndef SQLITE_SHELL_FIDDLE |
| 21199 | if( c=='r' && n>=3 && strncmp(azArg[0], "read", n)==0 ){ |
| 21200 | FILE *inSaved = p->in; |
| 21201 | int savedLineno = p->lineno; |
| 21202 | failIfSafeMode(p, "cannot run .read in safe mode"); |
| 21203 | if( nArg!=2 ){ |
| @@ -21084,13 +21228,13 @@ | |
| 21228 | fclose(p->in); |
| 21229 | } |
| 21230 | p->in = inSaved; |
| 21231 | p->lineno = savedLineno; |
| 21232 | }else |
| 21233 | #endif /* !defined(SQLITE_SHELL_FIDDLE) */ |
| 21234 | |
| 21235 | #ifndef SQLITE_SHELL_FIDDLE |
| 21236 | if( c=='r' && n>=3 && strncmp(azArg[0], "restore", n)==0 ){ |
| 21237 | const char *zSrcFile; |
| 21238 | const char *zDb; |
| 21239 | sqlite3 *pSrc; |
| 21240 | sqlite3_backup *pBackup; |
| @@ -21138,11 +21282,11 @@ | |
| 21282 | utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(p->db)); |
| 21283 | rc = 1; |
| 21284 | } |
| 21285 | close_db(pSrc); |
| 21286 | }else |
| 21287 | #endif /* !defined(SQLITE_SHELL_FIDDLE) */ |
| 21288 | |
| 21289 | if( c=='s' && strncmp(azArg[0], "scanstats", n)==0 ){ |
| 21290 | if( nArg==2 ){ |
| 21291 | p->scanstatsOn = (u8)booleanValue(azArg[1]); |
| 21292 | #ifndef SQLITE_ENABLE_STMT_SCANSTATUS |
| @@ -21764,11 +21908,11 @@ | |
| 21908 | shell_exec(p, zSql, 0); |
| 21909 | } |
| 21910 | sqlite3_free(zSql); |
| 21911 | }else |
| 21912 | |
| 21913 | #if !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_FIDDLE) |
| 21914 | if( c=='s' |
| 21915 | && (strncmp(azArg[0], "shell", n)==0 || strncmp(azArg[0],"system",n)==0) |
| 21916 | ){ |
| 21917 | char *zCmd; |
| 21918 | int i, x; |
| @@ -21785,11 +21929,11 @@ | |
| 21929 | } |
| 21930 | x = zCmd!=0 ? system(zCmd) : 1; |
| 21931 | sqlite3_free(zCmd); |
| 21932 | if( x ) raw_printf(stderr, "System command returns %d\n", x); |
| 21933 | }else |
| 21934 | #endif /* !defined(SQLITE_NOHAVE_SYSTEM) && !defined(SQLITE_SHELL_FIDDLE) */ |
| 21935 | |
| 21936 | if( c=='s' && strncmp(azArg[0], "show", n)==0 ){ |
| 21937 | static const char *azBool[] = { "off", "on", "trigger", "full"}; |
| 21938 | const char *zOut; |
| 21939 | int i; |
| @@ -21965,11 +22109,11 @@ | |
| 22109 | |
| 22110 | for(ii=0; ii<nRow; ii++) sqlite3_free(azResult[ii]); |
| 22111 | sqlite3_free(azResult); |
| 22112 | }else |
| 22113 | |
| 22114 | #ifndef SQLITE_SHELL_FIDDLE |
| 22115 | /* Begin redirecting output to the file "testcase-out.txt" */ |
| 22116 | if( c=='t' && strcmp(azArg[0],"testcase")==0 ){ |
| 22117 | output_reset(p); |
| 22118 | p->out = output_file_open("testcase-out.txt", 0); |
| 22119 | if( p->out==0 ){ |
| @@ -21979,11 +22123,11 @@ | |
| 22123 | sqlite3_snprintf(sizeof(p->zTestcase), p->zTestcase, "%s", azArg[1]); |
| 22124 | }else{ |
| 22125 | sqlite3_snprintf(sizeof(p->zTestcase), p->zTestcase, "?"); |
| 22126 | } |
| 22127 | }else |
| 22128 | #endif /* !defined(SQLITE_SHELL_FIDDLE) */ |
| 22129 | |
| 22130 | #ifndef SQLITE_UNTESTABLE |
| 22131 | if( c=='t' && n>=8 && strncmp(azArg[0], "testctrl", n)==0 ){ |
| 22132 | static const struct { |
| 22133 | const char *zCtrlName; /* Name of a test-control option */ |
| @@ -22651,11 +22795,11 @@ | |
| 22795 | |
| 22796 | static void echo_group_input(ShellState *p, const char *zDo){ |
| 22797 | if( ShellHasFlag(p, SHFLG_Echo) ) utf8_printf(p->out, "%s\n", zDo); |
| 22798 | } |
| 22799 | |
| 22800 | #ifdef SQLITE_SHELL_FIDDLE |
| 22801 | /* |
| 22802 | ** Alternate one_input_line() impl for wasm mode. This is not in the primary impl |
| 22803 | ** because we need the global shellState and cannot access it from that function |
| 22804 | ** without moving lots of code around (creating a larger/messier diff). |
| 22805 | */ |
| @@ -22682,11 +22826,11 @@ | |
| 22826 | shell_check_oom(zLine); |
| 22827 | memcpy(zLine, zBegin, (size_t)nZ); |
| 22828 | zLine[nZ] = 0; |
| 22829 | return zLine; |
| 22830 | } |
| 22831 | #endif /* SQLITE_SHELL_FIDDLE */ |
| 22832 | |
| 22833 | /* |
| 22834 | ** Read input from *in and process it. If *in==0 then input |
| 22835 | ** is interactive - the user is typing it it. Otherwise, input |
| 22836 | ** is coming from a file or device. A prompt is issued and history |
| @@ -23065,11 +23209,11 @@ | |
| 23209 | # else |
| 23210 | # define SQLITE_SHELL_IS_UTF8 (1) |
| 23211 | # endif |
| 23212 | #endif |
| 23213 | |
| 23214 | #ifdef SQLITE_SHELL_FIDDLE |
| 23215 | # define main fiddle_main |
| 23216 | #endif |
| 23217 | |
| 23218 | #if SQLITE_SHELL_IS_UTF8 |
| 23219 | int SQLITE_CDECL main(int argc, char **argv){ |
| @@ -23076,14 +23220,14 @@ | |
| 23220 | #else |
| 23221 | int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ |
| 23222 | char **argv; |
| 23223 | #endif |
| 23224 | #ifdef SQLITE_DEBUG |
| 23225 | sqlite3_int64 mem_main_enter = sqlite3_memory_used(); |
| 23226 | #endif |
| 23227 | char *zErrMsg = 0; |
| 23228 | #ifdef SQLITE_SHELL_FIDDLE |
| 23229 | # define data shellState |
| 23230 | #else |
| 23231 | ShellState data; |
| 23232 | #endif |
| 23233 | const char *zInitFile = 0; |
| @@ -23099,11 +23243,11 @@ | |
| 23243 | int argcToFree = 0; |
| 23244 | #endif |
| 23245 | |
| 23246 | setBinaryMode(stdin, 0); |
| 23247 | setvbuf(stderr, 0, _IONBF, 0); /* Make sure stderr is unbuffered */ |
| 23248 | #ifdef SQLITE_SHELL_FIDDLE |
| 23249 | stdin_is_interactive = 0; |
| 23250 | stdout_is_console = 1; |
| 23251 | #else |
| 23252 | stdin_is_interactive = isatty(0); |
| 23253 | stdout_is_console = isatty(1); |
| @@ -23361,11 +23505,11 @@ | |
| 23505 | utf8_printf(stderr,"%s: Error: no database filename specified\n", Argv0); |
| 23506 | return 1; |
| 23507 | #endif |
| 23508 | } |
| 23509 | data.out = stdout; |
| 23510 | #ifndef SQLITE_SHELL_FIDDLE |
| 23511 | sqlite3_appendvfs_init(0,0,0); |
| 23512 | #endif |
| 23513 | |
| 23514 | /* Go ahead and open the database file if it already exists. If the |
| 23515 | ** file does not exist, delay opening it. This prevents empty database |
| @@ -23629,11 +23773,11 @@ | |
| 23773 | }else{ |
| 23774 | data.in = stdin; |
| 23775 | rc = process_input(&data); |
| 23776 | } |
| 23777 | } |
| 23778 | #ifndef SQLITE_SHELL_FIDDLE |
| 23779 | /* In WASM mode we have to leave the db state in place so that |
| 23780 | ** client code can "push" SQL into it after this call returns. */ |
| 23781 | free(azCmd); |
| 23782 | set_table_name(&data, 0); |
| 23783 | if( data.db ){ |
| @@ -23664,16 +23808,16 @@ | |
| 23808 | if( sqlite3_memory_used()>mem_main_enter ){ |
| 23809 | utf8_printf(stderr, "Memory leaked: %u bytes\n", |
| 23810 | (unsigned int)(sqlite3_memory_used()-mem_main_enter)); |
| 23811 | } |
| 23812 | #endif |
| 23813 | #endif /* !SQLITE_SHELL_FIDDLE */ |
| 23814 | return rc; |
| 23815 | } |
| 23816 | |
| 23817 | |
| 23818 | #ifdef SQLITE_SHELL_FIDDLE |
| 23819 | /* Only for emcc experimentation purposes. */ |
| 23820 | int fiddle_experiment(int a,int b){ |
| 23821 | return a + b; |
| 23822 | } |
| 23823 | |
| @@ -23790,6 +23934,6 @@ | |
| 23934 | shellState.wasm.zPos = zSql; |
| 23935 | process_input(&shellState); |
| 23936 | memset(&shellState.wasm, 0, sizeof(shellState.wasm)); |
| 23937 | } |
| 23938 | } |
| 23939 | #endif /* SQLITE_SHELL_FIDDLE */ |
| 23940 |
+1218
-754
| --- extsrc/sqlite3.c | ||
| +++ extsrc/sqlite3.c | ||
| @@ -1,8 +1,8 @@ | ||
| 1 | 1 | /****************************************************************************** |
| 2 | 2 | ** This file is an amalgamation of many separate C source files from SQLite |
| 3 | -** version 3.39.0. By combining all the individual C code files into this | |
| 3 | +** version 3.40.0. By combining all the individual C code files into this | |
| 4 | 4 | ** single large file, the entire code can be compiled as a single translation |
| 5 | 5 | ** unit. This allows many compilers to do optimizations that would not be |
| 6 | 6 | ** possible if the files were compiled separately. Performance improvements |
| 7 | 7 | ** of 5% or more are commonly seen when SQLite is compiled as a single |
| 8 | 8 | ** translation unit. |
| @@ -450,13 +450,13 @@ | ||
| 450 | 450 | ** |
| 451 | 451 | ** See also: [sqlite3_libversion()], |
| 452 | 452 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 453 | 453 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 454 | 454 | */ |
| 455 | -#define SQLITE_VERSION "3.39.0" | |
| 456 | -#define SQLITE_VERSION_NUMBER 3039000 | |
| 457 | -#define SQLITE_SOURCE_ID "2022-06-15 16:26:37 56c60a35ea457f06db58ec3f694a1ae16fd03e6625da1d7879d63d72bbcb1c62" | |
| 455 | +#define SQLITE_VERSION "3.40.0" | |
| 456 | +#define SQLITE_VERSION_NUMBER 3040000 | |
| 457 | +#define SQLITE_SOURCE_ID "2022-09-02 21:19:24 da7af290960ab8a04a1f55cdc5eeac36b47fa194edf67f0a05daa4b7f2a4071c" | |
| 458 | 458 | |
| 459 | 459 | /* |
| 460 | 460 | ** CAPI3REF: Run-Time Library Version Numbers |
| 461 | 461 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 462 | 462 | ** |
| @@ -3728,10 +3728,13 @@ | ||
| 3728 | 3728 | ** |
| 3729 | 3729 | ** ^(<dt>[SQLITE_OPEN_SHAREDCACHE]</dt> |
| 3730 | 3730 | ** <dd>The database is opened [shared cache] enabled, overriding |
| 3731 | 3731 | ** the default shared cache setting provided by |
| 3732 | 3732 | ** [sqlite3_enable_shared_cache()].)^ |
| 3733 | +** The [use of shared cache mode is discouraged] and hence shared cache | |
| 3734 | +** capabilities may be omitted from many builds of SQLite. In such cases, | |
| 3735 | +** this option is a no-op. | |
| 3733 | 3736 | ** |
| 3734 | 3737 | ** ^(<dt>[SQLITE_OPEN_PRIVATECACHE]</dt> |
| 3735 | 3738 | ** <dd>The database is opened [shared cache] disabled, overriding |
| 3736 | 3739 | ** the default shared cache setting provided by |
| 3737 | 3740 | ** [sqlite3_enable_shared_cache()].)^ |
| @@ -3743,11 +3746,11 @@ | ||
| 3743 | 3746 | ** connection as soon as the connection is created. In addition to setting |
| 3744 | 3747 | ** the extended result code mode, this flag also causes [sqlite3_open_v2()] |
| 3745 | 3748 | ** to return an extended result code.</dd> |
| 3746 | 3749 | ** |
| 3747 | 3750 | ** [[OPEN_NOFOLLOW]] ^(<dt>[SQLITE_OPEN_NOFOLLOW]</dt> |
| 3748 | -** <dd>The database filename is not allowed to be a symbolic link</dd> | |
| 3751 | +** <dd>The database filename is not allowed to contain a symbolic link</dd> | |
| 3749 | 3752 | ** </dl>)^ |
| 3750 | 3753 | ** |
| 3751 | 3754 | ** If the 3rd parameter to sqlite3_open_v2() is not one of the |
| 3752 | 3755 | ** required combinations shown above optionally combined with other |
| 3753 | 3756 | ** [SQLITE_OPEN_READONLY | SQLITE_OPEN_* bits] |
| @@ -6586,11 +6589,11 @@ | ||
| 6586 | 6589 | ** CAPI3REF: Return The Schema Name For A Database Connection |
| 6587 | 6590 | ** METHOD: sqlite3 |
| 6588 | 6591 | ** |
| 6589 | 6592 | ** ^The sqlite3_db_name(D,N) interface returns a pointer to the schema name |
| 6590 | 6593 | ** for the N-th database on database connection D, or a NULL pointer of N is |
| 6591 | -** out of range. An N alue of 0 means the main database file. An N of 1 is | |
| 6594 | +** out of range. An N value of 0 means the main database file. An N of 1 is | |
| 6592 | 6595 | ** the "temp" schema. Larger values of N correspond to various ATTACH-ed |
| 6593 | 6596 | ** databases. |
| 6594 | 6597 | ** |
| 6595 | 6598 | ** Space to hold the string that is returned by sqlite3_db_name() is managed |
| 6596 | 6599 | ** by SQLite itself. The string might be deallocated by any operation that |
| @@ -6769,11 +6772,11 @@ | ||
| 6769 | 6772 | ** |
| 6770 | 6773 | ** ^The sqlite3_autovacuum_pages(D,C,P,X) interface registers a callback |
| 6771 | 6774 | ** function C that is invoked prior to each autovacuum of the database |
| 6772 | 6775 | ** file. ^The callback is passed a copy of the generic data pointer (P), |
| 6773 | 6776 | ** the schema-name of the attached database that is being autovacuumed, |
| 6774 | -** the the size of the database file in pages, the number of free pages, | |
| 6777 | +** the size of the database file in pages, the number of free pages, | |
| 6775 | 6778 | ** and the number of bytes per page, respectively. The callback should |
| 6776 | 6779 | ** return the number of free pages that should be removed by the |
| 6777 | 6780 | ** autovacuum. ^If the callback returns zero, then no autovacuum happens. |
| 6778 | 6781 | ** ^If the value returned is greater than or equal to the number of |
| 6779 | 6782 | ** free pages, then a complete autovacuum happens. |
| @@ -6889,10 +6892,15 @@ | ||
| 6889 | 6892 | ** |
| 6890 | 6893 | ** ^(This routine enables or disables the sharing of the database cache |
| 6891 | 6894 | ** and schema data structures between [database connection | connections] |
| 6892 | 6895 | ** to the same database. Sharing is enabled if the argument is true |
| 6893 | 6896 | ** and disabled if the argument is false.)^ |
| 6897 | +** | |
| 6898 | +** This interface is omitted if SQLite is compiled with | |
| 6899 | +** [-DSQLITE_OMIT_SHARED_CACHE]. The [-DSQLITE_OMIT_SHARED_CACHE] | |
| 6900 | +** compile-time option is recommended because the | |
| 6901 | +** [use of shared cache mode is discouraged]. | |
| 6894 | 6902 | ** |
| 6895 | 6903 | ** ^Cache sharing is enabled and disabled for an entire process. |
| 6896 | 6904 | ** This is a change as of SQLite [version 3.5.0] ([dateof:3.5.0]). |
| 6897 | 6905 | ** In prior versions of SQLite, |
| 6898 | 6906 | ** sharing was enabled or disabled for each thread separately. |
| @@ -6988,11 +6996,11 @@ | ||
| 6988 | 6996 | ** ^Setting the heap limits to zero disables the heap limiter mechanism. |
| 6989 | 6997 | ** |
| 6990 | 6998 | ** ^The soft heap limit may not be greater than the hard heap limit. |
| 6991 | 6999 | ** ^If the hard heap limit is enabled and if sqlite3_soft_heap_limit(N) |
| 6992 | 7000 | ** is invoked with a value of N that is greater than the hard heap limit, |
| 6993 | -** the the soft heap limit is set to the value of the hard heap limit. | |
| 7001 | +** the soft heap limit is set to the value of the hard heap limit. | |
| 6994 | 7002 | ** ^The soft heap limit is automatically enabled whenever the hard heap |
| 6995 | 7003 | ** limit is enabled. ^When sqlite3_hard_heap_limit64(N) is invoked and |
| 6996 | 7004 | ** the soft heap limit is outside the range of 1..N, then the soft heap |
| 6997 | 7005 | ** limit is set to N. ^Invoking sqlite3_soft_heap_limit64(0) when the |
| 6998 | 7006 | ** hard heap limit is enabled makes the soft heap limit equal to the |
| @@ -9283,11 +9291,11 @@ | ||
| 9283 | 9291 | ** sqlite3_backup_init() is called and before the corresponding call to |
| 9284 | 9292 | ** sqlite3_backup_finish(). SQLite does not currently check to see |
| 9285 | 9293 | ** if the application incorrectly accesses the destination [database connection] |
| 9286 | 9294 | ** and so no error code is reported, but the operations may malfunction |
| 9287 | 9295 | ** nevertheless. Use of the destination database connection while a |
| 9288 | -** backup is in progress might also also cause a mutex deadlock. | |
| 9296 | +** backup is in progress might also cause a mutex deadlock. | |
| 9289 | 9297 | ** |
| 9290 | 9298 | ** If running in [shared cache mode], the application must |
| 9291 | 9299 | ** guarantee that the shared cache used by the destination database |
| 9292 | 9300 | ** is not accessed while the backup is running. In practice this means |
| 9293 | 9301 | ** that the application must guarantee that the disk file being |
| @@ -9711,11 +9719,11 @@ | ||
| 9711 | 9719 | ** See the [sqlite3_wal_checkpoint_v2()] documentation for details on the |
| 9712 | 9720 | ** meaning of each of these checkpoint modes. |
| 9713 | 9721 | */ |
| 9714 | 9722 | #define SQLITE_CHECKPOINT_PASSIVE 0 /* Do as much as possible w/o blocking */ |
| 9715 | 9723 | #define SQLITE_CHECKPOINT_FULL 1 /* Wait for writers, then checkpoint */ |
| 9716 | -#define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for for readers */ | |
| 9724 | +#define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for readers */ | |
| 9717 | 9725 | #define SQLITE_CHECKPOINT_TRUNCATE 3 /* Like RESTART but also truncate WAL */ |
| 9718 | 9726 | |
| 9719 | 9727 | /* |
| 9720 | 9728 | ** CAPI3REF: Virtual Table Interface Configuration |
| 9721 | 9729 | ** |
| @@ -13142,10 +13150,15 @@ | ||
| 13142 | 13150 | /******** End of fts5.h *********/ |
| 13143 | 13151 | |
| 13144 | 13152 | /************** End of sqlite3.h *********************************************/ |
| 13145 | 13153 | /************** Continuing where we left off in sqliteInt.h ******************/ |
| 13146 | 13154 | |
| 13155 | +/* | |
| 13156 | +** Reuse the STATIC_LRU for mutex access to sqlite3_temp_directory. | |
| 13157 | +*/ | |
| 13158 | +#define SQLITE_MUTEX_STATIC_TEMPDIR SQLITE_MUTEX_STATIC_VFS1 | |
| 13159 | + | |
| 13147 | 13160 | /* |
| 13148 | 13161 | ** Include the configuration header output by 'configure' if we're using the |
| 13149 | 13162 | ** autoconf-based build |
| 13150 | 13163 | */ |
| 13151 | 13164 | #if defined(_HAVE_SQLITE_CONFIG_H) && !defined(SQLITECONFIG_H) |
| @@ -15553,67 +15566,67 @@ | ||
| 15553 | 15566 | #define OP_Checkpoint 3 |
| 15554 | 15567 | #define OP_JournalMode 4 |
| 15555 | 15568 | #define OP_Vacuum 5 |
| 15556 | 15569 | #define OP_VFilter 6 /* jump, synopsis: iplan=r[P3] zplan='P4' */ |
| 15557 | 15570 | #define OP_VUpdate 7 /* synopsis: data=r[P3@P2] */ |
| 15558 | -#define OP_Goto 8 /* jump */ | |
| 15559 | -#define OP_Gosub 9 /* jump */ | |
| 15560 | -#define OP_InitCoroutine 10 /* jump */ | |
| 15561 | -#define OP_Yield 11 /* jump */ | |
| 15562 | -#define OP_MustBeInt 12 /* jump */ | |
| 15563 | -#define OP_Jump 13 /* jump */ | |
| 15564 | -#define OP_Once 14 /* jump */ | |
| 15565 | -#define OP_If 15 /* jump */ | |
| 15566 | -#define OP_IfNot 16 /* jump */ | |
| 15567 | -#define OP_IsNullOrType 17 /* jump, synopsis: if typeof(r[P1]) IN (P3,5) goto P2 */ | |
| 15568 | -#define OP_IfNullRow 18 /* jump, synopsis: if P1.nullRow then r[P3]=NULL, goto P2 */ | |
| 15571 | +#define OP_Init 8 /* jump, synopsis: Start at P2 */ | |
| 15572 | +#define OP_Goto 9 /* jump */ | |
| 15573 | +#define OP_Gosub 10 /* jump */ | |
| 15574 | +#define OP_InitCoroutine 11 /* jump */ | |
| 15575 | +#define OP_Yield 12 /* jump */ | |
| 15576 | +#define OP_MustBeInt 13 /* jump */ | |
| 15577 | +#define OP_Jump 14 /* jump */ | |
| 15578 | +#define OP_Once 15 /* jump */ | |
| 15579 | +#define OP_If 16 /* jump */ | |
| 15580 | +#define OP_IfNot 17 /* jump */ | |
| 15581 | +#define OP_IsNullOrType 18 /* jump, synopsis: if typeof(r[P1]) IN (P3,5) goto P2 */ | |
| 15569 | 15582 | #define OP_Not 19 /* same as TK_NOT, synopsis: r[P2]= !r[P1] */ |
| 15570 | -#define OP_SeekLT 20 /* jump, synopsis: key=r[P3@P4] */ | |
| 15571 | -#define OP_SeekLE 21 /* jump, synopsis: key=r[P3@P4] */ | |
| 15572 | -#define OP_SeekGE 22 /* jump, synopsis: key=r[P3@P4] */ | |
| 15573 | -#define OP_SeekGT 23 /* jump, synopsis: key=r[P3@P4] */ | |
| 15574 | -#define OP_IfNotOpen 24 /* jump, synopsis: if( !csr[P1] ) goto P2 */ | |
| 15575 | -#define OP_IfNoHope 25 /* jump, synopsis: key=r[P3@P4] */ | |
| 15576 | -#define OP_NoConflict 26 /* jump, synopsis: key=r[P3@P4] */ | |
| 15577 | -#define OP_NotFound 27 /* jump, synopsis: key=r[P3@P4] */ | |
| 15578 | -#define OP_Found 28 /* jump, synopsis: key=r[P3@P4] */ | |
| 15579 | -#define OP_SeekRowid 29 /* jump, synopsis: intkey=r[P3] */ | |
| 15580 | -#define OP_NotExists 30 /* jump, synopsis: intkey=r[P3] */ | |
| 15581 | -#define OP_Last 31 /* jump */ | |
| 15582 | -#define OP_IfSmaller 32 /* jump */ | |
| 15583 | -#define OP_SorterSort 33 /* jump */ | |
| 15584 | -#define OP_Sort 34 /* jump */ | |
| 15585 | -#define OP_Rewind 35 /* jump */ | |
| 15586 | -#define OP_SorterNext 36 /* jump */ | |
| 15587 | -#define OP_Prev 37 /* jump */ | |
| 15588 | -#define OP_Next 38 /* jump */ | |
| 15589 | -#define OP_IdxLE 39 /* jump, synopsis: key=r[P3@P4] */ | |
| 15590 | -#define OP_IdxGT 40 /* jump, synopsis: key=r[P3@P4] */ | |
| 15591 | -#define OP_IdxLT 41 /* jump, synopsis: key=r[P3@P4] */ | |
| 15592 | -#define OP_IdxGE 42 /* jump, synopsis: key=r[P3@P4] */ | |
| 15583 | +#define OP_IfNullRow 20 /* jump, synopsis: if P1.nullRow then r[P3]=NULL, goto P2 */ | |
| 15584 | +#define OP_SeekLT 21 /* jump, synopsis: key=r[P3@P4] */ | |
| 15585 | +#define OP_SeekLE 22 /* jump, synopsis: key=r[P3@P4] */ | |
| 15586 | +#define OP_SeekGE 23 /* jump, synopsis: key=r[P3@P4] */ | |
| 15587 | +#define OP_SeekGT 24 /* jump, synopsis: key=r[P3@P4] */ | |
| 15588 | +#define OP_IfNotOpen 25 /* jump, synopsis: if( !csr[P1] ) goto P2 */ | |
| 15589 | +#define OP_IfNoHope 26 /* jump, synopsis: key=r[P3@P4] */ | |
| 15590 | +#define OP_NoConflict 27 /* jump, synopsis: key=r[P3@P4] */ | |
| 15591 | +#define OP_NotFound 28 /* jump, synopsis: key=r[P3@P4] */ | |
| 15592 | +#define OP_Found 29 /* jump, synopsis: key=r[P3@P4] */ | |
| 15593 | +#define OP_SeekRowid 30 /* jump, synopsis: intkey=r[P3] */ | |
| 15594 | +#define OP_NotExists 31 /* jump, synopsis: intkey=r[P3] */ | |
| 15595 | +#define OP_Last 32 /* jump */ | |
| 15596 | +#define OP_IfSmaller 33 /* jump */ | |
| 15597 | +#define OP_SorterSort 34 /* jump */ | |
| 15598 | +#define OP_Sort 35 /* jump */ | |
| 15599 | +#define OP_Rewind 36 /* jump */ | |
| 15600 | +#define OP_SorterNext 37 /* jump */ | |
| 15601 | +#define OP_Prev 38 /* jump */ | |
| 15602 | +#define OP_Next 39 /* jump */ | |
| 15603 | +#define OP_IdxLE 40 /* jump, synopsis: key=r[P3@P4] */ | |
| 15604 | +#define OP_IdxGT 41 /* jump, synopsis: key=r[P3@P4] */ | |
| 15605 | +#define OP_IdxLT 42 /* jump, synopsis: key=r[P3@P4] */ | |
| 15593 | 15606 | #define OP_Or 43 /* same as TK_OR, synopsis: r[P3]=(r[P1] || r[P2]) */ |
| 15594 | 15607 | #define OP_And 44 /* same as TK_AND, synopsis: r[P3]=(r[P1] && r[P2]) */ |
| 15595 | -#define OP_RowSetRead 45 /* jump, synopsis: r[P3]=rowset(P1) */ | |
| 15596 | -#define OP_RowSetTest 46 /* jump, synopsis: if r[P3] in rowset(P1) goto P2 */ | |
| 15597 | -#define OP_Program 47 /* jump */ | |
| 15598 | -#define OP_FkIfZero 48 /* jump, synopsis: if fkctr[P1]==0 goto P2 */ | |
| 15599 | -#define OP_IfPos 49 /* jump, synopsis: if r[P1]>0 then r[P1]-=P3, goto P2 */ | |
| 15608 | +#define OP_IdxGE 45 /* jump, synopsis: key=r[P3@P4] */ | |
| 15609 | +#define OP_RowSetRead 46 /* jump, synopsis: r[P3]=rowset(P1) */ | |
| 15610 | +#define OP_RowSetTest 47 /* jump, synopsis: if r[P3] in rowset(P1) goto P2 */ | |
| 15611 | +#define OP_Program 48 /* jump */ | |
| 15612 | +#define OP_FkIfZero 49 /* jump, synopsis: if fkctr[P1]==0 goto P2 */ | |
| 15600 | 15613 | #define OP_IsNull 50 /* jump, same as TK_ISNULL, synopsis: if r[P1]==NULL goto P2 */ |
| 15601 | 15614 | #define OP_NotNull 51 /* jump, same as TK_NOTNULL, synopsis: if r[P1]!=NULL goto P2 */ |
| 15602 | 15615 | #define OP_Ne 52 /* jump, same as TK_NE, synopsis: IF r[P3]!=r[P1] */ |
| 15603 | 15616 | #define OP_Eq 53 /* jump, same as TK_EQ, synopsis: IF r[P3]==r[P1] */ |
| 15604 | 15617 | #define OP_Gt 54 /* jump, same as TK_GT, synopsis: IF r[P3]>r[P1] */ |
| 15605 | 15618 | #define OP_Le 55 /* jump, same as TK_LE, synopsis: IF r[P3]<=r[P1] */ |
| 15606 | 15619 | #define OP_Lt 56 /* jump, same as TK_LT, synopsis: IF r[P3]<r[P1] */ |
| 15607 | 15620 | #define OP_Ge 57 /* jump, same as TK_GE, synopsis: IF r[P3]>=r[P1] */ |
| 15608 | 15621 | #define OP_ElseEq 58 /* jump, same as TK_ESCAPE */ |
| 15609 | -#define OP_IfNotZero 59 /* jump, synopsis: if r[P1]!=0 then r[P1]--, goto P2 */ | |
| 15610 | -#define OP_DecrJumpZero 60 /* jump, synopsis: if (--r[P1])==0 goto P2 */ | |
| 15611 | -#define OP_IncrVacuum 61 /* jump */ | |
| 15612 | -#define OP_VNext 62 /* jump */ | |
| 15613 | -#define OP_Filter 63 /* jump, synopsis: if key(P3@P4) not in filter(P1) goto P2 */ | |
| 15614 | -#define OP_Init 64 /* jump, synopsis: Start at P2 */ | |
| 15622 | +#define OP_IfPos 59 /* jump, synopsis: if r[P1]>0 then r[P1]-=P3, goto P2 */ | |
| 15623 | +#define OP_IfNotZero 60 /* jump, synopsis: if r[P1]!=0 then r[P1]--, goto P2 */ | |
| 15624 | +#define OP_DecrJumpZero 61 /* jump, synopsis: if (--r[P1])==0 goto P2 */ | |
| 15625 | +#define OP_IncrVacuum 62 /* jump */ | |
| 15626 | +#define OP_VNext 63 /* jump */ | |
| 15627 | +#define OP_Filter 64 /* jump, synopsis: if key(P3@P4) not in filter(P1) goto P2 */ | |
| 15615 | 15628 | #define OP_PureFunc 65 /* synopsis: r[P3]=func(r[P2@NP]) */ |
| 15616 | 15629 | #define OP_Function 66 /* synopsis: r[P3]=func(r[P2@NP]) */ |
| 15617 | 15630 | #define OP_Return 67 |
| 15618 | 15631 | #define OP_EndCoroutine 68 |
| 15619 | 15632 | #define OP_HaltIfNull 69 /* synopsis: if r[P3]=null halt */ |
| @@ -15745,17 +15758,17 @@ | ||
| 15745 | 15758 | #define OPFLG_IN3 0x08 /* in3: P3 is an input */ |
| 15746 | 15759 | #define OPFLG_OUT2 0x10 /* out2: P2 is an output */ |
| 15747 | 15760 | #define OPFLG_OUT3 0x20 /* out3: P3 is an output */ |
| 15748 | 15761 | #define OPFLG_INITIALIZER {\ |
| 15749 | 15762 | /* 0 */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00,\ |
| 15750 | -/* 8 */ 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x03,\ | |
| 15751 | -/* 16 */ 0x03, 0x03, 0x01, 0x12, 0x09, 0x09, 0x09, 0x09,\ | |
| 15752 | -/* 24 */ 0x01, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x01,\ | |
| 15763 | +/* 8 */ 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01,\ | |
| 15764 | +/* 16 */ 0x03, 0x03, 0x03, 0x12, 0x01, 0x09, 0x09, 0x09,\ | |
| 15765 | +/* 24 */ 0x09, 0x01, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,\ | |
| 15753 | 15766 | /* 32 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\ |
| 15754 | -/* 40 */ 0x01, 0x01, 0x01, 0x26, 0x26, 0x23, 0x0b, 0x01,\ | |
| 15755 | -/* 48 */ 0x01, 0x03, 0x03, 0x03, 0x0b, 0x0b, 0x0b, 0x0b,\ | |
| 15756 | -/* 56 */ 0x0b, 0x0b, 0x01, 0x03, 0x03, 0x01, 0x01, 0x01,\ | |
| 15767 | +/* 40 */ 0x01, 0x01, 0x01, 0x26, 0x26, 0x01, 0x23, 0x0b,\ | |
| 15768 | +/* 48 */ 0x01, 0x01, 0x03, 0x03, 0x0b, 0x0b, 0x0b, 0x0b,\ | |
| 15769 | +/* 56 */ 0x0b, 0x0b, 0x01, 0x03, 0x03, 0x03, 0x01, 0x01,\ | |
| 15757 | 15770 | /* 64 */ 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x00, 0x10,\ |
| 15758 | 15771 | /* 72 */ 0x10, 0x10, 0x00, 0x10, 0x00, 0x10, 0x10, 0x00,\ |
| 15759 | 15772 | /* 80 */ 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x02, 0x02,\ |
| 15760 | 15773 | /* 88 */ 0x02, 0x00, 0x00, 0x12, 0x1e, 0x20, 0x00, 0x00,\ |
| 15761 | 15774 | /* 96 */ 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x26, 0x26,\ |
| @@ -15857,10 +15870,11 @@ | ||
| 15857 | 15870 | SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe*, int addr, const char *zP4, int N); |
| 15858 | 15871 | SQLITE_PRIVATE void sqlite3VdbeAppendP4(Vdbe*, void *pP4, int p4type); |
| 15859 | 15872 | SQLITE_PRIVATE void sqlite3VdbeSetP4KeyInfo(Parse*, Index*); |
| 15860 | 15873 | SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe*, int); |
| 15861 | 15874 | SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe*, int); |
| 15875 | +SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetLastOp(Vdbe*); | |
| 15862 | 15876 | SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Parse*); |
| 15863 | 15877 | SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe*); |
| 15864 | 15878 | SQLITE_PRIVATE void sqlite3VdbeReusable(Vdbe*); |
| 15865 | 15879 | SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe*); |
| 15866 | 15880 | SQLITE_PRIVATE void sqlite3VdbeMakeReady(Vdbe*,Parse*); |
| @@ -16741,10 +16755,11 @@ | ||
| 16741 | 16755 | void *pMiddle; /* First byte past end of full-size buffers and |
| 16742 | 16756 | ** the first byte of LOOKASIDE_SMALL buffers */ |
| 16743 | 16757 | #endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */ |
| 16744 | 16758 | void *pStart; /* First byte of available memory space */ |
| 16745 | 16759 | void *pEnd; /* First byte past end of available space */ |
| 16760 | + void *pTrueEnd; /* True value of pEnd, when db->pnBytesFreed!=0 */ | |
| 16746 | 16761 | }; |
| 16747 | 16762 | struct LookasideSlot { |
| 16748 | 16763 | LookasideSlot *pNext; /* Next buffer in the list of free buffers */ |
| 16749 | 16764 | }; |
| 16750 | 16765 | |
| @@ -18189,11 +18204,11 @@ | ||
| 18189 | 18204 | #define EP_xIsSelect 0x001000 /* x.pSelect is valid (otherwise x.pList is) */ |
| 18190 | 18205 | #define EP_Skip 0x002000 /* Operator does not contribute to affinity */ |
| 18191 | 18206 | #define EP_Reduced 0x004000 /* Expr struct EXPR_REDUCEDSIZE bytes only */ |
| 18192 | 18207 | #define EP_Win 0x008000 /* Contains window functions */ |
| 18193 | 18208 | #define EP_TokenOnly 0x010000 /* Expr struct EXPR_TOKENONLYSIZE bytes only */ |
| 18194 | -#define EP_MemToken 0x020000 /* Need to sqlite3DbFree() Expr.zToken */ | |
| 18209 | + /* 0x020000 // Available for reuse */ | |
| 18195 | 18210 | #define EP_IfNullRow 0x040000 /* The TK_IF_NULL_ROW opcode */ |
| 18196 | 18211 | #define EP_Unlikely 0x080000 /* unlikely() or likelihood() function */ |
| 18197 | 18212 | #define EP_ConstFunc 0x100000 /* A SQLITE_FUNC_CONSTANT or _SLOCHNG function */ |
| 18198 | 18213 | #define EP_CanBeNull 0x200000 /* Can be null despite NOT NULL constraint */ |
| 18199 | 18214 | #define EP_Subquery 0x400000 /* Tree contains a TK_SELECT operator */ |
| @@ -19667,10 +19682,11 @@ | ||
| 19667 | 19682 | SQLITE_PRIVATE void *sqlite3Realloc(void*, u64); |
| 19668 | 19683 | SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *, void *, u64); |
| 19669 | 19684 | SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *, void *, u64); |
| 19670 | 19685 | SQLITE_PRIVATE void sqlite3DbFree(sqlite3*, void*); |
| 19671 | 19686 | SQLITE_PRIVATE void sqlite3DbFreeNN(sqlite3*, void*); |
| 19687 | +SQLITE_PRIVATE void sqlite3DbNNFreeNN(sqlite3*, void*); | |
| 19672 | 19688 | SQLITE_PRIVATE int sqlite3MallocSize(const void*); |
| 19673 | 19689 | SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3*, const void*); |
| 19674 | 19690 | SQLITE_PRIVATE void *sqlite3PageMalloc(int); |
| 19675 | 19691 | SQLITE_PRIVATE void sqlite3PageFree(void*); |
| 19676 | 19692 | SQLITE_PRIVATE void sqlite3MemSetDefault(void); |
| @@ -19777,18 +19793,20 @@ | ||
| 19777 | 19793 | SQLITE_PRIVATE void sqlite3TreeViewColumnList(TreeView*, const Column*, int, u8); |
| 19778 | 19794 | SQLITE_PRIVATE void sqlite3TreeViewSrcList(TreeView*, const SrcList*); |
| 19779 | 19795 | SQLITE_PRIVATE void sqlite3TreeViewSelect(TreeView*, const Select*, u8); |
| 19780 | 19796 | SQLITE_PRIVATE void sqlite3TreeViewWith(TreeView*, const With*, u8); |
| 19781 | 19797 | SQLITE_PRIVATE void sqlite3TreeViewUpsert(TreeView*, const Upsert*, u8); |
| 19798 | +#if TREETRACE_ENABLED | |
| 19782 | 19799 | SQLITE_PRIVATE void sqlite3TreeViewDelete(const With*, const SrcList*, const Expr*, |
| 19783 | 19800 | const ExprList*,const Expr*, const Trigger*); |
| 19784 | 19801 | SQLITE_PRIVATE void sqlite3TreeViewInsert(const With*, const SrcList*, |
| 19785 | 19802 | const IdList*, const Select*, const ExprList*, |
| 19786 | 19803 | int, const Upsert*, const Trigger*); |
| 19787 | 19804 | SQLITE_PRIVATE void sqlite3TreeViewUpdate(const With*, const SrcList*, const ExprList*, |
| 19788 | 19805 | const Expr*, int, const ExprList*, const Expr*, |
| 19789 | 19806 | const Upsert*, const Trigger*); |
| 19807 | +#endif | |
| 19790 | 19808 | #ifndef SQLITE_OMIT_TRIGGER |
| 19791 | 19809 | SQLITE_PRIVATE void sqlite3TreeViewTriggerStep(TreeView*, const TriggerStep*, u8, u8); |
| 19792 | 19810 | SQLITE_PRIVATE void sqlite3TreeViewTrigger(TreeView*, const Trigger*, u8, u8); |
| 19793 | 19811 | #endif |
| 19794 | 19812 | #ifndef SQLITE_OMIT_WINDOWFUNC |
| @@ -20189,10 +20207,11 @@ | ||
| 20189 | 20207 | SQLITE_PRIVATE int sqlite3FixSrcList(DbFixer*, SrcList*); |
| 20190 | 20208 | SQLITE_PRIVATE int sqlite3FixSelect(DbFixer*, Select*); |
| 20191 | 20209 | SQLITE_PRIVATE int sqlite3FixExpr(DbFixer*, Expr*); |
| 20192 | 20210 | SQLITE_PRIVATE int sqlite3FixTriggerStep(DbFixer*, TriggerStep*); |
| 20193 | 20211 | SQLITE_PRIVATE int sqlite3RealSameAsInt(double,sqlite3_int64); |
| 20212 | +SQLITE_PRIVATE i64 sqlite3RealToI64(double); | |
| 20194 | 20213 | SQLITE_PRIVATE void sqlite3Int64ToText(i64,char*); |
| 20195 | 20214 | SQLITE_PRIVATE int sqlite3AtoF(const char *z, double*, int, u8); |
| 20196 | 20215 | SQLITE_PRIVATE int sqlite3GetInt32(const char *, int*); |
| 20197 | 20216 | SQLITE_PRIVATE int sqlite3GetUInt32(const char*, u32*); |
| 20198 | 20217 | SQLITE_PRIVATE int sqlite3Atoi(const char*); |
| @@ -21635,13 +21654,10 @@ | ||
| 21635 | 21654 | "OMIT_WSD", |
| 21636 | 21655 | #endif |
| 21637 | 21656 | #ifdef SQLITE_OMIT_XFER_OPT |
| 21638 | 21657 | "OMIT_XFER_OPT", |
| 21639 | 21658 | #endif |
| 21640 | -#ifdef SQLITE_PCACHE_SEPARATE_HEADER | |
| 21641 | - "PCACHE_SEPARATE_HEADER", | |
| 21642 | -#endif | |
| 21643 | 21659 | #ifdef SQLITE_PERFORMANCE_TRACE |
| 21644 | 21660 | "PERFORMANCE_TRACE", |
| 21645 | 21661 | #endif |
| 21646 | 21662 | #ifdef SQLITE_POWERSAFE_OVERWRITE |
| 21647 | 21663 | # if SQLITE_POWERSAFE_OVERWRITE != 1 |
| @@ -22590,11 +22606,11 @@ | ||
| 22590 | 22606 | ** The "sqlite3_stmt" structure pointer that is returned by sqlite3_prepare() |
| 22591 | 22607 | ** is really a pointer to an instance of this structure. |
| 22592 | 22608 | */ |
| 22593 | 22609 | struct Vdbe { |
| 22594 | 22610 | sqlite3 *db; /* The database connection that owns this statement */ |
| 22595 | - Vdbe *pPrev,*pNext; /* Linked list of VDBEs with the same Vdbe.db */ | |
| 22611 | + Vdbe **ppVPrev,*pVNext; /* Linked list of VDBEs with the same Vdbe.db */ | |
| 22596 | 22612 | Parse *pParse; /* Parsing context used to create this Vdbe */ |
| 22597 | 22613 | ynVar nVar; /* Number of entries in aVar[] */ |
| 22598 | 22614 | int nMem; /* Number of memory locations currently allocated */ |
| 22599 | 22615 | int nCursor; /* Number of slots in apCsr[] */ |
| 22600 | 22616 | u32 cacheCtr; /* VdbeCursor row cache generation counter */ |
| @@ -23148,10 +23164,12 @@ | ||
| 23148 | 23164 | int i; /* Used to iterate through schemas */ |
| 23149 | 23165 | int nByte = 0; /* Used to accumulate return value */ |
| 23150 | 23166 | |
| 23151 | 23167 | sqlite3BtreeEnterAll(db); |
| 23152 | 23168 | db->pnBytesFreed = &nByte; |
| 23169 | + assert( db->lookaside.pEnd==db->lookaside.pTrueEnd ); | |
| 23170 | + db->lookaside.pEnd = db->lookaside.pStart; | |
| 23153 | 23171 | for(i=0; i<db->nDb; i++){ |
| 23154 | 23172 | Schema *pSchema = db->aDb[i].pSchema; |
| 23155 | 23173 | if( ALWAYS(pSchema!=0) ){ |
| 23156 | 23174 | HashElem *p; |
| 23157 | 23175 | |
| @@ -23173,10 +23191,11 @@ | ||
| 23173 | 23191 | sqlite3DeleteTable(db, (Table *)sqliteHashData(p)); |
| 23174 | 23192 | } |
| 23175 | 23193 | } |
| 23176 | 23194 | } |
| 23177 | 23195 | db->pnBytesFreed = 0; |
| 23196 | + db->lookaside.pEnd = db->lookaside.pTrueEnd; | |
| 23178 | 23197 | sqlite3BtreeLeaveAll(db); |
| 23179 | 23198 | |
| 23180 | 23199 | *pHighwater = 0; |
| 23181 | 23200 | *pCurrent = nByte; |
| 23182 | 23201 | break; |
| @@ -23190,13 +23209,16 @@ | ||
| 23190 | 23209 | case SQLITE_DBSTATUS_STMT_USED: { |
| 23191 | 23210 | struct Vdbe *pVdbe; /* Used to iterate through VMs */ |
| 23192 | 23211 | int nByte = 0; /* Used to accumulate return value */ |
| 23193 | 23212 | |
| 23194 | 23213 | db->pnBytesFreed = &nByte; |
| 23195 | - for(pVdbe=db->pVdbe; pVdbe; pVdbe=pVdbe->pNext){ | |
| 23214 | + assert( db->lookaside.pEnd==db->lookaside.pTrueEnd ); | |
| 23215 | + db->lookaside.pEnd = db->lookaside.pStart; | |
| 23216 | + for(pVdbe=db->pVdbe; pVdbe; pVdbe=pVdbe->pVNext){ | |
| 23196 | 23217 | sqlite3VdbeDelete(pVdbe); |
| 23197 | 23218 | } |
| 23219 | + db->lookaside.pEnd = db->lookaside.pTrueEnd; | |
| 23198 | 23220 | db->pnBytesFreed = 0; |
| 23199 | 23221 | |
| 23200 | 23222 | *pHighwater = 0; /* IMP: R-64479-57858 */ |
| 23201 | 23223 | *pCurrent = nByte; |
| 23202 | 23224 | |
| @@ -23528,11 +23550,11 @@ | ||
| 23528 | 23550 | X1 = 36525*(Y+4716)/100; |
| 23529 | 23551 | X2 = 306001*(M+1)/10000; |
| 23530 | 23552 | p->iJD = (sqlite3_int64)((X1 + X2 + D + B - 1524.5 ) * 86400000); |
| 23531 | 23553 | p->validJD = 1; |
| 23532 | 23554 | if( p->validHMS ){ |
| 23533 | - p->iJD += p->h*3600000 + p->m*60000 + (sqlite3_int64)(p->s*1000); | |
| 23555 | + p->iJD += p->h*3600000 + p->m*60000 + (sqlite3_int64)(p->s*1000 + 0.5); | |
| 23534 | 23556 | if( p->validTZ ){ |
| 23535 | 23557 | p->iJD -= p->tz*60000; |
| 23536 | 23558 | p->validYMD = 0; |
| 23537 | 23559 | p->validHMS = 0; |
| 23538 | 23560 | p->validTZ = 0; |
| @@ -24037,11 +24059,11 @@ | ||
| 24037 | 24059 | ** weekday N where 0==Sunday, 1==Monday, and so forth. If the |
| 24038 | 24060 | ** date is already on the appropriate weekday, this is a no-op. |
| 24039 | 24061 | */ |
| 24040 | 24062 | if( sqlite3_strnicmp(z, "weekday ", 8)==0 |
| 24041 | 24063 | && sqlite3AtoF(&z[8], &r, sqlite3Strlen30(&z[8]), SQLITE_UTF8)>0 |
| 24042 | - && (n=(int)r)==r && n>=0 && r<7 ){ | |
| 24064 | + && r>=0.0 && r<7.0 && (n=(int)r)==r ){ | |
| 24043 | 24065 | sqlite3_int64 Z; |
| 24044 | 24066 | computeYMD_HMS(p); |
| 24045 | 24067 | p->validTZ = 0; |
| 24046 | 24068 | p->validJD = 0; |
| 24047 | 24069 | computeJD(p); |
| @@ -24835,10 +24857,11 @@ | ||
| 24835 | 24857 | DO_OS_MALLOC_TEST(0); |
| 24836 | 24858 | /* 0x87f7f is a mask of SQLITE_OPEN_ flags that are valid to be passed |
| 24837 | 24859 | ** down into the VFS layer. Some SQLITE_OPEN_ flags (for example, |
| 24838 | 24860 | ** SQLITE_OPEN_FULLMUTEX or SQLITE_OPEN_SHAREDCACHE) are blocked before |
| 24839 | 24861 | ** reaching the VFS. */ |
| 24862 | + assert( zPath || (flags & SQLITE_OPEN_EXCLUSIVE) ); | |
| 24840 | 24863 | rc = pVfs->xOpen(pVfs, zPath, pFile, flags & 0x1087f7f, pFlagsOut); |
| 24841 | 24864 | assert( rc==SQLITE_OK || pFile->pMethods==0 ); |
| 24842 | 24865 | return rc; |
| 24843 | 24866 | } |
| 24844 | 24867 | SQLITE_PRIVATE int sqlite3OsDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync){ |
| @@ -29100,11 +29123,11 @@ | ||
| 29100 | 29123 | /* |
| 29101 | 29124 | ** TRUE if p is a lookaside memory allocation from db |
| 29102 | 29125 | */ |
| 29103 | 29126 | #ifndef SQLITE_OMIT_LOOKASIDE |
| 29104 | 29127 | static int isLookaside(sqlite3 *db, const void *p){ |
| 29105 | - return SQLITE_WITHIN(p, db->lookaside.pStart, db->lookaside.pEnd); | |
| 29128 | + return SQLITE_WITHIN(p, db->lookaside.pStart, db->lookaside.pTrueEnd); | |
| 29106 | 29129 | } |
| 29107 | 29130 | #else |
| 29108 | 29131 | #define isLookaside(A,B) 0 |
| 29109 | 29132 | #endif |
| 29110 | 29133 | |
| @@ -29124,22 +29147,20 @@ | ||
| 29124 | 29147 | #endif |
| 29125 | 29148 | } |
| 29126 | 29149 | SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3 *db, const void *p){ |
| 29127 | 29150 | assert( p!=0 ); |
| 29128 | 29151 | #ifdef SQLITE_DEBUG |
| 29129 | - if( db==0 || !isLookaside(db,p) ){ | |
| 29130 | - if( db==0 ){ | |
| 29131 | - assert( sqlite3MemdebugNoType(p, (u8)~MEMTYPE_HEAP) ); | |
| 29132 | - assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) ); | |
| 29133 | - }else{ | |
| 29134 | - assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); | |
| 29135 | - assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); | |
| 29136 | - } | |
| 29152 | + if( db==0 ){ | |
| 29153 | + assert( sqlite3MemdebugNoType(p, (u8)~MEMTYPE_HEAP) ); | |
| 29154 | + assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) ); | |
| 29155 | + }else if( !isLookaside(db,p) ){ | |
| 29156 | + assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); | |
| 29157 | + assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); | |
| 29137 | 29158 | } |
| 29138 | 29159 | #endif |
| 29139 | 29160 | if( db ){ |
| 29140 | - if( ((uptr)p)<(uptr)(db->lookaside.pEnd) ){ | |
| 29161 | + if( ((uptr)p)<(uptr)(db->lookaside.pTrueEnd) ){ | |
| 29141 | 29162 | #ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE |
| 29142 | 29163 | if( ((uptr)p)>=(uptr)(db->lookaside.pMiddle) ){ |
| 29143 | 29164 | assert( sqlite3_mutex_held(db->mutex) ); |
| 29144 | 29165 | return LOOKASIDE_SMALL; |
| 29145 | 29166 | } |
| @@ -29191,18 +29212,15 @@ | ||
| 29191 | 29212 | */ |
| 29192 | 29213 | SQLITE_PRIVATE void sqlite3DbFreeNN(sqlite3 *db, void *p){ |
| 29193 | 29214 | assert( db==0 || sqlite3_mutex_held(db->mutex) ); |
| 29194 | 29215 | assert( p!=0 ); |
| 29195 | 29216 | if( db ){ |
| 29196 | - if( db->pnBytesFreed ){ | |
| 29197 | - measureAllocationSize(db, p); | |
| 29198 | - return; | |
| 29199 | - } | |
| 29200 | 29217 | if( ((uptr)p)<(uptr)(db->lookaside.pEnd) ){ |
| 29201 | 29218 | #ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE |
| 29202 | 29219 | if( ((uptr)p)>=(uptr)(db->lookaside.pMiddle) ){ |
| 29203 | 29220 | LookasideSlot *pBuf = (LookasideSlot*)p; |
| 29221 | + assert( db->pnBytesFreed==0 ); | |
| 29204 | 29222 | #ifdef SQLITE_DEBUG |
| 29205 | 29223 | memset(p, 0xaa, LOOKASIDE_SMALL); /* Trash freed content */ |
| 29206 | 29224 | #endif |
| 29207 | 29225 | pBuf->pNext = db->lookaside.pSmallFree; |
| 29208 | 29226 | db->lookaside.pSmallFree = pBuf; |
| @@ -29209,24 +29227,66 @@ | ||
| 29209 | 29227 | return; |
| 29210 | 29228 | } |
| 29211 | 29229 | #endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */ |
| 29212 | 29230 | if( ((uptr)p)>=(uptr)(db->lookaside.pStart) ){ |
| 29213 | 29231 | LookasideSlot *pBuf = (LookasideSlot*)p; |
| 29232 | + assert( db->pnBytesFreed==0 ); | |
| 29214 | 29233 | #ifdef SQLITE_DEBUG |
| 29215 | 29234 | memset(p, 0xaa, db->lookaside.szTrue); /* Trash freed content */ |
| 29216 | 29235 | #endif |
| 29217 | 29236 | pBuf->pNext = db->lookaside.pFree; |
| 29218 | 29237 | db->lookaside.pFree = pBuf; |
| 29219 | 29238 | return; |
| 29220 | 29239 | } |
| 29221 | 29240 | } |
| 29241 | + if( db->pnBytesFreed ){ | |
| 29242 | + measureAllocationSize(db, p); | |
| 29243 | + return; | |
| 29244 | + } | |
| 29222 | 29245 | } |
| 29223 | 29246 | assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); |
| 29224 | 29247 | assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); |
| 29225 | 29248 | assert( db!=0 || sqlite3MemdebugNoType(p, MEMTYPE_LOOKASIDE) ); |
| 29226 | 29249 | sqlite3MemdebugSetType(p, MEMTYPE_HEAP); |
| 29227 | 29250 | sqlite3_free(p); |
| 29251 | +} | |
| 29252 | +SQLITE_PRIVATE void sqlite3DbNNFreeNN(sqlite3 *db, void *p){ | |
| 29253 | + assert( db!=0 ); | |
| 29254 | + assert( sqlite3_mutex_held(db->mutex) ); | |
| 29255 | + assert( p!=0 ); | |
| 29256 | + if( ((uptr)p)<(uptr)(db->lookaside.pEnd) ){ | |
| 29257 | +#ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE | |
| 29258 | + if( ((uptr)p)>=(uptr)(db->lookaside.pMiddle) ){ | |
| 29259 | + LookasideSlot *pBuf = (LookasideSlot*)p; | |
| 29260 | + assert( db->pnBytesFreed==0 ); | |
| 29261 | +#ifdef SQLITE_DEBUG | |
| 29262 | + memset(p, 0xaa, LOOKASIDE_SMALL); /* Trash freed content */ | |
| 29263 | +#endif | |
| 29264 | + pBuf->pNext = db->lookaside.pSmallFree; | |
| 29265 | + db->lookaside.pSmallFree = pBuf; | |
| 29266 | + return; | |
| 29267 | + } | |
| 29268 | +#endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */ | |
| 29269 | + if( ((uptr)p)>=(uptr)(db->lookaside.pStart) ){ | |
| 29270 | + LookasideSlot *pBuf = (LookasideSlot*)p; | |
| 29271 | + assert( db->pnBytesFreed==0 ); | |
| 29272 | +#ifdef SQLITE_DEBUG | |
| 29273 | + memset(p, 0xaa, db->lookaside.szTrue); /* Trash freed content */ | |
| 29274 | +#endif | |
| 29275 | + pBuf->pNext = db->lookaside.pFree; | |
| 29276 | + db->lookaside.pFree = pBuf; | |
| 29277 | + return; | |
| 29278 | + } | |
| 29279 | + } | |
| 29280 | + if( db->pnBytesFreed ){ | |
| 29281 | + measureAllocationSize(db, p); | |
| 29282 | + return; | |
| 29283 | + } | |
| 29284 | + assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); | |
| 29285 | + assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); | |
| 29286 | + sqlite3MemdebugSetType(p, MEMTYPE_HEAP); | |
| 29287 | + sqlite3_free(p); | |
| 29228 | 29288 | } |
| 29229 | 29289 | SQLITE_PRIVATE void sqlite3DbFree(sqlite3 *db, void *p){ |
| 29230 | 29290 | assert( db==0 || sqlite3_mutex_held(db->mutex) ); |
| 29231 | 29291 | if( p ) sqlite3DbFreeNN(db, p); |
| 29232 | 29292 | } |
| @@ -29559,12 +29619,17 @@ | ||
| 29559 | 29619 | if( db->nVdbeExec>0 ){ |
| 29560 | 29620 | AtomicStore(&db->u1.isInterrupted, 1); |
| 29561 | 29621 | } |
| 29562 | 29622 | DisableLookaside; |
| 29563 | 29623 | if( db->pParse ){ |
| 29624 | + Parse *pParse; | |
| 29564 | 29625 | sqlite3ErrorMsg(db->pParse, "out of memory"); |
| 29565 | 29626 | db->pParse->rc = SQLITE_NOMEM_BKPT; |
| 29627 | + for(pParse=db->pParse->pOuterParse; pParse; pParse = pParse->pOuterParse){ | |
| 29628 | + pParse->nErr++; | |
| 29629 | + pParse->rc = SQLITE_NOMEM; | |
| 29630 | + } | |
| 29566 | 29631 | } |
| 29567 | 29632 | } |
| 29568 | 29633 | return 0; |
| 29569 | 29634 | } |
| 29570 | 29635 | |
| @@ -30426,12 +30491,12 @@ | ||
| 30426 | 30491 | } |
| 30427 | 30492 | break; |
| 30428 | 30493 | case etSQLESCAPE: /* %q: Escape ' characters */ |
| 30429 | 30494 | case etSQLESCAPE2: /* %Q: Escape ' and enclose in '...' */ |
| 30430 | 30495 | case etSQLESCAPE3: { /* %w: Escape " characters */ |
| 30431 | - int i, j, k, n, isnull; | |
| 30432 | - int needQuote; | |
| 30496 | + i64 i, j, k, n; | |
| 30497 | + int needQuote, isnull; | |
| 30433 | 30498 | char ch; |
| 30434 | 30499 | char q = ((xtype==etSQLESCAPE3)?'"':'\''); /* Quote character */ |
| 30435 | 30500 | char *escarg; |
| 30436 | 30501 | |
| 30437 | 30502 | if( bArgList ){ |
| @@ -31073,11 +31138,11 @@ | ||
| 31073 | 31138 | */ |
| 31074 | 31139 | SQLITE_PRIVATE void sqlite3TreeViewLine(TreeView *p, const char *zFormat, ...){ |
| 31075 | 31140 | va_list ap; |
| 31076 | 31141 | int i; |
| 31077 | 31142 | StrAccum acc; |
| 31078 | - char zBuf[500]; | |
| 31143 | + char zBuf[1000]; | |
| 31079 | 31144 | sqlite3StrAccumInit(&acc, 0, zBuf, sizeof(zBuf), 0); |
| 31080 | 31145 | if( p ){ |
| 31081 | 31146 | for(i=0; i<p->iLevel && i<(int)sizeof(p->bLine)-1; i++){ |
| 31082 | 31147 | sqlite3_str_append(&acc, p->bLine[i] ? "| " : " ", 4); |
| 31083 | 31148 | } |
| @@ -31115,12 +31180,12 @@ | ||
| 31115 | 31180 | int i; |
| 31116 | 31181 | sqlite3TreeViewPush(&pView, moreToFollow); |
| 31117 | 31182 | sqlite3TreeViewLine(pView, "COLUMNS"); |
| 31118 | 31183 | for(i=0; i<nCol; i++){ |
| 31119 | 31184 | u16 flg = aCol[i].colFlags; |
| 31120 | - int moreToFollow = i<(nCol - 1); | |
| 31121 | - sqlite3TreeViewPush(&pView, moreToFollow); | |
| 31185 | + int colMoreToFollow = i<(nCol - 1); | |
| 31186 | + sqlite3TreeViewPush(&pView, colMoreToFollow); | |
| 31122 | 31187 | sqlite3TreeViewLine(pView, 0); |
| 31123 | 31188 | printf(" %s", aCol[i].zCnName); |
| 31124 | 31189 | switch( aCol[i].eCType ){ |
| 31125 | 31190 | case COLTYPE_ANY: printf(" ANY"); break; |
| 31126 | 31191 | case COLTYPE_BLOB: printf(" BLOB"); break; |
| @@ -31204,11 +31269,11 @@ | ||
| 31204 | 31269 | if( pSrc==0 ) return; |
| 31205 | 31270 | for(i=0; i<pSrc->nSrc; i++){ |
| 31206 | 31271 | const SrcItem *pItem = &pSrc->a[i]; |
| 31207 | 31272 | StrAccum x; |
| 31208 | 31273 | int n = 0; |
| 31209 | - char zLine[100]; | |
| 31274 | + char zLine[1000]; | |
| 31210 | 31275 | sqlite3StrAccumInit(&x, 0, zLine, sizeof(zLine), 0); |
| 31211 | 31276 | x.printfFlags |= SQLITE_PRINTF_INTERNAL; |
| 31212 | 31277 | sqlite3_str_appendf(&x, "{%d:*} %!S", pItem->iCursor, pItem); |
| 31213 | 31278 | if( pItem->pTab ){ |
| 31214 | 31279 | sqlite3_str_appendf(&x, " tab=%Q nCol=%d ptr=%p used=%llx", |
| @@ -31247,11 +31312,11 @@ | ||
| 31247 | 31312 | if( pItem->pSelect ){ |
| 31248 | 31313 | if( pItem->pTab ){ |
| 31249 | 31314 | Table *pTab = pItem->pTab; |
| 31250 | 31315 | sqlite3TreeViewColumnList(pView, pTab->aCol, pTab->nCol, 1); |
| 31251 | 31316 | } |
| 31252 | - assert( pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) ); | |
| 31317 | + assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) ); | |
| 31253 | 31318 | sqlite3TreeViewSelect(pView, pItem->pSelect, (--n)>0); |
| 31254 | 31319 | } |
| 31255 | 31320 | if( pItem->fg.isTabFunc ){ |
| 31256 | 31321 | sqlite3TreeViewExprList(pView, pItem->u1.pFuncArg, 0, "func-args:"); |
| 31257 | 31322 | } |
| @@ -32014,10 +32079,11 @@ | ||
| 32014 | 32079 | pUpsert = pUpsert->pNextUpsert; |
| 32015 | 32080 | } |
| 32016 | 32081 | sqlite3TreeViewPop(&pView); |
| 32017 | 32082 | } |
| 32018 | 32083 | |
| 32084 | +#if TREETRACE_ENABLED | |
| 32019 | 32085 | /* |
| 32020 | 32086 | ** Generate a human-readable diagram of the data structure that go |
| 32021 | 32087 | ** into generating an DELETE statement. |
| 32022 | 32088 | */ |
| 32023 | 32089 | SQLITE_PRIVATE void sqlite3TreeViewDelete( |
| @@ -32067,11 +32133,13 @@ | ||
| 32067 | 32133 | if( pTrigger ){ |
| 32068 | 32134 | sqlite3TreeViewTrigger(pView, pTrigger, (--n)>0, 1); |
| 32069 | 32135 | } |
| 32070 | 32136 | sqlite3TreeViewPop(&pView); |
| 32071 | 32137 | } |
| 32138 | +#endif /* TREETRACE_ENABLED */ | |
| 32072 | 32139 | |
| 32140 | +#if TREETRACE_ENABLED | |
| 32073 | 32141 | /* |
| 32074 | 32142 | ** Generate a human-readable diagram of the data structure that go |
| 32075 | 32143 | ** into generating an INSERT statement. |
| 32076 | 32144 | */ |
| 32077 | 32145 | SQLITE_PRIVATE void sqlite3TreeViewInsert( |
| @@ -32135,11 +32203,13 @@ | ||
| 32135 | 32203 | if( pTrigger ){ |
| 32136 | 32204 | sqlite3TreeViewTrigger(pView, pTrigger, (--n)>0, 1); |
| 32137 | 32205 | } |
| 32138 | 32206 | sqlite3TreeViewPop(&pView); |
| 32139 | 32207 | } |
| 32208 | +#endif /* TREETRACE_ENABLED */ | |
| 32140 | 32209 | |
| 32210 | +#if TREETRACE_ENABLED | |
| 32141 | 32211 | /* |
| 32142 | 32212 | ** Generate a human-readable diagram of the data structure that go |
| 32143 | 32213 | ** into generating an UPDATE statement. |
| 32144 | 32214 | */ |
| 32145 | 32215 | SQLITE_PRIVATE void sqlite3TreeViewUpdate( |
| @@ -32211,10 +32281,11 @@ | ||
| 32211 | 32281 | if( pTrigger ){ |
| 32212 | 32282 | sqlite3TreeViewTrigger(pView, pTrigger, (--n)>0, 1); |
| 32213 | 32283 | } |
| 32214 | 32284 | sqlite3TreeViewPop(&pView); |
| 32215 | 32285 | } |
| 32286 | +#endif /* TREETRACE_ENABLED */ | |
| 32216 | 32287 | |
| 32217 | 32288 | #ifndef SQLITE_OMIT_TRIGGER |
| 32218 | 32289 | /* |
| 32219 | 32290 | ** Show a human-readable graph of a TriggerStep |
| 32220 | 32291 | */ |
| @@ -32324,20 +32395,45 @@ | ||
| 32324 | 32395 | |
| 32325 | 32396 | /* All threads share a single random number generator. |
| 32326 | 32397 | ** This structure is the current state of the generator. |
| 32327 | 32398 | */ |
| 32328 | 32399 | static SQLITE_WSD struct sqlite3PrngType { |
| 32329 | - unsigned char isInit; /* True if initialized */ | |
| 32330 | - unsigned char i, j; /* State variables */ | |
| 32331 | - unsigned char s[256]; /* State variables */ | |
| 32400 | + u32 s[16]; /* 64 bytes of chacha20 state */ | |
| 32401 | + u8 out[64]; /* Output bytes */ | |
| 32402 | + u8 n; /* Output bytes remaining */ | |
| 32332 | 32403 | } sqlite3Prng; |
| 32333 | 32404 | |
| 32405 | + | |
| 32406 | +/* The RFC-7539 ChaCha20 block function | |
| 32407 | +*/ | |
| 32408 | +#define ROTL(a,b) (((a) << (b)) | ((a) >> (32 - (b)))) | |
| 32409 | +#define QR(a, b, c, d) ( \ | |
| 32410 | + a += b, d ^= a, d = ROTL(d,16), \ | |
| 32411 | + c += d, b ^= c, b = ROTL(b,12), \ | |
| 32412 | + a += b, d ^= a, d = ROTL(d, 8), \ | |
| 32413 | + c += d, b ^= c, b = ROTL(b, 7)) | |
| 32414 | +static void chacha_block(u32 *out, const u32 *in){ | |
| 32415 | + int i; | |
| 32416 | + u32 x[16]; | |
| 32417 | + memcpy(x, in, 64); | |
| 32418 | + for(i=0; i<10; i++){ | |
| 32419 | + QR(x[0], x[4], x[ 8], x[12]); | |
| 32420 | + QR(x[1], x[5], x[ 9], x[13]); | |
| 32421 | + QR(x[2], x[6], x[10], x[14]); | |
| 32422 | + QR(x[3], x[7], x[11], x[15]); | |
| 32423 | + QR(x[0], x[5], x[10], x[15]); | |
| 32424 | + QR(x[1], x[6], x[11], x[12]); | |
| 32425 | + QR(x[2], x[7], x[ 8], x[13]); | |
| 32426 | + QR(x[3], x[4], x[ 9], x[14]); | |
| 32427 | + } | |
| 32428 | + for(i=0; i<16; i++) out[i] = x[i]+in[i]; | |
| 32429 | +} | |
| 32430 | + | |
| 32334 | 32431 | /* |
| 32335 | 32432 | ** Return N random bytes. |
| 32336 | 32433 | */ |
| 32337 | 32434 | SQLITE_API void sqlite3_randomness(int N, void *pBuf){ |
| 32338 | - unsigned char t; | |
| 32339 | 32435 | unsigned char *zBuf = pBuf; |
| 32340 | 32436 | |
| 32341 | 32437 | /* The "wsdPrng" macro will resolve to the pseudo-random number generator |
| 32342 | 32438 | ** state vector. If writable static data is unsupported on the target, |
| 32343 | 32439 | ** we have to locate the state vector at run-time. In the more common |
| @@ -32363,57 +32459,50 @@ | ||
| 32363 | 32459 | mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_PRNG); |
| 32364 | 32460 | #endif |
| 32365 | 32461 | |
| 32366 | 32462 | sqlite3_mutex_enter(mutex); |
| 32367 | 32463 | if( N<=0 || pBuf==0 ){ |
| 32368 | - wsdPrng.isInit = 0; | |
| 32464 | + wsdPrng.s[0] = 0; | |
| 32369 | 32465 | sqlite3_mutex_leave(mutex); |
| 32370 | 32466 | return; |
| 32371 | 32467 | } |
| 32372 | 32468 | |
| 32373 | 32469 | /* Initialize the state of the random number generator once, |
| 32374 | - ** the first time this routine is called. The seed value does | |
| 32375 | - ** not need to contain a lot of randomness since we are not | |
| 32376 | - ** trying to do secure encryption or anything like that... | |
| 32377 | - ** | |
| 32378 | - ** Nothing in this file or anywhere else in SQLite does any kind of | |
| 32379 | - ** encryption. The RC4 algorithm is being used as a PRNG (pseudo-random | |
| 32380 | - ** number generator) not as an encryption device. | |
| 32470 | + ** the first time this routine is called. | |
| 32381 | 32471 | */ |
| 32382 | - if( !wsdPrng.isInit ){ | |
| 32472 | + if( wsdPrng.s[0]==0 ){ | |
| 32383 | 32473 | sqlite3_vfs *pVfs = sqlite3_vfs_find(0); |
| 32384 | - int i; | |
| 32385 | - char k[256]; | |
| 32386 | - wsdPrng.j = 0; | |
| 32387 | - wsdPrng.i = 0; | |
| 32474 | + static const u32 chacha20_init[] = { | |
| 32475 | + 0x61707865, 0x3320646e, 0x79622d32, 0x6b206574 | |
| 32476 | + }; | |
| 32477 | + memcpy(&wsdPrng.s[0], chacha20_init, 16); | |
| 32388 | 32478 | if( NEVER(pVfs==0) ){ |
| 32389 | - memset(k, 0, sizeof(k)); | |
| 32479 | + memset(&wsdPrng.s[4], 0, 44); | |
| 32390 | 32480 | }else{ |
| 32391 | - sqlite3OsRandomness(pVfs, 256, k); | |
| 32392 | - } | |
| 32393 | - for(i=0; i<256; i++){ | |
| 32394 | - wsdPrng.s[i] = (u8)i; | |
| 32395 | - } | |
| 32396 | - for(i=0; i<256; i++){ | |
| 32397 | - wsdPrng.j += wsdPrng.s[i] + k[i]; | |
| 32398 | - t = wsdPrng.s[wsdPrng.j]; | |
| 32399 | - wsdPrng.s[wsdPrng.j] = wsdPrng.s[i]; | |
| 32400 | - wsdPrng.s[i] = t; | |
| 32401 | - } | |
| 32402 | - wsdPrng.isInit = 1; | |
| 32481 | + sqlite3OsRandomness(pVfs, 44, (char*)&wsdPrng.s[4]); | |
| 32482 | + } | |
| 32483 | + wsdPrng.s[15] = wsdPrng.s[12]; | |
| 32484 | + wsdPrng.s[12] = 0; | |
| 32485 | + wsdPrng.n = 0; | |
| 32403 | 32486 | } |
| 32404 | 32487 | |
| 32405 | 32488 | assert( N>0 ); |
| 32406 | - do{ | |
| 32407 | - wsdPrng.i++; | |
| 32408 | - t = wsdPrng.s[wsdPrng.i]; | |
| 32409 | - wsdPrng.j += t; | |
| 32410 | - wsdPrng.s[wsdPrng.i] = wsdPrng.s[wsdPrng.j]; | |
| 32411 | - wsdPrng.s[wsdPrng.j] = t; | |
| 32412 | - t += wsdPrng.s[wsdPrng.i]; | |
| 32413 | - *(zBuf++) = wsdPrng.s[t]; | |
| 32414 | - }while( --N ); | |
| 32489 | + while( 1 /* exit by break */ ){ | |
| 32490 | + if( N<=wsdPrng.n ){ | |
| 32491 | + memcpy(zBuf, &wsdPrng.out[wsdPrng.n-N], N); | |
| 32492 | + wsdPrng.n -= N; | |
| 32493 | + break; | |
| 32494 | + } | |
| 32495 | + if( wsdPrng.n>0 ){ | |
| 32496 | + memcpy(zBuf, wsdPrng.out, wsdPrng.n); | |
| 32497 | + N -= wsdPrng.n; | |
| 32498 | + zBuf += wsdPrng.n; | |
| 32499 | + } | |
| 32500 | + wsdPrng.s[12]++; | |
| 32501 | + chacha_block((u32*)wsdPrng.out, wsdPrng.s); | |
| 32502 | + wsdPrng.n = 64; | |
| 32503 | + } | |
| 32415 | 32504 | sqlite3_mutex_leave(mutex); |
| 32416 | 32505 | } |
| 32417 | 32506 | |
| 32418 | 32507 | #ifndef SQLITE_UNTESTABLE |
| 32419 | 32508 | /* |
| @@ -33449,11 +33538,11 @@ | ||
| 33449 | 33538 | SQLITE_PRIVATE void sqlite3ErrorMsg(Parse *pParse, const char *zFormat, ...){ |
| 33450 | 33539 | char *zMsg; |
| 33451 | 33540 | va_list ap; |
| 33452 | 33541 | sqlite3 *db = pParse->db; |
| 33453 | 33542 | assert( db!=0 ); |
| 33454 | - assert( db->pParse==pParse ); | |
| 33543 | + assert( db->pParse==pParse || db->pParse->pToplevel==pParse ); | |
| 33455 | 33544 | db->errByteOffset = -2; |
| 33456 | 33545 | va_start(ap, zFormat); |
| 33457 | 33546 | zMsg = sqlite3VMPrintf(db, zFormat, ap); |
| 33458 | 33547 | va_end(ap); |
| 33459 | 33548 | if( db->errByteOffset<-1 ) db->errByteOffset = -1; |
| @@ -35267,67 +35356,67 @@ | ||
| 35267 | 35356 | /* 3 */ "Checkpoint" OpHelp(""), |
| 35268 | 35357 | /* 4 */ "JournalMode" OpHelp(""), |
| 35269 | 35358 | /* 5 */ "Vacuum" OpHelp(""), |
| 35270 | 35359 | /* 6 */ "VFilter" OpHelp("iplan=r[P3] zplan='P4'"), |
| 35271 | 35360 | /* 7 */ "VUpdate" OpHelp("data=r[P3@P2]"), |
| 35272 | - /* 8 */ "Goto" OpHelp(""), | |
| 35273 | - /* 9 */ "Gosub" OpHelp(""), | |
| 35274 | - /* 10 */ "InitCoroutine" OpHelp(""), | |
| 35275 | - /* 11 */ "Yield" OpHelp(""), | |
| 35276 | - /* 12 */ "MustBeInt" OpHelp(""), | |
| 35277 | - /* 13 */ "Jump" OpHelp(""), | |
| 35278 | - /* 14 */ "Once" OpHelp(""), | |
| 35279 | - /* 15 */ "If" OpHelp(""), | |
| 35280 | - /* 16 */ "IfNot" OpHelp(""), | |
| 35281 | - /* 17 */ "IsNullOrType" OpHelp("if typeof(r[P1]) IN (P3,5) goto P2"), | |
| 35282 | - /* 18 */ "IfNullRow" OpHelp("if P1.nullRow then r[P3]=NULL, goto P2"), | |
| 35361 | + /* 8 */ "Init" OpHelp("Start at P2"), | |
| 35362 | + /* 9 */ "Goto" OpHelp(""), | |
| 35363 | + /* 10 */ "Gosub" OpHelp(""), | |
| 35364 | + /* 11 */ "InitCoroutine" OpHelp(""), | |
| 35365 | + /* 12 */ "Yield" OpHelp(""), | |
| 35366 | + /* 13 */ "MustBeInt" OpHelp(""), | |
| 35367 | + /* 14 */ "Jump" OpHelp(""), | |
| 35368 | + /* 15 */ "Once" OpHelp(""), | |
| 35369 | + /* 16 */ "If" OpHelp(""), | |
| 35370 | + /* 17 */ "IfNot" OpHelp(""), | |
| 35371 | + /* 18 */ "IsNullOrType" OpHelp("if typeof(r[P1]) IN (P3,5) goto P2"), | |
| 35283 | 35372 | /* 19 */ "Not" OpHelp("r[P2]= !r[P1]"), |
| 35284 | - /* 20 */ "SeekLT" OpHelp("key=r[P3@P4]"), | |
| 35285 | - /* 21 */ "SeekLE" OpHelp("key=r[P3@P4]"), | |
| 35286 | - /* 22 */ "SeekGE" OpHelp("key=r[P3@P4]"), | |
| 35287 | - /* 23 */ "SeekGT" OpHelp("key=r[P3@P4]"), | |
| 35288 | - /* 24 */ "IfNotOpen" OpHelp("if( !csr[P1] ) goto P2"), | |
| 35289 | - /* 25 */ "IfNoHope" OpHelp("key=r[P3@P4]"), | |
| 35290 | - /* 26 */ "NoConflict" OpHelp("key=r[P3@P4]"), | |
| 35291 | - /* 27 */ "NotFound" OpHelp("key=r[P3@P4]"), | |
| 35292 | - /* 28 */ "Found" OpHelp("key=r[P3@P4]"), | |
| 35293 | - /* 29 */ "SeekRowid" OpHelp("intkey=r[P3]"), | |
| 35294 | - /* 30 */ "NotExists" OpHelp("intkey=r[P3]"), | |
| 35295 | - /* 31 */ "Last" OpHelp(""), | |
| 35296 | - /* 32 */ "IfSmaller" OpHelp(""), | |
| 35297 | - /* 33 */ "SorterSort" OpHelp(""), | |
| 35298 | - /* 34 */ "Sort" OpHelp(""), | |
| 35299 | - /* 35 */ "Rewind" OpHelp(""), | |
| 35300 | - /* 36 */ "SorterNext" OpHelp(""), | |
| 35301 | - /* 37 */ "Prev" OpHelp(""), | |
| 35302 | - /* 38 */ "Next" OpHelp(""), | |
| 35303 | - /* 39 */ "IdxLE" OpHelp("key=r[P3@P4]"), | |
| 35304 | - /* 40 */ "IdxGT" OpHelp("key=r[P3@P4]"), | |
| 35305 | - /* 41 */ "IdxLT" OpHelp("key=r[P3@P4]"), | |
| 35306 | - /* 42 */ "IdxGE" OpHelp("key=r[P3@P4]"), | |
| 35373 | + /* 20 */ "IfNullRow" OpHelp("if P1.nullRow then r[P3]=NULL, goto P2"), | |
| 35374 | + /* 21 */ "SeekLT" OpHelp("key=r[P3@P4]"), | |
| 35375 | + /* 22 */ "SeekLE" OpHelp("key=r[P3@P4]"), | |
| 35376 | + /* 23 */ "SeekGE" OpHelp("key=r[P3@P4]"), | |
| 35377 | + /* 24 */ "SeekGT" OpHelp("key=r[P3@P4]"), | |
| 35378 | + /* 25 */ "IfNotOpen" OpHelp("if( !csr[P1] ) goto P2"), | |
| 35379 | + /* 26 */ "IfNoHope" OpHelp("key=r[P3@P4]"), | |
| 35380 | + /* 27 */ "NoConflict" OpHelp("key=r[P3@P4]"), | |
| 35381 | + /* 28 */ "NotFound" OpHelp("key=r[P3@P4]"), | |
| 35382 | + /* 29 */ "Found" OpHelp("key=r[P3@P4]"), | |
| 35383 | + /* 30 */ "SeekRowid" OpHelp("intkey=r[P3]"), | |
| 35384 | + /* 31 */ "NotExists" OpHelp("intkey=r[P3]"), | |
| 35385 | + /* 32 */ "Last" OpHelp(""), | |
| 35386 | + /* 33 */ "IfSmaller" OpHelp(""), | |
| 35387 | + /* 34 */ "SorterSort" OpHelp(""), | |
| 35388 | + /* 35 */ "Sort" OpHelp(""), | |
| 35389 | + /* 36 */ "Rewind" OpHelp(""), | |
| 35390 | + /* 37 */ "SorterNext" OpHelp(""), | |
| 35391 | + /* 38 */ "Prev" OpHelp(""), | |
| 35392 | + /* 39 */ "Next" OpHelp(""), | |
| 35393 | + /* 40 */ "IdxLE" OpHelp("key=r[P3@P4]"), | |
| 35394 | + /* 41 */ "IdxGT" OpHelp("key=r[P3@P4]"), | |
| 35395 | + /* 42 */ "IdxLT" OpHelp("key=r[P3@P4]"), | |
| 35307 | 35396 | /* 43 */ "Or" OpHelp("r[P3]=(r[P1] || r[P2])"), |
| 35308 | 35397 | /* 44 */ "And" OpHelp("r[P3]=(r[P1] && r[P2])"), |
| 35309 | - /* 45 */ "RowSetRead" OpHelp("r[P3]=rowset(P1)"), | |
| 35310 | - /* 46 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"), | |
| 35311 | - /* 47 */ "Program" OpHelp(""), | |
| 35312 | - /* 48 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"), | |
| 35313 | - /* 49 */ "IfPos" OpHelp("if r[P1]>0 then r[P1]-=P3, goto P2"), | |
| 35398 | + /* 45 */ "IdxGE" OpHelp("key=r[P3@P4]"), | |
| 35399 | + /* 46 */ "RowSetRead" OpHelp("r[P3]=rowset(P1)"), | |
| 35400 | + /* 47 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"), | |
| 35401 | + /* 48 */ "Program" OpHelp(""), | |
| 35402 | + /* 49 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"), | |
| 35314 | 35403 | /* 50 */ "IsNull" OpHelp("if r[P1]==NULL goto P2"), |
| 35315 | 35404 | /* 51 */ "NotNull" OpHelp("if r[P1]!=NULL goto P2"), |
| 35316 | 35405 | /* 52 */ "Ne" OpHelp("IF r[P3]!=r[P1]"), |
| 35317 | 35406 | /* 53 */ "Eq" OpHelp("IF r[P3]==r[P1]"), |
| 35318 | 35407 | /* 54 */ "Gt" OpHelp("IF r[P3]>r[P1]"), |
| 35319 | 35408 | /* 55 */ "Le" OpHelp("IF r[P3]<=r[P1]"), |
| 35320 | 35409 | /* 56 */ "Lt" OpHelp("IF r[P3]<r[P1]"), |
| 35321 | 35410 | /* 57 */ "Ge" OpHelp("IF r[P3]>=r[P1]"), |
| 35322 | 35411 | /* 58 */ "ElseEq" OpHelp(""), |
| 35323 | - /* 59 */ "IfNotZero" OpHelp("if r[P1]!=0 then r[P1]--, goto P2"), | |
| 35324 | - /* 60 */ "DecrJumpZero" OpHelp("if (--r[P1])==0 goto P2"), | |
| 35325 | - /* 61 */ "IncrVacuum" OpHelp(""), | |
| 35326 | - /* 62 */ "VNext" OpHelp(""), | |
| 35327 | - /* 63 */ "Filter" OpHelp("if key(P3@P4) not in filter(P1) goto P2"), | |
| 35328 | - /* 64 */ "Init" OpHelp("Start at P2"), | |
| 35412 | + /* 59 */ "IfPos" OpHelp("if r[P1]>0 then r[P1]-=P3, goto P2"), | |
| 35413 | + /* 60 */ "IfNotZero" OpHelp("if r[P1]!=0 then r[P1]--, goto P2"), | |
| 35414 | + /* 61 */ "DecrJumpZero" OpHelp("if (--r[P1])==0 goto P2"), | |
| 35415 | + /* 62 */ "IncrVacuum" OpHelp(""), | |
| 35416 | + /* 63 */ "VNext" OpHelp(""), | |
| 35417 | + /* 64 */ "Filter" OpHelp("if key(P3@P4) not in filter(P1) goto P2"), | |
| 35329 | 35418 | /* 65 */ "PureFunc" OpHelp("r[P3]=func(r[P2@NP])"), |
| 35330 | 35419 | /* 66 */ "Function" OpHelp("r[P3]=func(r[P2@NP])"), |
| 35331 | 35420 | /* 67 */ "Return" OpHelp(""), |
| 35332 | 35421 | /* 68 */ "EndCoroutine" OpHelp(""), |
| 35333 | 35422 | /* 69 */ "HaltIfNull" OpHelp("if r[P3]=null halt"), |
| @@ -41310,30 +41399,39 @@ | ||
| 41310 | 41399 | ** pVfs->mxPathname bytes. |
| 41311 | 41400 | */ |
| 41312 | 41401 | static int unixGetTempname(int nBuf, char *zBuf){ |
| 41313 | 41402 | const char *zDir; |
| 41314 | 41403 | int iLimit = 0; |
| 41404 | + int rc = SQLITE_OK; | |
| 41315 | 41405 | |
| 41316 | 41406 | /* It's odd to simulate an io-error here, but really this is just |
| 41317 | 41407 | ** using the io-error infrastructure to test that SQLite handles this |
| 41318 | 41408 | ** function failing. |
| 41319 | 41409 | */ |
| 41320 | 41410 | zBuf[0] = 0; |
| 41321 | 41411 | SimulateIOError( return SQLITE_IOERR ); |
| 41322 | 41412 | |
| 41413 | + sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); | |
| 41323 | 41414 | zDir = unixTempFileDir(); |
| 41324 | - if( zDir==0 ) return SQLITE_IOERR_GETTEMPPATH; | |
| 41325 | - do{ | |
| 41326 | - u64 r; | |
| 41327 | - sqlite3_randomness(sizeof(r), &r); | |
| 41328 | - assert( nBuf>2 ); | |
| 41329 | - zBuf[nBuf-2] = 0; | |
| 41330 | - sqlite3_snprintf(nBuf, zBuf, "%s/"SQLITE_TEMP_FILE_PREFIX"%llx%c", | |
| 41331 | - zDir, r, 0); | |
| 41332 | - if( zBuf[nBuf-2]!=0 || (iLimit++)>10 ) return SQLITE_ERROR; | |
| 41333 | - }while( osAccess(zBuf,0)==0 ); | |
| 41334 | - return SQLITE_OK; | |
| 41415 | + if( zDir==0 ){ | |
| 41416 | + rc = SQLITE_IOERR_GETTEMPPATH; | |
| 41417 | + }else{ | |
| 41418 | + do{ | |
| 41419 | + u64 r; | |
| 41420 | + sqlite3_randomness(sizeof(r), &r); | |
| 41421 | + assert( nBuf>2 ); | |
| 41422 | + zBuf[nBuf-2] = 0; | |
| 41423 | + sqlite3_snprintf(nBuf, zBuf, "%s/"SQLITE_TEMP_FILE_PREFIX"%llx%c", | |
| 41424 | + zDir, r, 0); | |
| 41425 | + if( zBuf[nBuf-2]!=0 || (iLimit++)>10 ){ | |
| 41426 | + rc = SQLITE_ERROR; | |
| 41427 | + break; | |
| 41428 | + } | |
| 41429 | + }while( osAccess(zBuf,0)==0 ); | |
| 41430 | + } | |
| 41431 | + sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); | |
| 41432 | + return rc; | |
| 41335 | 41433 | } |
| 41336 | 41434 | |
| 41337 | 41435 | #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__) |
| 41338 | 41436 | /* |
| 41339 | 41437 | ** Routine to transform a unixFile into a proxy-locking unixFile. |
| @@ -43504,11 +43602,16 @@ | ||
| 43504 | 43602 | ** correctly. See ticket [bb3a86e890c8e96ab] */ |
| 43505 | 43603 | assert( ArraySize(aSyscall)==29 ); |
| 43506 | 43604 | |
| 43507 | 43605 | /* Register all VFSes defined in the aVfs[] array */ |
| 43508 | 43606 | for(i=0; i<(sizeof(aVfs)/sizeof(sqlite3_vfs)); i++){ |
| 43607 | +#ifdef SQLITE_DEFAULT_UNIX_VFS | |
| 43608 | + sqlite3_vfs_register(&aVfs[i], | |
| 43609 | + 0==strcmp(aVfs[i].zName,SQLITE_DEFAULT_UNIX_VFS)); | |
| 43610 | +#else | |
| 43509 | 43611 | sqlite3_vfs_register(&aVfs[i], i==0); |
| 43612 | +#endif | |
| 43510 | 43613 | } |
| 43511 | 43614 | unixBigLock = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1); |
| 43512 | 43615 | |
| 43513 | 43616 | #ifndef SQLITE_OMIT_WAL |
| 43514 | 43617 | /* Validate lock assumptions */ |
| @@ -45472,10 +45575,11 @@ | ||
| 45472 | 45575 | char **ppDirectory = 0; |
| 45473 | 45576 | #ifndef SQLITE_OMIT_AUTOINIT |
| 45474 | 45577 | int rc = sqlite3_initialize(); |
| 45475 | 45578 | if( rc ) return rc; |
| 45476 | 45579 | #endif |
| 45580 | + sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); | |
| 45477 | 45581 | if( type==SQLITE_WIN32_DATA_DIRECTORY_TYPE ){ |
| 45478 | 45582 | ppDirectory = &sqlite3_data_directory; |
| 45479 | 45583 | }else if( type==SQLITE_WIN32_TEMP_DIRECTORY_TYPE ){ |
| 45480 | 45584 | ppDirectory = &sqlite3_temp_directory; |
| 45481 | 45585 | } |
| @@ -45486,18 +45590,23 @@ | ||
| 45486 | 45590 | if( ppDirectory ){ |
| 45487 | 45591 | char *zCopy = 0; |
| 45488 | 45592 | if( zValue && zValue[0] ){ |
| 45489 | 45593 | zCopy = sqlite3_mprintf("%s", zValue); |
| 45490 | 45594 | if ( zCopy==0 ){ |
| 45491 | - return SQLITE_NOMEM_BKPT; | |
| 45595 | + rc = SQLITE_NOMEM_BKPT; | |
| 45596 | + goto set_directory8_done; | |
| 45492 | 45597 | } |
| 45493 | 45598 | } |
| 45494 | 45599 | sqlite3_free(*ppDirectory); |
| 45495 | 45600 | *ppDirectory = zCopy; |
| 45496 | - return SQLITE_OK; | |
| 45601 | + rc = SQLITE_OK; | |
| 45602 | + }else{ | |
| 45603 | + rc = SQLITE_ERROR; | |
| 45497 | 45604 | } |
| 45498 | - return SQLITE_ERROR; | |
| 45605 | +set_directory8_done: | |
| 45606 | + sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); | |
| 45607 | + return rc; | |
| 45499 | 45608 | } |
| 45500 | 45609 | |
| 45501 | 45610 | /* |
| 45502 | 45611 | ** This function is the same as sqlite3_win32_set_directory (below); however, |
| 45503 | 45612 | ** it accepts a UTF-16 string. |
| @@ -48266,10 +48375,22 @@ | ||
| 48266 | 48375 | } |
| 48267 | 48376 | } |
| 48268 | 48377 | } |
| 48269 | 48378 | return 0; |
| 48270 | 48379 | } |
| 48380 | + | |
| 48381 | +/* | |
| 48382 | +** If sqlite3_temp_directory is not, take the mutex and return true. | |
| 48383 | +** | |
| 48384 | +** If sqlite3_temp_directory is NULL, omit the mutex and return false. | |
| 48385 | +*/ | |
| 48386 | +static int winTempDirDefined(void){ | |
| 48387 | + sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); | |
| 48388 | + if( sqlite3_temp_directory!=0 ) return 1; | |
| 48389 | + sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); | |
| 48390 | + return 0; | |
| 48391 | +} | |
| 48271 | 48392 | |
| 48272 | 48393 | /* |
| 48273 | 48394 | ** Create a temporary file name and store the resulting pointer into pzBuf. |
| 48274 | 48395 | ** The pointer returned in pzBuf must be freed via sqlite3_free(). |
| 48275 | 48396 | */ |
| @@ -48303,24 +48424,27 @@ | ||
| 48303 | 48424 | ** has been explicitly set by the application; otherwise, use the one |
| 48304 | 48425 | ** configured by the operating system. |
| 48305 | 48426 | */ |
| 48306 | 48427 | nDir = nMax - (nPre + 15); |
| 48307 | 48428 | assert( nDir>0 ); |
| 48308 | - if( sqlite3_temp_directory ){ | |
| 48429 | + if( winTempDirDefined() ){ | |
| 48309 | 48430 | int nDirLen = sqlite3Strlen30(sqlite3_temp_directory); |
| 48310 | 48431 | if( nDirLen>0 ){ |
| 48311 | 48432 | if( !winIsDirSep(sqlite3_temp_directory[nDirLen-1]) ){ |
| 48312 | 48433 | nDirLen++; |
| 48313 | 48434 | } |
| 48314 | 48435 | if( nDirLen>nDir ){ |
| 48436 | + sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); | |
| 48315 | 48437 | sqlite3_free(zBuf); |
| 48316 | 48438 | OSTRACE(("TEMP-FILENAME rc=SQLITE_ERROR\n")); |
| 48317 | 48439 | return winLogError(SQLITE_ERROR, 0, "winGetTempname1", 0); |
| 48318 | 48440 | } |
| 48319 | 48441 | sqlite3_snprintf(nMax, zBuf, "%s", sqlite3_temp_directory); |
| 48320 | 48442 | } |
| 48443 | + sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); | |
| 48321 | 48444 | } |
| 48445 | + | |
| 48322 | 48446 | #if defined(__CYGWIN__) |
| 48323 | 48447 | else{ |
| 48324 | 48448 | static const char *azDirs[] = { |
| 48325 | 48449 | 0, /* getenv("SQLITE_TMPDIR") */ |
| 48326 | 48450 | 0, /* getenv("TMPDIR") */ |
| @@ -49105,11 +49229,11 @@ | ||
| 49105 | 49229 | /* |
| 49106 | 49230 | ** Turn a relative pathname into a full pathname. Write the full |
| 49107 | 49231 | ** pathname into zOut[]. zOut[] will be at least pVfs->mxPathname |
| 49108 | 49232 | ** bytes in size. |
| 49109 | 49233 | */ |
| 49110 | -static int winFullPathname( | |
| 49234 | +static int winFullPathnameNoMutex( | |
| 49111 | 49235 | sqlite3_vfs *pVfs, /* Pointer to vfs object */ |
| 49112 | 49236 | const char *zRelative, /* Possibly relative input path */ |
| 49113 | 49237 | int nFull, /* Size of output buffer in bytes */ |
| 49114 | 49238 | char *zFull /* Output buffer */ |
| 49115 | 49239 | ){ |
| @@ -49283,10 +49407,23 @@ | ||
| 49283 | 49407 | return SQLITE_OK; |
| 49284 | 49408 | }else{ |
| 49285 | 49409 | return SQLITE_IOERR_NOMEM_BKPT; |
| 49286 | 49410 | } |
| 49287 | 49411 | #endif |
| 49412 | +} | |
| 49413 | +static int winFullPathname( | |
| 49414 | + sqlite3_vfs *pVfs, /* Pointer to vfs object */ | |
| 49415 | + const char *zRelative, /* Possibly relative input path */ | |
| 49416 | + int nFull, /* Size of output buffer in bytes */ | |
| 49417 | + char *zFull /* Output buffer */ | |
| 49418 | +){ | |
| 49419 | + int rc; | |
| 49420 | + sqlite3_mutex *pMutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR); | |
| 49421 | + sqlite3_mutex_enter(pMutex); | |
| 49422 | + rc = winFullPathnameNoMutex(pVfs, zRelative, nFull, zFull); | |
| 49423 | + sqlite3_mutex_leave(pMutex); | |
| 49424 | + return rc; | |
| 49288 | 49425 | } |
| 49289 | 49426 | |
| 49290 | 49427 | #ifndef SQLITE_OMIT_LOAD_EXTENSION |
| 49291 | 49428 | /* |
| 49292 | 49429 | ** Interfaces for opening a shared library, finding entry points |
| @@ -51072,39 +51209,58 @@ | ||
| 51072 | 51209 | */ |
| 51073 | 51210 | #if defined(SQLITE_DEBUG) && 0 |
| 51074 | 51211 | int sqlite3PcacheTrace = 2; /* 0: off 1: simple 2: cache dumps */ |
| 51075 | 51212 | int sqlite3PcacheMxDump = 9999; /* Max cache entries for pcacheDump() */ |
| 51076 | 51213 | # define pcacheTrace(X) if(sqlite3PcacheTrace){sqlite3DebugPrintf X;} |
| 51077 | - void pcacheDump(PCache *pCache){ | |
| 51078 | - int N; | |
| 51079 | - int i, j; | |
| 51080 | - sqlite3_pcache_page *pLower; | |
| 51214 | + static void pcachePageTrace(int i, sqlite3_pcache_page *pLower){ | |
| 51081 | 51215 | PgHdr *pPg; |
| 51082 | 51216 | unsigned char *a; |
| 51217 | + int j; | |
| 51218 | + pPg = (PgHdr*)pLower->pExtra; | |
| 51219 | + printf("%3d: nRef %2d flgs %02x data ", i, pPg->nRef, pPg->flags); | |
| 51220 | + a = (unsigned char *)pLower->pBuf; | |
| 51221 | + for(j=0; j<12; j++) printf("%02x", a[j]); | |
| 51222 | + printf(" ptr %p\n", pPg); | |
| 51223 | + } | |
| 51224 | + static void pcacheDump(PCache *pCache){ | |
| 51225 | + int N; | |
| 51226 | + int i; | |
| 51227 | + sqlite3_pcache_page *pLower; | |
| 51083 | 51228 | |
| 51084 | 51229 | if( sqlite3PcacheTrace<2 ) return; |
| 51085 | 51230 | if( pCache->pCache==0 ) return; |
| 51086 | 51231 | N = sqlite3PcachePagecount(pCache); |
| 51087 | 51232 | if( N>sqlite3PcacheMxDump ) N = sqlite3PcacheMxDump; |
| 51088 | 51233 | for(i=1; i<=N; i++){ |
| 51089 | 51234 | pLower = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, i, 0); |
| 51090 | 51235 | if( pLower==0 ) continue; |
| 51091 | - pPg = (PgHdr*)pLower->pExtra; | |
| 51092 | - printf("%3d: nRef %2d flgs %02x data ", i, pPg->nRef, pPg->flags); | |
| 51093 | - a = (unsigned char *)pLower->pBuf; | |
| 51094 | - for(j=0; j<12; j++) printf("%02x", a[j]); | |
| 51095 | - printf("\n"); | |
| 51096 | - if( pPg->pPage==0 ){ | |
| 51236 | + pcachePageTrace(i, pLower); | |
| 51237 | + if( ((PgHdr*)pLower)->pPage==0 ){ | |
| 51097 | 51238 | sqlite3GlobalConfig.pcache2.xUnpin(pCache->pCache, pLower, 0); |
| 51098 | 51239 | } |
| 51099 | 51240 | } |
| 51100 | 51241 | } |
| 51101 | - #else | |
| 51242 | +#else | |
| 51102 | 51243 | # define pcacheTrace(X) |
| 51244 | +# define pcachePageTrace(PGNO, X) | |
| 51103 | 51245 | # define pcacheDump(X) |
| 51104 | 51246 | #endif |
| 51105 | 51247 | |
| 51248 | +/* | |
| 51249 | +** Return 1 if pPg is on the dirty list for pCache. Return 0 if not. | |
| 51250 | +** This routine runs inside of assert() statements only. | |
| 51251 | +*/ | |
| 51252 | +#ifdef SQLITE_DEBUG | |
| 51253 | +static int pageOnDirtyList(PCache *pCache, PgHdr *pPg){ | |
| 51254 | + PgHdr *p; | |
| 51255 | + for(p=pCache->pDirty; p; p=p->pDirtyNext){ | |
| 51256 | + if( p==pPg ) return 1; | |
| 51257 | + } | |
| 51258 | + return 0; | |
| 51259 | +} | |
| 51260 | +#endif | |
| 51261 | + | |
| 51106 | 51262 | /* |
| 51107 | 51263 | ** Check invariants on a PgHdr entry. Return true if everything is OK. |
| 51108 | 51264 | ** Return false if any invariant is violated. |
| 51109 | 51265 | ** |
| 51110 | 51266 | ** This routine is for use inside of assert() statements only. For |
| @@ -51119,12 +51275,17 @@ | ||
| 51119 | 51275 | assert( pPg->pgno>0 || pPg->pPager==0 ); /* Page number is 1 or more */ |
| 51120 | 51276 | pCache = pPg->pCache; |
| 51121 | 51277 | assert( pCache!=0 ); /* Every page has an associated PCache */ |
| 51122 | 51278 | if( pPg->flags & PGHDR_CLEAN ){ |
| 51123 | 51279 | assert( (pPg->flags & PGHDR_DIRTY)==0 );/* Cannot be both CLEAN and DIRTY */ |
| 51124 | - assert( pCache->pDirty!=pPg ); /* CLEAN pages not on dirty list */ | |
| 51125 | - assert( pCache->pDirtyTail!=pPg ); | |
| 51280 | + assert( !pageOnDirtyList(pCache, pPg) );/* CLEAN pages not on dirty list */ | |
| 51281 | + }else{ | |
| 51282 | + assert( (pPg->flags & PGHDR_DIRTY)!=0 );/* If not CLEAN must be DIRTY */ | |
| 51283 | + assert( pPg->pDirtyNext==0 || pPg->pDirtyNext->pDirtyPrev==pPg ); | |
| 51284 | + assert( pPg->pDirtyPrev==0 || pPg->pDirtyPrev->pDirtyNext==pPg ); | |
| 51285 | + assert( pPg->pDirtyPrev!=0 || pCache->pDirty==pPg ); | |
| 51286 | + assert( pageOnDirtyList(pCache, pPg) ); | |
| 51126 | 51287 | } |
| 51127 | 51288 | /* WRITEABLE pages must also be DIRTY */ |
| 51128 | 51289 | if( pPg->flags & PGHDR_WRITEABLE ){ |
| 51129 | 51290 | assert( pPg->flags & PGHDR_DIRTY ); /* WRITEABLE implies DIRTY */ |
| 51130 | 51291 | } |
| @@ -51394,12 +51555,13 @@ | ||
| 51394 | 51555 | eCreate = createFlag & pCache->eCreate; |
| 51395 | 51556 | assert( eCreate==0 || eCreate==1 || eCreate==2 ); |
| 51396 | 51557 | assert( createFlag==0 || pCache->eCreate==eCreate ); |
| 51397 | 51558 | assert( createFlag==0 || eCreate==1+(!pCache->bPurgeable||!pCache->pDirty) ); |
| 51398 | 51559 | pRes = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, pgno, eCreate); |
| 51399 | - pcacheTrace(("%p.FETCH %d%s (result: %p)\n",pCache,pgno, | |
| 51560 | + pcacheTrace(("%p.FETCH %d%s (result: %p) ",pCache,pgno, | |
| 51400 | 51561 | createFlag?" create":"",pRes)); |
| 51562 | + pcachePageTrace(pgno, pRes); | |
| 51401 | 51563 | return pRes; |
| 51402 | 51564 | } |
| 51403 | 51565 | |
| 51404 | 51566 | /* |
| 51405 | 51567 | ** If the sqlite3PcacheFetch() routine is unable to allocate a new |
| @@ -51523,10 +51685,11 @@ | ||
| 51523 | 51685 | if( (--p->nRef)==0 ){ |
| 51524 | 51686 | if( p->flags&PGHDR_CLEAN ){ |
| 51525 | 51687 | pcacheUnpin(p); |
| 51526 | 51688 | }else{ |
| 51527 | 51689 | pcacheManageDirtyList(p, PCACHE_DIRTYLIST_FRONT); |
| 51690 | + assert( sqlite3PcachePageSanity(p) ); | |
| 51528 | 51691 | } |
| 51529 | 51692 | } |
| 51530 | 51693 | } |
| 51531 | 51694 | |
| 51532 | 51695 | /* |
| @@ -51566,10 +51729,11 @@ | ||
| 51566 | 51729 | if( p->flags & PGHDR_CLEAN ){ |
| 51567 | 51730 | p->flags ^= (PGHDR_DIRTY|PGHDR_CLEAN); |
| 51568 | 51731 | pcacheTrace(("%p.DIRTY %d\n",p->pCache,p->pgno)); |
| 51569 | 51732 | assert( (p->flags & (PGHDR_DIRTY|PGHDR_CLEAN))==PGHDR_DIRTY ); |
| 51570 | 51733 | pcacheManageDirtyList(p, PCACHE_DIRTYLIST_ADD); |
| 51734 | + assert( sqlite3PcachePageSanity(p) ); | |
| 51571 | 51735 | } |
| 51572 | 51736 | assert( sqlite3PcachePageSanity(p) ); |
| 51573 | 51737 | } |
| 51574 | 51738 | } |
| 51575 | 51739 | |
| @@ -51628,18 +51792,28 @@ | ||
| 51628 | 51792 | /* |
| 51629 | 51793 | ** Change the page number of page p to newPgno. |
| 51630 | 51794 | */ |
| 51631 | 51795 | SQLITE_PRIVATE void sqlite3PcacheMove(PgHdr *p, Pgno newPgno){ |
| 51632 | 51796 | PCache *pCache = p->pCache; |
| 51797 | + sqlite3_pcache_page *pOther; | |
| 51633 | 51798 | assert( p->nRef>0 ); |
| 51634 | 51799 | assert( newPgno>0 ); |
| 51635 | 51800 | assert( sqlite3PcachePageSanity(p) ); |
| 51636 | 51801 | pcacheTrace(("%p.MOVE %d -> %d\n",pCache,p->pgno,newPgno)); |
| 51802 | + pOther = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, newPgno, 0); | |
| 51637 | 51803 | sqlite3GlobalConfig.pcache2.xRekey(pCache->pCache, p->pPage, p->pgno,newPgno); |
| 51804 | + if( pOther ){ | |
| 51805 | + PgHdr *pPg = (PgHdr*)pOther->pExtra; | |
| 51806 | + pPg->pgno = p->pgno; | |
| 51807 | + if( pPg->pPage==0 ){ | |
| 51808 | + sqlite3GlobalConfig.pcache2.xUnpin(pCache->pCache, pOther, 0); | |
| 51809 | + } | |
| 51810 | + } | |
| 51638 | 51811 | p->pgno = newPgno; |
| 51639 | 51812 | if( (p->flags&PGHDR_DIRTY) && (p->flags&PGHDR_NEED_SYNC) ){ |
| 51640 | 51813 | pcacheManageDirtyList(p, PCACHE_DIRTYLIST_FRONT); |
| 51814 | + assert( sqlite3PcachePageSanity(p) ); | |
| 51641 | 51815 | } |
| 51642 | 51816 | } |
| 51643 | 51817 | |
| 51644 | 51818 | /* |
| 51645 | 51819 | ** Drop every cache entry whose page number is greater than "pgno". The |
| @@ -51933,16 +52107,17 @@ | ||
| 51933 | 52107 | ** runtime using sqlite3_config(SQLITE_CONFIG_PCACHE_HDRSZ, &size). The |
| 51934 | 52108 | ** sizes of the extensions sum to 272 bytes on x64 for 3.8.10, but this |
| 51935 | 52109 | ** size can vary according to architecture, compile-time options, and |
| 51936 | 52110 | ** SQLite library version number. |
| 51937 | 52111 | ** |
| 51938 | -** If SQLITE_PCACHE_SEPARATE_HEADER is defined, then the extension is obtained | |
| 51939 | -** using a separate memory allocation from the database page content. This | |
| 51940 | -** seeks to overcome the "clownshoe" problem (also called "internal | |
| 51941 | -** fragmentation" in academic literature) of allocating a few bytes more | |
| 51942 | -** than a power of two with the memory allocator rounding up to the next | |
| 51943 | -** power of two, and leaving the rounded-up space unused. | |
| 52112 | +** Historical note: It used to be that if the SQLITE_PCACHE_SEPARATE_HEADER | |
| 52113 | +** was defined, then the page content would be held in a separate memory | |
| 52114 | +** allocation from the PgHdr1. This was intended to avoid clownshoe memory | |
| 52115 | +** allocations. However, the btree layer needs a small (16-byte) overrun | |
| 52116 | +** area after the page content buffer. The header serves as that overrun | |
| 52117 | +** area. Therefore SQLITE_PCACHE_SEPARATE_HEADER was discontinued to avoid | |
| 52118 | +** any possibility of a memory error. | |
| 51944 | 52119 | ** |
| 51945 | 52120 | ** This module tracks pointers to PgHdr1 objects. Only pcache.c communicates |
| 51946 | 52121 | ** with this module. Information is passed back and forth as PgHdr1 pointers. |
| 51947 | 52122 | ** |
| 51948 | 52123 | ** The pcache.c and pager.c modules deal pointers to PgHdr objects. |
| @@ -51983,34 +52158,44 @@ | ||
| 51983 | 52158 | typedef struct PgFreeslot PgFreeslot; |
| 51984 | 52159 | typedef struct PGroup PGroup; |
| 51985 | 52160 | |
| 51986 | 52161 | /* |
| 51987 | 52162 | ** Each cache entry is represented by an instance of the following |
| 51988 | -** structure. Unless SQLITE_PCACHE_SEPARATE_HEADER is defined, a buffer of | |
| 51989 | -** PgHdr1.pCache->szPage bytes is allocated directly before this structure | |
| 51990 | -** in memory. | |
| 52163 | +** structure. A buffer of PgHdr1.pCache->szPage bytes is allocated | |
| 52164 | +** directly before this structure and is used to cache the page content. | |
| 51991 | 52165 | ** |
| 51992 | -** Note: Variables isBulkLocal and isAnchor were once type "u8". That works, | |
| 52166 | +** When reading a corrupt database file, it is possible that SQLite might | |
| 52167 | +** read a few bytes (no more than 16 bytes) past the end of the page buffer. | |
| 52168 | +** It will only read past the end of the page buffer, never write. This | |
| 52169 | +** object is positioned immediately after the page buffer to serve as an | |
| 52170 | +** overrun area, so that overreads are harmless. | |
| 52171 | +** | |
| 52172 | +** Variables isBulkLocal and isAnchor were once type "u8". That works, | |
| 51993 | 52173 | ** but causes a 2-byte gap in the structure for most architectures (since |
| 51994 | 52174 | ** pointers must be either 4 or 8-byte aligned). As this structure is located |
| 51995 | 52175 | ** in memory directly after the associated page data, if the database is |
| 51996 | 52176 | ** corrupt, code at the b-tree layer may overread the page buffer and |
| 51997 | 52177 | ** read part of this structure before the corruption is detected. This |
| 51998 | 52178 | ** can cause a valgrind error if the unitialized gap is accessed. Using u16 |
| 51999 | -** ensures there is no such gap, and therefore no bytes of unitialized memory | |
| 52000 | -** in the structure. | |
| 52179 | +** ensures there is no such gap, and therefore no bytes of uninitialized | |
| 52180 | +** memory in the structure. | |
| 52181 | +** | |
| 52182 | +** The pLruNext and pLruPrev pointers form a double-linked circular list | |
| 52183 | +** of all pages that are unpinned. The PGroup.lru element (which should be | |
| 52184 | +** the only element on the list with PgHdr1.isAnchor set to 1) forms the | |
| 52185 | +** beginning and the end of the list. | |
| 52001 | 52186 | */ |
| 52002 | 52187 | struct PgHdr1 { |
| 52003 | - sqlite3_pcache_page page; /* Base class. Must be first. pBuf & pExtra */ | |
| 52004 | - unsigned int iKey; /* Key value (page number) */ | |
| 52005 | - u16 isBulkLocal; /* This page from bulk local storage */ | |
| 52006 | - u16 isAnchor; /* This is the PGroup.lru element */ | |
| 52007 | - PgHdr1 *pNext; /* Next in hash table chain */ | |
| 52008 | - PCache1 *pCache; /* Cache that currently owns this page */ | |
| 52009 | - PgHdr1 *pLruNext; /* Next in LRU list of unpinned pages */ | |
| 52010 | - PgHdr1 *pLruPrev; /* Previous in LRU list of unpinned pages */ | |
| 52011 | - /* NB: pLruPrev is only valid if pLruNext!=0 */ | |
| 52188 | + sqlite3_pcache_page page; /* Base class. Must be first. pBuf & pExtra */ | |
| 52189 | + unsigned int iKey; /* Key value (page number) */ | |
| 52190 | + u16 isBulkLocal; /* This page from bulk local storage */ | |
| 52191 | + u16 isAnchor; /* This is the PGroup.lru element */ | |
| 52192 | + PgHdr1 *pNext; /* Next in hash table chain */ | |
| 52193 | + PCache1 *pCache; /* Cache that currently owns this page */ | |
| 52194 | + PgHdr1 *pLruNext; /* Next in circular LRU list of unpinned pages */ | |
| 52195 | + PgHdr1 *pLruPrev; /* Previous in LRU list of unpinned pages */ | |
| 52196 | + /* NB: pLruPrev is only valid if pLruNext!=0 */ | |
| 52012 | 52197 | }; |
| 52013 | 52198 | |
| 52014 | 52199 | /* |
| 52015 | 52200 | ** A page is pinned if it is not on the LRU list. To be "pinned" means |
| 52016 | 52201 | ** that the page is in active use and must not be deallocated. |
| @@ -52332,29 +52517,17 @@ | ||
| 52332 | 52517 | assert( pcache1.separateCache==0 ); |
| 52333 | 52518 | assert( pCache->pGroup==&pcache1.grp ); |
| 52334 | 52519 | pcache1LeaveMutex(pCache->pGroup); |
| 52335 | 52520 | #endif |
| 52336 | 52521 | if( benignMalloc ){ sqlite3BeginBenignMalloc(); } |
| 52337 | -#ifdef SQLITE_PCACHE_SEPARATE_HEADER | |
| 52338 | - pPg = pcache1Alloc(pCache->szPage); | |
| 52339 | - p = sqlite3Malloc(sizeof(PgHdr1) + pCache->szExtra); | |
| 52340 | - if( !pPg || !p ){ | |
| 52341 | - pcache1Free(pPg); | |
| 52342 | - sqlite3_free(p); | |
| 52343 | - pPg = 0; | |
| 52344 | - } | |
| 52345 | -#else | |
| 52346 | 52522 | pPg = pcache1Alloc(pCache->szAlloc); |
| 52347 | -#endif | |
| 52348 | 52523 | if( benignMalloc ){ sqlite3EndBenignMalloc(); } |
| 52349 | 52524 | #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT |
| 52350 | 52525 | pcache1EnterMutex(pCache->pGroup); |
| 52351 | 52526 | #endif |
| 52352 | 52527 | if( pPg==0 ) return 0; |
| 52353 | -#ifndef SQLITE_PCACHE_SEPARATE_HEADER | |
| 52354 | 52528 | p = (PgHdr1 *)&((u8 *)pPg)[pCache->szPage]; |
| 52355 | -#endif | |
| 52356 | 52529 | p->page.pBuf = pPg; |
| 52357 | 52530 | p->page.pExtra = &p[1]; |
| 52358 | 52531 | p->isBulkLocal = 0; |
| 52359 | 52532 | p->isAnchor = 0; |
| 52360 | 52533 | p->pLruPrev = 0; /* Initializing this saves a valgrind error */ |
| @@ -52374,13 +52547,10 @@ | ||
| 52374 | 52547 | if( p->isBulkLocal ){ |
| 52375 | 52548 | p->pNext = pCache->pFree; |
| 52376 | 52549 | pCache->pFree = p; |
| 52377 | 52550 | }else{ |
| 52378 | 52551 | pcache1Free(p->page.pBuf); |
| 52379 | -#ifdef SQLITE_PCACHE_SEPARATE_HEADER | |
| 52380 | - sqlite3_free(p); | |
| 52381 | -#endif | |
| 52382 | 52552 | } |
| 52383 | 52553 | (*pCache->pnPurgeable)--; |
| 52384 | 52554 | } |
| 52385 | 52555 | |
| 52386 | 52556 | /* |
| @@ -53017,27 +53187,45 @@ | ||
| 53017 | 53187 | unsigned int iNew |
| 53018 | 53188 | ){ |
| 53019 | 53189 | PCache1 *pCache = (PCache1 *)p; |
| 53020 | 53190 | PgHdr1 *pPage = (PgHdr1 *)pPg; |
| 53021 | 53191 | PgHdr1 **pp; |
| 53022 | - unsigned int h; | |
| 53192 | + unsigned int hOld, hNew; | |
| 53023 | 53193 | assert( pPage->iKey==iOld ); |
| 53024 | 53194 | assert( pPage->pCache==pCache ); |
| 53195 | + assert( iOld!=iNew ); /* The page number really is changing */ | |
| 53025 | 53196 | |
| 53026 | 53197 | pcache1EnterMutex(pCache->pGroup); |
| 53027 | 53198 | |
| 53028 | - h = iOld%pCache->nHash; | |
| 53029 | - pp = &pCache->apHash[h]; | |
| 53199 | + assert( pcache1FetchNoMutex(p, iOld, 0)==pPage ); /* pPg really is iOld */ | |
| 53200 | + hOld = iOld%pCache->nHash; | |
| 53201 | + pp = &pCache->apHash[hOld]; | |
| 53030 | 53202 | while( (*pp)!=pPage ){ |
| 53031 | 53203 | pp = &(*pp)->pNext; |
| 53032 | 53204 | } |
| 53033 | 53205 | *pp = pPage->pNext; |
| 53034 | 53206 | |
| 53035 | - h = iNew%pCache->nHash; | |
| 53207 | + hNew = iNew%pCache->nHash; | |
| 53208 | + pp = &pCache->apHash[hNew]; | |
| 53209 | + while( *pp ){ | |
| 53210 | + if( (*pp)->iKey==iNew ){ | |
| 53211 | + /* If there is already another pcache entry at iNew, change it to iOld, | |
| 53212 | + ** thus swapping the positions of iNew and iOld */ | |
| 53213 | + PgHdr1 *pOld = *pp; | |
| 53214 | + *pp = pOld->pNext; | |
| 53215 | + pOld->pNext = pCache->apHash[hOld]; | |
| 53216 | + pCache->apHash[hOld] = pOld; | |
| 53217 | + pOld->iKey = iOld; | |
| 53218 | + break; | |
| 53219 | + }else{ | |
| 53220 | + pp = &(*pp)->pNext; | |
| 53221 | + } | |
| 53222 | + } | |
| 53223 | + | |
| 53036 | 53224 | pPage->iKey = iNew; |
| 53037 | - pPage->pNext = pCache->apHash[h]; | |
| 53038 | - pCache->apHash[h] = pPage; | |
| 53225 | + pPage->pNext = pCache->apHash[hNew]; | |
| 53226 | + pCache->apHash[hNew] = pPage; | |
| 53039 | 53227 | if( iNew>pCache->iMaxKey ){ |
| 53040 | 53228 | pCache->iMaxKey = iNew; |
| 53041 | 53229 | } |
| 53042 | 53230 | |
| 53043 | 53231 | pcache1LeaveMutex(pCache->pGroup); |
| @@ -53140,13 +53328,10 @@ | ||
| 53140 | 53328 | while( (nReq<0 || nFree<nReq) |
| 53141 | 53329 | && (p=pcache1.grp.lru.pLruPrev)!=0 |
| 53142 | 53330 | && p->isAnchor==0 |
| 53143 | 53331 | ){ |
| 53144 | 53332 | nFree += pcache1MemSize(p->page.pBuf); |
| 53145 | -#ifdef SQLITE_PCACHE_SEPARATE_HEADER | |
| 53146 | - nFree += sqlite3MemSize(p); | |
| 53147 | -#endif | |
| 53148 | 53333 | assert( PAGE_IS_UNPINNED(p) ); |
| 53149 | 53334 | pcache1PinPage(p); |
| 53150 | 53335 | pcache1RemoveFromHash(p, 1); |
| 53151 | 53336 | } |
| 53152 | 53337 | pcache1LeaveMutex(&pcache1.grp); |
| @@ -59631,10 +59816,11 @@ | ||
| 59631 | 59816 | int flags = SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE; |
| 59632 | 59817 | int nSpill; |
| 59633 | 59818 | |
| 59634 | 59819 | if( pPager->tempFile ){ |
| 59635 | 59820 | flags |= (SQLITE_OPEN_DELETEONCLOSE|SQLITE_OPEN_TEMP_JOURNAL); |
| 59821 | + flags |= SQLITE_OPEN_EXCLUSIVE; | |
| 59636 | 59822 | nSpill = sqlite3Config.nStmtSpill; |
| 59637 | 59823 | }else{ |
| 59638 | 59824 | flags |= SQLITE_OPEN_MAIN_JOURNAL; |
| 59639 | 59825 | nSpill = jrnlBufferSize(pPager); |
| 59640 | 59826 | } |
| @@ -59666,10 +59852,11 @@ | ||
| 59666 | 59852 | } |
| 59667 | 59853 | |
| 59668 | 59854 | if( rc!=SQLITE_OK ){ |
| 59669 | 59855 | sqlite3BitvecDestroy(pPager->pInJournal); |
| 59670 | 59856 | pPager->pInJournal = 0; |
| 59857 | + pPager->journalOff = 0; | |
| 59671 | 59858 | }else{ |
| 59672 | 59859 | assert( pPager->eState==PAGER_WRITER_LOCKED ); |
| 59673 | 59860 | pPager->eState = PAGER_WRITER_CACHEMOD; |
| 59674 | 59861 | } |
| 59675 | 59862 | |
| @@ -66729,10 +66916,11 @@ | ||
| 66729 | 66916 | ** db using sqlite3SchemaToIndex(). |
| 66730 | 66917 | */ |
| 66731 | 66918 | SQLITE_PRIVATE int sqlite3SchemaMutexHeld(sqlite3 *db, int iDb, Schema *pSchema){ |
| 66732 | 66919 | Btree *p; |
| 66733 | 66920 | assert( db!=0 ); |
| 66921 | + if( db->pVfs==0 && db->nDb==0 ) return 1; | |
| 66734 | 66922 | if( pSchema ) iDb = sqlite3SchemaToIndex(db, pSchema); |
| 66735 | 66923 | assert( iDb>=0 && iDb<db->nDb ); |
| 66736 | 66924 | if( !sqlite3_mutex_held(db->mutex) ) return 0; |
| 66737 | 66925 | if( iDb==1 ) return 1; |
| 66738 | 66926 | p = db->aDb[iDb].pBt; |
| @@ -68301,12 +68489,11 @@ | ||
| 68301 | 68489 | assert( sqlite3PagerIswriteable(pPage->pDbPage) ); |
| 68302 | 68490 | assert( pPage->pBt!=0 ); |
| 68303 | 68491 | assert( pPage->pBt->usableSize <= SQLITE_MAX_PAGE_SIZE ); |
| 68304 | 68492 | assert( pPage->nOverflow==0 ); |
| 68305 | 68493 | assert( sqlite3_mutex_held(pPage->pBt->mutex) ); |
| 68306 | - temp = 0; | |
| 68307 | - src = data = pPage->aData; | |
| 68494 | + data = pPage->aData; | |
| 68308 | 68495 | hdr = pPage->hdrOffset; |
| 68309 | 68496 | cellOffset = pPage->cellOffset; |
| 68310 | 68497 | nCell = pPage->nCell; |
| 68311 | 68498 | assert( nCell==get2byte(&data[hdr+3]) || CORRUPT_DB ); |
| 68312 | 68499 | iCellFirst = cellOffset + 2*nCell; |
| @@ -68356,43 +68543,42 @@ | ||
| 68356 | 68543 | } |
| 68357 | 68544 | |
| 68358 | 68545 | cbrk = usableSize; |
| 68359 | 68546 | iCellLast = usableSize - 4; |
| 68360 | 68547 | iCellStart = get2byte(&data[hdr+5]); |
| 68361 | - for(i=0; i<nCell; i++){ | |
| 68362 | - u8 *pAddr; /* The i-th cell pointer */ | |
| 68363 | - pAddr = &data[cellOffset + i*2]; | |
| 68364 | - pc = get2byte(pAddr); | |
| 68365 | - testcase( pc==iCellFirst ); | |
| 68366 | - testcase( pc==iCellLast ); | |
| 68367 | - /* These conditions have already been verified in btreeInitPage() | |
| 68368 | - ** if PRAGMA cell_size_check=ON. | |
| 68369 | - */ | |
| 68370 | - if( pc<iCellStart || pc>iCellLast ){ | |
| 68371 | - return SQLITE_CORRUPT_PAGE(pPage); | |
| 68372 | - } | |
| 68373 | - assert( pc>=iCellStart && pc<=iCellLast ); | |
| 68374 | - size = pPage->xCellSize(pPage, &src[pc]); | |
| 68375 | - cbrk -= size; | |
| 68376 | - if( cbrk<iCellStart || pc+size>usableSize ){ | |
| 68377 | - return SQLITE_CORRUPT_PAGE(pPage); | |
| 68378 | - } | |
| 68379 | - assert( cbrk+size<=usableSize && cbrk>=iCellStart ); | |
| 68380 | - testcase( cbrk+size==usableSize ); | |
| 68381 | - testcase( pc+size==usableSize ); | |
| 68382 | - put2byte(pAddr, cbrk); | |
| 68383 | - if( temp==0 ){ | |
| 68384 | - if( cbrk==pc ) continue; | |
| 68385 | - temp = sqlite3PagerTempSpace(pPage->pBt->pPager); | |
| 68386 | - memcpy(&temp[iCellStart], &data[iCellStart], usableSize - iCellStart); | |
| 68387 | - src = temp; | |
| 68388 | - } | |
| 68389 | - memcpy(&data[cbrk], &src[pc], size); | |
| 68548 | + if( nCell>0 ){ | |
| 68549 | + temp = sqlite3PagerTempSpace(pPage->pBt->pPager); | |
| 68550 | + memcpy(&temp[iCellStart], &data[iCellStart], usableSize - iCellStart); | |
| 68551 | + src = temp; | |
| 68552 | + for(i=0; i<nCell; i++){ | |
| 68553 | + u8 *pAddr; /* The i-th cell pointer */ | |
| 68554 | + pAddr = &data[cellOffset + i*2]; | |
| 68555 | + pc = get2byte(pAddr); | |
| 68556 | + testcase( pc==iCellFirst ); | |
| 68557 | + testcase( pc==iCellLast ); | |
| 68558 | + /* These conditions have already been verified in btreeInitPage() | |
| 68559 | + ** if PRAGMA cell_size_check=ON. | |
| 68560 | + */ | |
| 68561 | + if( pc<iCellStart || pc>iCellLast ){ | |
| 68562 | + return SQLITE_CORRUPT_PAGE(pPage); | |
| 68563 | + } | |
| 68564 | + assert( pc>=iCellStart && pc<=iCellLast ); | |
| 68565 | + size = pPage->xCellSize(pPage, &src[pc]); | |
| 68566 | + cbrk -= size; | |
| 68567 | + if( cbrk<iCellStart || pc+size>usableSize ){ | |
| 68568 | + return SQLITE_CORRUPT_PAGE(pPage); | |
| 68569 | + } | |
| 68570 | + assert( cbrk+size<=usableSize && cbrk>=iCellStart ); | |
| 68571 | + testcase( cbrk+size==usableSize ); | |
| 68572 | + testcase( pc+size==usableSize ); | |
| 68573 | + put2byte(pAddr, cbrk); | |
| 68574 | + memcpy(&data[cbrk], &src[pc], size); | |
| 68575 | + } | |
| 68390 | 68576 | } |
| 68391 | 68577 | data[hdr+7] = 0; |
| 68392 | 68578 | |
| 68393 | - defragment_out: | |
| 68579 | +defragment_out: | |
| 68394 | 68580 | assert( pPage->nFree>=0 ); |
| 68395 | 68581 | if( data[hdr+7]+cbrk-iCellFirst!=pPage->nFree ){ |
| 68396 | 68582 | return SQLITE_CORRUPT_PAGE(pPage); |
| 68397 | 68583 | } |
| 68398 | 68584 | assert( cbrk>=iCellFirst ); |
| @@ -68461,13 +68647,13 @@ | ||
| 68461 | 68647 | return &aData[pc + x]; |
| 68462 | 68648 | } |
| 68463 | 68649 | iAddr = pc; |
| 68464 | 68650 | pTmp = &aData[pc]; |
| 68465 | 68651 | pc = get2byte(pTmp); |
| 68466 | - if( pc<=iAddr+size ){ | |
| 68652 | + if( pc<=iAddr ){ | |
| 68467 | 68653 | if( pc ){ |
| 68468 | - /* The next slot in the chain is not past the end of the current slot */ | |
| 68654 | + /* The next slot in the chain comes before the current slot */ | |
| 68469 | 68655 | *pRc = SQLITE_CORRUPT_PAGE(pPg); |
| 68470 | 68656 | } |
| 68471 | 68657 | return 0; |
| 68472 | 68658 | } |
| 68473 | 68659 | } |
| @@ -68615,11 +68801,11 @@ | ||
| 68615 | 68801 | iPtr = hdr + 1; |
| 68616 | 68802 | if( data[iPtr+1]==0 && data[iPtr]==0 ){ |
| 68617 | 68803 | iFreeBlk = 0; /* Shortcut for the case when the freelist is empty */ |
| 68618 | 68804 | }else{ |
| 68619 | 68805 | while( (iFreeBlk = get2byte(&data[iPtr]))<iStart ){ |
| 68620 | - if( iFreeBlk<iPtr+4 ){ | |
| 68806 | + if( iFreeBlk<=iPtr ){ | |
| 68621 | 68807 | if( iFreeBlk==0 ) break; /* TH3: corrupt082.100 */ |
| 68622 | 68808 | return SQLITE_CORRUPT_PAGE(pPage); |
| 68623 | 68809 | } |
| 68624 | 68810 | iPtr = iFreeBlk; |
| 68625 | 68811 | } |
| @@ -69097,13 +69283,11 @@ | ||
| 69097 | 69283 | if( pCur ){ |
| 69098 | 69284 | pCur->iPage--; |
| 69099 | 69285 | pCur->pPage = pCur->apPage[pCur->iPage]; |
| 69100 | 69286 | } |
| 69101 | 69287 | testcase( pgno==0 ); |
| 69102 | - assert( pgno!=0 || rc==SQLITE_CORRUPT | |
| 69103 | - || rc==SQLITE_IOERR_NOMEM | |
| 69104 | - || rc==SQLITE_NOMEM ); | |
| 69288 | + assert( pgno!=0 || rc!=SQLITE_OK ); | |
| 69105 | 69289 | return rc; |
| 69106 | 69290 | } |
| 69107 | 69291 | |
| 69108 | 69292 | /* |
| 69109 | 69293 | ** Release a MemPage. This should be called once for each prior |
| @@ -72041,12 +72225,10 @@ | ||
| 72041 | 72225 | ** the new child page does not match the flags field of the parent (i.e. |
| 72042 | 72226 | ** if an intkey page appears to be the parent of a non-intkey page, or |
| 72043 | 72227 | ** vice-versa). |
| 72044 | 72228 | */ |
| 72045 | 72229 | static int moveToChild(BtCursor *pCur, u32 newPgno){ |
| 72046 | - BtShared *pBt = pCur->pBt; | |
| 72047 | - | |
| 72048 | 72230 | assert( cursorOwnsBtShared(pCur) ); |
| 72049 | 72231 | assert( pCur->eState==CURSOR_VALID ); |
| 72050 | 72232 | assert( pCur->iPage<BTCURSOR_MAX_DEPTH ); |
| 72051 | 72233 | assert( pCur->iPage>=0 ); |
| 72052 | 72234 | if( pCur->iPage>=(BTCURSOR_MAX_DEPTH-1) ){ |
| @@ -72056,11 +72238,12 @@ | ||
| 72056 | 72238 | pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl); |
| 72057 | 72239 | pCur->aiIdx[pCur->iPage] = pCur->ix; |
| 72058 | 72240 | pCur->apPage[pCur->iPage] = pCur->pPage; |
| 72059 | 72241 | pCur->ix = 0; |
| 72060 | 72242 | pCur->iPage++; |
| 72061 | - return getAndInitPage(pBt, newPgno, &pCur->pPage, pCur, pCur->curPagerFlags); | |
| 72243 | + return getAndInitPage(pCur->pBt, newPgno, &pCur->pPage, pCur, | |
| 72244 | + pCur->curPagerFlags); | |
| 72062 | 72245 | } |
| 72063 | 72246 | |
| 72064 | 72247 | #ifdef SQLITE_DEBUG |
| 72065 | 72248 | /* |
| 72066 | 72249 | ** Page pParent is an internal (non-leaf) tree page. This function |
| @@ -72162,11 +72345,11 @@ | ||
| 72162 | 72345 | assert( pCur->skipNext!=SQLITE_OK ); |
| 72163 | 72346 | return pCur->skipNext; |
| 72164 | 72347 | } |
| 72165 | 72348 | sqlite3BtreeClearCursor(pCur); |
| 72166 | 72349 | } |
| 72167 | - rc = getAndInitPage(pCur->pBtree->pBt, pCur->pgnoRoot, &pCur->pPage, | |
| 72350 | + rc = getAndInitPage(pCur->pBt, pCur->pgnoRoot, &pCur->pPage, | |
| 72168 | 72351 | 0, pCur->curPagerFlags); |
| 72169 | 72352 | if( rc!=SQLITE_OK ){ |
| 72170 | 72353 | pCur->eState = CURSOR_INVALID; |
| 72171 | 72354 | return rc; |
| 72172 | 72355 | } |
| @@ -72635,10 +72818,13 @@ | ||
| 72635 | 72818 | if( pCur->iPage>0 |
| 72636 | 72819 | && indexCellCompare(pCur, 0, pIdxKey, xRecordCompare)<=0 |
| 72637 | 72820 | && pIdxKey->errCode==SQLITE_OK |
| 72638 | 72821 | ){ |
| 72639 | 72822 | pCur->curFlags &= ~BTCF_ValidOvfl; |
| 72823 | + if( !pCur->pPage->isInit ){ | |
| 72824 | + return SQLITE_CORRUPT_BKPT; | |
| 72825 | + } | |
| 72640 | 72826 | goto bypass_moveto_root; /* Start search on the current page */ |
| 72641 | 72827 | } |
| 72642 | 72828 | pIdxKey->errCode = SQLITE_OK; |
| 72643 | 72829 | } |
| 72644 | 72830 | |
| @@ -73800,16 +73986,10 @@ | ||
| 73800 | 73986 | data = pPage->aData; |
| 73801 | 73987 | ptr = &pPage->aCellIdx[2*idx]; |
| 73802 | 73988 | assert( pPage->pBt->usableSize > (u32)(ptr-data) ); |
| 73803 | 73989 | pc = get2byte(ptr); |
| 73804 | 73990 | hdr = pPage->hdrOffset; |
| 73805 | -#if 0 /* Not required. Omit for efficiency */ | |
| 73806 | - if( pc<hdr+pPage->nCell*2 ){ | |
| 73807 | - *pRC = SQLITE_CORRUPT_BKPT; | |
| 73808 | - return; | |
| 73809 | - } | |
| 73810 | -#endif | |
| 73811 | 73991 | testcase( pc==(u32)get2byte(&data[hdr+5]) ); |
| 73812 | 73992 | testcase( pc+sz==pPage->pBt->usableSize ); |
| 73813 | 73993 | if( pc+sz > pPage->pBt->usableSize ){ |
| 73814 | 73994 | *pRC = SQLITE_CORRUPT_BKPT; |
| 73815 | 73995 | return; |
| @@ -74689,12 +74869,10 @@ | ||
| 74689 | 74869 | int szNew[NB+2]; /* Combined size of cells placed on i-th page */ |
| 74690 | 74870 | u8 *aSpace1; /* Space for copies of dividers cells */ |
| 74691 | 74871 | Pgno pgno; /* Temp var to store a page number in */ |
| 74692 | 74872 | u8 abDone[NB+2]; /* True after i'th new page is populated */ |
| 74693 | 74873 | Pgno aPgno[NB+2]; /* Page numbers of new pages before shuffling */ |
| 74694 | - Pgno aPgOrder[NB+2]; /* Copy of aPgno[] used for sorting pages */ | |
| 74695 | - u16 aPgFlags[NB+2]; /* flags field of new pages before shuffling */ | |
| 74696 | 74874 | CellArray b; /* Parsed information on cells being balanced */ |
| 74697 | 74875 | |
| 74698 | 74876 | memset(abDone, 0, sizeof(abDone)); |
| 74699 | 74877 | memset(&b, 0, sizeof(b)); |
| 74700 | 74878 | pBt = pParent->pBt; |
| @@ -75114,46 +75292,43 @@ | ||
| 75114 | 75292 | ** Reassign page numbers so that the new pages are in ascending order. |
| 75115 | 75293 | ** This helps to keep entries in the disk file in order so that a scan |
| 75116 | 75294 | ** of the table is closer to a linear scan through the file. That in turn |
| 75117 | 75295 | ** helps the operating system to deliver pages from the disk more rapidly. |
| 75118 | 75296 | ** |
| 75119 | - ** An O(n^2) insertion sort algorithm is used, but since n is never more | |
| 75120 | - ** than (NB+2) (a small constant), that should not be a problem. | |
| 75297 | + ** An O(N*N) sort algorithm is used, but since N is never more than NB+2 | |
| 75298 | + ** (5), that is not a performance concern. | |
| 75121 | 75299 | ** |
| 75122 | 75300 | ** When NB==3, this one optimization makes the database about 25% faster |
| 75123 | 75301 | ** for large insertions and deletions. |
| 75124 | 75302 | */ |
| 75125 | 75303 | for(i=0; i<nNew; i++){ |
| 75126 | - aPgOrder[i] = aPgno[i] = apNew[i]->pgno; | |
| 75127 | - aPgFlags[i] = apNew[i]->pDbPage->flags; | |
| 75128 | - for(j=0; j<i; j++){ | |
| 75129 | - if( NEVER(aPgno[j]==aPgno[i]) ){ | |
| 75130 | - /* This branch is taken if the set of sibling pages somehow contains | |
| 75131 | - ** duplicate entries. This can happen if the database is corrupt. | |
| 75132 | - ** It would be simpler to detect this as part of the loop below, but | |
| 75133 | - ** we do the detection here in order to avoid populating the pager | |
| 75134 | - ** cache with two separate objects associated with the same | |
| 75135 | - ** page number. */ | |
| 75136 | - assert( CORRUPT_DB ); | |
| 75137 | - rc = SQLITE_CORRUPT_BKPT; | |
| 75138 | - goto balance_cleanup; | |
| 75139 | - } | |
| 75140 | - } | |
| 75141 | - } | |
| 75142 | - for(i=0; i<nNew; i++){ | |
| 75143 | - int iBest = 0; /* aPgno[] index of page number to use */ | |
| 75144 | - for(j=1; j<nNew; j++){ | |
| 75145 | - if( aPgOrder[j]<aPgOrder[iBest] ) iBest = j; | |
| 75146 | - } | |
| 75147 | - pgno = aPgOrder[iBest]; | |
| 75148 | - aPgOrder[iBest] = 0xffffffff; | |
| 75149 | - if( iBest!=i ){ | |
| 75150 | - if( iBest>i ){ | |
| 75151 | - sqlite3PagerRekey(apNew[iBest]->pDbPage, pBt->nPage+iBest+1, 0); | |
| 75152 | - } | |
| 75153 | - sqlite3PagerRekey(apNew[i]->pDbPage, pgno, aPgFlags[iBest]); | |
| 75154 | - apNew[i]->pgno = pgno; | |
| 75304 | + aPgno[i] = apNew[i]->pgno; | |
| 75305 | + assert( apNew[i]->pDbPage->flags & PGHDR_WRITEABLE ); | |
| 75306 | + assert( apNew[i]->pDbPage->flags & PGHDR_DIRTY ); | |
| 75307 | + } | |
| 75308 | + for(i=0; i<nNew-1; i++){ | |
| 75309 | + int iB = i; | |
| 75310 | + for(j=i+1; j<nNew; j++){ | |
| 75311 | + if( apNew[j]->pgno < apNew[iB]->pgno ) iB = j; | |
| 75312 | + } | |
| 75313 | + | |
| 75314 | + /* If apNew[i] has a page number that is bigger than any of the | |
| 75315 | + ** subsequence apNew[i] entries, then swap apNew[i] with the subsequent | |
| 75316 | + ** entry that has the smallest page number (which we know to be | |
| 75317 | + ** entry apNew[iB]). | |
| 75318 | + */ | |
| 75319 | + if( iB!=i ){ | |
| 75320 | + Pgno pgnoA = apNew[i]->pgno; | |
| 75321 | + Pgno pgnoB = apNew[iB]->pgno; | |
| 75322 | + Pgno pgnoTemp = (PENDING_BYTE/pBt->pageSize)+1; | |
| 75323 | + u16 fgA = apNew[i]->pDbPage->flags; | |
| 75324 | + u16 fgB = apNew[iB]->pDbPage->flags; | |
| 75325 | + sqlite3PagerRekey(apNew[i]->pDbPage, pgnoTemp, fgB); | |
| 75326 | + sqlite3PagerRekey(apNew[iB]->pDbPage, pgnoA, fgA); | |
| 75327 | + sqlite3PagerRekey(apNew[i]->pDbPage, pgnoB, fgB); | |
| 75328 | + apNew[i]->pgno = pgnoB; | |
| 75329 | + apNew[iB]->pgno = pgnoA; | |
| 75155 | 75330 | } |
| 75156 | 75331 | } |
| 75157 | 75332 | |
| 75158 | 75333 | TRACE(("BALANCE: new: %d(%d nc=%d) %d(%d nc=%d) %d(%d nc=%d) " |
| 75159 | 75334 | "%d(%d nc=%d) %d(%d nc=%d)\n", |
| @@ -79417,10 +79592,20 @@ | ||
| 79417 | 79592 | double r2 = (double)i; |
| 79418 | 79593 | return r1==0.0 |
| 79419 | 79594 | || (memcmp(&r1, &r2, sizeof(r1))==0 |
| 79420 | 79595 | && i >= -2251799813685248LL && i < 2251799813685248LL); |
| 79421 | 79596 | } |
| 79597 | + | |
| 79598 | +/* Convert a floating point value to its closest integer. Do so in | |
| 79599 | +** a way that avoids 'outside the range of representable values' warnings | |
| 79600 | +** from UBSAN. | |
| 79601 | +*/ | |
| 79602 | +SQLITE_PRIVATE i64 sqlite3RealToI64(double r){ | |
| 79603 | + if( r<=(double)SMALLEST_INT64 ) return SMALLEST_INT64; | |
| 79604 | + if( r>=(double)LARGEST_INT64) return LARGEST_INT64; | |
| 79605 | + return (i64)r; | |
| 79606 | +} | |
| 79422 | 79607 | |
| 79423 | 79608 | /* |
| 79424 | 79609 | ** Convert pMem so that it has type MEM_Real or MEM_Int. |
| 79425 | 79610 | ** Invalidate any prior representations. |
| 79426 | 79611 | ** |
| @@ -79439,11 +79624,11 @@ | ||
| 79439 | 79624 | sqlite3_int64 ix; |
| 79440 | 79625 | assert( (pMem->flags & (MEM_Blob|MEM_Str))!=0 ); |
| 79441 | 79626 | assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); |
| 79442 | 79627 | rc = sqlite3AtoF(pMem->z, &pMem->u.r, pMem->n, pMem->enc); |
| 79443 | 79628 | if( ((rc==0 || rc==1) && sqlite3Atoi64(pMem->z, &ix, pMem->n, pMem->enc)<=1) |
| 79444 | - || sqlite3RealSameAsInt(pMem->u.r, (ix = (i64)pMem->u.r)) | |
| 79629 | + || sqlite3RealSameAsInt(pMem->u.r, (ix = sqlite3RealToI64(pMem->u.r))) | |
| 79445 | 79630 | ){ |
| 79446 | 79631 | pMem->u.i = ix; |
| 79447 | 79632 | MemSetTypeFlag(pMem, MEM_Int); |
| 79448 | 79633 | }else{ |
| 79449 | 79634 | MemSetTypeFlag(pMem, MEM_Real); |
| @@ -80160,11 +80345,12 @@ | ||
| 80160 | 80345 | if( pVal==0 ){ |
| 80161 | 80346 | rc = SQLITE_NOMEM_BKPT; |
| 80162 | 80347 | goto value_from_function_out; |
| 80163 | 80348 | } |
| 80164 | 80349 | |
| 80165 | - assert( pCtx->pParse->rc==SQLITE_OK ); | |
| 80350 | + testcase( pCtx->pParse->rc==SQLITE_ERROR ); | |
| 80351 | + testcase( pCtx->pParse->rc==SQLITE_OK ); | |
| 80166 | 80352 | memset(&ctx, 0, sizeof(ctx)); |
| 80167 | 80353 | ctx.pOut = pVal; |
| 80168 | 80354 | ctx.pFunc = pFunc; |
| 80169 | 80355 | ctx.enc = ENC(db); |
| 80170 | 80356 | pFunc->xSFunc(&ctx, nVal, apVal); |
| @@ -80670,14 +80856,14 @@ | ||
| 80670 | 80856 | p = sqlite3DbMallocRawNN(db, sizeof(Vdbe) ); |
| 80671 | 80857 | if( p==0 ) return 0; |
| 80672 | 80858 | memset(&p->aOp, 0, sizeof(Vdbe)-offsetof(Vdbe,aOp)); |
| 80673 | 80859 | p->db = db; |
| 80674 | 80860 | if( db->pVdbe ){ |
| 80675 | - db->pVdbe->pPrev = p; | |
| 80861 | + db->pVdbe->ppVPrev = &p->pVNext; | |
| 80676 | 80862 | } |
| 80677 | - p->pNext = db->pVdbe; | |
| 80678 | - p->pPrev = 0; | |
| 80863 | + p->pVNext = db->pVdbe; | |
| 80864 | + p->ppVPrev = &db->pVdbe; | |
| 80679 | 80865 | db->pVdbe = p; |
| 80680 | 80866 | assert( p->eVdbeState==VDBE_INIT_STATE ); |
| 80681 | 80867 | p->pParse = pParse; |
| 80682 | 80868 | pParse->pVdbe = p; |
| 80683 | 80869 | assert( pParse->aLabel==0 ); |
| @@ -80755,25 +80941,32 @@ | ||
| 80755 | 80941 | return 0; |
| 80756 | 80942 | } |
| 80757 | 80943 | #endif |
| 80758 | 80944 | |
| 80759 | 80945 | /* |
| 80760 | -** Swap all content between two VDBE structures. | |
| 80946 | +** Swap byte-code between two VDBE structures. | |
| 80947 | +** | |
| 80948 | +** This happens after pB was previously run and returned | |
| 80949 | +** SQLITE_SCHEMA. The statement was then reprepared in pA. | |
| 80950 | +** This routine transfers the new bytecode in pA over to pB | |
| 80951 | +** so that pB can be run again. The old pB byte code is | |
| 80952 | +** moved back to pA so that it will be cleaned up when pA is | |
| 80953 | +** finalized. | |
| 80761 | 80954 | */ |
| 80762 | 80955 | SQLITE_PRIVATE void sqlite3VdbeSwap(Vdbe *pA, Vdbe *pB){ |
| 80763 | - Vdbe tmp, *pTmp; | |
| 80956 | + Vdbe tmp, *pTmp, **ppTmp; | |
| 80764 | 80957 | char *zTmp; |
| 80765 | 80958 | assert( pA->db==pB->db ); |
| 80766 | 80959 | tmp = *pA; |
| 80767 | 80960 | *pA = *pB; |
| 80768 | 80961 | *pB = tmp; |
| 80769 | - pTmp = pA->pNext; | |
| 80770 | - pA->pNext = pB->pNext; | |
| 80771 | - pB->pNext = pTmp; | |
| 80772 | - pTmp = pA->pPrev; | |
| 80773 | - pA->pPrev = pB->pPrev; | |
| 80774 | - pB->pPrev = pTmp; | |
| 80962 | + pTmp = pA->pVNext; | |
| 80963 | + pA->pVNext = pB->pVNext; | |
| 80964 | + pB->pVNext = pTmp; | |
| 80965 | + ppTmp = pA->ppVPrev; | |
| 80966 | + pA->ppVPrev = pB->ppVPrev; | |
| 80967 | + pB->ppVPrev = ppTmp; | |
| 80775 | 80968 | zTmp = pA->zSql; |
| 80776 | 80969 | pA->zSql = pB->zSql; |
| 80777 | 80970 | pB->zSql = zTmp; |
| 80778 | 80971 | #ifdef SQLITE_ENABLE_NORMALIZE |
| 80779 | 80972 | zTmp = pA->zNormSql; |
| @@ -81021,10 +81214,11 @@ | ||
| 81021 | 81214 | pCtx->argc = nArg; |
| 81022 | 81215 | pCtx->iOp = sqlite3VdbeCurrentAddr(v); |
| 81023 | 81216 | addr = sqlite3VdbeAddOp4(v, eCallCtx ? OP_PureFunc : OP_Function, |
| 81024 | 81217 | p1, p2, p3, (char*)pCtx, P4_FUNCCTX); |
| 81025 | 81218 | sqlite3VdbeChangeP5(v, eCallCtx & NC_SelfRef); |
| 81219 | + sqlite3MayAbort(pParse); | |
| 81026 | 81220 | return addr; |
| 81027 | 81221 | } |
| 81028 | 81222 | |
| 81029 | 81223 | /* |
| 81030 | 81224 | ** Add an opcode that includes the p4 value with a P4_INT64 or |
| @@ -81089,11 +81283,11 @@ | ||
| 81089 | 81283 | va_end(ap); |
| 81090 | 81284 | v = pParse->pVdbe; |
| 81091 | 81285 | iThis = v->nOp; |
| 81092 | 81286 | sqlite3VdbeAddOp4(v, OP_Explain, iThis, pParse->addrExplain, 0, |
| 81093 | 81287 | zMsg, P4_DYNAMIC); |
| 81094 | - sqlite3ExplainBreakpoint(bPush?"PUSH":"", sqlite3VdbeGetOp(v,-1)->p4.z); | |
| 81288 | + sqlite3ExplainBreakpoint(bPush?"PUSH":"", sqlite3VdbeGetLastOp(v)->p4.z); | |
| 81095 | 81289 | if( bPush){ |
| 81096 | 81290 | pParse->addrExplain = iThis; |
| 81097 | 81291 | } |
| 81098 | 81292 | } |
| 81099 | 81293 | } |
| @@ -81232,11 +81426,11 @@ | ||
| 81232 | 81426 | SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe *p){ |
| 81233 | 81427 | sqlite3VdbeAddOp2(p, OP_Expire, 1, 1); |
| 81234 | 81428 | } |
| 81235 | 81429 | |
| 81236 | 81430 | /* |
| 81237 | -** Mark the VDBE as one that can only be run multiple times. | |
| 81431 | +** Mark the VDBE as one that can be run multiple times. | |
| 81238 | 81432 | */ |
| 81239 | 81433 | SQLITE_PRIVATE void sqlite3VdbeReusable(Vdbe *p){ |
| 81240 | 81434 | int i; |
| 81241 | 81435 | for(i=1; ALWAYS(i<p->nOp); i++){ |
| 81242 | 81436 | if( ALWAYS(p->aOp[i].opcode==OP_Expire) ){ |
| @@ -81356,10 +81550,11 @@ | ||
| 81356 | 81550 | int opcode = pOp->opcode; |
| 81357 | 81551 | if( opcode==OP_Destroy || opcode==OP_VUpdate || opcode==OP_VRename |
| 81358 | 81552 | || opcode==OP_VDestroy |
| 81359 | 81553 | || opcode==OP_VCreate |
| 81360 | 81554 | || opcode==OP_ParseSchema |
| 81555 | + || opcode==OP_Function || opcode==OP_PureFunc | |
| 81361 | 81556 | || ((opcode==OP_Halt || opcode==OP_HaltIfNull) |
| 81362 | 81557 | && ((pOp->p1)!=SQLITE_OK && pOp->p2==OE_Abort)) |
| 81363 | 81558 | ){ |
| 81364 | 81559 | hasAbort = 1; |
| 81365 | 81560 | break; |
| @@ -81446,12 +81641,12 @@ | ||
| 81446 | 81641 | Parse *pParse = p->pParse; |
| 81447 | 81642 | int *aLabel = pParse->aLabel; |
| 81448 | 81643 | p->readOnly = 1; |
| 81449 | 81644 | p->bIsReader = 0; |
| 81450 | 81645 | pOp = &p->aOp[p->nOp-1]; |
| 81451 | - while(1){ | |
| 81452 | - | |
| 81646 | + assert( p->aOp[0].opcode==OP_Init ); | |
| 81647 | + while( 1 /* Loop termates when it reaches the OP_Init opcode */ ){ | |
| 81453 | 81648 | /* Only JUMP opcodes and the short list of special opcodes in the switch |
| 81454 | 81649 | ** below need to be considered. The mkopcodeh.tcl generator script groups |
| 81455 | 81650 | ** all these opcodes together near the front of the opcode list. Skip |
| 81456 | 81651 | ** any opcode that does not need processing by virtual of the fact that |
| 81457 | 81652 | ** it is larger than SQLITE_MX_JUMP_OPCODE, as a performance optimization. |
| @@ -81476,10 +81671,14 @@ | ||
| 81476 | 81671 | case OP_JournalMode: { |
| 81477 | 81672 | p->readOnly = 0; |
| 81478 | 81673 | p->bIsReader = 1; |
| 81479 | 81674 | break; |
| 81480 | 81675 | } |
| 81676 | + case OP_Init: { | |
| 81677 | + assert( pOp->p2>=0 ); | |
| 81678 | + goto resolve_p2_values_loop_exit; | |
| 81679 | + } | |
| 81481 | 81680 | #ifndef SQLITE_OMIT_VIRTUALTABLE |
| 81482 | 81681 | case OP_VUpdate: { |
| 81483 | 81682 | if( pOp->p2>nMaxArgs ) nMaxArgs = pOp->p2; |
| 81484 | 81683 | break; |
| 81485 | 81684 | } |
| @@ -81508,15 +81707,16 @@ | ||
| 81508 | 81707 | /* The mkopcodeh.tcl script has so arranged things that the only |
| 81509 | 81708 | ** non-jump opcodes less than SQLITE_MX_JUMP_CODE are guaranteed to |
| 81510 | 81709 | ** have non-negative values for P2. */ |
| 81511 | 81710 | assert( (sqlite3OpcodeProperty[pOp->opcode]&OPFLG_JUMP)==0 || pOp->p2>=0); |
| 81512 | 81711 | } |
| 81513 | - if( pOp==p->aOp ) break; | |
| 81712 | + assert( pOp>p->aOp ); | |
| 81514 | 81713 | pOp--; |
| 81515 | 81714 | } |
| 81715 | +resolve_p2_values_loop_exit: | |
| 81516 | 81716 | if( aLabel ){ |
| 81517 | - sqlite3DbFreeNN(p->db, pParse->aLabel); | |
| 81717 | + sqlite3DbNNFreeNN(p->db, pParse->aLabel); | |
| 81518 | 81718 | pParse->aLabel = 0; |
| 81519 | 81719 | } |
| 81520 | 81720 | pParse->nLabel = 0; |
| 81521 | 81721 | *pMaxFuncArgs = nMaxArgs; |
| 81522 | 81722 | assert( p->bIsReader!=0 || DbMaskAllZero(p->btreeMask) ); |
| @@ -81761,19 +81961,23 @@ | ||
| 81761 | 81961 | /* |
| 81762 | 81962 | ** Change the value of the opcode, or P1, P2, P3, or P5 operands |
| 81763 | 81963 | ** for a specific instruction. |
| 81764 | 81964 | */ |
| 81765 | 81965 | SQLITE_PRIVATE void sqlite3VdbeChangeOpcode(Vdbe *p, int addr, u8 iNewOpcode){ |
| 81966 | + assert( addr>=0 ); | |
| 81766 | 81967 | sqlite3VdbeGetOp(p,addr)->opcode = iNewOpcode; |
| 81767 | 81968 | } |
| 81768 | 81969 | SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe *p, int addr, int val){ |
| 81970 | + assert( addr>=0 ); | |
| 81769 | 81971 | sqlite3VdbeGetOp(p,addr)->p1 = val; |
| 81770 | 81972 | } |
| 81771 | 81973 | SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe *p, int addr, int val){ |
| 81974 | + assert( addr>=0 || p->db->mallocFailed ); | |
| 81772 | 81975 | sqlite3VdbeGetOp(p,addr)->p2 = val; |
| 81773 | 81976 | } |
| 81774 | 81977 | SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe *p, int addr, int val){ |
| 81978 | + assert( addr>=0 ); | |
| 81775 | 81979 | sqlite3VdbeGetOp(p,addr)->p3 = val; |
| 81776 | 81980 | } |
| 81777 | 81981 | SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe *p, u16 p5){ |
| 81778 | 81982 | assert( p->nOp>0 || p->db->mallocFailed ); |
| 81779 | 81983 | if( p->nOp>0 ) p->aOp[p->nOp-1].p5 = p5; |
| @@ -81805,11 +82009,11 @@ | ||
| 81805 | 82009 | assert( p->aOp[addr].opcode==OP_Once |
| 81806 | 82010 | || p->aOp[addr].opcode==OP_If |
| 81807 | 82011 | || p->aOp[addr].opcode==OP_FkIfZero ); |
| 81808 | 82012 | assert( p->aOp[addr].p4type==0 ); |
| 81809 | 82013 | #ifdef SQLITE_VDBE_COVERAGE |
| 81810 | - sqlite3VdbeGetOp(p,-1)->iSrcLine = 0; /* Erase VdbeCoverage() macros */ | |
| 82014 | + sqlite3VdbeGetLastOp(p)->iSrcLine = 0; /* Erase VdbeCoverage() macros */ | |
| 81811 | 82015 | #endif |
| 81812 | 82016 | p->nOp--; |
| 81813 | 82017 | }else{ |
| 81814 | 82018 | sqlite3VdbeChangeP2(p, addr, p->nOp); |
| 81815 | 82019 | } |
| @@ -81819,25 +82023,27 @@ | ||
| 81819 | 82023 | /* |
| 81820 | 82024 | ** If the input FuncDef structure is ephemeral, then free it. If |
| 81821 | 82025 | ** the FuncDef is not ephermal, then do nothing. |
| 81822 | 82026 | */ |
| 81823 | 82027 | static void freeEphemeralFunction(sqlite3 *db, FuncDef *pDef){ |
| 82028 | + assert( db!=0 ); | |
| 81824 | 82029 | if( (pDef->funcFlags & SQLITE_FUNC_EPHEM)!=0 ){ |
| 81825 | - sqlite3DbFreeNN(db, pDef); | |
| 82030 | + sqlite3DbNNFreeNN(db, pDef); | |
| 81826 | 82031 | } |
| 81827 | 82032 | } |
| 81828 | 82033 | |
| 81829 | 82034 | /* |
| 81830 | 82035 | ** Delete a P4 value if necessary. |
| 81831 | 82036 | */ |
| 81832 | 82037 | static SQLITE_NOINLINE void freeP4Mem(sqlite3 *db, Mem *p){ |
| 81833 | 82038 | if( p->szMalloc ) sqlite3DbFree(db, p->zMalloc); |
| 81834 | - sqlite3DbFreeNN(db, p); | |
| 82039 | + sqlite3DbNNFreeNN(db, p); | |
| 81835 | 82040 | } |
| 81836 | 82041 | static SQLITE_NOINLINE void freeP4FuncCtx(sqlite3 *db, sqlite3_context *p){ |
| 82042 | + assert( db!=0 ); | |
| 81837 | 82043 | freeEphemeralFunction(db, p->pFunc); |
| 81838 | - sqlite3DbFreeNN(db, p); | |
| 82044 | + sqlite3DbNNFreeNN(db, p); | |
| 81839 | 82045 | } |
| 81840 | 82046 | static void freeP4(sqlite3 *db, int p4type, void *p4){ |
| 81841 | 82047 | assert( db ); |
| 81842 | 82048 | switch( p4type ){ |
| 81843 | 82049 | case P4_FUNCCTX: { |
| @@ -81846,11 +82052,11 @@ | ||
| 81846 | 82052 | } |
| 81847 | 82053 | case P4_REAL: |
| 81848 | 82054 | case P4_INT64: |
| 81849 | 82055 | case P4_DYNAMIC: |
| 81850 | 82056 | case P4_INTARRAY: { |
| 81851 | - sqlite3DbFree(db, p4); | |
| 82057 | + if( p4 ) sqlite3DbNNFreeNN(db, p4); | |
| 81852 | 82058 | break; |
| 81853 | 82059 | } |
| 81854 | 82060 | case P4_KEYINFO: { |
| 81855 | 82061 | if( db->pnBytesFreed==0 ) sqlite3KeyInfoUnref((KeyInfo*)p4); |
| 81856 | 82062 | break; |
| @@ -81885,10 +82091,11 @@ | ||
| 81885 | 82091 | ** opcodes contained within. If aOp is not NULL it is assumed to contain |
| 81886 | 82092 | ** nOp entries. |
| 81887 | 82093 | */ |
| 81888 | 82094 | static void vdbeFreeOpArray(sqlite3 *db, Op *aOp, int nOp){ |
| 81889 | 82095 | assert( nOp>=0 ); |
| 82096 | + assert( db!=0 ); | |
| 81890 | 82097 | if( aOp ){ |
| 81891 | 82098 | Op *pOp = &aOp[nOp-1]; |
| 81892 | 82099 | while(1){ /* Exit via break */ |
| 81893 | 82100 | if( pOp->p4type <= P4_FREE_IF_LE ) freeP4(db, pOp->p4type, pOp->p4.p); |
| 81894 | 82101 | #ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS |
| @@ -81895,11 +82102,11 @@ | ||
| 81895 | 82102 | sqlite3DbFree(db, pOp->zComment); |
| 81896 | 82103 | #endif |
| 81897 | 82104 | if( pOp==aOp ) break; |
| 81898 | 82105 | pOp--; |
| 81899 | 82106 | } |
| 81900 | - sqlite3DbFreeNN(db, aOp); | |
| 82107 | + sqlite3DbNNFreeNN(db, aOp); | |
| 81901 | 82108 | } |
| 81902 | 82109 | } |
| 81903 | 82110 | |
| 81904 | 82111 | /* |
| 81905 | 82112 | ** Link the SubProgram object passed as the second argument into the linked |
| @@ -82126,17 +82333,17 @@ | ||
| 82126 | 82333 | #ifdef SQLITE_VDBE_COVERAGE |
| 82127 | 82334 | /* |
| 82128 | 82335 | ** Set the value if the iSrcLine field for the previously coded instruction. |
| 82129 | 82336 | */ |
| 82130 | 82337 | SQLITE_PRIVATE void sqlite3VdbeSetLineNumber(Vdbe *v, int iLine){ |
| 82131 | - sqlite3VdbeGetOp(v,-1)->iSrcLine = iLine; | |
| 82338 | + sqlite3VdbeGetLastOp(v)->iSrcLine = iLine; | |
| 82132 | 82339 | } |
| 82133 | 82340 | #endif /* SQLITE_VDBE_COVERAGE */ |
| 82134 | 82341 | |
| 82135 | 82342 | /* |
| 82136 | -** Return the opcode for a given address. If the address is -1, then | |
| 82137 | -** return the most recently inserted opcode. | |
| 82343 | +** Return the opcode for a given address. The address must be non-negative. | |
| 82344 | +** See sqlite3VdbeGetLastOp() to get the most recently added opcode. | |
| 82138 | 82345 | ** |
| 82139 | 82346 | ** If a memory allocation error has occurred prior to the calling of this |
| 82140 | 82347 | ** routine, then a pointer to a dummy VdbeOp will be returned. That opcode |
| 82141 | 82348 | ** is readable but not writable, though it is cast to a writable value. |
| 82142 | 82349 | ** The return of a dummy opcode allows the call to continue functioning |
| @@ -82148,20 +82355,23 @@ | ||
| 82148 | 82355 | SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe *p, int addr){ |
| 82149 | 82356 | /* C89 specifies that the constant "dummy" will be initialized to all |
| 82150 | 82357 | ** zeros, which is correct. MSVC generates a warning, nevertheless. */ |
| 82151 | 82358 | static VdbeOp dummy; /* Ignore the MSVC warning about no initializer */ |
| 82152 | 82359 | assert( p->eVdbeState==VDBE_INIT_STATE ); |
| 82153 | - if( addr<0 ){ | |
| 82154 | - addr = p->nOp - 1; | |
| 82155 | - } | |
| 82156 | 82360 | assert( (addr>=0 && addr<p->nOp) || p->db->mallocFailed ); |
| 82157 | 82361 | if( p->db->mallocFailed ){ |
| 82158 | 82362 | return (VdbeOp*)&dummy; |
| 82159 | 82363 | }else{ |
| 82160 | 82364 | return &p->aOp[addr]; |
| 82161 | 82365 | } |
| 82162 | 82366 | } |
| 82367 | + | |
| 82368 | +/* Return the most recently added opcode | |
| 82369 | +*/ | |
| 82370 | +VdbeOp * sqlite3VdbeGetLastOp(Vdbe *p){ | |
| 82371 | + return sqlite3VdbeGetOp(p, p->nOp - 1); | |
| 82372 | +} | |
| 82163 | 82373 | |
| 82164 | 82374 | #if defined(SQLITE_ENABLE_EXPLAIN_COMMENTS) |
| 82165 | 82375 | /* |
| 82166 | 82376 | ** Return an integer value for one of the parameters to the opcode pOp |
| 82167 | 82377 | ** determined by character c. |
| @@ -82646,11 +82856,11 @@ | ||
| 82646 | 82856 | if( p->flags&(MEM_Agg|MEM_Dyn) ){ |
| 82647 | 82857 | testcase( (p->flags & MEM_Dyn)!=0 && p->xDel==sqlite3VdbeFrameMemDel ); |
| 82648 | 82858 | sqlite3VdbeMemRelease(p); |
| 82649 | 82859 | p->flags = MEM_Undefined; |
| 82650 | 82860 | }else if( p->szMalloc ){ |
| 82651 | - sqlite3DbFreeNN(db, p->zMalloc); | |
| 82861 | + sqlite3DbNNFreeNN(db, p->zMalloc); | |
| 82652 | 82862 | p->szMalloc = 0; |
| 82653 | 82863 | p->flags = MEM_Undefined; |
| 82654 | 82864 | } |
| 82655 | 82865 | #ifdef SQLITE_DEBUG |
| 82656 | 82866 | else{ |
| @@ -83638,11 +83848,11 @@ | ||
| 83638 | 83848 | if( sqlite3_stmt_busy((sqlite3_stmt*)p) ){ |
| 83639 | 83849 | cnt++; |
| 83640 | 83850 | if( p->readOnly==0 ) nWrite++; |
| 83641 | 83851 | if( p->bIsReader ) nRead++; |
| 83642 | 83852 | } |
| 83643 | - p = p->pNext; | |
| 83853 | + p = p->pVNext; | |
| 83644 | 83854 | } |
| 83645 | 83855 | assert( cnt==db->nVdbeActive ); |
| 83646 | 83856 | assert( nWrite==db->nVdbeWrite ); |
| 83647 | 83857 | assert( nRead==db->nVdbeRead ); |
| 83648 | 83858 | } |
| @@ -84167,27 +84377,28 @@ | ||
| 84167 | 84377 | ** VdbeDelete() also unlinks the Vdbe from the list of VMs associated with |
| 84168 | 84378 | ** the database connection and frees the object itself. |
| 84169 | 84379 | */ |
| 84170 | 84380 | static void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){ |
| 84171 | 84381 | SubProgram *pSub, *pNext; |
| 84382 | + assert( db!=0 ); | |
| 84172 | 84383 | assert( p->db==0 || p->db==db ); |
| 84173 | 84384 | if( p->aColName ){ |
| 84174 | 84385 | releaseMemArray(p->aColName, p->nResColumn*COLNAME_N); |
| 84175 | - sqlite3DbFreeNN(db, p->aColName); | |
| 84386 | + sqlite3DbNNFreeNN(db, p->aColName); | |
| 84176 | 84387 | } |
| 84177 | 84388 | for(pSub=p->pProgram; pSub; pSub=pNext){ |
| 84178 | 84389 | pNext = pSub->pNext; |
| 84179 | 84390 | vdbeFreeOpArray(db, pSub->aOp, pSub->nOp); |
| 84180 | 84391 | sqlite3DbFree(db, pSub); |
| 84181 | 84392 | } |
| 84182 | 84393 | if( p->eVdbeState!=VDBE_INIT_STATE ){ |
| 84183 | 84394 | releaseMemArray(p->aVar, p->nVar); |
| 84184 | - if( p->pVList ) sqlite3DbFreeNN(db, p->pVList); | |
| 84185 | - if( p->pFree ) sqlite3DbFreeNN(db, p->pFree); | |
| 84395 | + if( p->pVList ) sqlite3DbNNFreeNN(db, p->pVList); | |
| 84396 | + if( p->pFree ) sqlite3DbNNFreeNN(db, p->pFree); | |
| 84186 | 84397 | } |
| 84187 | 84398 | vdbeFreeOpArray(db, p->aOp, p->nOp); |
| 84188 | - sqlite3DbFree(db, p->zSql); | |
| 84399 | + if( p->zSql ) sqlite3DbNNFreeNN(db, p->zSql); | |
| 84189 | 84400 | #ifdef SQLITE_ENABLE_NORMALIZE |
| 84190 | 84401 | sqlite3DbFree(db, p->zNormSql); |
| 84191 | 84402 | { |
| 84192 | 84403 | DblquoteStr *pThis, *pNext; |
| 84193 | 84404 | for(pThis=p->pDblStr; pThis; pThis=pNext){ |
| @@ -84213,24 +84424,21 @@ | ||
| 84213 | 84424 | SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe *p){ |
| 84214 | 84425 | sqlite3 *db; |
| 84215 | 84426 | |
| 84216 | 84427 | assert( p!=0 ); |
| 84217 | 84428 | db = p->db; |
| 84429 | + assert( db!=0 ); | |
| 84218 | 84430 | assert( sqlite3_mutex_held(db->mutex) ); |
| 84219 | 84431 | sqlite3VdbeClearObject(db, p); |
| 84220 | 84432 | if( db->pnBytesFreed==0 ){ |
| 84221 | - if( p->pPrev ){ | |
| 84222 | - p->pPrev->pNext = p->pNext; | |
| 84223 | - }else{ | |
| 84224 | - assert( db->pVdbe==p ); | |
| 84225 | - db->pVdbe = p->pNext; | |
| 84226 | - } | |
| 84227 | - if( p->pNext ){ | |
| 84228 | - p->pNext->pPrev = p->pPrev; | |
| 84433 | + assert( p->ppVPrev!=0 ); | |
| 84434 | + *p->ppVPrev = p->pVNext; | |
| 84435 | + if( p->pVNext ){ | |
| 84436 | + p->pVNext->ppVPrev = p->ppVPrev; | |
| 84229 | 84437 | } |
| 84230 | 84438 | } |
| 84231 | - sqlite3DbFreeNN(db, p); | |
| 84439 | + sqlite3DbNNFreeNN(db, p); | |
| 84232 | 84440 | } |
| 84233 | 84441 | |
| 84234 | 84442 | /* |
| 84235 | 84443 | ** The cursor "p" has a pending seek operation that has not yet been |
| 84236 | 84444 | ** carried out. Seek the cursor now. If an error occurs, return |
| @@ -85721,11 +85929,11 @@ | ||
| 85721 | 85929 | ** prepared statements. The flag is set to 1 for an immediate expiration |
| 85722 | 85930 | ** and set to 2 for an advisory expiration. |
| 85723 | 85931 | */ |
| 85724 | 85932 | SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3 *db, int iCode){ |
| 85725 | 85933 | Vdbe *p; |
| 85726 | - for(p = db->pVdbe; p; p=p->pNext){ | |
| 85934 | + for(p = db->pVdbe; p; p=p->pVNext){ | |
| 85727 | 85935 | p->expired = iCode+1; |
| 85728 | 85936 | } |
| 85729 | 85937 | } |
| 85730 | 85938 | |
| 85731 | 85939 | /* |
| @@ -85842,17 +86050,18 @@ | ||
| 85842 | 86050 | ** |
| 85843 | 86051 | ** This function is used to free UnpackedRecord structures allocated by |
| 85844 | 86052 | ** the vdbeUnpackRecord() function found in vdbeapi.c. |
| 85845 | 86053 | */ |
| 85846 | 86054 | static void vdbeFreeUnpacked(sqlite3 *db, int nField, UnpackedRecord *p){ |
| 86055 | + assert( db!=0 ); | |
| 85847 | 86056 | if( p ){ |
| 85848 | 86057 | int i; |
| 85849 | 86058 | for(i=0; i<nField; i++){ |
| 85850 | 86059 | Mem *pMem = &p->aMem[i]; |
| 85851 | 86060 | if( pMem->zMalloc ) sqlite3VdbeMemReleaseMalloc(pMem); |
| 85852 | 86061 | } |
| 85853 | - sqlite3DbFreeNN(db, p); | |
| 86062 | + sqlite3DbNNFreeNN(db, p); | |
| 85854 | 86063 | } |
| 85855 | 86064 | } |
| 85856 | 86065 | #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */ |
| 85857 | 86066 | |
| 85858 | 86067 | #ifdef SQLITE_ENABLE_PREUPDATE_HOOK |
| @@ -85919,11 +86128,11 @@ | ||
| 85919 | 86128 | if( preupdate.aNew ){ |
| 85920 | 86129 | int i; |
| 85921 | 86130 | for(i=0; i<pCsr->nField; i++){ |
| 85922 | 86131 | sqlite3VdbeMemRelease(&preupdate.aNew[i]); |
| 85923 | 86132 | } |
| 85924 | - sqlite3DbFreeNN(db, preupdate.aNew); | |
| 86133 | + sqlite3DbNNFreeNN(db, preupdate.aNew); | |
| 85925 | 86134 | } |
| 85926 | 86135 | } |
| 85927 | 86136 | #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */ |
| 85928 | 86137 | |
| 85929 | 86138 | /************** End of vdbeaux.c *********************************************/ |
| @@ -86036,11 +86245,13 @@ | ||
| 86036 | 86245 | Vdbe *v = (Vdbe*)pStmt; |
| 86037 | 86246 | sqlite3 *db = v->db; |
| 86038 | 86247 | if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT; |
| 86039 | 86248 | sqlite3_mutex_enter(db->mutex); |
| 86040 | 86249 | checkProfileCallback(db, v); |
| 86041 | - rc = sqlite3VdbeFinalize(v); | |
| 86250 | + assert( v->eVdbeState>=VDBE_READY_STATE ); | |
| 86251 | + rc = sqlite3VdbeReset(v); | |
| 86252 | + sqlite3VdbeDelete(v); | |
| 86042 | 86253 | rc = sqlite3ApiExit(db, rc); |
| 86043 | 86254 | sqlite3LeaveMutexAndCloseZombie(db); |
| 86044 | 86255 | } |
| 86045 | 86256 | return rc; |
| 86046 | 86257 | } |
| @@ -86746,13 +86957,13 @@ | ||
| 86746 | 86957 | break; |
| 86747 | 86958 | } |
| 86748 | 86959 | sqlite3_reset(pStmt); |
| 86749 | 86960 | if( savedPc>=0 ){ |
| 86750 | 86961 | /* Setting minWriteFileFormat to 254 is a signal to the OP_Init and |
| 86751 | - ** OP_Trace opcodes to *not* perform SQLITE_TRACE_STMT because one | |
| 86752 | - ** should output has already occurred due to SQLITE_SCHEMA. | |
| 86753 | - ** tag-20220401a */ | |
| 86962 | + ** OP_Trace opcodes to *not* perform SQLITE_TRACE_STMT because it has | |
| 86963 | + ** already been done once on a prior invocation that failed due to | |
| 86964 | + ** SQLITE_SCHEMA. tag-20220401a */ | |
| 86754 | 86965 | v->minWriteFileFormat = 254; |
| 86755 | 86966 | } |
| 86756 | 86967 | assert( v->expired==0 ); |
| 86757 | 86968 | } |
| 86758 | 86969 | sqlite3_mutex_leave(db->mutex); |
| @@ -87358,11 +87569,11 @@ | ||
| 87358 | 87569 | ** the mutex is released if any kind of error occurs. |
| 87359 | 87570 | ** |
| 87360 | 87571 | ** The error code stored in database p->db is overwritten with the return |
| 87361 | 87572 | ** value in any case. |
| 87362 | 87573 | */ |
| 87363 | -static int vdbeUnbind(Vdbe *p, int i){ | |
| 87574 | +static int vdbeUnbind(Vdbe *p, unsigned int i){ | |
| 87364 | 87575 | Mem *pVar; |
| 87365 | 87576 | if( vdbeSafetyNotNull(p) ){ |
| 87366 | 87577 | return SQLITE_MISUSE_BKPT; |
| 87367 | 87578 | } |
| 87368 | 87579 | sqlite3_mutex_enter(p->db->mutex); |
| @@ -87371,16 +87582,15 @@ | ||
| 87371 | 87582 | sqlite3_mutex_leave(p->db->mutex); |
| 87372 | 87583 | sqlite3_log(SQLITE_MISUSE, |
| 87373 | 87584 | "bind on a busy prepared statement: [%s]", p->zSql); |
| 87374 | 87585 | return SQLITE_MISUSE_BKPT; |
| 87375 | 87586 | } |
| 87376 | - if( i<1 || i>p->nVar ){ | |
| 87587 | + if( i>=(unsigned int)p->nVar ){ | |
| 87377 | 87588 | sqlite3Error(p->db, SQLITE_RANGE); |
| 87378 | 87589 | sqlite3_mutex_leave(p->db->mutex); |
| 87379 | 87590 | return SQLITE_RANGE; |
| 87380 | 87591 | } |
| 87381 | - i--; | |
| 87382 | 87592 | pVar = &p->aVar[i]; |
| 87383 | 87593 | sqlite3VdbeMemRelease(pVar); |
| 87384 | 87594 | pVar->flags = MEM_Null; |
| 87385 | 87595 | p->db->errCode = SQLITE_OK; |
| 87386 | 87596 | |
| @@ -87413,11 +87623,11 @@ | ||
| 87413 | 87623 | ){ |
| 87414 | 87624 | Vdbe *p = (Vdbe *)pStmt; |
| 87415 | 87625 | Mem *pVar; |
| 87416 | 87626 | int rc; |
| 87417 | 87627 | |
| 87418 | - rc = vdbeUnbind(p, i); | |
| 87628 | + rc = vdbeUnbind(p, (u32)(i-1)); | |
| 87419 | 87629 | if( rc==SQLITE_OK ){ |
| 87420 | 87630 | if( zData!=0 ){ |
| 87421 | 87631 | pVar = &p->aVar[i-1]; |
| 87422 | 87632 | rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel); |
| 87423 | 87633 | if( rc==SQLITE_OK && encoding!=0 ){ |
| @@ -87462,11 +87672,11 @@ | ||
| 87462 | 87672 | return bindText(pStmt, i, zData, nData, xDel, 0); |
| 87463 | 87673 | } |
| 87464 | 87674 | SQLITE_API int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){ |
| 87465 | 87675 | int rc; |
| 87466 | 87676 | Vdbe *p = (Vdbe *)pStmt; |
| 87467 | - rc = vdbeUnbind(p, i); | |
| 87677 | + rc = vdbeUnbind(p, (u32)(i-1)); | |
| 87468 | 87678 | if( rc==SQLITE_OK ){ |
| 87469 | 87679 | sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue); |
| 87470 | 87680 | sqlite3_mutex_leave(p->db->mutex); |
| 87471 | 87681 | } |
| 87472 | 87682 | return rc; |
| @@ -87475,21 +87685,21 @@ | ||
| 87475 | 87685 | return sqlite3_bind_int64(p, i, (i64)iValue); |
| 87476 | 87686 | } |
| 87477 | 87687 | SQLITE_API int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){ |
| 87478 | 87688 | int rc; |
| 87479 | 87689 | Vdbe *p = (Vdbe *)pStmt; |
| 87480 | - rc = vdbeUnbind(p, i); | |
| 87690 | + rc = vdbeUnbind(p, (u32)(i-1)); | |
| 87481 | 87691 | if( rc==SQLITE_OK ){ |
| 87482 | 87692 | sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue); |
| 87483 | 87693 | sqlite3_mutex_leave(p->db->mutex); |
| 87484 | 87694 | } |
| 87485 | 87695 | return rc; |
| 87486 | 87696 | } |
| 87487 | 87697 | SQLITE_API int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){ |
| 87488 | 87698 | int rc; |
| 87489 | 87699 | Vdbe *p = (Vdbe*)pStmt; |
| 87490 | - rc = vdbeUnbind(p, i); | |
| 87700 | + rc = vdbeUnbind(p, (u32)(i-1)); | |
| 87491 | 87701 | if( rc==SQLITE_OK ){ |
| 87492 | 87702 | sqlite3_mutex_leave(p->db->mutex); |
| 87493 | 87703 | } |
| 87494 | 87704 | return rc; |
| 87495 | 87705 | } |
| @@ -87500,11 +87710,11 @@ | ||
| 87500 | 87710 | const char *zPTtype, |
| 87501 | 87711 | void (*xDestructor)(void*) |
| 87502 | 87712 | ){ |
| 87503 | 87713 | int rc; |
| 87504 | 87714 | Vdbe *p = (Vdbe*)pStmt; |
| 87505 | - rc = vdbeUnbind(p, i); | |
| 87715 | + rc = vdbeUnbind(p, (u32)(i-1)); | |
| 87506 | 87716 | if( rc==SQLITE_OK ){ |
| 87507 | 87717 | sqlite3VdbeMemSetPointer(&p->aVar[i-1], pPtr, zPTtype, xDestructor); |
| 87508 | 87718 | sqlite3_mutex_leave(p->db->mutex); |
| 87509 | 87719 | }else if( xDestructor ){ |
| 87510 | 87720 | xDestructor(pPtr); |
| @@ -87578,11 +87788,11 @@ | ||
| 87578 | 87788 | return rc; |
| 87579 | 87789 | } |
| 87580 | 87790 | SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){ |
| 87581 | 87791 | int rc; |
| 87582 | 87792 | Vdbe *p = (Vdbe *)pStmt; |
| 87583 | - rc = vdbeUnbind(p, i); | |
| 87793 | + rc = vdbeUnbind(p, (u32)(i-1)); | |
| 87584 | 87794 | if( rc==SQLITE_OK ){ |
| 87585 | 87795 | #ifndef SQLITE_OMIT_INCRBLOB |
| 87586 | 87796 | sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n); |
| 87587 | 87797 | #else |
| 87588 | 87798 | rc = sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n); |
| @@ -87738,11 +87948,11 @@ | ||
| 87738 | 87948 | #endif |
| 87739 | 87949 | sqlite3_mutex_enter(pDb->mutex); |
| 87740 | 87950 | if( pStmt==0 ){ |
| 87741 | 87951 | pNext = (sqlite3_stmt*)pDb->pVdbe; |
| 87742 | 87952 | }else{ |
| 87743 | - pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext; | |
| 87953 | + pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pVNext; | |
| 87744 | 87954 | } |
| 87745 | 87955 | sqlite3_mutex_leave(pDb->mutex); |
| 87746 | 87956 | return pNext; |
| 87747 | 87957 | } |
| 87748 | 87958 | |
| @@ -87763,12 +87973,15 @@ | ||
| 87763 | 87973 | if( op==SQLITE_STMTSTATUS_MEMUSED ){ |
| 87764 | 87974 | sqlite3 *db = pVdbe->db; |
| 87765 | 87975 | sqlite3_mutex_enter(db->mutex); |
| 87766 | 87976 | v = 0; |
| 87767 | 87977 | db->pnBytesFreed = (int*)&v; |
| 87978 | + assert( db->lookaside.pEnd==db->lookaside.pTrueEnd ); | |
| 87979 | + db->lookaside.pEnd = db->lookaside.pStart; | |
| 87768 | 87980 | sqlite3VdbeDelete(pVdbe); |
| 87769 | 87981 | db->pnBytesFreed = 0; |
| 87982 | + db->lookaside.pEnd = db->lookaside.pTrueEnd; | |
| 87770 | 87983 | sqlite3_mutex_leave(db->mutex); |
| 87771 | 87984 | }else{ |
| 87772 | 87985 | v = pVdbe->aCounter[op]; |
| 87773 | 87986 | if( resetFlag ) pVdbe->aCounter[op] = 0; |
| 87774 | 87987 | } |
| @@ -88604,11 +88817,12 @@ | ||
| 88604 | 88817 | ** floating point value of rValue. Return true and set *piValue to the |
| 88605 | 88818 | ** integer value if the string is in range to be an integer. Otherwise, |
| 88606 | 88819 | ** return false. |
| 88607 | 88820 | */ |
| 88608 | 88821 | static int alsoAnInt(Mem *pRec, double rValue, i64 *piValue){ |
| 88609 | - i64 iValue = (double)rValue; | |
| 88822 | + i64 iValue; | |
| 88823 | + iValue = sqlite3RealToI64(rValue); | |
| 88610 | 88824 | if( sqlite3RealSameAsInt(rValue,iValue) ){ |
| 88611 | 88825 | *piValue = iValue; |
| 88612 | 88826 | return 1; |
| 88613 | 88827 | } |
| 88614 | 88828 | return 0==sqlite3Atoi64(pRec->z, piValue, pRec->n, pRec->enc); |
| @@ -88766,21 +88980,22 @@ | ||
| 88766 | 88980 | ** |
| 88767 | 88981 | ** Unlike applyNumericAffinity(), this routine does not modify pMem->flags. |
| 88768 | 88982 | ** But it does set pMem->u.r and pMem->u.i appropriately. |
| 88769 | 88983 | */ |
| 88770 | 88984 | static u16 numericType(Mem *pMem){ |
| 88771 | - if( pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal) ){ | |
| 88985 | + assert( (pMem->flags & MEM_Null)==0 | |
| 88986 | + || pMem->db==0 || pMem->db->mallocFailed ); | |
| 88987 | + if( pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal|MEM_Null) ){ | |
| 88772 | 88988 | testcase( pMem->flags & MEM_Int ); |
| 88773 | 88989 | testcase( pMem->flags & MEM_Real ); |
| 88774 | 88990 | testcase( pMem->flags & MEM_IntReal ); |
| 88775 | - return pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal); | |
| 88991 | + return pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal|MEM_Null); | |
| 88776 | 88992 | } |
| 88777 | - if( pMem->flags & (MEM_Str|MEM_Blob) ){ | |
| 88778 | - testcase( pMem->flags & MEM_Str ); | |
| 88779 | - testcase( pMem->flags & MEM_Blob ); | |
| 88780 | - return computeNumericType(pMem); | |
| 88781 | - } | |
| 88993 | + assert( pMem->flags & (MEM_Str|MEM_Blob) ); | |
| 88994 | + testcase( pMem->flags & MEM_Str ); | |
| 88995 | + testcase( pMem->flags & MEM_Blob ); | |
| 88996 | + return computeNumericType(pMem); | |
| 88782 | 88997 | return 0; |
| 88783 | 88998 | } |
| 88784 | 88999 | |
| 88785 | 89000 | #ifdef SQLITE_DEBUG |
| 88786 | 89001 | /* |
| @@ -89294,11 +89509,11 @@ | ||
| 89294 | 89509 | ** |
| 89295 | 89510 | ** P2 is not used by the byte-code engine. However, if P2 is positive |
| 89296 | 89511 | ** and also less than the current address, then the "EXPLAIN" output |
| 89297 | 89512 | ** formatter in the CLI will indent all opcodes from the P2 opcode up |
| 89298 | 89513 | ** to be not including the current Return. P2 should be the first opcode |
| 89299 | -** in the subroutine from which this opcode is returnning. Thus the P2 | |
| 89514 | +** in the subroutine from which this opcode is returning. Thus the P2 | |
| 89300 | 89515 | ** value is a byte-code indentation hint. See tag-20220407a in |
| 89301 | 89516 | ** wherecode.c and shell.c. |
| 89302 | 89517 | */ |
| 89303 | 89518 | case OP_Return: { /* in1 */ |
| 89304 | 89519 | pIn1 = &aMem[pOp->p1]; |
| @@ -89956,11 +90171,11 @@ | ||
| 89956 | 90171 | } |
| 89957 | 90172 | nByte = pIn1->n + pIn2->n; |
| 89958 | 90173 | if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){ |
| 89959 | 90174 | goto too_big; |
| 89960 | 90175 | } |
| 89961 | - if( sqlite3VdbeMemGrow(pOut, (int)nByte+3, pOut==pIn2) ){ | |
| 90176 | + if( sqlite3VdbeMemGrow(pOut, (int)nByte+2, pOut==pIn2) ){ | |
| 89962 | 90177 | goto no_mem; |
| 89963 | 90178 | } |
| 89964 | 90179 | MemSetTypeFlag(pOut, MEM_Str); |
| 89965 | 90180 | if( pOut!=pIn2 ){ |
| 89966 | 90181 | memcpy(pOut->z, pIn2->z, pIn2->n); |
| @@ -89968,13 +90183,13 @@ | ||
| 89968 | 90183 | pIn2->flags = flags2; |
| 89969 | 90184 | } |
| 89970 | 90185 | memcpy(&pOut->z[pIn2->n], pIn1->z, pIn1->n); |
| 89971 | 90186 | assert( (pIn1->flags & MEM_Dyn) == (flags1 & MEM_Dyn) ); |
| 89972 | 90187 | pIn1->flags = flags1; |
| 90188 | + if( encoding>SQLITE_UTF8 ) nByte &= ~1; | |
| 89973 | 90189 | pOut->z[nByte]=0; |
| 89974 | 90190 | pOut->z[nByte+1] = 0; |
| 89975 | - pOut->z[nByte+2] = 0; | |
| 89976 | 90191 | pOut->flags |= MEM_Term; |
| 89977 | 90192 | pOut->n = (int)nByte; |
| 89978 | 90193 | pOut->enc = encoding; |
| 89979 | 90194 | UPDATE_MAX_BLOBSIZE(pOut); |
| 89980 | 90195 | break; |
| @@ -90021,25 +90236,24 @@ | ||
| 90021 | 90236 | case OP_Add: /* same as TK_PLUS, in1, in2, out3 */ |
| 90022 | 90237 | case OP_Subtract: /* same as TK_MINUS, in1, in2, out3 */ |
| 90023 | 90238 | case OP_Multiply: /* same as TK_STAR, in1, in2, out3 */ |
| 90024 | 90239 | case OP_Divide: /* same as TK_SLASH, in1, in2, out3 */ |
| 90025 | 90240 | case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */ |
| 90026 | - u16 flags; /* Combined MEM_* flags from both inputs */ | |
| 90027 | 90241 | u16 type1; /* Numeric type of left operand */ |
| 90028 | 90242 | u16 type2; /* Numeric type of right operand */ |
| 90029 | 90243 | i64 iA; /* Integer value of left operand */ |
| 90030 | 90244 | i64 iB; /* Integer value of right operand */ |
| 90031 | 90245 | double rA; /* Real value of left operand */ |
| 90032 | 90246 | double rB; /* Real value of right operand */ |
| 90033 | 90247 | |
| 90034 | 90248 | pIn1 = &aMem[pOp->p1]; |
| 90035 | - type1 = numericType(pIn1); | |
| 90249 | + type1 = pIn1->flags; | |
| 90036 | 90250 | pIn2 = &aMem[pOp->p2]; |
| 90037 | - type2 = numericType(pIn2); | |
| 90251 | + type2 = pIn2->flags; | |
| 90038 | 90252 | pOut = &aMem[pOp->p3]; |
| 90039 | - flags = pIn1->flags | pIn2->flags; | |
| 90040 | 90253 | if( (type1 & type2 & MEM_Int)!=0 ){ |
| 90254 | +int_math: | |
| 90041 | 90255 | iA = pIn1->u.i; |
| 90042 | 90256 | iB = pIn2->u.i; |
| 90043 | 90257 | switch( pOp->opcode ){ |
| 90044 | 90258 | case OP_Add: if( sqlite3AddInt64(&iB,iA) ) goto fp_math; break; |
| 90045 | 90259 | case OP_Subtract: if( sqlite3SubInt64(&iB,iA) ) goto fp_math; break; |
| @@ -90057,13 +90271,16 @@ | ||
| 90057 | 90271 | break; |
| 90058 | 90272 | } |
| 90059 | 90273 | } |
| 90060 | 90274 | pOut->u.i = iB; |
| 90061 | 90275 | MemSetTypeFlag(pOut, MEM_Int); |
| 90062 | - }else if( (flags & MEM_Null)!=0 ){ | |
| 90276 | + }else if( ((type1 | type2) & MEM_Null)!=0 ){ | |
| 90063 | 90277 | goto arithmetic_result_is_null; |
| 90064 | 90278 | }else{ |
| 90279 | + type1 = numericType(pIn1); | |
| 90280 | + type2 = numericType(pIn2); | |
| 90281 | + if( (type1 & type2 & MEM_Int)!=0 ) goto int_math; | |
| 90065 | 90282 | fp_math: |
| 90066 | 90283 | rA = sqlite3VdbeRealValue(pIn1); |
| 90067 | 90284 | rB = sqlite3VdbeRealValue(pIn2); |
| 90068 | 90285 | switch( pOp->opcode ){ |
| 90069 | 90286 | case OP_Add: rB += rA; break; |
| @@ -90929,15 +91146,18 @@ | ||
| 90929 | 91146 | ** |
| 90930 | 91147 | ** Check the cursor P1 to see if it is currently pointing at a NULL row. |
| 90931 | 91148 | ** If it is, then set register P3 to NULL and jump immediately to P2. |
| 90932 | 91149 | ** If P1 is not on a NULL row, then fall through without making any |
| 90933 | 91150 | ** changes. |
| 91151 | +** | |
| 91152 | +** If P1 is not an open cursor, then this opcode is a no-op. | |
| 90934 | 91153 | */ |
| 90935 | 91154 | case OP_IfNullRow: { /* jump */ |
| 91155 | + VdbeCursor *pC; | |
| 90936 | 91156 | assert( pOp->p1>=0 && pOp->p1<p->nCursor ); |
| 90937 | - assert( p->apCsr[pOp->p1]!=0 ); | |
| 90938 | - if( p->apCsr[pOp->p1]->nullRow ){ | |
| 91157 | + pC = p->apCsr[pOp->p1]; | |
| 91158 | + if( ALWAYS(pC) && pC->nullRow ){ | |
| 90939 | 91159 | sqlite3VdbeMemSetNull(aMem + pOp->p3); |
| 90940 | 91160 | goto jump_to_p2; |
| 90941 | 91161 | } |
| 90942 | 91162 | break; |
| 90943 | 91163 | } |
| @@ -92249,11 +92469,11 @@ | ||
| 92249 | 92469 | assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) ); |
| 92250 | 92470 | /* See note about index shifting on OP_ReadCookie */ |
| 92251 | 92471 | rc = sqlite3BtreeUpdateMeta(pDb->pBt, pOp->p2, pOp->p3); |
| 92252 | 92472 | if( pOp->p2==BTREE_SCHEMA_VERSION ){ |
| 92253 | 92473 | /* When the schema cookie changes, record the new cookie internally */ |
| 92254 | - pDb->pSchema->schema_cookie = pOp->p3 - pOp->p5; | |
| 92474 | + *(u32*)&pDb->pSchema->schema_cookie = *(u32*)&pOp->p3 - pOp->p5; | |
| 92255 | 92475 | db->mDbFlags |= DBFLAG_SchemaChange; |
| 92256 | 92476 | sqlite3FkClearTriggerCache(db, pOp->p1); |
| 92257 | 92477 | }else if( pOp->p2==BTREE_FILE_FORMAT ){ |
| 92258 | 92478 | /* Record changes in the file format */ |
| 92259 | 92479 | pDb->pSchema->file_format = pOp->p3; |
| @@ -93040,11 +93260,11 @@ | ||
| 93040 | 93260 | ** |
| 93041 | 93261 | ** <li> If the cursor is successfully moved to the target row by 0 or more |
| 93042 | 93262 | ** sqlite3BtreeNext() calls, then jump to This.P2, which will land just |
| 93043 | 93263 | ** past the OP_IdxGT or OP_IdxGE opcode that follows the OP_SeekGE. |
| 93044 | 93264 | ** |
| 93045 | -** <li> If the cursor ends up past the target row (indicating the the target | |
| 93265 | +** <li> If the cursor ends up past the target row (indicating that the target | |
| 93046 | 93266 | ** row does not exist in the btree) then jump to SeekOP.P2. |
| 93047 | 93267 | ** </ol> |
| 93048 | 93268 | */ |
| 93049 | 93269 | case OP_SeekScan: { |
| 93050 | 93270 | VdbeCursor *pC; |
| @@ -94376,11 +94596,13 @@ | ||
| 94376 | 94596 | rc = sqlite3VdbeSorterNext(db, pC); |
| 94377 | 94597 | goto next_tail; |
| 94378 | 94598 | |
| 94379 | 94599 | case OP_Prev: /* jump */ |
| 94380 | 94600 | assert( pOp->p1>=0 && pOp->p1<p->nCursor ); |
| 94381 | - assert( pOp->p5<ArraySize(p->aCounter) ); | |
| 94601 | + assert( pOp->p5==0 | |
| 94602 | + || pOp->p5==SQLITE_STMTSTATUS_FULLSCAN_STEP | |
| 94603 | + || pOp->p5==SQLITE_STMTSTATUS_AUTOINDEX); | |
| 94382 | 94604 | pC = p->apCsr[pOp->p1]; |
| 94383 | 94605 | assert( pC!=0 ); |
| 94384 | 94606 | assert( pC->deferredMoveto==0 ); |
| 94385 | 94607 | assert( pC->eCurType==CURTYPE_BTREE ); |
| 94386 | 94608 | assert( pC->seekOp==OP_SeekLT || pC->seekOp==OP_SeekLE |
| @@ -94389,11 +94611,13 @@ | ||
| 94389 | 94611 | rc = sqlite3BtreePrevious(pC->uc.pCursor, pOp->p3); |
| 94390 | 94612 | goto next_tail; |
| 94391 | 94613 | |
| 94392 | 94614 | case OP_Next: /* jump */ |
| 94393 | 94615 | assert( pOp->p1>=0 && pOp->p1<p->nCursor ); |
| 94394 | - assert( pOp->p5<ArraySize(p->aCounter) ); | |
| 94616 | + assert( pOp->p5==0 | |
| 94617 | + || pOp->p5==SQLITE_STMTSTATUS_FULLSCAN_STEP | |
| 94618 | + || pOp->p5==SQLITE_STMTSTATUS_AUTOINDEX); | |
| 94395 | 94619 | pC = p->apCsr[pOp->p1]; |
| 94396 | 94620 | assert( pC!=0 ); |
| 94397 | 94621 | assert( pC->deferredMoveto==0 ); |
| 94398 | 94622 | assert( pC->eCurType==CURTYPE_BTREE ); |
| 94399 | 94623 | assert( pC->seekOp==OP_SeekGT || pC->seekOp==OP_SeekGE |
| @@ -94596,14 +94820,14 @@ | ||
| 94596 | 94820 | |
| 94597 | 94821 | /* The IdxRowid and Seek opcodes are combined because of the commonality |
| 94598 | 94822 | ** of sqlite3VdbeCursorRestore() and sqlite3VdbeIdxRowid(). */ |
| 94599 | 94823 | rc = sqlite3VdbeCursorRestore(pC); |
| 94600 | 94824 | |
| 94601 | - /* sqlite3VbeCursorRestore() can only fail if the record has been deleted | |
| 94602 | - ** out from under the cursor. That will never happens for an IdxRowid | |
| 94603 | - ** or Seek opcode */ | |
| 94604 | - if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error; | |
| 94825 | + /* sqlite3VdbeCursorRestore() may fail if the cursor has been disturbed | |
| 94826 | + ** since it was last positioned and an error (e.g. OOM or an IO error) | |
| 94827 | + ** occurs while trying to reposition it. */ | |
| 94828 | + if( rc!=SQLITE_OK ) goto abort_due_to_error; | |
| 94605 | 94829 | |
| 94606 | 94830 | if( !pC->nullRow ){ |
| 94607 | 94831 | rowid = 0; /* Not needed. Only used to silence a warning. */ |
| 94608 | 94832 | rc = sqlite3VdbeIdxRowid(db, pC->uc.pCursor, &rowid); |
| 94609 | 94833 | if( rc!=SQLITE_OK ){ |
| @@ -95501,11 +95725,11 @@ | ||
| 95501 | 95725 | |
| 95502 | 95726 | /* Opcode: OffsetLimit P1 P2 P3 * * |
| 95503 | 95727 | ** Synopsis: if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1) |
| 95504 | 95728 | ** |
| 95505 | 95729 | ** This opcode performs a commonly used computation associated with |
| 95506 | -** LIMIT and OFFSET process. r[P1] holds the limit counter. r[P3] | |
| 95730 | +** LIMIT and OFFSET processing. r[P1] holds the limit counter. r[P3] | |
| 95507 | 95731 | ** holds the offset counter. The opcode computes the combined value |
| 95508 | 95732 | ** of the LIMIT and OFFSET and stores that value in r[P2]. The r[P2] |
| 95509 | 95733 | ** value computed is the total number of rows that will need to be |
| 95510 | 95734 | ** visited in order to complete the query. |
| 95511 | 95735 | ** |
| @@ -101098,10 +101322,12 @@ | ||
| 101098 | 101322 | sqlite3_file *pJfd, /* Preallocated, blank file handle */ |
| 101099 | 101323 | int flags, /* Opening flags */ |
| 101100 | 101324 | int nSpill /* Bytes buffered before opening the file */ |
| 101101 | 101325 | ){ |
| 101102 | 101326 | MemJournal *p = (MemJournal*)pJfd; |
| 101327 | + | |
| 101328 | + assert( zName || nSpill<0 || (flags & SQLITE_OPEN_EXCLUSIVE) ); | |
| 101103 | 101329 | |
| 101104 | 101330 | /* Zero the file-handle object. If nSpill was passed zero, initialize |
| 101105 | 101331 | ** it using the sqlite3OsOpen() function of the underlying VFS. In this |
| 101106 | 101332 | ** case none of the code in this module is executed as a result of calls |
| 101107 | 101333 | ** made on the journal file-handle. */ |
| @@ -101526,37 +101752,25 @@ | ||
| 101526 | 101752 | pDup = sqlite3ExprDup(db, pOrig, 0); |
| 101527 | 101753 | if( db->mallocFailed ){ |
| 101528 | 101754 | sqlite3ExprDelete(db, pDup); |
| 101529 | 101755 | pDup = 0; |
| 101530 | 101756 | }else{ |
| 101757 | + Expr temp; | |
| 101531 | 101758 | incrAggFunctionDepth(pDup, nSubquery); |
| 101532 | 101759 | if( pExpr->op==TK_COLLATE ){ |
| 101533 | 101760 | assert( !ExprHasProperty(pExpr, EP_IntValue) ); |
| 101534 | 101761 | pDup = sqlite3ExprAddCollateString(pParse, pDup, pExpr->u.zToken); |
| 101535 | 101762 | } |
| 101536 | - | |
| 101537 | - /* Before calling sqlite3ExprDelete(), set the EP_Static flag. This | |
| 101538 | - ** prevents ExprDelete() from deleting the Expr structure itself, | |
| 101539 | - ** allowing it to be repopulated by the memcpy() on the following line. | |
| 101540 | - ** The pExpr->u.zToken might point into memory that will be freed by the | |
| 101541 | - ** sqlite3DbFree(db, pDup) on the last line of this block, so be sure to | |
| 101542 | - ** make a copy of the token before doing the sqlite3DbFree(). | |
| 101543 | - */ | |
| 101544 | - ExprSetProperty(pExpr, EP_Static); | |
| 101545 | - sqlite3ExprDelete(db, pExpr); | |
| 101546 | - memcpy(pExpr, pDup, sizeof(*pExpr)); | |
| 101547 | - if( !ExprHasProperty(pExpr, EP_IntValue) && pExpr->u.zToken!=0 ){ | |
| 101548 | - assert( (pExpr->flags & (EP_Reduced|EP_TokenOnly))==0 ); | |
| 101549 | - pExpr->u.zToken = sqlite3DbStrDup(db, pExpr->u.zToken); | |
| 101550 | - pExpr->flags |= EP_MemToken; | |
| 101551 | - } | |
| 101763 | + memcpy(&temp, pDup, sizeof(Expr)); | |
| 101764 | + memcpy(pDup, pExpr, sizeof(Expr)); | |
| 101765 | + memcpy(pExpr, &temp, sizeof(Expr)); | |
| 101552 | 101766 | if( ExprHasProperty(pExpr, EP_WinFunc) ){ |
| 101553 | 101767 | if( ALWAYS(pExpr->y.pWin!=0) ){ |
| 101554 | 101768 | pExpr->y.pWin->pOwner = pExpr; |
| 101555 | 101769 | } |
| 101556 | 101770 | } |
| 101557 | - sqlite3DbFree(db, pDup); | |
| 101771 | + sqlite3ExprDeferredDelete(pParse, pDup); | |
| 101558 | 101772 | } |
| 101559 | 101773 | } |
| 101560 | 101774 | |
| 101561 | 101775 | /* |
| 101562 | 101776 | ** Subqueries stores the original database, table and column names for their |
| @@ -101755,11 +101969,11 @@ | ||
| 101755 | 101969 | for(i=0, pItem=pSrcList->a; i<pSrcList->nSrc; i++, pItem++){ |
| 101756 | 101970 | u8 hCol; |
| 101757 | 101971 | pTab = pItem->pTab; |
| 101758 | 101972 | assert( pTab!=0 && pTab->zName!=0 ); |
| 101759 | 101973 | assert( pTab->nCol>0 || pParse->nErr ); |
| 101760 | - assert( pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) ); | |
| 101974 | + assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) ); | |
| 101761 | 101975 | if( pItem->fg.isNestedFrom ){ |
| 101762 | 101976 | /* In this case, pItem is a subquery that has been formed from a |
| 101763 | 101977 | ** parenthesized subset of the FROM clause terms. Example: |
| 101764 | 101978 | ** .... FROM t1 LEFT JOIN (t2 RIGHT JOIN t3 USING(x)) USING(y) ... |
| 101765 | 101979 | ** \_________________________/ |
| @@ -103265,12 +103479,12 @@ | ||
| 103265 | 103479 | */ |
| 103266 | 103480 | assert( (sNC.ncFlags & (NC_UAggInfo|NC_UUpsert|NC_UBaseReg))==0 ); |
| 103267 | 103481 | sNC.uNC.pEList = p->pEList; |
| 103268 | 103482 | sNC.ncFlags |= NC_UEList; |
| 103269 | 103483 | if( p->pHaving ){ |
| 103270 | - if( !pGroupBy ){ | |
| 103271 | - sqlite3ErrorMsg(pParse, "a GROUP BY clause is required before HAVING"); | |
| 103484 | + if( (p->selFlags & SF_Aggregate)==0 ){ | |
| 103485 | + sqlite3ErrorMsg(pParse, "HAVING clause on a non-aggregate query"); | |
| 103272 | 103486 | return WRC_Abort; |
| 103273 | 103487 | } |
| 103274 | 103488 | if( sqlite3ResolveExprNames(&sNC, p->pHaving) ) return WRC_Abort; |
| 103275 | 103489 | } |
| 103276 | 103490 | if( sqlite3ResolveExprNames(&sNC, p->pWhere) ) return WRC_Abort; |
| @@ -104361,11 +104575,13 @@ | ||
| 104361 | 104575 | ** Also propagate EP_Propagate flags up from Expr.x.pList to Expr.flags, |
| 104362 | 104576 | ** if appropriate. |
| 104363 | 104577 | */ |
| 104364 | 104578 | static void exprSetHeight(Expr *p){ |
| 104365 | 104579 | int nHeight = p->pLeft ? p->pLeft->nHeight : 0; |
| 104366 | - if( p->pRight && p->pRight->nHeight>nHeight ) nHeight = p->pRight->nHeight; | |
| 104580 | + if( NEVER(p->pRight) && p->pRight->nHeight>nHeight ){ | |
| 104581 | + nHeight = p->pRight->nHeight; | |
| 104582 | + } | |
| 104367 | 104583 | if( ExprUseXSelect(p) ){ |
| 104368 | 104584 | heightOfSelect(p->x.pSelect, &nHeight); |
| 104369 | 104585 | }else if( p->x.pList ){ |
| 104370 | 104586 | heightOfExprList(p->x.pList, &nHeight); |
| 104371 | 104587 | p->flags |= EP_Propagate & sqlite3ExprListFlags(p->x.pList); |
| @@ -104504,19 +104720,30 @@ | ||
| 104504 | 104720 | if( pRoot==0 ){ |
| 104505 | 104721 | assert( db->mallocFailed ); |
| 104506 | 104722 | sqlite3ExprDelete(db, pLeft); |
| 104507 | 104723 | sqlite3ExprDelete(db, pRight); |
| 104508 | 104724 | }else{ |
| 104725 | + assert( ExprUseXList(pRoot) ); | |
| 104726 | + assert( pRoot->x.pSelect==0 ); | |
| 104509 | 104727 | if( pRight ){ |
| 104510 | 104728 | pRoot->pRight = pRight; |
| 104511 | 104729 | pRoot->flags |= EP_Propagate & pRight->flags; |
| 104730 | +#if SQLITE_MAX_EXPR_DEPTH>0 | |
| 104731 | + pRoot->nHeight = pRight->nHeight+1; | |
| 104732 | + }else{ | |
| 104733 | + pRoot->nHeight = 1; | |
| 104734 | +#endif | |
| 104512 | 104735 | } |
| 104513 | 104736 | if( pLeft ){ |
| 104514 | 104737 | pRoot->pLeft = pLeft; |
| 104515 | 104738 | pRoot->flags |= EP_Propagate & pLeft->flags; |
| 104739 | +#if SQLITE_MAX_EXPR_DEPTH>0 | |
| 104740 | + if( pLeft->nHeight>=pRoot->nHeight ){ | |
| 104741 | + pRoot->nHeight = pLeft->nHeight+1; | |
| 104742 | + } | |
| 104743 | +#endif | |
| 104516 | 104744 | } |
| 104517 | - exprSetHeight(pRoot); | |
| 104518 | 104745 | } |
| 104519 | 104746 | } |
| 104520 | 104747 | |
| 104521 | 104748 | /* |
| 104522 | 104749 | ** Allocate an Expr node which joins as many as two subtrees. |
| @@ -104798,10 +105025,11 @@ | ||
| 104798 | 105025 | /* |
| 104799 | 105026 | ** Recursively delete an expression tree. |
| 104800 | 105027 | */ |
| 104801 | 105028 | static SQLITE_NOINLINE void sqlite3ExprDeleteNN(sqlite3 *db, Expr *p){ |
| 104802 | 105029 | assert( p!=0 ); |
| 105030 | + assert( db!=0 ); | |
| 104803 | 105031 | assert( !ExprUseUValue(p) || p->u.iValue>=0 ); |
| 104804 | 105032 | assert( !ExprUseYWin(p) || !ExprUseYSub(p) ); |
| 104805 | 105033 | assert( !ExprUseYWin(p) || p->y.pWin!=0 || db->mallocFailed ); |
| 104806 | 105034 | assert( p->op!=TK_FUNCTION || !ExprUseYSub(p) ); |
| 104807 | 105035 | #ifdef SQLITE_DEBUG |
| @@ -104829,16 +105057,12 @@ | ||
| 104829 | 105057 | sqlite3WindowDelete(db, p->y.pWin); |
| 104830 | 105058 | } |
| 104831 | 105059 | #endif |
| 104832 | 105060 | } |
| 104833 | 105061 | } |
| 104834 | - if( ExprHasProperty(p, EP_MemToken) ){ | |
| 104835 | - assert( !ExprHasProperty(p, EP_IntValue) ); | |
| 104836 | - sqlite3DbFree(db, p->u.zToken); | |
| 104837 | - } | |
| 104838 | 105062 | if( !ExprHasProperty(p, EP_Static) ){ |
| 104839 | - sqlite3DbFreeNN(db, p); | |
| 105063 | + sqlite3DbNNFreeNN(db, p); | |
| 104840 | 105064 | } |
| 104841 | 105065 | } |
| 104842 | 105066 | SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3 *db, Expr *p){ |
| 104843 | 105067 | if( p ) sqlite3ExprDeleteNN(db, p); |
| 104844 | 105068 | } |
| @@ -104865,12 +105089,13 @@ | ||
| 104865 | 105089 | ** |
| 104866 | 105090 | ** The deferred delete is (currently) implemented by adding the |
| 104867 | 105091 | ** pExpr to the pParse->pConstExpr list with a register number of 0. |
| 104868 | 105092 | */ |
| 104869 | 105093 | SQLITE_PRIVATE void sqlite3ExprDeferredDelete(Parse *pParse, Expr *pExpr){ |
| 104870 | - pParse->pConstExpr = | |
| 104871 | - sqlite3ExprListAppend(pParse, pParse->pConstExpr, pExpr); | |
| 105094 | + sqlite3ParserAddCleanup(pParse, | |
| 105095 | + (void(*)(sqlite3*,void*))sqlite3ExprDelete, | |
| 105096 | + pExpr); | |
| 104872 | 105097 | } |
| 104873 | 105098 | |
| 104874 | 105099 | /* Invoke sqlite3RenameExprUnmap() and sqlite3ExprDelete() on the |
| 104875 | 105100 | ** expression. |
| 104876 | 105101 | */ |
| @@ -104940,11 +105165,10 @@ | ||
| 104940 | 105165 | ){ |
| 104941 | 105166 | nSize = EXPR_FULLSIZE; |
| 104942 | 105167 | }else{ |
| 104943 | 105168 | assert( !ExprHasProperty(p, EP_TokenOnly|EP_Reduced) ); |
| 104944 | 105169 | assert( !ExprHasProperty(p, EP_OuterON) ); |
| 104945 | - assert( !ExprHasProperty(p, EP_MemToken) ); | |
| 104946 | 105170 | assert( !ExprHasVVAProperty(p, EP_NoReduce) ); |
| 104947 | 105171 | if( p->pLeft || p->x.pList ){ |
| 104948 | 105172 | nSize = EXPR_REDUCEDSIZE | EP_Reduced; |
| 104949 | 105173 | }else{ |
| 104950 | 105174 | assert( p->pRight==0 ); |
| @@ -105044,11 +105268,11 @@ | ||
| 105044 | 105268 | memset(&zAlloc[nSize], 0, EXPR_FULLSIZE-nSize); |
| 105045 | 105269 | } |
| 105046 | 105270 | } |
| 105047 | 105271 | |
| 105048 | 105272 | /* Set the EP_Reduced, EP_TokenOnly, and EP_Static flags appropriately. */ |
| 105049 | - pNew->flags &= ~(EP_Reduced|EP_TokenOnly|EP_Static|EP_MemToken); | |
| 105273 | + pNew->flags &= ~(EP_Reduced|EP_TokenOnly|EP_Static); | |
| 105050 | 105274 | pNew->flags |= nStructSize & (EP_Reduced|EP_TokenOnly); |
| 105051 | 105275 | pNew->flags |= staticFlag; |
| 105052 | 105276 | ExprClearVVAProperties(pNew); |
| 105053 | 105277 | if( dupFlags ){ |
| 105054 | 105278 | ExprSetVVAProperty(pNew, EP_Immutable); |
| @@ -105620,16 +105844,17 @@ | ||
| 105620 | 105844 | */ |
| 105621 | 105845 | static SQLITE_NOINLINE void exprListDeleteNN(sqlite3 *db, ExprList *pList){ |
| 105622 | 105846 | int i = pList->nExpr; |
| 105623 | 105847 | struct ExprList_item *pItem = pList->a; |
| 105624 | 105848 | assert( pList->nExpr>0 ); |
| 105849 | + assert( db!=0 ); | |
| 105625 | 105850 | do{ |
| 105626 | 105851 | sqlite3ExprDelete(db, pItem->pExpr); |
| 105627 | - sqlite3DbFree(db, pItem->zEName); | |
| 105852 | + if( pItem->zEName ) sqlite3DbNNFreeNN(db, pItem->zEName); | |
| 105628 | 105853 | pItem++; |
| 105629 | 105854 | }while( --i>0 ); |
| 105630 | - sqlite3DbFreeNN(db, pList); | |
| 105855 | + sqlite3DbNNFreeNN(db, pList); | |
| 105631 | 105856 | } |
| 105632 | 105857 | SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){ |
| 105633 | 105858 | if( pList ) exprListDeleteNN(db, pList); |
| 105634 | 105859 | } |
| 105635 | 105860 | |
| @@ -106916,11 +107141,11 @@ | ||
| 106916 | 107141 | if( pLimit ){ |
| 106917 | 107142 | pLimit->affExpr = SQLITE_AFF_NUMERIC; |
| 106918 | 107143 | pLimit = sqlite3PExpr(pParse, TK_NE, |
| 106919 | 107144 | sqlite3ExprDup(db, pSel->pLimit->pLeft, 0), pLimit); |
| 106920 | 107145 | } |
| 106921 | - sqlite3ExprDelete(db, pSel->pLimit->pLeft); | |
| 107146 | + sqlite3ExprDeferredDelete(pParse, pSel->pLimit->pLeft); | |
| 106922 | 107147 | pSel->pLimit->pLeft = pLimit; |
| 106923 | 107148 | }else{ |
| 106924 | 107149 | /* If there is no pre-existing limit add a limit of 1 */ |
| 106925 | 107150 | pLimit = sqlite3Expr(pParse->db, TK_INTEGER, "1"); |
| 106926 | 107151 | pSel->pLimit = sqlite3PExpr(pParse, TK_LIMIT, pLimit, 0); |
| @@ -107430,11 +107655,11 @@ | ||
| 107430 | 107655 | u8 p5 /* P5 value for OP_Column + FLAGS */ |
| 107431 | 107656 | ){ |
| 107432 | 107657 | assert( pParse->pVdbe!=0 ); |
| 107433 | 107658 | sqlite3ExprCodeGetColumnOfTable(pParse->pVdbe, pTab, iTable, iColumn, iReg); |
| 107434 | 107659 | if( p5 ){ |
| 107435 | - VdbeOp *pOp = sqlite3VdbeGetOp(pParse->pVdbe,-1); | |
| 107660 | + VdbeOp *pOp = sqlite3VdbeGetLastOp(pParse->pVdbe); | |
| 107436 | 107661 | if( pOp->opcode==OP_Column ) pOp->p5 = p5; |
| 107437 | 107662 | } |
| 107438 | 107663 | return iReg; |
| 107439 | 107664 | } |
| 107440 | 107665 | |
| @@ -107499,11 +107724,11 @@ | ||
| 107499 | 107724 | /* |
| 107500 | 107725 | ** If the last opcode is a OP_Copy, then set the do-not-merge flag (p5) |
| 107501 | 107726 | ** so that a subsequent copy will not be merged into this one. |
| 107502 | 107727 | */ |
| 107503 | 107728 | static void setDoNotMergeFlagOnCopy(Vdbe *v){ |
| 107504 | - if( sqlite3VdbeGetOp(v, -1)->opcode==OP_Copy ){ | |
| 107729 | + if( sqlite3VdbeGetLastOp(v)->opcode==OP_Copy ){ | |
| 107505 | 107730 | sqlite3VdbeChangeP5(v, 1); /* Tag trailing OP_Copy as not mergable */ |
| 107506 | 107731 | } |
| 107507 | 107732 | } |
| 107508 | 107733 | |
| 107509 | 107734 | /* |
| @@ -107670,11 +107895,11 @@ | ||
| 107670 | 107895 | Table *pTab = pCol->pTab; |
| 107671 | 107896 | sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdxPTab, |
| 107672 | 107897 | pCol->iSorterColumn, target); |
| 107673 | 107898 | if( pCol->iColumn<0 ){ |
| 107674 | 107899 | VdbeComment((v,"%s.rowid",pTab->zName)); |
| 107675 | - }else{ | |
| 107900 | + }else if( ALWAYS(pTab!=0) ){ | |
| 107676 | 107901 | VdbeComment((v,"%s.%s", |
| 107677 | 107902 | pTab->zName, pTab->aCol[pCol->iColumn].zCnName)); |
| 107678 | 107903 | if( pTab->aCol[pCol->iColumn].affinity==SQLITE_AFF_REAL ){ |
| 107679 | 107904 | sqlite3VdbeAddOp1(v, OP_RealAffinity, target); |
| 107680 | 107905 | } |
| @@ -108265,10 +108490,25 @@ | ||
| 108265 | 108490 | ** on a LEFT JOIN NULL row. |
| 108266 | 108491 | */ |
| 108267 | 108492 | case TK_IF_NULL_ROW: { |
| 108268 | 108493 | int addrINR; |
| 108269 | 108494 | u8 okConstFactor = pParse->okConstFactor; |
| 108495 | + AggInfo *pAggInfo = pExpr->pAggInfo; | |
| 108496 | + if( pAggInfo ){ | |
| 108497 | + assert( pExpr->iAgg>=0 && pExpr->iAgg<pAggInfo->nColumn ); | |
| 108498 | + if( !pAggInfo->directMode ){ | |
| 108499 | + inReg = pAggInfo->aCol[pExpr->iAgg].iMem; | |
| 108500 | + break; | |
| 108501 | + } | |
| 108502 | + if( pExpr->pAggInfo->useSortingIdx ){ | |
| 108503 | + sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdxPTab, | |
| 108504 | + pAggInfo->aCol[pExpr->iAgg].iSorterColumn, | |
| 108505 | + target); | |
| 108506 | + inReg = target; | |
| 108507 | + break; | |
| 108508 | + } | |
| 108509 | + } | |
| 108270 | 108510 | addrINR = sqlite3VdbeAddOp1(v, OP_IfNullRow, pExpr->iTable); |
| 108271 | 108511 | /* Temporarily disable factoring of constant expressions, since |
| 108272 | 108512 | ** even though expressions may appear to be constant, they are not |
| 108273 | 108513 | ** really constant because they originate from the right-hand side |
| 108274 | 108514 | ** of a LEFT JOIN. */ |
| @@ -108606,11 +108846,11 @@ | ||
| 108606 | 108846 | }else{ |
| 108607 | 108847 | int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i); |
| 108608 | 108848 | if( inReg!=target+i ){ |
| 108609 | 108849 | VdbeOp *pOp; |
| 108610 | 108850 | if( copyOp==OP_Copy |
| 108611 | - && (pOp=sqlite3VdbeGetOp(v, -1))->opcode==OP_Copy | |
| 108851 | + && (pOp=sqlite3VdbeGetLastOp(v))->opcode==OP_Copy | |
| 108612 | 108852 | && pOp->p1+pOp->p3+1==inReg |
| 108613 | 108853 | && pOp->p2+pOp->p3+1==target+i |
| 108614 | 108854 | && pOp->p5==0 /* The do-not-merge flag must be clear */ |
| 108615 | 108855 | ){ |
| 108616 | 108856 | pOp->p3++; |
| @@ -109642,10 +109882,11 @@ | ||
| 109642 | 109882 | ** fact is exploited for efficiency. |
| 109643 | 109883 | */ |
| 109644 | 109884 | SQLITE_PRIVATE int sqlite3ReferencesSrcList(Parse *pParse, Expr *pExpr, SrcList *pSrcList){ |
| 109645 | 109885 | Walker w; |
| 109646 | 109886 | struct RefSrcList x; |
| 109887 | + assert( pParse->db!=0 ); | |
| 109647 | 109888 | memset(&w, 0, sizeof(w)); |
| 109648 | 109889 | memset(&x, 0, sizeof(x)); |
| 109649 | 109890 | w.xExprCallback = exprRefToSrcList; |
| 109650 | 109891 | w.xSelectCallback = selectRefEnter; |
| 109651 | 109892 | w.xSelectCallback2 = selectRefLeave; |
| @@ -109658,11 +109899,11 @@ | ||
| 109658 | 109899 | #ifndef SQLITE_OMIT_WINDOWFUNC |
| 109659 | 109900 | if( ExprHasProperty(pExpr, EP_WinFunc) ){ |
| 109660 | 109901 | sqlite3WalkExpr(&w, pExpr->y.pWin->pFilter); |
| 109661 | 109902 | } |
| 109662 | 109903 | #endif |
| 109663 | - sqlite3DbFree(pParse->db, x.aiExclude); | |
| 109904 | + if( x.aiExclude ) sqlite3DbNNFreeNN(pParse->db, x.aiExclude); | |
| 109664 | 109905 | if( w.eCode & 0x01 ){ |
| 109665 | 109906 | return 1; |
| 109666 | 109907 | }else if( w.eCode ){ |
| 109667 | 109908 | return 0; |
| 109668 | 109909 | }else{ |
| @@ -109689,21 +109930,22 @@ | ||
| 109689 | 109930 | ){ |
| 109690 | 109931 | AggInfo *pAggInfo = pExpr->pAggInfo; |
| 109691 | 109932 | int iAgg = pExpr->iAgg; |
| 109692 | 109933 | Parse *pParse = pWalker->pParse; |
| 109693 | 109934 | sqlite3 *db = pParse->db; |
| 109694 | - assert( pExpr->op==TK_AGG_COLUMN || pExpr->op==TK_AGG_FUNCTION ); | |
| 109695 | - if( pExpr->op==TK_AGG_COLUMN ){ | |
| 109935 | + if( pExpr->op!=TK_AGG_FUNCTION ){ | |
| 109936 | + assert( pExpr->op==TK_AGG_COLUMN || pExpr->op==TK_IF_NULL_ROW ); | |
| 109696 | 109937 | assert( iAgg>=0 && iAgg<pAggInfo->nColumn ); |
| 109697 | 109938 | if( pAggInfo->aCol[iAgg].pCExpr==pExpr ){ |
| 109698 | 109939 | pExpr = sqlite3ExprDup(db, pExpr, 0); |
| 109699 | 109940 | if( pExpr ){ |
| 109700 | 109941 | pAggInfo->aCol[iAgg].pCExpr = pExpr; |
| 109701 | 109942 | sqlite3ExprDeferredDelete(pParse, pExpr); |
| 109702 | 109943 | } |
| 109703 | 109944 | } |
| 109704 | 109945 | }else{ |
| 109946 | + assert( pExpr->op==TK_AGG_FUNCTION ); | |
| 109705 | 109947 | assert( iAgg>=0 && iAgg<pAggInfo->nFunc ); |
| 109706 | 109948 | if( pAggInfo->aFunc[iAgg].pFExpr==pExpr ){ |
| 109707 | 109949 | pExpr = sqlite3ExprDup(db, pExpr, 0); |
| 109708 | 109950 | if( pExpr ){ |
| 109709 | 109951 | pAggInfo->aFunc[iAgg].pFExpr = pExpr; |
| @@ -109770,14 +110012,16 @@ | ||
| 109770 | 110012 | SrcList *pSrcList = pNC->pSrcList; |
| 109771 | 110013 | AggInfo *pAggInfo = pNC->uNC.pAggInfo; |
| 109772 | 110014 | |
| 109773 | 110015 | assert( pNC->ncFlags & NC_UAggInfo ); |
| 109774 | 110016 | switch( pExpr->op ){ |
| 110017 | + case TK_IF_NULL_ROW: | |
| 109775 | 110018 | case TK_AGG_COLUMN: |
| 109776 | 110019 | case TK_COLUMN: { |
| 109777 | 110020 | testcase( pExpr->op==TK_AGG_COLUMN ); |
| 109778 | 110021 | testcase( pExpr->op==TK_COLUMN ); |
| 110022 | + testcase( pExpr->op==TK_IF_NULL_ROW ); | |
| 109779 | 110023 | /* Check to see if the column is in one of the tables in the FROM |
| 109780 | 110024 | ** clause of the aggregate query */ |
| 109781 | 110025 | if( ALWAYS(pSrcList!=0) ){ |
| 109782 | 110026 | SrcItem *pItem = pSrcList->a; |
| 109783 | 110027 | for(i=0; i<pSrcList->nSrc; i++, pItem++){ |
| @@ -109791,12 +110035,14 @@ | ||
| 109791 | 110035 | ** is not an entry there already. |
| 109792 | 110036 | */ |
| 109793 | 110037 | int k; |
| 109794 | 110038 | pCol = pAggInfo->aCol; |
| 109795 | 110039 | for(k=0; k<pAggInfo->nColumn; k++, pCol++){ |
| 109796 | - if( pCol->iTable==pExpr->iTable && | |
| 109797 | - pCol->iColumn==pExpr->iColumn ){ | |
| 110040 | + if( pCol->iTable==pExpr->iTable | |
| 110041 | + && pCol->iColumn==pExpr->iColumn | |
| 110042 | + && pExpr->op!=TK_IF_NULL_ROW | |
| 110043 | + ){ | |
| 109798 | 110044 | break; |
| 109799 | 110045 | } |
| 109800 | 110046 | } |
| 109801 | 110047 | if( (k>=pAggInfo->nColumn) |
| 109802 | 110048 | && (k = addAggInfoColumn(pParse->db, pAggInfo))>=0 |
| @@ -109807,19 +110053,21 @@ | ||
| 109807 | 110053 | pCol->iTable = pExpr->iTable; |
| 109808 | 110054 | pCol->iColumn = pExpr->iColumn; |
| 109809 | 110055 | pCol->iMem = ++pParse->nMem; |
| 109810 | 110056 | pCol->iSorterColumn = -1; |
| 109811 | 110057 | pCol->pCExpr = pExpr; |
| 109812 | - if( pAggInfo->pGroupBy ){ | |
| 110058 | + if( pAggInfo->pGroupBy && pExpr->op!=TK_IF_NULL_ROW ){ | |
| 109813 | 110059 | int j, n; |
| 109814 | 110060 | ExprList *pGB = pAggInfo->pGroupBy; |
| 109815 | 110061 | struct ExprList_item *pTerm = pGB->a; |
| 109816 | 110062 | n = pGB->nExpr; |
| 109817 | 110063 | for(j=0; j<n; j++, pTerm++){ |
| 109818 | 110064 | Expr *pE = pTerm->pExpr; |
| 109819 | - if( pE->op==TK_COLUMN && pE->iTable==pExpr->iTable && | |
| 109820 | - pE->iColumn==pExpr->iColumn ){ | |
| 110065 | + if( pE->op==TK_COLUMN | |
| 110066 | + && pE->iTable==pExpr->iTable | |
| 110067 | + && pE->iColumn==pExpr->iColumn | |
| 110068 | + ){ | |
| 109821 | 110069 | pCol->iSorterColumn = j; |
| 109822 | 110070 | break; |
| 109823 | 110071 | } |
| 109824 | 110072 | } |
| 109825 | 110073 | } |
| @@ -109832,11 +110080,13 @@ | ||
| 109832 | 110080 | ** Convert the pExpr to be a TK_AGG_COLUMN referring to that |
| 109833 | 110081 | ** pAggInfo->aCol[] entry. |
| 109834 | 110082 | */ |
| 109835 | 110083 | ExprSetVVAProperty(pExpr, EP_NoReduce); |
| 109836 | 110084 | pExpr->pAggInfo = pAggInfo; |
| 109837 | - pExpr->op = TK_AGG_COLUMN; | |
| 110085 | + if( pExpr->op==TK_COLUMN ){ | |
| 110086 | + pExpr->op = TK_AGG_COLUMN; | |
| 110087 | + } | |
| 109838 | 110088 | pExpr->iAgg = (i16)k; |
| 109839 | 110089 | break; |
| 109840 | 110090 | } /* endif pExpr->iTable==pItem->iCursor */ |
| 109841 | 110091 | } /* end loop over pSrcList */ |
| 109842 | 110092 | } |
| @@ -115254,10 +115504,11 @@ | ||
| 115254 | 115504 | ** no VDBE code was generated. |
| 115255 | 115505 | */ |
| 115256 | 115506 | SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){ |
| 115257 | 115507 | sqlite3 *db; |
| 115258 | 115508 | Vdbe *v; |
| 115509 | + int iDb, i; | |
| 115259 | 115510 | |
| 115260 | 115511 | assert( pParse->pToplevel==0 ); |
| 115261 | 115512 | db = pParse->db; |
| 115262 | 115513 | assert( db->pParse==pParse ); |
| 115263 | 115514 | if( pParse->nested ) return; |
| @@ -115283,11 +115534,10 @@ | ||
| 115283 | 115534 | || sqlite3VdbeAssertMayAbort(v, pParse->mayAbort)); |
| 115284 | 115535 | if( v ){ |
| 115285 | 115536 | if( pParse->bReturning ){ |
| 115286 | 115537 | Returning *pReturning = pParse->u1.pReturning; |
| 115287 | 115538 | int addrRewind; |
| 115288 | - int i; | |
| 115289 | 115539 | int reg; |
| 115290 | 115540 | |
| 115291 | 115541 | if( pReturning->nRetCol ){ |
| 115292 | 115542 | sqlite3VdbeAddOp0(v, OP_FkCheck); |
| 115293 | 115543 | addrRewind = |
| @@ -115320,80 +115570,73 @@ | ||
| 115320 | 115570 | ** (Bit 0 is for main, bit 1 is for temp, and so forth.) Bits are |
| 115321 | 115571 | ** set for each database that is used. Generate code to start a |
| 115322 | 115572 | ** transaction on each used database and to verify the schema cookie |
| 115323 | 115573 | ** on each used database. |
| 115324 | 115574 | */ |
| 115325 | - if( db->mallocFailed==0 | |
| 115326 | - && (DbMaskNonZero(pParse->cookieMask) || pParse->pConstExpr) | |
| 115327 | - ){ | |
| 115328 | - int iDb, i; | |
| 115329 | - assert( sqlite3VdbeGetOp(v, 0)->opcode==OP_Init ); | |
| 115330 | - sqlite3VdbeJumpHere(v, 0); | |
| 115331 | - assert( db->nDb>0 ); | |
| 115332 | - iDb = 0; | |
| 115333 | - do{ | |
| 115334 | - Schema *pSchema; | |
| 115335 | - if( DbMaskTest(pParse->cookieMask, iDb)==0 ) continue; | |
| 115336 | - sqlite3VdbeUsesBtree(v, iDb); | |
| 115337 | - pSchema = db->aDb[iDb].pSchema; | |
| 115338 | - sqlite3VdbeAddOp4Int(v, | |
| 115339 | - OP_Transaction, /* Opcode */ | |
| 115340 | - iDb, /* P1 */ | |
| 115341 | - DbMaskTest(pParse->writeMask,iDb), /* P2 */ | |
| 115342 | - pSchema->schema_cookie, /* P3 */ | |
| 115343 | - pSchema->iGeneration /* P4 */ | |
| 115344 | - ); | |
| 115345 | - if( db->init.busy==0 ) sqlite3VdbeChangeP5(v, 1); | |
| 115346 | - VdbeComment((v, | |
| 115347 | - "usesStmtJournal=%d", pParse->mayAbort && pParse->isMultiWrite)); | |
| 115348 | - }while( ++iDb<db->nDb ); | |
| 115575 | + assert( pParse->nErr>0 || sqlite3VdbeGetOp(v, 0)->opcode==OP_Init ); | |
| 115576 | + sqlite3VdbeJumpHere(v, 0); | |
| 115577 | + assert( db->nDb>0 ); | |
| 115578 | + iDb = 0; | |
| 115579 | + do{ | |
| 115580 | + Schema *pSchema; | |
| 115581 | + if( DbMaskTest(pParse->cookieMask, iDb)==0 ) continue; | |
| 115582 | + sqlite3VdbeUsesBtree(v, iDb); | |
| 115583 | + pSchema = db->aDb[iDb].pSchema; | |
| 115584 | + sqlite3VdbeAddOp4Int(v, | |
| 115585 | + OP_Transaction, /* Opcode */ | |
| 115586 | + iDb, /* P1 */ | |
| 115587 | + DbMaskTest(pParse->writeMask,iDb), /* P2 */ | |
| 115588 | + pSchema->schema_cookie, /* P3 */ | |
| 115589 | + pSchema->iGeneration /* P4 */ | |
| 115590 | + ); | |
| 115591 | + if( db->init.busy==0 ) sqlite3VdbeChangeP5(v, 1); | |
| 115592 | + VdbeComment((v, | |
| 115593 | + "usesStmtJournal=%d", pParse->mayAbort && pParse->isMultiWrite)); | |
| 115594 | + }while( ++iDb<db->nDb ); | |
| 115349 | 115595 | #ifndef SQLITE_OMIT_VIRTUALTABLE |
| 115350 | - for(i=0; i<pParse->nVtabLock; i++){ | |
| 115351 | - char *vtab = (char *)sqlite3GetVTable(db, pParse->apVtabLock[i]); | |
| 115352 | - sqlite3VdbeAddOp4(v, OP_VBegin, 0, 0, 0, vtab, P4_VTAB); | |
| 115353 | - } | |
| 115354 | - pParse->nVtabLock = 0; | |
| 115596 | + for(i=0; i<pParse->nVtabLock; i++){ | |
| 115597 | + char *vtab = (char *)sqlite3GetVTable(db, pParse->apVtabLock[i]); | |
| 115598 | + sqlite3VdbeAddOp4(v, OP_VBegin, 0, 0, 0, vtab, P4_VTAB); | |
| 115599 | + } | |
| 115600 | + pParse->nVtabLock = 0; | |
| 115355 | 115601 | #endif |
| 115356 | 115602 | |
| 115357 | - /* Once all the cookies have been verified and transactions opened, | |
| 115358 | - ** obtain the required table-locks. This is a no-op unless the | |
| 115359 | - ** shared-cache feature is enabled. | |
| 115360 | - */ | |
| 115361 | - codeTableLocks(pParse); | |
| 115362 | - | |
| 115363 | - /* Initialize any AUTOINCREMENT data structures required. | |
| 115364 | - */ | |
| 115365 | - sqlite3AutoincrementBegin(pParse); | |
| 115366 | - | |
| 115367 | - /* Code constant expressions that where factored out of inner loops. | |
| 115368 | - ** | |
| 115369 | - ** The pConstExpr list might also contain expressions that we simply | |
| 115370 | - ** want to keep around until the Parse object is deleted. Such | |
| 115371 | - ** expressions have iConstExprReg==0. Do not generate code for | |
| 115372 | - ** those expressions, of course. | |
| 115373 | - */ | |
| 115374 | - if( pParse->pConstExpr ){ | |
| 115375 | - ExprList *pEL = pParse->pConstExpr; | |
| 115376 | - pParse->okConstFactor = 0; | |
| 115377 | - for(i=0; i<pEL->nExpr; i++){ | |
| 115378 | - int iReg = pEL->a[i].u.iConstExprReg; | |
| 115379 | - if( iReg>0 ){ | |
| 115380 | - sqlite3ExprCode(pParse, pEL->a[i].pExpr, iReg); | |
| 115381 | - } | |
| 115382 | - } | |
| 115383 | - } | |
| 115384 | - | |
| 115385 | - if( pParse->bReturning ){ | |
| 115386 | - Returning *pRet = pParse->u1.pReturning; | |
| 115387 | - if( pRet->nRetCol ){ | |
| 115388 | - sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pRet->iRetCur, pRet->nRetCol); | |
| 115389 | - } | |
| 115390 | - } | |
| 115391 | - | |
| 115392 | - /* Finally, jump back to the beginning of the executable code. */ | |
| 115393 | - sqlite3VdbeGoto(v, 1); | |
| 115394 | - } | |
| 115603 | + /* Once all the cookies have been verified and transactions opened, | |
| 115604 | + ** obtain the required table-locks. This is a no-op unless the | |
| 115605 | + ** shared-cache feature is enabled. | |
| 115606 | + */ | |
| 115607 | + codeTableLocks(pParse); | |
| 115608 | + | |
| 115609 | + /* Initialize any AUTOINCREMENT data structures required. | |
| 115610 | + */ | |
| 115611 | + sqlite3AutoincrementBegin(pParse); | |
| 115612 | + | |
| 115613 | + /* Code constant expressions that where factored out of inner loops. | |
| 115614 | + ** | |
| 115615 | + ** The pConstExpr list might also contain expressions that we simply | |
| 115616 | + ** want to keep around until the Parse object is deleted. Such | |
| 115617 | + ** expressions have iConstExprReg==0. Do not generate code for | |
| 115618 | + ** those expressions, of course. | |
| 115619 | + */ | |
| 115620 | + if( pParse->pConstExpr ){ | |
| 115621 | + ExprList *pEL = pParse->pConstExpr; | |
| 115622 | + pParse->okConstFactor = 0; | |
| 115623 | + for(i=0; i<pEL->nExpr; i++){ | |
| 115624 | + int iReg = pEL->a[i].u.iConstExprReg; | |
| 115625 | + sqlite3ExprCode(pParse, pEL->a[i].pExpr, iReg); | |
| 115626 | + } | |
| 115627 | + } | |
| 115628 | + | |
| 115629 | + if( pParse->bReturning ){ | |
| 115630 | + Returning *pRet = pParse->u1.pReturning; | |
| 115631 | + if( pRet->nRetCol ){ | |
| 115632 | + sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pRet->iRetCur, pRet->nRetCol); | |
| 115633 | + } | |
| 115634 | + } | |
| 115635 | + | |
| 115636 | + /* Finally, jump back to the beginning of the executable code. */ | |
| 115637 | + sqlite3VdbeGoto(v, 1); | |
| 115395 | 115638 | } |
| 115396 | 115639 | |
| 115397 | 115640 | /* Get the VDBE program ready for execution |
| 115398 | 115641 | */ |
| 115399 | 115642 | assert( v!=0 || pParse->nErr ); |
| @@ -115445,12 +115688,10 @@ | ||
| 115445 | 115688 | pParse->nested++; |
| 115446 | 115689 | memcpy(saveBuf, PARSE_TAIL(pParse), PARSE_TAIL_SZ); |
| 115447 | 115690 | memset(PARSE_TAIL(pParse), 0, PARSE_TAIL_SZ); |
| 115448 | 115691 | db->mDbFlags |= DBFLAG_PreferBuiltin; |
| 115449 | 115692 | sqlite3RunParser(pParse, zSql); |
| 115450 | - sqlite3DbFree(db, pParse->zErrMsg); | |
| 115451 | - pParse->zErrMsg = 0; | |
| 115452 | 115693 | db->mDbFlags = savedDbFlags; |
| 115453 | 115694 | sqlite3DbFree(db, zSql); |
| 115454 | 115695 | memcpy(PARSE_TAIL(pParse), saveBuf, PARSE_TAIL_SZ); |
| 115455 | 115696 | pParse->nested--; |
| 115456 | 115697 | } |
| @@ -115898,20 +116139,21 @@ | ||
| 115898 | 116139 | */ |
| 115899 | 116140 | SQLITE_PRIVATE void sqlite3DeleteColumnNames(sqlite3 *db, Table *pTable){ |
| 115900 | 116141 | int i; |
| 115901 | 116142 | Column *pCol; |
| 115902 | 116143 | assert( pTable!=0 ); |
| 116144 | + assert( db!=0 ); | |
| 115903 | 116145 | if( (pCol = pTable->aCol)!=0 ){ |
| 115904 | 116146 | for(i=0; i<pTable->nCol; i++, pCol++){ |
| 115905 | 116147 | assert( pCol->zCnName==0 || pCol->hName==sqlite3StrIHash(pCol->zCnName) ); |
| 115906 | 116148 | sqlite3DbFree(db, pCol->zCnName); |
| 115907 | 116149 | } |
| 115908 | - sqlite3DbFree(db, pTable->aCol); | |
| 116150 | + sqlite3DbNNFreeNN(db, pTable->aCol); | |
| 115909 | 116151 | if( IsOrdinaryTable(pTable) ){ |
| 115910 | 116152 | sqlite3ExprListDelete(db, pTable->u.tab.pDfltList); |
| 115911 | 116153 | } |
| 115912 | - if( db==0 || db->pnBytesFreed==0 ){ | |
| 116154 | + if( db->pnBytesFreed==0 ){ | |
| 115913 | 116155 | pTable->aCol = 0; |
| 115914 | 116156 | pTable->nCol = 0; |
| 115915 | 116157 | if( IsOrdinaryTable(pTable) ){ |
| 115916 | 116158 | pTable->u.tab.pDfltList = 0; |
| 115917 | 116159 | } |
| @@ -115944,21 +116186,22 @@ | ||
| 115944 | 116186 | ** |
| 115945 | 116187 | ** If malloc has already failed, it may be that it failed while allocating |
| 115946 | 116188 | ** a Table object that was going to be marked ephemeral. So do not check |
| 115947 | 116189 | ** that no lookaside memory is used in this case either. */ |
| 115948 | 116190 | int nLookaside = 0; |
| 115949 | - if( db && !db->mallocFailed && (pTable->tabFlags & TF_Ephemeral)==0 ){ | |
| 116191 | + assert( db!=0 ); | |
| 116192 | + if( !db->mallocFailed && (pTable->tabFlags & TF_Ephemeral)==0 ){ | |
| 115950 | 116193 | nLookaside = sqlite3LookasideUsed(db, 0); |
| 115951 | 116194 | } |
| 115952 | 116195 | #endif |
| 115953 | 116196 | |
| 115954 | 116197 | /* Delete all indices associated with this table. */ |
| 115955 | 116198 | for(pIndex = pTable->pIndex; pIndex; pIndex=pNext){ |
| 115956 | 116199 | pNext = pIndex->pNext; |
| 115957 | 116200 | assert( pIndex->pSchema==pTable->pSchema |
| 115958 | 116201 | || (IsVirtual(pTable) && pIndex->idxType!=SQLITE_IDXTYPE_APPDEF) ); |
| 115959 | - if( (db==0 || db->pnBytesFreed==0) && !IsVirtual(pTable) ){ | |
| 116202 | + if( db->pnBytesFreed==0 && !IsVirtual(pTable) ){ | |
| 115960 | 116203 | char *zName = pIndex->zName; |
| 115961 | 116204 | TESTONLY ( Index *pOld = ) sqlite3HashInsert( |
| 115962 | 116205 | &pIndex->pSchema->idxHash, zName, 0 |
| 115963 | 116206 | ); |
| 115964 | 116207 | assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) ); |
| @@ -115991,12 +116234,13 @@ | ||
| 115991 | 116234 | /* Verify that no lookaside memory was used by schema tables */ |
| 115992 | 116235 | assert( nLookaside==0 || nLookaside==sqlite3LookasideUsed(db,0) ); |
| 115993 | 116236 | } |
| 115994 | 116237 | SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3 *db, Table *pTable){ |
| 115995 | 116238 | /* Do not delete the table until the reference count reaches zero. */ |
| 116239 | + assert( db!=0 ); | |
| 115996 | 116240 | if( !pTable ) return; |
| 115997 | - if( ((!db || db->pnBytesFreed==0) && (--pTable->nTabRef)>0) ) return; | |
| 116241 | + if( db->pnBytesFreed==0 && (--pTable->nTabRef)>0 ) return; | |
| 115998 | 116242 | deleteTable(db, pTable); |
| 115999 | 116243 | } |
| 116000 | 116244 | |
| 116001 | 116245 | |
| 116002 | 116246 | /* |
| @@ -118165,11 +118409,11 @@ | ||
| 118165 | 118409 | /* |
| 118166 | 118410 | ** The Table structure pTable is really a VIEW. Fill in the names of |
| 118167 | 118411 | ** the columns of the view in the pTable structure. Return the number |
| 118168 | 118412 | ** of errors. If an error is seen leave an error message in pParse->zErrMsg. |
| 118169 | 118413 | */ |
| 118170 | -SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){ | |
| 118414 | +static SQLITE_NOINLINE int viewGetColumnNames(Parse *pParse, Table *pTable){ | |
| 118171 | 118415 | Table *pSelTab; /* A fake table from which we get the result set */ |
| 118172 | 118416 | Select *pSel; /* Copy of the SELECT that implements the view */ |
| 118173 | 118417 | int nErr = 0; /* Number of errors encountered */ |
| 118174 | 118418 | sqlite3 *db = pParse->db; /* Database connection for malloc errors */ |
| 118175 | 118419 | #ifndef SQLITE_OMIT_VIRTUALTABLE |
| @@ -118190,13 +118434,14 @@ | ||
| 118190 | 118434 | } |
| 118191 | 118435 | #endif |
| 118192 | 118436 | |
| 118193 | 118437 | #ifndef SQLITE_OMIT_VIEW |
| 118194 | 118438 | /* A positive nCol means the columns names for this view are |
| 118195 | - ** already known. | |
| 118439 | + ** already known. This routine is not called unless either the | |
| 118440 | + ** table is virtual or nCol is zero. | |
| 118196 | 118441 | */ |
| 118197 | - if( pTable->nCol>0 ) return 0; | |
| 118442 | + assert( pTable->nCol<=0 ); | |
| 118198 | 118443 | |
| 118199 | 118444 | /* A negative nCol is a special marker meaning that we are currently |
| 118200 | 118445 | ** trying to compute the column names. If we enter this routine with |
| 118201 | 118446 | ** a negative nCol, it means two or more views form a loop, like this: |
| 118202 | 118447 | ** |
| @@ -118287,10 +118532,15 @@ | ||
| 118287 | 118532 | if( db->mallocFailed ){ |
| 118288 | 118533 | sqlite3DeleteColumnNames(db, pTable); |
| 118289 | 118534 | } |
| 118290 | 118535 | #endif /* SQLITE_OMIT_VIEW */ |
| 118291 | 118536 | return nErr; |
| 118537 | +} | |
| 118538 | +SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){ | |
| 118539 | + assert( pTable!=0 ); | |
| 118540 | + if( !IsVirtual(pTable) && pTable->nCol>0 ) return 0; | |
| 118541 | + return viewGetColumnNames(pParse, pTable); | |
| 118292 | 118542 | } |
| 118293 | 118543 | #endif /* !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) */ |
| 118294 | 118544 | |
| 118295 | 118545 | #ifndef SQLITE_OMIT_VIEW |
| 118296 | 118546 | /* |
| @@ -119153,11 +119403,11 @@ | ||
| 119153 | 119403 | if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName,"index",pTab->zName) ){ |
| 119154 | 119404 | goto exit_create_index; |
| 119155 | 119405 | } |
| 119156 | 119406 | if( !IN_RENAME_OBJECT ){ |
| 119157 | 119407 | if( !db->init.busy ){ |
| 119158 | - if( sqlite3FindTable(db, zName, 0)!=0 ){ | |
| 119408 | + if( sqlite3FindTable(db, zName, pDb->zDbSName)!=0 ){ | |
| 119159 | 119409 | sqlite3ErrorMsg(pParse, "there is already a table named %s", zName); |
| 119160 | 119410 | goto exit_create_index; |
| 119161 | 119411 | } |
| 119162 | 119412 | } |
| 119163 | 119413 | if( sqlite3FindIndex(db, zName, pDb->zDbSName)!=0 ){ |
| @@ -119806,16 +120056,17 @@ | ||
| 119806 | 120056 | /* |
| 119807 | 120057 | ** Delete an IdList. |
| 119808 | 120058 | */ |
| 119809 | 120059 | SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3 *db, IdList *pList){ |
| 119810 | 120060 | int i; |
| 120061 | + assert( db!=0 ); | |
| 119811 | 120062 | if( pList==0 ) return; |
| 119812 | 120063 | assert( pList->eU4!=EU4_EXPR ); /* EU4_EXPR mode is not currently used */ |
| 119813 | 120064 | for(i=0; i<pList->nId; i++){ |
| 119814 | 120065 | sqlite3DbFree(db, pList->a[i].zName); |
| 119815 | 120066 | } |
| 119816 | - sqlite3DbFreeNN(db, pList); | |
| 120067 | + sqlite3DbNNFreeNN(db, pList); | |
| 119817 | 120068 | } |
| 119818 | 120069 | |
| 119819 | 120070 | /* |
| 119820 | 120071 | ** Return the index in pList of the identifier named zId. Return -1 |
| 119821 | 120072 | ** if not found. |
| @@ -120014,15 +120265,16 @@ | ||
| 120014 | 120265 | ** Delete an entire SrcList including all its substructure. |
| 120015 | 120266 | */ |
| 120016 | 120267 | SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3 *db, SrcList *pList){ |
| 120017 | 120268 | int i; |
| 120018 | 120269 | SrcItem *pItem; |
| 120270 | + assert( db!=0 ); | |
| 120019 | 120271 | if( pList==0 ) return; |
| 120020 | 120272 | for(pItem=pList->a, i=0; i<pList->nSrc; i++, pItem++){ |
| 120021 | - if( pItem->zDatabase ) sqlite3DbFreeNN(db, pItem->zDatabase); | |
| 120022 | - sqlite3DbFree(db, pItem->zName); | |
| 120023 | - if( pItem->zAlias ) sqlite3DbFreeNN(db, pItem->zAlias); | |
| 120273 | + if( pItem->zDatabase ) sqlite3DbNNFreeNN(db, pItem->zDatabase); | |
| 120274 | + if( pItem->zName ) sqlite3DbNNFreeNN(db, pItem->zName); | |
| 120275 | + if( pItem->zAlias ) sqlite3DbNNFreeNN(db, pItem->zAlias); | |
| 120024 | 120276 | if( pItem->fg.isIndexedBy ) sqlite3DbFree(db, pItem->u1.zIndexedBy); |
| 120025 | 120277 | if( pItem->fg.isTabFunc ) sqlite3ExprListDelete(db, pItem->u1.pFuncArg); |
| 120026 | 120278 | sqlite3DeleteTable(db, pItem->pTab); |
| 120027 | 120279 | if( pItem->pSelect ) sqlite3SelectDelete(db, pItem->pSelect); |
| 120028 | 120280 | if( pItem->fg.isUsing ){ |
| @@ -120029,11 +120281,11 @@ | ||
| 120029 | 120281 | sqlite3IdListDelete(db, pItem->u3.pUsing); |
| 120030 | 120282 | }else if( pItem->u3.pOn ){ |
| 120031 | 120283 | sqlite3ExprDelete(db, pItem->u3.pOn); |
| 120032 | 120284 | } |
| 120033 | 120285 | } |
| 120034 | - sqlite3DbFreeNN(db, pList); | |
| 120286 | + sqlite3DbNNFreeNN(db, pList); | |
| 120035 | 120287 | } |
| 120036 | 120288 | |
| 120037 | 120289 | /* |
| 120038 | 120290 | ** This routine is called by the parser to add a new term to the |
| 120039 | 120291 | ** end of a growing FROM clause. The "p" parameter is the part of |
| @@ -121281,23 +121533,25 @@ | ||
| 121281 | 121533 | SQLITE_PRIVATE void sqlite3SchemaClear(void *p){ |
| 121282 | 121534 | Hash temp1; |
| 121283 | 121535 | Hash temp2; |
| 121284 | 121536 | HashElem *pElem; |
| 121285 | 121537 | Schema *pSchema = (Schema *)p; |
| 121538 | + sqlite3 xdb; | |
| 121286 | 121539 | |
| 121540 | + memset(&xdb, 0, sizeof(xdb)); | |
| 121287 | 121541 | temp1 = pSchema->tblHash; |
| 121288 | 121542 | temp2 = pSchema->trigHash; |
| 121289 | 121543 | sqlite3HashInit(&pSchema->trigHash); |
| 121290 | 121544 | sqlite3HashClear(&pSchema->idxHash); |
| 121291 | 121545 | for(pElem=sqliteHashFirst(&temp2); pElem; pElem=sqliteHashNext(pElem)){ |
| 121292 | - sqlite3DeleteTrigger(0, (Trigger*)sqliteHashData(pElem)); | |
| 121546 | + sqlite3DeleteTrigger(&xdb, (Trigger*)sqliteHashData(pElem)); | |
| 121293 | 121547 | } |
| 121294 | 121548 | sqlite3HashClear(&temp2); |
| 121295 | 121549 | sqlite3HashInit(&pSchema->tblHash); |
| 121296 | 121550 | for(pElem=sqliteHashFirst(&temp1); pElem; pElem=sqliteHashNext(pElem)){ |
| 121297 | 121551 | Table *pTab = sqliteHashData(pElem); |
| 121298 | - sqlite3DeleteTable(0, pTab); | |
| 121552 | + sqlite3DeleteTable(&xdb, pTab); | |
| 121299 | 121553 | } |
| 121300 | 121554 | sqlite3HashClear(&temp1); |
| 121301 | 121555 | sqlite3HashClear(&pSchema->fkeyHash); |
| 121302 | 121556 | pSchema->pSeqTab = 0; |
| 121303 | 121557 | if( pSchema->schemaFlags & DB_SchemaLoaded ){ |
| @@ -121392,22 +121646,46 @@ | ||
| 121392 | 121646 | ** A table is read-only if any of the following are true: |
| 121393 | 121647 | ** |
| 121394 | 121648 | ** 1) It is a virtual table and no implementation of the xUpdate method |
| 121395 | 121649 | ** has been provided |
| 121396 | 121650 | ** |
| 121397 | -** 2) It is a system table (i.e. sqlite_schema), this call is not | |
| 121651 | +** 2) A trigger is currently being coded and the table is a virtual table | |
| 121652 | +** that is SQLITE_VTAB_DIRECTONLY or if PRAGMA trusted_schema=OFF and | |
| 121653 | +** the table is not SQLITE_VTAB_INNOCUOUS. | |
| 121654 | +** | |
| 121655 | +** 3) It is a system table (i.e. sqlite_schema), this call is not | |
| 121398 | 121656 | ** part of a nested parse and writable_schema pragma has not |
| 121399 | 121657 | ** been specified |
| 121400 | 121658 | ** |
| 121401 | -** 3) The table is a shadow table, the database connection is in | |
| 121659 | +** 4) The table is a shadow table, the database connection is in | |
| 121402 | 121660 | ** defensive mode, and the current sqlite3_prepare() |
| 121403 | 121661 | ** is for a top-level SQL statement. |
| 121404 | 121662 | */ |
| 121663 | +static int vtabIsReadOnly(Parse *pParse, Table *pTab){ | |
| 121664 | + if( sqlite3GetVTable(pParse->db, pTab)->pMod->pModule->xUpdate==0 ){ | |
| 121665 | + return 1; | |
| 121666 | + } | |
| 121667 | + | |
| 121668 | + /* Within triggers: | |
| 121669 | + ** * Do not allow DELETE, INSERT, or UPDATE of SQLITE_VTAB_DIRECTONLY | |
| 121670 | + ** virtual tables | |
| 121671 | + ** * Only allow DELETE, INSERT, or UPDATE of non-SQLITE_VTAB_INNOCUOUS | |
| 121672 | + ** virtual tables if PRAGMA trusted_schema=ON. | |
| 121673 | + */ | |
| 121674 | + if( pParse->pToplevel!=0 | |
| 121675 | + && pTab->u.vtab.p->eVtabRisk > | |
| 121676 | + ((pParse->db->flags & SQLITE_TrustedSchema)!=0) | |
| 121677 | + ){ | |
| 121678 | + sqlite3ErrorMsg(pParse, "unsafe use of virtual table \"%s\"", | |
| 121679 | + pTab->zName); | |
| 121680 | + } | |
| 121681 | + return 0; | |
| 121682 | +} | |
| 121405 | 121683 | static int tabIsReadOnly(Parse *pParse, Table *pTab){ |
| 121406 | 121684 | sqlite3 *db; |
| 121407 | 121685 | if( IsVirtual(pTab) ){ |
| 121408 | - return sqlite3GetVTable(pParse->db, pTab)->pMod->pModule->xUpdate==0; | |
| 121686 | + return vtabIsReadOnly(pParse, pTab); | |
| 121409 | 121687 | } |
| 121410 | 121688 | if( (pTab->tabFlags & (TF_Readonly|TF_Shadow))==0 ) return 0; |
| 121411 | 121689 | db = pParse->db; |
| 121412 | 121690 | if( (pTab->tabFlags & TF_Readonly)!=0 ){ |
| 121413 | 121691 | return sqlite3WritableSchema(db)==0 && pParse->nested==0; |
| @@ -121415,13 +121693,15 @@ | ||
| 121415 | 121693 | assert( pTab->tabFlags & TF_Shadow ); |
| 121416 | 121694 | return sqlite3ReadOnlyShadowTables(db); |
| 121417 | 121695 | } |
| 121418 | 121696 | |
| 121419 | 121697 | /* |
| 121420 | -** Check to make sure the given table is writable. If it is not | |
| 121421 | -** writable, generate an error message and return 1. If it is | |
| 121422 | -** writable return 0; | |
| 121698 | +** Check to make sure the given table is writable. | |
| 121699 | +** | |
| 121700 | +** If pTab is not writable -> generate an error message and return 1. | |
| 121701 | +** If pTab is writable but other errors have occurred -> return 1. | |
| 121702 | +** If pTab is writable and no prior errors -> return 0; | |
| 121423 | 121703 | */ |
| 121424 | 121704 | SQLITE_PRIVATE int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int viewOk){ |
| 121425 | 121705 | if( tabIsReadOnly(pParse, pTab) ){ |
| 121426 | 121706 | sqlite3ErrorMsg(pParse, "table %s may not be modified", pTab->zName); |
| 121427 | 121707 | return 1; |
| @@ -121778,13 +122058,14 @@ | ||
| 121778 | 122058 | sqlite3VdbeAddOp4(v, OP_Clear, pTab->tnum, iDb, memCnt ? memCnt : -1, |
| 121779 | 122059 | pTab->zName, P4_STATIC); |
| 121780 | 122060 | } |
| 121781 | 122061 | for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ |
| 121782 | 122062 | assert( pIdx->pSchema==pTab->pSchema ); |
| 121783 | - sqlite3VdbeAddOp2(v, OP_Clear, pIdx->tnum, iDb); | |
| 121784 | 122063 | if( IsPrimaryKeyIndex(pIdx) && !HasRowid(pTab) ){ |
| 121785 | - sqlite3VdbeChangeP3(v, -1, memCnt ? memCnt : -1); | |
| 122064 | + sqlite3VdbeAddOp3(v, OP_Clear, pIdx->tnum, iDb, memCnt ? memCnt : -1); | |
| 122065 | + }else{ | |
| 122066 | + sqlite3VdbeAddOp2(v, OP_Clear, pIdx->tnum, iDb); | |
| 121786 | 122067 | } |
| 121787 | 122068 | } |
| 121788 | 122069 | }else |
| 121789 | 122070 | #endif /* SQLITE_OMIT_TRUNCATE_OPTIMIZATION */ |
| 121790 | 122071 | { |
| @@ -121980,11 +122261,11 @@ | ||
| 121980 | 122261 | sqlite3ExprDelete(db, pWhere); |
| 121981 | 122262 | #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) |
| 121982 | 122263 | sqlite3ExprListDelete(db, pOrderBy); |
| 121983 | 122264 | sqlite3ExprDelete(db, pLimit); |
| 121984 | 122265 | #endif |
| 121985 | - sqlite3DbFree(db, aToOpen); | |
| 122266 | + if( aToOpen ) sqlite3DbNNFreeNN(db, aToOpen); | |
| 121986 | 122267 | return; |
| 121987 | 122268 | } |
| 121988 | 122269 | /* Make sure "isView" and other macros defined above are undefined. Otherwise |
| 121989 | 122270 | ** they may interfere with compilation of other functions in this file |
| 121990 | 122271 | ** (or in another file, if this file becomes part of the amalgamation). */ |
| @@ -126148,15 +126429,16 @@ | ||
| 126148 | 126429 | SQLITE_PRIVATE void sqlite3FkDelete(sqlite3 *db, Table *pTab){ |
| 126149 | 126430 | FKey *pFKey; /* Iterator variable */ |
| 126150 | 126431 | FKey *pNext; /* Copy of pFKey->pNextFrom */ |
| 126151 | 126432 | |
| 126152 | 126433 | assert( IsOrdinaryTable(pTab) ); |
| 126434 | + assert( db!=0 ); | |
| 126153 | 126435 | for(pFKey=pTab->u.tab.pFKey; pFKey; pFKey=pNext){ |
| 126154 | 126436 | assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pTab->pSchema) ); |
| 126155 | 126437 | |
| 126156 | 126438 | /* Remove the FK from the fkeyHash hash table. */ |
| 126157 | - if( !db || db->pnBytesFreed==0 ){ | |
| 126439 | + if( db->pnBytesFreed==0 ){ | |
| 126158 | 126440 | if( pFKey->pPrevTo ){ |
| 126159 | 126441 | pFKey->pPrevTo->pNextTo = pFKey->pNextTo; |
| 126160 | 126442 | }else{ |
| 126161 | 126443 | void *p = (void *)pFKey->pNextTo; |
| 126162 | 126444 | const char *z = (p ? pFKey->pNextTo->zTo : pFKey->zTo); |
| @@ -126345,11 +126627,11 @@ | ||
| 126345 | 126627 | /* Move the previous opcode (which should be OP_MakeRecord) forward |
| 126346 | 126628 | ** by one slot and insert a new OP_TypeCheck where the current |
| 126347 | 126629 | ** OP_MakeRecord is found */ |
| 126348 | 126630 | VdbeOp *pPrev; |
| 126349 | 126631 | sqlite3VdbeAppendP4(v, pTab, P4_TABLE); |
| 126350 | - pPrev = sqlite3VdbeGetOp(v, -1); | |
| 126632 | + pPrev = sqlite3VdbeGetLastOp(v); | |
| 126351 | 126633 | assert( pPrev!=0 ); |
| 126352 | 126634 | assert( pPrev->opcode==OP_MakeRecord || sqlite3VdbeDb(v)->mallocFailed ); |
| 126353 | 126635 | pPrev->opcode = OP_TypeCheck; |
| 126354 | 126636 | sqlite3VdbeAddOp3(v, OP_MakeRecord, pPrev->p1, pPrev->p2, pPrev->p3); |
| 126355 | 126637 | }else{ |
| @@ -126383,11 +126665,11 @@ | ||
| 126383 | 126665 | i = sqlite3Strlen30NN(zColAff); |
| 126384 | 126666 | if( i ){ |
| 126385 | 126667 | if( iReg ){ |
| 126386 | 126668 | sqlite3VdbeAddOp4(v, OP_Affinity, iReg, i, 0, zColAff, i); |
| 126387 | 126669 | }else{ |
| 126388 | - assert( sqlite3VdbeGetOp(v, -1)->opcode==OP_MakeRecord | |
| 126670 | + assert( sqlite3VdbeGetLastOp(v)->opcode==OP_MakeRecord | |
| 126389 | 126671 | || sqlite3VdbeDb(v)->mallocFailed ); |
| 126390 | 126672 | sqlite3VdbeChangeP4(v, -1, zColAff, i); |
| 126391 | 126673 | } |
| 126392 | 126674 | } |
| 126393 | 126675 | } |
| @@ -126469,11 +126751,11 @@ | ||
| 126469 | 126751 | /* Before computing generated columns, first go through and make sure |
| 126470 | 126752 | ** that appropriate affinity has been applied to the regular columns |
| 126471 | 126753 | */ |
| 126472 | 126754 | sqlite3TableAffinity(pParse->pVdbe, pTab, iRegStore); |
| 126473 | 126755 | if( (pTab->tabFlags & TF_HasStored)!=0 ){ |
| 126474 | - pOp = sqlite3VdbeGetOp(pParse->pVdbe,-1); | |
| 126756 | + pOp = sqlite3VdbeGetLastOp(pParse->pVdbe); | |
| 126475 | 126757 | if( pOp->opcode==OP_Affinity ){ |
| 126476 | 126758 | /* Change the OP_Affinity argument to '@' (NONE) for all stored |
| 126477 | 126759 | ** columns. '@' is the no-op affinity and those columns have not |
| 126478 | 126760 | ** yet been computed. */ |
| 126479 | 126761 | int ii, jj; |
| @@ -127375,11 +127657,16 @@ | ||
| 127375 | 127657 | }else if( pSelect ){ |
| 127376 | 127658 | if( regFromSelect!=regData ){ |
| 127377 | 127659 | sqlite3VdbeAddOp2(v, OP_SCopy, regFromSelect+k, iRegStore); |
| 127378 | 127660 | } |
| 127379 | 127661 | }else{ |
| 127380 | - sqlite3ExprCode(pParse, pList->a[k].pExpr, iRegStore); | |
| 127662 | + Expr *pX = pList->a[k].pExpr; | |
| 127663 | + int y = sqlite3ExprCodeTarget(pParse, pX, iRegStore); | |
| 127664 | + if( y!=iRegStore ){ | |
| 127665 | + sqlite3VdbeAddOp2(v, | |
| 127666 | + ExprHasProperty(pX, EP_Subquery) ? OP_Copy : OP_SCopy, y, iRegStore); | |
| 127667 | + } | |
| 127381 | 127668 | } |
| 127382 | 127669 | } |
| 127383 | 127670 | |
| 127384 | 127671 | |
| 127385 | 127672 | /* Run the BEFORE and INSTEAD OF triggers, if there are any |
| @@ -127512,11 +127799,13 @@ | ||
| 127512 | 127799 | int isReplace = 0;/* Set to true if constraints may cause a replace */ |
| 127513 | 127800 | int bUseSeek; /* True to use OPFLAG_SEEKRESULT */ |
| 127514 | 127801 | sqlite3GenerateConstraintChecks(pParse, pTab, aRegIdx, iDataCur, iIdxCur, |
| 127515 | 127802 | regIns, 0, ipkColumn>=0, onError, endOfLoop, &isReplace, 0, pUpsert |
| 127516 | 127803 | ); |
| 127517 | - sqlite3FkCheck(pParse, pTab, 0, regIns, 0, 0); | |
| 127804 | + if( db->flags & SQLITE_ForeignKeys ){ | |
| 127805 | + sqlite3FkCheck(pParse, pTab, 0, regIns, 0, 0); | |
| 127806 | + } | |
| 127518 | 127807 | |
| 127519 | 127808 | /* Set the OPFLAG_USESEEKRESULT flag if either (a) there are no REPLACE |
| 127520 | 127809 | ** constraints or (b) there are no triggers and this table is not a |
| 127521 | 127810 | ** parent table in a foreign key constraint. It is safe to set the |
| 127522 | 127811 | ** flag in the second case as if any REPLACE constraint is hit, an |
| @@ -127596,11 +127885,11 @@ | ||
| 127596 | 127885 | sqlite3SrcListDelete(db, pTabList); |
| 127597 | 127886 | sqlite3ExprListDelete(db, pList); |
| 127598 | 127887 | sqlite3UpsertDelete(db, pUpsert); |
| 127599 | 127888 | sqlite3SelectDelete(db, pSelect); |
| 127600 | 127889 | sqlite3IdListDelete(db, pColumn); |
| 127601 | - sqlite3DbFree(db, aRegIdx); | |
| 127890 | + if( aRegIdx ) sqlite3DbNNFreeNN(db, aRegIdx); | |
| 127602 | 127891 | } |
| 127603 | 127892 | |
| 127604 | 127893 | /* Make sure "isView" and other macros defined above are undefined. Otherwise |
| 127605 | 127894 | ** they may interfere with compilation of other functions in this file |
| 127606 | 127895 | ** (or in another file, if this file becomes part of the amalgamation). */ |
| @@ -132702,19 +132991,21 @@ | ||
| 132702 | 132991 | ** Setting to a null string reverts to the default temporary directory search. |
| 132703 | 132992 | ** If temporary directory is changed, then invalidateTempStorage. |
| 132704 | 132993 | ** |
| 132705 | 132994 | */ |
| 132706 | 132995 | case PragTyp_TEMP_STORE_DIRECTORY: { |
| 132996 | + sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); | |
| 132707 | 132997 | if( !zRight ){ |
| 132708 | 132998 | returnSingleText(v, sqlite3_temp_directory); |
| 132709 | 132999 | }else{ |
| 132710 | 133000 | #ifndef SQLITE_OMIT_WSD |
| 132711 | 133001 | if( zRight[0] ){ |
| 132712 | 133002 | int res; |
| 132713 | 133003 | rc = sqlite3OsAccess(db->pVfs, zRight, SQLITE_ACCESS_READWRITE, &res); |
| 132714 | 133004 | if( rc!=SQLITE_OK || res==0 ){ |
| 132715 | 133005 | sqlite3ErrorMsg(pParse, "not a writable directory"); |
| 133006 | + sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); | |
| 132716 | 133007 | goto pragma_out; |
| 132717 | 133008 | } |
| 132718 | 133009 | } |
| 132719 | 133010 | if( SQLITE_TEMP_STORE==0 |
| 132720 | 133011 | || (SQLITE_TEMP_STORE==1 && db->temp_store<=1) |
| @@ -132728,10 +133019,11 @@ | ||
| 132728 | 133019 | }else{ |
| 132729 | 133020 | sqlite3_temp_directory = 0; |
| 132730 | 133021 | } |
| 132731 | 133022 | #endif /* SQLITE_OMIT_WSD */ |
| 132732 | 133023 | } |
| 133024 | + sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); | |
| 132733 | 133025 | break; |
| 132734 | 133026 | } |
| 132735 | 133027 | |
| 132736 | 133028 | #if SQLITE_OS_WIN |
| 132737 | 133029 | /* |
| @@ -132746,19 +133038,21 @@ | ||
| 132746 | 133038 | ** process. Database file specified with an absolute path are not impacted |
| 132747 | 133039 | ** by this setting, regardless of its value. |
| 132748 | 133040 | ** |
| 132749 | 133041 | */ |
| 132750 | 133042 | case PragTyp_DATA_STORE_DIRECTORY: { |
| 133043 | + sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); | |
| 132751 | 133044 | if( !zRight ){ |
| 132752 | 133045 | returnSingleText(v, sqlite3_data_directory); |
| 132753 | 133046 | }else{ |
| 132754 | 133047 | #ifndef SQLITE_OMIT_WSD |
| 132755 | 133048 | if( zRight[0] ){ |
| 132756 | 133049 | int res; |
| 132757 | 133050 | rc = sqlite3OsAccess(db->pVfs, zRight, SQLITE_ACCESS_READWRITE, &res); |
| 132758 | 133051 | if( rc!=SQLITE_OK || res==0 ){ |
| 132759 | 133052 | sqlite3ErrorMsg(pParse, "not a writable directory"); |
| 133053 | + sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); | |
| 132760 | 133054 | goto pragma_out; |
| 132761 | 133055 | } |
| 132762 | 133056 | } |
| 132763 | 133057 | sqlite3_free(sqlite3_data_directory); |
| 132764 | 133058 | if( zRight[0] ){ |
| @@ -132766,10 +133060,11 @@ | ||
| 132766 | 133060 | }else{ |
| 132767 | 133061 | sqlite3_data_directory = 0; |
| 132768 | 133062 | } |
| 132769 | 133063 | #endif /* SQLITE_OMIT_WSD */ |
| 132770 | 133064 | } |
| 133065 | + sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); | |
| 132771 | 133066 | break; |
| 132772 | 133067 | } |
| 132773 | 133068 | #endif |
| 132774 | 133069 | |
| 132775 | 133070 | #if SQLITE_ENABLE_LOCKING_STYLE |
| @@ -133479,19 +133774,27 @@ | ||
| 133479 | 133774 | /* Make sure all the indices are constructed correctly. |
| 133480 | 133775 | */ |
| 133481 | 133776 | for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){ |
| 133482 | 133777 | Table *pTab = sqliteHashData(x); |
| 133483 | 133778 | Index *pIdx, *pPk; |
| 133484 | - Index *pPrior = 0; | |
| 133779 | + Index *pPrior = 0; /* Previous index */ | |
| 133485 | 133780 | int loopTop; |
| 133486 | 133781 | int iDataCur, iIdxCur; |
| 133487 | 133782 | int r1 = -1; |
| 133488 | 133783 | int bStrict; |
| 133784 | + int r2; /* Previous key for WITHOUT ROWID tables */ | |
| 133489 | 133785 | |
| 133490 | 133786 | if( !IsOrdinaryTable(pTab) ) continue; |
| 133491 | 133787 | if( pObjTab && pObjTab!=pTab ) continue; |
| 133492 | - pPk = HasRowid(pTab) ? 0 : sqlite3PrimaryKeyIndex(pTab); | |
| 133788 | + if( isQuick || HasRowid(pTab) ){ | |
| 133789 | + pPk = 0; | |
| 133790 | + r2 = 0; | |
| 133791 | + }else{ | |
| 133792 | + pPk = sqlite3PrimaryKeyIndex(pTab); | |
| 133793 | + r2 = sqlite3GetTempRange(pParse, pPk->nKeyCol); | |
| 133794 | + sqlite3VdbeAddOp3(v, OP_Null, 1, r2, r2+pPk->nKeyCol-1); | |
| 133795 | + } | |
| 133493 | 133796 | sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenRead, 0, |
| 133494 | 133797 | 1, 0, &iDataCur, &iIdxCur); |
| 133495 | 133798 | /* reg[7] counts the number of entries in the table. |
| 133496 | 133799 | ** reg[8+i] counts the number of entries in the i-th index |
| 133497 | 133800 | */ |
| @@ -133506,10 +133809,28 @@ | ||
| 133506 | 133809 | if( !isQuick ){ |
| 133507 | 133810 | /* Sanity check on record header decoding */ |
| 133508 | 133811 | sqlite3VdbeAddOp3(v, OP_Column, iDataCur, pTab->nNVCol-1,3); |
| 133509 | 133812 | sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG); |
| 133510 | 133813 | VdbeComment((v, "(right-most column)")); |
| 133814 | + if( pPk ){ | |
| 133815 | + /* Verify WITHOUT ROWID keys are in ascending order */ | |
| 133816 | + int a1; | |
| 133817 | + char *zErr; | |
| 133818 | + a1 = sqlite3VdbeAddOp4Int(v, OP_IdxGT, iDataCur, 0,r2,pPk->nKeyCol); | |
| 133819 | + VdbeCoverage(v); | |
| 133820 | + sqlite3VdbeAddOp1(v, OP_IsNull, r2); VdbeCoverage(v); | |
| 133821 | + zErr = sqlite3MPrintf(db, | |
| 133822 | + "row not in PRIMARY KEY order for %s", | |
| 133823 | + pTab->zName); | |
| 133824 | + sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC); | |
| 133825 | + integrityCheckResultRow(v); | |
| 133826 | + sqlite3VdbeJumpHere(v, a1); | |
| 133827 | + sqlite3VdbeJumpHere(v, a1+1); | |
| 133828 | + for(j=0; j<pPk->nKeyCol; j++){ | |
| 133829 | + sqlite3ExprCodeLoadIndexColumn(pParse, pPk, iDataCur, j, r2+j); | |
| 133830 | + } | |
| 133831 | + } | |
| 133511 | 133832 | } |
| 133512 | 133833 | /* Verify that all NOT NULL columns really are NOT NULL. At the |
| 133513 | 133834 | ** same time verify the type of the content of STRICT tables */ |
| 133514 | 133835 | bStrict = (pTab->tabFlags & TF_Strict)!=0; |
| 133515 | 133836 | for(j=0; j<pTab->nCol; j++){ |
| @@ -133518,11 +133839,11 @@ | ||
| 133518 | 133839 | int doError, jmp2; |
| 133519 | 133840 | if( j==pTab->iPKey ) continue; |
| 133520 | 133841 | if( pCol->notNull==0 && !bStrict ) continue; |
| 133521 | 133842 | doError = bStrict ? sqlite3VdbeMakeLabel(pParse) : 0; |
| 133522 | 133843 | sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, j, 3); |
| 133523 | - if( sqlite3VdbeGetOp(v,-1)->opcode==OP_Column ){ | |
| 133844 | + if( sqlite3VdbeGetLastOp(v)->opcode==OP_Column ){ | |
| 133524 | 133845 | sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG); |
| 133525 | 133846 | } |
| 133526 | 133847 | if( pCol->notNull ){ |
| 133527 | 133848 | jmp2 = sqlite3VdbeAddOp1(v, OP_NotNull, 3); VdbeCoverage(v); |
| 133528 | 133849 | zErr = sqlite3MPrintf(db, "NULL value in %s.%s", pTab->zName, |
| @@ -133533,13 +133854,11 @@ | ||
| 133533 | 133854 | }else{ |
| 133534 | 133855 | integrityCheckResultRow(v); |
| 133535 | 133856 | } |
| 133536 | 133857 | sqlite3VdbeJumpHere(v, jmp2); |
| 133537 | 133858 | } |
| 133538 | - if( (pTab->tabFlags & TF_Strict)!=0 | |
| 133539 | - && pCol->eCType!=COLTYPE_ANY | |
| 133540 | - ){ | |
| 133859 | + if( bStrict && pCol->eCType!=COLTYPE_ANY ){ | |
| 133541 | 133860 | jmp2 = sqlite3VdbeAddOp3(v, OP_IsNullOrType, 3, 0, |
| 133542 | 133861 | sqlite3StdTypeMap[pCol->eCType-1]); |
| 133543 | 133862 | VdbeCoverage(v); |
| 133544 | 133863 | zErr = sqlite3MPrintf(db, "non-%s value in %s.%s", |
| 133545 | 133864 | sqlite3StdType[pCol->eCType-1], |
| @@ -133634,10 +133953,13 @@ | ||
| 133634 | 133953 | sqlite3VdbeLoadString(v, 4, pIdx->zName); |
| 133635 | 133954 | sqlite3VdbeAddOp3(v, OP_Concat, 4, 2, 3); |
| 133636 | 133955 | integrityCheckResultRow(v); |
| 133637 | 133956 | sqlite3VdbeJumpHere(v, addr); |
| 133638 | 133957 | } |
| 133958 | + if( pPk ){ | |
| 133959 | + sqlite3ReleaseTempRange(pParse, r2, pPk->nKeyCol); | |
| 133960 | + } | |
| 133639 | 133961 | } |
| 133640 | 133962 | } |
| 133641 | 133963 | } |
| 133642 | 133964 | { |
| 133643 | 133965 | static const int iLn = VDBE_OFFSET_LINENO(2); |
| @@ -135032,19 +135354,19 @@ | ||
| 135032 | 135354 | sqlite3 *db = pParse->db; |
| 135033 | 135355 | assert( db!=0 ); |
| 135034 | 135356 | assert( db->pParse==pParse ); |
| 135035 | 135357 | assert( pParse->nested==0 ); |
| 135036 | 135358 | #ifndef SQLITE_OMIT_SHARED_CACHE |
| 135037 | - sqlite3DbFree(db, pParse->aTableLock); | |
| 135359 | + if( pParse->aTableLock ) sqlite3DbNNFreeNN(db, pParse->aTableLock); | |
| 135038 | 135360 | #endif |
| 135039 | 135361 | while( pParse->pCleanup ){ |
| 135040 | 135362 | ParseCleanup *pCleanup = pParse->pCleanup; |
| 135041 | 135363 | pParse->pCleanup = pCleanup->pNext; |
| 135042 | 135364 | pCleanup->xCleanup(db, pCleanup->pPtr); |
| 135043 | - sqlite3DbFreeNN(db, pCleanup); | |
| 135365 | + sqlite3DbNNFreeNN(db, pCleanup); | |
| 135044 | 135366 | } |
| 135045 | - sqlite3DbFree(db, pParse->aLabel); | |
| 135367 | + if( pParse->aLabel ) sqlite3DbNNFreeNN(db, pParse->aLabel); | |
| 135046 | 135368 | if( pParse->pConstExpr ){ |
| 135047 | 135369 | sqlite3ExprListDelete(db, pParse->pConstExpr); |
| 135048 | 135370 | } |
| 135049 | 135371 | assert( db->lookaside.bDisable >= pParse->disableLookaside ); |
| 135050 | 135372 | db->lookaside.bDisable -= pParse->disableLookaside; |
| @@ -135599,10 +135921,11 @@ | ||
| 135599 | 135921 | ** |
| 135600 | 135922 | ** If bFree==1, call sqlite3DbFree() on the p object. |
| 135601 | 135923 | ** If bFree==0, Leave the first Select object unfreed |
| 135602 | 135924 | */ |
| 135603 | 135925 | static void clearSelect(sqlite3 *db, Select *p, int bFree){ |
| 135926 | + assert( db!=0 ); | |
| 135604 | 135927 | while( p ){ |
| 135605 | 135928 | Select *pPrior = p->pPrior; |
| 135606 | 135929 | sqlite3ExprListDelete(db, p->pEList); |
| 135607 | 135930 | sqlite3SrcListDelete(db, p->pSrc); |
| 135608 | 135931 | sqlite3ExprDelete(db, p->pWhere); |
| @@ -135618,11 +135941,11 @@ | ||
| 135618 | 135941 | while( p->pWin ){ |
| 135619 | 135942 | assert( p->pWin->ppThis==&p->pWin ); |
| 135620 | 135943 | sqlite3WindowUnlinkFromSelect(p->pWin); |
| 135621 | 135944 | } |
| 135622 | 135945 | #endif |
| 135623 | - if( bFree ) sqlite3DbFreeNN(db, p); | |
| 135946 | + if( bFree ) sqlite3DbNNFreeNN(db, p); | |
| 135624 | 135947 | p = pPrior; |
| 135625 | 135948 | bFree = 1; |
| 135626 | 135949 | } |
| 135627 | 135950 | } |
| 135628 | 135951 | |
| @@ -135847,11 +136170,11 @@ | ||
| 135847 | 136170 | /* |
| 135848 | 136171 | ** Mark a subquery result column as having been used. |
| 135849 | 136172 | */ |
| 135850 | 136173 | SQLITE_PRIVATE void sqlite3SrcItemColumnUsed(SrcItem *pItem, int iCol){ |
| 135851 | 136174 | assert( pItem!=0 ); |
| 135852 | - assert( pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) ); | |
| 136175 | + assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) ); | |
| 135853 | 136176 | if( pItem->fg.isNestedFrom ){ |
| 135854 | 136177 | ExprList *pResults; |
| 135855 | 136178 | assert( pItem->pSelect!=0 ); |
| 135856 | 136179 | pResults = pItem->pSelect->pEList; |
| 135857 | 136180 | assert( pResults!=0 ); |
| @@ -135947,28 +136270,29 @@ | ||
| 135947 | 136270 | sqlite3SetJoinExpr(p->pLeft, iTable, joinFlag); |
| 135948 | 136271 | p = p->pRight; |
| 135949 | 136272 | } |
| 135950 | 136273 | } |
| 135951 | 136274 | |
| 135952 | -/* Undo the work of sqlite3SetJoinExpr(). In the expression p, convert every | |
| 135953 | -** term that is marked with EP_OuterON and w.iJoin==iTable into | |
| 135954 | -** an ordinary term that omits the EP_OuterON mark. | |
| 136275 | +/* Undo the work of sqlite3SetJoinExpr(). This is used when a LEFT JOIN | |
| 136276 | +** is simplified into an ordinary JOIN, and when an ON expression is | |
| 136277 | +** "pushed down" into the WHERE clause of a subquery. | |
| 135955 | 136278 | ** |
| 135956 | -** This happens when a LEFT JOIN is simplified into an ordinary JOIN. | |
| 136279 | +** Convert every term that is marked with EP_OuterON and w.iJoin==iTable into | |
| 136280 | +** an ordinary term that omits the EP_OuterON mark. Or if iTable<0, then | |
| 136281 | +** just clear every EP_OuterON and EP_InnerON mark from the expression tree. | |
| 135957 | 136282 | ** |
| 135958 | 136283 | ** If nullable is true, that means that Expr p might evaluate to NULL even |
| 135959 | 136284 | ** if it is a reference to a NOT NULL column. This can happen, for example, |
| 135960 | 136285 | ** if the table that p references is on the left side of a RIGHT JOIN. |
| 135961 | 136286 | ** If nullable is true, then take care to not remove the EP_CanBeNull bit. |
| 135962 | 136287 | ** See forum thread https://sqlite.org/forum/forumpost/b40696f50145d21c |
| 135963 | 136288 | */ |
| 135964 | 136289 | static void unsetJoinExpr(Expr *p, int iTable, int nullable){ |
| 135965 | 136290 | while( p ){ |
| 135966 | - if( ExprHasProperty(p, EP_OuterON) | |
| 135967 | - && (iTable<0 || p->w.iJoin==iTable) ){ | |
| 135968 | - ExprClearProperty(p, EP_OuterON); | |
| 135969 | - ExprSetProperty(p, EP_InnerON); | |
| 136291 | + if( iTable<0 || (ExprHasProperty(p, EP_OuterON) && p->w.iJoin==iTable) ){ | |
| 136292 | + ExprClearProperty(p, EP_OuterON|EP_InnerON); | |
| 136293 | + if( iTable>=0 ) ExprSetProperty(p, EP_InnerON); | |
| 135970 | 136294 | } |
| 135971 | 136295 | if( p->op==TK_COLUMN && p->iTable==iTable && !nullable ){ |
| 135972 | 136296 | ExprClearProperty(p, EP_CanBeNull); |
| 135973 | 136297 | } |
| 135974 | 136298 | if( p->op==TK_FUNCTION ){ |
| @@ -137023,13 +137347,14 @@ | ||
| 137023 | 137347 | /* |
| 137024 | 137348 | ** Deallocate a KeyInfo object |
| 137025 | 137349 | */ |
| 137026 | 137350 | SQLITE_PRIVATE void sqlite3KeyInfoUnref(KeyInfo *p){ |
| 137027 | 137351 | if( p ){ |
| 137352 | + assert( p->db!=0 ); | |
| 137028 | 137353 | assert( p->nRef>0 ); |
| 137029 | 137354 | p->nRef--; |
| 137030 | - if( p->nRef==0 ) sqlite3DbFreeNN(p->db, p); | |
| 137355 | + if( p->nRef==0 ) sqlite3DbNNFreeNN(p->db, p); | |
| 137031 | 137356 | } |
| 137032 | 137357 | } |
| 137033 | 137358 | |
| 137034 | 137359 | /* |
| 137035 | 137360 | ** Make a new pointer to a KeyInfo object |
| @@ -137210,18 +137535,21 @@ | ||
| 137210 | 137535 | sqlite3VdbeAddOp3(v, OP_OpenPseudo, iSortTab, regSortOut, |
| 137211 | 137536 | nKey+1+nColumn+nRefKey); |
| 137212 | 137537 | if( addrOnce ) sqlite3VdbeJumpHere(v, addrOnce); |
| 137213 | 137538 | addr = 1 + sqlite3VdbeAddOp2(v, OP_SorterSort, iTab, addrBreak); |
| 137214 | 137539 | VdbeCoverage(v); |
| 137215 | - codeOffset(v, p->iOffset, addrContinue); | |
| 137540 | + assert( p->iLimit==0 && p->iOffset==0 ); | |
| 137216 | 137541 | sqlite3VdbeAddOp3(v, OP_SorterData, iTab, regSortOut, iSortTab); |
| 137217 | 137542 | bSeq = 0; |
| 137218 | 137543 | }else{ |
| 137219 | 137544 | addr = 1 + sqlite3VdbeAddOp2(v, OP_Sort, iTab, addrBreak); VdbeCoverage(v); |
| 137220 | 137545 | codeOffset(v, p->iOffset, addrContinue); |
| 137221 | 137546 | iSortTab = iTab; |
| 137222 | 137547 | bSeq = 1; |
| 137548 | + if( p->iOffset>0 ){ | |
| 137549 | + sqlite3VdbeAddOp2(v, OP_AddImm, p->iLimit, -1); | |
| 137550 | + } | |
| 137223 | 137551 | } |
| 137224 | 137552 | for(i=0, iCol=nKey+bSeq-1; i<nColumn; i++){ |
| 137225 | 137553 | #ifdef SQLITE_ENABLE_SORTER_REFERENCES |
| 137226 | 137554 | if( aOutEx[i].fg.bSorterRef ) continue; |
| 137227 | 137555 | #endif |
| @@ -137342,13 +137670,10 @@ | ||
| 137342 | 137670 | |
| 137343 | 137671 | /* |
| 137344 | 137672 | ** Return a pointer to a string containing the 'declaration type' of the |
| 137345 | 137673 | ** expression pExpr. The string may be treated as static by the caller. |
| 137346 | 137674 | ** |
| 137347 | -** Also try to estimate the size of the returned value and return that | |
| 137348 | -** result in *pEstWidth. | |
| 137349 | -** | |
| 137350 | 137675 | ** The declaration type is the exact datatype definition extracted from the |
| 137351 | 137676 | ** original CREATE TABLE statement if the expression is a column. The |
| 137352 | 137677 | ** declaration type for a ROWID field is INTEGER. Exactly when an expression |
| 137353 | 137678 | ** is considered a column can be complex in the presence of subqueries. The |
| 137354 | 137679 | ** result-set expression in all of the following SELECT statements is |
| @@ -139210,14 +139535,15 @@ | ||
| 139210 | 139535 | |
| 139211 | 139536 | /* Jump to the this point in order to terminate the query. |
| 139212 | 139537 | */ |
| 139213 | 139538 | sqlite3VdbeResolveLabel(v, labelEnd); |
| 139214 | 139539 | |
| 139215 | - /* Reassembly the compound query so that it will be freed correctly | |
| 139540 | + /* Reassemble the compound query so that it will be freed correctly | |
| 139216 | 139541 | ** by the calling function */ |
| 139217 | 139542 | if( pSplit->pPrior ){ |
| 139218 | - sqlite3SelectDelete(db, pSplit->pPrior); | |
| 139543 | + sqlite3ParserAddCleanup(pParse, | |
| 139544 | + (void(*)(sqlite3*,void*))sqlite3SelectDelete, pSplit->pPrior); | |
| 139219 | 139545 | } |
| 139220 | 139546 | pSplit->pPrior = pPrior; |
| 139221 | 139547 | pPrior->pNext = pSplit; |
| 139222 | 139548 | sqlite3ExprListDelete(db, pPrior->pOrderBy); |
| 139223 | 139549 | pPrior->pOrderBy = 0; |
| @@ -139323,10 +139649,11 @@ | ||
| 139323 | 139649 | if( pSubst->isOuterJoin && pCopy->op!=TK_COLUMN ){ |
| 139324 | 139650 | memset(&ifNullRow, 0, sizeof(ifNullRow)); |
| 139325 | 139651 | ifNullRow.op = TK_IF_NULL_ROW; |
| 139326 | 139652 | ifNullRow.pLeft = pCopy; |
| 139327 | 139653 | ifNullRow.iTable = pSubst->iNewTable; |
| 139654 | + ifNullRow.iColumn = -99; | |
| 139328 | 139655 | ifNullRow.flags = EP_IfNullRow; |
| 139329 | 139656 | pCopy = &ifNullRow; |
| 139330 | 139657 | } |
| 139331 | 139658 | testcase( ExprHasProperty(pCopy, EP_Subquery) ); |
| 139332 | 139659 | pNew = sqlite3ExprDup(db, pCopy, 0); |
| @@ -139590,11 +139917,12 @@ | ||
| 139590 | 139917 | ** |
| 139591 | 139918 | ** (3) If the subquery is the right operand of a LEFT JOIN then |
| 139592 | 139919 | ** (3a) the subquery may not be a join and |
| 139593 | 139920 | ** (3b) the FROM clause of the subquery may not contain a virtual |
| 139594 | 139921 | ** table and |
| 139595 | -** (3c) the outer query may not be an aggregate. | |
| 139922 | +** (**) Was: "The outer query may not have a GROUP BY." This case | |
| 139923 | +** is now managed correctly | |
| 139596 | 139924 | ** (3d) the outer query may not be DISTINCT. |
| 139597 | 139925 | ** See also (26) for restrictions on RIGHT JOIN. |
| 139598 | 139926 | ** |
| 139599 | 139927 | ** (4) The subquery can not be DISTINCT. |
| 139600 | 139928 | ** |
| @@ -139644,10 +139972,13 @@ | ||
| 139644 | 139972 | ** (17d) the outer query may not be |
| 139645 | 139973 | ** (17d1) aggregate, or |
| 139646 | 139974 | ** (17d2) DISTINCT |
| 139647 | 139975 | ** (17e) the subquery may not contain window functions, and |
| 139648 | 139976 | ** (17f) the subquery must not be the RHS of a LEFT JOIN. |
| 139977 | +** (17g) either the subquery is the first element of the outer | |
| 139978 | +** query or there are no RIGHT or FULL JOINs in any arm | |
| 139979 | +** of the subquery. (This is a duplicate of condition (27b).) | |
| 139649 | 139980 | ** |
| 139650 | 139981 | ** The parent and sub-query may contain WHERE clauses. Subject to |
| 139651 | 139982 | ** rules (11), (13) and (14), they may also contain ORDER BY, |
| 139652 | 139983 | ** LIMIT and OFFSET clauses. The subquery cannot use any compound |
| 139653 | 139984 | ** operator other than UNION ALL because all the other compound |
| @@ -139695,11 +140026,15 @@ | ||
| 139695 | 140026 | ** |
| 139696 | 140027 | ** (26) The subquery may not be the right operand of a RIGHT JOIN. |
| 139697 | 140028 | ** See also (3) for restrictions on LEFT JOIN. |
| 139698 | 140029 | ** |
| 139699 | 140030 | ** (27) The subquery may not contain a FULL or RIGHT JOIN unless it |
| 139700 | -** is the first element of the parent query. | |
| 140031 | +** is the first element of the parent query. This must be the | |
| 140032 | +** the case if: | |
| 140033 | +** (27a) the subquery is not compound query, and | |
| 140034 | +** (27b) the subquery is a compound query and the RIGHT JOIN occurs | |
| 140035 | +** in any arm of the compound query. (See also (17g).) | |
| 139701 | 140036 | ** |
| 139702 | 140037 | ** (28) The subquery is not a MATERIALIZED CTE. |
| 139703 | 140038 | ** |
| 139704 | 140039 | ** (29) Either the subquery is not the right-hand operand of a join with an |
| 139705 | 140040 | ** ON or USING clause nor the right-hand operand of a NATURAL JOIN, or |
| @@ -139795,21 +140130,15 @@ | ||
| 139795 | 140130 | ** |
| 139796 | 140131 | ** (t1 LEFT OUTER JOIN t2) JOIN t3 |
| 139797 | 140132 | ** |
| 139798 | 140133 | ** which is not at all the same thing. |
| 139799 | 140134 | ** |
| 139800 | - ** If the subquery is the right operand of a LEFT JOIN, then the outer | |
| 139801 | - ** query cannot be an aggregate. (3c) This is an artifact of the way | |
| 139802 | - ** aggregates are processed - there is no mechanism to determine if | |
| 139803 | - ** the LEFT JOIN table should be all-NULL. | |
| 139804 | - ** | |
| 139805 | 140135 | ** See also tickets #306, #350, and #3300. |
| 139806 | 140136 | */ |
| 139807 | 140137 | if( (pSubitem->fg.jointype & (JT_OUTER|JT_LTORJ))!=0 ){ |
| 139808 | 140138 | if( pSubSrc->nSrc>1 /* (3a) */ |
| 139809 | - || isAgg /* (3b) */ | |
| 139810 | - || IsVirtual(pSubSrc->a[0].pTab) /* (3c) */ | |
| 140139 | + || IsVirtual(pSubSrc->a[0].pTab) /* (3b) */ | |
| 139811 | 140140 | || (p->selFlags & SF_Distinct)!=0 /* (3d) */ |
| 139812 | 140141 | || (pSubitem->fg.jointype & JT_RIGHT)!=0 /* (26) */ |
| 139813 | 140142 | ){ |
| 139814 | 140143 | return 0; |
| 139815 | 140144 | } |
| @@ -139825,11 +140154,11 @@ | ||
| 139825 | 140154 | } |
| 139826 | 140155 | #endif |
| 139827 | 140156 | |
| 139828 | 140157 | assert( pSubSrc->nSrc>0 ); /* True by restriction (7) */ |
| 139829 | 140158 | if( iFrom>0 && (pSubSrc->a[0].fg.jointype & JT_LTORJ)!=0 ){ |
| 139830 | - return 0; /* Restriction (27) */ | |
| 140159 | + return 0; /* Restriction (27a) */ | |
| 139831 | 140160 | } |
| 139832 | 140161 | if( pSubitem->fg.isCte && pSubitem->u2.pCteUse->eM10d==M10d_Yes ){ |
| 139833 | 140162 | return 0; /* (28) */ |
| 139834 | 140163 | } |
| 139835 | 140164 | |
| @@ -139845,11 +140174,11 @@ | ||
| 139845 | 140174 | ** |
| 139846 | 140175 | ** (29b) The subquery itself must not be the right operand of a |
| 139847 | 140176 | ** NATURAL join or a join that as an ON or USING clause. |
| 139848 | 140177 | ** |
| 139849 | 140178 | ** These conditions are sufficient to keep an EP_OuterON from being |
| 139850 | - ** flattened into an EP_InnerON. Restrictions (3a) and (27) prevent | |
| 140179 | + ** flattened into an EP_InnerON. Restrictions (3a) and (27a) prevent | |
| 139851 | 140180 | ** an EP_InnerON from being flattened into an EP_OuterON. |
| 139852 | 140181 | */ |
| 139853 | 140182 | if( pSubSrc->nSrc>=2 |
| 139854 | 140183 | && (pSubSrc->a[pSubSrc->nSrc-1].fg.jointype & JT_OUTER)!=0 |
| 139855 | 140184 | ){ |
| @@ -139886,10 +140215,16 @@ | ||
| 139886 | 140215 | #ifndef SQLITE_OMIT_WINDOWFUNC |
| 139887 | 140216 | || pSub1->pWin /* (17e) */ |
| 139888 | 140217 | #endif |
| 139889 | 140218 | ){ |
| 139890 | 140219 | return 0; |
| 140220 | + } | |
| 140221 | + if( iFrom>0 && (pSub1->pSrc->a[0].fg.jointype & JT_LTORJ)!=0 ){ | |
| 140222 | + /* Without this restriction, the JT_LTORJ flag would end up being | |
| 140223 | + ** omitted on left-hand tables of the right join that is being | |
| 140224 | + ** flattened. */ | |
| 140225 | + return 0; /* Restrictions (17g), (27b) */ | |
| 139891 | 140226 | } |
| 139892 | 140227 | testcase( pSub1->pSrc->nSrc>1 ); |
| 139893 | 140228 | } |
| 139894 | 140229 | |
| 139895 | 140230 | /* Restriction (18). */ |
| @@ -140189,10 +140524,12 @@ | ||
| 140189 | 140524 | Parse *pParse; /* Parsing context */ |
| 140190 | 140525 | u8 *pOomFault; /* Pointer to pParse->db->mallocFailed */ |
| 140191 | 140526 | int nConst; /* Number for COLUMN=CONSTANT terms */ |
| 140192 | 140527 | int nChng; /* Number of times a constant is propagated */ |
| 140193 | 140528 | int bHasAffBlob; /* At least one column in apExpr[] as affinity BLOB */ |
| 140529 | + u32 mExcludeOn; /* Which ON expressions to exclude from considertion. | |
| 140530 | + ** Either EP_OuterON or EP_InnerON|EP_OuterON */ | |
| 140194 | 140531 | Expr **apExpr; /* [i*2] is COLUMN and [i*2+1] is VALUE */ |
| 140195 | 140532 | }; |
| 140196 | 140533 | |
| 140197 | 140534 | /* |
| 140198 | 140535 | ** Add a new entry to the pConst object. Except, do not add duplicate |
| @@ -140251,11 +140588,11 @@ | ||
| 140251 | 140588 | ** found, add it to the pConst structure. |
| 140252 | 140589 | */ |
| 140253 | 140590 | static void findConstInWhere(WhereConst *pConst, Expr *pExpr){ |
| 140254 | 140591 | Expr *pRight, *pLeft; |
| 140255 | 140592 | if( NEVER(pExpr==0) ) return; |
| 140256 | - if( ExprHasProperty(pExpr, EP_OuterON|EP_InnerON) ){ | |
| 140593 | + if( ExprHasProperty(pExpr, pConst->mExcludeOn) ){ | |
| 140257 | 140594 | testcase( ExprHasProperty(pExpr, EP_OuterON) ); |
| 140258 | 140595 | testcase( ExprHasProperty(pExpr, EP_InnerON) ); |
| 140259 | 140596 | return; |
| 140260 | 140597 | } |
| 140261 | 140598 | if( pExpr->op==TK_AND ){ |
| @@ -140291,13 +140628,14 @@ | ||
| 140291 | 140628 | int bIgnoreAffBlob |
| 140292 | 140629 | ){ |
| 140293 | 140630 | int i; |
| 140294 | 140631 | if( pConst->pOomFault[0] ) return WRC_Prune; |
| 140295 | 140632 | if( pExpr->op!=TK_COLUMN ) return WRC_Continue; |
| 140296 | - if( ExprHasProperty(pExpr, EP_FixedCol|EP_OuterON) ){ | |
| 140633 | + if( ExprHasProperty(pExpr, EP_FixedCol|pConst->mExcludeOn) ){ | |
| 140297 | 140634 | testcase( ExprHasProperty(pExpr, EP_FixedCol) ); |
| 140298 | 140635 | testcase( ExprHasProperty(pExpr, EP_OuterON) ); |
| 140636 | + testcase( ExprHasProperty(pExpr, EP_InnerON) ); | |
| 140299 | 140637 | return WRC_Continue; |
| 140300 | 140638 | } |
| 140301 | 140639 | for(i=0; i<pConst->nConst; i++){ |
| 140302 | 140640 | Expr *pColumn = pConst->apExpr[i*2]; |
| 140303 | 140641 | if( pColumn==pExpr ) continue; |
| @@ -140417,10 +140755,21 @@ | ||
| 140417 | 140755 | do{ |
| 140418 | 140756 | x.nConst = 0; |
| 140419 | 140757 | x.nChng = 0; |
| 140420 | 140758 | x.apExpr = 0; |
| 140421 | 140759 | x.bHasAffBlob = 0; |
| 140760 | + if( ALWAYS(p->pSrc!=0) | |
| 140761 | + && p->pSrc->nSrc>0 | |
| 140762 | + && (p->pSrc->a[0].fg.jointype & JT_LTORJ)!=0 | |
| 140763 | + ){ | |
| 140764 | + /* Do not propagate constants on any ON clause if there is a | |
| 140765 | + ** RIGHT JOIN anywhere in the query */ | |
| 140766 | + x.mExcludeOn = EP_InnerON | EP_OuterON; | |
| 140767 | + }else{ | |
| 140768 | + /* Do not propagate constants through the ON clause of a LEFT JOIN */ | |
| 140769 | + x.mExcludeOn = EP_OuterON; | |
| 140770 | + } | |
| 140422 | 140771 | findConstInWhere(&x, p->pWhere); |
| 140423 | 140772 | if( x.nConst ){ |
| 140424 | 140773 | memset(&w, 0, sizeof(w)); |
| 140425 | 140774 | w.pParse = pParse; |
| 140426 | 140775 | w.xExprCallback = propagateConstantExprRewrite; |
| @@ -140705,10 +141054,11 @@ | ||
| 140705 | 141054 | if( p->pWhere |
| 140706 | 141055 | || p->pEList->nExpr!=1 |
| 140707 | 141056 | || p->pSrc->nSrc!=1 |
| 140708 | 141057 | || p->pSrc->a[0].pSelect |
| 140709 | 141058 | || pAggInfo->nFunc!=1 |
| 141059 | + || p->pHaving | |
| 140710 | 141060 | ){ |
| 140711 | 141061 | return 0; |
| 140712 | 141062 | } |
| 140713 | 141063 | pTab = p->pSrc->a[0].pTab; |
| 140714 | 141064 | assert( pTab!=0 ); |
| @@ -141406,11 +141756,11 @@ | ||
| 141406 | 141756 | |
| 141407 | 141757 | if( (zTabName = pFrom->zAlias)==0 ){ |
| 141408 | 141758 | zTabName = pTab->zName; |
| 141409 | 141759 | } |
| 141410 | 141760 | if( db->mallocFailed ) break; |
| 141411 | - assert( pFrom->fg.isNestedFrom == IsNestedFrom(pFrom->pSelect) ); | |
| 141761 | + assert( (int)pFrom->fg.isNestedFrom == IsNestedFrom(pFrom->pSelect) ); | |
| 141412 | 141762 | if( pFrom->fg.isNestedFrom ){ |
| 141413 | 141763 | assert( pFrom->pSelect!=0 ); |
| 141414 | 141764 | pNestedFrom = pFrom->pSelect->pEList; |
| 141415 | 141765 | assert( pNestedFrom!=0 ); |
| 141416 | 141766 | assert( pNestedFrom->nExpr==pTab->nCol ); |
| @@ -142280,10 +142630,11 @@ | ||
| 142280 | 142630 | && OptimizationEnabled(db, SQLITE_SimplifyJoin) |
| 142281 | 142631 | ){ |
| 142282 | 142632 | SELECTTRACE(0x100,pParse,p, |
| 142283 | 142633 | ("LEFT-JOIN simplifies to JOIN on term %d\n",i)); |
| 142284 | 142634 | pItem->fg.jointype &= ~(JT_LEFT|JT_OUTER); |
| 142635 | + assert( pItem->iCursor>=0 ); | |
| 142285 | 142636 | unsetJoinExpr(p->pWhere, pItem->iCursor, |
| 142286 | 142637 | pTabList->a[0].fg.jointype & JT_LTORJ); |
| 142287 | 142638 | } |
| 142288 | 142639 | |
| 142289 | 142640 | /* No futher action if this term of the FROM clause is no a subquery */ |
| @@ -142334,11 +142685,13 @@ | ||
| 142334 | 142685 | && (p->selFlags & SF_OrderByReqd)==0 /* Condition (3) and (4) */ |
| 142335 | 142686 | && OptimizationEnabled(db, SQLITE_OmitOrderBy) |
| 142336 | 142687 | ){ |
| 142337 | 142688 | SELECTTRACE(0x100,pParse,p, |
| 142338 | 142689 | ("omit superfluous ORDER BY on %r FROM-clause subquery\n",i+1)); |
| 142339 | - sqlite3ExprListDelete(db, pSub->pOrderBy); | |
| 142690 | + sqlite3ParserAddCleanup(pParse, | |
| 142691 | + (void(*)(sqlite3*,void*))sqlite3ExprListDelete, | |
| 142692 | + pSub->pOrderBy); | |
| 142340 | 142693 | pSub->pOrderBy = 0; |
| 142341 | 142694 | } |
| 142342 | 142695 | |
| 142343 | 142696 | /* If the outer query contains a "complex" result set (that is, |
| 142344 | 142697 | ** if the result set of the outer query uses functions or subqueries) |
| @@ -142501,11 +142854,11 @@ | ||
| 142501 | 142854 | zSavedAuthContext = pParse->zAuthContext; |
| 142502 | 142855 | pParse->zAuthContext = pItem->zName; |
| 142503 | 142856 | |
| 142504 | 142857 | /* Generate code to implement the subquery |
| 142505 | 142858 | ** |
| 142506 | - ** The subquery is implemented as a co-routine all if the following are | |
| 142859 | + ** The subquery is implemented as a co-routine if all of the following are | |
| 142507 | 142860 | ** true: |
| 142508 | 142861 | ** |
| 142509 | 142862 | ** (1) the subquery is guaranteed to be the outer loop (so that |
| 142510 | 142863 | ** it does not need to be computed more than once), and |
| 142511 | 142864 | ** (2) the subquery is not a CTE that should be materialized |
| @@ -142695,11 +143048,11 @@ | ||
| 142695 | 143048 | */ |
| 142696 | 143049 | iEnd = sqlite3VdbeMakeLabel(pParse); |
| 142697 | 143050 | if( (p->selFlags & SF_FixedLimit)==0 ){ |
| 142698 | 143051 | p->nSelectRow = 320; /* 4 billion rows */ |
| 142699 | 143052 | } |
| 142700 | - computeLimitRegisters(pParse, p, iEnd); | |
| 143053 | + if( p->pLimit ) computeLimitRegisters(pParse, p, iEnd); | |
| 142701 | 143054 | if( p->iLimit==0 && sSort.addrSortIndex>=0 ){ |
| 142702 | 143055 | sqlite3VdbeChangeOpcode(v, sSort.addrSortIndex, OP_SorterOpen); |
| 142703 | 143056 | sSort.sortFlags |= SORTFLAG_UseSorter; |
| 142704 | 143057 | } |
| 142705 | 143058 | |
| @@ -142917,12 +143270,17 @@ | ||
| 142917 | 143270 | if( minMaxFlag ){ |
| 142918 | 143271 | sqlite3DebugPrintf("MIN/MAX Optimization (0x%02x) adds:\n", minMaxFlag); |
| 142919 | 143272 | sqlite3TreeViewExprList(0, pMinMaxOrderBy, 0, "ORDERBY"); |
| 142920 | 143273 | } |
| 142921 | 143274 | for(ii=0; ii<pAggInfo->nColumn; ii++){ |
| 142922 | - sqlite3DebugPrintf("agg-column[%d] iMem=%d\n", | |
| 142923 | - ii, pAggInfo->aCol[ii].iMem); | |
| 143275 | + struct AggInfo_col *pCol = &pAggInfo->aCol[ii]; | |
| 143276 | + sqlite3DebugPrintf( | |
| 143277 | + "agg-column[%d] pTab=%s iTable=%d iColumn=%d iMem=%d" | |
| 143278 | + " iSorterColumn=%d\n", | |
| 143279 | + ii, pCol->pTab ? pCol->pTab->zName : "NULL", | |
| 143280 | + pCol->iTable, pCol->iColumn, pCol->iMem, | |
| 143281 | + pCol->iSorterColumn); | |
| 142924 | 143282 | sqlite3TreeViewExpr(0, pAggInfo->aCol[ii].pCExpr, 0); |
| 142925 | 143283 | } |
| 142926 | 143284 | for(ii=0; ii<pAggInfo->nFunc; ii++){ |
| 142927 | 143285 | sqlite3DebugPrintf("agg-func[%d]: iMem=%d\n", |
| 142928 | 143286 | ii, pAggInfo->aFunc[ii].iMem); |
| @@ -143039,19 +143397,19 @@ | ||
| 143039 | 143397 | } |
| 143040 | 143398 | } |
| 143041 | 143399 | regBase = sqlite3GetTempRange(pParse, nCol); |
| 143042 | 143400 | sqlite3ExprCodeExprList(pParse, pGroupBy, regBase, 0, 0); |
| 143043 | 143401 | j = nGroupBy; |
| 143402 | + pAggInfo->directMode = 1; | |
| 143044 | 143403 | for(i=0; i<pAggInfo->nColumn; i++){ |
| 143045 | 143404 | struct AggInfo_col *pCol = &pAggInfo->aCol[i]; |
| 143046 | 143405 | if( pCol->iSorterColumn>=j ){ |
| 143047 | - int r1 = j + regBase; | |
| 143048 | - sqlite3ExprCodeGetColumnOfTable(v, | |
| 143049 | - pCol->pTab, pCol->iTable, pCol->iColumn, r1); | |
| 143406 | + sqlite3ExprCode(pParse, pCol->pCExpr, j + regBase); | |
| 143050 | 143407 | j++; |
| 143051 | 143408 | } |
| 143052 | 143409 | } |
| 143410 | + pAggInfo->directMode = 0; | |
| 143053 | 143411 | regRecord = sqlite3GetTempReg(pParse); |
| 143054 | 143412 | sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regRecord); |
| 143055 | 143413 | sqlite3VdbeAddOp2(v, OP_SorterInsert, pAggInfo->sortingIdx, regRecord); |
| 143056 | 143414 | sqlite3ReleaseTempReg(pParse, regRecord); |
| 143057 | 143415 | sqlite3ReleaseTempRange(pParse, regBase, nCol); |
| @@ -147465,11 +147823,12 @@ | ||
| 147465 | 147823 | ** in the list are moved to the sqlite3.pDisconnect list of the associated |
| 147466 | 147824 | ** database connection. |
| 147467 | 147825 | */ |
| 147468 | 147826 | SQLITE_PRIVATE void sqlite3VtabClear(sqlite3 *db, Table *p){ |
| 147469 | 147827 | assert( IsVirtual(p) ); |
| 147470 | - if( !db || db->pnBytesFreed==0 ) vtabDisconnectAll(0, p); | |
| 147828 | + assert( db!=0 ); | |
| 147829 | + if( db->pnBytesFreed==0 ) vtabDisconnectAll(0, p); | |
| 147471 | 147830 | if( p->u.vtab.azArg ){ |
| 147472 | 147831 | int i; |
| 147473 | 147832 | for(i=0; i<p->u.vtab.nArg; i++){ |
| 147474 | 147833 | if( i!=1 ) sqlite3DbFree(db, p->u.vtab.azArg[i]); |
| 147475 | 147834 | } |
| @@ -149142,10 +149501,11 @@ | ||
| 149142 | 149501 | #define WHERE_IN_SEEKSCAN 0x00100000 /* Seek-scan optimization for IN */ |
| 149143 | 149502 | #define WHERE_TRANSCONS 0x00200000 /* Uses a transitive constraint */ |
| 149144 | 149503 | #define WHERE_BLOOMFILTER 0x00400000 /* Consider using a Bloom-filter */ |
| 149145 | 149504 | #define WHERE_SELFCULL 0x00800000 /* nOut reduced by extra WHERE terms */ |
| 149146 | 149505 | #define WHERE_OMIT_OFFSET 0x01000000 /* Set offset counter to zero */ |
| 149506 | +#define WHERE_VIEWSCAN 0x02000000 /* A full-scan of a VIEW or subquery */ | |
| 149147 | 149507 | |
| 149148 | 149508 | #endif /* !defined(SQLITE_WHEREINT_H) */ |
| 149149 | 149509 | |
| 149150 | 149510 | /************** End of whereInt.h ********************************************/ |
| 149151 | 149511 | /************** Continuing where we left off in wherecode.c ******************/ |
| @@ -149750,11 +150110,12 @@ | ||
| 149750 | 150110 | eType = sqlite3FindInIndex(pParse, pX, IN_INDEX_LOOP, 0, aiMap,&iTab); |
| 149751 | 150111 | pExpr->iTable = iTab; |
| 149752 | 150112 | } |
| 149753 | 150113 | sqlite3ExprDelete(db, pX); |
| 149754 | 150114 | }else{ |
| 149755 | - aiMap = (int*)sqlite3DbMallocZero(pParse->db, sizeof(int)*nEq); | |
| 150115 | + int n = sqlite3ExprVectorSize(pX->pLeft); | |
| 150116 | + aiMap = (int*)sqlite3DbMallocZero(pParse->db, sizeof(int)*MAX(nEq,n)); | |
| 149756 | 150117 | eType = sqlite3FindInIndex(pParse, pX, IN_INDEX_LOOP, 0, aiMap, &iTab); |
| 149757 | 150118 | } |
| 149758 | 150119 | pX = pExpr; |
| 149759 | 150120 | } |
| 149760 | 150121 | |
| @@ -150020,11 +150381,11 @@ | ||
| 150020 | 150381 | WhereTerm *pTerm /* The upper or lower bound just coded */ |
| 150021 | 150382 | ){ |
| 150022 | 150383 | if( pTerm->wtFlags & TERM_LIKEOPT ){ |
| 150023 | 150384 | VdbeOp *pOp; |
| 150024 | 150385 | assert( pLevel->iLikeRepCntr>0 ); |
| 150025 | - pOp = sqlite3VdbeGetOp(v, -1); | |
| 150386 | + pOp = sqlite3VdbeGetLastOp(v); | |
| 150026 | 150387 | assert( pOp!=0 ); |
| 150027 | 150388 | assert( pOp->opcode==OP_String8 |
| 150028 | 150389 | || pTerm->pWC->pWInfo->pParse->db->mallocFailed ); |
| 150029 | 150390 | pOp->p3 = (int)(pLevel->iLikeRepCntr>>1); /* Register holding counter */ |
| 150030 | 150391 | pOp->p5 = (u8)(pLevel->iLikeRepCntr&1); /* ASC or DESC */ |
| @@ -151236,12 +151597,12 @@ | ||
| 151236 | 151597 | sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq); |
| 151237 | 151598 | endEq = 0; |
| 151238 | 151599 | } |
| 151239 | 151600 | nConstraint++; |
| 151240 | 151601 | } |
| 151241 | - sqlite3DbFree(db, zStartAff); | |
| 151242 | - sqlite3DbFree(db, zEndAff); | |
| 151602 | + if( zStartAff ) sqlite3DbNNFreeNN(db, zStartAff); | |
| 151603 | + if( zEndAff ) sqlite3DbNNFreeNN(db, zEndAff); | |
| 151243 | 151604 | |
| 151244 | 151605 | /* Top of the loop body */ |
| 151245 | 151606 | if( pLevel->p2==0 ) pLevel->p2 = sqlite3VdbeCurrentAddr(v); |
| 151246 | 151607 | |
| 151247 | 151608 | /* Check if the index cursor is past the end of the range. */ |
| @@ -153168,13 +153529,19 @@ | ||
| 153168 | 153529 | sqlite3ErrorMsg(pParse, "ON clause references tables to its right"); |
| 153169 | 153530 | return; |
| 153170 | 153531 | } |
| 153171 | 153532 | }else if( (prereqAll>>1)>=x ){ |
| 153172 | 153533 | /* The ON clause of an INNER JOIN references a table to its right. |
| 153173 | - ** Most other SQL database engines raise an error. But all versions | |
| 153174 | - ** of SQLite going back to 3.0.0 have just put the ON clause constraint | |
| 153175 | - ** into the WHERE clause and carried on. */ | |
| 153534 | + ** Most other SQL database engines raise an error. But SQLite versions | |
| 153535 | + ** 3.0 through 3.38 just put the ON clause constraint into the WHERE | |
| 153536 | + ** clause and carried on. Beginning with 3.39, raise an error only | |
| 153537 | + ** if there is a RIGHT or FULL JOIN in the query. This makes SQLite | |
| 153538 | + ** more like other systems, and also preserves legacy. */ | |
| 153539 | + if( ALWAYS(pSrc->nSrc>0) && (pSrc->a[0].fg.jointype & JT_LTORJ)!=0 ){ | |
| 153540 | + sqlite3ErrorMsg(pParse, "ON clause references tables to its right"); | |
| 153541 | + return; | |
| 153542 | + } | |
| 153176 | 153543 | ExprClearProperty(pExpr, EP_InnerON); |
| 153177 | 153544 | } |
| 153178 | 153545 | } |
| 153179 | 153546 | pTerm->prereqAll = prereqAll; |
| 153180 | 153547 | pTerm->leftCursor = -1; |
| @@ -155328,11 +155695,11 @@ | ||
| 155328 | 155695 | #ifndef SQLITE_DEBUG |
| 155329 | 155696 | UNUSED_PARAMETER( pParse ); |
| 155330 | 155697 | #endif |
| 155331 | 155698 | assert( pRec!=0 ); |
| 155332 | 155699 | assert( pIdx->nSample>0 ); |
| 155333 | - assert( pRec->nField>0 && pRec->nField<=pIdx->nSampleCol ); | |
| 155700 | + assert( pRec->nField>0 ); | |
| 155334 | 155701 | |
| 155335 | 155702 | /* Do a binary search to find the first sample greater than or equal |
| 155336 | 155703 | ** to pRec. If pRec contains a single field, the set of samples to search |
| 155337 | 155704 | ** is simply the aSample[] array. If the samples in aSample[] contain more |
| 155338 | 155705 | ** than one fields, all fields following the first are ignored. |
| @@ -155374,11 +155741,11 @@ | ||
| 155374 | 155741 | ** appears that it should be 1 field in size. However, that would make it |
| 155375 | 155742 | ** smaller than sample 1, so the binary search would not work. As a result, |
| 155376 | 155743 | ** it is extended to two fields. The duplicates that this creates do not |
| 155377 | 155744 | ** cause any problems. |
| 155378 | 155745 | */ |
| 155379 | - nField = pRec->nField; | |
| 155746 | + nField = MIN(pRec->nField, pIdx->nSample); | |
| 155380 | 155747 | iCol = 0; |
| 155381 | 155748 | iSample = pIdx->nSample * nField; |
| 155382 | 155749 | do{ |
| 155383 | 155750 | int iSamp; /* Index in aSample[] of test sample */ |
| 155384 | 155751 | int n; /* Number of fields in test sample */ |
| @@ -155462,11 +155829,11 @@ | ||
| 155462 | 155829 | /* At this point, the (iCol+1) field prefix of aSample[i] is the first |
| 155463 | 155830 | ** sample that is greater than pRec. Or, if i==pIdx->nSample then pRec |
| 155464 | 155831 | ** is larger than all samples in the array. */ |
| 155465 | 155832 | tRowcnt iUpper, iGap; |
| 155466 | 155833 | if( i>=pIdx->nSample ){ |
| 155467 | - iUpper = sqlite3LogEstToInt(pIdx->aiRowLogEst[0]); | |
| 155834 | + iUpper = pIdx->nRowEst0; | |
| 155468 | 155835 | }else{ |
| 155469 | 155836 | iUpper = aSample[i].anLt[iCol]; |
| 155470 | 155837 | } |
| 155471 | 155838 | |
| 155472 | 155839 | if( iLower>=iUpper ){ |
| @@ -156091,16 +156458,22 @@ | ||
| 156091 | 156458 | } |
| 156092 | 156459 | } |
| 156093 | 156460 | } |
| 156094 | 156461 | |
| 156095 | 156462 | /* |
| 156096 | -** Deallocate internal memory used by a WhereLoop object | |
| 156463 | +** Deallocate internal memory used by a WhereLoop object. Leave the | |
| 156464 | +** object in an initialized state, as if it had been newly allocated. | |
| 156097 | 156465 | */ |
| 156098 | 156466 | static void whereLoopClear(sqlite3 *db, WhereLoop *p){ |
| 156099 | - if( p->aLTerm!=p->aLTermSpace ) sqlite3DbFreeNN(db, p->aLTerm); | |
| 156467 | + if( p->aLTerm!=p->aLTermSpace ){ | |
| 156468 | + sqlite3DbFreeNN(db, p->aLTerm); | |
| 156469 | + p->aLTerm = p->aLTermSpace; | |
| 156470 | + p->nLSlot = ArraySize(p->aLTermSpace); | |
| 156471 | + } | |
| 156100 | 156472 | whereLoopClearUnion(db, p); |
| 156101 | - whereLoopInit(p); | |
| 156473 | + p->nLTerm = 0; | |
| 156474 | + p->wsFlags = 0; | |
| 156102 | 156475 | } |
| 156103 | 156476 | |
| 156104 | 156477 | /* |
| 156105 | 156478 | ** Increase the memory allocation for pLoop->aLTerm[] to be at least n. |
| 156106 | 156479 | */ |
| @@ -156120,11 +156493,13 @@ | ||
| 156120 | 156493 | /* |
| 156121 | 156494 | ** Transfer content from the second pLoop into the first. |
| 156122 | 156495 | */ |
| 156123 | 156496 | static int whereLoopXfer(sqlite3 *db, WhereLoop *pTo, WhereLoop *pFrom){ |
| 156124 | 156497 | whereLoopClearUnion(db, pTo); |
| 156125 | - if( whereLoopResize(db, pTo, pFrom->nLTerm) ){ | |
| 156498 | + if( pFrom->nLTerm > pTo->nLSlot | |
| 156499 | + && whereLoopResize(db, pTo, pFrom->nLTerm) | |
| 156500 | + ){ | |
| 156126 | 156501 | memset(pTo, 0, WHERE_LOOP_XFER_SZ); |
| 156127 | 156502 | return SQLITE_NOMEM_BKPT; |
| 156128 | 156503 | } |
| 156129 | 156504 | memcpy(pTo, pFrom, WHERE_LOOP_XFER_SZ); |
| 156130 | 156505 | memcpy(pTo->aLTerm, pFrom->aLTerm, pTo->nLTerm*sizeof(pTo->aLTerm[0])); |
| @@ -156138,32 +156513,34 @@ | ||
| 156138 | 156513 | |
| 156139 | 156514 | /* |
| 156140 | 156515 | ** Delete a WhereLoop object |
| 156141 | 156516 | */ |
| 156142 | 156517 | static void whereLoopDelete(sqlite3 *db, WhereLoop *p){ |
| 156518 | + assert( db!=0 ); | |
| 156143 | 156519 | whereLoopClear(db, p); |
| 156144 | - sqlite3DbFreeNN(db, p); | |
| 156520 | + sqlite3DbNNFreeNN(db, p); | |
| 156145 | 156521 | } |
| 156146 | 156522 | |
| 156147 | 156523 | /* |
| 156148 | 156524 | ** Free a WhereInfo structure |
| 156149 | 156525 | */ |
| 156150 | 156526 | static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){ |
| 156151 | 156527 | assert( pWInfo!=0 ); |
| 156528 | + assert( db!=0 ); | |
| 156152 | 156529 | sqlite3WhereClauseClear(&pWInfo->sWC); |
| 156153 | 156530 | while( pWInfo->pLoops ){ |
| 156154 | 156531 | WhereLoop *p = pWInfo->pLoops; |
| 156155 | 156532 | pWInfo->pLoops = p->pNextLoop; |
| 156156 | 156533 | whereLoopDelete(db, p); |
| 156157 | 156534 | } |
| 156158 | 156535 | assert( pWInfo->pExprMods==0 ); |
| 156159 | 156536 | while( pWInfo->pMemToFree ){ |
| 156160 | 156537 | WhereMemBlock *pNext = pWInfo->pMemToFree->pNext; |
| 156161 | - sqlite3DbFreeNN(db, pWInfo->pMemToFree); | |
| 156538 | + sqlite3DbNNFreeNN(db, pWInfo->pMemToFree); | |
| 156162 | 156539 | pWInfo->pMemToFree = pNext; |
| 156163 | 156540 | } |
| 156164 | - sqlite3DbFreeNN(db, pWInfo); | |
| 156541 | + sqlite3DbNNFreeNN(db, pWInfo); | |
| 156165 | 156542 | } |
| 156166 | 156543 | |
| 156167 | 156544 | /* Undo all Expr node modifications |
| 156168 | 156545 | */ |
| 156169 | 156546 | static void whereUndoExprMods(WhereInfo *pWInfo){ |
| @@ -156773,11 +157150,15 @@ | ||
| 156773 | 157150 | pNew->wsFlags = saved_wsFlags; |
| 156774 | 157151 | pNew->u.btree.nEq = saved_nEq; |
| 156775 | 157152 | pNew->u.btree.nBtm = saved_nBtm; |
| 156776 | 157153 | pNew->u.btree.nTop = saved_nTop; |
| 156777 | 157154 | pNew->nLTerm = saved_nLTerm; |
| 156778 | - if( whereLoopResize(db, pNew, pNew->nLTerm+1) ) break; /* OOM */ | |
| 157155 | + if( pNew->nLTerm>=pNew->nLSlot | |
| 157156 | + && whereLoopResize(db, pNew, pNew->nLTerm+1) | |
| 157157 | + ){ | |
| 157158 | + break; /* OOM while trying to enlarge the pNew->aLTerm array */ | |
| 157159 | + } | |
| 156779 | 157160 | pNew->aLTerm[pNew->nLTerm++] = pTerm; |
| 156780 | 157161 | pNew->prereq = (saved_prereq | pTerm->prereqRight) & ~pNew->maskSelf; |
| 156781 | 157162 | |
| 156782 | 157163 | assert( nInMul==0 |
| 156783 | 157164 | || (pNew->wsFlags & WHERE_COLUMN_NULL)!=0 |
| @@ -156866,42 +157247,43 @@ | ||
| 156866 | 157247 | } |
| 156867 | 157248 | } |
| 156868 | 157249 | if( scan.iEquiv>1 ) pNew->wsFlags |= WHERE_TRANSCONS; |
| 156869 | 157250 | }else if( eOp & WO_ISNULL ){ |
| 156870 | 157251 | pNew->wsFlags |= WHERE_COLUMN_NULL; |
| 156871 | - }else if( eOp & (WO_GT|WO_GE) ){ | |
| 156872 | - testcase( eOp & WO_GT ); | |
| 156873 | - testcase( eOp & WO_GE ); | |
| 156874 | - pNew->wsFlags |= WHERE_COLUMN_RANGE|WHERE_BTM_LIMIT; | |
| 156875 | - pNew->u.btree.nBtm = whereRangeVectorLen( | |
| 156876 | - pParse, pSrc->iCursor, pProbe, saved_nEq, pTerm | |
| 156877 | - ); | |
| 156878 | - pBtm = pTerm; | |
| 156879 | - pTop = 0; | |
| 156880 | - if( pTerm->wtFlags & TERM_LIKEOPT ){ | |
| 156881 | - /* Range constraints that come from the LIKE optimization are | |
| 156882 | - ** always used in pairs. */ | |
| 156883 | - pTop = &pTerm[1]; | |
| 156884 | - assert( (pTop-(pTerm->pWC->a))<pTerm->pWC->nTerm ); | |
| 156885 | - assert( pTop->wtFlags & TERM_LIKEOPT ); | |
| 156886 | - assert( pTop->eOperator==WO_LT ); | |
| 156887 | - if( whereLoopResize(db, pNew, pNew->nLTerm+1) ) break; /* OOM */ | |
| 156888 | - pNew->aLTerm[pNew->nLTerm++] = pTop; | |
| 156889 | - pNew->wsFlags |= WHERE_TOP_LIMIT; | |
| 156890 | - pNew->u.btree.nTop = 1; | |
| 156891 | - } | |
| 156892 | - }else{ | |
| 156893 | - assert( eOp & (WO_LT|WO_LE) ); | |
| 156894 | - testcase( eOp & WO_LT ); | |
| 156895 | - testcase( eOp & WO_LE ); | |
| 156896 | - pNew->wsFlags |= WHERE_COLUMN_RANGE|WHERE_TOP_LIMIT; | |
| 156897 | - pNew->u.btree.nTop = whereRangeVectorLen( | |
| 156898 | - pParse, pSrc->iCursor, pProbe, saved_nEq, pTerm | |
| 156899 | - ); | |
| 156900 | - pTop = pTerm; | |
| 156901 | - pBtm = (pNew->wsFlags & WHERE_BTM_LIMIT)!=0 ? | |
| 156902 | - pNew->aLTerm[pNew->nLTerm-2] : 0; | |
| 157252 | + }else{ | |
| 157253 | + int nVecLen = whereRangeVectorLen( | |
| 157254 | + pParse, pSrc->iCursor, pProbe, saved_nEq, pTerm | |
| 157255 | + ); | |
| 157256 | + if( eOp & (WO_GT|WO_GE) ){ | |
| 157257 | + testcase( eOp & WO_GT ); | |
| 157258 | + testcase( eOp & WO_GE ); | |
| 157259 | + pNew->wsFlags |= WHERE_COLUMN_RANGE|WHERE_BTM_LIMIT; | |
| 157260 | + pNew->u.btree.nBtm = nVecLen; | |
| 157261 | + pBtm = pTerm; | |
| 157262 | + pTop = 0; | |
| 157263 | + if( pTerm->wtFlags & TERM_LIKEOPT ){ | |
| 157264 | + /* Range constraints that come from the LIKE optimization are | |
| 157265 | + ** always used in pairs. */ | |
| 157266 | + pTop = &pTerm[1]; | |
| 157267 | + assert( (pTop-(pTerm->pWC->a))<pTerm->pWC->nTerm ); | |
| 157268 | + assert( pTop->wtFlags & TERM_LIKEOPT ); | |
| 157269 | + assert( pTop->eOperator==WO_LT ); | |
| 157270 | + if( whereLoopResize(db, pNew, pNew->nLTerm+1) ) break; /* OOM */ | |
| 157271 | + pNew->aLTerm[pNew->nLTerm++] = pTop; | |
| 157272 | + pNew->wsFlags |= WHERE_TOP_LIMIT; | |
| 157273 | + pNew->u.btree.nTop = 1; | |
| 157274 | + } | |
| 157275 | + }else{ | |
| 157276 | + assert( eOp & (WO_LT|WO_LE) ); | |
| 157277 | + testcase( eOp & WO_LT ); | |
| 157278 | + testcase( eOp & WO_LE ); | |
| 157279 | + pNew->wsFlags |= WHERE_COLUMN_RANGE|WHERE_TOP_LIMIT; | |
| 157280 | + pNew->u.btree.nTop = nVecLen; | |
| 157281 | + pTop = pTerm; | |
| 157282 | + pBtm = (pNew->wsFlags & WHERE_BTM_LIMIT)!=0 ? | |
| 157283 | + pNew->aLTerm[pNew->nLTerm-2] : 0; | |
| 157284 | + } | |
| 156903 | 157285 | } |
| 156904 | 157286 | |
| 156905 | 157287 | /* At this point pNew->nOut is set to the number of rows expected to |
| 156906 | 157288 | ** be visited by the index scan before considering term pTerm, or the |
| 156907 | 157289 | ** values of nIn and nInMul. In other words, assuming that all |
| @@ -157343,10 +157725,13 @@ | ||
| 157343 | 157725 | #ifdef SQLITE_ENABLE_STAT4 |
| 157344 | 157726 | pNew->rRun = rSize + 16 - 2*((pTab->tabFlags & TF_HasStat4)!=0); |
| 157345 | 157727 | #else |
| 157346 | 157728 | pNew->rRun = rSize + 16; |
| 157347 | 157729 | #endif |
| 157730 | + if( IsView(pTab) || (pTab->tabFlags & TF_Ephemeral)!=0 ){ | |
| 157731 | + pNew->wsFlags |= WHERE_VIEWSCAN; | |
| 157732 | + } | |
| 157348 | 157733 | ApplyCostMultiplier(pNew->rRun, pTab->costMult); |
| 157349 | 157734 | whereLoopOutputAdjust(pWC, pNew, rSize); |
| 157350 | 157735 | rc = whereLoopInsert(pBuilder, pNew); |
| 157351 | 157736 | pNew->nOut = rSize; |
| 157352 | 157737 | if( rc ) break; |
| @@ -158063,29 +158448,47 @@ | ||
| 158063 | 158448 | SrcItem *pItem; |
| 158064 | 158449 | SrcItem *pEnd = &pTabList->a[pWInfo->nLevel]; |
| 158065 | 158450 | sqlite3 *db = pWInfo->pParse->db; |
| 158066 | 158451 | int rc = SQLITE_OK; |
| 158067 | 158452 | int bFirstPastRJ = 0; |
| 158453 | + int hasRightJoin = 0; | |
| 158068 | 158454 | WhereLoop *pNew; |
| 158069 | 158455 | |
| 158070 | 158456 | |
| 158071 | 158457 | /* Loop over the tables in the join, from left to right */ |
| 158072 | 158458 | pNew = pBuilder->pNew; |
| 158073 | - whereLoopInit(pNew); | |
| 158459 | + | |
| 158460 | + /* Verify that pNew has already been initialized */ | |
| 158461 | + assert( pNew->nLTerm==0 ); | |
| 158462 | + assert( pNew->wsFlags==0 ); | |
| 158463 | + assert( pNew->nLSlot>=ArraySize(pNew->aLTermSpace) ); | |
| 158464 | + assert( pNew->aLTerm!=0 ); | |
| 158465 | + | |
| 158074 | 158466 | pBuilder->iPlanLimit = SQLITE_QUERY_PLANNER_LIMIT; |
| 158075 | 158467 | for(iTab=0, pItem=pTabList->a; pItem<pEnd; iTab++, pItem++){ |
| 158076 | 158468 | Bitmask mUnusable = 0; |
| 158077 | 158469 | pNew->iTab = iTab; |
| 158078 | 158470 | pBuilder->iPlanLimit += SQLITE_QUERY_PLANNER_LIMIT_INCR; |
| 158079 | 158471 | pNew->maskSelf = sqlite3WhereGetMask(&pWInfo->sMaskSet, pItem->iCursor); |
| 158080 | - if( bFirstPastRJ || (pItem->fg.jointype & (JT_OUTER|JT_CROSS))!=0 ){ | |
| 158472 | + if( bFirstPastRJ | |
| 158473 | + || (pItem->fg.jointype & (JT_OUTER|JT_CROSS|JT_LTORJ))!=0 | |
| 158474 | + ){ | |
| 158081 | 158475 | /* Add prerequisites to prevent reordering of FROM clause terms |
| 158082 | 158476 | ** across CROSS joins and outer joins. The bFirstPastRJ boolean |
| 158083 | 158477 | ** prevents the right operand of a RIGHT JOIN from being swapped with |
| 158084 | - ** other elements even further to the right. */ | |
| 158478 | + ** other elements even further to the right. | |
| 158479 | + ** | |
| 158480 | + ** The JT_LTORJ case and the hasRightJoin flag work together to | |
| 158481 | + ** prevent FROM-clause terms from moving from the right side of | |
| 158482 | + ** a LEFT JOIN over to the left side of that join if the LEFT JOIN | |
| 158483 | + ** is itself on the left side of a RIGHT JOIN. | |
| 158484 | + */ | |
| 158485 | + if( pItem->fg.jointype & JT_LTORJ ) hasRightJoin = 1; | |
| 158085 | 158486 | mPrereq |= mPrior; |
| 158086 | 158487 | bFirstPastRJ = (pItem->fg.jointype & JT_RIGHT)!=0; |
| 158488 | + }else if( !hasRightJoin ){ | |
| 158489 | + mPrereq = 0; | |
| 158087 | 158490 | } |
| 158088 | 158491 | #ifndef SQLITE_OMIT_VIRTUALTABLE |
| 158089 | 158492 | if( IsVirtual(pItem->pTab) ){ |
| 158090 | 158493 | SrcItem *p; |
| 158091 | 158494 | for(p=&pItem[1]; p<pEnd; p++){ |
| @@ -158654,13 +159057,13 @@ | ||
| 158654 | 159057 | for(ii=0, pFrom=aFrom; ii<nFrom; ii++, pFrom++){ |
| 158655 | 159058 | for(pWLoop=pWInfo->pLoops; pWLoop; pWLoop=pWLoop->pNextLoop){ |
| 158656 | 159059 | LogEst nOut; /* Rows visited by (pFrom+pWLoop) */ |
| 158657 | 159060 | LogEst rCost; /* Cost of path (pFrom+pWLoop) */ |
| 158658 | 159061 | LogEst rUnsorted; /* Unsorted cost of (pFrom+pWLoop) */ |
| 158659 | - i8 isOrdered = pFrom->isOrdered; /* isOrdered for (pFrom+pWLoop) */ | |
| 159062 | + i8 isOrdered; /* isOrdered for (pFrom+pWLoop) */ | |
| 158660 | 159063 | Bitmask maskNew; /* Mask of src visited by (..) */ |
| 158661 | - Bitmask revMask = 0; /* Mask of rev-order loops for (..) */ | |
| 159064 | + Bitmask revMask; /* Mask of rev-order loops for (..) */ | |
| 158662 | 159065 | |
| 158663 | 159066 | if( (pWLoop->prereq & ~pFrom->maskLoop)!=0 ) continue; |
| 158664 | 159067 | if( (pWLoop->maskSelf & pFrom->maskLoop)!=0 ) continue; |
| 158665 | 159068 | if( (pWLoop->wsFlags & WHERE_AUTO_INDEX)!=0 && pFrom->nRow<3 ){ |
| 158666 | 159069 | /* Do not use an automatic index if the this loop is expected |
| @@ -158675,11 +159078,13 @@ | ||
| 158675 | 159078 | ** Compute its cost */ |
| 158676 | 159079 | rUnsorted = sqlite3LogEstAdd(pWLoop->rSetup,pWLoop->rRun + pFrom->nRow); |
| 158677 | 159080 | rUnsorted = sqlite3LogEstAdd(rUnsorted, pFrom->rUnsorted); |
| 158678 | 159081 | nOut = pFrom->nRow + pWLoop->nOut; |
| 158679 | 159082 | maskNew = pFrom->maskLoop | pWLoop->maskSelf; |
| 159083 | + isOrdered = pFrom->isOrdered; | |
| 158680 | 159084 | if( isOrdered<0 ){ |
| 159085 | + revMask = 0; | |
| 158681 | 159086 | isOrdered = wherePathSatisfiesOrderBy(pWInfo, |
| 158682 | 159087 | pWInfo->pOrderBy, pFrom, pWInfo->wctrlFlags, |
| 158683 | 159088 | iLoop, pWLoop, &revMask); |
| 158684 | 159089 | }else{ |
| 158685 | 159090 | revMask = pFrom->revLoop; |
| @@ -158702,10 +159107,17 @@ | ||
| 158702 | 159107 | rUnsorted, rCost)); |
| 158703 | 159108 | }else{ |
| 158704 | 159109 | rCost = rUnsorted; |
| 158705 | 159110 | rUnsorted -= 2; /* TUNING: Slight bias in favor of no-sort plans */ |
| 158706 | 159111 | } |
| 159112 | + | |
| 159113 | + /* TUNING: A full-scan of a VIEW or subquery in the outer loop | |
| 159114 | + ** is not so bad. */ | |
| 159115 | + if( iLoop==0 && (pWLoop->wsFlags & WHERE_VIEWSCAN)!=0 ){ | |
| 159116 | + rCost += -10; | |
| 159117 | + nOut += -30; | |
| 159118 | + } | |
| 158707 | 159119 | |
| 158708 | 159120 | /* Check to see if pWLoop should be added to the set of |
| 158709 | 159121 | ** mxChoice best-so-far paths. |
| 158710 | 159122 | ** |
| 158711 | 159123 | ** First look for an existing path among best-so-far paths |
| @@ -158935,11 +159347,12 @@ | ||
| 158935 | 159347 | |
| 158936 | 159348 | |
| 158937 | 159349 | pWInfo->nRowOut = pFrom->nRow; |
| 158938 | 159350 | |
| 158939 | 159351 | /* Free temporary memory and return success */ |
| 158940 | - sqlite3DbFreeNN(db, pSpace); | |
| 159352 | + assert( db!=0 ); | |
| 159353 | + sqlite3DbNNFreeNN(db, pSpace); | |
| 158941 | 159354 | return SQLITE_OK; |
| 158942 | 159355 | } |
| 158943 | 159356 | |
| 158944 | 159357 | /* |
| 158945 | 159358 | ** Most queries use only a single table (they are not joins) and have |
| @@ -158968,11 +159381,15 @@ | ||
| 158968 | 159381 | if( pWInfo->wctrlFlags & WHERE_OR_SUBCLAUSE ) return 0; |
| 158969 | 159382 | assert( pWInfo->pTabList->nSrc>=1 ); |
| 158970 | 159383 | pItem = pWInfo->pTabList->a; |
| 158971 | 159384 | pTab = pItem->pTab; |
| 158972 | 159385 | if( IsVirtual(pTab) ) return 0; |
| 158973 | - if( pItem->fg.isIndexedBy ) return 0; | |
| 159386 | + if( pItem->fg.isIndexedBy || pItem->fg.notIndexed ){ | |
| 159387 | + testcase( pItem->fg.isIndexedBy ); | |
| 159388 | + testcase( pItem->fg.notIndexed ); | |
| 159389 | + return 0; | |
| 159390 | + } | |
| 158974 | 159391 | iCur = pItem->iCursor; |
| 158975 | 159392 | pWC = &pWInfo->sWC; |
| 158976 | 159393 | pLoop = pBuilder->pNew; |
| 158977 | 159394 | pLoop->wsFlags = 0; |
| 158978 | 159395 | pLoop->nSkip = 0; |
| @@ -159141,11 +159558,11 @@ | ||
| 159141 | 159558 | WhereTerm *pTerm, *pEnd; |
| 159142 | 159559 | SrcItem *pItem; |
| 159143 | 159560 | WhereLoop *pLoop; |
| 159144 | 159561 | pLoop = pWInfo->a[i].pWLoop; |
| 159145 | 159562 | pItem = &pWInfo->pTabList->a[pLoop->iTab]; |
| 159146 | - if( (pItem->fg.jointype & JT_LEFT)==0 ) continue; | |
| 159563 | + if( (pItem->fg.jointype & (JT_LEFT|JT_RIGHT))!=JT_LEFT ) continue; | |
| 159147 | 159564 | if( (pWInfo->wctrlFlags & WHERE_WANT_DISTINCT)==0 |
| 159148 | 159565 | && (pLoop->wsFlags & WHERE_ONEROW)==0 |
| 159149 | 159566 | ){ |
| 159150 | 159567 | continue; |
| 159151 | 159568 | } |
| @@ -159473,11 +159890,11 @@ | ||
| 159473 | 159890 | } |
| 159474 | 159891 | |
| 159475 | 159892 | /* Analyze all of the subexpressions. */ |
| 159476 | 159893 | sqlite3WhereExprAnalyze(pTabList, &pWInfo->sWC); |
| 159477 | 159894 | sqlite3WhereAddLimit(&pWInfo->sWC, pLimit); |
| 159478 | - if( db->mallocFailed ) goto whereBeginError; | |
| 159895 | + if( pParse->nErr ) goto whereBeginError; | |
| 159479 | 159896 | |
| 159480 | 159897 | /* Special case: WHERE terms that do not refer to any tables in the join |
| 159481 | 159898 | ** (constant expressions). Evaluate each such term, and jump over all the |
| 159482 | 159899 | ** generated code if the result is not true. |
| 159483 | 159900 | ** |
| @@ -161164,11 +161581,10 @@ | ||
| 161164 | 161581 | int i; |
| 161165 | 161582 | int nInit = pList ? pList->nExpr : 0; |
| 161166 | 161583 | for(i=0; i<pAppend->nExpr; i++){ |
| 161167 | 161584 | sqlite3 *db = pParse->db; |
| 161168 | 161585 | Expr *pDup = sqlite3ExprDup(db, pAppend->a[i].pExpr, 0); |
| 161169 | - assert( pDup==0 || !ExprHasProperty(pDup, EP_MemToken) ); | |
| 161170 | 161586 | if( db->mallocFailed ){ |
| 161171 | 161587 | sqlite3ExprDelete(db, pDup); |
| 161172 | 161588 | break; |
| 161173 | 161589 | } |
| 161174 | 161590 | if( bIntToNull ){ |
| @@ -162435,14 +162851,13 @@ | ||
| 162435 | 162851 | } |
| 162436 | 162852 | sqlite3VdbeAddOp2(v, OP_Goto, 0, addrDone); |
| 162437 | 162853 | |
| 162438 | 162854 | /* This block runs if reg1 is not NULL, but reg2 is. */ |
| 162439 | 162855 | sqlite3VdbeJumpHere(v, addr); |
| 162440 | - sqlite3VdbeAddOp2(v, OP_IsNull, reg2, lbl); VdbeCoverage(v); | |
| 162441 | - if( op==OP_Gt || op==OP_Ge ){ | |
| 162442 | - sqlite3VdbeChangeP2(v, -1, addrDone); | |
| 162443 | - } | |
| 162856 | + sqlite3VdbeAddOp2(v, OP_IsNull, reg2, | |
| 162857 | + (op==OP_Gt || op==OP_Ge) ? addrDone : lbl); | |
| 162858 | + VdbeCoverage(v); | |
| 162444 | 162859 | } |
| 162445 | 162860 | |
| 162446 | 162861 | /* Register reg1 currently contains csr1.peerVal (the peer-value from csr1). |
| 162447 | 162862 | ** This block adds (or subtracts for DESC) the numeric value in regVal |
| 162448 | 162863 | ** from it. Or, if reg1 is not numeric (it is a NULL, a text value or a blob), |
| @@ -169918,10 +170333,11 @@ | ||
| 169918 | 170333 | while( 1 ){ |
| 169919 | 170334 | n = sqlite3GetToken((u8*)zSql, &tokenType); |
| 169920 | 170335 | mxSqlLen -= n; |
| 169921 | 170336 | if( mxSqlLen<0 ){ |
| 169922 | 170337 | pParse->rc = SQLITE_TOOBIG; |
| 170338 | + pParse->nErr++; | |
| 169923 | 170339 | break; |
| 169924 | 170340 | } |
| 169925 | 170341 | #ifndef SQLITE_OMIT_WINDOWFUNC |
| 169926 | 170342 | if( tokenType>=TK_WINDOW ){ |
| 169927 | 170343 | assert( tokenType==TK_SPACE || tokenType==TK_OVER || tokenType==TK_FILTER |
| @@ -170014,11 +170430,11 @@ | ||
| 170014 | 170430 | sqlite3DeleteTable(db, pParse->pNewTable); |
| 170015 | 170431 | } |
| 170016 | 170432 | if( pParse->pNewTrigger && !IN_RENAME_OBJECT ){ |
| 170017 | 170433 | sqlite3DeleteTrigger(db, pParse->pNewTrigger); |
| 170018 | 170434 | } |
| 170019 | - if( pParse->pVList ) sqlite3DbFreeNN(db, pParse->pVList); | |
| 170435 | + if( pParse->pVList ) sqlite3DbNNFreeNN(db, pParse->pVList); | |
| 170020 | 170436 | db->pParse = pParentParse; |
| 170021 | 170437 | assert( nErr==0 || pParse->rc!=SQLITE_OK ); |
| 170022 | 170438 | return nErr; |
| 170023 | 170439 | } |
| 170024 | 170440 | |
| @@ -171370,22 +171786,23 @@ | ||
| 171370 | 171786 | db->lookaside.pEnd = p; |
| 171371 | 171787 | db->lookaside.bDisable = 0; |
| 171372 | 171788 | db->lookaside.bMalloced = pBuf==0 ?1:0; |
| 171373 | 171789 | db->lookaside.nSlot = nBig+nSm; |
| 171374 | 171790 | }else{ |
| 171375 | - db->lookaside.pStart = db; | |
| 171791 | + db->lookaside.pStart = 0; | |
| 171376 | 171792 | #ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE |
| 171377 | 171793 | db->lookaside.pSmallInit = 0; |
| 171378 | 171794 | db->lookaside.pSmallFree = 0; |
| 171379 | - db->lookaside.pMiddle = db; | |
| 171795 | + db->lookaside.pMiddle = 0; | |
| 171380 | 171796 | #endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */ |
| 171381 | - db->lookaside.pEnd = db; | |
| 171797 | + db->lookaside.pEnd = 0; | |
| 171382 | 171798 | db->lookaside.bDisable = 1; |
| 171383 | 171799 | db->lookaside.sz = 0; |
| 171384 | 171800 | db->lookaside.bMalloced = 0; |
| 171385 | 171801 | db->lookaside.nSlot = 0; |
| 171386 | 171802 | } |
| 171803 | + db->lookaside.pTrueEnd = db->lookaside.pEnd; | |
| 171387 | 171804 | assert( sqlite3LookasideUsed(db,0)==0 ); |
| 171388 | 171805 | #endif /* SQLITE_OMIT_LOOKASIDE */ |
| 171389 | 171806 | return SQLITE_OK; |
| 171390 | 171807 | } |
| 171391 | 171808 | |
| @@ -171460,10 +171877,11 @@ | ||
| 171460 | 171877 | ** Configuration settings for an individual database connection |
| 171461 | 171878 | */ |
| 171462 | 171879 | SQLITE_API int sqlite3_db_config(sqlite3 *db, int op, ...){ |
| 171463 | 171880 | va_list ap; |
| 171464 | 171881 | int rc; |
| 171882 | + sqlite3_mutex_enter(db->mutex); | |
| 171465 | 171883 | va_start(ap, op); |
| 171466 | 171884 | switch( op ){ |
| 171467 | 171885 | case SQLITE_DBCONFIG_MAINDBNAME: { |
| 171468 | 171886 | /* IMP: R-06824-28531 */ |
| 171469 | 171887 | /* IMP: R-36257-52125 */ |
| @@ -171525,10 +171943,11 @@ | ||
| 171525 | 171943 | } |
| 171526 | 171944 | break; |
| 171527 | 171945 | } |
| 171528 | 171946 | } |
| 171529 | 171947 | va_end(ap); |
| 171948 | + sqlite3_mutex_leave(db->mutex); | |
| 171530 | 171949 | return rc; |
| 171531 | 171950 | } |
| 171532 | 171951 | |
| 171533 | 171952 | /* |
| 171534 | 171953 | ** This is the default collating function named "BINARY" which is always |
| @@ -174658,12 +175077,15 @@ | ||
| 174658 | 175077 | sqlite3ShowUpsert(0); |
| 174659 | 175078 | sqlite3ShowTriggerStep(0); |
| 174660 | 175079 | sqlite3ShowTriggerStepList(0); |
| 174661 | 175080 | sqlite3ShowTrigger(0); |
| 174662 | 175081 | sqlite3ShowTriggerList(0); |
| 175082 | +#ifndef SQLITE_OMIT_WINDOWFUNC | |
| 174663 | 175083 | sqlite3ShowWindow(0); |
| 174664 | 175084 | sqlite3ShowWinFunc(0); |
| 175085 | +#endif | |
| 175086 | + sqlite3ShowSelect(0); | |
| 174665 | 175087 | } |
| 174666 | 175088 | #endif |
| 174667 | 175089 | break; |
| 174668 | 175090 | } |
| 174669 | 175091 | |
| @@ -180993,12 +181415,11 @@ | ||
| 180993 | 181415 | static int fts3EvalDeferredPhrase(Fts3Cursor *pCsr, Fts3Phrase *pPhrase){ |
| 180994 | 181416 | int iToken; /* Used to iterate through phrase tokens */ |
| 180995 | 181417 | char *aPoslist = 0; /* Position list for deferred tokens */ |
| 180996 | 181418 | int nPoslist = 0; /* Number of bytes in aPoslist */ |
| 180997 | 181419 | int iPrev = -1; /* Token number of previous deferred token */ |
| 180998 | - | |
| 180999 | - assert( pPhrase->doclist.bFreeList==0 ); | |
| 181420 | + char *aFree = (pPhrase->doclist.bFreeList ? pPhrase->doclist.pList : 0); | |
| 181000 | 181421 | |
| 181001 | 181422 | for(iToken=0; iToken<pPhrase->nToken; iToken++){ |
| 181002 | 181423 | Fts3PhraseToken *pToken = &pPhrase->aToken[iToken]; |
| 181003 | 181424 | Fts3DeferredToken *pDeferred = pToken->pDeferred; |
| 181004 | 181425 | |
| @@ -181008,10 +181429,11 @@ | ||
| 181008 | 181429 | int rc = sqlite3Fts3DeferredTokenList(pDeferred, &pList, &nList); |
| 181009 | 181430 | if( rc!=SQLITE_OK ) return rc; |
| 181010 | 181431 | |
| 181011 | 181432 | if( pList==0 ){ |
| 181012 | 181433 | sqlite3_free(aPoslist); |
| 181434 | + sqlite3_free(aFree); | |
| 181013 | 181435 | pPhrase->doclist.pList = 0; |
| 181014 | 181436 | pPhrase->doclist.nList = 0; |
| 181015 | 181437 | return SQLITE_OK; |
| 181016 | 181438 | |
| 181017 | 181439 | }else if( aPoslist==0 ){ |
| @@ -181028,10 +181450,11 @@ | ||
| 181028 | 181450 | sqlite3_free(aPoslist); |
| 181029 | 181451 | aPoslist = pList; |
| 181030 | 181452 | nPoslist = (int)(aOut - aPoslist); |
| 181031 | 181453 | if( nPoslist==0 ){ |
| 181032 | 181454 | sqlite3_free(aPoslist); |
| 181455 | + sqlite3_free(aFree); | |
| 181033 | 181456 | pPhrase->doclist.pList = 0; |
| 181034 | 181457 | pPhrase->doclist.nList = 0; |
| 181035 | 181458 | return SQLITE_OK; |
| 181036 | 181459 | } |
| 181037 | 181460 | } |
| @@ -181060,17 +181483,18 @@ | ||
| 181060 | 181483 | p1 = pPhrase->doclist.pList; |
| 181061 | 181484 | p2 = aPoslist; |
| 181062 | 181485 | nDistance = iPrev - nMaxUndeferred; |
| 181063 | 181486 | } |
| 181064 | 181487 | |
| 181065 | - aOut = (char *)sqlite3_malloc(nPoslist+8); | |
| 181488 | + aOut = (char *)sqlite3Fts3MallocZero(nPoslist+FTS3_BUFFER_PADDING); | |
| 181066 | 181489 | if( !aOut ){ |
| 181067 | 181490 | sqlite3_free(aPoslist); |
| 181068 | 181491 | return SQLITE_NOMEM; |
| 181069 | 181492 | } |
| 181070 | 181493 | |
| 181071 | 181494 | pPhrase->doclist.pList = aOut; |
| 181495 | + assert( p1 && p2 ); | |
| 181072 | 181496 | if( fts3PoslistPhraseMerge(&aOut, nDistance, 0, 1, &p1, &p2) ){ |
| 181073 | 181497 | pPhrase->doclist.bFreeList = 1; |
| 181074 | 181498 | pPhrase->doclist.nList = (int)(aOut - pPhrase->doclist.pList); |
| 181075 | 181499 | }else{ |
| 181076 | 181500 | sqlite3_free(aOut); |
| @@ -181079,10 +181503,11 @@ | ||
| 181079 | 181503 | } |
| 181080 | 181504 | sqlite3_free(aPoslist); |
| 181081 | 181505 | } |
| 181082 | 181506 | } |
| 181083 | 181507 | |
| 181508 | + if( pPhrase->doclist.pList!=aFree ) sqlite3_free(aFree); | |
| 181084 | 181509 | return SQLITE_OK; |
| 181085 | 181510 | } |
| 181086 | 181511 | #endif /* SQLITE_DISABLE_FTS4_DEFERRED */ |
| 181087 | 181512 | |
| 181088 | 181513 | /* |
| @@ -182253,15 +182678,14 @@ | ||
| 182253 | 182678 | ); |
| 182254 | 182679 | break; |
| 182255 | 182680 | |
| 182256 | 182681 | default: { |
| 182257 | 182682 | #ifndef SQLITE_DISABLE_FTS4_DEFERRED |
| 182258 | - if( pCsr->pDeferred | |
| 182259 | - && (pExpr->iDocid==pCsr->iPrevId || pExpr->bDeferred) | |
| 182260 | - ){ | |
| 182683 | + if( pCsr->pDeferred && (pExpr->bDeferred || ( | |
| 182684 | + pExpr->iDocid==pCsr->iPrevId && pExpr->pPhrase->doclist.pList | |
| 182685 | + ))){ | |
| 182261 | 182686 | Fts3Phrase *pPhrase = pExpr->pPhrase; |
| 182262 | - assert( pExpr->bDeferred || pPhrase->doclist.bFreeList==0 ); | |
| 182263 | 182687 | if( pExpr->bDeferred ){ |
| 182264 | 182688 | fts3EvalInvalidatePoslist(pPhrase); |
| 182265 | 182689 | } |
| 182266 | 182690 | *pRc = fts3EvalDeferredPhrase(pCsr, pPhrase); |
| 182267 | 182691 | bHit = (pPhrase->doclist.pList!=0); |
| @@ -204085,11 +204509,11 @@ | ||
| 204085 | 204509 | sqlite3_bind_value(pUp, 2, aData[2]); |
| 204086 | 204510 | } |
| 204087 | 204511 | sqlite3_free(p); |
| 204088 | 204512 | nChange = 1; |
| 204089 | 204513 | } |
| 204090 | - for(jj=1; jj<pRtree->nAux; jj++){ | |
| 204514 | + for(jj=1; jj<nData-2; jj++){ | |
| 204091 | 204515 | nChange++; |
| 204092 | 204516 | sqlite3_bind_value(pUp, jj+2, aData[jj+2]); |
| 204093 | 204517 | } |
| 204094 | 204518 | if( nChange ){ |
| 204095 | 204519 | sqlite3_step(pUp); |
| @@ -212444,15 +212868,16 @@ | ||
| 212444 | 212868 | */ |
| 212445 | 212869 | static int dbpageBegin(sqlite3_vtab *pVtab){ |
| 212446 | 212870 | DbpageTable *pTab = (DbpageTable *)pVtab; |
| 212447 | 212871 | sqlite3 *db = pTab->db; |
| 212448 | 212872 | int i; |
| 212449 | - for(i=0; i<db->nDb; i++){ | |
| 212873 | + int rc = SQLITE_OK; | |
| 212874 | + for(i=0; rc==SQLITE_OK && i<db->nDb; i++){ | |
| 212450 | 212875 | Btree *pBt = db->aDb[i].pBt; |
| 212451 | - if( pBt ) sqlite3BtreeBeginTrans(pBt, 1, 0); | |
| 212876 | + if( pBt ) rc = sqlite3BtreeBeginTrans(pBt, 1, 0); | |
| 212452 | 212877 | } |
| 212453 | - return SQLITE_OK; | |
| 212878 | + return rc; | |
| 212454 | 212879 | } |
| 212455 | 212880 | |
| 212456 | 212881 | |
| 212457 | 212882 | /* |
| 212458 | 212883 | ** Invoke this routine to register the "dbpage" virtual table module |
| @@ -219172,11 +219597,11 @@ | ||
| 219172 | 219597 | static void sqlite3Fts5BufferAppendPrintf(int *, Fts5Buffer*, char *zFmt, ...); |
| 219173 | 219598 | |
| 219174 | 219599 | static char *sqlite3Fts5Mprintf(int *pRc, const char *zFmt, ...); |
| 219175 | 219600 | |
| 219176 | 219601 | #define fts5BufferZero(x) sqlite3Fts5BufferZero(x) |
| 219177 | -#define fts5BufferAppendVarint(a,b,c) sqlite3Fts5BufferAppendVarint(a,b,c) | |
| 219602 | +#define fts5BufferAppendVarint(a,b,c) sqlite3Fts5BufferAppendVarint(a,b,(i64)c) | |
| 219178 | 219603 | #define fts5BufferFree(a) sqlite3Fts5BufferFree(a) |
| 219179 | 219604 | #define fts5BufferAppendBlob(a,b,c,d) sqlite3Fts5BufferAppendBlob(a,b,c,d) |
| 219180 | 219605 | #define fts5BufferSet(a,b,c,d) sqlite3Fts5BufferSet(a,b,c,d) |
| 219181 | 219606 | |
| 219182 | 219607 | #define fts5BufferGrow(pRc,pBuf,nn) ( \ |
| @@ -231049,11 +231474,13 @@ | ||
| 231049 | 231474 | /* Write the rowid. */ |
| 231050 | 231475 | if( pWriter->bFirstRowidInDoclist || pWriter->bFirstRowidInPage ){ |
| 231051 | 231476 | fts5BufferAppendVarint(&p->rc, &pPage->buf, iRowid); |
| 231052 | 231477 | }else{ |
| 231053 | 231478 | assert_nc( p->rc || iRowid>pWriter->iPrevRowid ); |
| 231054 | - fts5BufferAppendVarint(&p->rc, &pPage->buf, iRowid - pWriter->iPrevRowid); | |
| 231479 | + fts5BufferAppendVarint(&p->rc, &pPage->buf, | |
| 231480 | + (u64)iRowid - (u64)pWriter->iPrevRowid | |
| 231481 | + ); | |
| 231055 | 231482 | } |
| 231056 | 231483 | pWriter->iPrevRowid = iRowid; |
| 231057 | 231484 | pWriter->bFirstRowidInDoclist = 0; |
| 231058 | 231485 | pWriter->bFirstRowidInPage = 0; |
| 231059 | 231486 | } |
| @@ -231813,21 +232240,21 @@ | ||
| 231813 | 232240 | return fts5IndexReturn(p); |
| 231814 | 232241 | } |
| 231815 | 232242 | |
| 231816 | 232243 | static void fts5AppendRowid( |
| 231817 | 232244 | Fts5Index *p, |
| 231818 | - i64 iDelta, | |
| 232245 | + u64 iDelta, | |
| 231819 | 232246 | Fts5Iter *pUnused, |
| 231820 | 232247 | Fts5Buffer *pBuf |
| 231821 | 232248 | ){ |
| 231822 | 232249 | UNUSED_PARAM(pUnused); |
| 231823 | 232250 | fts5BufferAppendVarint(&p->rc, pBuf, iDelta); |
| 231824 | 232251 | } |
| 231825 | 232252 | |
| 231826 | 232253 | static void fts5AppendPoslist( |
| 231827 | 232254 | Fts5Index *p, |
| 231828 | - i64 iDelta, | |
| 232255 | + u64 iDelta, | |
| 231829 | 232256 | Fts5Iter *pMulti, |
| 231830 | 232257 | Fts5Buffer *pBuf |
| 231831 | 232258 | ){ |
| 231832 | 232259 | int nData = pMulti->base.nData; |
| 231833 | 232260 | int nByte = nData + 9 + 9 + FTS5_DATA_ZERO_PADDING; |
| @@ -231898,14 +232325,14 @@ | ||
| 231898 | 232325 | fts5BufferSafeAppendVarint(pBuf, iRowid - *piLastRowid); |
| 231899 | 232326 | *piLastRowid = iRowid; |
| 231900 | 232327 | } |
| 231901 | 232328 | #endif |
| 231902 | 232329 | |
| 231903 | -#define fts5MergeAppendDocid(pBuf, iLastRowid, iRowid) { \ | |
| 231904 | - assert( (pBuf)->n!=0 || (iLastRowid)==0 ); \ | |
| 231905 | - fts5BufferSafeAppendVarint((pBuf), (iRowid) - (iLastRowid)); \ | |
| 231906 | - (iLastRowid) = (iRowid); \ | |
| 232330 | +#define fts5MergeAppendDocid(pBuf, iLastRowid, iRowid) { \ | |
| 232331 | + assert( (pBuf)->n!=0 || (iLastRowid)==0 ); \ | |
| 232332 | + fts5BufferSafeAppendVarint((pBuf), (u64)(iRowid) - (u64)(iLastRowid)); \ | |
| 232333 | + (iLastRowid) = (iRowid); \ | |
| 231907 | 232334 | } |
| 231908 | 232335 | |
| 231909 | 232336 | /* |
| 231910 | 232337 | ** Swap the contents of buffer *p1 with that of *p2. |
| 231911 | 232338 | */ |
| @@ -232172,11 +232599,11 @@ | ||
| 232172 | 232599 | Fts5Buffer *aBuf; |
| 232173 | 232600 | int nBuf = 32; |
| 232174 | 232601 | int nMerge = 1; |
| 232175 | 232602 | |
| 232176 | 232603 | void (*xMerge)(Fts5Index*, Fts5Buffer*, int, Fts5Buffer*); |
| 232177 | - void (*xAppend)(Fts5Index*, i64, Fts5Iter*, Fts5Buffer*); | |
| 232604 | + void (*xAppend)(Fts5Index*, u64, Fts5Iter*, Fts5Buffer*); | |
| 232178 | 232605 | if( p->pConfig->eDetail==FTS5_DETAIL_NONE ){ |
| 232179 | 232606 | xMerge = fts5MergeRowidLists; |
| 232180 | 232607 | xAppend = fts5AppendRowid; |
| 232181 | 232608 | }else{ |
| 232182 | 232609 | nMerge = FTS5_MERGE_NLIST-1; |
| @@ -232211,11 +232638,11 @@ | ||
| 232211 | 232638 | fts5MultiIterNext2(p, p1, &dummy) |
| 232212 | 232639 | ){ |
| 232213 | 232640 | Fts5SegIter *pSeg = &p1->aSeg[ p1->aFirst[1].iFirst ]; |
| 232214 | 232641 | p1->xSetOutputs(p1, pSeg); |
| 232215 | 232642 | if( p1->base.nData ){ |
| 232216 | - xAppend(p, p1->base.iRowid-iLastRowid, p1, &doclist); | |
| 232643 | + xAppend(p, (u64)p1->base.iRowid-(u64)iLastRowid, p1, &doclist); | |
| 232217 | 232644 | iLastRowid = p1->base.iRowid; |
| 232218 | 232645 | } |
| 232219 | 232646 | } |
| 232220 | 232647 | fts5MultiIterFree(p1); |
| 232221 | 232648 | } |
| @@ -232259,11 +232686,11 @@ | ||
| 232259 | 232686 | } |
| 232260 | 232687 | } |
| 232261 | 232688 | iLastRowid = 0; |
| 232262 | 232689 | } |
| 232263 | 232690 | |
| 232264 | - xAppend(p, p1->base.iRowid-iLastRowid, p1, &doclist); | |
| 232691 | + xAppend(p, (u64)p1->base.iRowid-(u64)iLastRowid, p1, &doclist); | |
| 232265 | 232692 | iLastRowid = p1->base.iRowid; |
| 232266 | 232693 | } |
| 232267 | 232694 | |
| 232268 | 232695 | assert( (nBuf%nMerge)==0 ); |
| 232269 | 232696 | for(i=0; i<nBuf; i+=nMerge){ |
| @@ -236575,11 +237002,11 @@ | ||
| 236575 | 237002 | int nArg, /* Number of args */ |
| 236576 | 237003 | sqlite3_value **apUnused /* Function arguments */ |
| 236577 | 237004 | ){ |
| 236578 | 237005 | assert( nArg==0 ); |
| 236579 | 237006 | UNUSED_PARAM2(nArg, apUnused); |
| 236580 | - sqlite3_result_text(pCtx, "fts5: 2022-06-15 16:26:37 56c60a35ea457f06db58ec3f694a1ae16fd03e6625da1d7879d63d72bbcb1c62", -1, SQLITE_TRANSIENT); | |
| 237007 | + sqlite3_result_text(pCtx, "fts5: 2022-09-02 21:19:24 da7af290960ab8a04a1f55cdc5eeac36b47fa194edf67f0a05daa4b7f2a4071c", -1, SQLITE_TRANSIENT); | |
| 236581 | 237008 | } |
| 236582 | 237009 | |
| 236583 | 237010 | /* |
| 236584 | 237011 | ** Return true if zName is the extension on one of the shadow tables used |
| 236585 | 237012 | ** by this module. |
| @@ -241246,10 +241673,20 @@ | ||
| 241246 | 241673 | /* #include <assert.h> */ |
| 241247 | 241674 | /* #include <string.h> */ |
| 241248 | 241675 | |
| 241249 | 241676 | #ifndef SQLITE_OMIT_VIRTUALTABLE |
| 241250 | 241677 | |
| 241678 | + | |
| 241679 | +#define STMT_NUM_INTEGER_COLUMN 10 | |
| 241680 | +typedef struct StmtRow StmtRow; | |
| 241681 | +struct StmtRow { | |
| 241682 | + sqlite3_int64 iRowid; /* Rowid value */ | |
| 241683 | + char *zSql; /* column "sql" */ | |
| 241684 | + int aCol[STMT_NUM_INTEGER_COLUMN+1]; /* all other column values */ | |
| 241685 | + StmtRow *pNext; /* Next row to return */ | |
| 241686 | +}; | |
| 241687 | + | |
| 241251 | 241688 | /* stmt_vtab is a subclass of sqlite3_vtab which will |
| 241252 | 241689 | ** serve as the underlying representation of a stmt virtual table |
| 241253 | 241690 | */ |
| 241254 | 241691 | typedef struct stmt_vtab stmt_vtab; |
| 241255 | 241692 | struct stmt_vtab { |
| @@ -241263,12 +241700,11 @@ | ||
| 241263 | 241700 | */ |
| 241264 | 241701 | typedef struct stmt_cursor stmt_cursor; |
| 241265 | 241702 | struct stmt_cursor { |
| 241266 | 241703 | sqlite3_vtab_cursor base; /* Base class - must be first */ |
| 241267 | 241704 | sqlite3 *db; /* Database connection for this cursor */ |
| 241268 | - sqlite3_stmt *pStmt; /* Statement cursor is currently pointing at */ | |
| 241269 | - sqlite3_int64 iRowid; /* The rowid */ | |
| 241705 | + StmtRow *pRow; /* Current row */ | |
| 241270 | 241706 | }; |
| 241271 | 241707 | |
| 241272 | 241708 | /* |
| 241273 | 241709 | ** The stmtConnect() method is invoked to create a new |
| 241274 | 241710 | ** stmt_vtab that describes the stmt virtual table. |
| @@ -241308,11 +241744,11 @@ | ||
| 241308 | 241744 | |
| 241309 | 241745 | rc = sqlite3_declare_vtab(db, |
| 241310 | 241746 | "CREATE TABLE x(sql,ncol,ro,busy,nscan,nsort,naidx,nstep," |
| 241311 | 241747 | "reprep,run,mem)"); |
| 241312 | 241748 | if( rc==SQLITE_OK ){ |
| 241313 | - pNew = sqlite3_malloc( sizeof(*pNew) ); | |
| 241749 | + pNew = sqlite3_malloc64( sizeof(*pNew) ); | |
| 241314 | 241750 | *ppVtab = (sqlite3_vtab*)pNew; |
| 241315 | 241751 | if( pNew==0 ) return SQLITE_NOMEM; |
| 241316 | 241752 | memset(pNew, 0, sizeof(*pNew)); |
| 241317 | 241753 | pNew->db = db; |
| 241318 | 241754 | } |
| @@ -241330,22 +241766,33 @@ | ||
| 241330 | 241766 | /* |
| 241331 | 241767 | ** Constructor for a new stmt_cursor object. |
| 241332 | 241768 | */ |
| 241333 | 241769 | static int stmtOpen(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){ |
| 241334 | 241770 | stmt_cursor *pCur; |
| 241335 | - pCur = sqlite3_malloc( sizeof(*pCur) ); | |
| 241771 | + pCur = sqlite3_malloc64( sizeof(*pCur) ); | |
| 241336 | 241772 | if( pCur==0 ) return SQLITE_NOMEM; |
| 241337 | 241773 | memset(pCur, 0, sizeof(*pCur)); |
| 241338 | 241774 | pCur->db = ((stmt_vtab*)p)->db; |
| 241339 | 241775 | *ppCursor = &pCur->base; |
| 241340 | 241776 | return SQLITE_OK; |
| 241341 | 241777 | } |
| 241778 | + | |
| 241779 | +static void stmtCsrReset(stmt_cursor *pCur){ | |
| 241780 | + StmtRow *pRow = 0; | |
| 241781 | + StmtRow *pNext = 0; | |
| 241782 | + for(pRow=pCur->pRow; pRow; pRow=pNext){ | |
| 241783 | + pNext = pRow->pNext; | |
| 241784 | + sqlite3_free(pRow); | |
| 241785 | + } | |
| 241786 | + pCur->pRow = 0; | |
| 241787 | +} | |
| 241342 | 241788 | |
| 241343 | 241789 | /* |
| 241344 | 241790 | ** Destructor for a stmt_cursor. |
| 241345 | 241791 | */ |
| 241346 | 241792 | static int stmtClose(sqlite3_vtab_cursor *cur){ |
| 241793 | + stmtCsrReset((stmt_cursor*)cur); | |
| 241347 | 241794 | sqlite3_free(cur); |
| 241348 | 241795 | return SQLITE_OK; |
| 241349 | 241796 | } |
| 241350 | 241797 | |
| 241351 | 241798 | |
| @@ -241352,12 +241799,13 @@ | ||
| 241352 | 241799 | /* |
| 241353 | 241800 | ** Advance a stmt_cursor to its next row of output. |
| 241354 | 241801 | */ |
| 241355 | 241802 | static int stmtNext(sqlite3_vtab_cursor *cur){ |
| 241356 | 241803 | stmt_cursor *pCur = (stmt_cursor*)cur; |
| 241357 | - pCur->iRowid++; | |
| 241358 | - pCur->pStmt = sqlite3_next_stmt(pCur->db, pCur->pStmt); | |
| 241804 | + StmtRow *pNext = pCur->pRow->pNext; | |
| 241805 | + sqlite3_free(pCur->pRow); | |
| 241806 | + pCur->pRow = pNext; | |
| 241359 | 241807 | return SQLITE_OK; |
| 241360 | 241808 | } |
| 241361 | 241809 | |
| 241362 | 241810 | /* |
| 241363 | 241811 | ** Return values of columns for the row at which the stmt_cursor |
| @@ -241367,43 +241815,15 @@ | ||
| 241367 | 241815 | sqlite3_vtab_cursor *cur, /* The cursor */ |
| 241368 | 241816 | sqlite3_context *ctx, /* First argument to sqlite3_result_...() */ |
| 241369 | 241817 | int i /* Which column to return */ |
| 241370 | 241818 | ){ |
| 241371 | 241819 | stmt_cursor *pCur = (stmt_cursor*)cur; |
| 241372 | - switch( i ){ | |
| 241373 | - case STMT_COLUMN_SQL: { | |
| 241374 | - sqlite3_result_text(ctx, sqlite3_sql(pCur->pStmt), -1, SQLITE_TRANSIENT); | |
| 241375 | - break; | |
| 241376 | - } | |
| 241377 | - case STMT_COLUMN_NCOL: { | |
| 241378 | - sqlite3_result_int(ctx, sqlite3_column_count(pCur->pStmt)); | |
| 241379 | - break; | |
| 241380 | - } | |
| 241381 | - case STMT_COLUMN_RO: { | |
| 241382 | - sqlite3_result_int(ctx, sqlite3_stmt_readonly(pCur->pStmt)); | |
| 241383 | - break; | |
| 241384 | - } | |
| 241385 | - case STMT_COLUMN_BUSY: { | |
| 241386 | - sqlite3_result_int(ctx, sqlite3_stmt_busy(pCur->pStmt)); | |
| 241387 | - break; | |
| 241388 | - } | |
| 241389 | - default: { | |
| 241390 | - assert( i==STMT_COLUMN_MEM ); | |
| 241391 | - i = SQLITE_STMTSTATUS_MEMUSED + | |
| 241392 | - STMT_COLUMN_NSCAN - SQLITE_STMTSTATUS_FULLSCAN_STEP; | |
| 241393 | - /* Fall thru */ | |
| 241394 | - } | |
| 241395 | - case STMT_COLUMN_NSCAN: | |
| 241396 | - case STMT_COLUMN_NSORT: | |
| 241397 | - case STMT_COLUMN_NAIDX: | |
| 241398 | - case STMT_COLUMN_NSTEP: | |
| 241399 | - case STMT_COLUMN_REPREP: | |
| 241400 | - case STMT_COLUMN_RUN: { | |
| 241401 | - sqlite3_result_int(ctx, sqlite3_stmt_status(pCur->pStmt, | |
| 241402 | - i-STMT_COLUMN_NSCAN+SQLITE_STMTSTATUS_FULLSCAN_STEP, 0)); | |
| 241403 | - break; | |
| 241404 | - } | |
| 241820 | + StmtRow *pRow = pCur->pRow; | |
| 241821 | + if( i==STMT_COLUMN_SQL ){ | |
| 241822 | + sqlite3_result_text(ctx, pRow->zSql, -1, SQLITE_TRANSIENT); | |
| 241823 | + }else{ | |
| 241824 | + sqlite3_result_int(ctx, pRow->aCol[i]); | |
| 241405 | 241825 | } |
| 241406 | 241826 | return SQLITE_OK; |
| 241407 | 241827 | } |
| 241408 | 241828 | |
| 241409 | 241829 | /* |
| @@ -241410,21 +241830,21 @@ | ||
| 241410 | 241830 | ** Return the rowid for the current row. In this implementation, the |
| 241411 | 241831 | ** rowid is the same as the output value. |
| 241412 | 241832 | */ |
| 241413 | 241833 | static int stmtRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){ |
| 241414 | 241834 | stmt_cursor *pCur = (stmt_cursor*)cur; |
| 241415 | - *pRowid = pCur->iRowid; | |
| 241835 | + *pRowid = pCur->pRow->iRowid; | |
| 241416 | 241836 | return SQLITE_OK; |
| 241417 | 241837 | } |
| 241418 | 241838 | |
| 241419 | 241839 | /* |
| 241420 | 241840 | ** Return TRUE if the cursor has been moved off of the last |
| 241421 | 241841 | ** row of output. |
| 241422 | 241842 | */ |
| 241423 | 241843 | static int stmtEof(sqlite3_vtab_cursor *cur){ |
| 241424 | 241844 | stmt_cursor *pCur = (stmt_cursor*)cur; |
| 241425 | - return pCur->pStmt==0; | |
| 241845 | + return pCur->pRow==0; | |
| 241426 | 241846 | } |
| 241427 | 241847 | |
| 241428 | 241848 | /* |
| 241429 | 241849 | ** This method is called to "rewind" the stmt_cursor object back |
| 241430 | 241850 | ** to the first row of output. This method is always called at least |
| @@ -241435,13 +241855,57 @@ | ||
| 241435 | 241855 | sqlite3_vtab_cursor *pVtabCursor, |
| 241436 | 241856 | int idxNum, const char *idxStr, |
| 241437 | 241857 | int argc, sqlite3_value **argv |
| 241438 | 241858 | ){ |
| 241439 | 241859 | stmt_cursor *pCur = (stmt_cursor *)pVtabCursor; |
| 241440 | - pCur->pStmt = 0; | |
| 241441 | - pCur->iRowid = 0; | |
| 241442 | - return stmtNext(pVtabCursor); | |
| 241860 | + sqlite3_stmt *p = 0; | |
| 241861 | + sqlite3_int64 iRowid = 1; | |
| 241862 | + StmtRow **ppRow = 0; | |
| 241863 | + | |
| 241864 | + stmtCsrReset(pCur); | |
| 241865 | + ppRow = &pCur->pRow; | |
| 241866 | + for(p=sqlite3_next_stmt(pCur->db, 0); p; p=sqlite3_next_stmt(pCur->db, p)){ | |
| 241867 | + const char *zSql = sqlite3_sql(p); | |
| 241868 | + sqlite3_int64 nSql = zSql ? strlen(zSql)+1 : 0; | |
| 241869 | + StmtRow *pNew = (StmtRow*)sqlite3_malloc64(sizeof(StmtRow) + nSql); | |
| 241870 | + | |
| 241871 | + if( pNew==0 ) return SQLITE_NOMEM; | |
| 241872 | + memset(pNew, 0, sizeof(StmtRow)); | |
| 241873 | + if( zSql ){ | |
| 241874 | + pNew->zSql = (char*)&pNew[1]; | |
| 241875 | + memcpy(pNew->zSql, zSql, nSql); | |
| 241876 | + } | |
| 241877 | + pNew->aCol[STMT_COLUMN_NCOL] = sqlite3_column_count(p); | |
| 241878 | + pNew->aCol[STMT_COLUMN_RO] = sqlite3_stmt_readonly(p); | |
| 241879 | + pNew->aCol[STMT_COLUMN_BUSY] = sqlite3_stmt_busy(p); | |
| 241880 | + pNew->aCol[STMT_COLUMN_NSCAN] = sqlite3_stmt_status( | |
| 241881 | + p, SQLITE_STMTSTATUS_FULLSCAN_STEP, 0 | |
| 241882 | + ); | |
| 241883 | + pNew->aCol[STMT_COLUMN_NSORT] = sqlite3_stmt_status( | |
| 241884 | + p, SQLITE_STMTSTATUS_SORT, 0 | |
| 241885 | + ); | |
| 241886 | + pNew->aCol[STMT_COLUMN_NAIDX] = sqlite3_stmt_status( | |
| 241887 | + p, SQLITE_STMTSTATUS_AUTOINDEX, 0 | |
| 241888 | + ); | |
| 241889 | + pNew->aCol[STMT_COLUMN_NSTEP] = sqlite3_stmt_status( | |
| 241890 | + p, SQLITE_STMTSTATUS_VM_STEP, 0 | |
| 241891 | + ); | |
| 241892 | + pNew->aCol[STMT_COLUMN_REPREP] = sqlite3_stmt_status( | |
| 241893 | + p, SQLITE_STMTSTATUS_REPREPARE, 0 | |
| 241894 | + ); | |
| 241895 | + pNew->aCol[STMT_COLUMN_RUN] = sqlite3_stmt_status( | |
| 241896 | + p, SQLITE_STMTSTATUS_RUN, 0 | |
| 241897 | + ); | |
| 241898 | + pNew->aCol[STMT_COLUMN_MEM] = sqlite3_stmt_status( | |
| 241899 | + p, SQLITE_STMTSTATUS_MEMUSED, 0 | |
| 241900 | + ); | |
| 241901 | + pNew->iRowid = iRowid++; | |
| 241902 | + *ppRow = pNew; | |
| 241903 | + ppRow = &pNew->pNext; | |
| 241904 | + } | |
| 241905 | + | |
| 241906 | + return SQLITE_OK; | |
| 241443 | 241907 | } |
| 241444 | 241908 | |
| 241445 | 241909 | /* |
| 241446 | 241910 | ** SQLite will invoke this method one or more times while planning a query |
| 241447 | 241911 | ** that uses the stmt virtual table. This routine needs to create |
| 241448 | 241912 |
| --- extsrc/sqlite3.c | |
| +++ extsrc/sqlite3.c | |
| @@ -1,8 +1,8 @@ | |
| 1 | /****************************************************************************** |
| 2 | ** This file is an amalgamation of many separate C source files from SQLite |
| 3 | ** version 3.39.0. By combining all the individual C code files into this |
| 4 | ** single large file, the entire code can be compiled as a single translation |
| 5 | ** unit. This allows many compilers to do optimizations that would not be |
| 6 | ** possible if the files were compiled separately. Performance improvements |
| 7 | ** of 5% or more are commonly seen when SQLite is compiled as a single |
| 8 | ** translation unit. |
| @@ -450,13 +450,13 @@ | |
| 450 | ** |
| 451 | ** See also: [sqlite3_libversion()], |
| 452 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 453 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 454 | */ |
| 455 | #define SQLITE_VERSION "3.39.0" |
| 456 | #define SQLITE_VERSION_NUMBER 3039000 |
| 457 | #define SQLITE_SOURCE_ID "2022-06-15 16:26:37 56c60a35ea457f06db58ec3f694a1ae16fd03e6625da1d7879d63d72bbcb1c62" |
| 458 | |
| 459 | /* |
| 460 | ** CAPI3REF: Run-Time Library Version Numbers |
| 461 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 462 | ** |
| @@ -3728,10 +3728,13 @@ | |
| 3728 | ** |
| 3729 | ** ^(<dt>[SQLITE_OPEN_SHAREDCACHE]</dt> |
| 3730 | ** <dd>The database is opened [shared cache] enabled, overriding |
| 3731 | ** the default shared cache setting provided by |
| 3732 | ** [sqlite3_enable_shared_cache()].)^ |
| 3733 | ** |
| 3734 | ** ^(<dt>[SQLITE_OPEN_PRIVATECACHE]</dt> |
| 3735 | ** <dd>The database is opened [shared cache] disabled, overriding |
| 3736 | ** the default shared cache setting provided by |
| 3737 | ** [sqlite3_enable_shared_cache()].)^ |
| @@ -3743,11 +3746,11 @@ | |
| 3743 | ** connection as soon as the connection is created. In addition to setting |
| 3744 | ** the extended result code mode, this flag also causes [sqlite3_open_v2()] |
| 3745 | ** to return an extended result code.</dd> |
| 3746 | ** |
| 3747 | ** [[OPEN_NOFOLLOW]] ^(<dt>[SQLITE_OPEN_NOFOLLOW]</dt> |
| 3748 | ** <dd>The database filename is not allowed to be a symbolic link</dd> |
| 3749 | ** </dl>)^ |
| 3750 | ** |
| 3751 | ** If the 3rd parameter to sqlite3_open_v2() is not one of the |
| 3752 | ** required combinations shown above optionally combined with other |
| 3753 | ** [SQLITE_OPEN_READONLY | SQLITE_OPEN_* bits] |
| @@ -6586,11 +6589,11 @@ | |
| 6586 | ** CAPI3REF: Return The Schema Name For A Database Connection |
| 6587 | ** METHOD: sqlite3 |
| 6588 | ** |
| 6589 | ** ^The sqlite3_db_name(D,N) interface returns a pointer to the schema name |
| 6590 | ** for the N-th database on database connection D, or a NULL pointer of N is |
| 6591 | ** out of range. An N alue of 0 means the main database file. An N of 1 is |
| 6592 | ** the "temp" schema. Larger values of N correspond to various ATTACH-ed |
| 6593 | ** databases. |
| 6594 | ** |
| 6595 | ** Space to hold the string that is returned by sqlite3_db_name() is managed |
| 6596 | ** by SQLite itself. The string might be deallocated by any operation that |
| @@ -6769,11 +6772,11 @@ | |
| 6769 | ** |
| 6770 | ** ^The sqlite3_autovacuum_pages(D,C,P,X) interface registers a callback |
| 6771 | ** function C that is invoked prior to each autovacuum of the database |
| 6772 | ** file. ^The callback is passed a copy of the generic data pointer (P), |
| 6773 | ** the schema-name of the attached database that is being autovacuumed, |
| 6774 | ** the the size of the database file in pages, the number of free pages, |
| 6775 | ** and the number of bytes per page, respectively. The callback should |
| 6776 | ** return the number of free pages that should be removed by the |
| 6777 | ** autovacuum. ^If the callback returns zero, then no autovacuum happens. |
| 6778 | ** ^If the value returned is greater than or equal to the number of |
| 6779 | ** free pages, then a complete autovacuum happens. |
| @@ -6889,10 +6892,15 @@ | |
| 6889 | ** |
| 6890 | ** ^(This routine enables or disables the sharing of the database cache |
| 6891 | ** and schema data structures between [database connection | connections] |
| 6892 | ** to the same database. Sharing is enabled if the argument is true |
| 6893 | ** and disabled if the argument is false.)^ |
| 6894 | ** |
| 6895 | ** ^Cache sharing is enabled and disabled for an entire process. |
| 6896 | ** This is a change as of SQLite [version 3.5.0] ([dateof:3.5.0]). |
| 6897 | ** In prior versions of SQLite, |
| 6898 | ** sharing was enabled or disabled for each thread separately. |
| @@ -6988,11 +6996,11 @@ | |
| 6988 | ** ^Setting the heap limits to zero disables the heap limiter mechanism. |
| 6989 | ** |
| 6990 | ** ^The soft heap limit may not be greater than the hard heap limit. |
| 6991 | ** ^If the hard heap limit is enabled and if sqlite3_soft_heap_limit(N) |
| 6992 | ** is invoked with a value of N that is greater than the hard heap limit, |
| 6993 | ** the the soft heap limit is set to the value of the hard heap limit. |
| 6994 | ** ^The soft heap limit is automatically enabled whenever the hard heap |
| 6995 | ** limit is enabled. ^When sqlite3_hard_heap_limit64(N) is invoked and |
| 6996 | ** the soft heap limit is outside the range of 1..N, then the soft heap |
| 6997 | ** limit is set to N. ^Invoking sqlite3_soft_heap_limit64(0) when the |
| 6998 | ** hard heap limit is enabled makes the soft heap limit equal to the |
| @@ -9283,11 +9291,11 @@ | |
| 9283 | ** sqlite3_backup_init() is called and before the corresponding call to |
| 9284 | ** sqlite3_backup_finish(). SQLite does not currently check to see |
| 9285 | ** if the application incorrectly accesses the destination [database connection] |
| 9286 | ** and so no error code is reported, but the operations may malfunction |
| 9287 | ** nevertheless. Use of the destination database connection while a |
| 9288 | ** backup is in progress might also also cause a mutex deadlock. |
| 9289 | ** |
| 9290 | ** If running in [shared cache mode], the application must |
| 9291 | ** guarantee that the shared cache used by the destination database |
| 9292 | ** is not accessed while the backup is running. In practice this means |
| 9293 | ** that the application must guarantee that the disk file being |
| @@ -9711,11 +9719,11 @@ | |
| 9711 | ** See the [sqlite3_wal_checkpoint_v2()] documentation for details on the |
| 9712 | ** meaning of each of these checkpoint modes. |
| 9713 | */ |
| 9714 | #define SQLITE_CHECKPOINT_PASSIVE 0 /* Do as much as possible w/o blocking */ |
| 9715 | #define SQLITE_CHECKPOINT_FULL 1 /* Wait for writers, then checkpoint */ |
| 9716 | #define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for for readers */ |
| 9717 | #define SQLITE_CHECKPOINT_TRUNCATE 3 /* Like RESTART but also truncate WAL */ |
| 9718 | |
| 9719 | /* |
| 9720 | ** CAPI3REF: Virtual Table Interface Configuration |
| 9721 | ** |
| @@ -13142,10 +13150,15 @@ | |
| 13142 | /******** End of fts5.h *********/ |
| 13143 | |
| 13144 | /************** End of sqlite3.h *********************************************/ |
| 13145 | /************** Continuing where we left off in sqliteInt.h ******************/ |
| 13146 | |
| 13147 | /* |
| 13148 | ** Include the configuration header output by 'configure' if we're using the |
| 13149 | ** autoconf-based build |
| 13150 | */ |
| 13151 | #if defined(_HAVE_SQLITE_CONFIG_H) && !defined(SQLITECONFIG_H) |
| @@ -15553,67 +15566,67 @@ | |
| 15553 | #define OP_Checkpoint 3 |
| 15554 | #define OP_JournalMode 4 |
| 15555 | #define OP_Vacuum 5 |
| 15556 | #define OP_VFilter 6 /* jump, synopsis: iplan=r[P3] zplan='P4' */ |
| 15557 | #define OP_VUpdate 7 /* synopsis: data=r[P3@P2] */ |
| 15558 | #define OP_Goto 8 /* jump */ |
| 15559 | #define OP_Gosub 9 /* jump */ |
| 15560 | #define OP_InitCoroutine 10 /* jump */ |
| 15561 | #define OP_Yield 11 /* jump */ |
| 15562 | #define OP_MustBeInt 12 /* jump */ |
| 15563 | #define OP_Jump 13 /* jump */ |
| 15564 | #define OP_Once 14 /* jump */ |
| 15565 | #define OP_If 15 /* jump */ |
| 15566 | #define OP_IfNot 16 /* jump */ |
| 15567 | #define OP_IsNullOrType 17 /* jump, synopsis: if typeof(r[P1]) IN (P3,5) goto P2 */ |
| 15568 | #define OP_IfNullRow 18 /* jump, synopsis: if P1.nullRow then r[P3]=NULL, goto P2 */ |
| 15569 | #define OP_Not 19 /* same as TK_NOT, synopsis: r[P2]= !r[P1] */ |
| 15570 | #define OP_SeekLT 20 /* jump, synopsis: key=r[P3@P4] */ |
| 15571 | #define OP_SeekLE 21 /* jump, synopsis: key=r[P3@P4] */ |
| 15572 | #define OP_SeekGE 22 /* jump, synopsis: key=r[P3@P4] */ |
| 15573 | #define OP_SeekGT 23 /* jump, synopsis: key=r[P3@P4] */ |
| 15574 | #define OP_IfNotOpen 24 /* jump, synopsis: if( !csr[P1] ) goto P2 */ |
| 15575 | #define OP_IfNoHope 25 /* jump, synopsis: key=r[P3@P4] */ |
| 15576 | #define OP_NoConflict 26 /* jump, synopsis: key=r[P3@P4] */ |
| 15577 | #define OP_NotFound 27 /* jump, synopsis: key=r[P3@P4] */ |
| 15578 | #define OP_Found 28 /* jump, synopsis: key=r[P3@P4] */ |
| 15579 | #define OP_SeekRowid 29 /* jump, synopsis: intkey=r[P3] */ |
| 15580 | #define OP_NotExists 30 /* jump, synopsis: intkey=r[P3] */ |
| 15581 | #define OP_Last 31 /* jump */ |
| 15582 | #define OP_IfSmaller 32 /* jump */ |
| 15583 | #define OP_SorterSort 33 /* jump */ |
| 15584 | #define OP_Sort 34 /* jump */ |
| 15585 | #define OP_Rewind 35 /* jump */ |
| 15586 | #define OP_SorterNext 36 /* jump */ |
| 15587 | #define OP_Prev 37 /* jump */ |
| 15588 | #define OP_Next 38 /* jump */ |
| 15589 | #define OP_IdxLE 39 /* jump, synopsis: key=r[P3@P4] */ |
| 15590 | #define OP_IdxGT 40 /* jump, synopsis: key=r[P3@P4] */ |
| 15591 | #define OP_IdxLT 41 /* jump, synopsis: key=r[P3@P4] */ |
| 15592 | #define OP_IdxGE 42 /* jump, synopsis: key=r[P3@P4] */ |
| 15593 | #define OP_Or 43 /* same as TK_OR, synopsis: r[P3]=(r[P1] || r[P2]) */ |
| 15594 | #define OP_And 44 /* same as TK_AND, synopsis: r[P3]=(r[P1] && r[P2]) */ |
| 15595 | #define OP_RowSetRead 45 /* jump, synopsis: r[P3]=rowset(P1) */ |
| 15596 | #define OP_RowSetTest 46 /* jump, synopsis: if r[P3] in rowset(P1) goto P2 */ |
| 15597 | #define OP_Program 47 /* jump */ |
| 15598 | #define OP_FkIfZero 48 /* jump, synopsis: if fkctr[P1]==0 goto P2 */ |
| 15599 | #define OP_IfPos 49 /* jump, synopsis: if r[P1]>0 then r[P1]-=P3, goto P2 */ |
| 15600 | #define OP_IsNull 50 /* jump, same as TK_ISNULL, synopsis: if r[P1]==NULL goto P2 */ |
| 15601 | #define OP_NotNull 51 /* jump, same as TK_NOTNULL, synopsis: if r[P1]!=NULL goto P2 */ |
| 15602 | #define OP_Ne 52 /* jump, same as TK_NE, synopsis: IF r[P3]!=r[P1] */ |
| 15603 | #define OP_Eq 53 /* jump, same as TK_EQ, synopsis: IF r[P3]==r[P1] */ |
| 15604 | #define OP_Gt 54 /* jump, same as TK_GT, synopsis: IF r[P3]>r[P1] */ |
| 15605 | #define OP_Le 55 /* jump, same as TK_LE, synopsis: IF r[P3]<=r[P1] */ |
| 15606 | #define OP_Lt 56 /* jump, same as TK_LT, synopsis: IF r[P3]<r[P1] */ |
| 15607 | #define OP_Ge 57 /* jump, same as TK_GE, synopsis: IF r[P3]>=r[P1] */ |
| 15608 | #define OP_ElseEq 58 /* jump, same as TK_ESCAPE */ |
| 15609 | #define OP_IfNotZero 59 /* jump, synopsis: if r[P1]!=0 then r[P1]--, goto P2 */ |
| 15610 | #define OP_DecrJumpZero 60 /* jump, synopsis: if (--r[P1])==0 goto P2 */ |
| 15611 | #define OP_IncrVacuum 61 /* jump */ |
| 15612 | #define OP_VNext 62 /* jump */ |
| 15613 | #define OP_Filter 63 /* jump, synopsis: if key(P3@P4) not in filter(P1) goto P2 */ |
| 15614 | #define OP_Init 64 /* jump, synopsis: Start at P2 */ |
| 15615 | #define OP_PureFunc 65 /* synopsis: r[P3]=func(r[P2@NP]) */ |
| 15616 | #define OP_Function 66 /* synopsis: r[P3]=func(r[P2@NP]) */ |
| 15617 | #define OP_Return 67 |
| 15618 | #define OP_EndCoroutine 68 |
| 15619 | #define OP_HaltIfNull 69 /* synopsis: if r[P3]=null halt */ |
| @@ -15745,17 +15758,17 @@ | |
| 15745 | #define OPFLG_IN3 0x08 /* in3: P3 is an input */ |
| 15746 | #define OPFLG_OUT2 0x10 /* out2: P2 is an output */ |
| 15747 | #define OPFLG_OUT3 0x20 /* out3: P3 is an output */ |
| 15748 | #define OPFLG_INITIALIZER {\ |
| 15749 | /* 0 */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00,\ |
| 15750 | /* 8 */ 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x03,\ |
| 15751 | /* 16 */ 0x03, 0x03, 0x01, 0x12, 0x09, 0x09, 0x09, 0x09,\ |
| 15752 | /* 24 */ 0x01, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x01,\ |
| 15753 | /* 32 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\ |
| 15754 | /* 40 */ 0x01, 0x01, 0x01, 0x26, 0x26, 0x23, 0x0b, 0x01,\ |
| 15755 | /* 48 */ 0x01, 0x03, 0x03, 0x03, 0x0b, 0x0b, 0x0b, 0x0b,\ |
| 15756 | /* 56 */ 0x0b, 0x0b, 0x01, 0x03, 0x03, 0x01, 0x01, 0x01,\ |
| 15757 | /* 64 */ 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x00, 0x10,\ |
| 15758 | /* 72 */ 0x10, 0x10, 0x00, 0x10, 0x00, 0x10, 0x10, 0x00,\ |
| 15759 | /* 80 */ 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x02, 0x02,\ |
| 15760 | /* 88 */ 0x02, 0x00, 0x00, 0x12, 0x1e, 0x20, 0x00, 0x00,\ |
| 15761 | /* 96 */ 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x26, 0x26,\ |
| @@ -15857,10 +15870,11 @@ | |
| 15857 | SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe*, int addr, const char *zP4, int N); |
| 15858 | SQLITE_PRIVATE void sqlite3VdbeAppendP4(Vdbe*, void *pP4, int p4type); |
| 15859 | SQLITE_PRIVATE void sqlite3VdbeSetP4KeyInfo(Parse*, Index*); |
| 15860 | SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe*, int); |
| 15861 | SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe*, int); |
| 15862 | SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Parse*); |
| 15863 | SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe*); |
| 15864 | SQLITE_PRIVATE void sqlite3VdbeReusable(Vdbe*); |
| 15865 | SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe*); |
| 15866 | SQLITE_PRIVATE void sqlite3VdbeMakeReady(Vdbe*,Parse*); |
| @@ -16741,10 +16755,11 @@ | |
| 16741 | void *pMiddle; /* First byte past end of full-size buffers and |
| 16742 | ** the first byte of LOOKASIDE_SMALL buffers */ |
| 16743 | #endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */ |
| 16744 | void *pStart; /* First byte of available memory space */ |
| 16745 | void *pEnd; /* First byte past end of available space */ |
| 16746 | }; |
| 16747 | struct LookasideSlot { |
| 16748 | LookasideSlot *pNext; /* Next buffer in the list of free buffers */ |
| 16749 | }; |
| 16750 | |
| @@ -18189,11 +18204,11 @@ | |
| 18189 | #define EP_xIsSelect 0x001000 /* x.pSelect is valid (otherwise x.pList is) */ |
| 18190 | #define EP_Skip 0x002000 /* Operator does not contribute to affinity */ |
| 18191 | #define EP_Reduced 0x004000 /* Expr struct EXPR_REDUCEDSIZE bytes only */ |
| 18192 | #define EP_Win 0x008000 /* Contains window functions */ |
| 18193 | #define EP_TokenOnly 0x010000 /* Expr struct EXPR_TOKENONLYSIZE bytes only */ |
| 18194 | #define EP_MemToken 0x020000 /* Need to sqlite3DbFree() Expr.zToken */ |
| 18195 | #define EP_IfNullRow 0x040000 /* The TK_IF_NULL_ROW opcode */ |
| 18196 | #define EP_Unlikely 0x080000 /* unlikely() or likelihood() function */ |
| 18197 | #define EP_ConstFunc 0x100000 /* A SQLITE_FUNC_CONSTANT or _SLOCHNG function */ |
| 18198 | #define EP_CanBeNull 0x200000 /* Can be null despite NOT NULL constraint */ |
| 18199 | #define EP_Subquery 0x400000 /* Tree contains a TK_SELECT operator */ |
| @@ -19667,10 +19682,11 @@ | |
| 19667 | SQLITE_PRIVATE void *sqlite3Realloc(void*, u64); |
| 19668 | SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *, void *, u64); |
| 19669 | SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *, void *, u64); |
| 19670 | SQLITE_PRIVATE void sqlite3DbFree(sqlite3*, void*); |
| 19671 | SQLITE_PRIVATE void sqlite3DbFreeNN(sqlite3*, void*); |
| 19672 | SQLITE_PRIVATE int sqlite3MallocSize(const void*); |
| 19673 | SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3*, const void*); |
| 19674 | SQLITE_PRIVATE void *sqlite3PageMalloc(int); |
| 19675 | SQLITE_PRIVATE void sqlite3PageFree(void*); |
| 19676 | SQLITE_PRIVATE void sqlite3MemSetDefault(void); |
| @@ -19777,18 +19793,20 @@ | |
| 19777 | SQLITE_PRIVATE void sqlite3TreeViewColumnList(TreeView*, const Column*, int, u8); |
| 19778 | SQLITE_PRIVATE void sqlite3TreeViewSrcList(TreeView*, const SrcList*); |
| 19779 | SQLITE_PRIVATE void sqlite3TreeViewSelect(TreeView*, const Select*, u8); |
| 19780 | SQLITE_PRIVATE void sqlite3TreeViewWith(TreeView*, const With*, u8); |
| 19781 | SQLITE_PRIVATE void sqlite3TreeViewUpsert(TreeView*, const Upsert*, u8); |
| 19782 | SQLITE_PRIVATE void sqlite3TreeViewDelete(const With*, const SrcList*, const Expr*, |
| 19783 | const ExprList*,const Expr*, const Trigger*); |
| 19784 | SQLITE_PRIVATE void sqlite3TreeViewInsert(const With*, const SrcList*, |
| 19785 | const IdList*, const Select*, const ExprList*, |
| 19786 | int, const Upsert*, const Trigger*); |
| 19787 | SQLITE_PRIVATE void sqlite3TreeViewUpdate(const With*, const SrcList*, const ExprList*, |
| 19788 | const Expr*, int, const ExprList*, const Expr*, |
| 19789 | const Upsert*, const Trigger*); |
| 19790 | #ifndef SQLITE_OMIT_TRIGGER |
| 19791 | SQLITE_PRIVATE void sqlite3TreeViewTriggerStep(TreeView*, const TriggerStep*, u8, u8); |
| 19792 | SQLITE_PRIVATE void sqlite3TreeViewTrigger(TreeView*, const Trigger*, u8, u8); |
| 19793 | #endif |
| 19794 | #ifndef SQLITE_OMIT_WINDOWFUNC |
| @@ -20189,10 +20207,11 @@ | |
| 20189 | SQLITE_PRIVATE int sqlite3FixSrcList(DbFixer*, SrcList*); |
| 20190 | SQLITE_PRIVATE int sqlite3FixSelect(DbFixer*, Select*); |
| 20191 | SQLITE_PRIVATE int sqlite3FixExpr(DbFixer*, Expr*); |
| 20192 | SQLITE_PRIVATE int sqlite3FixTriggerStep(DbFixer*, TriggerStep*); |
| 20193 | SQLITE_PRIVATE int sqlite3RealSameAsInt(double,sqlite3_int64); |
| 20194 | SQLITE_PRIVATE void sqlite3Int64ToText(i64,char*); |
| 20195 | SQLITE_PRIVATE int sqlite3AtoF(const char *z, double*, int, u8); |
| 20196 | SQLITE_PRIVATE int sqlite3GetInt32(const char *, int*); |
| 20197 | SQLITE_PRIVATE int sqlite3GetUInt32(const char*, u32*); |
| 20198 | SQLITE_PRIVATE int sqlite3Atoi(const char*); |
| @@ -21635,13 +21654,10 @@ | |
| 21635 | "OMIT_WSD", |
| 21636 | #endif |
| 21637 | #ifdef SQLITE_OMIT_XFER_OPT |
| 21638 | "OMIT_XFER_OPT", |
| 21639 | #endif |
| 21640 | #ifdef SQLITE_PCACHE_SEPARATE_HEADER |
| 21641 | "PCACHE_SEPARATE_HEADER", |
| 21642 | #endif |
| 21643 | #ifdef SQLITE_PERFORMANCE_TRACE |
| 21644 | "PERFORMANCE_TRACE", |
| 21645 | #endif |
| 21646 | #ifdef SQLITE_POWERSAFE_OVERWRITE |
| 21647 | # if SQLITE_POWERSAFE_OVERWRITE != 1 |
| @@ -22590,11 +22606,11 @@ | |
| 22590 | ** The "sqlite3_stmt" structure pointer that is returned by sqlite3_prepare() |
| 22591 | ** is really a pointer to an instance of this structure. |
| 22592 | */ |
| 22593 | struct Vdbe { |
| 22594 | sqlite3 *db; /* The database connection that owns this statement */ |
| 22595 | Vdbe *pPrev,*pNext; /* Linked list of VDBEs with the same Vdbe.db */ |
| 22596 | Parse *pParse; /* Parsing context used to create this Vdbe */ |
| 22597 | ynVar nVar; /* Number of entries in aVar[] */ |
| 22598 | int nMem; /* Number of memory locations currently allocated */ |
| 22599 | int nCursor; /* Number of slots in apCsr[] */ |
| 22600 | u32 cacheCtr; /* VdbeCursor row cache generation counter */ |
| @@ -23148,10 +23164,12 @@ | |
| 23148 | int i; /* Used to iterate through schemas */ |
| 23149 | int nByte = 0; /* Used to accumulate return value */ |
| 23150 | |
| 23151 | sqlite3BtreeEnterAll(db); |
| 23152 | db->pnBytesFreed = &nByte; |
| 23153 | for(i=0; i<db->nDb; i++){ |
| 23154 | Schema *pSchema = db->aDb[i].pSchema; |
| 23155 | if( ALWAYS(pSchema!=0) ){ |
| 23156 | HashElem *p; |
| 23157 | |
| @@ -23173,10 +23191,11 @@ | |
| 23173 | sqlite3DeleteTable(db, (Table *)sqliteHashData(p)); |
| 23174 | } |
| 23175 | } |
| 23176 | } |
| 23177 | db->pnBytesFreed = 0; |
| 23178 | sqlite3BtreeLeaveAll(db); |
| 23179 | |
| 23180 | *pHighwater = 0; |
| 23181 | *pCurrent = nByte; |
| 23182 | break; |
| @@ -23190,13 +23209,16 @@ | |
| 23190 | case SQLITE_DBSTATUS_STMT_USED: { |
| 23191 | struct Vdbe *pVdbe; /* Used to iterate through VMs */ |
| 23192 | int nByte = 0; /* Used to accumulate return value */ |
| 23193 | |
| 23194 | db->pnBytesFreed = &nByte; |
| 23195 | for(pVdbe=db->pVdbe; pVdbe; pVdbe=pVdbe->pNext){ |
| 23196 | sqlite3VdbeDelete(pVdbe); |
| 23197 | } |
| 23198 | db->pnBytesFreed = 0; |
| 23199 | |
| 23200 | *pHighwater = 0; /* IMP: R-64479-57858 */ |
| 23201 | *pCurrent = nByte; |
| 23202 | |
| @@ -23528,11 +23550,11 @@ | |
| 23528 | X1 = 36525*(Y+4716)/100; |
| 23529 | X2 = 306001*(M+1)/10000; |
| 23530 | p->iJD = (sqlite3_int64)((X1 + X2 + D + B - 1524.5 ) * 86400000); |
| 23531 | p->validJD = 1; |
| 23532 | if( p->validHMS ){ |
| 23533 | p->iJD += p->h*3600000 + p->m*60000 + (sqlite3_int64)(p->s*1000); |
| 23534 | if( p->validTZ ){ |
| 23535 | p->iJD -= p->tz*60000; |
| 23536 | p->validYMD = 0; |
| 23537 | p->validHMS = 0; |
| 23538 | p->validTZ = 0; |
| @@ -24037,11 +24059,11 @@ | |
| 24037 | ** weekday N where 0==Sunday, 1==Monday, and so forth. If the |
| 24038 | ** date is already on the appropriate weekday, this is a no-op. |
| 24039 | */ |
| 24040 | if( sqlite3_strnicmp(z, "weekday ", 8)==0 |
| 24041 | && sqlite3AtoF(&z[8], &r, sqlite3Strlen30(&z[8]), SQLITE_UTF8)>0 |
| 24042 | && (n=(int)r)==r && n>=0 && r<7 ){ |
| 24043 | sqlite3_int64 Z; |
| 24044 | computeYMD_HMS(p); |
| 24045 | p->validTZ = 0; |
| 24046 | p->validJD = 0; |
| 24047 | computeJD(p); |
| @@ -24835,10 +24857,11 @@ | |
| 24835 | DO_OS_MALLOC_TEST(0); |
| 24836 | /* 0x87f7f is a mask of SQLITE_OPEN_ flags that are valid to be passed |
| 24837 | ** down into the VFS layer. Some SQLITE_OPEN_ flags (for example, |
| 24838 | ** SQLITE_OPEN_FULLMUTEX or SQLITE_OPEN_SHAREDCACHE) are blocked before |
| 24839 | ** reaching the VFS. */ |
| 24840 | rc = pVfs->xOpen(pVfs, zPath, pFile, flags & 0x1087f7f, pFlagsOut); |
| 24841 | assert( rc==SQLITE_OK || pFile->pMethods==0 ); |
| 24842 | return rc; |
| 24843 | } |
| 24844 | SQLITE_PRIVATE int sqlite3OsDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync){ |
| @@ -29100,11 +29123,11 @@ | |
| 29100 | /* |
| 29101 | ** TRUE if p is a lookaside memory allocation from db |
| 29102 | */ |
| 29103 | #ifndef SQLITE_OMIT_LOOKASIDE |
| 29104 | static int isLookaside(sqlite3 *db, const void *p){ |
| 29105 | return SQLITE_WITHIN(p, db->lookaside.pStart, db->lookaside.pEnd); |
| 29106 | } |
| 29107 | #else |
| 29108 | #define isLookaside(A,B) 0 |
| 29109 | #endif |
| 29110 | |
| @@ -29124,22 +29147,20 @@ | |
| 29124 | #endif |
| 29125 | } |
| 29126 | SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3 *db, const void *p){ |
| 29127 | assert( p!=0 ); |
| 29128 | #ifdef SQLITE_DEBUG |
| 29129 | if( db==0 || !isLookaside(db,p) ){ |
| 29130 | if( db==0 ){ |
| 29131 | assert( sqlite3MemdebugNoType(p, (u8)~MEMTYPE_HEAP) ); |
| 29132 | assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) ); |
| 29133 | }else{ |
| 29134 | assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); |
| 29135 | assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); |
| 29136 | } |
| 29137 | } |
| 29138 | #endif |
| 29139 | if( db ){ |
| 29140 | if( ((uptr)p)<(uptr)(db->lookaside.pEnd) ){ |
| 29141 | #ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE |
| 29142 | if( ((uptr)p)>=(uptr)(db->lookaside.pMiddle) ){ |
| 29143 | assert( sqlite3_mutex_held(db->mutex) ); |
| 29144 | return LOOKASIDE_SMALL; |
| 29145 | } |
| @@ -29191,18 +29212,15 @@ | |
| 29191 | */ |
| 29192 | SQLITE_PRIVATE void sqlite3DbFreeNN(sqlite3 *db, void *p){ |
| 29193 | assert( db==0 || sqlite3_mutex_held(db->mutex) ); |
| 29194 | assert( p!=0 ); |
| 29195 | if( db ){ |
| 29196 | if( db->pnBytesFreed ){ |
| 29197 | measureAllocationSize(db, p); |
| 29198 | return; |
| 29199 | } |
| 29200 | if( ((uptr)p)<(uptr)(db->lookaside.pEnd) ){ |
| 29201 | #ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE |
| 29202 | if( ((uptr)p)>=(uptr)(db->lookaside.pMiddle) ){ |
| 29203 | LookasideSlot *pBuf = (LookasideSlot*)p; |
| 29204 | #ifdef SQLITE_DEBUG |
| 29205 | memset(p, 0xaa, LOOKASIDE_SMALL); /* Trash freed content */ |
| 29206 | #endif |
| 29207 | pBuf->pNext = db->lookaside.pSmallFree; |
| 29208 | db->lookaside.pSmallFree = pBuf; |
| @@ -29209,24 +29227,66 @@ | |
| 29209 | return; |
| 29210 | } |
| 29211 | #endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */ |
| 29212 | if( ((uptr)p)>=(uptr)(db->lookaside.pStart) ){ |
| 29213 | LookasideSlot *pBuf = (LookasideSlot*)p; |
| 29214 | #ifdef SQLITE_DEBUG |
| 29215 | memset(p, 0xaa, db->lookaside.szTrue); /* Trash freed content */ |
| 29216 | #endif |
| 29217 | pBuf->pNext = db->lookaside.pFree; |
| 29218 | db->lookaside.pFree = pBuf; |
| 29219 | return; |
| 29220 | } |
| 29221 | } |
| 29222 | } |
| 29223 | assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); |
| 29224 | assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); |
| 29225 | assert( db!=0 || sqlite3MemdebugNoType(p, MEMTYPE_LOOKASIDE) ); |
| 29226 | sqlite3MemdebugSetType(p, MEMTYPE_HEAP); |
| 29227 | sqlite3_free(p); |
| 29228 | } |
| 29229 | SQLITE_PRIVATE void sqlite3DbFree(sqlite3 *db, void *p){ |
| 29230 | assert( db==0 || sqlite3_mutex_held(db->mutex) ); |
| 29231 | if( p ) sqlite3DbFreeNN(db, p); |
| 29232 | } |
| @@ -29559,12 +29619,17 @@ | |
| 29559 | if( db->nVdbeExec>0 ){ |
| 29560 | AtomicStore(&db->u1.isInterrupted, 1); |
| 29561 | } |
| 29562 | DisableLookaside; |
| 29563 | if( db->pParse ){ |
| 29564 | sqlite3ErrorMsg(db->pParse, "out of memory"); |
| 29565 | db->pParse->rc = SQLITE_NOMEM_BKPT; |
| 29566 | } |
| 29567 | } |
| 29568 | return 0; |
| 29569 | } |
| 29570 | |
| @@ -30426,12 +30491,12 @@ | |
| 30426 | } |
| 30427 | break; |
| 30428 | case etSQLESCAPE: /* %q: Escape ' characters */ |
| 30429 | case etSQLESCAPE2: /* %Q: Escape ' and enclose in '...' */ |
| 30430 | case etSQLESCAPE3: { /* %w: Escape " characters */ |
| 30431 | int i, j, k, n, isnull; |
| 30432 | int needQuote; |
| 30433 | char ch; |
| 30434 | char q = ((xtype==etSQLESCAPE3)?'"':'\''); /* Quote character */ |
| 30435 | char *escarg; |
| 30436 | |
| 30437 | if( bArgList ){ |
| @@ -31073,11 +31138,11 @@ | |
| 31073 | */ |
| 31074 | SQLITE_PRIVATE void sqlite3TreeViewLine(TreeView *p, const char *zFormat, ...){ |
| 31075 | va_list ap; |
| 31076 | int i; |
| 31077 | StrAccum acc; |
| 31078 | char zBuf[500]; |
| 31079 | sqlite3StrAccumInit(&acc, 0, zBuf, sizeof(zBuf), 0); |
| 31080 | if( p ){ |
| 31081 | for(i=0; i<p->iLevel && i<(int)sizeof(p->bLine)-1; i++){ |
| 31082 | sqlite3_str_append(&acc, p->bLine[i] ? "| " : " ", 4); |
| 31083 | } |
| @@ -31115,12 +31180,12 @@ | |
| 31115 | int i; |
| 31116 | sqlite3TreeViewPush(&pView, moreToFollow); |
| 31117 | sqlite3TreeViewLine(pView, "COLUMNS"); |
| 31118 | for(i=0; i<nCol; i++){ |
| 31119 | u16 flg = aCol[i].colFlags; |
| 31120 | int moreToFollow = i<(nCol - 1); |
| 31121 | sqlite3TreeViewPush(&pView, moreToFollow); |
| 31122 | sqlite3TreeViewLine(pView, 0); |
| 31123 | printf(" %s", aCol[i].zCnName); |
| 31124 | switch( aCol[i].eCType ){ |
| 31125 | case COLTYPE_ANY: printf(" ANY"); break; |
| 31126 | case COLTYPE_BLOB: printf(" BLOB"); break; |
| @@ -31204,11 +31269,11 @@ | |
| 31204 | if( pSrc==0 ) return; |
| 31205 | for(i=0; i<pSrc->nSrc; i++){ |
| 31206 | const SrcItem *pItem = &pSrc->a[i]; |
| 31207 | StrAccum x; |
| 31208 | int n = 0; |
| 31209 | char zLine[100]; |
| 31210 | sqlite3StrAccumInit(&x, 0, zLine, sizeof(zLine), 0); |
| 31211 | x.printfFlags |= SQLITE_PRINTF_INTERNAL; |
| 31212 | sqlite3_str_appendf(&x, "{%d:*} %!S", pItem->iCursor, pItem); |
| 31213 | if( pItem->pTab ){ |
| 31214 | sqlite3_str_appendf(&x, " tab=%Q nCol=%d ptr=%p used=%llx", |
| @@ -31247,11 +31312,11 @@ | |
| 31247 | if( pItem->pSelect ){ |
| 31248 | if( pItem->pTab ){ |
| 31249 | Table *pTab = pItem->pTab; |
| 31250 | sqlite3TreeViewColumnList(pView, pTab->aCol, pTab->nCol, 1); |
| 31251 | } |
| 31252 | assert( pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) ); |
| 31253 | sqlite3TreeViewSelect(pView, pItem->pSelect, (--n)>0); |
| 31254 | } |
| 31255 | if( pItem->fg.isTabFunc ){ |
| 31256 | sqlite3TreeViewExprList(pView, pItem->u1.pFuncArg, 0, "func-args:"); |
| 31257 | } |
| @@ -32014,10 +32079,11 @@ | |
| 32014 | pUpsert = pUpsert->pNextUpsert; |
| 32015 | } |
| 32016 | sqlite3TreeViewPop(&pView); |
| 32017 | } |
| 32018 | |
| 32019 | /* |
| 32020 | ** Generate a human-readable diagram of the data structure that go |
| 32021 | ** into generating an DELETE statement. |
| 32022 | */ |
| 32023 | SQLITE_PRIVATE void sqlite3TreeViewDelete( |
| @@ -32067,11 +32133,13 @@ | |
| 32067 | if( pTrigger ){ |
| 32068 | sqlite3TreeViewTrigger(pView, pTrigger, (--n)>0, 1); |
| 32069 | } |
| 32070 | sqlite3TreeViewPop(&pView); |
| 32071 | } |
| 32072 | |
| 32073 | /* |
| 32074 | ** Generate a human-readable diagram of the data structure that go |
| 32075 | ** into generating an INSERT statement. |
| 32076 | */ |
| 32077 | SQLITE_PRIVATE void sqlite3TreeViewInsert( |
| @@ -32135,11 +32203,13 @@ | |
| 32135 | if( pTrigger ){ |
| 32136 | sqlite3TreeViewTrigger(pView, pTrigger, (--n)>0, 1); |
| 32137 | } |
| 32138 | sqlite3TreeViewPop(&pView); |
| 32139 | } |
| 32140 | |
| 32141 | /* |
| 32142 | ** Generate a human-readable diagram of the data structure that go |
| 32143 | ** into generating an UPDATE statement. |
| 32144 | */ |
| 32145 | SQLITE_PRIVATE void sqlite3TreeViewUpdate( |
| @@ -32211,10 +32281,11 @@ | |
| 32211 | if( pTrigger ){ |
| 32212 | sqlite3TreeViewTrigger(pView, pTrigger, (--n)>0, 1); |
| 32213 | } |
| 32214 | sqlite3TreeViewPop(&pView); |
| 32215 | } |
| 32216 | |
| 32217 | #ifndef SQLITE_OMIT_TRIGGER |
| 32218 | /* |
| 32219 | ** Show a human-readable graph of a TriggerStep |
| 32220 | */ |
| @@ -32324,20 +32395,45 @@ | |
| 32324 | |
| 32325 | /* All threads share a single random number generator. |
| 32326 | ** This structure is the current state of the generator. |
| 32327 | */ |
| 32328 | static SQLITE_WSD struct sqlite3PrngType { |
| 32329 | unsigned char isInit; /* True if initialized */ |
| 32330 | unsigned char i, j; /* State variables */ |
| 32331 | unsigned char s[256]; /* State variables */ |
| 32332 | } sqlite3Prng; |
| 32333 | |
| 32334 | /* |
| 32335 | ** Return N random bytes. |
| 32336 | */ |
| 32337 | SQLITE_API void sqlite3_randomness(int N, void *pBuf){ |
| 32338 | unsigned char t; |
| 32339 | unsigned char *zBuf = pBuf; |
| 32340 | |
| 32341 | /* The "wsdPrng" macro will resolve to the pseudo-random number generator |
| 32342 | ** state vector. If writable static data is unsupported on the target, |
| 32343 | ** we have to locate the state vector at run-time. In the more common |
| @@ -32363,57 +32459,50 @@ | |
| 32363 | mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_PRNG); |
| 32364 | #endif |
| 32365 | |
| 32366 | sqlite3_mutex_enter(mutex); |
| 32367 | if( N<=0 || pBuf==0 ){ |
| 32368 | wsdPrng.isInit = 0; |
| 32369 | sqlite3_mutex_leave(mutex); |
| 32370 | return; |
| 32371 | } |
| 32372 | |
| 32373 | /* Initialize the state of the random number generator once, |
| 32374 | ** the first time this routine is called. The seed value does |
| 32375 | ** not need to contain a lot of randomness since we are not |
| 32376 | ** trying to do secure encryption or anything like that... |
| 32377 | ** |
| 32378 | ** Nothing in this file or anywhere else in SQLite does any kind of |
| 32379 | ** encryption. The RC4 algorithm is being used as a PRNG (pseudo-random |
| 32380 | ** number generator) not as an encryption device. |
| 32381 | */ |
| 32382 | if( !wsdPrng.isInit ){ |
| 32383 | sqlite3_vfs *pVfs = sqlite3_vfs_find(0); |
| 32384 | int i; |
| 32385 | char k[256]; |
| 32386 | wsdPrng.j = 0; |
| 32387 | wsdPrng.i = 0; |
| 32388 | if( NEVER(pVfs==0) ){ |
| 32389 | memset(k, 0, sizeof(k)); |
| 32390 | }else{ |
| 32391 | sqlite3OsRandomness(pVfs, 256, k); |
| 32392 | } |
| 32393 | for(i=0; i<256; i++){ |
| 32394 | wsdPrng.s[i] = (u8)i; |
| 32395 | } |
| 32396 | for(i=0; i<256; i++){ |
| 32397 | wsdPrng.j += wsdPrng.s[i] + k[i]; |
| 32398 | t = wsdPrng.s[wsdPrng.j]; |
| 32399 | wsdPrng.s[wsdPrng.j] = wsdPrng.s[i]; |
| 32400 | wsdPrng.s[i] = t; |
| 32401 | } |
| 32402 | wsdPrng.isInit = 1; |
| 32403 | } |
| 32404 | |
| 32405 | assert( N>0 ); |
| 32406 | do{ |
| 32407 | wsdPrng.i++; |
| 32408 | t = wsdPrng.s[wsdPrng.i]; |
| 32409 | wsdPrng.j += t; |
| 32410 | wsdPrng.s[wsdPrng.i] = wsdPrng.s[wsdPrng.j]; |
| 32411 | wsdPrng.s[wsdPrng.j] = t; |
| 32412 | t += wsdPrng.s[wsdPrng.i]; |
| 32413 | *(zBuf++) = wsdPrng.s[t]; |
| 32414 | }while( --N ); |
| 32415 | sqlite3_mutex_leave(mutex); |
| 32416 | } |
| 32417 | |
| 32418 | #ifndef SQLITE_UNTESTABLE |
| 32419 | /* |
| @@ -33449,11 +33538,11 @@ | |
| 33449 | SQLITE_PRIVATE void sqlite3ErrorMsg(Parse *pParse, const char *zFormat, ...){ |
| 33450 | char *zMsg; |
| 33451 | va_list ap; |
| 33452 | sqlite3 *db = pParse->db; |
| 33453 | assert( db!=0 ); |
| 33454 | assert( db->pParse==pParse ); |
| 33455 | db->errByteOffset = -2; |
| 33456 | va_start(ap, zFormat); |
| 33457 | zMsg = sqlite3VMPrintf(db, zFormat, ap); |
| 33458 | va_end(ap); |
| 33459 | if( db->errByteOffset<-1 ) db->errByteOffset = -1; |
| @@ -35267,67 +35356,67 @@ | |
| 35267 | /* 3 */ "Checkpoint" OpHelp(""), |
| 35268 | /* 4 */ "JournalMode" OpHelp(""), |
| 35269 | /* 5 */ "Vacuum" OpHelp(""), |
| 35270 | /* 6 */ "VFilter" OpHelp("iplan=r[P3] zplan='P4'"), |
| 35271 | /* 7 */ "VUpdate" OpHelp("data=r[P3@P2]"), |
| 35272 | /* 8 */ "Goto" OpHelp(""), |
| 35273 | /* 9 */ "Gosub" OpHelp(""), |
| 35274 | /* 10 */ "InitCoroutine" OpHelp(""), |
| 35275 | /* 11 */ "Yield" OpHelp(""), |
| 35276 | /* 12 */ "MustBeInt" OpHelp(""), |
| 35277 | /* 13 */ "Jump" OpHelp(""), |
| 35278 | /* 14 */ "Once" OpHelp(""), |
| 35279 | /* 15 */ "If" OpHelp(""), |
| 35280 | /* 16 */ "IfNot" OpHelp(""), |
| 35281 | /* 17 */ "IsNullOrType" OpHelp("if typeof(r[P1]) IN (P3,5) goto P2"), |
| 35282 | /* 18 */ "IfNullRow" OpHelp("if P1.nullRow then r[P3]=NULL, goto P2"), |
| 35283 | /* 19 */ "Not" OpHelp("r[P2]= !r[P1]"), |
| 35284 | /* 20 */ "SeekLT" OpHelp("key=r[P3@P4]"), |
| 35285 | /* 21 */ "SeekLE" OpHelp("key=r[P3@P4]"), |
| 35286 | /* 22 */ "SeekGE" OpHelp("key=r[P3@P4]"), |
| 35287 | /* 23 */ "SeekGT" OpHelp("key=r[P3@P4]"), |
| 35288 | /* 24 */ "IfNotOpen" OpHelp("if( !csr[P1] ) goto P2"), |
| 35289 | /* 25 */ "IfNoHope" OpHelp("key=r[P3@P4]"), |
| 35290 | /* 26 */ "NoConflict" OpHelp("key=r[P3@P4]"), |
| 35291 | /* 27 */ "NotFound" OpHelp("key=r[P3@P4]"), |
| 35292 | /* 28 */ "Found" OpHelp("key=r[P3@P4]"), |
| 35293 | /* 29 */ "SeekRowid" OpHelp("intkey=r[P3]"), |
| 35294 | /* 30 */ "NotExists" OpHelp("intkey=r[P3]"), |
| 35295 | /* 31 */ "Last" OpHelp(""), |
| 35296 | /* 32 */ "IfSmaller" OpHelp(""), |
| 35297 | /* 33 */ "SorterSort" OpHelp(""), |
| 35298 | /* 34 */ "Sort" OpHelp(""), |
| 35299 | /* 35 */ "Rewind" OpHelp(""), |
| 35300 | /* 36 */ "SorterNext" OpHelp(""), |
| 35301 | /* 37 */ "Prev" OpHelp(""), |
| 35302 | /* 38 */ "Next" OpHelp(""), |
| 35303 | /* 39 */ "IdxLE" OpHelp("key=r[P3@P4]"), |
| 35304 | /* 40 */ "IdxGT" OpHelp("key=r[P3@P4]"), |
| 35305 | /* 41 */ "IdxLT" OpHelp("key=r[P3@P4]"), |
| 35306 | /* 42 */ "IdxGE" OpHelp("key=r[P3@P4]"), |
| 35307 | /* 43 */ "Or" OpHelp("r[P3]=(r[P1] || r[P2])"), |
| 35308 | /* 44 */ "And" OpHelp("r[P3]=(r[P1] && r[P2])"), |
| 35309 | /* 45 */ "RowSetRead" OpHelp("r[P3]=rowset(P1)"), |
| 35310 | /* 46 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"), |
| 35311 | /* 47 */ "Program" OpHelp(""), |
| 35312 | /* 48 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"), |
| 35313 | /* 49 */ "IfPos" OpHelp("if r[P1]>0 then r[P1]-=P3, goto P2"), |
| 35314 | /* 50 */ "IsNull" OpHelp("if r[P1]==NULL goto P2"), |
| 35315 | /* 51 */ "NotNull" OpHelp("if r[P1]!=NULL goto P2"), |
| 35316 | /* 52 */ "Ne" OpHelp("IF r[P3]!=r[P1]"), |
| 35317 | /* 53 */ "Eq" OpHelp("IF r[P3]==r[P1]"), |
| 35318 | /* 54 */ "Gt" OpHelp("IF r[P3]>r[P1]"), |
| 35319 | /* 55 */ "Le" OpHelp("IF r[P3]<=r[P1]"), |
| 35320 | /* 56 */ "Lt" OpHelp("IF r[P3]<r[P1]"), |
| 35321 | /* 57 */ "Ge" OpHelp("IF r[P3]>=r[P1]"), |
| 35322 | /* 58 */ "ElseEq" OpHelp(""), |
| 35323 | /* 59 */ "IfNotZero" OpHelp("if r[P1]!=0 then r[P1]--, goto P2"), |
| 35324 | /* 60 */ "DecrJumpZero" OpHelp("if (--r[P1])==0 goto P2"), |
| 35325 | /* 61 */ "IncrVacuum" OpHelp(""), |
| 35326 | /* 62 */ "VNext" OpHelp(""), |
| 35327 | /* 63 */ "Filter" OpHelp("if key(P3@P4) not in filter(P1) goto P2"), |
| 35328 | /* 64 */ "Init" OpHelp("Start at P2"), |
| 35329 | /* 65 */ "PureFunc" OpHelp("r[P3]=func(r[P2@NP])"), |
| 35330 | /* 66 */ "Function" OpHelp("r[P3]=func(r[P2@NP])"), |
| 35331 | /* 67 */ "Return" OpHelp(""), |
| 35332 | /* 68 */ "EndCoroutine" OpHelp(""), |
| 35333 | /* 69 */ "HaltIfNull" OpHelp("if r[P3]=null halt"), |
| @@ -41310,30 +41399,39 @@ | |
| 41310 | ** pVfs->mxPathname bytes. |
| 41311 | */ |
| 41312 | static int unixGetTempname(int nBuf, char *zBuf){ |
| 41313 | const char *zDir; |
| 41314 | int iLimit = 0; |
| 41315 | |
| 41316 | /* It's odd to simulate an io-error here, but really this is just |
| 41317 | ** using the io-error infrastructure to test that SQLite handles this |
| 41318 | ** function failing. |
| 41319 | */ |
| 41320 | zBuf[0] = 0; |
| 41321 | SimulateIOError( return SQLITE_IOERR ); |
| 41322 | |
| 41323 | zDir = unixTempFileDir(); |
| 41324 | if( zDir==0 ) return SQLITE_IOERR_GETTEMPPATH; |
| 41325 | do{ |
| 41326 | u64 r; |
| 41327 | sqlite3_randomness(sizeof(r), &r); |
| 41328 | assert( nBuf>2 ); |
| 41329 | zBuf[nBuf-2] = 0; |
| 41330 | sqlite3_snprintf(nBuf, zBuf, "%s/"SQLITE_TEMP_FILE_PREFIX"%llx%c", |
| 41331 | zDir, r, 0); |
| 41332 | if( zBuf[nBuf-2]!=0 || (iLimit++)>10 ) return SQLITE_ERROR; |
| 41333 | }while( osAccess(zBuf,0)==0 ); |
| 41334 | return SQLITE_OK; |
| 41335 | } |
| 41336 | |
| 41337 | #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__) |
| 41338 | /* |
| 41339 | ** Routine to transform a unixFile into a proxy-locking unixFile. |
| @@ -43504,11 +43602,16 @@ | |
| 43504 | ** correctly. See ticket [bb3a86e890c8e96ab] */ |
| 43505 | assert( ArraySize(aSyscall)==29 ); |
| 43506 | |
| 43507 | /* Register all VFSes defined in the aVfs[] array */ |
| 43508 | for(i=0; i<(sizeof(aVfs)/sizeof(sqlite3_vfs)); i++){ |
| 43509 | sqlite3_vfs_register(&aVfs[i], i==0); |
| 43510 | } |
| 43511 | unixBigLock = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1); |
| 43512 | |
| 43513 | #ifndef SQLITE_OMIT_WAL |
| 43514 | /* Validate lock assumptions */ |
| @@ -45472,10 +45575,11 @@ | |
| 45472 | char **ppDirectory = 0; |
| 45473 | #ifndef SQLITE_OMIT_AUTOINIT |
| 45474 | int rc = sqlite3_initialize(); |
| 45475 | if( rc ) return rc; |
| 45476 | #endif |
| 45477 | if( type==SQLITE_WIN32_DATA_DIRECTORY_TYPE ){ |
| 45478 | ppDirectory = &sqlite3_data_directory; |
| 45479 | }else if( type==SQLITE_WIN32_TEMP_DIRECTORY_TYPE ){ |
| 45480 | ppDirectory = &sqlite3_temp_directory; |
| 45481 | } |
| @@ -45486,18 +45590,23 @@ | |
| 45486 | if( ppDirectory ){ |
| 45487 | char *zCopy = 0; |
| 45488 | if( zValue && zValue[0] ){ |
| 45489 | zCopy = sqlite3_mprintf("%s", zValue); |
| 45490 | if ( zCopy==0 ){ |
| 45491 | return SQLITE_NOMEM_BKPT; |
| 45492 | } |
| 45493 | } |
| 45494 | sqlite3_free(*ppDirectory); |
| 45495 | *ppDirectory = zCopy; |
| 45496 | return SQLITE_OK; |
| 45497 | } |
| 45498 | return SQLITE_ERROR; |
| 45499 | } |
| 45500 | |
| 45501 | /* |
| 45502 | ** This function is the same as sqlite3_win32_set_directory (below); however, |
| 45503 | ** it accepts a UTF-16 string. |
| @@ -48266,10 +48375,22 @@ | |
| 48266 | } |
| 48267 | } |
| 48268 | } |
| 48269 | return 0; |
| 48270 | } |
| 48271 | |
| 48272 | /* |
| 48273 | ** Create a temporary file name and store the resulting pointer into pzBuf. |
| 48274 | ** The pointer returned in pzBuf must be freed via sqlite3_free(). |
| 48275 | */ |
| @@ -48303,24 +48424,27 @@ | |
| 48303 | ** has been explicitly set by the application; otherwise, use the one |
| 48304 | ** configured by the operating system. |
| 48305 | */ |
| 48306 | nDir = nMax - (nPre + 15); |
| 48307 | assert( nDir>0 ); |
| 48308 | if( sqlite3_temp_directory ){ |
| 48309 | int nDirLen = sqlite3Strlen30(sqlite3_temp_directory); |
| 48310 | if( nDirLen>0 ){ |
| 48311 | if( !winIsDirSep(sqlite3_temp_directory[nDirLen-1]) ){ |
| 48312 | nDirLen++; |
| 48313 | } |
| 48314 | if( nDirLen>nDir ){ |
| 48315 | sqlite3_free(zBuf); |
| 48316 | OSTRACE(("TEMP-FILENAME rc=SQLITE_ERROR\n")); |
| 48317 | return winLogError(SQLITE_ERROR, 0, "winGetTempname1", 0); |
| 48318 | } |
| 48319 | sqlite3_snprintf(nMax, zBuf, "%s", sqlite3_temp_directory); |
| 48320 | } |
| 48321 | } |
| 48322 | #if defined(__CYGWIN__) |
| 48323 | else{ |
| 48324 | static const char *azDirs[] = { |
| 48325 | 0, /* getenv("SQLITE_TMPDIR") */ |
| 48326 | 0, /* getenv("TMPDIR") */ |
| @@ -49105,11 +49229,11 @@ | |
| 49105 | /* |
| 49106 | ** Turn a relative pathname into a full pathname. Write the full |
| 49107 | ** pathname into zOut[]. zOut[] will be at least pVfs->mxPathname |
| 49108 | ** bytes in size. |
| 49109 | */ |
| 49110 | static int winFullPathname( |
| 49111 | sqlite3_vfs *pVfs, /* Pointer to vfs object */ |
| 49112 | const char *zRelative, /* Possibly relative input path */ |
| 49113 | int nFull, /* Size of output buffer in bytes */ |
| 49114 | char *zFull /* Output buffer */ |
| 49115 | ){ |
| @@ -49283,10 +49407,23 @@ | |
| 49283 | return SQLITE_OK; |
| 49284 | }else{ |
| 49285 | return SQLITE_IOERR_NOMEM_BKPT; |
| 49286 | } |
| 49287 | #endif |
| 49288 | } |
| 49289 | |
| 49290 | #ifndef SQLITE_OMIT_LOAD_EXTENSION |
| 49291 | /* |
| 49292 | ** Interfaces for opening a shared library, finding entry points |
| @@ -51072,39 +51209,58 @@ | |
| 51072 | */ |
| 51073 | #if defined(SQLITE_DEBUG) && 0 |
| 51074 | int sqlite3PcacheTrace = 2; /* 0: off 1: simple 2: cache dumps */ |
| 51075 | int sqlite3PcacheMxDump = 9999; /* Max cache entries for pcacheDump() */ |
| 51076 | # define pcacheTrace(X) if(sqlite3PcacheTrace){sqlite3DebugPrintf X;} |
| 51077 | void pcacheDump(PCache *pCache){ |
| 51078 | int N; |
| 51079 | int i, j; |
| 51080 | sqlite3_pcache_page *pLower; |
| 51081 | PgHdr *pPg; |
| 51082 | unsigned char *a; |
| 51083 | |
| 51084 | if( sqlite3PcacheTrace<2 ) return; |
| 51085 | if( pCache->pCache==0 ) return; |
| 51086 | N = sqlite3PcachePagecount(pCache); |
| 51087 | if( N>sqlite3PcacheMxDump ) N = sqlite3PcacheMxDump; |
| 51088 | for(i=1; i<=N; i++){ |
| 51089 | pLower = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, i, 0); |
| 51090 | if( pLower==0 ) continue; |
| 51091 | pPg = (PgHdr*)pLower->pExtra; |
| 51092 | printf("%3d: nRef %2d flgs %02x data ", i, pPg->nRef, pPg->flags); |
| 51093 | a = (unsigned char *)pLower->pBuf; |
| 51094 | for(j=0; j<12; j++) printf("%02x", a[j]); |
| 51095 | printf("\n"); |
| 51096 | if( pPg->pPage==0 ){ |
| 51097 | sqlite3GlobalConfig.pcache2.xUnpin(pCache->pCache, pLower, 0); |
| 51098 | } |
| 51099 | } |
| 51100 | } |
| 51101 | #else |
| 51102 | # define pcacheTrace(X) |
| 51103 | # define pcacheDump(X) |
| 51104 | #endif |
| 51105 | |
| 51106 | /* |
| 51107 | ** Check invariants on a PgHdr entry. Return true if everything is OK. |
| 51108 | ** Return false if any invariant is violated. |
| 51109 | ** |
| 51110 | ** This routine is for use inside of assert() statements only. For |
| @@ -51119,12 +51275,17 @@ | |
| 51119 | assert( pPg->pgno>0 || pPg->pPager==0 ); /* Page number is 1 or more */ |
| 51120 | pCache = pPg->pCache; |
| 51121 | assert( pCache!=0 ); /* Every page has an associated PCache */ |
| 51122 | if( pPg->flags & PGHDR_CLEAN ){ |
| 51123 | assert( (pPg->flags & PGHDR_DIRTY)==0 );/* Cannot be both CLEAN and DIRTY */ |
| 51124 | assert( pCache->pDirty!=pPg ); /* CLEAN pages not on dirty list */ |
| 51125 | assert( pCache->pDirtyTail!=pPg ); |
| 51126 | } |
| 51127 | /* WRITEABLE pages must also be DIRTY */ |
| 51128 | if( pPg->flags & PGHDR_WRITEABLE ){ |
| 51129 | assert( pPg->flags & PGHDR_DIRTY ); /* WRITEABLE implies DIRTY */ |
| 51130 | } |
| @@ -51394,12 +51555,13 @@ | |
| 51394 | eCreate = createFlag & pCache->eCreate; |
| 51395 | assert( eCreate==0 || eCreate==1 || eCreate==2 ); |
| 51396 | assert( createFlag==0 || pCache->eCreate==eCreate ); |
| 51397 | assert( createFlag==0 || eCreate==1+(!pCache->bPurgeable||!pCache->pDirty) ); |
| 51398 | pRes = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, pgno, eCreate); |
| 51399 | pcacheTrace(("%p.FETCH %d%s (result: %p)\n",pCache,pgno, |
| 51400 | createFlag?" create":"",pRes)); |
| 51401 | return pRes; |
| 51402 | } |
| 51403 | |
| 51404 | /* |
| 51405 | ** If the sqlite3PcacheFetch() routine is unable to allocate a new |
| @@ -51523,10 +51685,11 @@ | |
| 51523 | if( (--p->nRef)==0 ){ |
| 51524 | if( p->flags&PGHDR_CLEAN ){ |
| 51525 | pcacheUnpin(p); |
| 51526 | }else{ |
| 51527 | pcacheManageDirtyList(p, PCACHE_DIRTYLIST_FRONT); |
| 51528 | } |
| 51529 | } |
| 51530 | } |
| 51531 | |
| 51532 | /* |
| @@ -51566,10 +51729,11 @@ | |
| 51566 | if( p->flags & PGHDR_CLEAN ){ |
| 51567 | p->flags ^= (PGHDR_DIRTY|PGHDR_CLEAN); |
| 51568 | pcacheTrace(("%p.DIRTY %d\n",p->pCache,p->pgno)); |
| 51569 | assert( (p->flags & (PGHDR_DIRTY|PGHDR_CLEAN))==PGHDR_DIRTY ); |
| 51570 | pcacheManageDirtyList(p, PCACHE_DIRTYLIST_ADD); |
| 51571 | } |
| 51572 | assert( sqlite3PcachePageSanity(p) ); |
| 51573 | } |
| 51574 | } |
| 51575 | |
| @@ -51628,18 +51792,28 @@ | |
| 51628 | /* |
| 51629 | ** Change the page number of page p to newPgno. |
| 51630 | */ |
| 51631 | SQLITE_PRIVATE void sqlite3PcacheMove(PgHdr *p, Pgno newPgno){ |
| 51632 | PCache *pCache = p->pCache; |
| 51633 | assert( p->nRef>0 ); |
| 51634 | assert( newPgno>0 ); |
| 51635 | assert( sqlite3PcachePageSanity(p) ); |
| 51636 | pcacheTrace(("%p.MOVE %d -> %d\n",pCache,p->pgno,newPgno)); |
| 51637 | sqlite3GlobalConfig.pcache2.xRekey(pCache->pCache, p->pPage, p->pgno,newPgno); |
| 51638 | p->pgno = newPgno; |
| 51639 | if( (p->flags&PGHDR_DIRTY) && (p->flags&PGHDR_NEED_SYNC) ){ |
| 51640 | pcacheManageDirtyList(p, PCACHE_DIRTYLIST_FRONT); |
| 51641 | } |
| 51642 | } |
| 51643 | |
| 51644 | /* |
| 51645 | ** Drop every cache entry whose page number is greater than "pgno". The |
| @@ -51933,16 +52107,17 @@ | |
| 51933 | ** runtime using sqlite3_config(SQLITE_CONFIG_PCACHE_HDRSZ, &size). The |
| 51934 | ** sizes of the extensions sum to 272 bytes on x64 for 3.8.10, but this |
| 51935 | ** size can vary according to architecture, compile-time options, and |
| 51936 | ** SQLite library version number. |
| 51937 | ** |
| 51938 | ** If SQLITE_PCACHE_SEPARATE_HEADER is defined, then the extension is obtained |
| 51939 | ** using a separate memory allocation from the database page content. This |
| 51940 | ** seeks to overcome the "clownshoe" problem (also called "internal |
| 51941 | ** fragmentation" in academic literature) of allocating a few bytes more |
| 51942 | ** than a power of two with the memory allocator rounding up to the next |
| 51943 | ** power of two, and leaving the rounded-up space unused. |
| 51944 | ** |
| 51945 | ** This module tracks pointers to PgHdr1 objects. Only pcache.c communicates |
| 51946 | ** with this module. Information is passed back and forth as PgHdr1 pointers. |
| 51947 | ** |
| 51948 | ** The pcache.c and pager.c modules deal pointers to PgHdr objects. |
| @@ -51983,34 +52158,44 @@ | |
| 51983 | typedef struct PgFreeslot PgFreeslot; |
| 51984 | typedef struct PGroup PGroup; |
| 51985 | |
| 51986 | /* |
| 51987 | ** Each cache entry is represented by an instance of the following |
| 51988 | ** structure. Unless SQLITE_PCACHE_SEPARATE_HEADER is defined, a buffer of |
| 51989 | ** PgHdr1.pCache->szPage bytes is allocated directly before this structure |
| 51990 | ** in memory. |
| 51991 | ** |
| 51992 | ** Note: Variables isBulkLocal and isAnchor were once type "u8". That works, |
| 51993 | ** but causes a 2-byte gap in the structure for most architectures (since |
| 51994 | ** pointers must be either 4 or 8-byte aligned). As this structure is located |
| 51995 | ** in memory directly after the associated page data, if the database is |
| 51996 | ** corrupt, code at the b-tree layer may overread the page buffer and |
| 51997 | ** read part of this structure before the corruption is detected. This |
| 51998 | ** can cause a valgrind error if the unitialized gap is accessed. Using u16 |
| 51999 | ** ensures there is no such gap, and therefore no bytes of unitialized memory |
| 52000 | ** in the structure. |
| 52001 | */ |
| 52002 | struct PgHdr1 { |
| 52003 | sqlite3_pcache_page page; /* Base class. Must be first. pBuf & pExtra */ |
| 52004 | unsigned int iKey; /* Key value (page number) */ |
| 52005 | u16 isBulkLocal; /* This page from bulk local storage */ |
| 52006 | u16 isAnchor; /* This is the PGroup.lru element */ |
| 52007 | PgHdr1 *pNext; /* Next in hash table chain */ |
| 52008 | PCache1 *pCache; /* Cache that currently owns this page */ |
| 52009 | PgHdr1 *pLruNext; /* Next in LRU list of unpinned pages */ |
| 52010 | PgHdr1 *pLruPrev; /* Previous in LRU list of unpinned pages */ |
| 52011 | /* NB: pLruPrev is only valid if pLruNext!=0 */ |
| 52012 | }; |
| 52013 | |
| 52014 | /* |
| 52015 | ** A page is pinned if it is not on the LRU list. To be "pinned" means |
| 52016 | ** that the page is in active use and must not be deallocated. |
| @@ -52332,29 +52517,17 @@ | |
| 52332 | assert( pcache1.separateCache==0 ); |
| 52333 | assert( pCache->pGroup==&pcache1.grp ); |
| 52334 | pcache1LeaveMutex(pCache->pGroup); |
| 52335 | #endif |
| 52336 | if( benignMalloc ){ sqlite3BeginBenignMalloc(); } |
| 52337 | #ifdef SQLITE_PCACHE_SEPARATE_HEADER |
| 52338 | pPg = pcache1Alloc(pCache->szPage); |
| 52339 | p = sqlite3Malloc(sizeof(PgHdr1) + pCache->szExtra); |
| 52340 | if( !pPg || !p ){ |
| 52341 | pcache1Free(pPg); |
| 52342 | sqlite3_free(p); |
| 52343 | pPg = 0; |
| 52344 | } |
| 52345 | #else |
| 52346 | pPg = pcache1Alloc(pCache->szAlloc); |
| 52347 | #endif |
| 52348 | if( benignMalloc ){ sqlite3EndBenignMalloc(); } |
| 52349 | #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT |
| 52350 | pcache1EnterMutex(pCache->pGroup); |
| 52351 | #endif |
| 52352 | if( pPg==0 ) return 0; |
| 52353 | #ifndef SQLITE_PCACHE_SEPARATE_HEADER |
| 52354 | p = (PgHdr1 *)&((u8 *)pPg)[pCache->szPage]; |
| 52355 | #endif |
| 52356 | p->page.pBuf = pPg; |
| 52357 | p->page.pExtra = &p[1]; |
| 52358 | p->isBulkLocal = 0; |
| 52359 | p->isAnchor = 0; |
| 52360 | p->pLruPrev = 0; /* Initializing this saves a valgrind error */ |
| @@ -52374,13 +52547,10 @@ | |
| 52374 | if( p->isBulkLocal ){ |
| 52375 | p->pNext = pCache->pFree; |
| 52376 | pCache->pFree = p; |
| 52377 | }else{ |
| 52378 | pcache1Free(p->page.pBuf); |
| 52379 | #ifdef SQLITE_PCACHE_SEPARATE_HEADER |
| 52380 | sqlite3_free(p); |
| 52381 | #endif |
| 52382 | } |
| 52383 | (*pCache->pnPurgeable)--; |
| 52384 | } |
| 52385 | |
| 52386 | /* |
| @@ -53017,27 +53187,45 @@ | |
| 53017 | unsigned int iNew |
| 53018 | ){ |
| 53019 | PCache1 *pCache = (PCache1 *)p; |
| 53020 | PgHdr1 *pPage = (PgHdr1 *)pPg; |
| 53021 | PgHdr1 **pp; |
| 53022 | unsigned int h; |
| 53023 | assert( pPage->iKey==iOld ); |
| 53024 | assert( pPage->pCache==pCache ); |
| 53025 | |
| 53026 | pcache1EnterMutex(pCache->pGroup); |
| 53027 | |
| 53028 | h = iOld%pCache->nHash; |
| 53029 | pp = &pCache->apHash[h]; |
| 53030 | while( (*pp)!=pPage ){ |
| 53031 | pp = &(*pp)->pNext; |
| 53032 | } |
| 53033 | *pp = pPage->pNext; |
| 53034 | |
| 53035 | h = iNew%pCache->nHash; |
| 53036 | pPage->iKey = iNew; |
| 53037 | pPage->pNext = pCache->apHash[h]; |
| 53038 | pCache->apHash[h] = pPage; |
| 53039 | if( iNew>pCache->iMaxKey ){ |
| 53040 | pCache->iMaxKey = iNew; |
| 53041 | } |
| 53042 | |
| 53043 | pcache1LeaveMutex(pCache->pGroup); |
| @@ -53140,13 +53328,10 @@ | |
| 53140 | while( (nReq<0 || nFree<nReq) |
| 53141 | && (p=pcache1.grp.lru.pLruPrev)!=0 |
| 53142 | && p->isAnchor==0 |
| 53143 | ){ |
| 53144 | nFree += pcache1MemSize(p->page.pBuf); |
| 53145 | #ifdef SQLITE_PCACHE_SEPARATE_HEADER |
| 53146 | nFree += sqlite3MemSize(p); |
| 53147 | #endif |
| 53148 | assert( PAGE_IS_UNPINNED(p) ); |
| 53149 | pcache1PinPage(p); |
| 53150 | pcache1RemoveFromHash(p, 1); |
| 53151 | } |
| 53152 | pcache1LeaveMutex(&pcache1.grp); |
| @@ -59631,10 +59816,11 @@ | |
| 59631 | int flags = SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE; |
| 59632 | int nSpill; |
| 59633 | |
| 59634 | if( pPager->tempFile ){ |
| 59635 | flags |= (SQLITE_OPEN_DELETEONCLOSE|SQLITE_OPEN_TEMP_JOURNAL); |
| 59636 | nSpill = sqlite3Config.nStmtSpill; |
| 59637 | }else{ |
| 59638 | flags |= SQLITE_OPEN_MAIN_JOURNAL; |
| 59639 | nSpill = jrnlBufferSize(pPager); |
| 59640 | } |
| @@ -59666,10 +59852,11 @@ | |
| 59666 | } |
| 59667 | |
| 59668 | if( rc!=SQLITE_OK ){ |
| 59669 | sqlite3BitvecDestroy(pPager->pInJournal); |
| 59670 | pPager->pInJournal = 0; |
| 59671 | }else{ |
| 59672 | assert( pPager->eState==PAGER_WRITER_LOCKED ); |
| 59673 | pPager->eState = PAGER_WRITER_CACHEMOD; |
| 59674 | } |
| 59675 | |
| @@ -66729,10 +66916,11 @@ | |
| 66729 | ** db using sqlite3SchemaToIndex(). |
| 66730 | */ |
| 66731 | SQLITE_PRIVATE int sqlite3SchemaMutexHeld(sqlite3 *db, int iDb, Schema *pSchema){ |
| 66732 | Btree *p; |
| 66733 | assert( db!=0 ); |
| 66734 | if( pSchema ) iDb = sqlite3SchemaToIndex(db, pSchema); |
| 66735 | assert( iDb>=0 && iDb<db->nDb ); |
| 66736 | if( !sqlite3_mutex_held(db->mutex) ) return 0; |
| 66737 | if( iDb==1 ) return 1; |
| 66738 | p = db->aDb[iDb].pBt; |
| @@ -68301,12 +68489,11 @@ | |
| 68301 | assert( sqlite3PagerIswriteable(pPage->pDbPage) ); |
| 68302 | assert( pPage->pBt!=0 ); |
| 68303 | assert( pPage->pBt->usableSize <= SQLITE_MAX_PAGE_SIZE ); |
| 68304 | assert( pPage->nOverflow==0 ); |
| 68305 | assert( sqlite3_mutex_held(pPage->pBt->mutex) ); |
| 68306 | temp = 0; |
| 68307 | src = data = pPage->aData; |
| 68308 | hdr = pPage->hdrOffset; |
| 68309 | cellOffset = pPage->cellOffset; |
| 68310 | nCell = pPage->nCell; |
| 68311 | assert( nCell==get2byte(&data[hdr+3]) || CORRUPT_DB ); |
| 68312 | iCellFirst = cellOffset + 2*nCell; |
| @@ -68356,43 +68543,42 @@ | |
| 68356 | } |
| 68357 | |
| 68358 | cbrk = usableSize; |
| 68359 | iCellLast = usableSize - 4; |
| 68360 | iCellStart = get2byte(&data[hdr+5]); |
| 68361 | for(i=0; i<nCell; i++){ |
| 68362 | u8 *pAddr; /* The i-th cell pointer */ |
| 68363 | pAddr = &data[cellOffset + i*2]; |
| 68364 | pc = get2byte(pAddr); |
| 68365 | testcase( pc==iCellFirst ); |
| 68366 | testcase( pc==iCellLast ); |
| 68367 | /* These conditions have already been verified in btreeInitPage() |
| 68368 | ** if PRAGMA cell_size_check=ON. |
| 68369 | */ |
| 68370 | if( pc<iCellStart || pc>iCellLast ){ |
| 68371 | return SQLITE_CORRUPT_PAGE(pPage); |
| 68372 | } |
| 68373 | assert( pc>=iCellStart && pc<=iCellLast ); |
| 68374 | size = pPage->xCellSize(pPage, &src[pc]); |
| 68375 | cbrk -= size; |
| 68376 | if( cbrk<iCellStart || pc+size>usableSize ){ |
| 68377 | return SQLITE_CORRUPT_PAGE(pPage); |
| 68378 | } |
| 68379 | assert( cbrk+size<=usableSize && cbrk>=iCellStart ); |
| 68380 | testcase( cbrk+size==usableSize ); |
| 68381 | testcase( pc+size==usableSize ); |
| 68382 | put2byte(pAddr, cbrk); |
| 68383 | if( temp==0 ){ |
| 68384 | if( cbrk==pc ) continue; |
| 68385 | temp = sqlite3PagerTempSpace(pPage->pBt->pPager); |
| 68386 | memcpy(&temp[iCellStart], &data[iCellStart], usableSize - iCellStart); |
| 68387 | src = temp; |
| 68388 | } |
| 68389 | memcpy(&data[cbrk], &src[pc], size); |
| 68390 | } |
| 68391 | data[hdr+7] = 0; |
| 68392 | |
| 68393 | defragment_out: |
| 68394 | assert( pPage->nFree>=0 ); |
| 68395 | if( data[hdr+7]+cbrk-iCellFirst!=pPage->nFree ){ |
| 68396 | return SQLITE_CORRUPT_PAGE(pPage); |
| 68397 | } |
| 68398 | assert( cbrk>=iCellFirst ); |
| @@ -68461,13 +68647,13 @@ | |
| 68461 | return &aData[pc + x]; |
| 68462 | } |
| 68463 | iAddr = pc; |
| 68464 | pTmp = &aData[pc]; |
| 68465 | pc = get2byte(pTmp); |
| 68466 | if( pc<=iAddr+size ){ |
| 68467 | if( pc ){ |
| 68468 | /* The next slot in the chain is not past the end of the current slot */ |
| 68469 | *pRc = SQLITE_CORRUPT_PAGE(pPg); |
| 68470 | } |
| 68471 | return 0; |
| 68472 | } |
| 68473 | } |
| @@ -68615,11 +68801,11 @@ | |
| 68615 | iPtr = hdr + 1; |
| 68616 | if( data[iPtr+1]==0 && data[iPtr]==0 ){ |
| 68617 | iFreeBlk = 0; /* Shortcut for the case when the freelist is empty */ |
| 68618 | }else{ |
| 68619 | while( (iFreeBlk = get2byte(&data[iPtr]))<iStart ){ |
| 68620 | if( iFreeBlk<iPtr+4 ){ |
| 68621 | if( iFreeBlk==0 ) break; /* TH3: corrupt082.100 */ |
| 68622 | return SQLITE_CORRUPT_PAGE(pPage); |
| 68623 | } |
| 68624 | iPtr = iFreeBlk; |
| 68625 | } |
| @@ -69097,13 +69283,11 @@ | |
| 69097 | if( pCur ){ |
| 69098 | pCur->iPage--; |
| 69099 | pCur->pPage = pCur->apPage[pCur->iPage]; |
| 69100 | } |
| 69101 | testcase( pgno==0 ); |
| 69102 | assert( pgno!=0 || rc==SQLITE_CORRUPT |
| 69103 | || rc==SQLITE_IOERR_NOMEM |
| 69104 | || rc==SQLITE_NOMEM ); |
| 69105 | return rc; |
| 69106 | } |
| 69107 | |
| 69108 | /* |
| 69109 | ** Release a MemPage. This should be called once for each prior |
| @@ -72041,12 +72225,10 @@ | |
| 72041 | ** the new child page does not match the flags field of the parent (i.e. |
| 72042 | ** if an intkey page appears to be the parent of a non-intkey page, or |
| 72043 | ** vice-versa). |
| 72044 | */ |
| 72045 | static int moveToChild(BtCursor *pCur, u32 newPgno){ |
| 72046 | BtShared *pBt = pCur->pBt; |
| 72047 | |
| 72048 | assert( cursorOwnsBtShared(pCur) ); |
| 72049 | assert( pCur->eState==CURSOR_VALID ); |
| 72050 | assert( pCur->iPage<BTCURSOR_MAX_DEPTH ); |
| 72051 | assert( pCur->iPage>=0 ); |
| 72052 | if( pCur->iPage>=(BTCURSOR_MAX_DEPTH-1) ){ |
| @@ -72056,11 +72238,12 @@ | |
| 72056 | pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl); |
| 72057 | pCur->aiIdx[pCur->iPage] = pCur->ix; |
| 72058 | pCur->apPage[pCur->iPage] = pCur->pPage; |
| 72059 | pCur->ix = 0; |
| 72060 | pCur->iPage++; |
| 72061 | return getAndInitPage(pBt, newPgno, &pCur->pPage, pCur, pCur->curPagerFlags); |
| 72062 | } |
| 72063 | |
| 72064 | #ifdef SQLITE_DEBUG |
| 72065 | /* |
| 72066 | ** Page pParent is an internal (non-leaf) tree page. This function |
| @@ -72162,11 +72345,11 @@ | |
| 72162 | assert( pCur->skipNext!=SQLITE_OK ); |
| 72163 | return pCur->skipNext; |
| 72164 | } |
| 72165 | sqlite3BtreeClearCursor(pCur); |
| 72166 | } |
| 72167 | rc = getAndInitPage(pCur->pBtree->pBt, pCur->pgnoRoot, &pCur->pPage, |
| 72168 | 0, pCur->curPagerFlags); |
| 72169 | if( rc!=SQLITE_OK ){ |
| 72170 | pCur->eState = CURSOR_INVALID; |
| 72171 | return rc; |
| 72172 | } |
| @@ -72635,10 +72818,13 @@ | |
| 72635 | if( pCur->iPage>0 |
| 72636 | && indexCellCompare(pCur, 0, pIdxKey, xRecordCompare)<=0 |
| 72637 | && pIdxKey->errCode==SQLITE_OK |
| 72638 | ){ |
| 72639 | pCur->curFlags &= ~BTCF_ValidOvfl; |
| 72640 | goto bypass_moveto_root; /* Start search on the current page */ |
| 72641 | } |
| 72642 | pIdxKey->errCode = SQLITE_OK; |
| 72643 | } |
| 72644 | |
| @@ -73800,16 +73986,10 @@ | |
| 73800 | data = pPage->aData; |
| 73801 | ptr = &pPage->aCellIdx[2*idx]; |
| 73802 | assert( pPage->pBt->usableSize > (u32)(ptr-data) ); |
| 73803 | pc = get2byte(ptr); |
| 73804 | hdr = pPage->hdrOffset; |
| 73805 | #if 0 /* Not required. Omit for efficiency */ |
| 73806 | if( pc<hdr+pPage->nCell*2 ){ |
| 73807 | *pRC = SQLITE_CORRUPT_BKPT; |
| 73808 | return; |
| 73809 | } |
| 73810 | #endif |
| 73811 | testcase( pc==(u32)get2byte(&data[hdr+5]) ); |
| 73812 | testcase( pc+sz==pPage->pBt->usableSize ); |
| 73813 | if( pc+sz > pPage->pBt->usableSize ){ |
| 73814 | *pRC = SQLITE_CORRUPT_BKPT; |
| 73815 | return; |
| @@ -74689,12 +74869,10 @@ | |
| 74689 | int szNew[NB+2]; /* Combined size of cells placed on i-th page */ |
| 74690 | u8 *aSpace1; /* Space for copies of dividers cells */ |
| 74691 | Pgno pgno; /* Temp var to store a page number in */ |
| 74692 | u8 abDone[NB+2]; /* True after i'th new page is populated */ |
| 74693 | Pgno aPgno[NB+2]; /* Page numbers of new pages before shuffling */ |
| 74694 | Pgno aPgOrder[NB+2]; /* Copy of aPgno[] used for sorting pages */ |
| 74695 | u16 aPgFlags[NB+2]; /* flags field of new pages before shuffling */ |
| 74696 | CellArray b; /* Parsed information on cells being balanced */ |
| 74697 | |
| 74698 | memset(abDone, 0, sizeof(abDone)); |
| 74699 | memset(&b, 0, sizeof(b)); |
| 74700 | pBt = pParent->pBt; |
| @@ -75114,46 +75292,43 @@ | |
| 75114 | ** Reassign page numbers so that the new pages are in ascending order. |
| 75115 | ** This helps to keep entries in the disk file in order so that a scan |
| 75116 | ** of the table is closer to a linear scan through the file. That in turn |
| 75117 | ** helps the operating system to deliver pages from the disk more rapidly. |
| 75118 | ** |
| 75119 | ** An O(n^2) insertion sort algorithm is used, but since n is never more |
| 75120 | ** than (NB+2) (a small constant), that should not be a problem. |
| 75121 | ** |
| 75122 | ** When NB==3, this one optimization makes the database about 25% faster |
| 75123 | ** for large insertions and deletions. |
| 75124 | */ |
| 75125 | for(i=0; i<nNew; i++){ |
| 75126 | aPgOrder[i] = aPgno[i] = apNew[i]->pgno; |
| 75127 | aPgFlags[i] = apNew[i]->pDbPage->flags; |
| 75128 | for(j=0; j<i; j++){ |
| 75129 | if( NEVER(aPgno[j]==aPgno[i]) ){ |
| 75130 | /* This branch is taken if the set of sibling pages somehow contains |
| 75131 | ** duplicate entries. This can happen if the database is corrupt. |
| 75132 | ** It would be simpler to detect this as part of the loop below, but |
| 75133 | ** we do the detection here in order to avoid populating the pager |
| 75134 | ** cache with two separate objects associated with the same |
| 75135 | ** page number. */ |
| 75136 | assert( CORRUPT_DB ); |
| 75137 | rc = SQLITE_CORRUPT_BKPT; |
| 75138 | goto balance_cleanup; |
| 75139 | } |
| 75140 | } |
| 75141 | } |
| 75142 | for(i=0; i<nNew; i++){ |
| 75143 | int iBest = 0; /* aPgno[] index of page number to use */ |
| 75144 | for(j=1; j<nNew; j++){ |
| 75145 | if( aPgOrder[j]<aPgOrder[iBest] ) iBest = j; |
| 75146 | } |
| 75147 | pgno = aPgOrder[iBest]; |
| 75148 | aPgOrder[iBest] = 0xffffffff; |
| 75149 | if( iBest!=i ){ |
| 75150 | if( iBest>i ){ |
| 75151 | sqlite3PagerRekey(apNew[iBest]->pDbPage, pBt->nPage+iBest+1, 0); |
| 75152 | } |
| 75153 | sqlite3PagerRekey(apNew[i]->pDbPage, pgno, aPgFlags[iBest]); |
| 75154 | apNew[i]->pgno = pgno; |
| 75155 | } |
| 75156 | } |
| 75157 | |
| 75158 | TRACE(("BALANCE: new: %d(%d nc=%d) %d(%d nc=%d) %d(%d nc=%d) " |
| 75159 | "%d(%d nc=%d) %d(%d nc=%d)\n", |
| @@ -79417,10 +79592,20 @@ | |
| 79417 | double r2 = (double)i; |
| 79418 | return r1==0.0 |
| 79419 | || (memcmp(&r1, &r2, sizeof(r1))==0 |
| 79420 | && i >= -2251799813685248LL && i < 2251799813685248LL); |
| 79421 | } |
| 79422 | |
| 79423 | /* |
| 79424 | ** Convert pMem so that it has type MEM_Real or MEM_Int. |
| 79425 | ** Invalidate any prior representations. |
| 79426 | ** |
| @@ -79439,11 +79624,11 @@ | |
| 79439 | sqlite3_int64 ix; |
| 79440 | assert( (pMem->flags & (MEM_Blob|MEM_Str))!=0 ); |
| 79441 | assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); |
| 79442 | rc = sqlite3AtoF(pMem->z, &pMem->u.r, pMem->n, pMem->enc); |
| 79443 | if( ((rc==0 || rc==1) && sqlite3Atoi64(pMem->z, &ix, pMem->n, pMem->enc)<=1) |
| 79444 | || sqlite3RealSameAsInt(pMem->u.r, (ix = (i64)pMem->u.r)) |
| 79445 | ){ |
| 79446 | pMem->u.i = ix; |
| 79447 | MemSetTypeFlag(pMem, MEM_Int); |
| 79448 | }else{ |
| 79449 | MemSetTypeFlag(pMem, MEM_Real); |
| @@ -80160,11 +80345,12 @@ | |
| 80160 | if( pVal==0 ){ |
| 80161 | rc = SQLITE_NOMEM_BKPT; |
| 80162 | goto value_from_function_out; |
| 80163 | } |
| 80164 | |
| 80165 | assert( pCtx->pParse->rc==SQLITE_OK ); |
| 80166 | memset(&ctx, 0, sizeof(ctx)); |
| 80167 | ctx.pOut = pVal; |
| 80168 | ctx.pFunc = pFunc; |
| 80169 | ctx.enc = ENC(db); |
| 80170 | pFunc->xSFunc(&ctx, nVal, apVal); |
| @@ -80670,14 +80856,14 @@ | |
| 80670 | p = sqlite3DbMallocRawNN(db, sizeof(Vdbe) ); |
| 80671 | if( p==0 ) return 0; |
| 80672 | memset(&p->aOp, 0, sizeof(Vdbe)-offsetof(Vdbe,aOp)); |
| 80673 | p->db = db; |
| 80674 | if( db->pVdbe ){ |
| 80675 | db->pVdbe->pPrev = p; |
| 80676 | } |
| 80677 | p->pNext = db->pVdbe; |
| 80678 | p->pPrev = 0; |
| 80679 | db->pVdbe = p; |
| 80680 | assert( p->eVdbeState==VDBE_INIT_STATE ); |
| 80681 | p->pParse = pParse; |
| 80682 | pParse->pVdbe = p; |
| 80683 | assert( pParse->aLabel==0 ); |
| @@ -80755,25 +80941,32 @@ | |
| 80755 | return 0; |
| 80756 | } |
| 80757 | #endif |
| 80758 | |
| 80759 | /* |
| 80760 | ** Swap all content between two VDBE structures. |
| 80761 | */ |
| 80762 | SQLITE_PRIVATE void sqlite3VdbeSwap(Vdbe *pA, Vdbe *pB){ |
| 80763 | Vdbe tmp, *pTmp; |
| 80764 | char *zTmp; |
| 80765 | assert( pA->db==pB->db ); |
| 80766 | tmp = *pA; |
| 80767 | *pA = *pB; |
| 80768 | *pB = tmp; |
| 80769 | pTmp = pA->pNext; |
| 80770 | pA->pNext = pB->pNext; |
| 80771 | pB->pNext = pTmp; |
| 80772 | pTmp = pA->pPrev; |
| 80773 | pA->pPrev = pB->pPrev; |
| 80774 | pB->pPrev = pTmp; |
| 80775 | zTmp = pA->zSql; |
| 80776 | pA->zSql = pB->zSql; |
| 80777 | pB->zSql = zTmp; |
| 80778 | #ifdef SQLITE_ENABLE_NORMALIZE |
| 80779 | zTmp = pA->zNormSql; |
| @@ -81021,10 +81214,11 @@ | |
| 81021 | pCtx->argc = nArg; |
| 81022 | pCtx->iOp = sqlite3VdbeCurrentAddr(v); |
| 81023 | addr = sqlite3VdbeAddOp4(v, eCallCtx ? OP_PureFunc : OP_Function, |
| 81024 | p1, p2, p3, (char*)pCtx, P4_FUNCCTX); |
| 81025 | sqlite3VdbeChangeP5(v, eCallCtx & NC_SelfRef); |
| 81026 | return addr; |
| 81027 | } |
| 81028 | |
| 81029 | /* |
| 81030 | ** Add an opcode that includes the p4 value with a P4_INT64 or |
| @@ -81089,11 +81283,11 @@ | |
| 81089 | va_end(ap); |
| 81090 | v = pParse->pVdbe; |
| 81091 | iThis = v->nOp; |
| 81092 | sqlite3VdbeAddOp4(v, OP_Explain, iThis, pParse->addrExplain, 0, |
| 81093 | zMsg, P4_DYNAMIC); |
| 81094 | sqlite3ExplainBreakpoint(bPush?"PUSH":"", sqlite3VdbeGetOp(v,-1)->p4.z); |
| 81095 | if( bPush){ |
| 81096 | pParse->addrExplain = iThis; |
| 81097 | } |
| 81098 | } |
| 81099 | } |
| @@ -81232,11 +81426,11 @@ | |
| 81232 | SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe *p){ |
| 81233 | sqlite3VdbeAddOp2(p, OP_Expire, 1, 1); |
| 81234 | } |
| 81235 | |
| 81236 | /* |
| 81237 | ** Mark the VDBE as one that can only be run multiple times. |
| 81238 | */ |
| 81239 | SQLITE_PRIVATE void sqlite3VdbeReusable(Vdbe *p){ |
| 81240 | int i; |
| 81241 | for(i=1; ALWAYS(i<p->nOp); i++){ |
| 81242 | if( ALWAYS(p->aOp[i].opcode==OP_Expire) ){ |
| @@ -81356,10 +81550,11 @@ | |
| 81356 | int opcode = pOp->opcode; |
| 81357 | if( opcode==OP_Destroy || opcode==OP_VUpdate || opcode==OP_VRename |
| 81358 | || opcode==OP_VDestroy |
| 81359 | || opcode==OP_VCreate |
| 81360 | || opcode==OP_ParseSchema |
| 81361 | || ((opcode==OP_Halt || opcode==OP_HaltIfNull) |
| 81362 | && ((pOp->p1)!=SQLITE_OK && pOp->p2==OE_Abort)) |
| 81363 | ){ |
| 81364 | hasAbort = 1; |
| 81365 | break; |
| @@ -81446,12 +81641,12 @@ | |
| 81446 | Parse *pParse = p->pParse; |
| 81447 | int *aLabel = pParse->aLabel; |
| 81448 | p->readOnly = 1; |
| 81449 | p->bIsReader = 0; |
| 81450 | pOp = &p->aOp[p->nOp-1]; |
| 81451 | while(1){ |
| 81452 | |
| 81453 | /* Only JUMP opcodes and the short list of special opcodes in the switch |
| 81454 | ** below need to be considered. The mkopcodeh.tcl generator script groups |
| 81455 | ** all these opcodes together near the front of the opcode list. Skip |
| 81456 | ** any opcode that does not need processing by virtual of the fact that |
| 81457 | ** it is larger than SQLITE_MX_JUMP_OPCODE, as a performance optimization. |
| @@ -81476,10 +81671,14 @@ | |
| 81476 | case OP_JournalMode: { |
| 81477 | p->readOnly = 0; |
| 81478 | p->bIsReader = 1; |
| 81479 | break; |
| 81480 | } |
| 81481 | #ifndef SQLITE_OMIT_VIRTUALTABLE |
| 81482 | case OP_VUpdate: { |
| 81483 | if( pOp->p2>nMaxArgs ) nMaxArgs = pOp->p2; |
| 81484 | break; |
| 81485 | } |
| @@ -81508,15 +81707,16 @@ | |
| 81508 | /* The mkopcodeh.tcl script has so arranged things that the only |
| 81509 | ** non-jump opcodes less than SQLITE_MX_JUMP_CODE are guaranteed to |
| 81510 | ** have non-negative values for P2. */ |
| 81511 | assert( (sqlite3OpcodeProperty[pOp->opcode]&OPFLG_JUMP)==0 || pOp->p2>=0); |
| 81512 | } |
| 81513 | if( pOp==p->aOp ) break; |
| 81514 | pOp--; |
| 81515 | } |
| 81516 | if( aLabel ){ |
| 81517 | sqlite3DbFreeNN(p->db, pParse->aLabel); |
| 81518 | pParse->aLabel = 0; |
| 81519 | } |
| 81520 | pParse->nLabel = 0; |
| 81521 | *pMaxFuncArgs = nMaxArgs; |
| 81522 | assert( p->bIsReader!=0 || DbMaskAllZero(p->btreeMask) ); |
| @@ -81761,19 +81961,23 @@ | |
| 81761 | /* |
| 81762 | ** Change the value of the opcode, or P1, P2, P3, or P5 operands |
| 81763 | ** for a specific instruction. |
| 81764 | */ |
| 81765 | SQLITE_PRIVATE void sqlite3VdbeChangeOpcode(Vdbe *p, int addr, u8 iNewOpcode){ |
| 81766 | sqlite3VdbeGetOp(p,addr)->opcode = iNewOpcode; |
| 81767 | } |
| 81768 | SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe *p, int addr, int val){ |
| 81769 | sqlite3VdbeGetOp(p,addr)->p1 = val; |
| 81770 | } |
| 81771 | SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe *p, int addr, int val){ |
| 81772 | sqlite3VdbeGetOp(p,addr)->p2 = val; |
| 81773 | } |
| 81774 | SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe *p, int addr, int val){ |
| 81775 | sqlite3VdbeGetOp(p,addr)->p3 = val; |
| 81776 | } |
| 81777 | SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe *p, u16 p5){ |
| 81778 | assert( p->nOp>0 || p->db->mallocFailed ); |
| 81779 | if( p->nOp>0 ) p->aOp[p->nOp-1].p5 = p5; |
| @@ -81805,11 +82009,11 @@ | |
| 81805 | assert( p->aOp[addr].opcode==OP_Once |
| 81806 | || p->aOp[addr].opcode==OP_If |
| 81807 | || p->aOp[addr].opcode==OP_FkIfZero ); |
| 81808 | assert( p->aOp[addr].p4type==0 ); |
| 81809 | #ifdef SQLITE_VDBE_COVERAGE |
| 81810 | sqlite3VdbeGetOp(p,-1)->iSrcLine = 0; /* Erase VdbeCoverage() macros */ |
| 81811 | #endif |
| 81812 | p->nOp--; |
| 81813 | }else{ |
| 81814 | sqlite3VdbeChangeP2(p, addr, p->nOp); |
| 81815 | } |
| @@ -81819,25 +82023,27 @@ | |
| 81819 | /* |
| 81820 | ** If the input FuncDef structure is ephemeral, then free it. If |
| 81821 | ** the FuncDef is not ephermal, then do nothing. |
| 81822 | */ |
| 81823 | static void freeEphemeralFunction(sqlite3 *db, FuncDef *pDef){ |
| 81824 | if( (pDef->funcFlags & SQLITE_FUNC_EPHEM)!=0 ){ |
| 81825 | sqlite3DbFreeNN(db, pDef); |
| 81826 | } |
| 81827 | } |
| 81828 | |
| 81829 | /* |
| 81830 | ** Delete a P4 value if necessary. |
| 81831 | */ |
| 81832 | static SQLITE_NOINLINE void freeP4Mem(sqlite3 *db, Mem *p){ |
| 81833 | if( p->szMalloc ) sqlite3DbFree(db, p->zMalloc); |
| 81834 | sqlite3DbFreeNN(db, p); |
| 81835 | } |
| 81836 | static SQLITE_NOINLINE void freeP4FuncCtx(sqlite3 *db, sqlite3_context *p){ |
| 81837 | freeEphemeralFunction(db, p->pFunc); |
| 81838 | sqlite3DbFreeNN(db, p); |
| 81839 | } |
| 81840 | static void freeP4(sqlite3 *db, int p4type, void *p4){ |
| 81841 | assert( db ); |
| 81842 | switch( p4type ){ |
| 81843 | case P4_FUNCCTX: { |
| @@ -81846,11 +82052,11 @@ | |
| 81846 | } |
| 81847 | case P4_REAL: |
| 81848 | case P4_INT64: |
| 81849 | case P4_DYNAMIC: |
| 81850 | case P4_INTARRAY: { |
| 81851 | sqlite3DbFree(db, p4); |
| 81852 | break; |
| 81853 | } |
| 81854 | case P4_KEYINFO: { |
| 81855 | if( db->pnBytesFreed==0 ) sqlite3KeyInfoUnref((KeyInfo*)p4); |
| 81856 | break; |
| @@ -81885,10 +82091,11 @@ | |
| 81885 | ** opcodes contained within. If aOp is not NULL it is assumed to contain |
| 81886 | ** nOp entries. |
| 81887 | */ |
| 81888 | static void vdbeFreeOpArray(sqlite3 *db, Op *aOp, int nOp){ |
| 81889 | assert( nOp>=0 ); |
| 81890 | if( aOp ){ |
| 81891 | Op *pOp = &aOp[nOp-1]; |
| 81892 | while(1){ /* Exit via break */ |
| 81893 | if( pOp->p4type <= P4_FREE_IF_LE ) freeP4(db, pOp->p4type, pOp->p4.p); |
| 81894 | #ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS |
| @@ -81895,11 +82102,11 @@ | |
| 81895 | sqlite3DbFree(db, pOp->zComment); |
| 81896 | #endif |
| 81897 | if( pOp==aOp ) break; |
| 81898 | pOp--; |
| 81899 | } |
| 81900 | sqlite3DbFreeNN(db, aOp); |
| 81901 | } |
| 81902 | } |
| 81903 | |
| 81904 | /* |
| 81905 | ** Link the SubProgram object passed as the second argument into the linked |
| @@ -82126,17 +82333,17 @@ | |
| 82126 | #ifdef SQLITE_VDBE_COVERAGE |
| 82127 | /* |
| 82128 | ** Set the value if the iSrcLine field for the previously coded instruction. |
| 82129 | */ |
| 82130 | SQLITE_PRIVATE void sqlite3VdbeSetLineNumber(Vdbe *v, int iLine){ |
| 82131 | sqlite3VdbeGetOp(v,-1)->iSrcLine = iLine; |
| 82132 | } |
| 82133 | #endif /* SQLITE_VDBE_COVERAGE */ |
| 82134 | |
| 82135 | /* |
| 82136 | ** Return the opcode for a given address. If the address is -1, then |
| 82137 | ** return the most recently inserted opcode. |
| 82138 | ** |
| 82139 | ** If a memory allocation error has occurred prior to the calling of this |
| 82140 | ** routine, then a pointer to a dummy VdbeOp will be returned. That opcode |
| 82141 | ** is readable but not writable, though it is cast to a writable value. |
| 82142 | ** The return of a dummy opcode allows the call to continue functioning |
| @@ -82148,20 +82355,23 @@ | |
| 82148 | SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe *p, int addr){ |
| 82149 | /* C89 specifies that the constant "dummy" will be initialized to all |
| 82150 | ** zeros, which is correct. MSVC generates a warning, nevertheless. */ |
| 82151 | static VdbeOp dummy; /* Ignore the MSVC warning about no initializer */ |
| 82152 | assert( p->eVdbeState==VDBE_INIT_STATE ); |
| 82153 | if( addr<0 ){ |
| 82154 | addr = p->nOp - 1; |
| 82155 | } |
| 82156 | assert( (addr>=0 && addr<p->nOp) || p->db->mallocFailed ); |
| 82157 | if( p->db->mallocFailed ){ |
| 82158 | return (VdbeOp*)&dummy; |
| 82159 | }else{ |
| 82160 | return &p->aOp[addr]; |
| 82161 | } |
| 82162 | } |
| 82163 | |
| 82164 | #if defined(SQLITE_ENABLE_EXPLAIN_COMMENTS) |
| 82165 | /* |
| 82166 | ** Return an integer value for one of the parameters to the opcode pOp |
| 82167 | ** determined by character c. |
| @@ -82646,11 +82856,11 @@ | |
| 82646 | if( p->flags&(MEM_Agg|MEM_Dyn) ){ |
| 82647 | testcase( (p->flags & MEM_Dyn)!=0 && p->xDel==sqlite3VdbeFrameMemDel ); |
| 82648 | sqlite3VdbeMemRelease(p); |
| 82649 | p->flags = MEM_Undefined; |
| 82650 | }else if( p->szMalloc ){ |
| 82651 | sqlite3DbFreeNN(db, p->zMalloc); |
| 82652 | p->szMalloc = 0; |
| 82653 | p->flags = MEM_Undefined; |
| 82654 | } |
| 82655 | #ifdef SQLITE_DEBUG |
| 82656 | else{ |
| @@ -83638,11 +83848,11 @@ | |
| 83638 | if( sqlite3_stmt_busy((sqlite3_stmt*)p) ){ |
| 83639 | cnt++; |
| 83640 | if( p->readOnly==0 ) nWrite++; |
| 83641 | if( p->bIsReader ) nRead++; |
| 83642 | } |
| 83643 | p = p->pNext; |
| 83644 | } |
| 83645 | assert( cnt==db->nVdbeActive ); |
| 83646 | assert( nWrite==db->nVdbeWrite ); |
| 83647 | assert( nRead==db->nVdbeRead ); |
| 83648 | } |
| @@ -84167,27 +84377,28 @@ | |
| 84167 | ** VdbeDelete() also unlinks the Vdbe from the list of VMs associated with |
| 84168 | ** the database connection and frees the object itself. |
| 84169 | */ |
| 84170 | static void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){ |
| 84171 | SubProgram *pSub, *pNext; |
| 84172 | assert( p->db==0 || p->db==db ); |
| 84173 | if( p->aColName ){ |
| 84174 | releaseMemArray(p->aColName, p->nResColumn*COLNAME_N); |
| 84175 | sqlite3DbFreeNN(db, p->aColName); |
| 84176 | } |
| 84177 | for(pSub=p->pProgram; pSub; pSub=pNext){ |
| 84178 | pNext = pSub->pNext; |
| 84179 | vdbeFreeOpArray(db, pSub->aOp, pSub->nOp); |
| 84180 | sqlite3DbFree(db, pSub); |
| 84181 | } |
| 84182 | if( p->eVdbeState!=VDBE_INIT_STATE ){ |
| 84183 | releaseMemArray(p->aVar, p->nVar); |
| 84184 | if( p->pVList ) sqlite3DbFreeNN(db, p->pVList); |
| 84185 | if( p->pFree ) sqlite3DbFreeNN(db, p->pFree); |
| 84186 | } |
| 84187 | vdbeFreeOpArray(db, p->aOp, p->nOp); |
| 84188 | sqlite3DbFree(db, p->zSql); |
| 84189 | #ifdef SQLITE_ENABLE_NORMALIZE |
| 84190 | sqlite3DbFree(db, p->zNormSql); |
| 84191 | { |
| 84192 | DblquoteStr *pThis, *pNext; |
| 84193 | for(pThis=p->pDblStr; pThis; pThis=pNext){ |
| @@ -84213,24 +84424,21 @@ | |
| 84213 | SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe *p){ |
| 84214 | sqlite3 *db; |
| 84215 | |
| 84216 | assert( p!=0 ); |
| 84217 | db = p->db; |
| 84218 | assert( sqlite3_mutex_held(db->mutex) ); |
| 84219 | sqlite3VdbeClearObject(db, p); |
| 84220 | if( db->pnBytesFreed==0 ){ |
| 84221 | if( p->pPrev ){ |
| 84222 | p->pPrev->pNext = p->pNext; |
| 84223 | }else{ |
| 84224 | assert( db->pVdbe==p ); |
| 84225 | db->pVdbe = p->pNext; |
| 84226 | } |
| 84227 | if( p->pNext ){ |
| 84228 | p->pNext->pPrev = p->pPrev; |
| 84229 | } |
| 84230 | } |
| 84231 | sqlite3DbFreeNN(db, p); |
| 84232 | } |
| 84233 | |
| 84234 | /* |
| 84235 | ** The cursor "p" has a pending seek operation that has not yet been |
| 84236 | ** carried out. Seek the cursor now. If an error occurs, return |
| @@ -85721,11 +85929,11 @@ | |
| 85721 | ** prepared statements. The flag is set to 1 for an immediate expiration |
| 85722 | ** and set to 2 for an advisory expiration. |
| 85723 | */ |
| 85724 | SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3 *db, int iCode){ |
| 85725 | Vdbe *p; |
| 85726 | for(p = db->pVdbe; p; p=p->pNext){ |
| 85727 | p->expired = iCode+1; |
| 85728 | } |
| 85729 | } |
| 85730 | |
| 85731 | /* |
| @@ -85842,17 +86050,18 @@ | |
| 85842 | ** |
| 85843 | ** This function is used to free UnpackedRecord structures allocated by |
| 85844 | ** the vdbeUnpackRecord() function found in vdbeapi.c. |
| 85845 | */ |
| 85846 | static void vdbeFreeUnpacked(sqlite3 *db, int nField, UnpackedRecord *p){ |
| 85847 | if( p ){ |
| 85848 | int i; |
| 85849 | for(i=0; i<nField; i++){ |
| 85850 | Mem *pMem = &p->aMem[i]; |
| 85851 | if( pMem->zMalloc ) sqlite3VdbeMemReleaseMalloc(pMem); |
| 85852 | } |
| 85853 | sqlite3DbFreeNN(db, p); |
| 85854 | } |
| 85855 | } |
| 85856 | #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */ |
| 85857 | |
| 85858 | #ifdef SQLITE_ENABLE_PREUPDATE_HOOK |
| @@ -85919,11 +86128,11 @@ | |
| 85919 | if( preupdate.aNew ){ |
| 85920 | int i; |
| 85921 | for(i=0; i<pCsr->nField; i++){ |
| 85922 | sqlite3VdbeMemRelease(&preupdate.aNew[i]); |
| 85923 | } |
| 85924 | sqlite3DbFreeNN(db, preupdate.aNew); |
| 85925 | } |
| 85926 | } |
| 85927 | #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */ |
| 85928 | |
| 85929 | /************** End of vdbeaux.c *********************************************/ |
| @@ -86036,11 +86245,13 @@ | |
| 86036 | Vdbe *v = (Vdbe*)pStmt; |
| 86037 | sqlite3 *db = v->db; |
| 86038 | if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT; |
| 86039 | sqlite3_mutex_enter(db->mutex); |
| 86040 | checkProfileCallback(db, v); |
| 86041 | rc = sqlite3VdbeFinalize(v); |
| 86042 | rc = sqlite3ApiExit(db, rc); |
| 86043 | sqlite3LeaveMutexAndCloseZombie(db); |
| 86044 | } |
| 86045 | return rc; |
| 86046 | } |
| @@ -86746,13 +86957,13 @@ | |
| 86746 | break; |
| 86747 | } |
| 86748 | sqlite3_reset(pStmt); |
| 86749 | if( savedPc>=0 ){ |
| 86750 | /* Setting minWriteFileFormat to 254 is a signal to the OP_Init and |
| 86751 | ** OP_Trace opcodes to *not* perform SQLITE_TRACE_STMT because one |
| 86752 | ** should output has already occurred due to SQLITE_SCHEMA. |
| 86753 | ** tag-20220401a */ |
| 86754 | v->minWriteFileFormat = 254; |
| 86755 | } |
| 86756 | assert( v->expired==0 ); |
| 86757 | } |
| 86758 | sqlite3_mutex_leave(db->mutex); |
| @@ -87358,11 +87569,11 @@ | |
| 87358 | ** the mutex is released if any kind of error occurs. |
| 87359 | ** |
| 87360 | ** The error code stored in database p->db is overwritten with the return |
| 87361 | ** value in any case. |
| 87362 | */ |
| 87363 | static int vdbeUnbind(Vdbe *p, int i){ |
| 87364 | Mem *pVar; |
| 87365 | if( vdbeSafetyNotNull(p) ){ |
| 87366 | return SQLITE_MISUSE_BKPT; |
| 87367 | } |
| 87368 | sqlite3_mutex_enter(p->db->mutex); |
| @@ -87371,16 +87582,15 @@ | |
| 87371 | sqlite3_mutex_leave(p->db->mutex); |
| 87372 | sqlite3_log(SQLITE_MISUSE, |
| 87373 | "bind on a busy prepared statement: [%s]", p->zSql); |
| 87374 | return SQLITE_MISUSE_BKPT; |
| 87375 | } |
| 87376 | if( i<1 || i>p->nVar ){ |
| 87377 | sqlite3Error(p->db, SQLITE_RANGE); |
| 87378 | sqlite3_mutex_leave(p->db->mutex); |
| 87379 | return SQLITE_RANGE; |
| 87380 | } |
| 87381 | i--; |
| 87382 | pVar = &p->aVar[i]; |
| 87383 | sqlite3VdbeMemRelease(pVar); |
| 87384 | pVar->flags = MEM_Null; |
| 87385 | p->db->errCode = SQLITE_OK; |
| 87386 | |
| @@ -87413,11 +87623,11 @@ | |
| 87413 | ){ |
| 87414 | Vdbe *p = (Vdbe *)pStmt; |
| 87415 | Mem *pVar; |
| 87416 | int rc; |
| 87417 | |
| 87418 | rc = vdbeUnbind(p, i); |
| 87419 | if( rc==SQLITE_OK ){ |
| 87420 | if( zData!=0 ){ |
| 87421 | pVar = &p->aVar[i-1]; |
| 87422 | rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel); |
| 87423 | if( rc==SQLITE_OK && encoding!=0 ){ |
| @@ -87462,11 +87672,11 @@ | |
| 87462 | return bindText(pStmt, i, zData, nData, xDel, 0); |
| 87463 | } |
| 87464 | SQLITE_API int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){ |
| 87465 | int rc; |
| 87466 | Vdbe *p = (Vdbe *)pStmt; |
| 87467 | rc = vdbeUnbind(p, i); |
| 87468 | if( rc==SQLITE_OK ){ |
| 87469 | sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue); |
| 87470 | sqlite3_mutex_leave(p->db->mutex); |
| 87471 | } |
| 87472 | return rc; |
| @@ -87475,21 +87685,21 @@ | |
| 87475 | return sqlite3_bind_int64(p, i, (i64)iValue); |
| 87476 | } |
| 87477 | SQLITE_API int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){ |
| 87478 | int rc; |
| 87479 | Vdbe *p = (Vdbe *)pStmt; |
| 87480 | rc = vdbeUnbind(p, i); |
| 87481 | if( rc==SQLITE_OK ){ |
| 87482 | sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue); |
| 87483 | sqlite3_mutex_leave(p->db->mutex); |
| 87484 | } |
| 87485 | return rc; |
| 87486 | } |
| 87487 | SQLITE_API int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){ |
| 87488 | int rc; |
| 87489 | Vdbe *p = (Vdbe*)pStmt; |
| 87490 | rc = vdbeUnbind(p, i); |
| 87491 | if( rc==SQLITE_OK ){ |
| 87492 | sqlite3_mutex_leave(p->db->mutex); |
| 87493 | } |
| 87494 | return rc; |
| 87495 | } |
| @@ -87500,11 +87710,11 @@ | |
| 87500 | const char *zPTtype, |
| 87501 | void (*xDestructor)(void*) |
| 87502 | ){ |
| 87503 | int rc; |
| 87504 | Vdbe *p = (Vdbe*)pStmt; |
| 87505 | rc = vdbeUnbind(p, i); |
| 87506 | if( rc==SQLITE_OK ){ |
| 87507 | sqlite3VdbeMemSetPointer(&p->aVar[i-1], pPtr, zPTtype, xDestructor); |
| 87508 | sqlite3_mutex_leave(p->db->mutex); |
| 87509 | }else if( xDestructor ){ |
| 87510 | xDestructor(pPtr); |
| @@ -87578,11 +87788,11 @@ | |
| 87578 | return rc; |
| 87579 | } |
| 87580 | SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){ |
| 87581 | int rc; |
| 87582 | Vdbe *p = (Vdbe *)pStmt; |
| 87583 | rc = vdbeUnbind(p, i); |
| 87584 | if( rc==SQLITE_OK ){ |
| 87585 | #ifndef SQLITE_OMIT_INCRBLOB |
| 87586 | sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n); |
| 87587 | #else |
| 87588 | rc = sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n); |
| @@ -87738,11 +87948,11 @@ | |
| 87738 | #endif |
| 87739 | sqlite3_mutex_enter(pDb->mutex); |
| 87740 | if( pStmt==0 ){ |
| 87741 | pNext = (sqlite3_stmt*)pDb->pVdbe; |
| 87742 | }else{ |
| 87743 | pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext; |
| 87744 | } |
| 87745 | sqlite3_mutex_leave(pDb->mutex); |
| 87746 | return pNext; |
| 87747 | } |
| 87748 | |
| @@ -87763,12 +87973,15 @@ | |
| 87763 | if( op==SQLITE_STMTSTATUS_MEMUSED ){ |
| 87764 | sqlite3 *db = pVdbe->db; |
| 87765 | sqlite3_mutex_enter(db->mutex); |
| 87766 | v = 0; |
| 87767 | db->pnBytesFreed = (int*)&v; |
| 87768 | sqlite3VdbeDelete(pVdbe); |
| 87769 | db->pnBytesFreed = 0; |
| 87770 | sqlite3_mutex_leave(db->mutex); |
| 87771 | }else{ |
| 87772 | v = pVdbe->aCounter[op]; |
| 87773 | if( resetFlag ) pVdbe->aCounter[op] = 0; |
| 87774 | } |
| @@ -88604,11 +88817,12 @@ | |
| 88604 | ** floating point value of rValue. Return true and set *piValue to the |
| 88605 | ** integer value if the string is in range to be an integer. Otherwise, |
| 88606 | ** return false. |
| 88607 | */ |
| 88608 | static int alsoAnInt(Mem *pRec, double rValue, i64 *piValue){ |
| 88609 | i64 iValue = (double)rValue; |
| 88610 | if( sqlite3RealSameAsInt(rValue,iValue) ){ |
| 88611 | *piValue = iValue; |
| 88612 | return 1; |
| 88613 | } |
| 88614 | return 0==sqlite3Atoi64(pRec->z, piValue, pRec->n, pRec->enc); |
| @@ -88766,21 +88980,22 @@ | |
| 88766 | ** |
| 88767 | ** Unlike applyNumericAffinity(), this routine does not modify pMem->flags. |
| 88768 | ** But it does set pMem->u.r and pMem->u.i appropriately. |
| 88769 | */ |
| 88770 | static u16 numericType(Mem *pMem){ |
| 88771 | if( pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal) ){ |
| 88772 | testcase( pMem->flags & MEM_Int ); |
| 88773 | testcase( pMem->flags & MEM_Real ); |
| 88774 | testcase( pMem->flags & MEM_IntReal ); |
| 88775 | return pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal); |
| 88776 | } |
| 88777 | if( pMem->flags & (MEM_Str|MEM_Blob) ){ |
| 88778 | testcase( pMem->flags & MEM_Str ); |
| 88779 | testcase( pMem->flags & MEM_Blob ); |
| 88780 | return computeNumericType(pMem); |
| 88781 | } |
| 88782 | return 0; |
| 88783 | } |
| 88784 | |
| 88785 | #ifdef SQLITE_DEBUG |
| 88786 | /* |
| @@ -89294,11 +89509,11 @@ | |
| 89294 | ** |
| 89295 | ** P2 is not used by the byte-code engine. However, if P2 is positive |
| 89296 | ** and also less than the current address, then the "EXPLAIN" output |
| 89297 | ** formatter in the CLI will indent all opcodes from the P2 opcode up |
| 89298 | ** to be not including the current Return. P2 should be the first opcode |
| 89299 | ** in the subroutine from which this opcode is returnning. Thus the P2 |
| 89300 | ** value is a byte-code indentation hint. See tag-20220407a in |
| 89301 | ** wherecode.c and shell.c. |
| 89302 | */ |
| 89303 | case OP_Return: { /* in1 */ |
| 89304 | pIn1 = &aMem[pOp->p1]; |
| @@ -89956,11 +90171,11 @@ | |
| 89956 | } |
| 89957 | nByte = pIn1->n + pIn2->n; |
| 89958 | if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){ |
| 89959 | goto too_big; |
| 89960 | } |
| 89961 | if( sqlite3VdbeMemGrow(pOut, (int)nByte+3, pOut==pIn2) ){ |
| 89962 | goto no_mem; |
| 89963 | } |
| 89964 | MemSetTypeFlag(pOut, MEM_Str); |
| 89965 | if( pOut!=pIn2 ){ |
| 89966 | memcpy(pOut->z, pIn2->z, pIn2->n); |
| @@ -89968,13 +90183,13 @@ | |
| 89968 | pIn2->flags = flags2; |
| 89969 | } |
| 89970 | memcpy(&pOut->z[pIn2->n], pIn1->z, pIn1->n); |
| 89971 | assert( (pIn1->flags & MEM_Dyn) == (flags1 & MEM_Dyn) ); |
| 89972 | pIn1->flags = flags1; |
| 89973 | pOut->z[nByte]=0; |
| 89974 | pOut->z[nByte+1] = 0; |
| 89975 | pOut->z[nByte+2] = 0; |
| 89976 | pOut->flags |= MEM_Term; |
| 89977 | pOut->n = (int)nByte; |
| 89978 | pOut->enc = encoding; |
| 89979 | UPDATE_MAX_BLOBSIZE(pOut); |
| 89980 | break; |
| @@ -90021,25 +90236,24 @@ | |
| 90021 | case OP_Add: /* same as TK_PLUS, in1, in2, out3 */ |
| 90022 | case OP_Subtract: /* same as TK_MINUS, in1, in2, out3 */ |
| 90023 | case OP_Multiply: /* same as TK_STAR, in1, in2, out3 */ |
| 90024 | case OP_Divide: /* same as TK_SLASH, in1, in2, out3 */ |
| 90025 | case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */ |
| 90026 | u16 flags; /* Combined MEM_* flags from both inputs */ |
| 90027 | u16 type1; /* Numeric type of left operand */ |
| 90028 | u16 type2; /* Numeric type of right operand */ |
| 90029 | i64 iA; /* Integer value of left operand */ |
| 90030 | i64 iB; /* Integer value of right operand */ |
| 90031 | double rA; /* Real value of left operand */ |
| 90032 | double rB; /* Real value of right operand */ |
| 90033 | |
| 90034 | pIn1 = &aMem[pOp->p1]; |
| 90035 | type1 = numericType(pIn1); |
| 90036 | pIn2 = &aMem[pOp->p2]; |
| 90037 | type2 = numericType(pIn2); |
| 90038 | pOut = &aMem[pOp->p3]; |
| 90039 | flags = pIn1->flags | pIn2->flags; |
| 90040 | if( (type1 & type2 & MEM_Int)!=0 ){ |
| 90041 | iA = pIn1->u.i; |
| 90042 | iB = pIn2->u.i; |
| 90043 | switch( pOp->opcode ){ |
| 90044 | case OP_Add: if( sqlite3AddInt64(&iB,iA) ) goto fp_math; break; |
| 90045 | case OP_Subtract: if( sqlite3SubInt64(&iB,iA) ) goto fp_math; break; |
| @@ -90057,13 +90271,16 @@ | |
| 90057 | break; |
| 90058 | } |
| 90059 | } |
| 90060 | pOut->u.i = iB; |
| 90061 | MemSetTypeFlag(pOut, MEM_Int); |
| 90062 | }else if( (flags & MEM_Null)!=0 ){ |
| 90063 | goto arithmetic_result_is_null; |
| 90064 | }else{ |
| 90065 | fp_math: |
| 90066 | rA = sqlite3VdbeRealValue(pIn1); |
| 90067 | rB = sqlite3VdbeRealValue(pIn2); |
| 90068 | switch( pOp->opcode ){ |
| 90069 | case OP_Add: rB += rA; break; |
| @@ -90929,15 +91146,18 @@ | |
| 90929 | ** |
| 90930 | ** Check the cursor P1 to see if it is currently pointing at a NULL row. |
| 90931 | ** If it is, then set register P3 to NULL and jump immediately to P2. |
| 90932 | ** If P1 is not on a NULL row, then fall through without making any |
| 90933 | ** changes. |
| 90934 | */ |
| 90935 | case OP_IfNullRow: { /* jump */ |
| 90936 | assert( pOp->p1>=0 && pOp->p1<p->nCursor ); |
| 90937 | assert( p->apCsr[pOp->p1]!=0 ); |
| 90938 | if( p->apCsr[pOp->p1]->nullRow ){ |
| 90939 | sqlite3VdbeMemSetNull(aMem + pOp->p3); |
| 90940 | goto jump_to_p2; |
| 90941 | } |
| 90942 | break; |
| 90943 | } |
| @@ -92249,11 +92469,11 @@ | |
| 92249 | assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) ); |
| 92250 | /* See note about index shifting on OP_ReadCookie */ |
| 92251 | rc = sqlite3BtreeUpdateMeta(pDb->pBt, pOp->p2, pOp->p3); |
| 92252 | if( pOp->p2==BTREE_SCHEMA_VERSION ){ |
| 92253 | /* When the schema cookie changes, record the new cookie internally */ |
| 92254 | pDb->pSchema->schema_cookie = pOp->p3 - pOp->p5; |
| 92255 | db->mDbFlags |= DBFLAG_SchemaChange; |
| 92256 | sqlite3FkClearTriggerCache(db, pOp->p1); |
| 92257 | }else if( pOp->p2==BTREE_FILE_FORMAT ){ |
| 92258 | /* Record changes in the file format */ |
| 92259 | pDb->pSchema->file_format = pOp->p3; |
| @@ -93040,11 +93260,11 @@ | |
| 93040 | ** |
| 93041 | ** <li> If the cursor is successfully moved to the target row by 0 or more |
| 93042 | ** sqlite3BtreeNext() calls, then jump to This.P2, which will land just |
| 93043 | ** past the OP_IdxGT or OP_IdxGE opcode that follows the OP_SeekGE. |
| 93044 | ** |
| 93045 | ** <li> If the cursor ends up past the target row (indicating the the target |
| 93046 | ** row does not exist in the btree) then jump to SeekOP.P2. |
| 93047 | ** </ol> |
| 93048 | */ |
| 93049 | case OP_SeekScan: { |
| 93050 | VdbeCursor *pC; |
| @@ -94376,11 +94596,13 @@ | |
| 94376 | rc = sqlite3VdbeSorterNext(db, pC); |
| 94377 | goto next_tail; |
| 94378 | |
| 94379 | case OP_Prev: /* jump */ |
| 94380 | assert( pOp->p1>=0 && pOp->p1<p->nCursor ); |
| 94381 | assert( pOp->p5<ArraySize(p->aCounter) ); |
| 94382 | pC = p->apCsr[pOp->p1]; |
| 94383 | assert( pC!=0 ); |
| 94384 | assert( pC->deferredMoveto==0 ); |
| 94385 | assert( pC->eCurType==CURTYPE_BTREE ); |
| 94386 | assert( pC->seekOp==OP_SeekLT || pC->seekOp==OP_SeekLE |
| @@ -94389,11 +94611,13 @@ | |
| 94389 | rc = sqlite3BtreePrevious(pC->uc.pCursor, pOp->p3); |
| 94390 | goto next_tail; |
| 94391 | |
| 94392 | case OP_Next: /* jump */ |
| 94393 | assert( pOp->p1>=0 && pOp->p1<p->nCursor ); |
| 94394 | assert( pOp->p5<ArraySize(p->aCounter) ); |
| 94395 | pC = p->apCsr[pOp->p1]; |
| 94396 | assert( pC!=0 ); |
| 94397 | assert( pC->deferredMoveto==0 ); |
| 94398 | assert( pC->eCurType==CURTYPE_BTREE ); |
| 94399 | assert( pC->seekOp==OP_SeekGT || pC->seekOp==OP_SeekGE |
| @@ -94596,14 +94820,14 @@ | |
| 94596 | |
| 94597 | /* The IdxRowid and Seek opcodes are combined because of the commonality |
| 94598 | ** of sqlite3VdbeCursorRestore() and sqlite3VdbeIdxRowid(). */ |
| 94599 | rc = sqlite3VdbeCursorRestore(pC); |
| 94600 | |
| 94601 | /* sqlite3VbeCursorRestore() can only fail if the record has been deleted |
| 94602 | ** out from under the cursor. That will never happens for an IdxRowid |
| 94603 | ** or Seek opcode */ |
| 94604 | if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error; |
| 94605 | |
| 94606 | if( !pC->nullRow ){ |
| 94607 | rowid = 0; /* Not needed. Only used to silence a warning. */ |
| 94608 | rc = sqlite3VdbeIdxRowid(db, pC->uc.pCursor, &rowid); |
| 94609 | if( rc!=SQLITE_OK ){ |
| @@ -95501,11 +95725,11 @@ | |
| 95501 | |
| 95502 | /* Opcode: OffsetLimit P1 P2 P3 * * |
| 95503 | ** Synopsis: if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1) |
| 95504 | ** |
| 95505 | ** This opcode performs a commonly used computation associated with |
| 95506 | ** LIMIT and OFFSET process. r[P1] holds the limit counter. r[P3] |
| 95507 | ** holds the offset counter. The opcode computes the combined value |
| 95508 | ** of the LIMIT and OFFSET and stores that value in r[P2]. The r[P2] |
| 95509 | ** value computed is the total number of rows that will need to be |
| 95510 | ** visited in order to complete the query. |
| 95511 | ** |
| @@ -101098,10 +101322,12 @@ | |
| 101098 | sqlite3_file *pJfd, /* Preallocated, blank file handle */ |
| 101099 | int flags, /* Opening flags */ |
| 101100 | int nSpill /* Bytes buffered before opening the file */ |
| 101101 | ){ |
| 101102 | MemJournal *p = (MemJournal*)pJfd; |
| 101103 | |
| 101104 | /* Zero the file-handle object. If nSpill was passed zero, initialize |
| 101105 | ** it using the sqlite3OsOpen() function of the underlying VFS. In this |
| 101106 | ** case none of the code in this module is executed as a result of calls |
| 101107 | ** made on the journal file-handle. */ |
| @@ -101526,37 +101752,25 @@ | |
| 101526 | pDup = sqlite3ExprDup(db, pOrig, 0); |
| 101527 | if( db->mallocFailed ){ |
| 101528 | sqlite3ExprDelete(db, pDup); |
| 101529 | pDup = 0; |
| 101530 | }else{ |
| 101531 | incrAggFunctionDepth(pDup, nSubquery); |
| 101532 | if( pExpr->op==TK_COLLATE ){ |
| 101533 | assert( !ExprHasProperty(pExpr, EP_IntValue) ); |
| 101534 | pDup = sqlite3ExprAddCollateString(pParse, pDup, pExpr->u.zToken); |
| 101535 | } |
| 101536 | |
| 101537 | /* Before calling sqlite3ExprDelete(), set the EP_Static flag. This |
| 101538 | ** prevents ExprDelete() from deleting the Expr structure itself, |
| 101539 | ** allowing it to be repopulated by the memcpy() on the following line. |
| 101540 | ** The pExpr->u.zToken might point into memory that will be freed by the |
| 101541 | ** sqlite3DbFree(db, pDup) on the last line of this block, so be sure to |
| 101542 | ** make a copy of the token before doing the sqlite3DbFree(). |
| 101543 | */ |
| 101544 | ExprSetProperty(pExpr, EP_Static); |
| 101545 | sqlite3ExprDelete(db, pExpr); |
| 101546 | memcpy(pExpr, pDup, sizeof(*pExpr)); |
| 101547 | if( !ExprHasProperty(pExpr, EP_IntValue) && pExpr->u.zToken!=0 ){ |
| 101548 | assert( (pExpr->flags & (EP_Reduced|EP_TokenOnly))==0 ); |
| 101549 | pExpr->u.zToken = sqlite3DbStrDup(db, pExpr->u.zToken); |
| 101550 | pExpr->flags |= EP_MemToken; |
| 101551 | } |
| 101552 | if( ExprHasProperty(pExpr, EP_WinFunc) ){ |
| 101553 | if( ALWAYS(pExpr->y.pWin!=0) ){ |
| 101554 | pExpr->y.pWin->pOwner = pExpr; |
| 101555 | } |
| 101556 | } |
| 101557 | sqlite3DbFree(db, pDup); |
| 101558 | } |
| 101559 | } |
| 101560 | |
| 101561 | /* |
| 101562 | ** Subqueries stores the original database, table and column names for their |
| @@ -101755,11 +101969,11 @@ | |
| 101755 | for(i=0, pItem=pSrcList->a; i<pSrcList->nSrc; i++, pItem++){ |
| 101756 | u8 hCol; |
| 101757 | pTab = pItem->pTab; |
| 101758 | assert( pTab!=0 && pTab->zName!=0 ); |
| 101759 | assert( pTab->nCol>0 || pParse->nErr ); |
| 101760 | assert( pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) ); |
| 101761 | if( pItem->fg.isNestedFrom ){ |
| 101762 | /* In this case, pItem is a subquery that has been formed from a |
| 101763 | ** parenthesized subset of the FROM clause terms. Example: |
| 101764 | ** .... FROM t1 LEFT JOIN (t2 RIGHT JOIN t3 USING(x)) USING(y) ... |
| 101765 | ** \_________________________/ |
| @@ -103265,12 +103479,12 @@ | |
| 103265 | */ |
| 103266 | assert( (sNC.ncFlags & (NC_UAggInfo|NC_UUpsert|NC_UBaseReg))==0 ); |
| 103267 | sNC.uNC.pEList = p->pEList; |
| 103268 | sNC.ncFlags |= NC_UEList; |
| 103269 | if( p->pHaving ){ |
| 103270 | if( !pGroupBy ){ |
| 103271 | sqlite3ErrorMsg(pParse, "a GROUP BY clause is required before HAVING"); |
| 103272 | return WRC_Abort; |
| 103273 | } |
| 103274 | if( sqlite3ResolveExprNames(&sNC, p->pHaving) ) return WRC_Abort; |
| 103275 | } |
| 103276 | if( sqlite3ResolveExprNames(&sNC, p->pWhere) ) return WRC_Abort; |
| @@ -104361,11 +104575,13 @@ | |
| 104361 | ** Also propagate EP_Propagate flags up from Expr.x.pList to Expr.flags, |
| 104362 | ** if appropriate. |
| 104363 | */ |
| 104364 | static void exprSetHeight(Expr *p){ |
| 104365 | int nHeight = p->pLeft ? p->pLeft->nHeight : 0; |
| 104366 | if( p->pRight && p->pRight->nHeight>nHeight ) nHeight = p->pRight->nHeight; |
| 104367 | if( ExprUseXSelect(p) ){ |
| 104368 | heightOfSelect(p->x.pSelect, &nHeight); |
| 104369 | }else if( p->x.pList ){ |
| 104370 | heightOfExprList(p->x.pList, &nHeight); |
| 104371 | p->flags |= EP_Propagate & sqlite3ExprListFlags(p->x.pList); |
| @@ -104504,19 +104720,30 @@ | |
| 104504 | if( pRoot==0 ){ |
| 104505 | assert( db->mallocFailed ); |
| 104506 | sqlite3ExprDelete(db, pLeft); |
| 104507 | sqlite3ExprDelete(db, pRight); |
| 104508 | }else{ |
| 104509 | if( pRight ){ |
| 104510 | pRoot->pRight = pRight; |
| 104511 | pRoot->flags |= EP_Propagate & pRight->flags; |
| 104512 | } |
| 104513 | if( pLeft ){ |
| 104514 | pRoot->pLeft = pLeft; |
| 104515 | pRoot->flags |= EP_Propagate & pLeft->flags; |
| 104516 | } |
| 104517 | exprSetHeight(pRoot); |
| 104518 | } |
| 104519 | } |
| 104520 | |
| 104521 | /* |
| 104522 | ** Allocate an Expr node which joins as many as two subtrees. |
| @@ -104798,10 +105025,11 @@ | |
| 104798 | /* |
| 104799 | ** Recursively delete an expression tree. |
| 104800 | */ |
| 104801 | static SQLITE_NOINLINE void sqlite3ExprDeleteNN(sqlite3 *db, Expr *p){ |
| 104802 | assert( p!=0 ); |
| 104803 | assert( !ExprUseUValue(p) || p->u.iValue>=0 ); |
| 104804 | assert( !ExprUseYWin(p) || !ExprUseYSub(p) ); |
| 104805 | assert( !ExprUseYWin(p) || p->y.pWin!=0 || db->mallocFailed ); |
| 104806 | assert( p->op!=TK_FUNCTION || !ExprUseYSub(p) ); |
| 104807 | #ifdef SQLITE_DEBUG |
| @@ -104829,16 +105057,12 @@ | |
| 104829 | sqlite3WindowDelete(db, p->y.pWin); |
| 104830 | } |
| 104831 | #endif |
| 104832 | } |
| 104833 | } |
| 104834 | if( ExprHasProperty(p, EP_MemToken) ){ |
| 104835 | assert( !ExprHasProperty(p, EP_IntValue) ); |
| 104836 | sqlite3DbFree(db, p->u.zToken); |
| 104837 | } |
| 104838 | if( !ExprHasProperty(p, EP_Static) ){ |
| 104839 | sqlite3DbFreeNN(db, p); |
| 104840 | } |
| 104841 | } |
| 104842 | SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3 *db, Expr *p){ |
| 104843 | if( p ) sqlite3ExprDeleteNN(db, p); |
| 104844 | } |
| @@ -104865,12 +105089,13 @@ | |
| 104865 | ** |
| 104866 | ** The deferred delete is (currently) implemented by adding the |
| 104867 | ** pExpr to the pParse->pConstExpr list with a register number of 0. |
| 104868 | */ |
| 104869 | SQLITE_PRIVATE void sqlite3ExprDeferredDelete(Parse *pParse, Expr *pExpr){ |
| 104870 | pParse->pConstExpr = |
| 104871 | sqlite3ExprListAppend(pParse, pParse->pConstExpr, pExpr); |
| 104872 | } |
| 104873 | |
| 104874 | /* Invoke sqlite3RenameExprUnmap() and sqlite3ExprDelete() on the |
| 104875 | ** expression. |
| 104876 | */ |
| @@ -104940,11 +105165,10 @@ | |
| 104940 | ){ |
| 104941 | nSize = EXPR_FULLSIZE; |
| 104942 | }else{ |
| 104943 | assert( !ExprHasProperty(p, EP_TokenOnly|EP_Reduced) ); |
| 104944 | assert( !ExprHasProperty(p, EP_OuterON) ); |
| 104945 | assert( !ExprHasProperty(p, EP_MemToken) ); |
| 104946 | assert( !ExprHasVVAProperty(p, EP_NoReduce) ); |
| 104947 | if( p->pLeft || p->x.pList ){ |
| 104948 | nSize = EXPR_REDUCEDSIZE | EP_Reduced; |
| 104949 | }else{ |
| 104950 | assert( p->pRight==0 ); |
| @@ -105044,11 +105268,11 @@ | |
| 105044 | memset(&zAlloc[nSize], 0, EXPR_FULLSIZE-nSize); |
| 105045 | } |
| 105046 | } |
| 105047 | |
| 105048 | /* Set the EP_Reduced, EP_TokenOnly, and EP_Static flags appropriately. */ |
| 105049 | pNew->flags &= ~(EP_Reduced|EP_TokenOnly|EP_Static|EP_MemToken); |
| 105050 | pNew->flags |= nStructSize & (EP_Reduced|EP_TokenOnly); |
| 105051 | pNew->flags |= staticFlag; |
| 105052 | ExprClearVVAProperties(pNew); |
| 105053 | if( dupFlags ){ |
| 105054 | ExprSetVVAProperty(pNew, EP_Immutable); |
| @@ -105620,16 +105844,17 @@ | |
| 105620 | */ |
| 105621 | static SQLITE_NOINLINE void exprListDeleteNN(sqlite3 *db, ExprList *pList){ |
| 105622 | int i = pList->nExpr; |
| 105623 | struct ExprList_item *pItem = pList->a; |
| 105624 | assert( pList->nExpr>0 ); |
| 105625 | do{ |
| 105626 | sqlite3ExprDelete(db, pItem->pExpr); |
| 105627 | sqlite3DbFree(db, pItem->zEName); |
| 105628 | pItem++; |
| 105629 | }while( --i>0 ); |
| 105630 | sqlite3DbFreeNN(db, pList); |
| 105631 | } |
| 105632 | SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){ |
| 105633 | if( pList ) exprListDeleteNN(db, pList); |
| 105634 | } |
| 105635 | |
| @@ -106916,11 +107141,11 @@ | |
| 106916 | if( pLimit ){ |
| 106917 | pLimit->affExpr = SQLITE_AFF_NUMERIC; |
| 106918 | pLimit = sqlite3PExpr(pParse, TK_NE, |
| 106919 | sqlite3ExprDup(db, pSel->pLimit->pLeft, 0), pLimit); |
| 106920 | } |
| 106921 | sqlite3ExprDelete(db, pSel->pLimit->pLeft); |
| 106922 | pSel->pLimit->pLeft = pLimit; |
| 106923 | }else{ |
| 106924 | /* If there is no pre-existing limit add a limit of 1 */ |
| 106925 | pLimit = sqlite3Expr(pParse->db, TK_INTEGER, "1"); |
| 106926 | pSel->pLimit = sqlite3PExpr(pParse, TK_LIMIT, pLimit, 0); |
| @@ -107430,11 +107655,11 @@ | |
| 107430 | u8 p5 /* P5 value for OP_Column + FLAGS */ |
| 107431 | ){ |
| 107432 | assert( pParse->pVdbe!=0 ); |
| 107433 | sqlite3ExprCodeGetColumnOfTable(pParse->pVdbe, pTab, iTable, iColumn, iReg); |
| 107434 | if( p5 ){ |
| 107435 | VdbeOp *pOp = sqlite3VdbeGetOp(pParse->pVdbe,-1); |
| 107436 | if( pOp->opcode==OP_Column ) pOp->p5 = p5; |
| 107437 | } |
| 107438 | return iReg; |
| 107439 | } |
| 107440 | |
| @@ -107499,11 +107724,11 @@ | |
| 107499 | /* |
| 107500 | ** If the last opcode is a OP_Copy, then set the do-not-merge flag (p5) |
| 107501 | ** so that a subsequent copy will not be merged into this one. |
| 107502 | */ |
| 107503 | static void setDoNotMergeFlagOnCopy(Vdbe *v){ |
| 107504 | if( sqlite3VdbeGetOp(v, -1)->opcode==OP_Copy ){ |
| 107505 | sqlite3VdbeChangeP5(v, 1); /* Tag trailing OP_Copy as not mergable */ |
| 107506 | } |
| 107507 | } |
| 107508 | |
| 107509 | /* |
| @@ -107670,11 +107895,11 @@ | |
| 107670 | Table *pTab = pCol->pTab; |
| 107671 | sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdxPTab, |
| 107672 | pCol->iSorterColumn, target); |
| 107673 | if( pCol->iColumn<0 ){ |
| 107674 | VdbeComment((v,"%s.rowid",pTab->zName)); |
| 107675 | }else{ |
| 107676 | VdbeComment((v,"%s.%s", |
| 107677 | pTab->zName, pTab->aCol[pCol->iColumn].zCnName)); |
| 107678 | if( pTab->aCol[pCol->iColumn].affinity==SQLITE_AFF_REAL ){ |
| 107679 | sqlite3VdbeAddOp1(v, OP_RealAffinity, target); |
| 107680 | } |
| @@ -108265,10 +108490,25 @@ | |
| 108265 | ** on a LEFT JOIN NULL row. |
| 108266 | */ |
| 108267 | case TK_IF_NULL_ROW: { |
| 108268 | int addrINR; |
| 108269 | u8 okConstFactor = pParse->okConstFactor; |
| 108270 | addrINR = sqlite3VdbeAddOp1(v, OP_IfNullRow, pExpr->iTable); |
| 108271 | /* Temporarily disable factoring of constant expressions, since |
| 108272 | ** even though expressions may appear to be constant, they are not |
| 108273 | ** really constant because they originate from the right-hand side |
| 108274 | ** of a LEFT JOIN. */ |
| @@ -108606,11 +108846,11 @@ | |
| 108606 | }else{ |
| 108607 | int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i); |
| 108608 | if( inReg!=target+i ){ |
| 108609 | VdbeOp *pOp; |
| 108610 | if( copyOp==OP_Copy |
| 108611 | && (pOp=sqlite3VdbeGetOp(v, -1))->opcode==OP_Copy |
| 108612 | && pOp->p1+pOp->p3+1==inReg |
| 108613 | && pOp->p2+pOp->p3+1==target+i |
| 108614 | && pOp->p5==0 /* The do-not-merge flag must be clear */ |
| 108615 | ){ |
| 108616 | pOp->p3++; |
| @@ -109642,10 +109882,11 @@ | |
| 109642 | ** fact is exploited for efficiency. |
| 109643 | */ |
| 109644 | SQLITE_PRIVATE int sqlite3ReferencesSrcList(Parse *pParse, Expr *pExpr, SrcList *pSrcList){ |
| 109645 | Walker w; |
| 109646 | struct RefSrcList x; |
| 109647 | memset(&w, 0, sizeof(w)); |
| 109648 | memset(&x, 0, sizeof(x)); |
| 109649 | w.xExprCallback = exprRefToSrcList; |
| 109650 | w.xSelectCallback = selectRefEnter; |
| 109651 | w.xSelectCallback2 = selectRefLeave; |
| @@ -109658,11 +109899,11 @@ | |
| 109658 | #ifndef SQLITE_OMIT_WINDOWFUNC |
| 109659 | if( ExprHasProperty(pExpr, EP_WinFunc) ){ |
| 109660 | sqlite3WalkExpr(&w, pExpr->y.pWin->pFilter); |
| 109661 | } |
| 109662 | #endif |
| 109663 | sqlite3DbFree(pParse->db, x.aiExclude); |
| 109664 | if( w.eCode & 0x01 ){ |
| 109665 | return 1; |
| 109666 | }else if( w.eCode ){ |
| 109667 | return 0; |
| 109668 | }else{ |
| @@ -109689,21 +109930,22 @@ | |
| 109689 | ){ |
| 109690 | AggInfo *pAggInfo = pExpr->pAggInfo; |
| 109691 | int iAgg = pExpr->iAgg; |
| 109692 | Parse *pParse = pWalker->pParse; |
| 109693 | sqlite3 *db = pParse->db; |
| 109694 | assert( pExpr->op==TK_AGG_COLUMN || pExpr->op==TK_AGG_FUNCTION ); |
| 109695 | if( pExpr->op==TK_AGG_COLUMN ){ |
| 109696 | assert( iAgg>=0 && iAgg<pAggInfo->nColumn ); |
| 109697 | if( pAggInfo->aCol[iAgg].pCExpr==pExpr ){ |
| 109698 | pExpr = sqlite3ExprDup(db, pExpr, 0); |
| 109699 | if( pExpr ){ |
| 109700 | pAggInfo->aCol[iAgg].pCExpr = pExpr; |
| 109701 | sqlite3ExprDeferredDelete(pParse, pExpr); |
| 109702 | } |
| 109703 | } |
| 109704 | }else{ |
| 109705 | assert( iAgg>=0 && iAgg<pAggInfo->nFunc ); |
| 109706 | if( pAggInfo->aFunc[iAgg].pFExpr==pExpr ){ |
| 109707 | pExpr = sqlite3ExprDup(db, pExpr, 0); |
| 109708 | if( pExpr ){ |
| 109709 | pAggInfo->aFunc[iAgg].pFExpr = pExpr; |
| @@ -109770,14 +110012,16 @@ | |
| 109770 | SrcList *pSrcList = pNC->pSrcList; |
| 109771 | AggInfo *pAggInfo = pNC->uNC.pAggInfo; |
| 109772 | |
| 109773 | assert( pNC->ncFlags & NC_UAggInfo ); |
| 109774 | switch( pExpr->op ){ |
| 109775 | case TK_AGG_COLUMN: |
| 109776 | case TK_COLUMN: { |
| 109777 | testcase( pExpr->op==TK_AGG_COLUMN ); |
| 109778 | testcase( pExpr->op==TK_COLUMN ); |
| 109779 | /* Check to see if the column is in one of the tables in the FROM |
| 109780 | ** clause of the aggregate query */ |
| 109781 | if( ALWAYS(pSrcList!=0) ){ |
| 109782 | SrcItem *pItem = pSrcList->a; |
| 109783 | for(i=0; i<pSrcList->nSrc; i++, pItem++){ |
| @@ -109791,12 +110035,14 @@ | |
| 109791 | ** is not an entry there already. |
| 109792 | */ |
| 109793 | int k; |
| 109794 | pCol = pAggInfo->aCol; |
| 109795 | for(k=0; k<pAggInfo->nColumn; k++, pCol++){ |
| 109796 | if( pCol->iTable==pExpr->iTable && |
| 109797 | pCol->iColumn==pExpr->iColumn ){ |
| 109798 | break; |
| 109799 | } |
| 109800 | } |
| 109801 | if( (k>=pAggInfo->nColumn) |
| 109802 | && (k = addAggInfoColumn(pParse->db, pAggInfo))>=0 |
| @@ -109807,19 +110053,21 @@ | |
| 109807 | pCol->iTable = pExpr->iTable; |
| 109808 | pCol->iColumn = pExpr->iColumn; |
| 109809 | pCol->iMem = ++pParse->nMem; |
| 109810 | pCol->iSorterColumn = -1; |
| 109811 | pCol->pCExpr = pExpr; |
| 109812 | if( pAggInfo->pGroupBy ){ |
| 109813 | int j, n; |
| 109814 | ExprList *pGB = pAggInfo->pGroupBy; |
| 109815 | struct ExprList_item *pTerm = pGB->a; |
| 109816 | n = pGB->nExpr; |
| 109817 | for(j=0; j<n; j++, pTerm++){ |
| 109818 | Expr *pE = pTerm->pExpr; |
| 109819 | if( pE->op==TK_COLUMN && pE->iTable==pExpr->iTable && |
| 109820 | pE->iColumn==pExpr->iColumn ){ |
| 109821 | pCol->iSorterColumn = j; |
| 109822 | break; |
| 109823 | } |
| 109824 | } |
| 109825 | } |
| @@ -109832,11 +110080,13 @@ | |
| 109832 | ** Convert the pExpr to be a TK_AGG_COLUMN referring to that |
| 109833 | ** pAggInfo->aCol[] entry. |
| 109834 | */ |
| 109835 | ExprSetVVAProperty(pExpr, EP_NoReduce); |
| 109836 | pExpr->pAggInfo = pAggInfo; |
| 109837 | pExpr->op = TK_AGG_COLUMN; |
| 109838 | pExpr->iAgg = (i16)k; |
| 109839 | break; |
| 109840 | } /* endif pExpr->iTable==pItem->iCursor */ |
| 109841 | } /* end loop over pSrcList */ |
| 109842 | } |
| @@ -115254,10 +115504,11 @@ | |
| 115254 | ** no VDBE code was generated. |
| 115255 | */ |
| 115256 | SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){ |
| 115257 | sqlite3 *db; |
| 115258 | Vdbe *v; |
| 115259 | |
| 115260 | assert( pParse->pToplevel==0 ); |
| 115261 | db = pParse->db; |
| 115262 | assert( db->pParse==pParse ); |
| 115263 | if( pParse->nested ) return; |
| @@ -115283,11 +115534,10 @@ | |
| 115283 | || sqlite3VdbeAssertMayAbort(v, pParse->mayAbort)); |
| 115284 | if( v ){ |
| 115285 | if( pParse->bReturning ){ |
| 115286 | Returning *pReturning = pParse->u1.pReturning; |
| 115287 | int addrRewind; |
| 115288 | int i; |
| 115289 | int reg; |
| 115290 | |
| 115291 | if( pReturning->nRetCol ){ |
| 115292 | sqlite3VdbeAddOp0(v, OP_FkCheck); |
| 115293 | addrRewind = |
| @@ -115320,80 +115570,73 @@ | |
| 115320 | ** (Bit 0 is for main, bit 1 is for temp, and so forth.) Bits are |
| 115321 | ** set for each database that is used. Generate code to start a |
| 115322 | ** transaction on each used database and to verify the schema cookie |
| 115323 | ** on each used database. |
| 115324 | */ |
| 115325 | if( db->mallocFailed==0 |
| 115326 | && (DbMaskNonZero(pParse->cookieMask) || pParse->pConstExpr) |
| 115327 | ){ |
| 115328 | int iDb, i; |
| 115329 | assert( sqlite3VdbeGetOp(v, 0)->opcode==OP_Init ); |
| 115330 | sqlite3VdbeJumpHere(v, 0); |
| 115331 | assert( db->nDb>0 ); |
| 115332 | iDb = 0; |
| 115333 | do{ |
| 115334 | Schema *pSchema; |
| 115335 | if( DbMaskTest(pParse->cookieMask, iDb)==0 ) continue; |
| 115336 | sqlite3VdbeUsesBtree(v, iDb); |
| 115337 | pSchema = db->aDb[iDb].pSchema; |
| 115338 | sqlite3VdbeAddOp4Int(v, |
| 115339 | OP_Transaction, /* Opcode */ |
| 115340 | iDb, /* P1 */ |
| 115341 | DbMaskTest(pParse->writeMask,iDb), /* P2 */ |
| 115342 | pSchema->schema_cookie, /* P3 */ |
| 115343 | pSchema->iGeneration /* P4 */ |
| 115344 | ); |
| 115345 | if( db->init.busy==0 ) sqlite3VdbeChangeP5(v, 1); |
| 115346 | VdbeComment((v, |
| 115347 | "usesStmtJournal=%d", pParse->mayAbort && pParse->isMultiWrite)); |
| 115348 | }while( ++iDb<db->nDb ); |
| 115349 | #ifndef SQLITE_OMIT_VIRTUALTABLE |
| 115350 | for(i=0; i<pParse->nVtabLock; i++){ |
| 115351 | char *vtab = (char *)sqlite3GetVTable(db, pParse->apVtabLock[i]); |
| 115352 | sqlite3VdbeAddOp4(v, OP_VBegin, 0, 0, 0, vtab, P4_VTAB); |
| 115353 | } |
| 115354 | pParse->nVtabLock = 0; |
| 115355 | #endif |
| 115356 | |
| 115357 | /* Once all the cookies have been verified and transactions opened, |
| 115358 | ** obtain the required table-locks. This is a no-op unless the |
| 115359 | ** shared-cache feature is enabled. |
| 115360 | */ |
| 115361 | codeTableLocks(pParse); |
| 115362 | |
| 115363 | /* Initialize any AUTOINCREMENT data structures required. |
| 115364 | */ |
| 115365 | sqlite3AutoincrementBegin(pParse); |
| 115366 | |
| 115367 | /* Code constant expressions that where factored out of inner loops. |
| 115368 | ** |
| 115369 | ** The pConstExpr list might also contain expressions that we simply |
| 115370 | ** want to keep around until the Parse object is deleted. Such |
| 115371 | ** expressions have iConstExprReg==0. Do not generate code for |
| 115372 | ** those expressions, of course. |
| 115373 | */ |
| 115374 | if( pParse->pConstExpr ){ |
| 115375 | ExprList *pEL = pParse->pConstExpr; |
| 115376 | pParse->okConstFactor = 0; |
| 115377 | for(i=0; i<pEL->nExpr; i++){ |
| 115378 | int iReg = pEL->a[i].u.iConstExprReg; |
| 115379 | if( iReg>0 ){ |
| 115380 | sqlite3ExprCode(pParse, pEL->a[i].pExpr, iReg); |
| 115381 | } |
| 115382 | } |
| 115383 | } |
| 115384 | |
| 115385 | if( pParse->bReturning ){ |
| 115386 | Returning *pRet = pParse->u1.pReturning; |
| 115387 | if( pRet->nRetCol ){ |
| 115388 | sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pRet->iRetCur, pRet->nRetCol); |
| 115389 | } |
| 115390 | } |
| 115391 | |
| 115392 | /* Finally, jump back to the beginning of the executable code. */ |
| 115393 | sqlite3VdbeGoto(v, 1); |
| 115394 | } |
| 115395 | } |
| 115396 | |
| 115397 | /* Get the VDBE program ready for execution |
| 115398 | */ |
| 115399 | assert( v!=0 || pParse->nErr ); |
| @@ -115445,12 +115688,10 @@ | |
| 115445 | pParse->nested++; |
| 115446 | memcpy(saveBuf, PARSE_TAIL(pParse), PARSE_TAIL_SZ); |
| 115447 | memset(PARSE_TAIL(pParse), 0, PARSE_TAIL_SZ); |
| 115448 | db->mDbFlags |= DBFLAG_PreferBuiltin; |
| 115449 | sqlite3RunParser(pParse, zSql); |
| 115450 | sqlite3DbFree(db, pParse->zErrMsg); |
| 115451 | pParse->zErrMsg = 0; |
| 115452 | db->mDbFlags = savedDbFlags; |
| 115453 | sqlite3DbFree(db, zSql); |
| 115454 | memcpy(PARSE_TAIL(pParse), saveBuf, PARSE_TAIL_SZ); |
| 115455 | pParse->nested--; |
| 115456 | } |
| @@ -115898,20 +116139,21 @@ | |
| 115898 | */ |
| 115899 | SQLITE_PRIVATE void sqlite3DeleteColumnNames(sqlite3 *db, Table *pTable){ |
| 115900 | int i; |
| 115901 | Column *pCol; |
| 115902 | assert( pTable!=0 ); |
| 115903 | if( (pCol = pTable->aCol)!=0 ){ |
| 115904 | for(i=0; i<pTable->nCol; i++, pCol++){ |
| 115905 | assert( pCol->zCnName==0 || pCol->hName==sqlite3StrIHash(pCol->zCnName) ); |
| 115906 | sqlite3DbFree(db, pCol->zCnName); |
| 115907 | } |
| 115908 | sqlite3DbFree(db, pTable->aCol); |
| 115909 | if( IsOrdinaryTable(pTable) ){ |
| 115910 | sqlite3ExprListDelete(db, pTable->u.tab.pDfltList); |
| 115911 | } |
| 115912 | if( db==0 || db->pnBytesFreed==0 ){ |
| 115913 | pTable->aCol = 0; |
| 115914 | pTable->nCol = 0; |
| 115915 | if( IsOrdinaryTable(pTable) ){ |
| 115916 | pTable->u.tab.pDfltList = 0; |
| 115917 | } |
| @@ -115944,21 +116186,22 @@ | |
| 115944 | ** |
| 115945 | ** If malloc has already failed, it may be that it failed while allocating |
| 115946 | ** a Table object that was going to be marked ephemeral. So do not check |
| 115947 | ** that no lookaside memory is used in this case either. */ |
| 115948 | int nLookaside = 0; |
| 115949 | if( db && !db->mallocFailed && (pTable->tabFlags & TF_Ephemeral)==0 ){ |
| 115950 | nLookaside = sqlite3LookasideUsed(db, 0); |
| 115951 | } |
| 115952 | #endif |
| 115953 | |
| 115954 | /* Delete all indices associated with this table. */ |
| 115955 | for(pIndex = pTable->pIndex; pIndex; pIndex=pNext){ |
| 115956 | pNext = pIndex->pNext; |
| 115957 | assert( pIndex->pSchema==pTable->pSchema |
| 115958 | || (IsVirtual(pTable) && pIndex->idxType!=SQLITE_IDXTYPE_APPDEF) ); |
| 115959 | if( (db==0 || db->pnBytesFreed==0) && !IsVirtual(pTable) ){ |
| 115960 | char *zName = pIndex->zName; |
| 115961 | TESTONLY ( Index *pOld = ) sqlite3HashInsert( |
| 115962 | &pIndex->pSchema->idxHash, zName, 0 |
| 115963 | ); |
| 115964 | assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) ); |
| @@ -115991,12 +116234,13 @@ | |
| 115991 | /* Verify that no lookaside memory was used by schema tables */ |
| 115992 | assert( nLookaside==0 || nLookaside==sqlite3LookasideUsed(db,0) ); |
| 115993 | } |
| 115994 | SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3 *db, Table *pTable){ |
| 115995 | /* Do not delete the table until the reference count reaches zero. */ |
| 115996 | if( !pTable ) return; |
| 115997 | if( ((!db || db->pnBytesFreed==0) && (--pTable->nTabRef)>0) ) return; |
| 115998 | deleteTable(db, pTable); |
| 115999 | } |
| 116000 | |
| 116001 | |
| 116002 | /* |
| @@ -118165,11 +118409,11 @@ | |
| 118165 | /* |
| 118166 | ** The Table structure pTable is really a VIEW. Fill in the names of |
| 118167 | ** the columns of the view in the pTable structure. Return the number |
| 118168 | ** of errors. If an error is seen leave an error message in pParse->zErrMsg. |
| 118169 | */ |
| 118170 | SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){ |
| 118171 | Table *pSelTab; /* A fake table from which we get the result set */ |
| 118172 | Select *pSel; /* Copy of the SELECT that implements the view */ |
| 118173 | int nErr = 0; /* Number of errors encountered */ |
| 118174 | sqlite3 *db = pParse->db; /* Database connection for malloc errors */ |
| 118175 | #ifndef SQLITE_OMIT_VIRTUALTABLE |
| @@ -118190,13 +118434,14 @@ | |
| 118190 | } |
| 118191 | #endif |
| 118192 | |
| 118193 | #ifndef SQLITE_OMIT_VIEW |
| 118194 | /* A positive nCol means the columns names for this view are |
| 118195 | ** already known. |
| 118196 | */ |
| 118197 | if( pTable->nCol>0 ) return 0; |
| 118198 | |
| 118199 | /* A negative nCol is a special marker meaning that we are currently |
| 118200 | ** trying to compute the column names. If we enter this routine with |
| 118201 | ** a negative nCol, it means two or more views form a loop, like this: |
| 118202 | ** |
| @@ -118287,10 +118532,15 @@ | |
| 118287 | if( db->mallocFailed ){ |
| 118288 | sqlite3DeleteColumnNames(db, pTable); |
| 118289 | } |
| 118290 | #endif /* SQLITE_OMIT_VIEW */ |
| 118291 | return nErr; |
| 118292 | } |
| 118293 | #endif /* !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) */ |
| 118294 | |
| 118295 | #ifndef SQLITE_OMIT_VIEW |
| 118296 | /* |
| @@ -119153,11 +119403,11 @@ | |
| 119153 | if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName,"index",pTab->zName) ){ |
| 119154 | goto exit_create_index; |
| 119155 | } |
| 119156 | if( !IN_RENAME_OBJECT ){ |
| 119157 | if( !db->init.busy ){ |
| 119158 | if( sqlite3FindTable(db, zName, 0)!=0 ){ |
| 119159 | sqlite3ErrorMsg(pParse, "there is already a table named %s", zName); |
| 119160 | goto exit_create_index; |
| 119161 | } |
| 119162 | } |
| 119163 | if( sqlite3FindIndex(db, zName, pDb->zDbSName)!=0 ){ |
| @@ -119806,16 +120056,17 @@ | |
| 119806 | /* |
| 119807 | ** Delete an IdList. |
| 119808 | */ |
| 119809 | SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3 *db, IdList *pList){ |
| 119810 | int i; |
| 119811 | if( pList==0 ) return; |
| 119812 | assert( pList->eU4!=EU4_EXPR ); /* EU4_EXPR mode is not currently used */ |
| 119813 | for(i=0; i<pList->nId; i++){ |
| 119814 | sqlite3DbFree(db, pList->a[i].zName); |
| 119815 | } |
| 119816 | sqlite3DbFreeNN(db, pList); |
| 119817 | } |
| 119818 | |
| 119819 | /* |
| 119820 | ** Return the index in pList of the identifier named zId. Return -1 |
| 119821 | ** if not found. |
| @@ -120014,15 +120265,16 @@ | |
| 120014 | ** Delete an entire SrcList including all its substructure. |
| 120015 | */ |
| 120016 | SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3 *db, SrcList *pList){ |
| 120017 | int i; |
| 120018 | SrcItem *pItem; |
| 120019 | if( pList==0 ) return; |
| 120020 | for(pItem=pList->a, i=0; i<pList->nSrc; i++, pItem++){ |
| 120021 | if( pItem->zDatabase ) sqlite3DbFreeNN(db, pItem->zDatabase); |
| 120022 | sqlite3DbFree(db, pItem->zName); |
| 120023 | if( pItem->zAlias ) sqlite3DbFreeNN(db, pItem->zAlias); |
| 120024 | if( pItem->fg.isIndexedBy ) sqlite3DbFree(db, pItem->u1.zIndexedBy); |
| 120025 | if( pItem->fg.isTabFunc ) sqlite3ExprListDelete(db, pItem->u1.pFuncArg); |
| 120026 | sqlite3DeleteTable(db, pItem->pTab); |
| 120027 | if( pItem->pSelect ) sqlite3SelectDelete(db, pItem->pSelect); |
| 120028 | if( pItem->fg.isUsing ){ |
| @@ -120029,11 +120281,11 @@ | |
| 120029 | sqlite3IdListDelete(db, pItem->u3.pUsing); |
| 120030 | }else if( pItem->u3.pOn ){ |
| 120031 | sqlite3ExprDelete(db, pItem->u3.pOn); |
| 120032 | } |
| 120033 | } |
| 120034 | sqlite3DbFreeNN(db, pList); |
| 120035 | } |
| 120036 | |
| 120037 | /* |
| 120038 | ** This routine is called by the parser to add a new term to the |
| 120039 | ** end of a growing FROM clause. The "p" parameter is the part of |
| @@ -121281,23 +121533,25 @@ | |
| 121281 | SQLITE_PRIVATE void sqlite3SchemaClear(void *p){ |
| 121282 | Hash temp1; |
| 121283 | Hash temp2; |
| 121284 | HashElem *pElem; |
| 121285 | Schema *pSchema = (Schema *)p; |
| 121286 | |
| 121287 | temp1 = pSchema->tblHash; |
| 121288 | temp2 = pSchema->trigHash; |
| 121289 | sqlite3HashInit(&pSchema->trigHash); |
| 121290 | sqlite3HashClear(&pSchema->idxHash); |
| 121291 | for(pElem=sqliteHashFirst(&temp2); pElem; pElem=sqliteHashNext(pElem)){ |
| 121292 | sqlite3DeleteTrigger(0, (Trigger*)sqliteHashData(pElem)); |
| 121293 | } |
| 121294 | sqlite3HashClear(&temp2); |
| 121295 | sqlite3HashInit(&pSchema->tblHash); |
| 121296 | for(pElem=sqliteHashFirst(&temp1); pElem; pElem=sqliteHashNext(pElem)){ |
| 121297 | Table *pTab = sqliteHashData(pElem); |
| 121298 | sqlite3DeleteTable(0, pTab); |
| 121299 | } |
| 121300 | sqlite3HashClear(&temp1); |
| 121301 | sqlite3HashClear(&pSchema->fkeyHash); |
| 121302 | pSchema->pSeqTab = 0; |
| 121303 | if( pSchema->schemaFlags & DB_SchemaLoaded ){ |
| @@ -121392,22 +121646,46 @@ | |
| 121392 | ** A table is read-only if any of the following are true: |
| 121393 | ** |
| 121394 | ** 1) It is a virtual table and no implementation of the xUpdate method |
| 121395 | ** has been provided |
| 121396 | ** |
| 121397 | ** 2) It is a system table (i.e. sqlite_schema), this call is not |
| 121398 | ** part of a nested parse and writable_schema pragma has not |
| 121399 | ** been specified |
| 121400 | ** |
| 121401 | ** 3) The table is a shadow table, the database connection is in |
| 121402 | ** defensive mode, and the current sqlite3_prepare() |
| 121403 | ** is for a top-level SQL statement. |
| 121404 | */ |
| 121405 | static int tabIsReadOnly(Parse *pParse, Table *pTab){ |
| 121406 | sqlite3 *db; |
| 121407 | if( IsVirtual(pTab) ){ |
| 121408 | return sqlite3GetVTable(pParse->db, pTab)->pMod->pModule->xUpdate==0; |
| 121409 | } |
| 121410 | if( (pTab->tabFlags & (TF_Readonly|TF_Shadow))==0 ) return 0; |
| 121411 | db = pParse->db; |
| 121412 | if( (pTab->tabFlags & TF_Readonly)!=0 ){ |
| 121413 | return sqlite3WritableSchema(db)==0 && pParse->nested==0; |
| @@ -121415,13 +121693,15 @@ | |
| 121415 | assert( pTab->tabFlags & TF_Shadow ); |
| 121416 | return sqlite3ReadOnlyShadowTables(db); |
| 121417 | } |
| 121418 | |
| 121419 | /* |
| 121420 | ** Check to make sure the given table is writable. If it is not |
| 121421 | ** writable, generate an error message and return 1. If it is |
| 121422 | ** writable return 0; |
| 121423 | */ |
| 121424 | SQLITE_PRIVATE int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int viewOk){ |
| 121425 | if( tabIsReadOnly(pParse, pTab) ){ |
| 121426 | sqlite3ErrorMsg(pParse, "table %s may not be modified", pTab->zName); |
| 121427 | return 1; |
| @@ -121778,13 +122058,14 @@ | |
| 121778 | sqlite3VdbeAddOp4(v, OP_Clear, pTab->tnum, iDb, memCnt ? memCnt : -1, |
| 121779 | pTab->zName, P4_STATIC); |
| 121780 | } |
| 121781 | for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ |
| 121782 | assert( pIdx->pSchema==pTab->pSchema ); |
| 121783 | sqlite3VdbeAddOp2(v, OP_Clear, pIdx->tnum, iDb); |
| 121784 | if( IsPrimaryKeyIndex(pIdx) && !HasRowid(pTab) ){ |
| 121785 | sqlite3VdbeChangeP3(v, -1, memCnt ? memCnt : -1); |
| 121786 | } |
| 121787 | } |
| 121788 | }else |
| 121789 | #endif /* SQLITE_OMIT_TRUNCATE_OPTIMIZATION */ |
| 121790 | { |
| @@ -121980,11 +122261,11 @@ | |
| 121980 | sqlite3ExprDelete(db, pWhere); |
| 121981 | #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) |
| 121982 | sqlite3ExprListDelete(db, pOrderBy); |
| 121983 | sqlite3ExprDelete(db, pLimit); |
| 121984 | #endif |
| 121985 | sqlite3DbFree(db, aToOpen); |
| 121986 | return; |
| 121987 | } |
| 121988 | /* Make sure "isView" and other macros defined above are undefined. Otherwise |
| 121989 | ** they may interfere with compilation of other functions in this file |
| 121990 | ** (or in another file, if this file becomes part of the amalgamation). */ |
| @@ -126148,15 +126429,16 @@ | |
| 126148 | SQLITE_PRIVATE void sqlite3FkDelete(sqlite3 *db, Table *pTab){ |
| 126149 | FKey *pFKey; /* Iterator variable */ |
| 126150 | FKey *pNext; /* Copy of pFKey->pNextFrom */ |
| 126151 | |
| 126152 | assert( IsOrdinaryTable(pTab) ); |
| 126153 | for(pFKey=pTab->u.tab.pFKey; pFKey; pFKey=pNext){ |
| 126154 | assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pTab->pSchema) ); |
| 126155 | |
| 126156 | /* Remove the FK from the fkeyHash hash table. */ |
| 126157 | if( !db || db->pnBytesFreed==0 ){ |
| 126158 | if( pFKey->pPrevTo ){ |
| 126159 | pFKey->pPrevTo->pNextTo = pFKey->pNextTo; |
| 126160 | }else{ |
| 126161 | void *p = (void *)pFKey->pNextTo; |
| 126162 | const char *z = (p ? pFKey->pNextTo->zTo : pFKey->zTo); |
| @@ -126345,11 +126627,11 @@ | |
| 126345 | /* Move the previous opcode (which should be OP_MakeRecord) forward |
| 126346 | ** by one slot and insert a new OP_TypeCheck where the current |
| 126347 | ** OP_MakeRecord is found */ |
| 126348 | VdbeOp *pPrev; |
| 126349 | sqlite3VdbeAppendP4(v, pTab, P4_TABLE); |
| 126350 | pPrev = sqlite3VdbeGetOp(v, -1); |
| 126351 | assert( pPrev!=0 ); |
| 126352 | assert( pPrev->opcode==OP_MakeRecord || sqlite3VdbeDb(v)->mallocFailed ); |
| 126353 | pPrev->opcode = OP_TypeCheck; |
| 126354 | sqlite3VdbeAddOp3(v, OP_MakeRecord, pPrev->p1, pPrev->p2, pPrev->p3); |
| 126355 | }else{ |
| @@ -126383,11 +126665,11 @@ | |
| 126383 | i = sqlite3Strlen30NN(zColAff); |
| 126384 | if( i ){ |
| 126385 | if( iReg ){ |
| 126386 | sqlite3VdbeAddOp4(v, OP_Affinity, iReg, i, 0, zColAff, i); |
| 126387 | }else{ |
| 126388 | assert( sqlite3VdbeGetOp(v, -1)->opcode==OP_MakeRecord |
| 126389 | || sqlite3VdbeDb(v)->mallocFailed ); |
| 126390 | sqlite3VdbeChangeP4(v, -1, zColAff, i); |
| 126391 | } |
| 126392 | } |
| 126393 | } |
| @@ -126469,11 +126751,11 @@ | |
| 126469 | /* Before computing generated columns, first go through and make sure |
| 126470 | ** that appropriate affinity has been applied to the regular columns |
| 126471 | */ |
| 126472 | sqlite3TableAffinity(pParse->pVdbe, pTab, iRegStore); |
| 126473 | if( (pTab->tabFlags & TF_HasStored)!=0 ){ |
| 126474 | pOp = sqlite3VdbeGetOp(pParse->pVdbe,-1); |
| 126475 | if( pOp->opcode==OP_Affinity ){ |
| 126476 | /* Change the OP_Affinity argument to '@' (NONE) for all stored |
| 126477 | ** columns. '@' is the no-op affinity and those columns have not |
| 126478 | ** yet been computed. */ |
| 126479 | int ii, jj; |
| @@ -127375,11 +127657,16 @@ | |
| 127375 | }else if( pSelect ){ |
| 127376 | if( regFromSelect!=regData ){ |
| 127377 | sqlite3VdbeAddOp2(v, OP_SCopy, regFromSelect+k, iRegStore); |
| 127378 | } |
| 127379 | }else{ |
| 127380 | sqlite3ExprCode(pParse, pList->a[k].pExpr, iRegStore); |
| 127381 | } |
| 127382 | } |
| 127383 | |
| 127384 | |
| 127385 | /* Run the BEFORE and INSTEAD OF triggers, if there are any |
| @@ -127512,11 +127799,13 @@ | |
| 127512 | int isReplace = 0;/* Set to true if constraints may cause a replace */ |
| 127513 | int bUseSeek; /* True to use OPFLAG_SEEKRESULT */ |
| 127514 | sqlite3GenerateConstraintChecks(pParse, pTab, aRegIdx, iDataCur, iIdxCur, |
| 127515 | regIns, 0, ipkColumn>=0, onError, endOfLoop, &isReplace, 0, pUpsert |
| 127516 | ); |
| 127517 | sqlite3FkCheck(pParse, pTab, 0, regIns, 0, 0); |
| 127518 | |
| 127519 | /* Set the OPFLAG_USESEEKRESULT flag if either (a) there are no REPLACE |
| 127520 | ** constraints or (b) there are no triggers and this table is not a |
| 127521 | ** parent table in a foreign key constraint. It is safe to set the |
| 127522 | ** flag in the second case as if any REPLACE constraint is hit, an |
| @@ -127596,11 +127885,11 @@ | |
| 127596 | sqlite3SrcListDelete(db, pTabList); |
| 127597 | sqlite3ExprListDelete(db, pList); |
| 127598 | sqlite3UpsertDelete(db, pUpsert); |
| 127599 | sqlite3SelectDelete(db, pSelect); |
| 127600 | sqlite3IdListDelete(db, pColumn); |
| 127601 | sqlite3DbFree(db, aRegIdx); |
| 127602 | } |
| 127603 | |
| 127604 | /* Make sure "isView" and other macros defined above are undefined. Otherwise |
| 127605 | ** they may interfere with compilation of other functions in this file |
| 127606 | ** (or in another file, if this file becomes part of the amalgamation). */ |
| @@ -132702,19 +132991,21 @@ | |
| 132702 | ** Setting to a null string reverts to the default temporary directory search. |
| 132703 | ** If temporary directory is changed, then invalidateTempStorage. |
| 132704 | ** |
| 132705 | */ |
| 132706 | case PragTyp_TEMP_STORE_DIRECTORY: { |
| 132707 | if( !zRight ){ |
| 132708 | returnSingleText(v, sqlite3_temp_directory); |
| 132709 | }else{ |
| 132710 | #ifndef SQLITE_OMIT_WSD |
| 132711 | if( zRight[0] ){ |
| 132712 | int res; |
| 132713 | rc = sqlite3OsAccess(db->pVfs, zRight, SQLITE_ACCESS_READWRITE, &res); |
| 132714 | if( rc!=SQLITE_OK || res==0 ){ |
| 132715 | sqlite3ErrorMsg(pParse, "not a writable directory"); |
| 132716 | goto pragma_out; |
| 132717 | } |
| 132718 | } |
| 132719 | if( SQLITE_TEMP_STORE==0 |
| 132720 | || (SQLITE_TEMP_STORE==1 && db->temp_store<=1) |
| @@ -132728,10 +133019,11 @@ | |
| 132728 | }else{ |
| 132729 | sqlite3_temp_directory = 0; |
| 132730 | } |
| 132731 | #endif /* SQLITE_OMIT_WSD */ |
| 132732 | } |
| 132733 | break; |
| 132734 | } |
| 132735 | |
| 132736 | #if SQLITE_OS_WIN |
| 132737 | /* |
| @@ -132746,19 +133038,21 @@ | |
| 132746 | ** process. Database file specified with an absolute path are not impacted |
| 132747 | ** by this setting, regardless of its value. |
| 132748 | ** |
| 132749 | */ |
| 132750 | case PragTyp_DATA_STORE_DIRECTORY: { |
| 132751 | if( !zRight ){ |
| 132752 | returnSingleText(v, sqlite3_data_directory); |
| 132753 | }else{ |
| 132754 | #ifndef SQLITE_OMIT_WSD |
| 132755 | if( zRight[0] ){ |
| 132756 | int res; |
| 132757 | rc = sqlite3OsAccess(db->pVfs, zRight, SQLITE_ACCESS_READWRITE, &res); |
| 132758 | if( rc!=SQLITE_OK || res==0 ){ |
| 132759 | sqlite3ErrorMsg(pParse, "not a writable directory"); |
| 132760 | goto pragma_out; |
| 132761 | } |
| 132762 | } |
| 132763 | sqlite3_free(sqlite3_data_directory); |
| 132764 | if( zRight[0] ){ |
| @@ -132766,10 +133060,11 @@ | |
| 132766 | }else{ |
| 132767 | sqlite3_data_directory = 0; |
| 132768 | } |
| 132769 | #endif /* SQLITE_OMIT_WSD */ |
| 132770 | } |
| 132771 | break; |
| 132772 | } |
| 132773 | #endif |
| 132774 | |
| 132775 | #if SQLITE_ENABLE_LOCKING_STYLE |
| @@ -133479,19 +133774,27 @@ | |
| 133479 | /* Make sure all the indices are constructed correctly. |
| 133480 | */ |
| 133481 | for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){ |
| 133482 | Table *pTab = sqliteHashData(x); |
| 133483 | Index *pIdx, *pPk; |
| 133484 | Index *pPrior = 0; |
| 133485 | int loopTop; |
| 133486 | int iDataCur, iIdxCur; |
| 133487 | int r1 = -1; |
| 133488 | int bStrict; |
| 133489 | |
| 133490 | if( !IsOrdinaryTable(pTab) ) continue; |
| 133491 | if( pObjTab && pObjTab!=pTab ) continue; |
| 133492 | pPk = HasRowid(pTab) ? 0 : sqlite3PrimaryKeyIndex(pTab); |
| 133493 | sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenRead, 0, |
| 133494 | 1, 0, &iDataCur, &iIdxCur); |
| 133495 | /* reg[7] counts the number of entries in the table. |
| 133496 | ** reg[8+i] counts the number of entries in the i-th index |
| 133497 | */ |
| @@ -133506,10 +133809,28 @@ | |
| 133506 | if( !isQuick ){ |
| 133507 | /* Sanity check on record header decoding */ |
| 133508 | sqlite3VdbeAddOp3(v, OP_Column, iDataCur, pTab->nNVCol-1,3); |
| 133509 | sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG); |
| 133510 | VdbeComment((v, "(right-most column)")); |
| 133511 | } |
| 133512 | /* Verify that all NOT NULL columns really are NOT NULL. At the |
| 133513 | ** same time verify the type of the content of STRICT tables */ |
| 133514 | bStrict = (pTab->tabFlags & TF_Strict)!=0; |
| 133515 | for(j=0; j<pTab->nCol; j++){ |
| @@ -133518,11 +133839,11 @@ | |
| 133518 | int doError, jmp2; |
| 133519 | if( j==pTab->iPKey ) continue; |
| 133520 | if( pCol->notNull==0 && !bStrict ) continue; |
| 133521 | doError = bStrict ? sqlite3VdbeMakeLabel(pParse) : 0; |
| 133522 | sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, j, 3); |
| 133523 | if( sqlite3VdbeGetOp(v,-1)->opcode==OP_Column ){ |
| 133524 | sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG); |
| 133525 | } |
| 133526 | if( pCol->notNull ){ |
| 133527 | jmp2 = sqlite3VdbeAddOp1(v, OP_NotNull, 3); VdbeCoverage(v); |
| 133528 | zErr = sqlite3MPrintf(db, "NULL value in %s.%s", pTab->zName, |
| @@ -133533,13 +133854,11 @@ | |
| 133533 | }else{ |
| 133534 | integrityCheckResultRow(v); |
| 133535 | } |
| 133536 | sqlite3VdbeJumpHere(v, jmp2); |
| 133537 | } |
| 133538 | if( (pTab->tabFlags & TF_Strict)!=0 |
| 133539 | && pCol->eCType!=COLTYPE_ANY |
| 133540 | ){ |
| 133541 | jmp2 = sqlite3VdbeAddOp3(v, OP_IsNullOrType, 3, 0, |
| 133542 | sqlite3StdTypeMap[pCol->eCType-1]); |
| 133543 | VdbeCoverage(v); |
| 133544 | zErr = sqlite3MPrintf(db, "non-%s value in %s.%s", |
| 133545 | sqlite3StdType[pCol->eCType-1], |
| @@ -133634,10 +133953,13 @@ | |
| 133634 | sqlite3VdbeLoadString(v, 4, pIdx->zName); |
| 133635 | sqlite3VdbeAddOp3(v, OP_Concat, 4, 2, 3); |
| 133636 | integrityCheckResultRow(v); |
| 133637 | sqlite3VdbeJumpHere(v, addr); |
| 133638 | } |
| 133639 | } |
| 133640 | } |
| 133641 | } |
| 133642 | { |
| 133643 | static const int iLn = VDBE_OFFSET_LINENO(2); |
| @@ -135032,19 +135354,19 @@ | |
| 135032 | sqlite3 *db = pParse->db; |
| 135033 | assert( db!=0 ); |
| 135034 | assert( db->pParse==pParse ); |
| 135035 | assert( pParse->nested==0 ); |
| 135036 | #ifndef SQLITE_OMIT_SHARED_CACHE |
| 135037 | sqlite3DbFree(db, pParse->aTableLock); |
| 135038 | #endif |
| 135039 | while( pParse->pCleanup ){ |
| 135040 | ParseCleanup *pCleanup = pParse->pCleanup; |
| 135041 | pParse->pCleanup = pCleanup->pNext; |
| 135042 | pCleanup->xCleanup(db, pCleanup->pPtr); |
| 135043 | sqlite3DbFreeNN(db, pCleanup); |
| 135044 | } |
| 135045 | sqlite3DbFree(db, pParse->aLabel); |
| 135046 | if( pParse->pConstExpr ){ |
| 135047 | sqlite3ExprListDelete(db, pParse->pConstExpr); |
| 135048 | } |
| 135049 | assert( db->lookaside.bDisable >= pParse->disableLookaside ); |
| 135050 | db->lookaside.bDisable -= pParse->disableLookaside; |
| @@ -135599,10 +135921,11 @@ | |
| 135599 | ** |
| 135600 | ** If bFree==1, call sqlite3DbFree() on the p object. |
| 135601 | ** If bFree==0, Leave the first Select object unfreed |
| 135602 | */ |
| 135603 | static void clearSelect(sqlite3 *db, Select *p, int bFree){ |
| 135604 | while( p ){ |
| 135605 | Select *pPrior = p->pPrior; |
| 135606 | sqlite3ExprListDelete(db, p->pEList); |
| 135607 | sqlite3SrcListDelete(db, p->pSrc); |
| 135608 | sqlite3ExprDelete(db, p->pWhere); |
| @@ -135618,11 +135941,11 @@ | |
| 135618 | while( p->pWin ){ |
| 135619 | assert( p->pWin->ppThis==&p->pWin ); |
| 135620 | sqlite3WindowUnlinkFromSelect(p->pWin); |
| 135621 | } |
| 135622 | #endif |
| 135623 | if( bFree ) sqlite3DbFreeNN(db, p); |
| 135624 | p = pPrior; |
| 135625 | bFree = 1; |
| 135626 | } |
| 135627 | } |
| 135628 | |
| @@ -135847,11 +136170,11 @@ | |
| 135847 | /* |
| 135848 | ** Mark a subquery result column as having been used. |
| 135849 | */ |
| 135850 | SQLITE_PRIVATE void sqlite3SrcItemColumnUsed(SrcItem *pItem, int iCol){ |
| 135851 | assert( pItem!=0 ); |
| 135852 | assert( pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) ); |
| 135853 | if( pItem->fg.isNestedFrom ){ |
| 135854 | ExprList *pResults; |
| 135855 | assert( pItem->pSelect!=0 ); |
| 135856 | pResults = pItem->pSelect->pEList; |
| 135857 | assert( pResults!=0 ); |
| @@ -135947,28 +136270,29 @@ | |
| 135947 | sqlite3SetJoinExpr(p->pLeft, iTable, joinFlag); |
| 135948 | p = p->pRight; |
| 135949 | } |
| 135950 | } |
| 135951 | |
| 135952 | /* Undo the work of sqlite3SetJoinExpr(). In the expression p, convert every |
| 135953 | ** term that is marked with EP_OuterON and w.iJoin==iTable into |
| 135954 | ** an ordinary term that omits the EP_OuterON mark. |
| 135955 | ** |
| 135956 | ** This happens when a LEFT JOIN is simplified into an ordinary JOIN. |
| 135957 | ** |
| 135958 | ** If nullable is true, that means that Expr p might evaluate to NULL even |
| 135959 | ** if it is a reference to a NOT NULL column. This can happen, for example, |
| 135960 | ** if the table that p references is on the left side of a RIGHT JOIN. |
| 135961 | ** If nullable is true, then take care to not remove the EP_CanBeNull bit. |
| 135962 | ** See forum thread https://sqlite.org/forum/forumpost/b40696f50145d21c |
| 135963 | */ |
| 135964 | static void unsetJoinExpr(Expr *p, int iTable, int nullable){ |
| 135965 | while( p ){ |
| 135966 | if( ExprHasProperty(p, EP_OuterON) |
| 135967 | && (iTable<0 || p->w.iJoin==iTable) ){ |
| 135968 | ExprClearProperty(p, EP_OuterON); |
| 135969 | ExprSetProperty(p, EP_InnerON); |
| 135970 | } |
| 135971 | if( p->op==TK_COLUMN && p->iTable==iTable && !nullable ){ |
| 135972 | ExprClearProperty(p, EP_CanBeNull); |
| 135973 | } |
| 135974 | if( p->op==TK_FUNCTION ){ |
| @@ -137023,13 +137347,14 @@ | |
| 137023 | /* |
| 137024 | ** Deallocate a KeyInfo object |
| 137025 | */ |
| 137026 | SQLITE_PRIVATE void sqlite3KeyInfoUnref(KeyInfo *p){ |
| 137027 | if( p ){ |
| 137028 | assert( p->nRef>0 ); |
| 137029 | p->nRef--; |
| 137030 | if( p->nRef==0 ) sqlite3DbFreeNN(p->db, p); |
| 137031 | } |
| 137032 | } |
| 137033 | |
| 137034 | /* |
| 137035 | ** Make a new pointer to a KeyInfo object |
| @@ -137210,18 +137535,21 @@ | |
| 137210 | sqlite3VdbeAddOp3(v, OP_OpenPseudo, iSortTab, regSortOut, |
| 137211 | nKey+1+nColumn+nRefKey); |
| 137212 | if( addrOnce ) sqlite3VdbeJumpHere(v, addrOnce); |
| 137213 | addr = 1 + sqlite3VdbeAddOp2(v, OP_SorterSort, iTab, addrBreak); |
| 137214 | VdbeCoverage(v); |
| 137215 | codeOffset(v, p->iOffset, addrContinue); |
| 137216 | sqlite3VdbeAddOp3(v, OP_SorterData, iTab, regSortOut, iSortTab); |
| 137217 | bSeq = 0; |
| 137218 | }else{ |
| 137219 | addr = 1 + sqlite3VdbeAddOp2(v, OP_Sort, iTab, addrBreak); VdbeCoverage(v); |
| 137220 | codeOffset(v, p->iOffset, addrContinue); |
| 137221 | iSortTab = iTab; |
| 137222 | bSeq = 1; |
| 137223 | } |
| 137224 | for(i=0, iCol=nKey+bSeq-1; i<nColumn; i++){ |
| 137225 | #ifdef SQLITE_ENABLE_SORTER_REFERENCES |
| 137226 | if( aOutEx[i].fg.bSorterRef ) continue; |
| 137227 | #endif |
| @@ -137342,13 +137670,10 @@ | |
| 137342 | |
| 137343 | /* |
| 137344 | ** Return a pointer to a string containing the 'declaration type' of the |
| 137345 | ** expression pExpr. The string may be treated as static by the caller. |
| 137346 | ** |
| 137347 | ** Also try to estimate the size of the returned value and return that |
| 137348 | ** result in *pEstWidth. |
| 137349 | ** |
| 137350 | ** The declaration type is the exact datatype definition extracted from the |
| 137351 | ** original CREATE TABLE statement if the expression is a column. The |
| 137352 | ** declaration type for a ROWID field is INTEGER. Exactly when an expression |
| 137353 | ** is considered a column can be complex in the presence of subqueries. The |
| 137354 | ** result-set expression in all of the following SELECT statements is |
| @@ -139210,14 +139535,15 @@ | |
| 139210 | |
| 139211 | /* Jump to the this point in order to terminate the query. |
| 139212 | */ |
| 139213 | sqlite3VdbeResolveLabel(v, labelEnd); |
| 139214 | |
| 139215 | /* Reassembly the compound query so that it will be freed correctly |
| 139216 | ** by the calling function */ |
| 139217 | if( pSplit->pPrior ){ |
| 139218 | sqlite3SelectDelete(db, pSplit->pPrior); |
| 139219 | } |
| 139220 | pSplit->pPrior = pPrior; |
| 139221 | pPrior->pNext = pSplit; |
| 139222 | sqlite3ExprListDelete(db, pPrior->pOrderBy); |
| 139223 | pPrior->pOrderBy = 0; |
| @@ -139323,10 +139649,11 @@ | |
| 139323 | if( pSubst->isOuterJoin && pCopy->op!=TK_COLUMN ){ |
| 139324 | memset(&ifNullRow, 0, sizeof(ifNullRow)); |
| 139325 | ifNullRow.op = TK_IF_NULL_ROW; |
| 139326 | ifNullRow.pLeft = pCopy; |
| 139327 | ifNullRow.iTable = pSubst->iNewTable; |
| 139328 | ifNullRow.flags = EP_IfNullRow; |
| 139329 | pCopy = &ifNullRow; |
| 139330 | } |
| 139331 | testcase( ExprHasProperty(pCopy, EP_Subquery) ); |
| 139332 | pNew = sqlite3ExprDup(db, pCopy, 0); |
| @@ -139590,11 +139917,12 @@ | |
| 139590 | ** |
| 139591 | ** (3) If the subquery is the right operand of a LEFT JOIN then |
| 139592 | ** (3a) the subquery may not be a join and |
| 139593 | ** (3b) the FROM clause of the subquery may not contain a virtual |
| 139594 | ** table and |
| 139595 | ** (3c) the outer query may not be an aggregate. |
| 139596 | ** (3d) the outer query may not be DISTINCT. |
| 139597 | ** See also (26) for restrictions on RIGHT JOIN. |
| 139598 | ** |
| 139599 | ** (4) The subquery can not be DISTINCT. |
| 139600 | ** |
| @@ -139644,10 +139972,13 @@ | |
| 139644 | ** (17d) the outer query may not be |
| 139645 | ** (17d1) aggregate, or |
| 139646 | ** (17d2) DISTINCT |
| 139647 | ** (17e) the subquery may not contain window functions, and |
| 139648 | ** (17f) the subquery must not be the RHS of a LEFT JOIN. |
| 139649 | ** |
| 139650 | ** The parent and sub-query may contain WHERE clauses. Subject to |
| 139651 | ** rules (11), (13) and (14), they may also contain ORDER BY, |
| 139652 | ** LIMIT and OFFSET clauses. The subquery cannot use any compound |
| 139653 | ** operator other than UNION ALL because all the other compound |
| @@ -139695,11 +140026,15 @@ | |
| 139695 | ** |
| 139696 | ** (26) The subquery may not be the right operand of a RIGHT JOIN. |
| 139697 | ** See also (3) for restrictions on LEFT JOIN. |
| 139698 | ** |
| 139699 | ** (27) The subquery may not contain a FULL or RIGHT JOIN unless it |
| 139700 | ** is the first element of the parent query. |
| 139701 | ** |
| 139702 | ** (28) The subquery is not a MATERIALIZED CTE. |
| 139703 | ** |
| 139704 | ** (29) Either the subquery is not the right-hand operand of a join with an |
| 139705 | ** ON or USING clause nor the right-hand operand of a NATURAL JOIN, or |
| @@ -139795,21 +140130,15 @@ | |
| 139795 | ** |
| 139796 | ** (t1 LEFT OUTER JOIN t2) JOIN t3 |
| 139797 | ** |
| 139798 | ** which is not at all the same thing. |
| 139799 | ** |
| 139800 | ** If the subquery is the right operand of a LEFT JOIN, then the outer |
| 139801 | ** query cannot be an aggregate. (3c) This is an artifact of the way |
| 139802 | ** aggregates are processed - there is no mechanism to determine if |
| 139803 | ** the LEFT JOIN table should be all-NULL. |
| 139804 | ** |
| 139805 | ** See also tickets #306, #350, and #3300. |
| 139806 | */ |
| 139807 | if( (pSubitem->fg.jointype & (JT_OUTER|JT_LTORJ))!=0 ){ |
| 139808 | if( pSubSrc->nSrc>1 /* (3a) */ |
| 139809 | || isAgg /* (3b) */ |
| 139810 | || IsVirtual(pSubSrc->a[0].pTab) /* (3c) */ |
| 139811 | || (p->selFlags & SF_Distinct)!=0 /* (3d) */ |
| 139812 | || (pSubitem->fg.jointype & JT_RIGHT)!=0 /* (26) */ |
| 139813 | ){ |
| 139814 | return 0; |
| 139815 | } |
| @@ -139825,11 +140154,11 @@ | |
| 139825 | } |
| 139826 | #endif |
| 139827 | |
| 139828 | assert( pSubSrc->nSrc>0 ); /* True by restriction (7) */ |
| 139829 | if( iFrom>0 && (pSubSrc->a[0].fg.jointype & JT_LTORJ)!=0 ){ |
| 139830 | return 0; /* Restriction (27) */ |
| 139831 | } |
| 139832 | if( pSubitem->fg.isCte && pSubitem->u2.pCteUse->eM10d==M10d_Yes ){ |
| 139833 | return 0; /* (28) */ |
| 139834 | } |
| 139835 | |
| @@ -139845,11 +140174,11 @@ | |
| 139845 | ** |
| 139846 | ** (29b) The subquery itself must not be the right operand of a |
| 139847 | ** NATURAL join or a join that as an ON or USING clause. |
| 139848 | ** |
| 139849 | ** These conditions are sufficient to keep an EP_OuterON from being |
| 139850 | ** flattened into an EP_InnerON. Restrictions (3a) and (27) prevent |
| 139851 | ** an EP_InnerON from being flattened into an EP_OuterON. |
| 139852 | */ |
| 139853 | if( pSubSrc->nSrc>=2 |
| 139854 | && (pSubSrc->a[pSubSrc->nSrc-1].fg.jointype & JT_OUTER)!=0 |
| 139855 | ){ |
| @@ -139886,10 +140215,16 @@ | |
| 139886 | #ifndef SQLITE_OMIT_WINDOWFUNC |
| 139887 | || pSub1->pWin /* (17e) */ |
| 139888 | #endif |
| 139889 | ){ |
| 139890 | return 0; |
| 139891 | } |
| 139892 | testcase( pSub1->pSrc->nSrc>1 ); |
| 139893 | } |
| 139894 | |
| 139895 | /* Restriction (18). */ |
| @@ -140189,10 +140524,12 @@ | |
| 140189 | Parse *pParse; /* Parsing context */ |
| 140190 | u8 *pOomFault; /* Pointer to pParse->db->mallocFailed */ |
| 140191 | int nConst; /* Number for COLUMN=CONSTANT terms */ |
| 140192 | int nChng; /* Number of times a constant is propagated */ |
| 140193 | int bHasAffBlob; /* At least one column in apExpr[] as affinity BLOB */ |
| 140194 | Expr **apExpr; /* [i*2] is COLUMN and [i*2+1] is VALUE */ |
| 140195 | }; |
| 140196 | |
| 140197 | /* |
| 140198 | ** Add a new entry to the pConst object. Except, do not add duplicate |
| @@ -140251,11 +140588,11 @@ | |
| 140251 | ** found, add it to the pConst structure. |
| 140252 | */ |
| 140253 | static void findConstInWhere(WhereConst *pConst, Expr *pExpr){ |
| 140254 | Expr *pRight, *pLeft; |
| 140255 | if( NEVER(pExpr==0) ) return; |
| 140256 | if( ExprHasProperty(pExpr, EP_OuterON|EP_InnerON) ){ |
| 140257 | testcase( ExprHasProperty(pExpr, EP_OuterON) ); |
| 140258 | testcase( ExprHasProperty(pExpr, EP_InnerON) ); |
| 140259 | return; |
| 140260 | } |
| 140261 | if( pExpr->op==TK_AND ){ |
| @@ -140291,13 +140628,14 @@ | |
| 140291 | int bIgnoreAffBlob |
| 140292 | ){ |
| 140293 | int i; |
| 140294 | if( pConst->pOomFault[0] ) return WRC_Prune; |
| 140295 | if( pExpr->op!=TK_COLUMN ) return WRC_Continue; |
| 140296 | if( ExprHasProperty(pExpr, EP_FixedCol|EP_OuterON) ){ |
| 140297 | testcase( ExprHasProperty(pExpr, EP_FixedCol) ); |
| 140298 | testcase( ExprHasProperty(pExpr, EP_OuterON) ); |
| 140299 | return WRC_Continue; |
| 140300 | } |
| 140301 | for(i=0; i<pConst->nConst; i++){ |
| 140302 | Expr *pColumn = pConst->apExpr[i*2]; |
| 140303 | if( pColumn==pExpr ) continue; |
| @@ -140417,10 +140755,21 @@ | |
| 140417 | do{ |
| 140418 | x.nConst = 0; |
| 140419 | x.nChng = 0; |
| 140420 | x.apExpr = 0; |
| 140421 | x.bHasAffBlob = 0; |
| 140422 | findConstInWhere(&x, p->pWhere); |
| 140423 | if( x.nConst ){ |
| 140424 | memset(&w, 0, sizeof(w)); |
| 140425 | w.pParse = pParse; |
| 140426 | w.xExprCallback = propagateConstantExprRewrite; |
| @@ -140705,10 +141054,11 @@ | |
| 140705 | if( p->pWhere |
| 140706 | || p->pEList->nExpr!=1 |
| 140707 | || p->pSrc->nSrc!=1 |
| 140708 | || p->pSrc->a[0].pSelect |
| 140709 | || pAggInfo->nFunc!=1 |
| 140710 | ){ |
| 140711 | return 0; |
| 140712 | } |
| 140713 | pTab = p->pSrc->a[0].pTab; |
| 140714 | assert( pTab!=0 ); |
| @@ -141406,11 +141756,11 @@ | |
| 141406 | |
| 141407 | if( (zTabName = pFrom->zAlias)==0 ){ |
| 141408 | zTabName = pTab->zName; |
| 141409 | } |
| 141410 | if( db->mallocFailed ) break; |
| 141411 | assert( pFrom->fg.isNestedFrom == IsNestedFrom(pFrom->pSelect) ); |
| 141412 | if( pFrom->fg.isNestedFrom ){ |
| 141413 | assert( pFrom->pSelect!=0 ); |
| 141414 | pNestedFrom = pFrom->pSelect->pEList; |
| 141415 | assert( pNestedFrom!=0 ); |
| 141416 | assert( pNestedFrom->nExpr==pTab->nCol ); |
| @@ -142280,10 +142630,11 @@ | |
| 142280 | && OptimizationEnabled(db, SQLITE_SimplifyJoin) |
| 142281 | ){ |
| 142282 | SELECTTRACE(0x100,pParse,p, |
| 142283 | ("LEFT-JOIN simplifies to JOIN on term %d\n",i)); |
| 142284 | pItem->fg.jointype &= ~(JT_LEFT|JT_OUTER); |
| 142285 | unsetJoinExpr(p->pWhere, pItem->iCursor, |
| 142286 | pTabList->a[0].fg.jointype & JT_LTORJ); |
| 142287 | } |
| 142288 | |
| 142289 | /* No futher action if this term of the FROM clause is no a subquery */ |
| @@ -142334,11 +142685,13 @@ | |
| 142334 | && (p->selFlags & SF_OrderByReqd)==0 /* Condition (3) and (4) */ |
| 142335 | && OptimizationEnabled(db, SQLITE_OmitOrderBy) |
| 142336 | ){ |
| 142337 | SELECTTRACE(0x100,pParse,p, |
| 142338 | ("omit superfluous ORDER BY on %r FROM-clause subquery\n",i+1)); |
| 142339 | sqlite3ExprListDelete(db, pSub->pOrderBy); |
| 142340 | pSub->pOrderBy = 0; |
| 142341 | } |
| 142342 | |
| 142343 | /* If the outer query contains a "complex" result set (that is, |
| 142344 | ** if the result set of the outer query uses functions or subqueries) |
| @@ -142501,11 +142854,11 @@ | |
| 142501 | zSavedAuthContext = pParse->zAuthContext; |
| 142502 | pParse->zAuthContext = pItem->zName; |
| 142503 | |
| 142504 | /* Generate code to implement the subquery |
| 142505 | ** |
| 142506 | ** The subquery is implemented as a co-routine all if the following are |
| 142507 | ** true: |
| 142508 | ** |
| 142509 | ** (1) the subquery is guaranteed to be the outer loop (so that |
| 142510 | ** it does not need to be computed more than once), and |
| 142511 | ** (2) the subquery is not a CTE that should be materialized |
| @@ -142695,11 +143048,11 @@ | |
| 142695 | */ |
| 142696 | iEnd = sqlite3VdbeMakeLabel(pParse); |
| 142697 | if( (p->selFlags & SF_FixedLimit)==0 ){ |
| 142698 | p->nSelectRow = 320; /* 4 billion rows */ |
| 142699 | } |
| 142700 | computeLimitRegisters(pParse, p, iEnd); |
| 142701 | if( p->iLimit==0 && sSort.addrSortIndex>=0 ){ |
| 142702 | sqlite3VdbeChangeOpcode(v, sSort.addrSortIndex, OP_SorterOpen); |
| 142703 | sSort.sortFlags |= SORTFLAG_UseSorter; |
| 142704 | } |
| 142705 | |
| @@ -142917,12 +143270,17 @@ | |
| 142917 | if( minMaxFlag ){ |
| 142918 | sqlite3DebugPrintf("MIN/MAX Optimization (0x%02x) adds:\n", minMaxFlag); |
| 142919 | sqlite3TreeViewExprList(0, pMinMaxOrderBy, 0, "ORDERBY"); |
| 142920 | } |
| 142921 | for(ii=0; ii<pAggInfo->nColumn; ii++){ |
| 142922 | sqlite3DebugPrintf("agg-column[%d] iMem=%d\n", |
| 142923 | ii, pAggInfo->aCol[ii].iMem); |
| 142924 | sqlite3TreeViewExpr(0, pAggInfo->aCol[ii].pCExpr, 0); |
| 142925 | } |
| 142926 | for(ii=0; ii<pAggInfo->nFunc; ii++){ |
| 142927 | sqlite3DebugPrintf("agg-func[%d]: iMem=%d\n", |
| 142928 | ii, pAggInfo->aFunc[ii].iMem); |
| @@ -143039,19 +143397,19 @@ | |
| 143039 | } |
| 143040 | } |
| 143041 | regBase = sqlite3GetTempRange(pParse, nCol); |
| 143042 | sqlite3ExprCodeExprList(pParse, pGroupBy, regBase, 0, 0); |
| 143043 | j = nGroupBy; |
| 143044 | for(i=0; i<pAggInfo->nColumn; i++){ |
| 143045 | struct AggInfo_col *pCol = &pAggInfo->aCol[i]; |
| 143046 | if( pCol->iSorterColumn>=j ){ |
| 143047 | int r1 = j + regBase; |
| 143048 | sqlite3ExprCodeGetColumnOfTable(v, |
| 143049 | pCol->pTab, pCol->iTable, pCol->iColumn, r1); |
| 143050 | j++; |
| 143051 | } |
| 143052 | } |
| 143053 | regRecord = sqlite3GetTempReg(pParse); |
| 143054 | sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regRecord); |
| 143055 | sqlite3VdbeAddOp2(v, OP_SorterInsert, pAggInfo->sortingIdx, regRecord); |
| 143056 | sqlite3ReleaseTempReg(pParse, regRecord); |
| 143057 | sqlite3ReleaseTempRange(pParse, regBase, nCol); |
| @@ -147465,11 +147823,12 @@ | |
| 147465 | ** in the list are moved to the sqlite3.pDisconnect list of the associated |
| 147466 | ** database connection. |
| 147467 | */ |
| 147468 | SQLITE_PRIVATE void sqlite3VtabClear(sqlite3 *db, Table *p){ |
| 147469 | assert( IsVirtual(p) ); |
| 147470 | if( !db || db->pnBytesFreed==0 ) vtabDisconnectAll(0, p); |
| 147471 | if( p->u.vtab.azArg ){ |
| 147472 | int i; |
| 147473 | for(i=0; i<p->u.vtab.nArg; i++){ |
| 147474 | if( i!=1 ) sqlite3DbFree(db, p->u.vtab.azArg[i]); |
| 147475 | } |
| @@ -149142,10 +149501,11 @@ | |
| 149142 | #define WHERE_IN_SEEKSCAN 0x00100000 /* Seek-scan optimization for IN */ |
| 149143 | #define WHERE_TRANSCONS 0x00200000 /* Uses a transitive constraint */ |
| 149144 | #define WHERE_BLOOMFILTER 0x00400000 /* Consider using a Bloom-filter */ |
| 149145 | #define WHERE_SELFCULL 0x00800000 /* nOut reduced by extra WHERE terms */ |
| 149146 | #define WHERE_OMIT_OFFSET 0x01000000 /* Set offset counter to zero */ |
| 149147 | |
| 149148 | #endif /* !defined(SQLITE_WHEREINT_H) */ |
| 149149 | |
| 149150 | /************** End of whereInt.h ********************************************/ |
| 149151 | /************** Continuing where we left off in wherecode.c ******************/ |
| @@ -149750,11 +150110,12 @@ | |
| 149750 | eType = sqlite3FindInIndex(pParse, pX, IN_INDEX_LOOP, 0, aiMap,&iTab); |
| 149751 | pExpr->iTable = iTab; |
| 149752 | } |
| 149753 | sqlite3ExprDelete(db, pX); |
| 149754 | }else{ |
| 149755 | aiMap = (int*)sqlite3DbMallocZero(pParse->db, sizeof(int)*nEq); |
| 149756 | eType = sqlite3FindInIndex(pParse, pX, IN_INDEX_LOOP, 0, aiMap, &iTab); |
| 149757 | } |
| 149758 | pX = pExpr; |
| 149759 | } |
| 149760 | |
| @@ -150020,11 +150381,11 @@ | |
| 150020 | WhereTerm *pTerm /* The upper or lower bound just coded */ |
| 150021 | ){ |
| 150022 | if( pTerm->wtFlags & TERM_LIKEOPT ){ |
| 150023 | VdbeOp *pOp; |
| 150024 | assert( pLevel->iLikeRepCntr>0 ); |
| 150025 | pOp = sqlite3VdbeGetOp(v, -1); |
| 150026 | assert( pOp!=0 ); |
| 150027 | assert( pOp->opcode==OP_String8 |
| 150028 | || pTerm->pWC->pWInfo->pParse->db->mallocFailed ); |
| 150029 | pOp->p3 = (int)(pLevel->iLikeRepCntr>>1); /* Register holding counter */ |
| 150030 | pOp->p5 = (u8)(pLevel->iLikeRepCntr&1); /* ASC or DESC */ |
| @@ -151236,12 +151597,12 @@ | |
| 151236 | sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq); |
| 151237 | endEq = 0; |
| 151238 | } |
| 151239 | nConstraint++; |
| 151240 | } |
| 151241 | sqlite3DbFree(db, zStartAff); |
| 151242 | sqlite3DbFree(db, zEndAff); |
| 151243 | |
| 151244 | /* Top of the loop body */ |
| 151245 | if( pLevel->p2==0 ) pLevel->p2 = sqlite3VdbeCurrentAddr(v); |
| 151246 | |
| 151247 | /* Check if the index cursor is past the end of the range. */ |
| @@ -153168,13 +153529,19 @@ | |
| 153168 | sqlite3ErrorMsg(pParse, "ON clause references tables to its right"); |
| 153169 | return; |
| 153170 | } |
| 153171 | }else if( (prereqAll>>1)>=x ){ |
| 153172 | /* The ON clause of an INNER JOIN references a table to its right. |
| 153173 | ** Most other SQL database engines raise an error. But all versions |
| 153174 | ** of SQLite going back to 3.0.0 have just put the ON clause constraint |
| 153175 | ** into the WHERE clause and carried on. */ |
| 153176 | ExprClearProperty(pExpr, EP_InnerON); |
| 153177 | } |
| 153178 | } |
| 153179 | pTerm->prereqAll = prereqAll; |
| 153180 | pTerm->leftCursor = -1; |
| @@ -155328,11 +155695,11 @@ | |
| 155328 | #ifndef SQLITE_DEBUG |
| 155329 | UNUSED_PARAMETER( pParse ); |
| 155330 | #endif |
| 155331 | assert( pRec!=0 ); |
| 155332 | assert( pIdx->nSample>0 ); |
| 155333 | assert( pRec->nField>0 && pRec->nField<=pIdx->nSampleCol ); |
| 155334 | |
| 155335 | /* Do a binary search to find the first sample greater than or equal |
| 155336 | ** to pRec. If pRec contains a single field, the set of samples to search |
| 155337 | ** is simply the aSample[] array. If the samples in aSample[] contain more |
| 155338 | ** than one fields, all fields following the first are ignored. |
| @@ -155374,11 +155741,11 @@ | |
| 155374 | ** appears that it should be 1 field in size. However, that would make it |
| 155375 | ** smaller than sample 1, so the binary search would not work. As a result, |
| 155376 | ** it is extended to two fields. The duplicates that this creates do not |
| 155377 | ** cause any problems. |
| 155378 | */ |
| 155379 | nField = pRec->nField; |
| 155380 | iCol = 0; |
| 155381 | iSample = pIdx->nSample * nField; |
| 155382 | do{ |
| 155383 | int iSamp; /* Index in aSample[] of test sample */ |
| 155384 | int n; /* Number of fields in test sample */ |
| @@ -155462,11 +155829,11 @@ | |
| 155462 | /* At this point, the (iCol+1) field prefix of aSample[i] is the first |
| 155463 | ** sample that is greater than pRec. Or, if i==pIdx->nSample then pRec |
| 155464 | ** is larger than all samples in the array. */ |
| 155465 | tRowcnt iUpper, iGap; |
| 155466 | if( i>=pIdx->nSample ){ |
| 155467 | iUpper = sqlite3LogEstToInt(pIdx->aiRowLogEst[0]); |
| 155468 | }else{ |
| 155469 | iUpper = aSample[i].anLt[iCol]; |
| 155470 | } |
| 155471 | |
| 155472 | if( iLower>=iUpper ){ |
| @@ -156091,16 +156458,22 @@ | |
| 156091 | } |
| 156092 | } |
| 156093 | } |
| 156094 | |
| 156095 | /* |
| 156096 | ** Deallocate internal memory used by a WhereLoop object |
| 156097 | */ |
| 156098 | static void whereLoopClear(sqlite3 *db, WhereLoop *p){ |
| 156099 | if( p->aLTerm!=p->aLTermSpace ) sqlite3DbFreeNN(db, p->aLTerm); |
| 156100 | whereLoopClearUnion(db, p); |
| 156101 | whereLoopInit(p); |
| 156102 | } |
| 156103 | |
| 156104 | /* |
| 156105 | ** Increase the memory allocation for pLoop->aLTerm[] to be at least n. |
| 156106 | */ |
| @@ -156120,11 +156493,13 @@ | |
| 156120 | /* |
| 156121 | ** Transfer content from the second pLoop into the first. |
| 156122 | */ |
| 156123 | static int whereLoopXfer(sqlite3 *db, WhereLoop *pTo, WhereLoop *pFrom){ |
| 156124 | whereLoopClearUnion(db, pTo); |
| 156125 | if( whereLoopResize(db, pTo, pFrom->nLTerm) ){ |
| 156126 | memset(pTo, 0, WHERE_LOOP_XFER_SZ); |
| 156127 | return SQLITE_NOMEM_BKPT; |
| 156128 | } |
| 156129 | memcpy(pTo, pFrom, WHERE_LOOP_XFER_SZ); |
| 156130 | memcpy(pTo->aLTerm, pFrom->aLTerm, pTo->nLTerm*sizeof(pTo->aLTerm[0])); |
| @@ -156138,32 +156513,34 @@ | |
| 156138 | |
| 156139 | /* |
| 156140 | ** Delete a WhereLoop object |
| 156141 | */ |
| 156142 | static void whereLoopDelete(sqlite3 *db, WhereLoop *p){ |
| 156143 | whereLoopClear(db, p); |
| 156144 | sqlite3DbFreeNN(db, p); |
| 156145 | } |
| 156146 | |
| 156147 | /* |
| 156148 | ** Free a WhereInfo structure |
| 156149 | */ |
| 156150 | static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){ |
| 156151 | assert( pWInfo!=0 ); |
| 156152 | sqlite3WhereClauseClear(&pWInfo->sWC); |
| 156153 | while( pWInfo->pLoops ){ |
| 156154 | WhereLoop *p = pWInfo->pLoops; |
| 156155 | pWInfo->pLoops = p->pNextLoop; |
| 156156 | whereLoopDelete(db, p); |
| 156157 | } |
| 156158 | assert( pWInfo->pExprMods==0 ); |
| 156159 | while( pWInfo->pMemToFree ){ |
| 156160 | WhereMemBlock *pNext = pWInfo->pMemToFree->pNext; |
| 156161 | sqlite3DbFreeNN(db, pWInfo->pMemToFree); |
| 156162 | pWInfo->pMemToFree = pNext; |
| 156163 | } |
| 156164 | sqlite3DbFreeNN(db, pWInfo); |
| 156165 | } |
| 156166 | |
| 156167 | /* Undo all Expr node modifications |
| 156168 | */ |
| 156169 | static void whereUndoExprMods(WhereInfo *pWInfo){ |
| @@ -156773,11 +157150,15 @@ | |
| 156773 | pNew->wsFlags = saved_wsFlags; |
| 156774 | pNew->u.btree.nEq = saved_nEq; |
| 156775 | pNew->u.btree.nBtm = saved_nBtm; |
| 156776 | pNew->u.btree.nTop = saved_nTop; |
| 156777 | pNew->nLTerm = saved_nLTerm; |
| 156778 | if( whereLoopResize(db, pNew, pNew->nLTerm+1) ) break; /* OOM */ |
| 156779 | pNew->aLTerm[pNew->nLTerm++] = pTerm; |
| 156780 | pNew->prereq = (saved_prereq | pTerm->prereqRight) & ~pNew->maskSelf; |
| 156781 | |
| 156782 | assert( nInMul==0 |
| 156783 | || (pNew->wsFlags & WHERE_COLUMN_NULL)!=0 |
| @@ -156866,42 +157247,43 @@ | |
| 156866 | } |
| 156867 | } |
| 156868 | if( scan.iEquiv>1 ) pNew->wsFlags |= WHERE_TRANSCONS; |
| 156869 | }else if( eOp & WO_ISNULL ){ |
| 156870 | pNew->wsFlags |= WHERE_COLUMN_NULL; |
| 156871 | }else if( eOp & (WO_GT|WO_GE) ){ |
| 156872 | testcase( eOp & WO_GT ); |
| 156873 | testcase( eOp & WO_GE ); |
| 156874 | pNew->wsFlags |= WHERE_COLUMN_RANGE|WHERE_BTM_LIMIT; |
| 156875 | pNew->u.btree.nBtm = whereRangeVectorLen( |
| 156876 | pParse, pSrc->iCursor, pProbe, saved_nEq, pTerm |
| 156877 | ); |
| 156878 | pBtm = pTerm; |
| 156879 | pTop = 0; |
| 156880 | if( pTerm->wtFlags & TERM_LIKEOPT ){ |
| 156881 | /* Range constraints that come from the LIKE optimization are |
| 156882 | ** always used in pairs. */ |
| 156883 | pTop = &pTerm[1]; |
| 156884 | assert( (pTop-(pTerm->pWC->a))<pTerm->pWC->nTerm ); |
| 156885 | assert( pTop->wtFlags & TERM_LIKEOPT ); |
| 156886 | assert( pTop->eOperator==WO_LT ); |
| 156887 | if( whereLoopResize(db, pNew, pNew->nLTerm+1) ) break; /* OOM */ |
| 156888 | pNew->aLTerm[pNew->nLTerm++] = pTop; |
| 156889 | pNew->wsFlags |= WHERE_TOP_LIMIT; |
| 156890 | pNew->u.btree.nTop = 1; |
| 156891 | } |
| 156892 | }else{ |
| 156893 | assert( eOp & (WO_LT|WO_LE) ); |
| 156894 | testcase( eOp & WO_LT ); |
| 156895 | testcase( eOp & WO_LE ); |
| 156896 | pNew->wsFlags |= WHERE_COLUMN_RANGE|WHERE_TOP_LIMIT; |
| 156897 | pNew->u.btree.nTop = whereRangeVectorLen( |
| 156898 | pParse, pSrc->iCursor, pProbe, saved_nEq, pTerm |
| 156899 | ); |
| 156900 | pTop = pTerm; |
| 156901 | pBtm = (pNew->wsFlags & WHERE_BTM_LIMIT)!=0 ? |
| 156902 | pNew->aLTerm[pNew->nLTerm-2] : 0; |
| 156903 | } |
| 156904 | |
| 156905 | /* At this point pNew->nOut is set to the number of rows expected to |
| 156906 | ** be visited by the index scan before considering term pTerm, or the |
| 156907 | ** values of nIn and nInMul. In other words, assuming that all |
| @@ -157343,10 +157725,13 @@ | |
| 157343 | #ifdef SQLITE_ENABLE_STAT4 |
| 157344 | pNew->rRun = rSize + 16 - 2*((pTab->tabFlags & TF_HasStat4)!=0); |
| 157345 | #else |
| 157346 | pNew->rRun = rSize + 16; |
| 157347 | #endif |
| 157348 | ApplyCostMultiplier(pNew->rRun, pTab->costMult); |
| 157349 | whereLoopOutputAdjust(pWC, pNew, rSize); |
| 157350 | rc = whereLoopInsert(pBuilder, pNew); |
| 157351 | pNew->nOut = rSize; |
| 157352 | if( rc ) break; |
| @@ -158063,29 +158448,47 @@ | |
| 158063 | SrcItem *pItem; |
| 158064 | SrcItem *pEnd = &pTabList->a[pWInfo->nLevel]; |
| 158065 | sqlite3 *db = pWInfo->pParse->db; |
| 158066 | int rc = SQLITE_OK; |
| 158067 | int bFirstPastRJ = 0; |
| 158068 | WhereLoop *pNew; |
| 158069 | |
| 158070 | |
| 158071 | /* Loop over the tables in the join, from left to right */ |
| 158072 | pNew = pBuilder->pNew; |
| 158073 | whereLoopInit(pNew); |
| 158074 | pBuilder->iPlanLimit = SQLITE_QUERY_PLANNER_LIMIT; |
| 158075 | for(iTab=0, pItem=pTabList->a; pItem<pEnd; iTab++, pItem++){ |
| 158076 | Bitmask mUnusable = 0; |
| 158077 | pNew->iTab = iTab; |
| 158078 | pBuilder->iPlanLimit += SQLITE_QUERY_PLANNER_LIMIT_INCR; |
| 158079 | pNew->maskSelf = sqlite3WhereGetMask(&pWInfo->sMaskSet, pItem->iCursor); |
| 158080 | if( bFirstPastRJ || (pItem->fg.jointype & (JT_OUTER|JT_CROSS))!=0 ){ |
| 158081 | /* Add prerequisites to prevent reordering of FROM clause terms |
| 158082 | ** across CROSS joins and outer joins. The bFirstPastRJ boolean |
| 158083 | ** prevents the right operand of a RIGHT JOIN from being swapped with |
| 158084 | ** other elements even further to the right. */ |
| 158085 | mPrereq |= mPrior; |
| 158086 | bFirstPastRJ = (pItem->fg.jointype & JT_RIGHT)!=0; |
| 158087 | } |
| 158088 | #ifndef SQLITE_OMIT_VIRTUALTABLE |
| 158089 | if( IsVirtual(pItem->pTab) ){ |
| 158090 | SrcItem *p; |
| 158091 | for(p=&pItem[1]; p<pEnd; p++){ |
| @@ -158654,13 +159057,13 @@ | |
| 158654 | for(ii=0, pFrom=aFrom; ii<nFrom; ii++, pFrom++){ |
| 158655 | for(pWLoop=pWInfo->pLoops; pWLoop; pWLoop=pWLoop->pNextLoop){ |
| 158656 | LogEst nOut; /* Rows visited by (pFrom+pWLoop) */ |
| 158657 | LogEst rCost; /* Cost of path (pFrom+pWLoop) */ |
| 158658 | LogEst rUnsorted; /* Unsorted cost of (pFrom+pWLoop) */ |
| 158659 | i8 isOrdered = pFrom->isOrdered; /* isOrdered for (pFrom+pWLoop) */ |
| 158660 | Bitmask maskNew; /* Mask of src visited by (..) */ |
| 158661 | Bitmask revMask = 0; /* Mask of rev-order loops for (..) */ |
| 158662 | |
| 158663 | if( (pWLoop->prereq & ~pFrom->maskLoop)!=0 ) continue; |
| 158664 | if( (pWLoop->maskSelf & pFrom->maskLoop)!=0 ) continue; |
| 158665 | if( (pWLoop->wsFlags & WHERE_AUTO_INDEX)!=0 && pFrom->nRow<3 ){ |
| 158666 | /* Do not use an automatic index if the this loop is expected |
| @@ -158675,11 +159078,13 @@ | |
| 158675 | ** Compute its cost */ |
| 158676 | rUnsorted = sqlite3LogEstAdd(pWLoop->rSetup,pWLoop->rRun + pFrom->nRow); |
| 158677 | rUnsorted = sqlite3LogEstAdd(rUnsorted, pFrom->rUnsorted); |
| 158678 | nOut = pFrom->nRow + pWLoop->nOut; |
| 158679 | maskNew = pFrom->maskLoop | pWLoop->maskSelf; |
| 158680 | if( isOrdered<0 ){ |
| 158681 | isOrdered = wherePathSatisfiesOrderBy(pWInfo, |
| 158682 | pWInfo->pOrderBy, pFrom, pWInfo->wctrlFlags, |
| 158683 | iLoop, pWLoop, &revMask); |
| 158684 | }else{ |
| 158685 | revMask = pFrom->revLoop; |
| @@ -158702,10 +159107,17 @@ | |
| 158702 | rUnsorted, rCost)); |
| 158703 | }else{ |
| 158704 | rCost = rUnsorted; |
| 158705 | rUnsorted -= 2; /* TUNING: Slight bias in favor of no-sort plans */ |
| 158706 | } |
| 158707 | |
| 158708 | /* Check to see if pWLoop should be added to the set of |
| 158709 | ** mxChoice best-so-far paths. |
| 158710 | ** |
| 158711 | ** First look for an existing path among best-so-far paths |
| @@ -158935,11 +159347,12 @@ | |
| 158935 | |
| 158936 | |
| 158937 | pWInfo->nRowOut = pFrom->nRow; |
| 158938 | |
| 158939 | /* Free temporary memory and return success */ |
| 158940 | sqlite3DbFreeNN(db, pSpace); |
| 158941 | return SQLITE_OK; |
| 158942 | } |
| 158943 | |
| 158944 | /* |
| 158945 | ** Most queries use only a single table (they are not joins) and have |
| @@ -158968,11 +159381,15 @@ | |
| 158968 | if( pWInfo->wctrlFlags & WHERE_OR_SUBCLAUSE ) return 0; |
| 158969 | assert( pWInfo->pTabList->nSrc>=1 ); |
| 158970 | pItem = pWInfo->pTabList->a; |
| 158971 | pTab = pItem->pTab; |
| 158972 | if( IsVirtual(pTab) ) return 0; |
| 158973 | if( pItem->fg.isIndexedBy ) return 0; |
| 158974 | iCur = pItem->iCursor; |
| 158975 | pWC = &pWInfo->sWC; |
| 158976 | pLoop = pBuilder->pNew; |
| 158977 | pLoop->wsFlags = 0; |
| 158978 | pLoop->nSkip = 0; |
| @@ -159141,11 +159558,11 @@ | |
| 159141 | WhereTerm *pTerm, *pEnd; |
| 159142 | SrcItem *pItem; |
| 159143 | WhereLoop *pLoop; |
| 159144 | pLoop = pWInfo->a[i].pWLoop; |
| 159145 | pItem = &pWInfo->pTabList->a[pLoop->iTab]; |
| 159146 | if( (pItem->fg.jointype & JT_LEFT)==0 ) continue; |
| 159147 | if( (pWInfo->wctrlFlags & WHERE_WANT_DISTINCT)==0 |
| 159148 | && (pLoop->wsFlags & WHERE_ONEROW)==0 |
| 159149 | ){ |
| 159150 | continue; |
| 159151 | } |
| @@ -159473,11 +159890,11 @@ | |
| 159473 | } |
| 159474 | |
| 159475 | /* Analyze all of the subexpressions. */ |
| 159476 | sqlite3WhereExprAnalyze(pTabList, &pWInfo->sWC); |
| 159477 | sqlite3WhereAddLimit(&pWInfo->sWC, pLimit); |
| 159478 | if( db->mallocFailed ) goto whereBeginError; |
| 159479 | |
| 159480 | /* Special case: WHERE terms that do not refer to any tables in the join |
| 159481 | ** (constant expressions). Evaluate each such term, and jump over all the |
| 159482 | ** generated code if the result is not true. |
| 159483 | ** |
| @@ -161164,11 +161581,10 @@ | |
| 161164 | int i; |
| 161165 | int nInit = pList ? pList->nExpr : 0; |
| 161166 | for(i=0; i<pAppend->nExpr; i++){ |
| 161167 | sqlite3 *db = pParse->db; |
| 161168 | Expr *pDup = sqlite3ExprDup(db, pAppend->a[i].pExpr, 0); |
| 161169 | assert( pDup==0 || !ExprHasProperty(pDup, EP_MemToken) ); |
| 161170 | if( db->mallocFailed ){ |
| 161171 | sqlite3ExprDelete(db, pDup); |
| 161172 | break; |
| 161173 | } |
| 161174 | if( bIntToNull ){ |
| @@ -162435,14 +162851,13 @@ | |
| 162435 | } |
| 162436 | sqlite3VdbeAddOp2(v, OP_Goto, 0, addrDone); |
| 162437 | |
| 162438 | /* This block runs if reg1 is not NULL, but reg2 is. */ |
| 162439 | sqlite3VdbeJumpHere(v, addr); |
| 162440 | sqlite3VdbeAddOp2(v, OP_IsNull, reg2, lbl); VdbeCoverage(v); |
| 162441 | if( op==OP_Gt || op==OP_Ge ){ |
| 162442 | sqlite3VdbeChangeP2(v, -1, addrDone); |
| 162443 | } |
| 162444 | } |
| 162445 | |
| 162446 | /* Register reg1 currently contains csr1.peerVal (the peer-value from csr1). |
| 162447 | ** This block adds (or subtracts for DESC) the numeric value in regVal |
| 162448 | ** from it. Or, if reg1 is not numeric (it is a NULL, a text value or a blob), |
| @@ -169918,10 +170333,11 @@ | |
| 169918 | while( 1 ){ |
| 169919 | n = sqlite3GetToken((u8*)zSql, &tokenType); |
| 169920 | mxSqlLen -= n; |
| 169921 | if( mxSqlLen<0 ){ |
| 169922 | pParse->rc = SQLITE_TOOBIG; |
| 169923 | break; |
| 169924 | } |
| 169925 | #ifndef SQLITE_OMIT_WINDOWFUNC |
| 169926 | if( tokenType>=TK_WINDOW ){ |
| 169927 | assert( tokenType==TK_SPACE || tokenType==TK_OVER || tokenType==TK_FILTER |
| @@ -170014,11 +170430,11 @@ | |
| 170014 | sqlite3DeleteTable(db, pParse->pNewTable); |
| 170015 | } |
| 170016 | if( pParse->pNewTrigger && !IN_RENAME_OBJECT ){ |
| 170017 | sqlite3DeleteTrigger(db, pParse->pNewTrigger); |
| 170018 | } |
| 170019 | if( pParse->pVList ) sqlite3DbFreeNN(db, pParse->pVList); |
| 170020 | db->pParse = pParentParse; |
| 170021 | assert( nErr==0 || pParse->rc!=SQLITE_OK ); |
| 170022 | return nErr; |
| 170023 | } |
| 170024 | |
| @@ -171370,22 +171786,23 @@ | |
| 171370 | db->lookaside.pEnd = p; |
| 171371 | db->lookaside.bDisable = 0; |
| 171372 | db->lookaside.bMalloced = pBuf==0 ?1:0; |
| 171373 | db->lookaside.nSlot = nBig+nSm; |
| 171374 | }else{ |
| 171375 | db->lookaside.pStart = db; |
| 171376 | #ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE |
| 171377 | db->lookaside.pSmallInit = 0; |
| 171378 | db->lookaside.pSmallFree = 0; |
| 171379 | db->lookaside.pMiddle = db; |
| 171380 | #endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */ |
| 171381 | db->lookaside.pEnd = db; |
| 171382 | db->lookaside.bDisable = 1; |
| 171383 | db->lookaside.sz = 0; |
| 171384 | db->lookaside.bMalloced = 0; |
| 171385 | db->lookaside.nSlot = 0; |
| 171386 | } |
| 171387 | assert( sqlite3LookasideUsed(db,0)==0 ); |
| 171388 | #endif /* SQLITE_OMIT_LOOKASIDE */ |
| 171389 | return SQLITE_OK; |
| 171390 | } |
| 171391 | |
| @@ -171460,10 +171877,11 @@ | |
| 171460 | ** Configuration settings for an individual database connection |
| 171461 | */ |
| 171462 | SQLITE_API int sqlite3_db_config(sqlite3 *db, int op, ...){ |
| 171463 | va_list ap; |
| 171464 | int rc; |
| 171465 | va_start(ap, op); |
| 171466 | switch( op ){ |
| 171467 | case SQLITE_DBCONFIG_MAINDBNAME: { |
| 171468 | /* IMP: R-06824-28531 */ |
| 171469 | /* IMP: R-36257-52125 */ |
| @@ -171525,10 +171943,11 @@ | |
| 171525 | } |
| 171526 | break; |
| 171527 | } |
| 171528 | } |
| 171529 | va_end(ap); |
| 171530 | return rc; |
| 171531 | } |
| 171532 | |
| 171533 | /* |
| 171534 | ** This is the default collating function named "BINARY" which is always |
| @@ -174658,12 +175077,15 @@ | |
| 174658 | sqlite3ShowUpsert(0); |
| 174659 | sqlite3ShowTriggerStep(0); |
| 174660 | sqlite3ShowTriggerStepList(0); |
| 174661 | sqlite3ShowTrigger(0); |
| 174662 | sqlite3ShowTriggerList(0); |
| 174663 | sqlite3ShowWindow(0); |
| 174664 | sqlite3ShowWinFunc(0); |
| 174665 | } |
| 174666 | #endif |
| 174667 | break; |
| 174668 | } |
| 174669 | |
| @@ -180993,12 +181415,11 @@ | |
| 180993 | static int fts3EvalDeferredPhrase(Fts3Cursor *pCsr, Fts3Phrase *pPhrase){ |
| 180994 | int iToken; /* Used to iterate through phrase tokens */ |
| 180995 | char *aPoslist = 0; /* Position list for deferred tokens */ |
| 180996 | int nPoslist = 0; /* Number of bytes in aPoslist */ |
| 180997 | int iPrev = -1; /* Token number of previous deferred token */ |
| 180998 | |
| 180999 | assert( pPhrase->doclist.bFreeList==0 ); |
| 181000 | |
| 181001 | for(iToken=0; iToken<pPhrase->nToken; iToken++){ |
| 181002 | Fts3PhraseToken *pToken = &pPhrase->aToken[iToken]; |
| 181003 | Fts3DeferredToken *pDeferred = pToken->pDeferred; |
| 181004 | |
| @@ -181008,10 +181429,11 @@ | |
| 181008 | int rc = sqlite3Fts3DeferredTokenList(pDeferred, &pList, &nList); |
| 181009 | if( rc!=SQLITE_OK ) return rc; |
| 181010 | |
| 181011 | if( pList==0 ){ |
| 181012 | sqlite3_free(aPoslist); |
| 181013 | pPhrase->doclist.pList = 0; |
| 181014 | pPhrase->doclist.nList = 0; |
| 181015 | return SQLITE_OK; |
| 181016 | |
| 181017 | }else if( aPoslist==0 ){ |
| @@ -181028,10 +181450,11 @@ | |
| 181028 | sqlite3_free(aPoslist); |
| 181029 | aPoslist = pList; |
| 181030 | nPoslist = (int)(aOut - aPoslist); |
| 181031 | if( nPoslist==0 ){ |
| 181032 | sqlite3_free(aPoslist); |
| 181033 | pPhrase->doclist.pList = 0; |
| 181034 | pPhrase->doclist.nList = 0; |
| 181035 | return SQLITE_OK; |
| 181036 | } |
| 181037 | } |
| @@ -181060,17 +181483,18 @@ | |
| 181060 | p1 = pPhrase->doclist.pList; |
| 181061 | p2 = aPoslist; |
| 181062 | nDistance = iPrev - nMaxUndeferred; |
| 181063 | } |
| 181064 | |
| 181065 | aOut = (char *)sqlite3_malloc(nPoslist+8); |
| 181066 | if( !aOut ){ |
| 181067 | sqlite3_free(aPoslist); |
| 181068 | return SQLITE_NOMEM; |
| 181069 | } |
| 181070 | |
| 181071 | pPhrase->doclist.pList = aOut; |
| 181072 | if( fts3PoslistPhraseMerge(&aOut, nDistance, 0, 1, &p1, &p2) ){ |
| 181073 | pPhrase->doclist.bFreeList = 1; |
| 181074 | pPhrase->doclist.nList = (int)(aOut - pPhrase->doclist.pList); |
| 181075 | }else{ |
| 181076 | sqlite3_free(aOut); |
| @@ -181079,10 +181503,11 @@ | |
| 181079 | } |
| 181080 | sqlite3_free(aPoslist); |
| 181081 | } |
| 181082 | } |
| 181083 | |
| 181084 | return SQLITE_OK; |
| 181085 | } |
| 181086 | #endif /* SQLITE_DISABLE_FTS4_DEFERRED */ |
| 181087 | |
| 181088 | /* |
| @@ -182253,15 +182678,14 @@ | |
| 182253 | ); |
| 182254 | break; |
| 182255 | |
| 182256 | default: { |
| 182257 | #ifndef SQLITE_DISABLE_FTS4_DEFERRED |
| 182258 | if( pCsr->pDeferred |
| 182259 | && (pExpr->iDocid==pCsr->iPrevId || pExpr->bDeferred) |
| 182260 | ){ |
| 182261 | Fts3Phrase *pPhrase = pExpr->pPhrase; |
| 182262 | assert( pExpr->bDeferred || pPhrase->doclist.bFreeList==0 ); |
| 182263 | if( pExpr->bDeferred ){ |
| 182264 | fts3EvalInvalidatePoslist(pPhrase); |
| 182265 | } |
| 182266 | *pRc = fts3EvalDeferredPhrase(pCsr, pPhrase); |
| 182267 | bHit = (pPhrase->doclist.pList!=0); |
| @@ -204085,11 +204509,11 @@ | |
| 204085 | sqlite3_bind_value(pUp, 2, aData[2]); |
| 204086 | } |
| 204087 | sqlite3_free(p); |
| 204088 | nChange = 1; |
| 204089 | } |
| 204090 | for(jj=1; jj<pRtree->nAux; jj++){ |
| 204091 | nChange++; |
| 204092 | sqlite3_bind_value(pUp, jj+2, aData[jj+2]); |
| 204093 | } |
| 204094 | if( nChange ){ |
| 204095 | sqlite3_step(pUp); |
| @@ -212444,15 +212868,16 @@ | |
| 212444 | */ |
| 212445 | static int dbpageBegin(sqlite3_vtab *pVtab){ |
| 212446 | DbpageTable *pTab = (DbpageTable *)pVtab; |
| 212447 | sqlite3 *db = pTab->db; |
| 212448 | int i; |
| 212449 | for(i=0; i<db->nDb; i++){ |
| 212450 | Btree *pBt = db->aDb[i].pBt; |
| 212451 | if( pBt ) sqlite3BtreeBeginTrans(pBt, 1, 0); |
| 212452 | } |
| 212453 | return SQLITE_OK; |
| 212454 | } |
| 212455 | |
| 212456 | |
| 212457 | /* |
| 212458 | ** Invoke this routine to register the "dbpage" virtual table module |
| @@ -219172,11 +219597,11 @@ | |
| 219172 | static void sqlite3Fts5BufferAppendPrintf(int *, Fts5Buffer*, char *zFmt, ...); |
| 219173 | |
| 219174 | static char *sqlite3Fts5Mprintf(int *pRc, const char *zFmt, ...); |
| 219175 | |
| 219176 | #define fts5BufferZero(x) sqlite3Fts5BufferZero(x) |
| 219177 | #define fts5BufferAppendVarint(a,b,c) sqlite3Fts5BufferAppendVarint(a,b,c) |
| 219178 | #define fts5BufferFree(a) sqlite3Fts5BufferFree(a) |
| 219179 | #define fts5BufferAppendBlob(a,b,c,d) sqlite3Fts5BufferAppendBlob(a,b,c,d) |
| 219180 | #define fts5BufferSet(a,b,c,d) sqlite3Fts5BufferSet(a,b,c,d) |
| 219181 | |
| 219182 | #define fts5BufferGrow(pRc,pBuf,nn) ( \ |
| @@ -231049,11 +231474,13 @@ | |
| 231049 | /* Write the rowid. */ |
| 231050 | if( pWriter->bFirstRowidInDoclist || pWriter->bFirstRowidInPage ){ |
| 231051 | fts5BufferAppendVarint(&p->rc, &pPage->buf, iRowid); |
| 231052 | }else{ |
| 231053 | assert_nc( p->rc || iRowid>pWriter->iPrevRowid ); |
| 231054 | fts5BufferAppendVarint(&p->rc, &pPage->buf, iRowid - pWriter->iPrevRowid); |
| 231055 | } |
| 231056 | pWriter->iPrevRowid = iRowid; |
| 231057 | pWriter->bFirstRowidInDoclist = 0; |
| 231058 | pWriter->bFirstRowidInPage = 0; |
| 231059 | } |
| @@ -231813,21 +232240,21 @@ | |
| 231813 | return fts5IndexReturn(p); |
| 231814 | } |
| 231815 | |
| 231816 | static void fts5AppendRowid( |
| 231817 | Fts5Index *p, |
| 231818 | i64 iDelta, |
| 231819 | Fts5Iter *pUnused, |
| 231820 | Fts5Buffer *pBuf |
| 231821 | ){ |
| 231822 | UNUSED_PARAM(pUnused); |
| 231823 | fts5BufferAppendVarint(&p->rc, pBuf, iDelta); |
| 231824 | } |
| 231825 | |
| 231826 | static void fts5AppendPoslist( |
| 231827 | Fts5Index *p, |
| 231828 | i64 iDelta, |
| 231829 | Fts5Iter *pMulti, |
| 231830 | Fts5Buffer *pBuf |
| 231831 | ){ |
| 231832 | int nData = pMulti->base.nData; |
| 231833 | int nByte = nData + 9 + 9 + FTS5_DATA_ZERO_PADDING; |
| @@ -231898,14 +232325,14 @@ | |
| 231898 | fts5BufferSafeAppendVarint(pBuf, iRowid - *piLastRowid); |
| 231899 | *piLastRowid = iRowid; |
| 231900 | } |
| 231901 | #endif |
| 231902 | |
| 231903 | #define fts5MergeAppendDocid(pBuf, iLastRowid, iRowid) { \ |
| 231904 | assert( (pBuf)->n!=0 || (iLastRowid)==0 ); \ |
| 231905 | fts5BufferSafeAppendVarint((pBuf), (iRowid) - (iLastRowid)); \ |
| 231906 | (iLastRowid) = (iRowid); \ |
| 231907 | } |
| 231908 | |
| 231909 | /* |
| 231910 | ** Swap the contents of buffer *p1 with that of *p2. |
| 231911 | */ |
| @@ -232172,11 +232599,11 @@ | |
| 232172 | Fts5Buffer *aBuf; |
| 232173 | int nBuf = 32; |
| 232174 | int nMerge = 1; |
| 232175 | |
| 232176 | void (*xMerge)(Fts5Index*, Fts5Buffer*, int, Fts5Buffer*); |
| 232177 | void (*xAppend)(Fts5Index*, i64, Fts5Iter*, Fts5Buffer*); |
| 232178 | if( p->pConfig->eDetail==FTS5_DETAIL_NONE ){ |
| 232179 | xMerge = fts5MergeRowidLists; |
| 232180 | xAppend = fts5AppendRowid; |
| 232181 | }else{ |
| 232182 | nMerge = FTS5_MERGE_NLIST-1; |
| @@ -232211,11 +232638,11 @@ | |
| 232211 | fts5MultiIterNext2(p, p1, &dummy) |
| 232212 | ){ |
| 232213 | Fts5SegIter *pSeg = &p1->aSeg[ p1->aFirst[1].iFirst ]; |
| 232214 | p1->xSetOutputs(p1, pSeg); |
| 232215 | if( p1->base.nData ){ |
| 232216 | xAppend(p, p1->base.iRowid-iLastRowid, p1, &doclist); |
| 232217 | iLastRowid = p1->base.iRowid; |
| 232218 | } |
| 232219 | } |
| 232220 | fts5MultiIterFree(p1); |
| 232221 | } |
| @@ -232259,11 +232686,11 @@ | |
| 232259 | } |
| 232260 | } |
| 232261 | iLastRowid = 0; |
| 232262 | } |
| 232263 | |
| 232264 | xAppend(p, p1->base.iRowid-iLastRowid, p1, &doclist); |
| 232265 | iLastRowid = p1->base.iRowid; |
| 232266 | } |
| 232267 | |
| 232268 | assert( (nBuf%nMerge)==0 ); |
| 232269 | for(i=0; i<nBuf; i+=nMerge){ |
| @@ -236575,11 +237002,11 @@ | |
| 236575 | int nArg, /* Number of args */ |
| 236576 | sqlite3_value **apUnused /* Function arguments */ |
| 236577 | ){ |
| 236578 | assert( nArg==0 ); |
| 236579 | UNUSED_PARAM2(nArg, apUnused); |
| 236580 | sqlite3_result_text(pCtx, "fts5: 2022-06-15 16:26:37 56c60a35ea457f06db58ec3f694a1ae16fd03e6625da1d7879d63d72bbcb1c62", -1, SQLITE_TRANSIENT); |
| 236581 | } |
| 236582 | |
| 236583 | /* |
| 236584 | ** Return true if zName is the extension on one of the shadow tables used |
| 236585 | ** by this module. |
| @@ -241246,10 +241673,20 @@ | |
| 241246 | /* #include <assert.h> */ |
| 241247 | /* #include <string.h> */ |
| 241248 | |
| 241249 | #ifndef SQLITE_OMIT_VIRTUALTABLE |
| 241250 | |
| 241251 | /* stmt_vtab is a subclass of sqlite3_vtab which will |
| 241252 | ** serve as the underlying representation of a stmt virtual table |
| 241253 | */ |
| 241254 | typedef struct stmt_vtab stmt_vtab; |
| 241255 | struct stmt_vtab { |
| @@ -241263,12 +241700,11 @@ | |
| 241263 | */ |
| 241264 | typedef struct stmt_cursor stmt_cursor; |
| 241265 | struct stmt_cursor { |
| 241266 | sqlite3_vtab_cursor base; /* Base class - must be first */ |
| 241267 | sqlite3 *db; /* Database connection for this cursor */ |
| 241268 | sqlite3_stmt *pStmt; /* Statement cursor is currently pointing at */ |
| 241269 | sqlite3_int64 iRowid; /* The rowid */ |
| 241270 | }; |
| 241271 | |
| 241272 | /* |
| 241273 | ** The stmtConnect() method is invoked to create a new |
| 241274 | ** stmt_vtab that describes the stmt virtual table. |
| @@ -241308,11 +241744,11 @@ | |
| 241308 | |
| 241309 | rc = sqlite3_declare_vtab(db, |
| 241310 | "CREATE TABLE x(sql,ncol,ro,busy,nscan,nsort,naidx,nstep," |
| 241311 | "reprep,run,mem)"); |
| 241312 | if( rc==SQLITE_OK ){ |
| 241313 | pNew = sqlite3_malloc( sizeof(*pNew) ); |
| 241314 | *ppVtab = (sqlite3_vtab*)pNew; |
| 241315 | if( pNew==0 ) return SQLITE_NOMEM; |
| 241316 | memset(pNew, 0, sizeof(*pNew)); |
| 241317 | pNew->db = db; |
| 241318 | } |
| @@ -241330,22 +241766,33 @@ | |
| 241330 | /* |
| 241331 | ** Constructor for a new stmt_cursor object. |
| 241332 | */ |
| 241333 | static int stmtOpen(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){ |
| 241334 | stmt_cursor *pCur; |
| 241335 | pCur = sqlite3_malloc( sizeof(*pCur) ); |
| 241336 | if( pCur==0 ) return SQLITE_NOMEM; |
| 241337 | memset(pCur, 0, sizeof(*pCur)); |
| 241338 | pCur->db = ((stmt_vtab*)p)->db; |
| 241339 | *ppCursor = &pCur->base; |
| 241340 | return SQLITE_OK; |
| 241341 | } |
| 241342 | |
| 241343 | /* |
| 241344 | ** Destructor for a stmt_cursor. |
| 241345 | */ |
| 241346 | static int stmtClose(sqlite3_vtab_cursor *cur){ |
| 241347 | sqlite3_free(cur); |
| 241348 | return SQLITE_OK; |
| 241349 | } |
| 241350 | |
| 241351 | |
| @@ -241352,12 +241799,13 @@ | |
| 241352 | /* |
| 241353 | ** Advance a stmt_cursor to its next row of output. |
| 241354 | */ |
| 241355 | static int stmtNext(sqlite3_vtab_cursor *cur){ |
| 241356 | stmt_cursor *pCur = (stmt_cursor*)cur; |
| 241357 | pCur->iRowid++; |
| 241358 | pCur->pStmt = sqlite3_next_stmt(pCur->db, pCur->pStmt); |
| 241359 | return SQLITE_OK; |
| 241360 | } |
| 241361 | |
| 241362 | /* |
| 241363 | ** Return values of columns for the row at which the stmt_cursor |
| @@ -241367,43 +241815,15 @@ | |
| 241367 | sqlite3_vtab_cursor *cur, /* The cursor */ |
| 241368 | sqlite3_context *ctx, /* First argument to sqlite3_result_...() */ |
| 241369 | int i /* Which column to return */ |
| 241370 | ){ |
| 241371 | stmt_cursor *pCur = (stmt_cursor*)cur; |
| 241372 | switch( i ){ |
| 241373 | case STMT_COLUMN_SQL: { |
| 241374 | sqlite3_result_text(ctx, sqlite3_sql(pCur->pStmt), -1, SQLITE_TRANSIENT); |
| 241375 | break; |
| 241376 | } |
| 241377 | case STMT_COLUMN_NCOL: { |
| 241378 | sqlite3_result_int(ctx, sqlite3_column_count(pCur->pStmt)); |
| 241379 | break; |
| 241380 | } |
| 241381 | case STMT_COLUMN_RO: { |
| 241382 | sqlite3_result_int(ctx, sqlite3_stmt_readonly(pCur->pStmt)); |
| 241383 | break; |
| 241384 | } |
| 241385 | case STMT_COLUMN_BUSY: { |
| 241386 | sqlite3_result_int(ctx, sqlite3_stmt_busy(pCur->pStmt)); |
| 241387 | break; |
| 241388 | } |
| 241389 | default: { |
| 241390 | assert( i==STMT_COLUMN_MEM ); |
| 241391 | i = SQLITE_STMTSTATUS_MEMUSED + |
| 241392 | STMT_COLUMN_NSCAN - SQLITE_STMTSTATUS_FULLSCAN_STEP; |
| 241393 | /* Fall thru */ |
| 241394 | } |
| 241395 | case STMT_COLUMN_NSCAN: |
| 241396 | case STMT_COLUMN_NSORT: |
| 241397 | case STMT_COLUMN_NAIDX: |
| 241398 | case STMT_COLUMN_NSTEP: |
| 241399 | case STMT_COLUMN_REPREP: |
| 241400 | case STMT_COLUMN_RUN: { |
| 241401 | sqlite3_result_int(ctx, sqlite3_stmt_status(pCur->pStmt, |
| 241402 | i-STMT_COLUMN_NSCAN+SQLITE_STMTSTATUS_FULLSCAN_STEP, 0)); |
| 241403 | break; |
| 241404 | } |
| 241405 | } |
| 241406 | return SQLITE_OK; |
| 241407 | } |
| 241408 | |
| 241409 | /* |
| @@ -241410,21 +241830,21 @@ | |
| 241410 | ** Return the rowid for the current row. In this implementation, the |
| 241411 | ** rowid is the same as the output value. |
| 241412 | */ |
| 241413 | static int stmtRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){ |
| 241414 | stmt_cursor *pCur = (stmt_cursor*)cur; |
| 241415 | *pRowid = pCur->iRowid; |
| 241416 | return SQLITE_OK; |
| 241417 | } |
| 241418 | |
| 241419 | /* |
| 241420 | ** Return TRUE if the cursor has been moved off of the last |
| 241421 | ** row of output. |
| 241422 | */ |
| 241423 | static int stmtEof(sqlite3_vtab_cursor *cur){ |
| 241424 | stmt_cursor *pCur = (stmt_cursor*)cur; |
| 241425 | return pCur->pStmt==0; |
| 241426 | } |
| 241427 | |
| 241428 | /* |
| 241429 | ** This method is called to "rewind" the stmt_cursor object back |
| 241430 | ** to the first row of output. This method is always called at least |
| @@ -241435,13 +241855,57 @@ | |
| 241435 | sqlite3_vtab_cursor *pVtabCursor, |
| 241436 | int idxNum, const char *idxStr, |
| 241437 | int argc, sqlite3_value **argv |
| 241438 | ){ |
| 241439 | stmt_cursor *pCur = (stmt_cursor *)pVtabCursor; |
| 241440 | pCur->pStmt = 0; |
| 241441 | pCur->iRowid = 0; |
| 241442 | return stmtNext(pVtabCursor); |
| 241443 | } |
| 241444 | |
| 241445 | /* |
| 241446 | ** SQLite will invoke this method one or more times while planning a query |
| 241447 | ** that uses the stmt virtual table. This routine needs to create |
| 241448 |
| --- extsrc/sqlite3.c | |
| +++ extsrc/sqlite3.c | |
| @@ -1,8 +1,8 @@ | |
| 1 | /****************************************************************************** |
| 2 | ** This file is an amalgamation of many separate C source files from SQLite |
| 3 | ** version 3.40.0. By combining all the individual C code files into this |
| 4 | ** single large file, the entire code can be compiled as a single translation |
| 5 | ** unit. This allows many compilers to do optimizations that would not be |
| 6 | ** possible if the files were compiled separately. Performance improvements |
| 7 | ** of 5% or more are commonly seen when SQLite is compiled as a single |
| 8 | ** translation unit. |
| @@ -450,13 +450,13 @@ | |
| 450 | ** |
| 451 | ** See also: [sqlite3_libversion()], |
| 452 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 453 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 454 | */ |
| 455 | #define SQLITE_VERSION "3.40.0" |
| 456 | #define SQLITE_VERSION_NUMBER 3040000 |
| 457 | #define SQLITE_SOURCE_ID "2022-09-02 21:19:24 da7af290960ab8a04a1f55cdc5eeac36b47fa194edf67f0a05daa4b7f2a4071c" |
| 458 | |
| 459 | /* |
| 460 | ** CAPI3REF: Run-Time Library Version Numbers |
| 461 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 462 | ** |
| @@ -3728,10 +3728,13 @@ | |
| 3728 | ** |
| 3729 | ** ^(<dt>[SQLITE_OPEN_SHAREDCACHE]</dt> |
| 3730 | ** <dd>The database is opened [shared cache] enabled, overriding |
| 3731 | ** the default shared cache setting provided by |
| 3732 | ** [sqlite3_enable_shared_cache()].)^ |
| 3733 | ** The [use of shared cache mode is discouraged] and hence shared cache |
| 3734 | ** capabilities may be omitted from many builds of SQLite. In such cases, |
| 3735 | ** this option is a no-op. |
| 3736 | ** |
| 3737 | ** ^(<dt>[SQLITE_OPEN_PRIVATECACHE]</dt> |
| 3738 | ** <dd>The database is opened [shared cache] disabled, overriding |
| 3739 | ** the default shared cache setting provided by |
| 3740 | ** [sqlite3_enable_shared_cache()].)^ |
| @@ -3743,11 +3746,11 @@ | |
| 3746 | ** connection as soon as the connection is created. In addition to setting |
| 3747 | ** the extended result code mode, this flag also causes [sqlite3_open_v2()] |
| 3748 | ** to return an extended result code.</dd> |
| 3749 | ** |
| 3750 | ** [[OPEN_NOFOLLOW]] ^(<dt>[SQLITE_OPEN_NOFOLLOW]</dt> |
| 3751 | ** <dd>The database filename is not allowed to contain a symbolic link</dd> |
| 3752 | ** </dl>)^ |
| 3753 | ** |
| 3754 | ** If the 3rd parameter to sqlite3_open_v2() is not one of the |
| 3755 | ** required combinations shown above optionally combined with other |
| 3756 | ** [SQLITE_OPEN_READONLY | SQLITE_OPEN_* bits] |
| @@ -6586,11 +6589,11 @@ | |
| 6589 | ** CAPI3REF: Return The Schema Name For A Database Connection |
| 6590 | ** METHOD: sqlite3 |
| 6591 | ** |
| 6592 | ** ^The sqlite3_db_name(D,N) interface returns a pointer to the schema name |
| 6593 | ** for the N-th database on database connection D, or a NULL pointer of N is |
| 6594 | ** out of range. An N value of 0 means the main database file. An N of 1 is |
| 6595 | ** the "temp" schema. Larger values of N correspond to various ATTACH-ed |
| 6596 | ** databases. |
| 6597 | ** |
| 6598 | ** Space to hold the string that is returned by sqlite3_db_name() is managed |
| 6599 | ** by SQLite itself. The string might be deallocated by any operation that |
| @@ -6769,11 +6772,11 @@ | |
| 6772 | ** |
| 6773 | ** ^The sqlite3_autovacuum_pages(D,C,P,X) interface registers a callback |
| 6774 | ** function C that is invoked prior to each autovacuum of the database |
| 6775 | ** file. ^The callback is passed a copy of the generic data pointer (P), |
| 6776 | ** the schema-name of the attached database that is being autovacuumed, |
| 6777 | ** the size of the database file in pages, the number of free pages, |
| 6778 | ** and the number of bytes per page, respectively. The callback should |
| 6779 | ** return the number of free pages that should be removed by the |
| 6780 | ** autovacuum. ^If the callback returns zero, then no autovacuum happens. |
| 6781 | ** ^If the value returned is greater than or equal to the number of |
| 6782 | ** free pages, then a complete autovacuum happens. |
| @@ -6889,10 +6892,15 @@ | |
| 6892 | ** |
| 6893 | ** ^(This routine enables or disables the sharing of the database cache |
| 6894 | ** and schema data structures between [database connection | connections] |
| 6895 | ** to the same database. Sharing is enabled if the argument is true |
| 6896 | ** and disabled if the argument is false.)^ |
| 6897 | ** |
| 6898 | ** This interface is omitted if SQLite is compiled with |
| 6899 | ** [-DSQLITE_OMIT_SHARED_CACHE]. The [-DSQLITE_OMIT_SHARED_CACHE] |
| 6900 | ** compile-time option is recommended because the |
| 6901 | ** [use of shared cache mode is discouraged]. |
| 6902 | ** |
| 6903 | ** ^Cache sharing is enabled and disabled for an entire process. |
| 6904 | ** This is a change as of SQLite [version 3.5.0] ([dateof:3.5.0]). |
| 6905 | ** In prior versions of SQLite, |
| 6906 | ** sharing was enabled or disabled for each thread separately. |
| @@ -6988,11 +6996,11 @@ | |
| 6996 | ** ^Setting the heap limits to zero disables the heap limiter mechanism. |
| 6997 | ** |
| 6998 | ** ^The soft heap limit may not be greater than the hard heap limit. |
| 6999 | ** ^If the hard heap limit is enabled and if sqlite3_soft_heap_limit(N) |
| 7000 | ** is invoked with a value of N that is greater than the hard heap limit, |
| 7001 | ** the soft heap limit is set to the value of the hard heap limit. |
| 7002 | ** ^The soft heap limit is automatically enabled whenever the hard heap |
| 7003 | ** limit is enabled. ^When sqlite3_hard_heap_limit64(N) is invoked and |
| 7004 | ** the soft heap limit is outside the range of 1..N, then the soft heap |
| 7005 | ** limit is set to N. ^Invoking sqlite3_soft_heap_limit64(0) when the |
| 7006 | ** hard heap limit is enabled makes the soft heap limit equal to the |
| @@ -9283,11 +9291,11 @@ | |
| 9291 | ** sqlite3_backup_init() is called and before the corresponding call to |
| 9292 | ** sqlite3_backup_finish(). SQLite does not currently check to see |
| 9293 | ** if the application incorrectly accesses the destination [database connection] |
| 9294 | ** and so no error code is reported, but the operations may malfunction |
| 9295 | ** nevertheless. Use of the destination database connection while a |
| 9296 | ** backup is in progress might also cause a mutex deadlock. |
| 9297 | ** |
| 9298 | ** If running in [shared cache mode], the application must |
| 9299 | ** guarantee that the shared cache used by the destination database |
| 9300 | ** is not accessed while the backup is running. In practice this means |
| 9301 | ** that the application must guarantee that the disk file being |
| @@ -9711,11 +9719,11 @@ | |
| 9719 | ** See the [sqlite3_wal_checkpoint_v2()] documentation for details on the |
| 9720 | ** meaning of each of these checkpoint modes. |
| 9721 | */ |
| 9722 | #define SQLITE_CHECKPOINT_PASSIVE 0 /* Do as much as possible w/o blocking */ |
| 9723 | #define SQLITE_CHECKPOINT_FULL 1 /* Wait for writers, then checkpoint */ |
| 9724 | #define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for readers */ |
| 9725 | #define SQLITE_CHECKPOINT_TRUNCATE 3 /* Like RESTART but also truncate WAL */ |
| 9726 | |
| 9727 | /* |
| 9728 | ** CAPI3REF: Virtual Table Interface Configuration |
| 9729 | ** |
| @@ -13142,10 +13150,15 @@ | |
| 13150 | /******** End of fts5.h *********/ |
| 13151 | |
| 13152 | /************** End of sqlite3.h *********************************************/ |
| 13153 | /************** Continuing where we left off in sqliteInt.h ******************/ |
| 13154 | |
| 13155 | /* |
| 13156 | ** Reuse the STATIC_LRU for mutex access to sqlite3_temp_directory. |
| 13157 | */ |
| 13158 | #define SQLITE_MUTEX_STATIC_TEMPDIR SQLITE_MUTEX_STATIC_VFS1 |
| 13159 | |
| 13160 | /* |
| 13161 | ** Include the configuration header output by 'configure' if we're using the |
| 13162 | ** autoconf-based build |
| 13163 | */ |
| 13164 | #if defined(_HAVE_SQLITE_CONFIG_H) && !defined(SQLITECONFIG_H) |
| @@ -15553,67 +15566,67 @@ | |
| 15566 | #define OP_Checkpoint 3 |
| 15567 | #define OP_JournalMode 4 |
| 15568 | #define OP_Vacuum 5 |
| 15569 | #define OP_VFilter 6 /* jump, synopsis: iplan=r[P3] zplan='P4' */ |
| 15570 | #define OP_VUpdate 7 /* synopsis: data=r[P3@P2] */ |
| 15571 | #define OP_Init 8 /* jump, synopsis: Start at P2 */ |
| 15572 | #define OP_Goto 9 /* jump */ |
| 15573 | #define OP_Gosub 10 /* jump */ |
| 15574 | #define OP_InitCoroutine 11 /* jump */ |
| 15575 | #define OP_Yield 12 /* jump */ |
| 15576 | #define OP_MustBeInt 13 /* jump */ |
| 15577 | #define OP_Jump 14 /* jump */ |
| 15578 | #define OP_Once 15 /* jump */ |
| 15579 | #define OP_If 16 /* jump */ |
| 15580 | #define OP_IfNot 17 /* jump */ |
| 15581 | #define OP_IsNullOrType 18 /* jump, synopsis: if typeof(r[P1]) IN (P3,5) goto P2 */ |
| 15582 | #define OP_Not 19 /* same as TK_NOT, synopsis: r[P2]= !r[P1] */ |
| 15583 | #define OP_IfNullRow 20 /* jump, synopsis: if P1.nullRow then r[P3]=NULL, goto P2 */ |
| 15584 | #define OP_SeekLT 21 /* jump, synopsis: key=r[P3@P4] */ |
| 15585 | #define OP_SeekLE 22 /* jump, synopsis: key=r[P3@P4] */ |
| 15586 | #define OP_SeekGE 23 /* jump, synopsis: key=r[P3@P4] */ |
| 15587 | #define OP_SeekGT 24 /* jump, synopsis: key=r[P3@P4] */ |
| 15588 | #define OP_IfNotOpen 25 /* jump, synopsis: if( !csr[P1] ) goto P2 */ |
| 15589 | #define OP_IfNoHope 26 /* jump, synopsis: key=r[P3@P4] */ |
| 15590 | #define OP_NoConflict 27 /* jump, synopsis: key=r[P3@P4] */ |
| 15591 | #define OP_NotFound 28 /* jump, synopsis: key=r[P3@P4] */ |
| 15592 | #define OP_Found 29 /* jump, synopsis: key=r[P3@P4] */ |
| 15593 | #define OP_SeekRowid 30 /* jump, synopsis: intkey=r[P3] */ |
| 15594 | #define OP_NotExists 31 /* jump, synopsis: intkey=r[P3] */ |
| 15595 | #define OP_Last 32 /* jump */ |
| 15596 | #define OP_IfSmaller 33 /* jump */ |
| 15597 | #define OP_SorterSort 34 /* jump */ |
| 15598 | #define OP_Sort 35 /* jump */ |
| 15599 | #define OP_Rewind 36 /* jump */ |
| 15600 | #define OP_SorterNext 37 /* jump */ |
| 15601 | #define OP_Prev 38 /* jump */ |
| 15602 | #define OP_Next 39 /* jump */ |
| 15603 | #define OP_IdxLE 40 /* jump, synopsis: key=r[P3@P4] */ |
| 15604 | #define OP_IdxGT 41 /* jump, synopsis: key=r[P3@P4] */ |
| 15605 | #define OP_IdxLT 42 /* jump, synopsis: key=r[P3@P4] */ |
| 15606 | #define OP_Or 43 /* same as TK_OR, synopsis: r[P3]=(r[P1] || r[P2]) */ |
| 15607 | #define OP_And 44 /* same as TK_AND, synopsis: r[P3]=(r[P1] && r[P2]) */ |
| 15608 | #define OP_IdxGE 45 /* jump, synopsis: key=r[P3@P4] */ |
| 15609 | #define OP_RowSetRead 46 /* jump, synopsis: r[P3]=rowset(P1) */ |
| 15610 | #define OP_RowSetTest 47 /* jump, synopsis: if r[P3] in rowset(P1) goto P2 */ |
| 15611 | #define OP_Program 48 /* jump */ |
| 15612 | #define OP_FkIfZero 49 /* jump, synopsis: if fkctr[P1]==0 goto P2 */ |
| 15613 | #define OP_IsNull 50 /* jump, same as TK_ISNULL, synopsis: if r[P1]==NULL goto P2 */ |
| 15614 | #define OP_NotNull 51 /* jump, same as TK_NOTNULL, synopsis: if r[P1]!=NULL goto P2 */ |
| 15615 | #define OP_Ne 52 /* jump, same as TK_NE, synopsis: IF r[P3]!=r[P1] */ |
| 15616 | #define OP_Eq 53 /* jump, same as TK_EQ, synopsis: IF r[P3]==r[P1] */ |
| 15617 | #define OP_Gt 54 /* jump, same as TK_GT, synopsis: IF r[P3]>r[P1] */ |
| 15618 | #define OP_Le 55 /* jump, same as TK_LE, synopsis: IF r[P3]<=r[P1] */ |
| 15619 | #define OP_Lt 56 /* jump, same as TK_LT, synopsis: IF r[P3]<r[P1] */ |
| 15620 | #define OP_Ge 57 /* jump, same as TK_GE, synopsis: IF r[P3]>=r[P1] */ |
| 15621 | #define OP_ElseEq 58 /* jump, same as TK_ESCAPE */ |
| 15622 | #define OP_IfPos 59 /* jump, synopsis: if r[P1]>0 then r[P1]-=P3, goto P2 */ |
| 15623 | #define OP_IfNotZero 60 /* jump, synopsis: if r[P1]!=0 then r[P1]--, goto P2 */ |
| 15624 | #define OP_DecrJumpZero 61 /* jump, synopsis: if (--r[P1])==0 goto P2 */ |
| 15625 | #define OP_IncrVacuum 62 /* jump */ |
| 15626 | #define OP_VNext 63 /* jump */ |
| 15627 | #define OP_Filter 64 /* jump, synopsis: if key(P3@P4) not in filter(P1) goto P2 */ |
| 15628 | #define OP_PureFunc 65 /* synopsis: r[P3]=func(r[P2@NP]) */ |
| 15629 | #define OP_Function 66 /* synopsis: r[P3]=func(r[P2@NP]) */ |
| 15630 | #define OP_Return 67 |
| 15631 | #define OP_EndCoroutine 68 |
| 15632 | #define OP_HaltIfNull 69 /* synopsis: if r[P3]=null halt */ |
| @@ -15745,17 +15758,17 @@ | |
| 15758 | #define OPFLG_IN3 0x08 /* in3: P3 is an input */ |
| 15759 | #define OPFLG_OUT2 0x10 /* out2: P2 is an output */ |
| 15760 | #define OPFLG_OUT3 0x20 /* out3: P3 is an output */ |
| 15761 | #define OPFLG_INITIALIZER {\ |
| 15762 | /* 0 */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00,\ |
| 15763 | /* 8 */ 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01,\ |
| 15764 | /* 16 */ 0x03, 0x03, 0x03, 0x12, 0x01, 0x09, 0x09, 0x09,\ |
| 15765 | /* 24 */ 0x09, 0x01, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,\ |
| 15766 | /* 32 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\ |
| 15767 | /* 40 */ 0x01, 0x01, 0x01, 0x26, 0x26, 0x01, 0x23, 0x0b,\ |
| 15768 | /* 48 */ 0x01, 0x01, 0x03, 0x03, 0x0b, 0x0b, 0x0b, 0x0b,\ |
| 15769 | /* 56 */ 0x0b, 0x0b, 0x01, 0x03, 0x03, 0x03, 0x01, 0x01,\ |
| 15770 | /* 64 */ 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x00, 0x10,\ |
| 15771 | /* 72 */ 0x10, 0x10, 0x00, 0x10, 0x00, 0x10, 0x10, 0x00,\ |
| 15772 | /* 80 */ 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x02, 0x02,\ |
| 15773 | /* 88 */ 0x02, 0x00, 0x00, 0x12, 0x1e, 0x20, 0x00, 0x00,\ |
| 15774 | /* 96 */ 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x26, 0x26,\ |
| @@ -15857,10 +15870,11 @@ | |
| 15870 | SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe*, int addr, const char *zP4, int N); |
| 15871 | SQLITE_PRIVATE void sqlite3VdbeAppendP4(Vdbe*, void *pP4, int p4type); |
| 15872 | SQLITE_PRIVATE void sqlite3VdbeSetP4KeyInfo(Parse*, Index*); |
| 15873 | SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe*, int); |
| 15874 | SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe*, int); |
| 15875 | SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetLastOp(Vdbe*); |
| 15876 | SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Parse*); |
| 15877 | SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe*); |
| 15878 | SQLITE_PRIVATE void sqlite3VdbeReusable(Vdbe*); |
| 15879 | SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe*); |
| 15880 | SQLITE_PRIVATE void sqlite3VdbeMakeReady(Vdbe*,Parse*); |
| @@ -16741,10 +16755,11 @@ | |
| 16755 | void *pMiddle; /* First byte past end of full-size buffers and |
| 16756 | ** the first byte of LOOKASIDE_SMALL buffers */ |
| 16757 | #endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */ |
| 16758 | void *pStart; /* First byte of available memory space */ |
| 16759 | void *pEnd; /* First byte past end of available space */ |
| 16760 | void *pTrueEnd; /* True value of pEnd, when db->pnBytesFreed!=0 */ |
| 16761 | }; |
| 16762 | struct LookasideSlot { |
| 16763 | LookasideSlot *pNext; /* Next buffer in the list of free buffers */ |
| 16764 | }; |
| 16765 | |
| @@ -18189,11 +18204,11 @@ | |
| 18204 | #define EP_xIsSelect 0x001000 /* x.pSelect is valid (otherwise x.pList is) */ |
| 18205 | #define EP_Skip 0x002000 /* Operator does not contribute to affinity */ |
| 18206 | #define EP_Reduced 0x004000 /* Expr struct EXPR_REDUCEDSIZE bytes only */ |
| 18207 | #define EP_Win 0x008000 /* Contains window functions */ |
| 18208 | #define EP_TokenOnly 0x010000 /* Expr struct EXPR_TOKENONLYSIZE bytes only */ |
| 18209 | /* 0x020000 // Available for reuse */ |
| 18210 | #define EP_IfNullRow 0x040000 /* The TK_IF_NULL_ROW opcode */ |
| 18211 | #define EP_Unlikely 0x080000 /* unlikely() or likelihood() function */ |
| 18212 | #define EP_ConstFunc 0x100000 /* A SQLITE_FUNC_CONSTANT or _SLOCHNG function */ |
| 18213 | #define EP_CanBeNull 0x200000 /* Can be null despite NOT NULL constraint */ |
| 18214 | #define EP_Subquery 0x400000 /* Tree contains a TK_SELECT operator */ |
| @@ -19667,10 +19682,11 @@ | |
| 19682 | SQLITE_PRIVATE void *sqlite3Realloc(void*, u64); |
| 19683 | SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *, void *, u64); |
| 19684 | SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *, void *, u64); |
| 19685 | SQLITE_PRIVATE void sqlite3DbFree(sqlite3*, void*); |
| 19686 | SQLITE_PRIVATE void sqlite3DbFreeNN(sqlite3*, void*); |
| 19687 | SQLITE_PRIVATE void sqlite3DbNNFreeNN(sqlite3*, void*); |
| 19688 | SQLITE_PRIVATE int sqlite3MallocSize(const void*); |
| 19689 | SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3*, const void*); |
| 19690 | SQLITE_PRIVATE void *sqlite3PageMalloc(int); |
| 19691 | SQLITE_PRIVATE void sqlite3PageFree(void*); |
| 19692 | SQLITE_PRIVATE void sqlite3MemSetDefault(void); |
| @@ -19777,18 +19793,20 @@ | |
| 19793 | SQLITE_PRIVATE void sqlite3TreeViewColumnList(TreeView*, const Column*, int, u8); |
| 19794 | SQLITE_PRIVATE void sqlite3TreeViewSrcList(TreeView*, const SrcList*); |
| 19795 | SQLITE_PRIVATE void sqlite3TreeViewSelect(TreeView*, const Select*, u8); |
| 19796 | SQLITE_PRIVATE void sqlite3TreeViewWith(TreeView*, const With*, u8); |
| 19797 | SQLITE_PRIVATE void sqlite3TreeViewUpsert(TreeView*, const Upsert*, u8); |
| 19798 | #if TREETRACE_ENABLED |
| 19799 | SQLITE_PRIVATE void sqlite3TreeViewDelete(const With*, const SrcList*, const Expr*, |
| 19800 | const ExprList*,const Expr*, const Trigger*); |
| 19801 | SQLITE_PRIVATE void sqlite3TreeViewInsert(const With*, const SrcList*, |
| 19802 | const IdList*, const Select*, const ExprList*, |
| 19803 | int, const Upsert*, const Trigger*); |
| 19804 | SQLITE_PRIVATE void sqlite3TreeViewUpdate(const With*, const SrcList*, const ExprList*, |
| 19805 | const Expr*, int, const ExprList*, const Expr*, |
| 19806 | const Upsert*, const Trigger*); |
| 19807 | #endif |
| 19808 | #ifndef SQLITE_OMIT_TRIGGER |
| 19809 | SQLITE_PRIVATE void sqlite3TreeViewTriggerStep(TreeView*, const TriggerStep*, u8, u8); |
| 19810 | SQLITE_PRIVATE void sqlite3TreeViewTrigger(TreeView*, const Trigger*, u8, u8); |
| 19811 | #endif |
| 19812 | #ifndef SQLITE_OMIT_WINDOWFUNC |
| @@ -20189,10 +20207,11 @@ | |
| 20207 | SQLITE_PRIVATE int sqlite3FixSrcList(DbFixer*, SrcList*); |
| 20208 | SQLITE_PRIVATE int sqlite3FixSelect(DbFixer*, Select*); |
| 20209 | SQLITE_PRIVATE int sqlite3FixExpr(DbFixer*, Expr*); |
| 20210 | SQLITE_PRIVATE int sqlite3FixTriggerStep(DbFixer*, TriggerStep*); |
| 20211 | SQLITE_PRIVATE int sqlite3RealSameAsInt(double,sqlite3_int64); |
| 20212 | SQLITE_PRIVATE i64 sqlite3RealToI64(double); |
| 20213 | SQLITE_PRIVATE void sqlite3Int64ToText(i64,char*); |
| 20214 | SQLITE_PRIVATE int sqlite3AtoF(const char *z, double*, int, u8); |
| 20215 | SQLITE_PRIVATE int sqlite3GetInt32(const char *, int*); |
| 20216 | SQLITE_PRIVATE int sqlite3GetUInt32(const char*, u32*); |
| 20217 | SQLITE_PRIVATE int sqlite3Atoi(const char*); |
| @@ -21635,13 +21654,10 @@ | |
| 21654 | "OMIT_WSD", |
| 21655 | #endif |
| 21656 | #ifdef SQLITE_OMIT_XFER_OPT |
| 21657 | "OMIT_XFER_OPT", |
| 21658 | #endif |
| 21659 | #ifdef SQLITE_PERFORMANCE_TRACE |
| 21660 | "PERFORMANCE_TRACE", |
| 21661 | #endif |
| 21662 | #ifdef SQLITE_POWERSAFE_OVERWRITE |
| 21663 | # if SQLITE_POWERSAFE_OVERWRITE != 1 |
| @@ -22590,11 +22606,11 @@ | |
| 22606 | ** The "sqlite3_stmt" structure pointer that is returned by sqlite3_prepare() |
| 22607 | ** is really a pointer to an instance of this structure. |
| 22608 | */ |
| 22609 | struct Vdbe { |
| 22610 | sqlite3 *db; /* The database connection that owns this statement */ |
| 22611 | Vdbe **ppVPrev,*pVNext; /* Linked list of VDBEs with the same Vdbe.db */ |
| 22612 | Parse *pParse; /* Parsing context used to create this Vdbe */ |
| 22613 | ynVar nVar; /* Number of entries in aVar[] */ |
| 22614 | int nMem; /* Number of memory locations currently allocated */ |
| 22615 | int nCursor; /* Number of slots in apCsr[] */ |
| 22616 | u32 cacheCtr; /* VdbeCursor row cache generation counter */ |
| @@ -23148,10 +23164,12 @@ | |
| 23164 | int i; /* Used to iterate through schemas */ |
| 23165 | int nByte = 0; /* Used to accumulate return value */ |
| 23166 | |
| 23167 | sqlite3BtreeEnterAll(db); |
| 23168 | db->pnBytesFreed = &nByte; |
| 23169 | assert( db->lookaside.pEnd==db->lookaside.pTrueEnd ); |
| 23170 | db->lookaside.pEnd = db->lookaside.pStart; |
| 23171 | for(i=0; i<db->nDb; i++){ |
| 23172 | Schema *pSchema = db->aDb[i].pSchema; |
| 23173 | if( ALWAYS(pSchema!=0) ){ |
| 23174 | HashElem *p; |
| 23175 | |
| @@ -23173,10 +23191,11 @@ | |
| 23191 | sqlite3DeleteTable(db, (Table *)sqliteHashData(p)); |
| 23192 | } |
| 23193 | } |
| 23194 | } |
| 23195 | db->pnBytesFreed = 0; |
| 23196 | db->lookaside.pEnd = db->lookaside.pTrueEnd; |
| 23197 | sqlite3BtreeLeaveAll(db); |
| 23198 | |
| 23199 | *pHighwater = 0; |
| 23200 | *pCurrent = nByte; |
| 23201 | break; |
| @@ -23190,13 +23209,16 @@ | |
| 23209 | case SQLITE_DBSTATUS_STMT_USED: { |
| 23210 | struct Vdbe *pVdbe; /* Used to iterate through VMs */ |
| 23211 | int nByte = 0; /* Used to accumulate return value */ |
| 23212 | |
| 23213 | db->pnBytesFreed = &nByte; |
| 23214 | assert( db->lookaside.pEnd==db->lookaside.pTrueEnd ); |
| 23215 | db->lookaside.pEnd = db->lookaside.pStart; |
| 23216 | for(pVdbe=db->pVdbe; pVdbe; pVdbe=pVdbe->pVNext){ |
| 23217 | sqlite3VdbeDelete(pVdbe); |
| 23218 | } |
| 23219 | db->lookaside.pEnd = db->lookaside.pTrueEnd; |
| 23220 | db->pnBytesFreed = 0; |
| 23221 | |
| 23222 | *pHighwater = 0; /* IMP: R-64479-57858 */ |
| 23223 | *pCurrent = nByte; |
| 23224 | |
| @@ -23528,11 +23550,11 @@ | |
| 23550 | X1 = 36525*(Y+4716)/100; |
| 23551 | X2 = 306001*(M+1)/10000; |
| 23552 | p->iJD = (sqlite3_int64)((X1 + X2 + D + B - 1524.5 ) * 86400000); |
| 23553 | p->validJD = 1; |
| 23554 | if( p->validHMS ){ |
| 23555 | p->iJD += p->h*3600000 + p->m*60000 + (sqlite3_int64)(p->s*1000 + 0.5); |
| 23556 | if( p->validTZ ){ |
| 23557 | p->iJD -= p->tz*60000; |
| 23558 | p->validYMD = 0; |
| 23559 | p->validHMS = 0; |
| 23560 | p->validTZ = 0; |
| @@ -24037,11 +24059,11 @@ | |
| 24059 | ** weekday N where 0==Sunday, 1==Monday, and so forth. If the |
| 24060 | ** date is already on the appropriate weekday, this is a no-op. |
| 24061 | */ |
| 24062 | if( sqlite3_strnicmp(z, "weekday ", 8)==0 |
| 24063 | && sqlite3AtoF(&z[8], &r, sqlite3Strlen30(&z[8]), SQLITE_UTF8)>0 |
| 24064 | && r>=0.0 && r<7.0 && (n=(int)r)==r ){ |
| 24065 | sqlite3_int64 Z; |
| 24066 | computeYMD_HMS(p); |
| 24067 | p->validTZ = 0; |
| 24068 | p->validJD = 0; |
| 24069 | computeJD(p); |
| @@ -24835,10 +24857,11 @@ | |
| 24857 | DO_OS_MALLOC_TEST(0); |
| 24858 | /* 0x87f7f is a mask of SQLITE_OPEN_ flags that are valid to be passed |
| 24859 | ** down into the VFS layer. Some SQLITE_OPEN_ flags (for example, |
| 24860 | ** SQLITE_OPEN_FULLMUTEX or SQLITE_OPEN_SHAREDCACHE) are blocked before |
| 24861 | ** reaching the VFS. */ |
| 24862 | assert( zPath || (flags & SQLITE_OPEN_EXCLUSIVE) ); |
| 24863 | rc = pVfs->xOpen(pVfs, zPath, pFile, flags & 0x1087f7f, pFlagsOut); |
| 24864 | assert( rc==SQLITE_OK || pFile->pMethods==0 ); |
| 24865 | return rc; |
| 24866 | } |
| 24867 | SQLITE_PRIVATE int sqlite3OsDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync){ |
| @@ -29100,11 +29123,11 @@ | |
| 29123 | /* |
| 29124 | ** TRUE if p is a lookaside memory allocation from db |
| 29125 | */ |
| 29126 | #ifndef SQLITE_OMIT_LOOKASIDE |
| 29127 | static int isLookaside(sqlite3 *db, const void *p){ |
| 29128 | return SQLITE_WITHIN(p, db->lookaside.pStart, db->lookaside.pTrueEnd); |
| 29129 | } |
| 29130 | #else |
| 29131 | #define isLookaside(A,B) 0 |
| 29132 | #endif |
| 29133 | |
| @@ -29124,22 +29147,20 @@ | |
| 29147 | #endif |
| 29148 | } |
| 29149 | SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3 *db, const void *p){ |
| 29150 | assert( p!=0 ); |
| 29151 | #ifdef SQLITE_DEBUG |
| 29152 | if( db==0 ){ |
| 29153 | assert( sqlite3MemdebugNoType(p, (u8)~MEMTYPE_HEAP) ); |
| 29154 | assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) ); |
| 29155 | }else if( !isLookaside(db,p) ){ |
| 29156 | assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); |
| 29157 | assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); |
| 29158 | } |
| 29159 | #endif |
| 29160 | if( db ){ |
| 29161 | if( ((uptr)p)<(uptr)(db->lookaside.pTrueEnd) ){ |
| 29162 | #ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE |
| 29163 | if( ((uptr)p)>=(uptr)(db->lookaside.pMiddle) ){ |
| 29164 | assert( sqlite3_mutex_held(db->mutex) ); |
| 29165 | return LOOKASIDE_SMALL; |
| 29166 | } |
| @@ -29191,18 +29212,15 @@ | |
| 29212 | */ |
| 29213 | SQLITE_PRIVATE void sqlite3DbFreeNN(sqlite3 *db, void *p){ |
| 29214 | assert( db==0 || sqlite3_mutex_held(db->mutex) ); |
| 29215 | assert( p!=0 ); |
| 29216 | if( db ){ |
| 29217 | if( ((uptr)p)<(uptr)(db->lookaside.pEnd) ){ |
| 29218 | #ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE |
| 29219 | if( ((uptr)p)>=(uptr)(db->lookaside.pMiddle) ){ |
| 29220 | LookasideSlot *pBuf = (LookasideSlot*)p; |
| 29221 | assert( db->pnBytesFreed==0 ); |
| 29222 | #ifdef SQLITE_DEBUG |
| 29223 | memset(p, 0xaa, LOOKASIDE_SMALL); /* Trash freed content */ |
| 29224 | #endif |
| 29225 | pBuf->pNext = db->lookaside.pSmallFree; |
| 29226 | db->lookaside.pSmallFree = pBuf; |
| @@ -29209,24 +29227,66 @@ | |
| 29227 | return; |
| 29228 | } |
| 29229 | #endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */ |
| 29230 | if( ((uptr)p)>=(uptr)(db->lookaside.pStart) ){ |
| 29231 | LookasideSlot *pBuf = (LookasideSlot*)p; |
| 29232 | assert( db->pnBytesFreed==0 ); |
| 29233 | #ifdef SQLITE_DEBUG |
| 29234 | memset(p, 0xaa, db->lookaside.szTrue); /* Trash freed content */ |
| 29235 | #endif |
| 29236 | pBuf->pNext = db->lookaside.pFree; |
| 29237 | db->lookaside.pFree = pBuf; |
| 29238 | return; |
| 29239 | } |
| 29240 | } |
| 29241 | if( db->pnBytesFreed ){ |
| 29242 | measureAllocationSize(db, p); |
| 29243 | return; |
| 29244 | } |
| 29245 | } |
| 29246 | assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); |
| 29247 | assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); |
| 29248 | assert( db!=0 || sqlite3MemdebugNoType(p, MEMTYPE_LOOKASIDE) ); |
| 29249 | sqlite3MemdebugSetType(p, MEMTYPE_HEAP); |
| 29250 | sqlite3_free(p); |
| 29251 | } |
| 29252 | SQLITE_PRIVATE void sqlite3DbNNFreeNN(sqlite3 *db, void *p){ |
| 29253 | assert( db!=0 ); |
| 29254 | assert( sqlite3_mutex_held(db->mutex) ); |
| 29255 | assert( p!=0 ); |
| 29256 | if( ((uptr)p)<(uptr)(db->lookaside.pEnd) ){ |
| 29257 | #ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE |
| 29258 | if( ((uptr)p)>=(uptr)(db->lookaside.pMiddle) ){ |
| 29259 | LookasideSlot *pBuf = (LookasideSlot*)p; |
| 29260 | assert( db->pnBytesFreed==0 ); |
| 29261 | #ifdef SQLITE_DEBUG |
| 29262 | memset(p, 0xaa, LOOKASIDE_SMALL); /* Trash freed content */ |
| 29263 | #endif |
| 29264 | pBuf->pNext = db->lookaside.pSmallFree; |
| 29265 | db->lookaside.pSmallFree = pBuf; |
| 29266 | return; |
| 29267 | } |
| 29268 | #endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */ |
| 29269 | if( ((uptr)p)>=(uptr)(db->lookaside.pStart) ){ |
| 29270 | LookasideSlot *pBuf = (LookasideSlot*)p; |
| 29271 | assert( db->pnBytesFreed==0 ); |
| 29272 | #ifdef SQLITE_DEBUG |
| 29273 | memset(p, 0xaa, db->lookaside.szTrue); /* Trash freed content */ |
| 29274 | #endif |
| 29275 | pBuf->pNext = db->lookaside.pFree; |
| 29276 | db->lookaside.pFree = pBuf; |
| 29277 | return; |
| 29278 | } |
| 29279 | } |
| 29280 | if( db->pnBytesFreed ){ |
| 29281 | measureAllocationSize(db, p); |
| 29282 | return; |
| 29283 | } |
| 29284 | assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); |
| 29285 | assert( sqlite3MemdebugNoType(p, (u8)~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) ); |
| 29286 | sqlite3MemdebugSetType(p, MEMTYPE_HEAP); |
| 29287 | sqlite3_free(p); |
| 29288 | } |
| 29289 | SQLITE_PRIVATE void sqlite3DbFree(sqlite3 *db, void *p){ |
| 29290 | assert( db==0 || sqlite3_mutex_held(db->mutex) ); |
| 29291 | if( p ) sqlite3DbFreeNN(db, p); |
| 29292 | } |
| @@ -29559,12 +29619,17 @@ | |
| 29619 | if( db->nVdbeExec>0 ){ |
| 29620 | AtomicStore(&db->u1.isInterrupted, 1); |
| 29621 | } |
| 29622 | DisableLookaside; |
| 29623 | if( db->pParse ){ |
| 29624 | Parse *pParse; |
| 29625 | sqlite3ErrorMsg(db->pParse, "out of memory"); |
| 29626 | db->pParse->rc = SQLITE_NOMEM_BKPT; |
| 29627 | for(pParse=db->pParse->pOuterParse; pParse; pParse = pParse->pOuterParse){ |
| 29628 | pParse->nErr++; |
| 29629 | pParse->rc = SQLITE_NOMEM; |
| 29630 | } |
| 29631 | } |
| 29632 | } |
| 29633 | return 0; |
| 29634 | } |
| 29635 | |
| @@ -30426,12 +30491,12 @@ | |
| 30491 | } |
| 30492 | break; |
| 30493 | case etSQLESCAPE: /* %q: Escape ' characters */ |
| 30494 | case etSQLESCAPE2: /* %Q: Escape ' and enclose in '...' */ |
| 30495 | case etSQLESCAPE3: { /* %w: Escape " characters */ |
| 30496 | i64 i, j, k, n; |
| 30497 | int needQuote, isnull; |
| 30498 | char ch; |
| 30499 | char q = ((xtype==etSQLESCAPE3)?'"':'\''); /* Quote character */ |
| 30500 | char *escarg; |
| 30501 | |
| 30502 | if( bArgList ){ |
| @@ -31073,11 +31138,11 @@ | |
| 31138 | */ |
| 31139 | SQLITE_PRIVATE void sqlite3TreeViewLine(TreeView *p, const char *zFormat, ...){ |
| 31140 | va_list ap; |
| 31141 | int i; |
| 31142 | StrAccum acc; |
| 31143 | char zBuf[1000]; |
| 31144 | sqlite3StrAccumInit(&acc, 0, zBuf, sizeof(zBuf), 0); |
| 31145 | if( p ){ |
| 31146 | for(i=0; i<p->iLevel && i<(int)sizeof(p->bLine)-1; i++){ |
| 31147 | sqlite3_str_append(&acc, p->bLine[i] ? "| " : " ", 4); |
| 31148 | } |
| @@ -31115,12 +31180,12 @@ | |
| 31180 | int i; |
| 31181 | sqlite3TreeViewPush(&pView, moreToFollow); |
| 31182 | sqlite3TreeViewLine(pView, "COLUMNS"); |
| 31183 | for(i=0; i<nCol; i++){ |
| 31184 | u16 flg = aCol[i].colFlags; |
| 31185 | int colMoreToFollow = i<(nCol - 1); |
| 31186 | sqlite3TreeViewPush(&pView, colMoreToFollow); |
| 31187 | sqlite3TreeViewLine(pView, 0); |
| 31188 | printf(" %s", aCol[i].zCnName); |
| 31189 | switch( aCol[i].eCType ){ |
| 31190 | case COLTYPE_ANY: printf(" ANY"); break; |
| 31191 | case COLTYPE_BLOB: printf(" BLOB"); break; |
| @@ -31204,11 +31269,11 @@ | |
| 31269 | if( pSrc==0 ) return; |
| 31270 | for(i=0; i<pSrc->nSrc; i++){ |
| 31271 | const SrcItem *pItem = &pSrc->a[i]; |
| 31272 | StrAccum x; |
| 31273 | int n = 0; |
| 31274 | char zLine[1000]; |
| 31275 | sqlite3StrAccumInit(&x, 0, zLine, sizeof(zLine), 0); |
| 31276 | x.printfFlags |= SQLITE_PRINTF_INTERNAL; |
| 31277 | sqlite3_str_appendf(&x, "{%d:*} %!S", pItem->iCursor, pItem); |
| 31278 | if( pItem->pTab ){ |
| 31279 | sqlite3_str_appendf(&x, " tab=%Q nCol=%d ptr=%p used=%llx", |
| @@ -31247,11 +31312,11 @@ | |
| 31312 | if( pItem->pSelect ){ |
| 31313 | if( pItem->pTab ){ |
| 31314 | Table *pTab = pItem->pTab; |
| 31315 | sqlite3TreeViewColumnList(pView, pTab->aCol, pTab->nCol, 1); |
| 31316 | } |
| 31317 | assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) ); |
| 31318 | sqlite3TreeViewSelect(pView, pItem->pSelect, (--n)>0); |
| 31319 | } |
| 31320 | if( pItem->fg.isTabFunc ){ |
| 31321 | sqlite3TreeViewExprList(pView, pItem->u1.pFuncArg, 0, "func-args:"); |
| 31322 | } |
| @@ -32014,10 +32079,11 @@ | |
| 32079 | pUpsert = pUpsert->pNextUpsert; |
| 32080 | } |
| 32081 | sqlite3TreeViewPop(&pView); |
| 32082 | } |
| 32083 | |
| 32084 | #if TREETRACE_ENABLED |
| 32085 | /* |
| 32086 | ** Generate a human-readable diagram of the data structure that go |
| 32087 | ** into generating an DELETE statement. |
| 32088 | */ |
| 32089 | SQLITE_PRIVATE void sqlite3TreeViewDelete( |
| @@ -32067,11 +32133,13 @@ | |
| 32133 | if( pTrigger ){ |
| 32134 | sqlite3TreeViewTrigger(pView, pTrigger, (--n)>0, 1); |
| 32135 | } |
| 32136 | sqlite3TreeViewPop(&pView); |
| 32137 | } |
| 32138 | #endif /* TREETRACE_ENABLED */ |
| 32139 | |
| 32140 | #if TREETRACE_ENABLED |
| 32141 | /* |
| 32142 | ** Generate a human-readable diagram of the data structure that go |
| 32143 | ** into generating an INSERT statement. |
| 32144 | */ |
| 32145 | SQLITE_PRIVATE void sqlite3TreeViewInsert( |
| @@ -32135,11 +32203,13 @@ | |
| 32203 | if( pTrigger ){ |
| 32204 | sqlite3TreeViewTrigger(pView, pTrigger, (--n)>0, 1); |
| 32205 | } |
| 32206 | sqlite3TreeViewPop(&pView); |
| 32207 | } |
| 32208 | #endif /* TREETRACE_ENABLED */ |
| 32209 | |
| 32210 | #if TREETRACE_ENABLED |
| 32211 | /* |
| 32212 | ** Generate a human-readable diagram of the data structure that go |
| 32213 | ** into generating an UPDATE statement. |
| 32214 | */ |
| 32215 | SQLITE_PRIVATE void sqlite3TreeViewUpdate( |
| @@ -32211,10 +32281,11 @@ | |
| 32281 | if( pTrigger ){ |
| 32282 | sqlite3TreeViewTrigger(pView, pTrigger, (--n)>0, 1); |
| 32283 | } |
| 32284 | sqlite3TreeViewPop(&pView); |
| 32285 | } |
| 32286 | #endif /* TREETRACE_ENABLED */ |
| 32287 | |
| 32288 | #ifndef SQLITE_OMIT_TRIGGER |
| 32289 | /* |
| 32290 | ** Show a human-readable graph of a TriggerStep |
| 32291 | */ |
| @@ -32324,20 +32395,45 @@ | |
| 32395 | |
| 32396 | /* All threads share a single random number generator. |
| 32397 | ** This structure is the current state of the generator. |
| 32398 | */ |
| 32399 | static SQLITE_WSD struct sqlite3PrngType { |
| 32400 | u32 s[16]; /* 64 bytes of chacha20 state */ |
| 32401 | u8 out[64]; /* Output bytes */ |
| 32402 | u8 n; /* Output bytes remaining */ |
| 32403 | } sqlite3Prng; |
| 32404 | |
| 32405 | |
| 32406 | /* The RFC-7539 ChaCha20 block function |
| 32407 | */ |
| 32408 | #define ROTL(a,b) (((a) << (b)) | ((a) >> (32 - (b)))) |
| 32409 | #define QR(a, b, c, d) ( \ |
| 32410 | a += b, d ^= a, d = ROTL(d,16), \ |
| 32411 | c += d, b ^= c, b = ROTL(b,12), \ |
| 32412 | a += b, d ^= a, d = ROTL(d, 8), \ |
| 32413 | c += d, b ^= c, b = ROTL(b, 7)) |
| 32414 | static void chacha_block(u32 *out, const u32 *in){ |
| 32415 | int i; |
| 32416 | u32 x[16]; |
| 32417 | memcpy(x, in, 64); |
| 32418 | for(i=0; i<10; i++){ |
| 32419 | QR(x[0], x[4], x[ 8], x[12]); |
| 32420 | QR(x[1], x[5], x[ 9], x[13]); |
| 32421 | QR(x[2], x[6], x[10], x[14]); |
| 32422 | QR(x[3], x[7], x[11], x[15]); |
| 32423 | QR(x[0], x[5], x[10], x[15]); |
| 32424 | QR(x[1], x[6], x[11], x[12]); |
| 32425 | QR(x[2], x[7], x[ 8], x[13]); |
| 32426 | QR(x[3], x[4], x[ 9], x[14]); |
| 32427 | } |
| 32428 | for(i=0; i<16; i++) out[i] = x[i]+in[i]; |
| 32429 | } |
| 32430 | |
| 32431 | /* |
| 32432 | ** Return N random bytes. |
| 32433 | */ |
| 32434 | SQLITE_API void sqlite3_randomness(int N, void *pBuf){ |
| 32435 | unsigned char *zBuf = pBuf; |
| 32436 | |
| 32437 | /* The "wsdPrng" macro will resolve to the pseudo-random number generator |
| 32438 | ** state vector. If writable static data is unsupported on the target, |
| 32439 | ** we have to locate the state vector at run-time. In the more common |
| @@ -32363,57 +32459,50 @@ | |
| 32459 | mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_PRNG); |
| 32460 | #endif |
| 32461 | |
| 32462 | sqlite3_mutex_enter(mutex); |
| 32463 | if( N<=0 || pBuf==0 ){ |
| 32464 | wsdPrng.s[0] = 0; |
| 32465 | sqlite3_mutex_leave(mutex); |
| 32466 | return; |
| 32467 | } |
| 32468 | |
| 32469 | /* Initialize the state of the random number generator once, |
| 32470 | ** the first time this routine is called. |
| 32471 | */ |
| 32472 | if( wsdPrng.s[0]==0 ){ |
| 32473 | sqlite3_vfs *pVfs = sqlite3_vfs_find(0); |
| 32474 | static const u32 chacha20_init[] = { |
| 32475 | 0x61707865, 0x3320646e, 0x79622d32, 0x6b206574 |
| 32476 | }; |
| 32477 | memcpy(&wsdPrng.s[0], chacha20_init, 16); |
| 32478 | if( NEVER(pVfs==0) ){ |
| 32479 | memset(&wsdPrng.s[4], 0, 44); |
| 32480 | }else{ |
| 32481 | sqlite3OsRandomness(pVfs, 44, (char*)&wsdPrng.s[4]); |
| 32482 | } |
| 32483 | wsdPrng.s[15] = wsdPrng.s[12]; |
| 32484 | wsdPrng.s[12] = 0; |
| 32485 | wsdPrng.n = 0; |
| 32486 | } |
| 32487 | |
| 32488 | assert( N>0 ); |
| 32489 | while( 1 /* exit by break */ ){ |
| 32490 | if( N<=wsdPrng.n ){ |
| 32491 | memcpy(zBuf, &wsdPrng.out[wsdPrng.n-N], N); |
| 32492 | wsdPrng.n -= N; |
| 32493 | break; |
| 32494 | } |
| 32495 | if( wsdPrng.n>0 ){ |
| 32496 | memcpy(zBuf, wsdPrng.out, wsdPrng.n); |
| 32497 | N -= wsdPrng.n; |
| 32498 | zBuf += wsdPrng.n; |
| 32499 | } |
| 32500 | wsdPrng.s[12]++; |
| 32501 | chacha_block((u32*)wsdPrng.out, wsdPrng.s); |
| 32502 | wsdPrng.n = 64; |
| 32503 | } |
| 32504 | sqlite3_mutex_leave(mutex); |
| 32505 | } |
| 32506 | |
| 32507 | #ifndef SQLITE_UNTESTABLE |
| 32508 | /* |
| @@ -33449,11 +33538,11 @@ | |
| 33538 | SQLITE_PRIVATE void sqlite3ErrorMsg(Parse *pParse, const char *zFormat, ...){ |
| 33539 | char *zMsg; |
| 33540 | va_list ap; |
| 33541 | sqlite3 *db = pParse->db; |
| 33542 | assert( db!=0 ); |
| 33543 | assert( db->pParse==pParse || db->pParse->pToplevel==pParse ); |
| 33544 | db->errByteOffset = -2; |
| 33545 | va_start(ap, zFormat); |
| 33546 | zMsg = sqlite3VMPrintf(db, zFormat, ap); |
| 33547 | va_end(ap); |
| 33548 | if( db->errByteOffset<-1 ) db->errByteOffset = -1; |
| @@ -35267,67 +35356,67 @@ | |
| 35356 | /* 3 */ "Checkpoint" OpHelp(""), |
| 35357 | /* 4 */ "JournalMode" OpHelp(""), |
| 35358 | /* 5 */ "Vacuum" OpHelp(""), |
| 35359 | /* 6 */ "VFilter" OpHelp("iplan=r[P3] zplan='P4'"), |
| 35360 | /* 7 */ "VUpdate" OpHelp("data=r[P3@P2]"), |
| 35361 | /* 8 */ "Init" OpHelp("Start at P2"), |
| 35362 | /* 9 */ "Goto" OpHelp(""), |
| 35363 | /* 10 */ "Gosub" OpHelp(""), |
| 35364 | /* 11 */ "InitCoroutine" OpHelp(""), |
| 35365 | /* 12 */ "Yield" OpHelp(""), |
| 35366 | /* 13 */ "MustBeInt" OpHelp(""), |
| 35367 | /* 14 */ "Jump" OpHelp(""), |
| 35368 | /* 15 */ "Once" OpHelp(""), |
| 35369 | /* 16 */ "If" OpHelp(""), |
| 35370 | /* 17 */ "IfNot" OpHelp(""), |
| 35371 | /* 18 */ "IsNullOrType" OpHelp("if typeof(r[P1]) IN (P3,5) goto P2"), |
| 35372 | /* 19 */ "Not" OpHelp("r[P2]= !r[P1]"), |
| 35373 | /* 20 */ "IfNullRow" OpHelp("if P1.nullRow then r[P3]=NULL, goto P2"), |
| 35374 | /* 21 */ "SeekLT" OpHelp("key=r[P3@P4]"), |
| 35375 | /* 22 */ "SeekLE" OpHelp("key=r[P3@P4]"), |
| 35376 | /* 23 */ "SeekGE" OpHelp("key=r[P3@P4]"), |
| 35377 | /* 24 */ "SeekGT" OpHelp("key=r[P3@P4]"), |
| 35378 | /* 25 */ "IfNotOpen" OpHelp("if( !csr[P1] ) goto P2"), |
| 35379 | /* 26 */ "IfNoHope" OpHelp("key=r[P3@P4]"), |
| 35380 | /* 27 */ "NoConflict" OpHelp("key=r[P3@P4]"), |
| 35381 | /* 28 */ "NotFound" OpHelp("key=r[P3@P4]"), |
| 35382 | /* 29 */ "Found" OpHelp("key=r[P3@P4]"), |
| 35383 | /* 30 */ "SeekRowid" OpHelp("intkey=r[P3]"), |
| 35384 | /* 31 */ "NotExists" OpHelp("intkey=r[P3]"), |
| 35385 | /* 32 */ "Last" OpHelp(""), |
| 35386 | /* 33 */ "IfSmaller" OpHelp(""), |
| 35387 | /* 34 */ "SorterSort" OpHelp(""), |
| 35388 | /* 35 */ "Sort" OpHelp(""), |
| 35389 | /* 36 */ "Rewind" OpHelp(""), |
| 35390 | /* 37 */ "SorterNext" OpHelp(""), |
| 35391 | /* 38 */ "Prev" OpHelp(""), |
| 35392 | /* 39 */ "Next" OpHelp(""), |
| 35393 | /* 40 */ "IdxLE" OpHelp("key=r[P3@P4]"), |
| 35394 | /* 41 */ "IdxGT" OpHelp("key=r[P3@P4]"), |
| 35395 | /* 42 */ "IdxLT" OpHelp("key=r[P3@P4]"), |
| 35396 | /* 43 */ "Or" OpHelp("r[P3]=(r[P1] || r[P2])"), |
| 35397 | /* 44 */ "And" OpHelp("r[P3]=(r[P1] && r[P2])"), |
| 35398 | /* 45 */ "IdxGE" OpHelp("key=r[P3@P4]"), |
| 35399 | /* 46 */ "RowSetRead" OpHelp("r[P3]=rowset(P1)"), |
| 35400 | /* 47 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"), |
| 35401 | /* 48 */ "Program" OpHelp(""), |
| 35402 | /* 49 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"), |
| 35403 | /* 50 */ "IsNull" OpHelp("if r[P1]==NULL goto P2"), |
| 35404 | /* 51 */ "NotNull" OpHelp("if r[P1]!=NULL goto P2"), |
| 35405 | /* 52 */ "Ne" OpHelp("IF r[P3]!=r[P1]"), |
| 35406 | /* 53 */ "Eq" OpHelp("IF r[P3]==r[P1]"), |
| 35407 | /* 54 */ "Gt" OpHelp("IF r[P3]>r[P1]"), |
| 35408 | /* 55 */ "Le" OpHelp("IF r[P3]<=r[P1]"), |
| 35409 | /* 56 */ "Lt" OpHelp("IF r[P3]<r[P1]"), |
| 35410 | /* 57 */ "Ge" OpHelp("IF r[P3]>=r[P1]"), |
| 35411 | /* 58 */ "ElseEq" OpHelp(""), |
| 35412 | /* 59 */ "IfPos" OpHelp("if r[P1]>0 then r[P1]-=P3, goto P2"), |
| 35413 | /* 60 */ "IfNotZero" OpHelp("if r[P1]!=0 then r[P1]--, goto P2"), |
| 35414 | /* 61 */ "DecrJumpZero" OpHelp("if (--r[P1])==0 goto P2"), |
| 35415 | /* 62 */ "IncrVacuum" OpHelp(""), |
| 35416 | /* 63 */ "VNext" OpHelp(""), |
| 35417 | /* 64 */ "Filter" OpHelp("if key(P3@P4) not in filter(P1) goto P2"), |
| 35418 | /* 65 */ "PureFunc" OpHelp("r[P3]=func(r[P2@NP])"), |
| 35419 | /* 66 */ "Function" OpHelp("r[P3]=func(r[P2@NP])"), |
| 35420 | /* 67 */ "Return" OpHelp(""), |
| 35421 | /* 68 */ "EndCoroutine" OpHelp(""), |
| 35422 | /* 69 */ "HaltIfNull" OpHelp("if r[P3]=null halt"), |
| @@ -41310,30 +41399,39 @@ | |
| 41399 | ** pVfs->mxPathname bytes. |
| 41400 | */ |
| 41401 | static int unixGetTempname(int nBuf, char *zBuf){ |
| 41402 | const char *zDir; |
| 41403 | int iLimit = 0; |
| 41404 | int rc = SQLITE_OK; |
| 41405 | |
| 41406 | /* It's odd to simulate an io-error here, but really this is just |
| 41407 | ** using the io-error infrastructure to test that SQLite handles this |
| 41408 | ** function failing. |
| 41409 | */ |
| 41410 | zBuf[0] = 0; |
| 41411 | SimulateIOError( return SQLITE_IOERR ); |
| 41412 | |
| 41413 | sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); |
| 41414 | zDir = unixTempFileDir(); |
| 41415 | if( zDir==0 ){ |
| 41416 | rc = SQLITE_IOERR_GETTEMPPATH; |
| 41417 | }else{ |
| 41418 | do{ |
| 41419 | u64 r; |
| 41420 | sqlite3_randomness(sizeof(r), &r); |
| 41421 | assert( nBuf>2 ); |
| 41422 | zBuf[nBuf-2] = 0; |
| 41423 | sqlite3_snprintf(nBuf, zBuf, "%s/"SQLITE_TEMP_FILE_PREFIX"%llx%c", |
| 41424 | zDir, r, 0); |
| 41425 | if( zBuf[nBuf-2]!=0 || (iLimit++)>10 ){ |
| 41426 | rc = SQLITE_ERROR; |
| 41427 | break; |
| 41428 | } |
| 41429 | }while( osAccess(zBuf,0)==0 ); |
| 41430 | } |
| 41431 | sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); |
| 41432 | return rc; |
| 41433 | } |
| 41434 | |
| 41435 | #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__) |
| 41436 | /* |
| 41437 | ** Routine to transform a unixFile into a proxy-locking unixFile. |
| @@ -43504,11 +43602,16 @@ | |
| 43602 | ** correctly. See ticket [bb3a86e890c8e96ab] */ |
| 43603 | assert( ArraySize(aSyscall)==29 ); |
| 43604 | |
| 43605 | /* Register all VFSes defined in the aVfs[] array */ |
| 43606 | for(i=0; i<(sizeof(aVfs)/sizeof(sqlite3_vfs)); i++){ |
| 43607 | #ifdef SQLITE_DEFAULT_UNIX_VFS |
| 43608 | sqlite3_vfs_register(&aVfs[i], |
| 43609 | 0==strcmp(aVfs[i].zName,SQLITE_DEFAULT_UNIX_VFS)); |
| 43610 | #else |
| 43611 | sqlite3_vfs_register(&aVfs[i], i==0); |
| 43612 | #endif |
| 43613 | } |
| 43614 | unixBigLock = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1); |
| 43615 | |
| 43616 | #ifndef SQLITE_OMIT_WAL |
| 43617 | /* Validate lock assumptions */ |
| @@ -45472,10 +45575,11 @@ | |
| 45575 | char **ppDirectory = 0; |
| 45576 | #ifndef SQLITE_OMIT_AUTOINIT |
| 45577 | int rc = sqlite3_initialize(); |
| 45578 | if( rc ) return rc; |
| 45579 | #endif |
| 45580 | sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); |
| 45581 | if( type==SQLITE_WIN32_DATA_DIRECTORY_TYPE ){ |
| 45582 | ppDirectory = &sqlite3_data_directory; |
| 45583 | }else if( type==SQLITE_WIN32_TEMP_DIRECTORY_TYPE ){ |
| 45584 | ppDirectory = &sqlite3_temp_directory; |
| 45585 | } |
| @@ -45486,18 +45590,23 @@ | |
| 45590 | if( ppDirectory ){ |
| 45591 | char *zCopy = 0; |
| 45592 | if( zValue && zValue[0] ){ |
| 45593 | zCopy = sqlite3_mprintf("%s", zValue); |
| 45594 | if ( zCopy==0 ){ |
| 45595 | rc = SQLITE_NOMEM_BKPT; |
| 45596 | goto set_directory8_done; |
| 45597 | } |
| 45598 | } |
| 45599 | sqlite3_free(*ppDirectory); |
| 45600 | *ppDirectory = zCopy; |
| 45601 | rc = SQLITE_OK; |
| 45602 | }else{ |
| 45603 | rc = SQLITE_ERROR; |
| 45604 | } |
| 45605 | set_directory8_done: |
| 45606 | sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); |
| 45607 | return rc; |
| 45608 | } |
| 45609 | |
| 45610 | /* |
| 45611 | ** This function is the same as sqlite3_win32_set_directory (below); however, |
| 45612 | ** it accepts a UTF-16 string. |
| @@ -48266,10 +48375,22 @@ | |
| 48375 | } |
| 48376 | } |
| 48377 | } |
| 48378 | return 0; |
| 48379 | } |
| 48380 | |
| 48381 | /* |
| 48382 | ** If sqlite3_temp_directory is not, take the mutex and return true. |
| 48383 | ** |
| 48384 | ** If sqlite3_temp_directory is NULL, omit the mutex and return false. |
| 48385 | */ |
| 48386 | static int winTempDirDefined(void){ |
| 48387 | sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); |
| 48388 | if( sqlite3_temp_directory!=0 ) return 1; |
| 48389 | sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); |
| 48390 | return 0; |
| 48391 | } |
| 48392 | |
| 48393 | /* |
| 48394 | ** Create a temporary file name and store the resulting pointer into pzBuf. |
| 48395 | ** The pointer returned in pzBuf must be freed via sqlite3_free(). |
| 48396 | */ |
| @@ -48303,24 +48424,27 @@ | |
| 48424 | ** has been explicitly set by the application; otherwise, use the one |
| 48425 | ** configured by the operating system. |
| 48426 | */ |
| 48427 | nDir = nMax - (nPre + 15); |
| 48428 | assert( nDir>0 ); |
| 48429 | if( winTempDirDefined() ){ |
| 48430 | int nDirLen = sqlite3Strlen30(sqlite3_temp_directory); |
| 48431 | if( nDirLen>0 ){ |
| 48432 | if( !winIsDirSep(sqlite3_temp_directory[nDirLen-1]) ){ |
| 48433 | nDirLen++; |
| 48434 | } |
| 48435 | if( nDirLen>nDir ){ |
| 48436 | sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); |
| 48437 | sqlite3_free(zBuf); |
| 48438 | OSTRACE(("TEMP-FILENAME rc=SQLITE_ERROR\n")); |
| 48439 | return winLogError(SQLITE_ERROR, 0, "winGetTempname1", 0); |
| 48440 | } |
| 48441 | sqlite3_snprintf(nMax, zBuf, "%s", sqlite3_temp_directory); |
| 48442 | } |
| 48443 | sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); |
| 48444 | } |
| 48445 | |
| 48446 | #if defined(__CYGWIN__) |
| 48447 | else{ |
| 48448 | static const char *azDirs[] = { |
| 48449 | 0, /* getenv("SQLITE_TMPDIR") */ |
| 48450 | 0, /* getenv("TMPDIR") */ |
| @@ -49105,11 +49229,11 @@ | |
| 49229 | /* |
| 49230 | ** Turn a relative pathname into a full pathname. Write the full |
| 49231 | ** pathname into zOut[]. zOut[] will be at least pVfs->mxPathname |
| 49232 | ** bytes in size. |
| 49233 | */ |
| 49234 | static int winFullPathnameNoMutex( |
| 49235 | sqlite3_vfs *pVfs, /* Pointer to vfs object */ |
| 49236 | const char *zRelative, /* Possibly relative input path */ |
| 49237 | int nFull, /* Size of output buffer in bytes */ |
| 49238 | char *zFull /* Output buffer */ |
| 49239 | ){ |
| @@ -49283,10 +49407,23 @@ | |
| 49407 | return SQLITE_OK; |
| 49408 | }else{ |
| 49409 | return SQLITE_IOERR_NOMEM_BKPT; |
| 49410 | } |
| 49411 | #endif |
| 49412 | } |
| 49413 | static int winFullPathname( |
| 49414 | sqlite3_vfs *pVfs, /* Pointer to vfs object */ |
| 49415 | const char *zRelative, /* Possibly relative input path */ |
| 49416 | int nFull, /* Size of output buffer in bytes */ |
| 49417 | char *zFull /* Output buffer */ |
| 49418 | ){ |
| 49419 | int rc; |
| 49420 | sqlite3_mutex *pMutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR); |
| 49421 | sqlite3_mutex_enter(pMutex); |
| 49422 | rc = winFullPathnameNoMutex(pVfs, zRelative, nFull, zFull); |
| 49423 | sqlite3_mutex_leave(pMutex); |
| 49424 | return rc; |
| 49425 | } |
| 49426 | |
| 49427 | #ifndef SQLITE_OMIT_LOAD_EXTENSION |
| 49428 | /* |
| 49429 | ** Interfaces for opening a shared library, finding entry points |
| @@ -51072,39 +51209,58 @@ | |
| 51209 | */ |
| 51210 | #if defined(SQLITE_DEBUG) && 0 |
| 51211 | int sqlite3PcacheTrace = 2; /* 0: off 1: simple 2: cache dumps */ |
| 51212 | int sqlite3PcacheMxDump = 9999; /* Max cache entries for pcacheDump() */ |
| 51213 | # define pcacheTrace(X) if(sqlite3PcacheTrace){sqlite3DebugPrintf X;} |
| 51214 | static void pcachePageTrace(int i, sqlite3_pcache_page *pLower){ |
| 51215 | PgHdr *pPg; |
| 51216 | unsigned char *a; |
| 51217 | int j; |
| 51218 | pPg = (PgHdr*)pLower->pExtra; |
| 51219 | printf("%3d: nRef %2d flgs %02x data ", i, pPg->nRef, pPg->flags); |
| 51220 | a = (unsigned char *)pLower->pBuf; |
| 51221 | for(j=0; j<12; j++) printf("%02x", a[j]); |
| 51222 | printf(" ptr %p\n", pPg); |
| 51223 | } |
| 51224 | static void pcacheDump(PCache *pCache){ |
| 51225 | int N; |
| 51226 | int i; |
| 51227 | sqlite3_pcache_page *pLower; |
| 51228 | |
| 51229 | if( sqlite3PcacheTrace<2 ) return; |
| 51230 | if( pCache->pCache==0 ) return; |
| 51231 | N = sqlite3PcachePagecount(pCache); |
| 51232 | if( N>sqlite3PcacheMxDump ) N = sqlite3PcacheMxDump; |
| 51233 | for(i=1; i<=N; i++){ |
| 51234 | pLower = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, i, 0); |
| 51235 | if( pLower==0 ) continue; |
| 51236 | pcachePageTrace(i, pLower); |
| 51237 | if( ((PgHdr*)pLower)->pPage==0 ){ |
| 51238 | sqlite3GlobalConfig.pcache2.xUnpin(pCache->pCache, pLower, 0); |
| 51239 | } |
| 51240 | } |
| 51241 | } |
| 51242 | #else |
| 51243 | # define pcacheTrace(X) |
| 51244 | # define pcachePageTrace(PGNO, X) |
| 51245 | # define pcacheDump(X) |
| 51246 | #endif |
| 51247 | |
| 51248 | /* |
| 51249 | ** Return 1 if pPg is on the dirty list for pCache. Return 0 if not. |
| 51250 | ** This routine runs inside of assert() statements only. |
| 51251 | */ |
| 51252 | #ifdef SQLITE_DEBUG |
| 51253 | static int pageOnDirtyList(PCache *pCache, PgHdr *pPg){ |
| 51254 | PgHdr *p; |
| 51255 | for(p=pCache->pDirty; p; p=p->pDirtyNext){ |
| 51256 | if( p==pPg ) return 1; |
| 51257 | } |
| 51258 | return 0; |
| 51259 | } |
| 51260 | #endif |
| 51261 | |
| 51262 | /* |
| 51263 | ** Check invariants on a PgHdr entry. Return true if everything is OK. |
| 51264 | ** Return false if any invariant is violated. |
| 51265 | ** |
| 51266 | ** This routine is for use inside of assert() statements only. For |
| @@ -51119,12 +51275,17 @@ | |
| 51275 | assert( pPg->pgno>0 || pPg->pPager==0 ); /* Page number is 1 or more */ |
| 51276 | pCache = pPg->pCache; |
| 51277 | assert( pCache!=0 ); /* Every page has an associated PCache */ |
| 51278 | if( pPg->flags & PGHDR_CLEAN ){ |
| 51279 | assert( (pPg->flags & PGHDR_DIRTY)==0 );/* Cannot be both CLEAN and DIRTY */ |
| 51280 | assert( !pageOnDirtyList(pCache, pPg) );/* CLEAN pages not on dirty list */ |
| 51281 | }else{ |
| 51282 | assert( (pPg->flags & PGHDR_DIRTY)!=0 );/* If not CLEAN must be DIRTY */ |
| 51283 | assert( pPg->pDirtyNext==0 || pPg->pDirtyNext->pDirtyPrev==pPg ); |
| 51284 | assert( pPg->pDirtyPrev==0 || pPg->pDirtyPrev->pDirtyNext==pPg ); |
| 51285 | assert( pPg->pDirtyPrev!=0 || pCache->pDirty==pPg ); |
| 51286 | assert( pageOnDirtyList(pCache, pPg) ); |
| 51287 | } |
| 51288 | /* WRITEABLE pages must also be DIRTY */ |
| 51289 | if( pPg->flags & PGHDR_WRITEABLE ){ |
| 51290 | assert( pPg->flags & PGHDR_DIRTY ); /* WRITEABLE implies DIRTY */ |
| 51291 | } |
| @@ -51394,12 +51555,13 @@ | |
| 51555 | eCreate = createFlag & pCache->eCreate; |
| 51556 | assert( eCreate==0 || eCreate==1 || eCreate==2 ); |
| 51557 | assert( createFlag==0 || pCache->eCreate==eCreate ); |
| 51558 | assert( createFlag==0 || eCreate==1+(!pCache->bPurgeable||!pCache->pDirty) ); |
| 51559 | pRes = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, pgno, eCreate); |
| 51560 | pcacheTrace(("%p.FETCH %d%s (result: %p) ",pCache,pgno, |
| 51561 | createFlag?" create":"",pRes)); |
| 51562 | pcachePageTrace(pgno, pRes); |
| 51563 | return pRes; |
| 51564 | } |
| 51565 | |
| 51566 | /* |
| 51567 | ** If the sqlite3PcacheFetch() routine is unable to allocate a new |
| @@ -51523,10 +51685,11 @@ | |
| 51685 | if( (--p->nRef)==0 ){ |
| 51686 | if( p->flags&PGHDR_CLEAN ){ |
| 51687 | pcacheUnpin(p); |
| 51688 | }else{ |
| 51689 | pcacheManageDirtyList(p, PCACHE_DIRTYLIST_FRONT); |
| 51690 | assert( sqlite3PcachePageSanity(p) ); |
| 51691 | } |
| 51692 | } |
| 51693 | } |
| 51694 | |
| 51695 | /* |
| @@ -51566,10 +51729,11 @@ | |
| 51729 | if( p->flags & PGHDR_CLEAN ){ |
| 51730 | p->flags ^= (PGHDR_DIRTY|PGHDR_CLEAN); |
| 51731 | pcacheTrace(("%p.DIRTY %d\n",p->pCache,p->pgno)); |
| 51732 | assert( (p->flags & (PGHDR_DIRTY|PGHDR_CLEAN))==PGHDR_DIRTY ); |
| 51733 | pcacheManageDirtyList(p, PCACHE_DIRTYLIST_ADD); |
| 51734 | assert( sqlite3PcachePageSanity(p) ); |
| 51735 | } |
| 51736 | assert( sqlite3PcachePageSanity(p) ); |
| 51737 | } |
| 51738 | } |
| 51739 | |
| @@ -51628,18 +51792,28 @@ | |
| 51792 | /* |
| 51793 | ** Change the page number of page p to newPgno. |
| 51794 | */ |
| 51795 | SQLITE_PRIVATE void sqlite3PcacheMove(PgHdr *p, Pgno newPgno){ |
| 51796 | PCache *pCache = p->pCache; |
| 51797 | sqlite3_pcache_page *pOther; |
| 51798 | assert( p->nRef>0 ); |
| 51799 | assert( newPgno>0 ); |
| 51800 | assert( sqlite3PcachePageSanity(p) ); |
| 51801 | pcacheTrace(("%p.MOVE %d -> %d\n",pCache,p->pgno,newPgno)); |
| 51802 | pOther = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, newPgno, 0); |
| 51803 | sqlite3GlobalConfig.pcache2.xRekey(pCache->pCache, p->pPage, p->pgno,newPgno); |
| 51804 | if( pOther ){ |
| 51805 | PgHdr *pPg = (PgHdr*)pOther->pExtra; |
| 51806 | pPg->pgno = p->pgno; |
| 51807 | if( pPg->pPage==0 ){ |
| 51808 | sqlite3GlobalConfig.pcache2.xUnpin(pCache->pCache, pOther, 0); |
| 51809 | } |
| 51810 | } |
| 51811 | p->pgno = newPgno; |
| 51812 | if( (p->flags&PGHDR_DIRTY) && (p->flags&PGHDR_NEED_SYNC) ){ |
| 51813 | pcacheManageDirtyList(p, PCACHE_DIRTYLIST_FRONT); |
| 51814 | assert( sqlite3PcachePageSanity(p) ); |
| 51815 | } |
| 51816 | } |
| 51817 | |
| 51818 | /* |
| 51819 | ** Drop every cache entry whose page number is greater than "pgno". The |
| @@ -51933,16 +52107,17 @@ | |
| 52107 | ** runtime using sqlite3_config(SQLITE_CONFIG_PCACHE_HDRSZ, &size). The |
| 52108 | ** sizes of the extensions sum to 272 bytes on x64 for 3.8.10, but this |
| 52109 | ** size can vary according to architecture, compile-time options, and |
| 52110 | ** SQLite library version number. |
| 52111 | ** |
| 52112 | ** Historical note: It used to be that if the SQLITE_PCACHE_SEPARATE_HEADER |
| 52113 | ** was defined, then the page content would be held in a separate memory |
| 52114 | ** allocation from the PgHdr1. This was intended to avoid clownshoe memory |
| 52115 | ** allocations. However, the btree layer needs a small (16-byte) overrun |
| 52116 | ** area after the page content buffer. The header serves as that overrun |
| 52117 | ** area. Therefore SQLITE_PCACHE_SEPARATE_HEADER was discontinued to avoid |
| 52118 | ** any possibility of a memory error. |
| 52119 | ** |
| 52120 | ** This module tracks pointers to PgHdr1 objects. Only pcache.c communicates |
| 52121 | ** with this module. Information is passed back and forth as PgHdr1 pointers. |
| 52122 | ** |
| 52123 | ** The pcache.c and pager.c modules deal pointers to PgHdr objects. |
| @@ -51983,34 +52158,44 @@ | |
| 52158 | typedef struct PgFreeslot PgFreeslot; |
| 52159 | typedef struct PGroup PGroup; |
| 52160 | |
| 52161 | /* |
| 52162 | ** Each cache entry is represented by an instance of the following |
| 52163 | ** structure. A buffer of PgHdr1.pCache->szPage bytes is allocated |
| 52164 | ** directly before this structure and is used to cache the page content. |
| 52165 | ** |
| 52166 | ** When reading a corrupt database file, it is possible that SQLite might |
| 52167 | ** read a few bytes (no more than 16 bytes) past the end of the page buffer. |
| 52168 | ** It will only read past the end of the page buffer, never write. This |
| 52169 | ** object is positioned immediately after the page buffer to serve as an |
| 52170 | ** overrun area, so that overreads are harmless. |
| 52171 | ** |
| 52172 | ** Variables isBulkLocal and isAnchor were once type "u8". That works, |
| 52173 | ** but causes a 2-byte gap in the structure for most architectures (since |
| 52174 | ** pointers must be either 4 or 8-byte aligned). As this structure is located |
| 52175 | ** in memory directly after the associated page data, if the database is |
| 52176 | ** corrupt, code at the b-tree layer may overread the page buffer and |
| 52177 | ** read part of this structure before the corruption is detected. This |
| 52178 | ** can cause a valgrind error if the unitialized gap is accessed. Using u16 |
| 52179 | ** ensures there is no such gap, and therefore no bytes of uninitialized |
| 52180 | ** memory in the structure. |
| 52181 | ** |
| 52182 | ** The pLruNext and pLruPrev pointers form a double-linked circular list |
| 52183 | ** of all pages that are unpinned. The PGroup.lru element (which should be |
| 52184 | ** the only element on the list with PgHdr1.isAnchor set to 1) forms the |
| 52185 | ** beginning and the end of the list. |
| 52186 | */ |
| 52187 | struct PgHdr1 { |
| 52188 | sqlite3_pcache_page page; /* Base class. Must be first. pBuf & pExtra */ |
| 52189 | unsigned int iKey; /* Key value (page number) */ |
| 52190 | u16 isBulkLocal; /* This page from bulk local storage */ |
| 52191 | u16 isAnchor; /* This is the PGroup.lru element */ |
| 52192 | PgHdr1 *pNext; /* Next in hash table chain */ |
| 52193 | PCache1 *pCache; /* Cache that currently owns this page */ |
| 52194 | PgHdr1 *pLruNext; /* Next in circular LRU list of unpinned pages */ |
| 52195 | PgHdr1 *pLruPrev; /* Previous in LRU list of unpinned pages */ |
| 52196 | /* NB: pLruPrev is only valid if pLruNext!=0 */ |
| 52197 | }; |
| 52198 | |
| 52199 | /* |
| 52200 | ** A page is pinned if it is not on the LRU list. To be "pinned" means |
| 52201 | ** that the page is in active use and must not be deallocated. |
| @@ -52332,29 +52517,17 @@ | |
| 52517 | assert( pcache1.separateCache==0 ); |
| 52518 | assert( pCache->pGroup==&pcache1.grp ); |
| 52519 | pcache1LeaveMutex(pCache->pGroup); |
| 52520 | #endif |
| 52521 | if( benignMalloc ){ sqlite3BeginBenignMalloc(); } |
| 52522 | pPg = pcache1Alloc(pCache->szAlloc); |
| 52523 | if( benignMalloc ){ sqlite3EndBenignMalloc(); } |
| 52524 | #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT |
| 52525 | pcache1EnterMutex(pCache->pGroup); |
| 52526 | #endif |
| 52527 | if( pPg==0 ) return 0; |
| 52528 | p = (PgHdr1 *)&((u8 *)pPg)[pCache->szPage]; |
| 52529 | p->page.pBuf = pPg; |
| 52530 | p->page.pExtra = &p[1]; |
| 52531 | p->isBulkLocal = 0; |
| 52532 | p->isAnchor = 0; |
| 52533 | p->pLruPrev = 0; /* Initializing this saves a valgrind error */ |
| @@ -52374,13 +52547,10 @@ | |
| 52547 | if( p->isBulkLocal ){ |
| 52548 | p->pNext = pCache->pFree; |
| 52549 | pCache->pFree = p; |
| 52550 | }else{ |
| 52551 | pcache1Free(p->page.pBuf); |
| 52552 | } |
| 52553 | (*pCache->pnPurgeable)--; |
| 52554 | } |
| 52555 | |
| 52556 | /* |
| @@ -53017,27 +53187,45 @@ | |
| 53187 | unsigned int iNew |
| 53188 | ){ |
| 53189 | PCache1 *pCache = (PCache1 *)p; |
| 53190 | PgHdr1 *pPage = (PgHdr1 *)pPg; |
| 53191 | PgHdr1 **pp; |
| 53192 | unsigned int hOld, hNew; |
| 53193 | assert( pPage->iKey==iOld ); |
| 53194 | assert( pPage->pCache==pCache ); |
| 53195 | assert( iOld!=iNew ); /* The page number really is changing */ |
| 53196 | |
| 53197 | pcache1EnterMutex(pCache->pGroup); |
| 53198 | |
| 53199 | assert( pcache1FetchNoMutex(p, iOld, 0)==pPage ); /* pPg really is iOld */ |
| 53200 | hOld = iOld%pCache->nHash; |
| 53201 | pp = &pCache->apHash[hOld]; |
| 53202 | while( (*pp)!=pPage ){ |
| 53203 | pp = &(*pp)->pNext; |
| 53204 | } |
| 53205 | *pp = pPage->pNext; |
| 53206 | |
| 53207 | hNew = iNew%pCache->nHash; |
| 53208 | pp = &pCache->apHash[hNew]; |
| 53209 | while( *pp ){ |
| 53210 | if( (*pp)->iKey==iNew ){ |
| 53211 | /* If there is already another pcache entry at iNew, change it to iOld, |
| 53212 | ** thus swapping the positions of iNew and iOld */ |
| 53213 | PgHdr1 *pOld = *pp; |
| 53214 | *pp = pOld->pNext; |
| 53215 | pOld->pNext = pCache->apHash[hOld]; |
| 53216 | pCache->apHash[hOld] = pOld; |
| 53217 | pOld->iKey = iOld; |
| 53218 | break; |
| 53219 | }else{ |
| 53220 | pp = &(*pp)->pNext; |
| 53221 | } |
| 53222 | } |
| 53223 | |
| 53224 | pPage->iKey = iNew; |
| 53225 | pPage->pNext = pCache->apHash[hNew]; |
| 53226 | pCache->apHash[hNew] = pPage; |
| 53227 | if( iNew>pCache->iMaxKey ){ |
| 53228 | pCache->iMaxKey = iNew; |
| 53229 | } |
| 53230 | |
| 53231 | pcache1LeaveMutex(pCache->pGroup); |
| @@ -53140,13 +53328,10 @@ | |
| 53328 | while( (nReq<0 || nFree<nReq) |
| 53329 | && (p=pcache1.grp.lru.pLruPrev)!=0 |
| 53330 | && p->isAnchor==0 |
| 53331 | ){ |
| 53332 | nFree += pcache1MemSize(p->page.pBuf); |
| 53333 | assert( PAGE_IS_UNPINNED(p) ); |
| 53334 | pcache1PinPage(p); |
| 53335 | pcache1RemoveFromHash(p, 1); |
| 53336 | } |
| 53337 | pcache1LeaveMutex(&pcache1.grp); |
| @@ -59631,10 +59816,11 @@ | |
| 59816 | int flags = SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE; |
| 59817 | int nSpill; |
| 59818 | |
| 59819 | if( pPager->tempFile ){ |
| 59820 | flags |= (SQLITE_OPEN_DELETEONCLOSE|SQLITE_OPEN_TEMP_JOURNAL); |
| 59821 | flags |= SQLITE_OPEN_EXCLUSIVE; |
| 59822 | nSpill = sqlite3Config.nStmtSpill; |
| 59823 | }else{ |
| 59824 | flags |= SQLITE_OPEN_MAIN_JOURNAL; |
| 59825 | nSpill = jrnlBufferSize(pPager); |
| 59826 | } |
| @@ -59666,10 +59852,11 @@ | |
| 59852 | } |
| 59853 | |
| 59854 | if( rc!=SQLITE_OK ){ |
| 59855 | sqlite3BitvecDestroy(pPager->pInJournal); |
| 59856 | pPager->pInJournal = 0; |
| 59857 | pPager->journalOff = 0; |
| 59858 | }else{ |
| 59859 | assert( pPager->eState==PAGER_WRITER_LOCKED ); |
| 59860 | pPager->eState = PAGER_WRITER_CACHEMOD; |
| 59861 | } |
| 59862 | |
| @@ -66729,10 +66916,11 @@ | |
| 66916 | ** db using sqlite3SchemaToIndex(). |
| 66917 | */ |
| 66918 | SQLITE_PRIVATE int sqlite3SchemaMutexHeld(sqlite3 *db, int iDb, Schema *pSchema){ |
| 66919 | Btree *p; |
| 66920 | assert( db!=0 ); |
| 66921 | if( db->pVfs==0 && db->nDb==0 ) return 1; |
| 66922 | if( pSchema ) iDb = sqlite3SchemaToIndex(db, pSchema); |
| 66923 | assert( iDb>=0 && iDb<db->nDb ); |
| 66924 | if( !sqlite3_mutex_held(db->mutex) ) return 0; |
| 66925 | if( iDb==1 ) return 1; |
| 66926 | p = db->aDb[iDb].pBt; |
| @@ -68301,12 +68489,11 @@ | |
| 68489 | assert( sqlite3PagerIswriteable(pPage->pDbPage) ); |
| 68490 | assert( pPage->pBt!=0 ); |
| 68491 | assert( pPage->pBt->usableSize <= SQLITE_MAX_PAGE_SIZE ); |
| 68492 | assert( pPage->nOverflow==0 ); |
| 68493 | assert( sqlite3_mutex_held(pPage->pBt->mutex) ); |
| 68494 | data = pPage->aData; |
| 68495 | hdr = pPage->hdrOffset; |
| 68496 | cellOffset = pPage->cellOffset; |
| 68497 | nCell = pPage->nCell; |
| 68498 | assert( nCell==get2byte(&data[hdr+3]) || CORRUPT_DB ); |
| 68499 | iCellFirst = cellOffset + 2*nCell; |
| @@ -68356,43 +68543,42 @@ | |
| 68543 | } |
| 68544 | |
| 68545 | cbrk = usableSize; |
| 68546 | iCellLast = usableSize - 4; |
| 68547 | iCellStart = get2byte(&data[hdr+5]); |
| 68548 | if( nCell>0 ){ |
| 68549 | temp = sqlite3PagerTempSpace(pPage->pBt->pPager); |
| 68550 | memcpy(&temp[iCellStart], &data[iCellStart], usableSize - iCellStart); |
| 68551 | src = temp; |
| 68552 | for(i=0; i<nCell; i++){ |
| 68553 | u8 *pAddr; /* The i-th cell pointer */ |
| 68554 | pAddr = &data[cellOffset + i*2]; |
| 68555 | pc = get2byte(pAddr); |
| 68556 | testcase( pc==iCellFirst ); |
| 68557 | testcase( pc==iCellLast ); |
| 68558 | /* These conditions have already been verified in btreeInitPage() |
| 68559 | ** if PRAGMA cell_size_check=ON. |
| 68560 | */ |
| 68561 | if( pc<iCellStart || pc>iCellLast ){ |
| 68562 | return SQLITE_CORRUPT_PAGE(pPage); |
| 68563 | } |
| 68564 | assert( pc>=iCellStart && pc<=iCellLast ); |
| 68565 | size = pPage->xCellSize(pPage, &src[pc]); |
| 68566 | cbrk -= size; |
| 68567 | if( cbrk<iCellStart || pc+size>usableSize ){ |
| 68568 | return SQLITE_CORRUPT_PAGE(pPage); |
| 68569 | } |
| 68570 | assert( cbrk+size<=usableSize && cbrk>=iCellStart ); |
| 68571 | testcase( cbrk+size==usableSize ); |
| 68572 | testcase( pc+size==usableSize ); |
| 68573 | put2byte(pAddr, cbrk); |
| 68574 | memcpy(&data[cbrk], &src[pc], size); |
| 68575 | } |
| 68576 | } |
| 68577 | data[hdr+7] = 0; |
| 68578 | |
| 68579 | defragment_out: |
| 68580 | assert( pPage->nFree>=0 ); |
| 68581 | if( data[hdr+7]+cbrk-iCellFirst!=pPage->nFree ){ |
| 68582 | return SQLITE_CORRUPT_PAGE(pPage); |
| 68583 | } |
| 68584 | assert( cbrk>=iCellFirst ); |
| @@ -68461,13 +68647,13 @@ | |
| 68647 | return &aData[pc + x]; |
| 68648 | } |
| 68649 | iAddr = pc; |
| 68650 | pTmp = &aData[pc]; |
| 68651 | pc = get2byte(pTmp); |
| 68652 | if( pc<=iAddr ){ |
| 68653 | if( pc ){ |
| 68654 | /* The next slot in the chain comes before the current slot */ |
| 68655 | *pRc = SQLITE_CORRUPT_PAGE(pPg); |
| 68656 | } |
| 68657 | return 0; |
| 68658 | } |
| 68659 | } |
| @@ -68615,11 +68801,11 @@ | |
| 68801 | iPtr = hdr + 1; |
| 68802 | if( data[iPtr+1]==0 && data[iPtr]==0 ){ |
| 68803 | iFreeBlk = 0; /* Shortcut for the case when the freelist is empty */ |
| 68804 | }else{ |
| 68805 | while( (iFreeBlk = get2byte(&data[iPtr]))<iStart ){ |
| 68806 | if( iFreeBlk<=iPtr ){ |
| 68807 | if( iFreeBlk==0 ) break; /* TH3: corrupt082.100 */ |
| 68808 | return SQLITE_CORRUPT_PAGE(pPage); |
| 68809 | } |
| 68810 | iPtr = iFreeBlk; |
| 68811 | } |
| @@ -69097,13 +69283,11 @@ | |
| 69283 | if( pCur ){ |
| 69284 | pCur->iPage--; |
| 69285 | pCur->pPage = pCur->apPage[pCur->iPage]; |
| 69286 | } |
| 69287 | testcase( pgno==0 ); |
| 69288 | assert( pgno!=0 || rc!=SQLITE_OK ); |
| 69289 | return rc; |
| 69290 | } |
| 69291 | |
| 69292 | /* |
| 69293 | ** Release a MemPage. This should be called once for each prior |
| @@ -72041,12 +72225,10 @@ | |
| 72225 | ** the new child page does not match the flags field of the parent (i.e. |
| 72226 | ** if an intkey page appears to be the parent of a non-intkey page, or |
| 72227 | ** vice-versa). |
| 72228 | */ |
| 72229 | static int moveToChild(BtCursor *pCur, u32 newPgno){ |
| 72230 | assert( cursorOwnsBtShared(pCur) ); |
| 72231 | assert( pCur->eState==CURSOR_VALID ); |
| 72232 | assert( pCur->iPage<BTCURSOR_MAX_DEPTH ); |
| 72233 | assert( pCur->iPage>=0 ); |
| 72234 | if( pCur->iPage>=(BTCURSOR_MAX_DEPTH-1) ){ |
| @@ -72056,11 +72238,12 @@ | |
| 72238 | pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl); |
| 72239 | pCur->aiIdx[pCur->iPage] = pCur->ix; |
| 72240 | pCur->apPage[pCur->iPage] = pCur->pPage; |
| 72241 | pCur->ix = 0; |
| 72242 | pCur->iPage++; |
| 72243 | return getAndInitPage(pCur->pBt, newPgno, &pCur->pPage, pCur, |
| 72244 | pCur->curPagerFlags); |
| 72245 | } |
| 72246 | |
| 72247 | #ifdef SQLITE_DEBUG |
| 72248 | /* |
| 72249 | ** Page pParent is an internal (non-leaf) tree page. This function |
| @@ -72162,11 +72345,11 @@ | |
| 72345 | assert( pCur->skipNext!=SQLITE_OK ); |
| 72346 | return pCur->skipNext; |
| 72347 | } |
| 72348 | sqlite3BtreeClearCursor(pCur); |
| 72349 | } |
| 72350 | rc = getAndInitPage(pCur->pBt, pCur->pgnoRoot, &pCur->pPage, |
| 72351 | 0, pCur->curPagerFlags); |
| 72352 | if( rc!=SQLITE_OK ){ |
| 72353 | pCur->eState = CURSOR_INVALID; |
| 72354 | return rc; |
| 72355 | } |
| @@ -72635,10 +72818,13 @@ | |
| 72818 | if( pCur->iPage>0 |
| 72819 | && indexCellCompare(pCur, 0, pIdxKey, xRecordCompare)<=0 |
| 72820 | && pIdxKey->errCode==SQLITE_OK |
| 72821 | ){ |
| 72822 | pCur->curFlags &= ~BTCF_ValidOvfl; |
| 72823 | if( !pCur->pPage->isInit ){ |
| 72824 | return SQLITE_CORRUPT_BKPT; |
| 72825 | } |
| 72826 | goto bypass_moveto_root; /* Start search on the current page */ |
| 72827 | } |
| 72828 | pIdxKey->errCode = SQLITE_OK; |
| 72829 | } |
| 72830 | |
| @@ -73800,16 +73986,10 @@ | |
| 73986 | data = pPage->aData; |
| 73987 | ptr = &pPage->aCellIdx[2*idx]; |
| 73988 | assert( pPage->pBt->usableSize > (u32)(ptr-data) ); |
| 73989 | pc = get2byte(ptr); |
| 73990 | hdr = pPage->hdrOffset; |
| 73991 | testcase( pc==(u32)get2byte(&data[hdr+5]) ); |
| 73992 | testcase( pc+sz==pPage->pBt->usableSize ); |
| 73993 | if( pc+sz > pPage->pBt->usableSize ){ |
| 73994 | *pRC = SQLITE_CORRUPT_BKPT; |
| 73995 | return; |
| @@ -74689,12 +74869,10 @@ | |
| 74869 | int szNew[NB+2]; /* Combined size of cells placed on i-th page */ |
| 74870 | u8 *aSpace1; /* Space for copies of dividers cells */ |
| 74871 | Pgno pgno; /* Temp var to store a page number in */ |
| 74872 | u8 abDone[NB+2]; /* True after i'th new page is populated */ |
| 74873 | Pgno aPgno[NB+2]; /* Page numbers of new pages before shuffling */ |
| 74874 | CellArray b; /* Parsed information on cells being balanced */ |
| 74875 | |
| 74876 | memset(abDone, 0, sizeof(abDone)); |
| 74877 | memset(&b, 0, sizeof(b)); |
| 74878 | pBt = pParent->pBt; |
| @@ -75114,46 +75292,43 @@ | |
| 75292 | ** Reassign page numbers so that the new pages are in ascending order. |
| 75293 | ** This helps to keep entries in the disk file in order so that a scan |
| 75294 | ** of the table is closer to a linear scan through the file. That in turn |
| 75295 | ** helps the operating system to deliver pages from the disk more rapidly. |
| 75296 | ** |
| 75297 | ** An O(N*N) sort algorithm is used, but since N is never more than NB+2 |
| 75298 | ** (5), that is not a performance concern. |
| 75299 | ** |
| 75300 | ** When NB==3, this one optimization makes the database about 25% faster |
| 75301 | ** for large insertions and deletions. |
| 75302 | */ |
| 75303 | for(i=0; i<nNew; i++){ |
| 75304 | aPgno[i] = apNew[i]->pgno; |
| 75305 | assert( apNew[i]->pDbPage->flags & PGHDR_WRITEABLE ); |
| 75306 | assert( apNew[i]->pDbPage->flags & PGHDR_DIRTY ); |
| 75307 | } |
| 75308 | for(i=0; i<nNew-1; i++){ |
| 75309 | int iB = i; |
| 75310 | for(j=i+1; j<nNew; j++){ |
| 75311 | if( apNew[j]->pgno < apNew[iB]->pgno ) iB = j; |
| 75312 | } |
| 75313 | |
| 75314 | /* If apNew[i] has a page number that is bigger than any of the |
| 75315 | ** subsequence apNew[i] entries, then swap apNew[i] with the subsequent |
| 75316 | ** entry that has the smallest page number (which we know to be |
| 75317 | ** entry apNew[iB]). |
| 75318 | */ |
| 75319 | if( iB!=i ){ |
| 75320 | Pgno pgnoA = apNew[i]->pgno; |
| 75321 | Pgno pgnoB = apNew[iB]->pgno; |
| 75322 | Pgno pgnoTemp = (PENDING_BYTE/pBt->pageSize)+1; |
| 75323 | u16 fgA = apNew[i]->pDbPage->flags; |
| 75324 | u16 fgB = apNew[iB]->pDbPage->flags; |
| 75325 | sqlite3PagerRekey(apNew[i]->pDbPage, pgnoTemp, fgB); |
| 75326 | sqlite3PagerRekey(apNew[iB]->pDbPage, pgnoA, fgA); |
| 75327 | sqlite3PagerRekey(apNew[i]->pDbPage, pgnoB, fgB); |
| 75328 | apNew[i]->pgno = pgnoB; |
| 75329 | apNew[iB]->pgno = pgnoA; |
| 75330 | } |
| 75331 | } |
| 75332 | |
| 75333 | TRACE(("BALANCE: new: %d(%d nc=%d) %d(%d nc=%d) %d(%d nc=%d) " |
| 75334 | "%d(%d nc=%d) %d(%d nc=%d)\n", |
| @@ -79417,10 +79592,20 @@ | |
| 79592 | double r2 = (double)i; |
| 79593 | return r1==0.0 |
| 79594 | || (memcmp(&r1, &r2, sizeof(r1))==0 |
| 79595 | && i >= -2251799813685248LL && i < 2251799813685248LL); |
| 79596 | } |
| 79597 | |
| 79598 | /* Convert a floating point value to its closest integer. Do so in |
| 79599 | ** a way that avoids 'outside the range of representable values' warnings |
| 79600 | ** from UBSAN. |
| 79601 | */ |
| 79602 | SQLITE_PRIVATE i64 sqlite3RealToI64(double r){ |
| 79603 | if( r<=(double)SMALLEST_INT64 ) return SMALLEST_INT64; |
| 79604 | if( r>=(double)LARGEST_INT64) return LARGEST_INT64; |
| 79605 | return (i64)r; |
| 79606 | } |
| 79607 | |
| 79608 | /* |
| 79609 | ** Convert pMem so that it has type MEM_Real or MEM_Int. |
| 79610 | ** Invalidate any prior representations. |
| 79611 | ** |
| @@ -79439,11 +79624,11 @@ | |
| 79624 | sqlite3_int64 ix; |
| 79625 | assert( (pMem->flags & (MEM_Blob|MEM_Str))!=0 ); |
| 79626 | assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); |
| 79627 | rc = sqlite3AtoF(pMem->z, &pMem->u.r, pMem->n, pMem->enc); |
| 79628 | if( ((rc==0 || rc==1) && sqlite3Atoi64(pMem->z, &ix, pMem->n, pMem->enc)<=1) |
| 79629 | || sqlite3RealSameAsInt(pMem->u.r, (ix = sqlite3RealToI64(pMem->u.r))) |
| 79630 | ){ |
| 79631 | pMem->u.i = ix; |
| 79632 | MemSetTypeFlag(pMem, MEM_Int); |
| 79633 | }else{ |
| 79634 | MemSetTypeFlag(pMem, MEM_Real); |
| @@ -80160,11 +80345,12 @@ | |
| 80345 | if( pVal==0 ){ |
| 80346 | rc = SQLITE_NOMEM_BKPT; |
| 80347 | goto value_from_function_out; |
| 80348 | } |
| 80349 | |
| 80350 | testcase( pCtx->pParse->rc==SQLITE_ERROR ); |
| 80351 | testcase( pCtx->pParse->rc==SQLITE_OK ); |
| 80352 | memset(&ctx, 0, sizeof(ctx)); |
| 80353 | ctx.pOut = pVal; |
| 80354 | ctx.pFunc = pFunc; |
| 80355 | ctx.enc = ENC(db); |
| 80356 | pFunc->xSFunc(&ctx, nVal, apVal); |
| @@ -80670,14 +80856,14 @@ | |
| 80856 | p = sqlite3DbMallocRawNN(db, sizeof(Vdbe) ); |
| 80857 | if( p==0 ) return 0; |
| 80858 | memset(&p->aOp, 0, sizeof(Vdbe)-offsetof(Vdbe,aOp)); |
| 80859 | p->db = db; |
| 80860 | if( db->pVdbe ){ |
| 80861 | db->pVdbe->ppVPrev = &p->pVNext; |
| 80862 | } |
| 80863 | p->pVNext = db->pVdbe; |
| 80864 | p->ppVPrev = &db->pVdbe; |
| 80865 | db->pVdbe = p; |
| 80866 | assert( p->eVdbeState==VDBE_INIT_STATE ); |
| 80867 | p->pParse = pParse; |
| 80868 | pParse->pVdbe = p; |
| 80869 | assert( pParse->aLabel==0 ); |
| @@ -80755,25 +80941,32 @@ | |
| 80941 | return 0; |
| 80942 | } |
| 80943 | #endif |
| 80944 | |
| 80945 | /* |
| 80946 | ** Swap byte-code between two VDBE structures. |
| 80947 | ** |
| 80948 | ** This happens after pB was previously run and returned |
| 80949 | ** SQLITE_SCHEMA. The statement was then reprepared in pA. |
| 80950 | ** This routine transfers the new bytecode in pA over to pB |
| 80951 | ** so that pB can be run again. The old pB byte code is |
| 80952 | ** moved back to pA so that it will be cleaned up when pA is |
| 80953 | ** finalized. |
| 80954 | */ |
| 80955 | SQLITE_PRIVATE void sqlite3VdbeSwap(Vdbe *pA, Vdbe *pB){ |
| 80956 | Vdbe tmp, *pTmp, **ppTmp; |
| 80957 | char *zTmp; |
| 80958 | assert( pA->db==pB->db ); |
| 80959 | tmp = *pA; |
| 80960 | *pA = *pB; |
| 80961 | *pB = tmp; |
| 80962 | pTmp = pA->pVNext; |
| 80963 | pA->pVNext = pB->pVNext; |
| 80964 | pB->pVNext = pTmp; |
| 80965 | ppTmp = pA->ppVPrev; |
| 80966 | pA->ppVPrev = pB->ppVPrev; |
| 80967 | pB->ppVPrev = ppTmp; |
| 80968 | zTmp = pA->zSql; |
| 80969 | pA->zSql = pB->zSql; |
| 80970 | pB->zSql = zTmp; |
| 80971 | #ifdef SQLITE_ENABLE_NORMALIZE |
| 80972 | zTmp = pA->zNormSql; |
| @@ -81021,10 +81214,11 @@ | |
| 81214 | pCtx->argc = nArg; |
| 81215 | pCtx->iOp = sqlite3VdbeCurrentAddr(v); |
| 81216 | addr = sqlite3VdbeAddOp4(v, eCallCtx ? OP_PureFunc : OP_Function, |
| 81217 | p1, p2, p3, (char*)pCtx, P4_FUNCCTX); |
| 81218 | sqlite3VdbeChangeP5(v, eCallCtx & NC_SelfRef); |
| 81219 | sqlite3MayAbort(pParse); |
| 81220 | return addr; |
| 81221 | } |
| 81222 | |
| 81223 | /* |
| 81224 | ** Add an opcode that includes the p4 value with a P4_INT64 or |
| @@ -81089,11 +81283,11 @@ | |
| 81283 | va_end(ap); |
| 81284 | v = pParse->pVdbe; |
| 81285 | iThis = v->nOp; |
| 81286 | sqlite3VdbeAddOp4(v, OP_Explain, iThis, pParse->addrExplain, 0, |
| 81287 | zMsg, P4_DYNAMIC); |
| 81288 | sqlite3ExplainBreakpoint(bPush?"PUSH":"", sqlite3VdbeGetLastOp(v)->p4.z); |
| 81289 | if( bPush){ |
| 81290 | pParse->addrExplain = iThis; |
| 81291 | } |
| 81292 | } |
| 81293 | } |
| @@ -81232,11 +81426,11 @@ | |
| 81426 | SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe *p){ |
| 81427 | sqlite3VdbeAddOp2(p, OP_Expire, 1, 1); |
| 81428 | } |
| 81429 | |
| 81430 | /* |
| 81431 | ** Mark the VDBE as one that can be run multiple times. |
| 81432 | */ |
| 81433 | SQLITE_PRIVATE void sqlite3VdbeReusable(Vdbe *p){ |
| 81434 | int i; |
| 81435 | for(i=1; ALWAYS(i<p->nOp); i++){ |
| 81436 | if( ALWAYS(p->aOp[i].opcode==OP_Expire) ){ |
| @@ -81356,10 +81550,11 @@ | |
| 81550 | int opcode = pOp->opcode; |
| 81551 | if( opcode==OP_Destroy || opcode==OP_VUpdate || opcode==OP_VRename |
| 81552 | || opcode==OP_VDestroy |
| 81553 | || opcode==OP_VCreate |
| 81554 | || opcode==OP_ParseSchema |
| 81555 | || opcode==OP_Function || opcode==OP_PureFunc |
| 81556 | || ((opcode==OP_Halt || opcode==OP_HaltIfNull) |
| 81557 | && ((pOp->p1)!=SQLITE_OK && pOp->p2==OE_Abort)) |
| 81558 | ){ |
| 81559 | hasAbort = 1; |
| 81560 | break; |
| @@ -81446,12 +81641,12 @@ | |
| 81641 | Parse *pParse = p->pParse; |
| 81642 | int *aLabel = pParse->aLabel; |
| 81643 | p->readOnly = 1; |
| 81644 | p->bIsReader = 0; |
| 81645 | pOp = &p->aOp[p->nOp-1]; |
| 81646 | assert( p->aOp[0].opcode==OP_Init ); |
| 81647 | while( 1 /* Loop termates when it reaches the OP_Init opcode */ ){ |
| 81648 | /* Only JUMP opcodes and the short list of special opcodes in the switch |
| 81649 | ** below need to be considered. The mkopcodeh.tcl generator script groups |
| 81650 | ** all these opcodes together near the front of the opcode list. Skip |
| 81651 | ** any opcode that does not need processing by virtual of the fact that |
| 81652 | ** it is larger than SQLITE_MX_JUMP_OPCODE, as a performance optimization. |
| @@ -81476,10 +81671,14 @@ | |
| 81671 | case OP_JournalMode: { |
| 81672 | p->readOnly = 0; |
| 81673 | p->bIsReader = 1; |
| 81674 | break; |
| 81675 | } |
| 81676 | case OP_Init: { |
| 81677 | assert( pOp->p2>=0 ); |
| 81678 | goto resolve_p2_values_loop_exit; |
| 81679 | } |
| 81680 | #ifndef SQLITE_OMIT_VIRTUALTABLE |
| 81681 | case OP_VUpdate: { |
| 81682 | if( pOp->p2>nMaxArgs ) nMaxArgs = pOp->p2; |
| 81683 | break; |
| 81684 | } |
| @@ -81508,15 +81707,16 @@ | |
| 81707 | /* The mkopcodeh.tcl script has so arranged things that the only |
| 81708 | ** non-jump opcodes less than SQLITE_MX_JUMP_CODE are guaranteed to |
| 81709 | ** have non-negative values for P2. */ |
| 81710 | assert( (sqlite3OpcodeProperty[pOp->opcode]&OPFLG_JUMP)==0 || pOp->p2>=0); |
| 81711 | } |
| 81712 | assert( pOp>p->aOp ); |
| 81713 | pOp--; |
| 81714 | } |
| 81715 | resolve_p2_values_loop_exit: |
| 81716 | if( aLabel ){ |
| 81717 | sqlite3DbNNFreeNN(p->db, pParse->aLabel); |
| 81718 | pParse->aLabel = 0; |
| 81719 | } |
| 81720 | pParse->nLabel = 0; |
| 81721 | *pMaxFuncArgs = nMaxArgs; |
| 81722 | assert( p->bIsReader!=0 || DbMaskAllZero(p->btreeMask) ); |
| @@ -81761,19 +81961,23 @@ | |
| 81961 | /* |
| 81962 | ** Change the value of the opcode, or P1, P2, P3, or P5 operands |
| 81963 | ** for a specific instruction. |
| 81964 | */ |
| 81965 | SQLITE_PRIVATE void sqlite3VdbeChangeOpcode(Vdbe *p, int addr, u8 iNewOpcode){ |
| 81966 | assert( addr>=0 ); |
| 81967 | sqlite3VdbeGetOp(p,addr)->opcode = iNewOpcode; |
| 81968 | } |
| 81969 | SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe *p, int addr, int val){ |
| 81970 | assert( addr>=0 ); |
| 81971 | sqlite3VdbeGetOp(p,addr)->p1 = val; |
| 81972 | } |
| 81973 | SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe *p, int addr, int val){ |
| 81974 | assert( addr>=0 || p->db->mallocFailed ); |
| 81975 | sqlite3VdbeGetOp(p,addr)->p2 = val; |
| 81976 | } |
| 81977 | SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe *p, int addr, int val){ |
| 81978 | assert( addr>=0 ); |
| 81979 | sqlite3VdbeGetOp(p,addr)->p3 = val; |
| 81980 | } |
| 81981 | SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe *p, u16 p5){ |
| 81982 | assert( p->nOp>0 || p->db->mallocFailed ); |
| 81983 | if( p->nOp>0 ) p->aOp[p->nOp-1].p5 = p5; |
| @@ -81805,11 +82009,11 @@ | |
| 82009 | assert( p->aOp[addr].opcode==OP_Once |
| 82010 | || p->aOp[addr].opcode==OP_If |
| 82011 | || p->aOp[addr].opcode==OP_FkIfZero ); |
| 82012 | assert( p->aOp[addr].p4type==0 ); |
| 82013 | #ifdef SQLITE_VDBE_COVERAGE |
| 82014 | sqlite3VdbeGetLastOp(p)->iSrcLine = 0; /* Erase VdbeCoverage() macros */ |
| 82015 | #endif |
| 82016 | p->nOp--; |
| 82017 | }else{ |
| 82018 | sqlite3VdbeChangeP2(p, addr, p->nOp); |
| 82019 | } |
| @@ -81819,25 +82023,27 @@ | |
| 82023 | /* |
| 82024 | ** If the input FuncDef structure is ephemeral, then free it. If |
| 82025 | ** the FuncDef is not ephermal, then do nothing. |
| 82026 | */ |
| 82027 | static void freeEphemeralFunction(sqlite3 *db, FuncDef *pDef){ |
| 82028 | assert( db!=0 ); |
| 82029 | if( (pDef->funcFlags & SQLITE_FUNC_EPHEM)!=0 ){ |
| 82030 | sqlite3DbNNFreeNN(db, pDef); |
| 82031 | } |
| 82032 | } |
| 82033 | |
| 82034 | /* |
| 82035 | ** Delete a P4 value if necessary. |
| 82036 | */ |
| 82037 | static SQLITE_NOINLINE void freeP4Mem(sqlite3 *db, Mem *p){ |
| 82038 | if( p->szMalloc ) sqlite3DbFree(db, p->zMalloc); |
| 82039 | sqlite3DbNNFreeNN(db, p); |
| 82040 | } |
| 82041 | static SQLITE_NOINLINE void freeP4FuncCtx(sqlite3 *db, sqlite3_context *p){ |
| 82042 | assert( db!=0 ); |
| 82043 | freeEphemeralFunction(db, p->pFunc); |
| 82044 | sqlite3DbNNFreeNN(db, p); |
| 82045 | } |
| 82046 | static void freeP4(sqlite3 *db, int p4type, void *p4){ |
| 82047 | assert( db ); |
| 82048 | switch( p4type ){ |
| 82049 | case P4_FUNCCTX: { |
| @@ -81846,11 +82052,11 @@ | |
| 82052 | } |
| 82053 | case P4_REAL: |
| 82054 | case P4_INT64: |
| 82055 | case P4_DYNAMIC: |
| 82056 | case P4_INTARRAY: { |
| 82057 | if( p4 ) sqlite3DbNNFreeNN(db, p4); |
| 82058 | break; |
| 82059 | } |
| 82060 | case P4_KEYINFO: { |
| 82061 | if( db->pnBytesFreed==0 ) sqlite3KeyInfoUnref((KeyInfo*)p4); |
| 82062 | break; |
| @@ -81885,10 +82091,11 @@ | |
| 82091 | ** opcodes contained within. If aOp is not NULL it is assumed to contain |
| 82092 | ** nOp entries. |
| 82093 | */ |
| 82094 | static void vdbeFreeOpArray(sqlite3 *db, Op *aOp, int nOp){ |
| 82095 | assert( nOp>=0 ); |
| 82096 | assert( db!=0 ); |
| 82097 | if( aOp ){ |
| 82098 | Op *pOp = &aOp[nOp-1]; |
| 82099 | while(1){ /* Exit via break */ |
| 82100 | if( pOp->p4type <= P4_FREE_IF_LE ) freeP4(db, pOp->p4type, pOp->p4.p); |
| 82101 | #ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS |
| @@ -81895,11 +82102,11 @@ | |
| 82102 | sqlite3DbFree(db, pOp->zComment); |
| 82103 | #endif |
| 82104 | if( pOp==aOp ) break; |
| 82105 | pOp--; |
| 82106 | } |
| 82107 | sqlite3DbNNFreeNN(db, aOp); |
| 82108 | } |
| 82109 | } |
| 82110 | |
| 82111 | /* |
| 82112 | ** Link the SubProgram object passed as the second argument into the linked |
| @@ -82126,17 +82333,17 @@ | |
| 82333 | #ifdef SQLITE_VDBE_COVERAGE |
| 82334 | /* |
| 82335 | ** Set the value if the iSrcLine field for the previously coded instruction. |
| 82336 | */ |
| 82337 | SQLITE_PRIVATE void sqlite3VdbeSetLineNumber(Vdbe *v, int iLine){ |
| 82338 | sqlite3VdbeGetLastOp(v)->iSrcLine = iLine; |
| 82339 | } |
| 82340 | #endif /* SQLITE_VDBE_COVERAGE */ |
| 82341 | |
| 82342 | /* |
| 82343 | ** Return the opcode for a given address. The address must be non-negative. |
| 82344 | ** See sqlite3VdbeGetLastOp() to get the most recently added opcode. |
| 82345 | ** |
| 82346 | ** If a memory allocation error has occurred prior to the calling of this |
| 82347 | ** routine, then a pointer to a dummy VdbeOp will be returned. That opcode |
| 82348 | ** is readable but not writable, though it is cast to a writable value. |
| 82349 | ** The return of a dummy opcode allows the call to continue functioning |
| @@ -82148,20 +82355,23 @@ | |
| 82355 | SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe *p, int addr){ |
| 82356 | /* C89 specifies that the constant "dummy" will be initialized to all |
| 82357 | ** zeros, which is correct. MSVC generates a warning, nevertheless. */ |
| 82358 | static VdbeOp dummy; /* Ignore the MSVC warning about no initializer */ |
| 82359 | assert( p->eVdbeState==VDBE_INIT_STATE ); |
| 82360 | assert( (addr>=0 && addr<p->nOp) || p->db->mallocFailed ); |
| 82361 | if( p->db->mallocFailed ){ |
| 82362 | return (VdbeOp*)&dummy; |
| 82363 | }else{ |
| 82364 | return &p->aOp[addr]; |
| 82365 | } |
| 82366 | } |
| 82367 | |
| 82368 | /* Return the most recently added opcode |
| 82369 | */ |
| 82370 | VdbeOp * sqlite3VdbeGetLastOp(Vdbe *p){ |
| 82371 | return sqlite3VdbeGetOp(p, p->nOp - 1); |
| 82372 | } |
| 82373 | |
| 82374 | #if defined(SQLITE_ENABLE_EXPLAIN_COMMENTS) |
| 82375 | /* |
| 82376 | ** Return an integer value for one of the parameters to the opcode pOp |
| 82377 | ** determined by character c. |
| @@ -82646,11 +82856,11 @@ | |
| 82856 | if( p->flags&(MEM_Agg|MEM_Dyn) ){ |
| 82857 | testcase( (p->flags & MEM_Dyn)!=0 && p->xDel==sqlite3VdbeFrameMemDel ); |
| 82858 | sqlite3VdbeMemRelease(p); |
| 82859 | p->flags = MEM_Undefined; |
| 82860 | }else if( p->szMalloc ){ |
| 82861 | sqlite3DbNNFreeNN(db, p->zMalloc); |
| 82862 | p->szMalloc = 0; |
| 82863 | p->flags = MEM_Undefined; |
| 82864 | } |
| 82865 | #ifdef SQLITE_DEBUG |
| 82866 | else{ |
| @@ -83638,11 +83848,11 @@ | |
| 83848 | if( sqlite3_stmt_busy((sqlite3_stmt*)p) ){ |
| 83849 | cnt++; |
| 83850 | if( p->readOnly==0 ) nWrite++; |
| 83851 | if( p->bIsReader ) nRead++; |
| 83852 | } |
| 83853 | p = p->pVNext; |
| 83854 | } |
| 83855 | assert( cnt==db->nVdbeActive ); |
| 83856 | assert( nWrite==db->nVdbeWrite ); |
| 83857 | assert( nRead==db->nVdbeRead ); |
| 83858 | } |
| @@ -84167,27 +84377,28 @@ | |
| 84377 | ** VdbeDelete() also unlinks the Vdbe from the list of VMs associated with |
| 84378 | ** the database connection and frees the object itself. |
| 84379 | */ |
| 84380 | static void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){ |
| 84381 | SubProgram *pSub, *pNext; |
| 84382 | assert( db!=0 ); |
| 84383 | assert( p->db==0 || p->db==db ); |
| 84384 | if( p->aColName ){ |
| 84385 | releaseMemArray(p->aColName, p->nResColumn*COLNAME_N); |
| 84386 | sqlite3DbNNFreeNN(db, p->aColName); |
| 84387 | } |
| 84388 | for(pSub=p->pProgram; pSub; pSub=pNext){ |
| 84389 | pNext = pSub->pNext; |
| 84390 | vdbeFreeOpArray(db, pSub->aOp, pSub->nOp); |
| 84391 | sqlite3DbFree(db, pSub); |
| 84392 | } |
| 84393 | if( p->eVdbeState!=VDBE_INIT_STATE ){ |
| 84394 | releaseMemArray(p->aVar, p->nVar); |
| 84395 | if( p->pVList ) sqlite3DbNNFreeNN(db, p->pVList); |
| 84396 | if( p->pFree ) sqlite3DbNNFreeNN(db, p->pFree); |
| 84397 | } |
| 84398 | vdbeFreeOpArray(db, p->aOp, p->nOp); |
| 84399 | if( p->zSql ) sqlite3DbNNFreeNN(db, p->zSql); |
| 84400 | #ifdef SQLITE_ENABLE_NORMALIZE |
| 84401 | sqlite3DbFree(db, p->zNormSql); |
| 84402 | { |
| 84403 | DblquoteStr *pThis, *pNext; |
| 84404 | for(pThis=p->pDblStr; pThis; pThis=pNext){ |
| @@ -84213,24 +84424,21 @@ | |
| 84424 | SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe *p){ |
| 84425 | sqlite3 *db; |
| 84426 | |
| 84427 | assert( p!=0 ); |
| 84428 | db = p->db; |
| 84429 | assert( db!=0 ); |
| 84430 | assert( sqlite3_mutex_held(db->mutex) ); |
| 84431 | sqlite3VdbeClearObject(db, p); |
| 84432 | if( db->pnBytesFreed==0 ){ |
| 84433 | assert( p->ppVPrev!=0 ); |
| 84434 | *p->ppVPrev = p->pVNext; |
| 84435 | if( p->pVNext ){ |
| 84436 | p->pVNext->ppVPrev = p->ppVPrev; |
| 84437 | } |
| 84438 | } |
| 84439 | sqlite3DbNNFreeNN(db, p); |
| 84440 | } |
| 84441 | |
| 84442 | /* |
| 84443 | ** The cursor "p" has a pending seek operation that has not yet been |
| 84444 | ** carried out. Seek the cursor now. If an error occurs, return |
| @@ -85721,11 +85929,11 @@ | |
| 85929 | ** prepared statements. The flag is set to 1 for an immediate expiration |
| 85930 | ** and set to 2 for an advisory expiration. |
| 85931 | */ |
| 85932 | SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3 *db, int iCode){ |
| 85933 | Vdbe *p; |
| 85934 | for(p = db->pVdbe; p; p=p->pVNext){ |
| 85935 | p->expired = iCode+1; |
| 85936 | } |
| 85937 | } |
| 85938 | |
| 85939 | /* |
| @@ -85842,17 +86050,18 @@ | |
| 86050 | ** |
| 86051 | ** This function is used to free UnpackedRecord structures allocated by |
| 86052 | ** the vdbeUnpackRecord() function found in vdbeapi.c. |
| 86053 | */ |
| 86054 | static void vdbeFreeUnpacked(sqlite3 *db, int nField, UnpackedRecord *p){ |
| 86055 | assert( db!=0 ); |
| 86056 | if( p ){ |
| 86057 | int i; |
| 86058 | for(i=0; i<nField; i++){ |
| 86059 | Mem *pMem = &p->aMem[i]; |
| 86060 | if( pMem->zMalloc ) sqlite3VdbeMemReleaseMalloc(pMem); |
| 86061 | } |
| 86062 | sqlite3DbNNFreeNN(db, p); |
| 86063 | } |
| 86064 | } |
| 86065 | #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */ |
| 86066 | |
| 86067 | #ifdef SQLITE_ENABLE_PREUPDATE_HOOK |
| @@ -85919,11 +86128,11 @@ | |
| 86128 | if( preupdate.aNew ){ |
| 86129 | int i; |
| 86130 | for(i=0; i<pCsr->nField; i++){ |
| 86131 | sqlite3VdbeMemRelease(&preupdate.aNew[i]); |
| 86132 | } |
| 86133 | sqlite3DbNNFreeNN(db, preupdate.aNew); |
| 86134 | } |
| 86135 | } |
| 86136 | #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */ |
| 86137 | |
| 86138 | /************** End of vdbeaux.c *********************************************/ |
| @@ -86036,11 +86245,13 @@ | |
| 86245 | Vdbe *v = (Vdbe*)pStmt; |
| 86246 | sqlite3 *db = v->db; |
| 86247 | if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT; |
| 86248 | sqlite3_mutex_enter(db->mutex); |
| 86249 | checkProfileCallback(db, v); |
| 86250 | assert( v->eVdbeState>=VDBE_READY_STATE ); |
| 86251 | rc = sqlite3VdbeReset(v); |
| 86252 | sqlite3VdbeDelete(v); |
| 86253 | rc = sqlite3ApiExit(db, rc); |
| 86254 | sqlite3LeaveMutexAndCloseZombie(db); |
| 86255 | } |
| 86256 | return rc; |
| 86257 | } |
| @@ -86746,13 +86957,13 @@ | |
| 86957 | break; |
| 86958 | } |
| 86959 | sqlite3_reset(pStmt); |
| 86960 | if( savedPc>=0 ){ |
| 86961 | /* Setting minWriteFileFormat to 254 is a signal to the OP_Init and |
| 86962 | ** OP_Trace opcodes to *not* perform SQLITE_TRACE_STMT because it has |
| 86963 | ** already been done once on a prior invocation that failed due to |
| 86964 | ** SQLITE_SCHEMA. tag-20220401a */ |
| 86965 | v->minWriteFileFormat = 254; |
| 86966 | } |
| 86967 | assert( v->expired==0 ); |
| 86968 | } |
| 86969 | sqlite3_mutex_leave(db->mutex); |
| @@ -87358,11 +87569,11 @@ | |
| 87569 | ** the mutex is released if any kind of error occurs. |
| 87570 | ** |
| 87571 | ** The error code stored in database p->db is overwritten with the return |
| 87572 | ** value in any case. |
| 87573 | */ |
| 87574 | static int vdbeUnbind(Vdbe *p, unsigned int i){ |
| 87575 | Mem *pVar; |
| 87576 | if( vdbeSafetyNotNull(p) ){ |
| 87577 | return SQLITE_MISUSE_BKPT; |
| 87578 | } |
| 87579 | sqlite3_mutex_enter(p->db->mutex); |
| @@ -87371,16 +87582,15 @@ | |
| 87582 | sqlite3_mutex_leave(p->db->mutex); |
| 87583 | sqlite3_log(SQLITE_MISUSE, |
| 87584 | "bind on a busy prepared statement: [%s]", p->zSql); |
| 87585 | return SQLITE_MISUSE_BKPT; |
| 87586 | } |
| 87587 | if( i>=(unsigned int)p->nVar ){ |
| 87588 | sqlite3Error(p->db, SQLITE_RANGE); |
| 87589 | sqlite3_mutex_leave(p->db->mutex); |
| 87590 | return SQLITE_RANGE; |
| 87591 | } |
| 87592 | pVar = &p->aVar[i]; |
| 87593 | sqlite3VdbeMemRelease(pVar); |
| 87594 | pVar->flags = MEM_Null; |
| 87595 | p->db->errCode = SQLITE_OK; |
| 87596 | |
| @@ -87413,11 +87623,11 @@ | |
| 87623 | ){ |
| 87624 | Vdbe *p = (Vdbe *)pStmt; |
| 87625 | Mem *pVar; |
| 87626 | int rc; |
| 87627 | |
| 87628 | rc = vdbeUnbind(p, (u32)(i-1)); |
| 87629 | if( rc==SQLITE_OK ){ |
| 87630 | if( zData!=0 ){ |
| 87631 | pVar = &p->aVar[i-1]; |
| 87632 | rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel); |
| 87633 | if( rc==SQLITE_OK && encoding!=0 ){ |
| @@ -87462,11 +87672,11 @@ | |
| 87672 | return bindText(pStmt, i, zData, nData, xDel, 0); |
| 87673 | } |
| 87674 | SQLITE_API int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){ |
| 87675 | int rc; |
| 87676 | Vdbe *p = (Vdbe *)pStmt; |
| 87677 | rc = vdbeUnbind(p, (u32)(i-1)); |
| 87678 | if( rc==SQLITE_OK ){ |
| 87679 | sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue); |
| 87680 | sqlite3_mutex_leave(p->db->mutex); |
| 87681 | } |
| 87682 | return rc; |
| @@ -87475,21 +87685,21 @@ | |
| 87685 | return sqlite3_bind_int64(p, i, (i64)iValue); |
| 87686 | } |
| 87687 | SQLITE_API int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){ |
| 87688 | int rc; |
| 87689 | Vdbe *p = (Vdbe *)pStmt; |
| 87690 | rc = vdbeUnbind(p, (u32)(i-1)); |
| 87691 | if( rc==SQLITE_OK ){ |
| 87692 | sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue); |
| 87693 | sqlite3_mutex_leave(p->db->mutex); |
| 87694 | } |
| 87695 | return rc; |
| 87696 | } |
| 87697 | SQLITE_API int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){ |
| 87698 | int rc; |
| 87699 | Vdbe *p = (Vdbe*)pStmt; |
| 87700 | rc = vdbeUnbind(p, (u32)(i-1)); |
| 87701 | if( rc==SQLITE_OK ){ |
| 87702 | sqlite3_mutex_leave(p->db->mutex); |
| 87703 | } |
| 87704 | return rc; |
| 87705 | } |
| @@ -87500,11 +87710,11 @@ | |
| 87710 | const char *zPTtype, |
| 87711 | void (*xDestructor)(void*) |
| 87712 | ){ |
| 87713 | int rc; |
| 87714 | Vdbe *p = (Vdbe*)pStmt; |
| 87715 | rc = vdbeUnbind(p, (u32)(i-1)); |
| 87716 | if( rc==SQLITE_OK ){ |
| 87717 | sqlite3VdbeMemSetPointer(&p->aVar[i-1], pPtr, zPTtype, xDestructor); |
| 87718 | sqlite3_mutex_leave(p->db->mutex); |
| 87719 | }else if( xDestructor ){ |
| 87720 | xDestructor(pPtr); |
| @@ -87578,11 +87788,11 @@ | |
| 87788 | return rc; |
| 87789 | } |
| 87790 | SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){ |
| 87791 | int rc; |
| 87792 | Vdbe *p = (Vdbe *)pStmt; |
| 87793 | rc = vdbeUnbind(p, (u32)(i-1)); |
| 87794 | if( rc==SQLITE_OK ){ |
| 87795 | #ifndef SQLITE_OMIT_INCRBLOB |
| 87796 | sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n); |
| 87797 | #else |
| 87798 | rc = sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n); |
| @@ -87738,11 +87948,11 @@ | |
| 87948 | #endif |
| 87949 | sqlite3_mutex_enter(pDb->mutex); |
| 87950 | if( pStmt==0 ){ |
| 87951 | pNext = (sqlite3_stmt*)pDb->pVdbe; |
| 87952 | }else{ |
| 87953 | pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pVNext; |
| 87954 | } |
| 87955 | sqlite3_mutex_leave(pDb->mutex); |
| 87956 | return pNext; |
| 87957 | } |
| 87958 | |
| @@ -87763,12 +87973,15 @@ | |
| 87973 | if( op==SQLITE_STMTSTATUS_MEMUSED ){ |
| 87974 | sqlite3 *db = pVdbe->db; |
| 87975 | sqlite3_mutex_enter(db->mutex); |
| 87976 | v = 0; |
| 87977 | db->pnBytesFreed = (int*)&v; |
| 87978 | assert( db->lookaside.pEnd==db->lookaside.pTrueEnd ); |
| 87979 | db->lookaside.pEnd = db->lookaside.pStart; |
| 87980 | sqlite3VdbeDelete(pVdbe); |
| 87981 | db->pnBytesFreed = 0; |
| 87982 | db->lookaside.pEnd = db->lookaside.pTrueEnd; |
| 87983 | sqlite3_mutex_leave(db->mutex); |
| 87984 | }else{ |
| 87985 | v = pVdbe->aCounter[op]; |
| 87986 | if( resetFlag ) pVdbe->aCounter[op] = 0; |
| 87987 | } |
| @@ -88604,11 +88817,12 @@ | |
| 88817 | ** floating point value of rValue. Return true and set *piValue to the |
| 88818 | ** integer value if the string is in range to be an integer. Otherwise, |
| 88819 | ** return false. |
| 88820 | */ |
| 88821 | static int alsoAnInt(Mem *pRec, double rValue, i64 *piValue){ |
| 88822 | i64 iValue; |
| 88823 | iValue = sqlite3RealToI64(rValue); |
| 88824 | if( sqlite3RealSameAsInt(rValue,iValue) ){ |
| 88825 | *piValue = iValue; |
| 88826 | return 1; |
| 88827 | } |
| 88828 | return 0==sqlite3Atoi64(pRec->z, piValue, pRec->n, pRec->enc); |
| @@ -88766,21 +88980,22 @@ | |
| 88980 | ** |
| 88981 | ** Unlike applyNumericAffinity(), this routine does not modify pMem->flags. |
| 88982 | ** But it does set pMem->u.r and pMem->u.i appropriately. |
| 88983 | */ |
| 88984 | static u16 numericType(Mem *pMem){ |
| 88985 | assert( (pMem->flags & MEM_Null)==0 |
| 88986 | || pMem->db==0 || pMem->db->mallocFailed ); |
| 88987 | if( pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal|MEM_Null) ){ |
| 88988 | testcase( pMem->flags & MEM_Int ); |
| 88989 | testcase( pMem->flags & MEM_Real ); |
| 88990 | testcase( pMem->flags & MEM_IntReal ); |
| 88991 | return pMem->flags & (MEM_Int|MEM_Real|MEM_IntReal|MEM_Null); |
| 88992 | } |
| 88993 | assert( pMem->flags & (MEM_Str|MEM_Blob) ); |
| 88994 | testcase( pMem->flags & MEM_Str ); |
| 88995 | testcase( pMem->flags & MEM_Blob ); |
| 88996 | return computeNumericType(pMem); |
| 88997 | return 0; |
| 88998 | } |
| 88999 | |
| 89000 | #ifdef SQLITE_DEBUG |
| 89001 | /* |
| @@ -89294,11 +89509,11 @@ | |
| 89509 | ** |
| 89510 | ** P2 is not used by the byte-code engine. However, if P2 is positive |
| 89511 | ** and also less than the current address, then the "EXPLAIN" output |
| 89512 | ** formatter in the CLI will indent all opcodes from the P2 opcode up |
| 89513 | ** to be not including the current Return. P2 should be the first opcode |
| 89514 | ** in the subroutine from which this opcode is returning. Thus the P2 |
| 89515 | ** value is a byte-code indentation hint. See tag-20220407a in |
| 89516 | ** wherecode.c and shell.c. |
| 89517 | */ |
| 89518 | case OP_Return: { /* in1 */ |
| 89519 | pIn1 = &aMem[pOp->p1]; |
| @@ -89956,11 +90171,11 @@ | |
| 90171 | } |
| 90172 | nByte = pIn1->n + pIn2->n; |
| 90173 | if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){ |
| 90174 | goto too_big; |
| 90175 | } |
| 90176 | if( sqlite3VdbeMemGrow(pOut, (int)nByte+2, pOut==pIn2) ){ |
| 90177 | goto no_mem; |
| 90178 | } |
| 90179 | MemSetTypeFlag(pOut, MEM_Str); |
| 90180 | if( pOut!=pIn2 ){ |
| 90181 | memcpy(pOut->z, pIn2->z, pIn2->n); |
| @@ -89968,13 +90183,13 @@ | |
| 90183 | pIn2->flags = flags2; |
| 90184 | } |
| 90185 | memcpy(&pOut->z[pIn2->n], pIn1->z, pIn1->n); |
| 90186 | assert( (pIn1->flags & MEM_Dyn) == (flags1 & MEM_Dyn) ); |
| 90187 | pIn1->flags = flags1; |
| 90188 | if( encoding>SQLITE_UTF8 ) nByte &= ~1; |
| 90189 | pOut->z[nByte]=0; |
| 90190 | pOut->z[nByte+1] = 0; |
| 90191 | pOut->flags |= MEM_Term; |
| 90192 | pOut->n = (int)nByte; |
| 90193 | pOut->enc = encoding; |
| 90194 | UPDATE_MAX_BLOBSIZE(pOut); |
| 90195 | break; |
| @@ -90021,25 +90236,24 @@ | |
| 90236 | case OP_Add: /* same as TK_PLUS, in1, in2, out3 */ |
| 90237 | case OP_Subtract: /* same as TK_MINUS, in1, in2, out3 */ |
| 90238 | case OP_Multiply: /* same as TK_STAR, in1, in2, out3 */ |
| 90239 | case OP_Divide: /* same as TK_SLASH, in1, in2, out3 */ |
| 90240 | case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */ |
| 90241 | u16 type1; /* Numeric type of left operand */ |
| 90242 | u16 type2; /* Numeric type of right operand */ |
| 90243 | i64 iA; /* Integer value of left operand */ |
| 90244 | i64 iB; /* Integer value of right operand */ |
| 90245 | double rA; /* Real value of left operand */ |
| 90246 | double rB; /* Real value of right operand */ |
| 90247 | |
| 90248 | pIn1 = &aMem[pOp->p1]; |
| 90249 | type1 = pIn1->flags; |
| 90250 | pIn2 = &aMem[pOp->p2]; |
| 90251 | type2 = pIn2->flags; |
| 90252 | pOut = &aMem[pOp->p3]; |
| 90253 | if( (type1 & type2 & MEM_Int)!=0 ){ |
| 90254 | int_math: |
| 90255 | iA = pIn1->u.i; |
| 90256 | iB = pIn2->u.i; |
| 90257 | switch( pOp->opcode ){ |
| 90258 | case OP_Add: if( sqlite3AddInt64(&iB,iA) ) goto fp_math; break; |
| 90259 | case OP_Subtract: if( sqlite3SubInt64(&iB,iA) ) goto fp_math; break; |
| @@ -90057,13 +90271,16 @@ | |
| 90271 | break; |
| 90272 | } |
| 90273 | } |
| 90274 | pOut->u.i = iB; |
| 90275 | MemSetTypeFlag(pOut, MEM_Int); |
| 90276 | }else if( ((type1 | type2) & MEM_Null)!=0 ){ |
| 90277 | goto arithmetic_result_is_null; |
| 90278 | }else{ |
| 90279 | type1 = numericType(pIn1); |
| 90280 | type2 = numericType(pIn2); |
| 90281 | if( (type1 & type2 & MEM_Int)!=0 ) goto int_math; |
| 90282 | fp_math: |
| 90283 | rA = sqlite3VdbeRealValue(pIn1); |
| 90284 | rB = sqlite3VdbeRealValue(pIn2); |
| 90285 | switch( pOp->opcode ){ |
| 90286 | case OP_Add: rB += rA; break; |
| @@ -90929,15 +91146,18 @@ | |
| 91146 | ** |
| 91147 | ** Check the cursor P1 to see if it is currently pointing at a NULL row. |
| 91148 | ** If it is, then set register P3 to NULL and jump immediately to P2. |
| 91149 | ** If P1 is not on a NULL row, then fall through without making any |
| 91150 | ** changes. |
| 91151 | ** |
| 91152 | ** If P1 is not an open cursor, then this opcode is a no-op. |
| 91153 | */ |
| 91154 | case OP_IfNullRow: { /* jump */ |
| 91155 | VdbeCursor *pC; |
| 91156 | assert( pOp->p1>=0 && pOp->p1<p->nCursor ); |
| 91157 | pC = p->apCsr[pOp->p1]; |
| 91158 | if( ALWAYS(pC) && pC->nullRow ){ |
| 91159 | sqlite3VdbeMemSetNull(aMem + pOp->p3); |
| 91160 | goto jump_to_p2; |
| 91161 | } |
| 91162 | break; |
| 91163 | } |
| @@ -92249,11 +92469,11 @@ | |
| 92469 | assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) ); |
| 92470 | /* See note about index shifting on OP_ReadCookie */ |
| 92471 | rc = sqlite3BtreeUpdateMeta(pDb->pBt, pOp->p2, pOp->p3); |
| 92472 | if( pOp->p2==BTREE_SCHEMA_VERSION ){ |
| 92473 | /* When the schema cookie changes, record the new cookie internally */ |
| 92474 | *(u32*)&pDb->pSchema->schema_cookie = *(u32*)&pOp->p3 - pOp->p5; |
| 92475 | db->mDbFlags |= DBFLAG_SchemaChange; |
| 92476 | sqlite3FkClearTriggerCache(db, pOp->p1); |
| 92477 | }else if( pOp->p2==BTREE_FILE_FORMAT ){ |
| 92478 | /* Record changes in the file format */ |
| 92479 | pDb->pSchema->file_format = pOp->p3; |
| @@ -93040,11 +93260,11 @@ | |
| 93260 | ** |
| 93261 | ** <li> If the cursor is successfully moved to the target row by 0 or more |
| 93262 | ** sqlite3BtreeNext() calls, then jump to This.P2, which will land just |
| 93263 | ** past the OP_IdxGT or OP_IdxGE opcode that follows the OP_SeekGE. |
| 93264 | ** |
| 93265 | ** <li> If the cursor ends up past the target row (indicating that the target |
| 93266 | ** row does not exist in the btree) then jump to SeekOP.P2. |
| 93267 | ** </ol> |
| 93268 | */ |
| 93269 | case OP_SeekScan: { |
| 93270 | VdbeCursor *pC; |
| @@ -94376,11 +94596,13 @@ | |
| 94596 | rc = sqlite3VdbeSorterNext(db, pC); |
| 94597 | goto next_tail; |
| 94598 | |
| 94599 | case OP_Prev: /* jump */ |
| 94600 | assert( pOp->p1>=0 && pOp->p1<p->nCursor ); |
| 94601 | assert( pOp->p5==0 |
| 94602 | || pOp->p5==SQLITE_STMTSTATUS_FULLSCAN_STEP |
| 94603 | || pOp->p5==SQLITE_STMTSTATUS_AUTOINDEX); |
| 94604 | pC = p->apCsr[pOp->p1]; |
| 94605 | assert( pC!=0 ); |
| 94606 | assert( pC->deferredMoveto==0 ); |
| 94607 | assert( pC->eCurType==CURTYPE_BTREE ); |
| 94608 | assert( pC->seekOp==OP_SeekLT || pC->seekOp==OP_SeekLE |
| @@ -94389,11 +94611,13 @@ | |
| 94611 | rc = sqlite3BtreePrevious(pC->uc.pCursor, pOp->p3); |
| 94612 | goto next_tail; |
| 94613 | |
| 94614 | case OP_Next: /* jump */ |
| 94615 | assert( pOp->p1>=0 && pOp->p1<p->nCursor ); |
| 94616 | assert( pOp->p5==0 |
| 94617 | || pOp->p5==SQLITE_STMTSTATUS_FULLSCAN_STEP |
| 94618 | || pOp->p5==SQLITE_STMTSTATUS_AUTOINDEX); |
| 94619 | pC = p->apCsr[pOp->p1]; |
| 94620 | assert( pC!=0 ); |
| 94621 | assert( pC->deferredMoveto==0 ); |
| 94622 | assert( pC->eCurType==CURTYPE_BTREE ); |
| 94623 | assert( pC->seekOp==OP_SeekGT || pC->seekOp==OP_SeekGE |
| @@ -94596,14 +94820,14 @@ | |
| 94820 | |
| 94821 | /* The IdxRowid and Seek opcodes are combined because of the commonality |
| 94822 | ** of sqlite3VdbeCursorRestore() and sqlite3VdbeIdxRowid(). */ |
| 94823 | rc = sqlite3VdbeCursorRestore(pC); |
| 94824 | |
| 94825 | /* sqlite3VdbeCursorRestore() may fail if the cursor has been disturbed |
| 94826 | ** since it was last positioned and an error (e.g. OOM or an IO error) |
| 94827 | ** occurs while trying to reposition it. */ |
| 94828 | if( rc!=SQLITE_OK ) goto abort_due_to_error; |
| 94829 | |
| 94830 | if( !pC->nullRow ){ |
| 94831 | rowid = 0; /* Not needed. Only used to silence a warning. */ |
| 94832 | rc = sqlite3VdbeIdxRowid(db, pC->uc.pCursor, &rowid); |
| 94833 | if( rc!=SQLITE_OK ){ |
| @@ -95501,11 +95725,11 @@ | |
| 95725 | |
| 95726 | /* Opcode: OffsetLimit P1 P2 P3 * * |
| 95727 | ** Synopsis: if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1) |
| 95728 | ** |
| 95729 | ** This opcode performs a commonly used computation associated with |
| 95730 | ** LIMIT and OFFSET processing. r[P1] holds the limit counter. r[P3] |
| 95731 | ** holds the offset counter. The opcode computes the combined value |
| 95732 | ** of the LIMIT and OFFSET and stores that value in r[P2]. The r[P2] |
| 95733 | ** value computed is the total number of rows that will need to be |
| 95734 | ** visited in order to complete the query. |
| 95735 | ** |
| @@ -101098,10 +101322,12 @@ | |
| 101322 | sqlite3_file *pJfd, /* Preallocated, blank file handle */ |
| 101323 | int flags, /* Opening flags */ |
| 101324 | int nSpill /* Bytes buffered before opening the file */ |
| 101325 | ){ |
| 101326 | MemJournal *p = (MemJournal*)pJfd; |
| 101327 | |
| 101328 | assert( zName || nSpill<0 || (flags & SQLITE_OPEN_EXCLUSIVE) ); |
| 101329 | |
| 101330 | /* Zero the file-handle object. If nSpill was passed zero, initialize |
| 101331 | ** it using the sqlite3OsOpen() function of the underlying VFS. In this |
| 101332 | ** case none of the code in this module is executed as a result of calls |
| 101333 | ** made on the journal file-handle. */ |
| @@ -101526,37 +101752,25 @@ | |
| 101752 | pDup = sqlite3ExprDup(db, pOrig, 0); |
| 101753 | if( db->mallocFailed ){ |
| 101754 | sqlite3ExprDelete(db, pDup); |
| 101755 | pDup = 0; |
| 101756 | }else{ |
| 101757 | Expr temp; |
| 101758 | incrAggFunctionDepth(pDup, nSubquery); |
| 101759 | if( pExpr->op==TK_COLLATE ){ |
| 101760 | assert( !ExprHasProperty(pExpr, EP_IntValue) ); |
| 101761 | pDup = sqlite3ExprAddCollateString(pParse, pDup, pExpr->u.zToken); |
| 101762 | } |
| 101763 | memcpy(&temp, pDup, sizeof(Expr)); |
| 101764 | memcpy(pDup, pExpr, sizeof(Expr)); |
| 101765 | memcpy(pExpr, &temp, sizeof(Expr)); |
| 101766 | if( ExprHasProperty(pExpr, EP_WinFunc) ){ |
| 101767 | if( ALWAYS(pExpr->y.pWin!=0) ){ |
| 101768 | pExpr->y.pWin->pOwner = pExpr; |
| 101769 | } |
| 101770 | } |
| 101771 | sqlite3ExprDeferredDelete(pParse, pDup); |
| 101772 | } |
| 101773 | } |
| 101774 | |
| 101775 | /* |
| 101776 | ** Subqueries stores the original database, table and column names for their |
| @@ -101755,11 +101969,11 @@ | |
| 101969 | for(i=0, pItem=pSrcList->a; i<pSrcList->nSrc; i++, pItem++){ |
| 101970 | u8 hCol; |
| 101971 | pTab = pItem->pTab; |
| 101972 | assert( pTab!=0 && pTab->zName!=0 ); |
| 101973 | assert( pTab->nCol>0 || pParse->nErr ); |
| 101974 | assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) ); |
| 101975 | if( pItem->fg.isNestedFrom ){ |
| 101976 | /* In this case, pItem is a subquery that has been formed from a |
| 101977 | ** parenthesized subset of the FROM clause terms. Example: |
| 101978 | ** .... FROM t1 LEFT JOIN (t2 RIGHT JOIN t3 USING(x)) USING(y) ... |
| 101979 | ** \_________________________/ |
| @@ -103265,12 +103479,12 @@ | |
| 103479 | */ |
| 103480 | assert( (sNC.ncFlags & (NC_UAggInfo|NC_UUpsert|NC_UBaseReg))==0 ); |
| 103481 | sNC.uNC.pEList = p->pEList; |
| 103482 | sNC.ncFlags |= NC_UEList; |
| 103483 | if( p->pHaving ){ |
| 103484 | if( (p->selFlags & SF_Aggregate)==0 ){ |
| 103485 | sqlite3ErrorMsg(pParse, "HAVING clause on a non-aggregate query"); |
| 103486 | return WRC_Abort; |
| 103487 | } |
| 103488 | if( sqlite3ResolveExprNames(&sNC, p->pHaving) ) return WRC_Abort; |
| 103489 | } |
| 103490 | if( sqlite3ResolveExprNames(&sNC, p->pWhere) ) return WRC_Abort; |
| @@ -104361,11 +104575,13 @@ | |
| 104575 | ** Also propagate EP_Propagate flags up from Expr.x.pList to Expr.flags, |
| 104576 | ** if appropriate. |
| 104577 | */ |
| 104578 | static void exprSetHeight(Expr *p){ |
| 104579 | int nHeight = p->pLeft ? p->pLeft->nHeight : 0; |
| 104580 | if( NEVER(p->pRight) && p->pRight->nHeight>nHeight ){ |
| 104581 | nHeight = p->pRight->nHeight; |
| 104582 | } |
| 104583 | if( ExprUseXSelect(p) ){ |
| 104584 | heightOfSelect(p->x.pSelect, &nHeight); |
| 104585 | }else if( p->x.pList ){ |
| 104586 | heightOfExprList(p->x.pList, &nHeight); |
| 104587 | p->flags |= EP_Propagate & sqlite3ExprListFlags(p->x.pList); |
| @@ -104504,19 +104720,30 @@ | |
| 104720 | if( pRoot==0 ){ |
| 104721 | assert( db->mallocFailed ); |
| 104722 | sqlite3ExprDelete(db, pLeft); |
| 104723 | sqlite3ExprDelete(db, pRight); |
| 104724 | }else{ |
| 104725 | assert( ExprUseXList(pRoot) ); |
| 104726 | assert( pRoot->x.pSelect==0 ); |
| 104727 | if( pRight ){ |
| 104728 | pRoot->pRight = pRight; |
| 104729 | pRoot->flags |= EP_Propagate & pRight->flags; |
| 104730 | #if SQLITE_MAX_EXPR_DEPTH>0 |
| 104731 | pRoot->nHeight = pRight->nHeight+1; |
| 104732 | }else{ |
| 104733 | pRoot->nHeight = 1; |
| 104734 | #endif |
| 104735 | } |
| 104736 | if( pLeft ){ |
| 104737 | pRoot->pLeft = pLeft; |
| 104738 | pRoot->flags |= EP_Propagate & pLeft->flags; |
| 104739 | #if SQLITE_MAX_EXPR_DEPTH>0 |
| 104740 | if( pLeft->nHeight>=pRoot->nHeight ){ |
| 104741 | pRoot->nHeight = pLeft->nHeight+1; |
| 104742 | } |
| 104743 | #endif |
| 104744 | } |
| 104745 | } |
| 104746 | } |
| 104747 | |
| 104748 | /* |
| 104749 | ** Allocate an Expr node which joins as many as two subtrees. |
| @@ -104798,10 +105025,11 @@ | |
| 105025 | /* |
| 105026 | ** Recursively delete an expression tree. |
| 105027 | */ |
| 105028 | static SQLITE_NOINLINE void sqlite3ExprDeleteNN(sqlite3 *db, Expr *p){ |
| 105029 | assert( p!=0 ); |
| 105030 | assert( db!=0 ); |
| 105031 | assert( !ExprUseUValue(p) || p->u.iValue>=0 ); |
| 105032 | assert( !ExprUseYWin(p) || !ExprUseYSub(p) ); |
| 105033 | assert( !ExprUseYWin(p) || p->y.pWin!=0 || db->mallocFailed ); |
| 105034 | assert( p->op!=TK_FUNCTION || !ExprUseYSub(p) ); |
| 105035 | #ifdef SQLITE_DEBUG |
| @@ -104829,16 +105057,12 @@ | |
| 105057 | sqlite3WindowDelete(db, p->y.pWin); |
| 105058 | } |
| 105059 | #endif |
| 105060 | } |
| 105061 | } |
| 105062 | if( !ExprHasProperty(p, EP_Static) ){ |
| 105063 | sqlite3DbNNFreeNN(db, p); |
| 105064 | } |
| 105065 | } |
| 105066 | SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3 *db, Expr *p){ |
| 105067 | if( p ) sqlite3ExprDeleteNN(db, p); |
| 105068 | } |
| @@ -104865,12 +105089,13 @@ | |
| 105089 | ** |
| 105090 | ** The deferred delete is (currently) implemented by adding the |
| 105091 | ** pExpr to the pParse->pConstExpr list with a register number of 0. |
| 105092 | */ |
| 105093 | SQLITE_PRIVATE void sqlite3ExprDeferredDelete(Parse *pParse, Expr *pExpr){ |
| 105094 | sqlite3ParserAddCleanup(pParse, |
| 105095 | (void(*)(sqlite3*,void*))sqlite3ExprDelete, |
| 105096 | pExpr); |
| 105097 | } |
| 105098 | |
| 105099 | /* Invoke sqlite3RenameExprUnmap() and sqlite3ExprDelete() on the |
| 105100 | ** expression. |
| 105101 | */ |
| @@ -104940,11 +105165,10 @@ | |
| 105165 | ){ |
| 105166 | nSize = EXPR_FULLSIZE; |
| 105167 | }else{ |
| 105168 | assert( !ExprHasProperty(p, EP_TokenOnly|EP_Reduced) ); |
| 105169 | assert( !ExprHasProperty(p, EP_OuterON) ); |
| 105170 | assert( !ExprHasVVAProperty(p, EP_NoReduce) ); |
| 105171 | if( p->pLeft || p->x.pList ){ |
| 105172 | nSize = EXPR_REDUCEDSIZE | EP_Reduced; |
| 105173 | }else{ |
| 105174 | assert( p->pRight==0 ); |
| @@ -105044,11 +105268,11 @@ | |
| 105268 | memset(&zAlloc[nSize], 0, EXPR_FULLSIZE-nSize); |
| 105269 | } |
| 105270 | } |
| 105271 | |
| 105272 | /* Set the EP_Reduced, EP_TokenOnly, and EP_Static flags appropriately. */ |
| 105273 | pNew->flags &= ~(EP_Reduced|EP_TokenOnly|EP_Static); |
| 105274 | pNew->flags |= nStructSize & (EP_Reduced|EP_TokenOnly); |
| 105275 | pNew->flags |= staticFlag; |
| 105276 | ExprClearVVAProperties(pNew); |
| 105277 | if( dupFlags ){ |
| 105278 | ExprSetVVAProperty(pNew, EP_Immutable); |
| @@ -105620,16 +105844,17 @@ | |
| 105844 | */ |
| 105845 | static SQLITE_NOINLINE void exprListDeleteNN(sqlite3 *db, ExprList *pList){ |
| 105846 | int i = pList->nExpr; |
| 105847 | struct ExprList_item *pItem = pList->a; |
| 105848 | assert( pList->nExpr>0 ); |
| 105849 | assert( db!=0 ); |
| 105850 | do{ |
| 105851 | sqlite3ExprDelete(db, pItem->pExpr); |
| 105852 | if( pItem->zEName ) sqlite3DbNNFreeNN(db, pItem->zEName); |
| 105853 | pItem++; |
| 105854 | }while( --i>0 ); |
| 105855 | sqlite3DbNNFreeNN(db, pList); |
| 105856 | } |
| 105857 | SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){ |
| 105858 | if( pList ) exprListDeleteNN(db, pList); |
| 105859 | } |
| 105860 | |
| @@ -106916,11 +107141,11 @@ | |
| 107141 | if( pLimit ){ |
| 107142 | pLimit->affExpr = SQLITE_AFF_NUMERIC; |
| 107143 | pLimit = sqlite3PExpr(pParse, TK_NE, |
| 107144 | sqlite3ExprDup(db, pSel->pLimit->pLeft, 0), pLimit); |
| 107145 | } |
| 107146 | sqlite3ExprDeferredDelete(pParse, pSel->pLimit->pLeft); |
| 107147 | pSel->pLimit->pLeft = pLimit; |
| 107148 | }else{ |
| 107149 | /* If there is no pre-existing limit add a limit of 1 */ |
| 107150 | pLimit = sqlite3Expr(pParse->db, TK_INTEGER, "1"); |
| 107151 | pSel->pLimit = sqlite3PExpr(pParse, TK_LIMIT, pLimit, 0); |
| @@ -107430,11 +107655,11 @@ | |
| 107655 | u8 p5 /* P5 value for OP_Column + FLAGS */ |
| 107656 | ){ |
| 107657 | assert( pParse->pVdbe!=0 ); |
| 107658 | sqlite3ExprCodeGetColumnOfTable(pParse->pVdbe, pTab, iTable, iColumn, iReg); |
| 107659 | if( p5 ){ |
| 107660 | VdbeOp *pOp = sqlite3VdbeGetLastOp(pParse->pVdbe); |
| 107661 | if( pOp->opcode==OP_Column ) pOp->p5 = p5; |
| 107662 | } |
| 107663 | return iReg; |
| 107664 | } |
| 107665 | |
| @@ -107499,11 +107724,11 @@ | |
| 107724 | /* |
| 107725 | ** If the last opcode is a OP_Copy, then set the do-not-merge flag (p5) |
| 107726 | ** so that a subsequent copy will not be merged into this one. |
| 107727 | */ |
| 107728 | static void setDoNotMergeFlagOnCopy(Vdbe *v){ |
| 107729 | if( sqlite3VdbeGetLastOp(v)->opcode==OP_Copy ){ |
| 107730 | sqlite3VdbeChangeP5(v, 1); /* Tag trailing OP_Copy as not mergable */ |
| 107731 | } |
| 107732 | } |
| 107733 | |
| 107734 | /* |
| @@ -107670,11 +107895,11 @@ | |
| 107895 | Table *pTab = pCol->pTab; |
| 107896 | sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdxPTab, |
| 107897 | pCol->iSorterColumn, target); |
| 107898 | if( pCol->iColumn<0 ){ |
| 107899 | VdbeComment((v,"%s.rowid",pTab->zName)); |
| 107900 | }else if( ALWAYS(pTab!=0) ){ |
| 107901 | VdbeComment((v,"%s.%s", |
| 107902 | pTab->zName, pTab->aCol[pCol->iColumn].zCnName)); |
| 107903 | if( pTab->aCol[pCol->iColumn].affinity==SQLITE_AFF_REAL ){ |
| 107904 | sqlite3VdbeAddOp1(v, OP_RealAffinity, target); |
| 107905 | } |
| @@ -108265,10 +108490,25 @@ | |
| 108490 | ** on a LEFT JOIN NULL row. |
| 108491 | */ |
| 108492 | case TK_IF_NULL_ROW: { |
| 108493 | int addrINR; |
| 108494 | u8 okConstFactor = pParse->okConstFactor; |
| 108495 | AggInfo *pAggInfo = pExpr->pAggInfo; |
| 108496 | if( pAggInfo ){ |
| 108497 | assert( pExpr->iAgg>=0 && pExpr->iAgg<pAggInfo->nColumn ); |
| 108498 | if( !pAggInfo->directMode ){ |
| 108499 | inReg = pAggInfo->aCol[pExpr->iAgg].iMem; |
| 108500 | break; |
| 108501 | } |
| 108502 | if( pExpr->pAggInfo->useSortingIdx ){ |
| 108503 | sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdxPTab, |
| 108504 | pAggInfo->aCol[pExpr->iAgg].iSorterColumn, |
| 108505 | target); |
| 108506 | inReg = target; |
| 108507 | break; |
| 108508 | } |
| 108509 | } |
| 108510 | addrINR = sqlite3VdbeAddOp1(v, OP_IfNullRow, pExpr->iTable); |
| 108511 | /* Temporarily disable factoring of constant expressions, since |
| 108512 | ** even though expressions may appear to be constant, they are not |
| 108513 | ** really constant because they originate from the right-hand side |
| 108514 | ** of a LEFT JOIN. */ |
| @@ -108606,11 +108846,11 @@ | |
| 108846 | }else{ |
| 108847 | int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i); |
| 108848 | if( inReg!=target+i ){ |
| 108849 | VdbeOp *pOp; |
| 108850 | if( copyOp==OP_Copy |
| 108851 | && (pOp=sqlite3VdbeGetLastOp(v))->opcode==OP_Copy |
| 108852 | && pOp->p1+pOp->p3+1==inReg |
| 108853 | && pOp->p2+pOp->p3+1==target+i |
| 108854 | && pOp->p5==0 /* The do-not-merge flag must be clear */ |
| 108855 | ){ |
| 108856 | pOp->p3++; |
| @@ -109642,10 +109882,11 @@ | |
| 109882 | ** fact is exploited for efficiency. |
| 109883 | */ |
| 109884 | SQLITE_PRIVATE int sqlite3ReferencesSrcList(Parse *pParse, Expr *pExpr, SrcList *pSrcList){ |
| 109885 | Walker w; |
| 109886 | struct RefSrcList x; |
| 109887 | assert( pParse->db!=0 ); |
| 109888 | memset(&w, 0, sizeof(w)); |
| 109889 | memset(&x, 0, sizeof(x)); |
| 109890 | w.xExprCallback = exprRefToSrcList; |
| 109891 | w.xSelectCallback = selectRefEnter; |
| 109892 | w.xSelectCallback2 = selectRefLeave; |
| @@ -109658,11 +109899,11 @@ | |
| 109899 | #ifndef SQLITE_OMIT_WINDOWFUNC |
| 109900 | if( ExprHasProperty(pExpr, EP_WinFunc) ){ |
| 109901 | sqlite3WalkExpr(&w, pExpr->y.pWin->pFilter); |
| 109902 | } |
| 109903 | #endif |
| 109904 | if( x.aiExclude ) sqlite3DbNNFreeNN(pParse->db, x.aiExclude); |
| 109905 | if( w.eCode & 0x01 ){ |
| 109906 | return 1; |
| 109907 | }else if( w.eCode ){ |
| 109908 | return 0; |
| 109909 | }else{ |
| @@ -109689,21 +109930,22 @@ | |
| 109930 | ){ |
| 109931 | AggInfo *pAggInfo = pExpr->pAggInfo; |
| 109932 | int iAgg = pExpr->iAgg; |
| 109933 | Parse *pParse = pWalker->pParse; |
| 109934 | sqlite3 *db = pParse->db; |
| 109935 | if( pExpr->op!=TK_AGG_FUNCTION ){ |
| 109936 | assert( pExpr->op==TK_AGG_COLUMN || pExpr->op==TK_IF_NULL_ROW ); |
| 109937 | assert( iAgg>=0 && iAgg<pAggInfo->nColumn ); |
| 109938 | if( pAggInfo->aCol[iAgg].pCExpr==pExpr ){ |
| 109939 | pExpr = sqlite3ExprDup(db, pExpr, 0); |
| 109940 | if( pExpr ){ |
| 109941 | pAggInfo->aCol[iAgg].pCExpr = pExpr; |
| 109942 | sqlite3ExprDeferredDelete(pParse, pExpr); |
| 109943 | } |
| 109944 | } |
| 109945 | }else{ |
| 109946 | assert( pExpr->op==TK_AGG_FUNCTION ); |
| 109947 | assert( iAgg>=0 && iAgg<pAggInfo->nFunc ); |
| 109948 | if( pAggInfo->aFunc[iAgg].pFExpr==pExpr ){ |
| 109949 | pExpr = sqlite3ExprDup(db, pExpr, 0); |
| 109950 | if( pExpr ){ |
| 109951 | pAggInfo->aFunc[iAgg].pFExpr = pExpr; |
| @@ -109770,14 +110012,16 @@ | |
| 110012 | SrcList *pSrcList = pNC->pSrcList; |
| 110013 | AggInfo *pAggInfo = pNC->uNC.pAggInfo; |
| 110014 | |
| 110015 | assert( pNC->ncFlags & NC_UAggInfo ); |
| 110016 | switch( pExpr->op ){ |
| 110017 | case TK_IF_NULL_ROW: |
| 110018 | case TK_AGG_COLUMN: |
| 110019 | case TK_COLUMN: { |
| 110020 | testcase( pExpr->op==TK_AGG_COLUMN ); |
| 110021 | testcase( pExpr->op==TK_COLUMN ); |
| 110022 | testcase( pExpr->op==TK_IF_NULL_ROW ); |
| 110023 | /* Check to see if the column is in one of the tables in the FROM |
| 110024 | ** clause of the aggregate query */ |
| 110025 | if( ALWAYS(pSrcList!=0) ){ |
| 110026 | SrcItem *pItem = pSrcList->a; |
| 110027 | for(i=0; i<pSrcList->nSrc; i++, pItem++){ |
| @@ -109791,12 +110035,14 @@ | |
| 110035 | ** is not an entry there already. |
| 110036 | */ |
| 110037 | int k; |
| 110038 | pCol = pAggInfo->aCol; |
| 110039 | for(k=0; k<pAggInfo->nColumn; k++, pCol++){ |
| 110040 | if( pCol->iTable==pExpr->iTable |
| 110041 | && pCol->iColumn==pExpr->iColumn |
| 110042 | && pExpr->op!=TK_IF_NULL_ROW |
| 110043 | ){ |
| 110044 | break; |
| 110045 | } |
| 110046 | } |
| 110047 | if( (k>=pAggInfo->nColumn) |
| 110048 | && (k = addAggInfoColumn(pParse->db, pAggInfo))>=0 |
| @@ -109807,19 +110053,21 @@ | |
| 110053 | pCol->iTable = pExpr->iTable; |
| 110054 | pCol->iColumn = pExpr->iColumn; |
| 110055 | pCol->iMem = ++pParse->nMem; |
| 110056 | pCol->iSorterColumn = -1; |
| 110057 | pCol->pCExpr = pExpr; |
| 110058 | if( pAggInfo->pGroupBy && pExpr->op!=TK_IF_NULL_ROW ){ |
| 110059 | int j, n; |
| 110060 | ExprList *pGB = pAggInfo->pGroupBy; |
| 110061 | struct ExprList_item *pTerm = pGB->a; |
| 110062 | n = pGB->nExpr; |
| 110063 | for(j=0; j<n; j++, pTerm++){ |
| 110064 | Expr *pE = pTerm->pExpr; |
| 110065 | if( pE->op==TK_COLUMN |
| 110066 | && pE->iTable==pExpr->iTable |
| 110067 | && pE->iColumn==pExpr->iColumn |
| 110068 | ){ |
| 110069 | pCol->iSorterColumn = j; |
| 110070 | break; |
| 110071 | } |
| 110072 | } |
| 110073 | } |
| @@ -109832,11 +110080,13 @@ | |
| 110080 | ** Convert the pExpr to be a TK_AGG_COLUMN referring to that |
| 110081 | ** pAggInfo->aCol[] entry. |
| 110082 | */ |
| 110083 | ExprSetVVAProperty(pExpr, EP_NoReduce); |
| 110084 | pExpr->pAggInfo = pAggInfo; |
| 110085 | if( pExpr->op==TK_COLUMN ){ |
| 110086 | pExpr->op = TK_AGG_COLUMN; |
| 110087 | } |
| 110088 | pExpr->iAgg = (i16)k; |
| 110089 | break; |
| 110090 | } /* endif pExpr->iTable==pItem->iCursor */ |
| 110091 | } /* end loop over pSrcList */ |
| 110092 | } |
| @@ -115254,10 +115504,11 @@ | |
| 115504 | ** no VDBE code was generated. |
| 115505 | */ |
| 115506 | SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){ |
| 115507 | sqlite3 *db; |
| 115508 | Vdbe *v; |
| 115509 | int iDb, i; |
| 115510 | |
| 115511 | assert( pParse->pToplevel==0 ); |
| 115512 | db = pParse->db; |
| 115513 | assert( db->pParse==pParse ); |
| 115514 | if( pParse->nested ) return; |
| @@ -115283,11 +115534,10 @@ | |
| 115534 | || sqlite3VdbeAssertMayAbort(v, pParse->mayAbort)); |
| 115535 | if( v ){ |
| 115536 | if( pParse->bReturning ){ |
| 115537 | Returning *pReturning = pParse->u1.pReturning; |
| 115538 | int addrRewind; |
| 115539 | int reg; |
| 115540 | |
| 115541 | if( pReturning->nRetCol ){ |
| 115542 | sqlite3VdbeAddOp0(v, OP_FkCheck); |
| 115543 | addrRewind = |
| @@ -115320,80 +115570,73 @@ | |
| 115570 | ** (Bit 0 is for main, bit 1 is for temp, and so forth.) Bits are |
| 115571 | ** set for each database that is used. Generate code to start a |
| 115572 | ** transaction on each used database and to verify the schema cookie |
| 115573 | ** on each used database. |
| 115574 | */ |
| 115575 | assert( pParse->nErr>0 || sqlite3VdbeGetOp(v, 0)->opcode==OP_Init ); |
| 115576 | sqlite3VdbeJumpHere(v, 0); |
| 115577 | assert( db->nDb>0 ); |
| 115578 | iDb = 0; |
| 115579 | do{ |
| 115580 | Schema *pSchema; |
| 115581 | if( DbMaskTest(pParse->cookieMask, iDb)==0 ) continue; |
| 115582 | sqlite3VdbeUsesBtree(v, iDb); |
| 115583 | pSchema = db->aDb[iDb].pSchema; |
| 115584 | sqlite3VdbeAddOp4Int(v, |
| 115585 | OP_Transaction, /* Opcode */ |
| 115586 | iDb, /* P1 */ |
| 115587 | DbMaskTest(pParse->writeMask,iDb), /* P2 */ |
| 115588 | pSchema->schema_cookie, /* P3 */ |
| 115589 | pSchema->iGeneration /* P4 */ |
| 115590 | ); |
| 115591 | if( db->init.busy==0 ) sqlite3VdbeChangeP5(v, 1); |
| 115592 | VdbeComment((v, |
| 115593 | "usesStmtJournal=%d", pParse->mayAbort && pParse->isMultiWrite)); |
| 115594 | }while( ++iDb<db->nDb ); |
| 115595 | #ifndef SQLITE_OMIT_VIRTUALTABLE |
| 115596 | for(i=0; i<pParse->nVtabLock; i++){ |
| 115597 | char *vtab = (char *)sqlite3GetVTable(db, pParse->apVtabLock[i]); |
| 115598 | sqlite3VdbeAddOp4(v, OP_VBegin, 0, 0, 0, vtab, P4_VTAB); |
| 115599 | } |
| 115600 | pParse->nVtabLock = 0; |
| 115601 | #endif |
| 115602 | |
| 115603 | /* Once all the cookies have been verified and transactions opened, |
| 115604 | ** obtain the required table-locks. This is a no-op unless the |
| 115605 | ** shared-cache feature is enabled. |
| 115606 | */ |
| 115607 | codeTableLocks(pParse); |
| 115608 | |
| 115609 | /* Initialize any AUTOINCREMENT data structures required. |
| 115610 | */ |
| 115611 | sqlite3AutoincrementBegin(pParse); |
| 115612 | |
| 115613 | /* Code constant expressions that where factored out of inner loops. |
| 115614 | ** |
| 115615 | ** The pConstExpr list might also contain expressions that we simply |
| 115616 | ** want to keep around until the Parse object is deleted. Such |
| 115617 | ** expressions have iConstExprReg==0. Do not generate code for |
| 115618 | ** those expressions, of course. |
| 115619 | */ |
| 115620 | if( pParse->pConstExpr ){ |
| 115621 | ExprList *pEL = pParse->pConstExpr; |
| 115622 | pParse->okConstFactor = 0; |
| 115623 | for(i=0; i<pEL->nExpr; i++){ |
| 115624 | int iReg = pEL->a[i].u.iConstExprReg; |
| 115625 | sqlite3ExprCode(pParse, pEL->a[i].pExpr, iReg); |
| 115626 | } |
| 115627 | } |
| 115628 | |
| 115629 | if( pParse->bReturning ){ |
| 115630 | Returning *pRet = pParse->u1.pReturning; |
| 115631 | if( pRet->nRetCol ){ |
| 115632 | sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pRet->iRetCur, pRet->nRetCol); |
| 115633 | } |
| 115634 | } |
| 115635 | |
| 115636 | /* Finally, jump back to the beginning of the executable code. */ |
| 115637 | sqlite3VdbeGoto(v, 1); |
| 115638 | } |
| 115639 | |
| 115640 | /* Get the VDBE program ready for execution |
| 115641 | */ |
| 115642 | assert( v!=0 || pParse->nErr ); |
| @@ -115445,12 +115688,10 @@ | |
| 115688 | pParse->nested++; |
| 115689 | memcpy(saveBuf, PARSE_TAIL(pParse), PARSE_TAIL_SZ); |
| 115690 | memset(PARSE_TAIL(pParse), 0, PARSE_TAIL_SZ); |
| 115691 | db->mDbFlags |= DBFLAG_PreferBuiltin; |
| 115692 | sqlite3RunParser(pParse, zSql); |
| 115693 | db->mDbFlags = savedDbFlags; |
| 115694 | sqlite3DbFree(db, zSql); |
| 115695 | memcpy(PARSE_TAIL(pParse), saveBuf, PARSE_TAIL_SZ); |
| 115696 | pParse->nested--; |
| 115697 | } |
| @@ -115898,20 +116139,21 @@ | |
| 116139 | */ |
| 116140 | SQLITE_PRIVATE void sqlite3DeleteColumnNames(sqlite3 *db, Table *pTable){ |
| 116141 | int i; |
| 116142 | Column *pCol; |
| 116143 | assert( pTable!=0 ); |
| 116144 | assert( db!=0 ); |
| 116145 | if( (pCol = pTable->aCol)!=0 ){ |
| 116146 | for(i=0; i<pTable->nCol; i++, pCol++){ |
| 116147 | assert( pCol->zCnName==0 || pCol->hName==sqlite3StrIHash(pCol->zCnName) ); |
| 116148 | sqlite3DbFree(db, pCol->zCnName); |
| 116149 | } |
| 116150 | sqlite3DbNNFreeNN(db, pTable->aCol); |
| 116151 | if( IsOrdinaryTable(pTable) ){ |
| 116152 | sqlite3ExprListDelete(db, pTable->u.tab.pDfltList); |
| 116153 | } |
| 116154 | if( db->pnBytesFreed==0 ){ |
| 116155 | pTable->aCol = 0; |
| 116156 | pTable->nCol = 0; |
| 116157 | if( IsOrdinaryTable(pTable) ){ |
| 116158 | pTable->u.tab.pDfltList = 0; |
| 116159 | } |
| @@ -115944,21 +116186,22 @@ | |
| 116186 | ** |
| 116187 | ** If malloc has already failed, it may be that it failed while allocating |
| 116188 | ** a Table object that was going to be marked ephemeral. So do not check |
| 116189 | ** that no lookaside memory is used in this case either. */ |
| 116190 | int nLookaside = 0; |
| 116191 | assert( db!=0 ); |
| 116192 | if( !db->mallocFailed && (pTable->tabFlags & TF_Ephemeral)==0 ){ |
| 116193 | nLookaside = sqlite3LookasideUsed(db, 0); |
| 116194 | } |
| 116195 | #endif |
| 116196 | |
| 116197 | /* Delete all indices associated with this table. */ |
| 116198 | for(pIndex = pTable->pIndex; pIndex; pIndex=pNext){ |
| 116199 | pNext = pIndex->pNext; |
| 116200 | assert( pIndex->pSchema==pTable->pSchema |
| 116201 | || (IsVirtual(pTable) && pIndex->idxType!=SQLITE_IDXTYPE_APPDEF) ); |
| 116202 | if( db->pnBytesFreed==0 && !IsVirtual(pTable) ){ |
| 116203 | char *zName = pIndex->zName; |
| 116204 | TESTONLY ( Index *pOld = ) sqlite3HashInsert( |
| 116205 | &pIndex->pSchema->idxHash, zName, 0 |
| 116206 | ); |
| 116207 | assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) ); |
| @@ -115991,12 +116234,13 @@ | |
| 116234 | /* Verify that no lookaside memory was used by schema tables */ |
| 116235 | assert( nLookaside==0 || nLookaside==sqlite3LookasideUsed(db,0) ); |
| 116236 | } |
| 116237 | SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3 *db, Table *pTable){ |
| 116238 | /* Do not delete the table until the reference count reaches zero. */ |
| 116239 | assert( db!=0 ); |
| 116240 | if( !pTable ) return; |
| 116241 | if( db->pnBytesFreed==0 && (--pTable->nTabRef)>0 ) return; |
| 116242 | deleteTable(db, pTable); |
| 116243 | } |
| 116244 | |
| 116245 | |
| 116246 | /* |
| @@ -118165,11 +118409,11 @@ | |
| 118409 | /* |
| 118410 | ** The Table structure pTable is really a VIEW. Fill in the names of |
| 118411 | ** the columns of the view in the pTable structure. Return the number |
| 118412 | ** of errors. If an error is seen leave an error message in pParse->zErrMsg. |
| 118413 | */ |
| 118414 | static SQLITE_NOINLINE int viewGetColumnNames(Parse *pParse, Table *pTable){ |
| 118415 | Table *pSelTab; /* A fake table from which we get the result set */ |
| 118416 | Select *pSel; /* Copy of the SELECT that implements the view */ |
| 118417 | int nErr = 0; /* Number of errors encountered */ |
| 118418 | sqlite3 *db = pParse->db; /* Database connection for malloc errors */ |
| 118419 | #ifndef SQLITE_OMIT_VIRTUALTABLE |
| @@ -118190,13 +118434,14 @@ | |
| 118434 | } |
| 118435 | #endif |
| 118436 | |
| 118437 | #ifndef SQLITE_OMIT_VIEW |
| 118438 | /* A positive nCol means the columns names for this view are |
| 118439 | ** already known. This routine is not called unless either the |
| 118440 | ** table is virtual or nCol is zero. |
| 118441 | */ |
| 118442 | assert( pTable->nCol<=0 ); |
| 118443 | |
| 118444 | /* A negative nCol is a special marker meaning that we are currently |
| 118445 | ** trying to compute the column names. If we enter this routine with |
| 118446 | ** a negative nCol, it means two or more views form a loop, like this: |
| 118447 | ** |
| @@ -118287,10 +118532,15 @@ | |
| 118532 | if( db->mallocFailed ){ |
| 118533 | sqlite3DeleteColumnNames(db, pTable); |
| 118534 | } |
| 118535 | #endif /* SQLITE_OMIT_VIEW */ |
| 118536 | return nErr; |
| 118537 | } |
| 118538 | SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){ |
| 118539 | assert( pTable!=0 ); |
| 118540 | if( !IsVirtual(pTable) && pTable->nCol>0 ) return 0; |
| 118541 | return viewGetColumnNames(pParse, pTable); |
| 118542 | } |
| 118543 | #endif /* !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) */ |
| 118544 | |
| 118545 | #ifndef SQLITE_OMIT_VIEW |
| 118546 | /* |
| @@ -119153,11 +119403,11 @@ | |
| 119403 | if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName,"index",pTab->zName) ){ |
| 119404 | goto exit_create_index; |
| 119405 | } |
| 119406 | if( !IN_RENAME_OBJECT ){ |
| 119407 | if( !db->init.busy ){ |
| 119408 | if( sqlite3FindTable(db, zName, pDb->zDbSName)!=0 ){ |
| 119409 | sqlite3ErrorMsg(pParse, "there is already a table named %s", zName); |
| 119410 | goto exit_create_index; |
| 119411 | } |
| 119412 | } |
| 119413 | if( sqlite3FindIndex(db, zName, pDb->zDbSName)!=0 ){ |
| @@ -119806,16 +120056,17 @@ | |
| 120056 | /* |
| 120057 | ** Delete an IdList. |
| 120058 | */ |
| 120059 | SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3 *db, IdList *pList){ |
| 120060 | int i; |
| 120061 | assert( db!=0 ); |
| 120062 | if( pList==0 ) return; |
| 120063 | assert( pList->eU4!=EU4_EXPR ); /* EU4_EXPR mode is not currently used */ |
| 120064 | for(i=0; i<pList->nId; i++){ |
| 120065 | sqlite3DbFree(db, pList->a[i].zName); |
| 120066 | } |
| 120067 | sqlite3DbNNFreeNN(db, pList); |
| 120068 | } |
| 120069 | |
| 120070 | /* |
| 120071 | ** Return the index in pList of the identifier named zId. Return -1 |
| 120072 | ** if not found. |
| @@ -120014,15 +120265,16 @@ | |
| 120265 | ** Delete an entire SrcList including all its substructure. |
| 120266 | */ |
| 120267 | SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3 *db, SrcList *pList){ |
| 120268 | int i; |
| 120269 | SrcItem *pItem; |
| 120270 | assert( db!=0 ); |
| 120271 | if( pList==0 ) return; |
| 120272 | for(pItem=pList->a, i=0; i<pList->nSrc; i++, pItem++){ |
| 120273 | if( pItem->zDatabase ) sqlite3DbNNFreeNN(db, pItem->zDatabase); |
| 120274 | if( pItem->zName ) sqlite3DbNNFreeNN(db, pItem->zName); |
| 120275 | if( pItem->zAlias ) sqlite3DbNNFreeNN(db, pItem->zAlias); |
| 120276 | if( pItem->fg.isIndexedBy ) sqlite3DbFree(db, pItem->u1.zIndexedBy); |
| 120277 | if( pItem->fg.isTabFunc ) sqlite3ExprListDelete(db, pItem->u1.pFuncArg); |
| 120278 | sqlite3DeleteTable(db, pItem->pTab); |
| 120279 | if( pItem->pSelect ) sqlite3SelectDelete(db, pItem->pSelect); |
| 120280 | if( pItem->fg.isUsing ){ |
| @@ -120029,11 +120281,11 @@ | |
| 120281 | sqlite3IdListDelete(db, pItem->u3.pUsing); |
| 120282 | }else if( pItem->u3.pOn ){ |
| 120283 | sqlite3ExprDelete(db, pItem->u3.pOn); |
| 120284 | } |
| 120285 | } |
| 120286 | sqlite3DbNNFreeNN(db, pList); |
| 120287 | } |
| 120288 | |
| 120289 | /* |
| 120290 | ** This routine is called by the parser to add a new term to the |
| 120291 | ** end of a growing FROM clause. The "p" parameter is the part of |
| @@ -121281,23 +121533,25 @@ | |
| 121533 | SQLITE_PRIVATE void sqlite3SchemaClear(void *p){ |
| 121534 | Hash temp1; |
| 121535 | Hash temp2; |
| 121536 | HashElem *pElem; |
| 121537 | Schema *pSchema = (Schema *)p; |
| 121538 | sqlite3 xdb; |
| 121539 | |
| 121540 | memset(&xdb, 0, sizeof(xdb)); |
| 121541 | temp1 = pSchema->tblHash; |
| 121542 | temp2 = pSchema->trigHash; |
| 121543 | sqlite3HashInit(&pSchema->trigHash); |
| 121544 | sqlite3HashClear(&pSchema->idxHash); |
| 121545 | for(pElem=sqliteHashFirst(&temp2); pElem; pElem=sqliteHashNext(pElem)){ |
| 121546 | sqlite3DeleteTrigger(&xdb, (Trigger*)sqliteHashData(pElem)); |
| 121547 | } |
| 121548 | sqlite3HashClear(&temp2); |
| 121549 | sqlite3HashInit(&pSchema->tblHash); |
| 121550 | for(pElem=sqliteHashFirst(&temp1); pElem; pElem=sqliteHashNext(pElem)){ |
| 121551 | Table *pTab = sqliteHashData(pElem); |
| 121552 | sqlite3DeleteTable(&xdb, pTab); |
| 121553 | } |
| 121554 | sqlite3HashClear(&temp1); |
| 121555 | sqlite3HashClear(&pSchema->fkeyHash); |
| 121556 | pSchema->pSeqTab = 0; |
| 121557 | if( pSchema->schemaFlags & DB_SchemaLoaded ){ |
| @@ -121392,22 +121646,46 @@ | |
| 121646 | ** A table is read-only if any of the following are true: |
| 121647 | ** |
| 121648 | ** 1) It is a virtual table and no implementation of the xUpdate method |
| 121649 | ** has been provided |
| 121650 | ** |
| 121651 | ** 2) A trigger is currently being coded and the table is a virtual table |
| 121652 | ** that is SQLITE_VTAB_DIRECTONLY or if PRAGMA trusted_schema=OFF and |
| 121653 | ** the table is not SQLITE_VTAB_INNOCUOUS. |
| 121654 | ** |
| 121655 | ** 3) It is a system table (i.e. sqlite_schema), this call is not |
| 121656 | ** part of a nested parse and writable_schema pragma has not |
| 121657 | ** been specified |
| 121658 | ** |
| 121659 | ** 4) The table is a shadow table, the database connection is in |
| 121660 | ** defensive mode, and the current sqlite3_prepare() |
| 121661 | ** is for a top-level SQL statement. |
| 121662 | */ |
| 121663 | static int vtabIsReadOnly(Parse *pParse, Table *pTab){ |
| 121664 | if( sqlite3GetVTable(pParse->db, pTab)->pMod->pModule->xUpdate==0 ){ |
| 121665 | return 1; |
| 121666 | } |
| 121667 | |
| 121668 | /* Within triggers: |
| 121669 | ** * Do not allow DELETE, INSERT, or UPDATE of SQLITE_VTAB_DIRECTONLY |
| 121670 | ** virtual tables |
| 121671 | ** * Only allow DELETE, INSERT, or UPDATE of non-SQLITE_VTAB_INNOCUOUS |
| 121672 | ** virtual tables if PRAGMA trusted_schema=ON. |
| 121673 | */ |
| 121674 | if( pParse->pToplevel!=0 |
| 121675 | && pTab->u.vtab.p->eVtabRisk > |
| 121676 | ((pParse->db->flags & SQLITE_TrustedSchema)!=0) |
| 121677 | ){ |
| 121678 | sqlite3ErrorMsg(pParse, "unsafe use of virtual table \"%s\"", |
| 121679 | pTab->zName); |
| 121680 | } |
| 121681 | return 0; |
| 121682 | } |
| 121683 | static int tabIsReadOnly(Parse *pParse, Table *pTab){ |
| 121684 | sqlite3 *db; |
| 121685 | if( IsVirtual(pTab) ){ |
| 121686 | return vtabIsReadOnly(pParse, pTab); |
| 121687 | } |
| 121688 | if( (pTab->tabFlags & (TF_Readonly|TF_Shadow))==0 ) return 0; |
| 121689 | db = pParse->db; |
| 121690 | if( (pTab->tabFlags & TF_Readonly)!=0 ){ |
| 121691 | return sqlite3WritableSchema(db)==0 && pParse->nested==0; |
| @@ -121415,13 +121693,15 @@ | |
| 121693 | assert( pTab->tabFlags & TF_Shadow ); |
| 121694 | return sqlite3ReadOnlyShadowTables(db); |
| 121695 | } |
| 121696 | |
| 121697 | /* |
| 121698 | ** Check to make sure the given table is writable. |
| 121699 | ** |
| 121700 | ** If pTab is not writable -> generate an error message and return 1. |
| 121701 | ** If pTab is writable but other errors have occurred -> return 1. |
| 121702 | ** If pTab is writable and no prior errors -> return 0; |
| 121703 | */ |
| 121704 | SQLITE_PRIVATE int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int viewOk){ |
| 121705 | if( tabIsReadOnly(pParse, pTab) ){ |
| 121706 | sqlite3ErrorMsg(pParse, "table %s may not be modified", pTab->zName); |
| 121707 | return 1; |
| @@ -121778,13 +122058,14 @@ | |
| 122058 | sqlite3VdbeAddOp4(v, OP_Clear, pTab->tnum, iDb, memCnt ? memCnt : -1, |
| 122059 | pTab->zName, P4_STATIC); |
| 122060 | } |
| 122061 | for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ |
| 122062 | assert( pIdx->pSchema==pTab->pSchema ); |
| 122063 | if( IsPrimaryKeyIndex(pIdx) && !HasRowid(pTab) ){ |
| 122064 | sqlite3VdbeAddOp3(v, OP_Clear, pIdx->tnum, iDb, memCnt ? memCnt : -1); |
| 122065 | }else{ |
| 122066 | sqlite3VdbeAddOp2(v, OP_Clear, pIdx->tnum, iDb); |
| 122067 | } |
| 122068 | } |
| 122069 | }else |
| 122070 | #endif /* SQLITE_OMIT_TRUNCATE_OPTIMIZATION */ |
| 122071 | { |
| @@ -121980,11 +122261,11 @@ | |
| 122261 | sqlite3ExprDelete(db, pWhere); |
| 122262 | #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) |
| 122263 | sqlite3ExprListDelete(db, pOrderBy); |
| 122264 | sqlite3ExprDelete(db, pLimit); |
| 122265 | #endif |
| 122266 | if( aToOpen ) sqlite3DbNNFreeNN(db, aToOpen); |
| 122267 | return; |
| 122268 | } |
| 122269 | /* Make sure "isView" and other macros defined above are undefined. Otherwise |
| 122270 | ** they may interfere with compilation of other functions in this file |
| 122271 | ** (or in another file, if this file becomes part of the amalgamation). */ |
| @@ -126148,15 +126429,16 @@ | |
| 126429 | SQLITE_PRIVATE void sqlite3FkDelete(sqlite3 *db, Table *pTab){ |
| 126430 | FKey *pFKey; /* Iterator variable */ |
| 126431 | FKey *pNext; /* Copy of pFKey->pNextFrom */ |
| 126432 | |
| 126433 | assert( IsOrdinaryTable(pTab) ); |
| 126434 | assert( db!=0 ); |
| 126435 | for(pFKey=pTab->u.tab.pFKey; pFKey; pFKey=pNext){ |
| 126436 | assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pTab->pSchema) ); |
| 126437 | |
| 126438 | /* Remove the FK from the fkeyHash hash table. */ |
| 126439 | if( db->pnBytesFreed==0 ){ |
| 126440 | if( pFKey->pPrevTo ){ |
| 126441 | pFKey->pPrevTo->pNextTo = pFKey->pNextTo; |
| 126442 | }else{ |
| 126443 | void *p = (void *)pFKey->pNextTo; |
| 126444 | const char *z = (p ? pFKey->pNextTo->zTo : pFKey->zTo); |
| @@ -126345,11 +126627,11 @@ | |
| 126627 | /* Move the previous opcode (which should be OP_MakeRecord) forward |
| 126628 | ** by one slot and insert a new OP_TypeCheck where the current |
| 126629 | ** OP_MakeRecord is found */ |
| 126630 | VdbeOp *pPrev; |
| 126631 | sqlite3VdbeAppendP4(v, pTab, P4_TABLE); |
| 126632 | pPrev = sqlite3VdbeGetLastOp(v); |
| 126633 | assert( pPrev!=0 ); |
| 126634 | assert( pPrev->opcode==OP_MakeRecord || sqlite3VdbeDb(v)->mallocFailed ); |
| 126635 | pPrev->opcode = OP_TypeCheck; |
| 126636 | sqlite3VdbeAddOp3(v, OP_MakeRecord, pPrev->p1, pPrev->p2, pPrev->p3); |
| 126637 | }else{ |
| @@ -126383,11 +126665,11 @@ | |
| 126665 | i = sqlite3Strlen30NN(zColAff); |
| 126666 | if( i ){ |
| 126667 | if( iReg ){ |
| 126668 | sqlite3VdbeAddOp4(v, OP_Affinity, iReg, i, 0, zColAff, i); |
| 126669 | }else{ |
| 126670 | assert( sqlite3VdbeGetLastOp(v)->opcode==OP_MakeRecord |
| 126671 | || sqlite3VdbeDb(v)->mallocFailed ); |
| 126672 | sqlite3VdbeChangeP4(v, -1, zColAff, i); |
| 126673 | } |
| 126674 | } |
| 126675 | } |
| @@ -126469,11 +126751,11 @@ | |
| 126751 | /* Before computing generated columns, first go through and make sure |
| 126752 | ** that appropriate affinity has been applied to the regular columns |
| 126753 | */ |
| 126754 | sqlite3TableAffinity(pParse->pVdbe, pTab, iRegStore); |
| 126755 | if( (pTab->tabFlags & TF_HasStored)!=0 ){ |
| 126756 | pOp = sqlite3VdbeGetLastOp(pParse->pVdbe); |
| 126757 | if( pOp->opcode==OP_Affinity ){ |
| 126758 | /* Change the OP_Affinity argument to '@' (NONE) for all stored |
| 126759 | ** columns. '@' is the no-op affinity and those columns have not |
| 126760 | ** yet been computed. */ |
| 126761 | int ii, jj; |
| @@ -127375,11 +127657,16 @@ | |
| 127657 | }else if( pSelect ){ |
| 127658 | if( regFromSelect!=regData ){ |
| 127659 | sqlite3VdbeAddOp2(v, OP_SCopy, regFromSelect+k, iRegStore); |
| 127660 | } |
| 127661 | }else{ |
| 127662 | Expr *pX = pList->a[k].pExpr; |
| 127663 | int y = sqlite3ExprCodeTarget(pParse, pX, iRegStore); |
| 127664 | if( y!=iRegStore ){ |
| 127665 | sqlite3VdbeAddOp2(v, |
| 127666 | ExprHasProperty(pX, EP_Subquery) ? OP_Copy : OP_SCopy, y, iRegStore); |
| 127667 | } |
| 127668 | } |
| 127669 | } |
| 127670 | |
| 127671 | |
| 127672 | /* Run the BEFORE and INSTEAD OF triggers, if there are any |
| @@ -127512,11 +127799,13 @@ | |
| 127799 | int isReplace = 0;/* Set to true if constraints may cause a replace */ |
| 127800 | int bUseSeek; /* True to use OPFLAG_SEEKRESULT */ |
| 127801 | sqlite3GenerateConstraintChecks(pParse, pTab, aRegIdx, iDataCur, iIdxCur, |
| 127802 | regIns, 0, ipkColumn>=0, onError, endOfLoop, &isReplace, 0, pUpsert |
| 127803 | ); |
| 127804 | if( db->flags & SQLITE_ForeignKeys ){ |
| 127805 | sqlite3FkCheck(pParse, pTab, 0, regIns, 0, 0); |
| 127806 | } |
| 127807 | |
| 127808 | /* Set the OPFLAG_USESEEKRESULT flag if either (a) there are no REPLACE |
| 127809 | ** constraints or (b) there are no triggers and this table is not a |
| 127810 | ** parent table in a foreign key constraint. It is safe to set the |
| 127811 | ** flag in the second case as if any REPLACE constraint is hit, an |
| @@ -127596,11 +127885,11 @@ | |
| 127885 | sqlite3SrcListDelete(db, pTabList); |
| 127886 | sqlite3ExprListDelete(db, pList); |
| 127887 | sqlite3UpsertDelete(db, pUpsert); |
| 127888 | sqlite3SelectDelete(db, pSelect); |
| 127889 | sqlite3IdListDelete(db, pColumn); |
| 127890 | if( aRegIdx ) sqlite3DbNNFreeNN(db, aRegIdx); |
| 127891 | } |
| 127892 | |
| 127893 | /* Make sure "isView" and other macros defined above are undefined. Otherwise |
| 127894 | ** they may interfere with compilation of other functions in this file |
| 127895 | ** (or in another file, if this file becomes part of the amalgamation). */ |
| @@ -132702,19 +132991,21 @@ | |
| 132991 | ** Setting to a null string reverts to the default temporary directory search. |
| 132992 | ** If temporary directory is changed, then invalidateTempStorage. |
| 132993 | ** |
| 132994 | */ |
| 132995 | case PragTyp_TEMP_STORE_DIRECTORY: { |
| 132996 | sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); |
| 132997 | if( !zRight ){ |
| 132998 | returnSingleText(v, sqlite3_temp_directory); |
| 132999 | }else{ |
| 133000 | #ifndef SQLITE_OMIT_WSD |
| 133001 | if( zRight[0] ){ |
| 133002 | int res; |
| 133003 | rc = sqlite3OsAccess(db->pVfs, zRight, SQLITE_ACCESS_READWRITE, &res); |
| 133004 | if( rc!=SQLITE_OK || res==0 ){ |
| 133005 | sqlite3ErrorMsg(pParse, "not a writable directory"); |
| 133006 | sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); |
| 133007 | goto pragma_out; |
| 133008 | } |
| 133009 | } |
| 133010 | if( SQLITE_TEMP_STORE==0 |
| 133011 | || (SQLITE_TEMP_STORE==1 && db->temp_store<=1) |
| @@ -132728,10 +133019,11 @@ | |
| 133019 | }else{ |
| 133020 | sqlite3_temp_directory = 0; |
| 133021 | } |
| 133022 | #endif /* SQLITE_OMIT_WSD */ |
| 133023 | } |
| 133024 | sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); |
| 133025 | break; |
| 133026 | } |
| 133027 | |
| 133028 | #if SQLITE_OS_WIN |
| 133029 | /* |
| @@ -132746,19 +133038,21 @@ | |
| 133038 | ** process. Database file specified with an absolute path are not impacted |
| 133039 | ** by this setting, regardless of its value. |
| 133040 | ** |
| 133041 | */ |
| 133042 | case PragTyp_DATA_STORE_DIRECTORY: { |
| 133043 | sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); |
| 133044 | if( !zRight ){ |
| 133045 | returnSingleText(v, sqlite3_data_directory); |
| 133046 | }else{ |
| 133047 | #ifndef SQLITE_OMIT_WSD |
| 133048 | if( zRight[0] ){ |
| 133049 | int res; |
| 133050 | rc = sqlite3OsAccess(db->pVfs, zRight, SQLITE_ACCESS_READWRITE, &res); |
| 133051 | if( rc!=SQLITE_OK || res==0 ){ |
| 133052 | sqlite3ErrorMsg(pParse, "not a writable directory"); |
| 133053 | sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); |
| 133054 | goto pragma_out; |
| 133055 | } |
| 133056 | } |
| 133057 | sqlite3_free(sqlite3_data_directory); |
| 133058 | if( zRight[0] ){ |
| @@ -132766,10 +133060,11 @@ | |
| 133060 | }else{ |
| 133061 | sqlite3_data_directory = 0; |
| 133062 | } |
| 133063 | #endif /* SQLITE_OMIT_WSD */ |
| 133064 | } |
| 133065 | sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_TEMPDIR)); |
| 133066 | break; |
| 133067 | } |
| 133068 | #endif |
| 133069 | |
| 133070 | #if SQLITE_ENABLE_LOCKING_STYLE |
| @@ -133479,19 +133774,27 @@ | |
| 133774 | /* Make sure all the indices are constructed correctly. |
| 133775 | */ |
| 133776 | for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){ |
| 133777 | Table *pTab = sqliteHashData(x); |
| 133778 | Index *pIdx, *pPk; |
| 133779 | Index *pPrior = 0; /* Previous index */ |
| 133780 | int loopTop; |
| 133781 | int iDataCur, iIdxCur; |
| 133782 | int r1 = -1; |
| 133783 | int bStrict; |
| 133784 | int r2; /* Previous key for WITHOUT ROWID tables */ |
| 133785 | |
| 133786 | if( !IsOrdinaryTable(pTab) ) continue; |
| 133787 | if( pObjTab && pObjTab!=pTab ) continue; |
| 133788 | if( isQuick || HasRowid(pTab) ){ |
| 133789 | pPk = 0; |
| 133790 | r2 = 0; |
| 133791 | }else{ |
| 133792 | pPk = sqlite3PrimaryKeyIndex(pTab); |
| 133793 | r2 = sqlite3GetTempRange(pParse, pPk->nKeyCol); |
| 133794 | sqlite3VdbeAddOp3(v, OP_Null, 1, r2, r2+pPk->nKeyCol-1); |
| 133795 | } |
| 133796 | sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenRead, 0, |
| 133797 | 1, 0, &iDataCur, &iIdxCur); |
| 133798 | /* reg[7] counts the number of entries in the table. |
| 133799 | ** reg[8+i] counts the number of entries in the i-th index |
| 133800 | */ |
| @@ -133506,10 +133809,28 @@ | |
| 133809 | if( !isQuick ){ |
| 133810 | /* Sanity check on record header decoding */ |
| 133811 | sqlite3VdbeAddOp3(v, OP_Column, iDataCur, pTab->nNVCol-1,3); |
| 133812 | sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG); |
| 133813 | VdbeComment((v, "(right-most column)")); |
| 133814 | if( pPk ){ |
| 133815 | /* Verify WITHOUT ROWID keys are in ascending order */ |
| 133816 | int a1; |
| 133817 | char *zErr; |
| 133818 | a1 = sqlite3VdbeAddOp4Int(v, OP_IdxGT, iDataCur, 0,r2,pPk->nKeyCol); |
| 133819 | VdbeCoverage(v); |
| 133820 | sqlite3VdbeAddOp1(v, OP_IsNull, r2); VdbeCoverage(v); |
| 133821 | zErr = sqlite3MPrintf(db, |
| 133822 | "row not in PRIMARY KEY order for %s", |
| 133823 | pTab->zName); |
| 133824 | sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC); |
| 133825 | integrityCheckResultRow(v); |
| 133826 | sqlite3VdbeJumpHere(v, a1); |
| 133827 | sqlite3VdbeJumpHere(v, a1+1); |
| 133828 | for(j=0; j<pPk->nKeyCol; j++){ |
| 133829 | sqlite3ExprCodeLoadIndexColumn(pParse, pPk, iDataCur, j, r2+j); |
| 133830 | } |
| 133831 | } |
| 133832 | } |
| 133833 | /* Verify that all NOT NULL columns really are NOT NULL. At the |
| 133834 | ** same time verify the type of the content of STRICT tables */ |
| 133835 | bStrict = (pTab->tabFlags & TF_Strict)!=0; |
| 133836 | for(j=0; j<pTab->nCol; j++){ |
| @@ -133518,11 +133839,11 @@ | |
| 133839 | int doError, jmp2; |
| 133840 | if( j==pTab->iPKey ) continue; |
| 133841 | if( pCol->notNull==0 && !bStrict ) continue; |
| 133842 | doError = bStrict ? sqlite3VdbeMakeLabel(pParse) : 0; |
| 133843 | sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, j, 3); |
| 133844 | if( sqlite3VdbeGetLastOp(v)->opcode==OP_Column ){ |
| 133845 | sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG); |
| 133846 | } |
| 133847 | if( pCol->notNull ){ |
| 133848 | jmp2 = sqlite3VdbeAddOp1(v, OP_NotNull, 3); VdbeCoverage(v); |
| 133849 | zErr = sqlite3MPrintf(db, "NULL value in %s.%s", pTab->zName, |
| @@ -133533,13 +133854,11 @@ | |
| 133854 | }else{ |
| 133855 | integrityCheckResultRow(v); |
| 133856 | } |
| 133857 | sqlite3VdbeJumpHere(v, jmp2); |
| 133858 | } |
| 133859 | if( bStrict && pCol->eCType!=COLTYPE_ANY ){ |
| 133860 | jmp2 = sqlite3VdbeAddOp3(v, OP_IsNullOrType, 3, 0, |
| 133861 | sqlite3StdTypeMap[pCol->eCType-1]); |
| 133862 | VdbeCoverage(v); |
| 133863 | zErr = sqlite3MPrintf(db, "non-%s value in %s.%s", |
| 133864 | sqlite3StdType[pCol->eCType-1], |
| @@ -133634,10 +133953,13 @@ | |
| 133953 | sqlite3VdbeLoadString(v, 4, pIdx->zName); |
| 133954 | sqlite3VdbeAddOp3(v, OP_Concat, 4, 2, 3); |
| 133955 | integrityCheckResultRow(v); |
| 133956 | sqlite3VdbeJumpHere(v, addr); |
| 133957 | } |
| 133958 | if( pPk ){ |
| 133959 | sqlite3ReleaseTempRange(pParse, r2, pPk->nKeyCol); |
| 133960 | } |
| 133961 | } |
| 133962 | } |
| 133963 | } |
| 133964 | { |
| 133965 | static const int iLn = VDBE_OFFSET_LINENO(2); |
| @@ -135032,19 +135354,19 @@ | |
| 135354 | sqlite3 *db = pParse->db; |
| 135355 | assert( db!=0 ); |
| 135356 | assert( db->pParse==pParse ); |
| 135357 | assert( pParse->nested==0 ); |
| 135358 | #ifndef SQLITE_OMIT_SHARED_CACHE |
| 135359 | if( pParse->aTableLock ) sqlite3DbNNFreeNN(db, pParse->aTableLock); |
| 135360 | #endif |
| 135361 | while( pParse->pCleanup ){ |
| 135362 | ParseCleanup *pCleanup = pParse->pCleanup; |
| 135363 | pParse->pCleanup = pCleanup->pNext; |
| 135364 | pCleanup->xCleanup(db, pCleanup->pPtr); |
| 135365 | sqlite3DbNNFreeNN(db, pCleanup); |
| 135366 | } |
| 135367 | if( pParse->aLabel ) sqlite3DbNNFreeNN(db, pParse->aLabel); |
| 135368 | if( pParse->pConstExpr ){ |
| 135369 | sqlite3ExprListDelete(db, pParse->pConstExpr); |
| 135370 | } |
| 135371 | assert( db->lookaside.bDisable >= pParse->disableLookaside ); |
| 135372 | db->lookaside.bDisable -= pParse->disableLookaside; |
| @@ -135599,10 +135921,11 @@ | |
| 135921 | ** |
| 135922 | ** If bFree==1, call sqlite3DbFree() on the p object. |
| 135923 | ** If bFree==0, Leave the first Select object unfreed |
| 135924 | */ |
| 135925 | static void clearSelect(sqlite3 *db, Select *p, int bFree){ |
| 135926 | assert( db!=0 ); |
| 135927 | while( p ){ |
| 135928 | Select *pPrior = p->pPrior; |
| 135929 | sqlite3ExprListDelete(db, p->pEList); |
| 135930 | sqlite3SrcListDelete(db, p->pSrc); |
| 135931 | sqlite3ExprDelete(db, p->pWhere); |
| @@ -135618,11 +135941,11 @@ | |
| 135941 | while( p->pWin ){ |
| 135942 | assert( p->pWin->ppThis==&p->pWin ); |
| 135943 | sqlite3WindowUnlinkFromSelect(p->pWin); |
| 135944 | } |
| 135945 | #endif |
| 135946 | if( bFree ) sqlite3DbNNFreeNN(db, p); |
| 135947 | p = pPrior; |
| 135948 | bFree = 1; |
| 135949 | } |
| 135950 | } |
| 135951 | |
| @@ -135847,11 +136170,11 @@ | |
| 136170 | /* |
| 136171 | ** Mark a subquery result column as having been used. |
| 136172 | */ |
| 136173 | SQLITE_PRIVATE void sqlite3SrcItemColumnUsed(SrcItem *pItem, int iCol){ |
| 136174 | assert( pItem!=0 ); |
| 136175 | assert( (int)pItem->fg.isNestedFrom == IsNestedFrom(pItem->pSelect) ); |
| 136176 | if( pItem->fg.isNestedFrom ){ |
| 136177 | ExprList *pResults; |
| 136178 | assert( pItem->pSelect!=0 ); |
| 136179 | pResults = pItem->pSelect->pEList; |
| 136180 | assert( pResults!=0 ); |
| @@ -135947,28 +136270,29 @@ | |
| 136270 | sqlite3SetJoinExpr(p->pLeft, iTable, joinFlag); |
| 136271 | p = p->pRight; |
| 136272 | } |
| 136273 | } |
| 136274 | |
| 136275 | /* Undo the work of sqlite3SetJoinExpr(). This is used when a LEFT JOIN |
| 136276 | ** is simplified into an ordinary JOIN, and when an ON expression is |
| 136277 | ** "pushed down" into the WHERE clause of a subquery. |
| 136278 | ** |
| 136279 | ** Convert every term that is marked with EP_OuterON and w.iJoin==iTable into |
| 136280 | ** an ordinary term that omits the EP_OuterON mark. Or if iTable<0, then |
| 136281 | ** just clear every EP_OuterON and EP_InnerON mark from the expression tree. |
| 136282 | ** |
| 136283 | ** If nullable is true, that means that Expr p might evaluate to NULL even |
| 136284 | ** if it is a reference to a NOT NULL column. This can happen, for example, |
| 136285 | ** if the table that p references is on the left side of a RIGHT JOIN. |
| 136286 | ** If nullable is true, then take care to not remove the EP_CanBeNull bit. |
| 136287 | ** See forum thread https://sqlite.org/forum/forumpost/b40696f50145d21c |
| 136288 | */ |
| 136289 | static void unsetJoinExpr(Expr *p, int iTable, int nullable){ |
| 136290 | while( p ){ |
| 136291 | if( iTable<0 || (ExprHasProperty(p, EP_OuterON) && p->w.iJoin==iTable) ){ |
| 136292 | ExprClearProperty(p, EP_OuterON|EP_InnerON); |
| 136293 | if( iTable>=0 ) ExprSetProperty(p, EP_InnerON); |
| 136294 | } |
| 136295 | if( p->op==TK_COLUMN && p->iTable==iTable && !nullable ){ |
| 136296 | ExprClearProperty(p, EP_CanBeNull); |
| 136297 | } |
| 136298 | if( p->op==TK_FUNCTION ){ |
| @@ -137023,13 +137347,14 @@ | |
| 137347 | /* |
| 137348 | ** Deallocate a KeyInfo object |
| 137349 | */ |
| 137350 | SQLITE_PRIVATE void sqlite3KeyInfoUnref(KeyInfo *p){ |
| 137351 | if( p ){ |
| 137352 | assert( p->db!=0 ); |
| 137353 | assert( p->nRef>0 ); |
| 137354 | p->nRef--; |
| 137355 | if( p->nRef==0 ) sqlite3DbNNFreeNN(p->db, p); |
| 137356 | } |
| 137357 | } |
| 137358 | |
| 137359 | /* |
| 137360 | ** Make a new pointer to a KeyInfo object |
| @@ -137210,18 +137535,21 @@ | |
| 137535 | sqlite3VdbeAddOp3(v, OP_OpenPseudo, iSortTab, regSortOut, |
| 137536 | nKey+1+nColumn+nRefKey); |
| 137537 | if( addrOnce ) sqlite3VdbeJumpHere(v, addrOnce); |
| 137538 | addr = 1 + sqlite3VdbeAddOp2(v, OP_SorterSort, iTab, addrBreak); |
| 137539 | VdbeCoverage(v); |
| 137540 | assert( p->iLimit==0 && p->iOffset==0 ); |
| 137541 | sqlite3VdbeAddOp3(v, OP_SorterData, iTab, regSortOut, iSortTab); |
| 137542 | bSeq = 0; |
| 137543 | }else{ |
| 137544 | addr = 1 + sqlite3VdbeAddOp2(v, OP_Sort, iTab, addrBreak); VdbeCoverage(v); |
| 137545 | codeOffset(v, p->iOffset, addrContinue); |
| 137546 | iSortTab = iTab; |
| 137547 | bSeq = 1; |
| 137548 | if( p->iOffset>0 ){ |
| 137549 | sqlite3VdbeAddOp2(v, OP_AddImm, p->iLimit, -1); |
| 137550 | } |
| 137551 | } |
| 137552 | for(i=0, iCol=nKey+bSeq-1; i<nColumn; i++){ |
| 137553 | #ifdef SQLITE_ENABLE_SORTER_REFERENCES |
| 137554 | if( aOutEx[i].fg.bSorterRef ) continue; |
| 137555 | #endif |
| @@ -137342,13 +137670,10 @@ | |
| 137670 | |
| 137671 | /* |
| 137672 | ** Return a pointer to a string containing the 'declaration type' of the |
| 137673 | ** expression pExpr. The string may be treated as static by the caller. |
| 137674 | ** |
| 137675 | ** The declaration type is the exact datatype definition extracted from the |
| 137676 | ** original CREATE TABLE statement if the expression is a column. The |
| 137677 | ** declaration type for a ROWID field is INTEGER. Exactly when an expression |
| 137678 | ** is considered a column can be complex in the presence of subqueries. The |
| 137679 | ** result-set expression in all of the following SELECT statements is |
| @@ -139210,14 +139535,15 @@ | |
| 139535 | |
| 139536 | /* Jump to the this point in order to terminate the query. |
| 139537 | */ |
| 139538 | sqlite3VdbeResolveLabel(v, labelEnd); |
| 139539 | |
| 139540 | /* Reassemble the compound query so that it will be freed correctly |
| 139541 | ** by the calling function */ |
| 139542 | if( pSplit->pPrior ){ |
| 139543 | sqlite3ParserAddCleanup(pParse, |
| 139544 | (void(*)(sqlite3*,void*))sqlite3SelectDelete, pSplit->pPrior); |
| 139545 | } |
| 139546 | pSplit->pPrior = pPrior; |
| 139547 | pPrior->pNext = pSplit; |
| 139548 | sqlite3ExprListDelete(db, pPrior->pOrderBy); |
| 139549 | pPrior->pOrderBy = 0; |
| @@ -139323,10 +139649,11 @@ | |
| 139649 | if( pSubst->isOuterJoin && pCopy->op!=TK_COLUMN ){ |
| 139650 | memset(&ifNullRow, 0, sizeof(ifNullRow)); |
| 139651 | ifNullRow.op = TK_IF_NULL_ROW; |
| 139652 | ifNullRow.pLeft = pCopy; |
| 139653 | ifNullRow.iTable = pSubst->iNewTable; |
| 139654 | ifNullRow.iColumn = -99; |
| 139655 | ifNullRow.flags = EP_IfNullRow; |
| 139656 | pCopy = &ifNullRow; |
| 139657 | } |
| 139658 | testcase( ExprHasProperty(pCopy, EP_Subquery) ); |
| 139659 | pNew = sqlite3ExprDup(db, pCopy, 0); |
| @@ -139590,11 +139917,12 @@ | |
| 139917 | ** |
| 139918 | ** (3) If the subquery is the right operand of a LEFT JOIN then |
| 139919 | ** (3a) the subquery may not be a join and |
| 139920 | ** (3b) the FROM clause of the subquery may not contain a virtual |
| 139921 | ** table and |
| 139922 | ** (**) Was: "The outer query may not have a GROUP BY." This case |
| 139923 | ** is now managed correctly |
| 139924 | ** (3d) the outer query may not be DISTINCT. |
| 139925 | ** See also (26) for restrictions on RIGHT JOIN. |
| 139926 | ** |
| 139927 | ** (4) The subquery can not be DISTINCT. |
| 139928 | ** |
| @@ -139644,10 +139972,13 @@ | |
| 139972 | ** (17d) the outer query may not be |
| 139973 | ** (17d1) aggregate, or |
| 139974 | ** (17d2) DISTINCT |
| 139975 | ** (17e) the subquery may not contain window functions, and |
| 139976 | ** (17f) the subquery must not be the RHS of a LEFT JOIN. |
| 139977 | ** (17g) either the subquery is the first element of the outer |
| 139978 | ** query or there are no RIGHT or FULL JOINs in any arm |
| 139979 | ** of the subquery. (This is a duplicate of condition (27b).) |
| 139980 | ** |
| 139981 | ** The parent and sub-query may contain WHERE clauses. Subject to |
| 139982 | ** rules (11), (13) and (14), they may also contain ORDER BY, |
| 139983 | ** LIMIT and OFFSET clauses. The subquery cannot use any compound |
| 139984 | ** operator other than UNION ALL because all the other compound |
| @@ -139695,11 +140026,15 @@ | |
| 140026 | ** |
| 140027 | ** (26) The subquery may not be the right operand of a RIGHT JOIN. |
| 140028 | ** See also (3) for restrictions on LEFT JOIN. |
| 140029 | ** |
| 140030 | ** (27) The subquery may not contain a FULL or RIGHT JOIN unless it |
| 140031 | ** is the first element of the parent query. This must be the |
| 140032 | ** the case if: |
| 140033 | ** (27a) the subquery is not compound query, and |
| 140034 | ** (27b) the subquery is a compound query and the RIGHT JOIN occurs |
| 140035 | ** in any arm of the compound query. (See also (17g).) |
| 140036 | ** |
| 140037 | ** (28) The subquery is not a MATERIALIZED CTE. |
| 140038 | ** |
| 140039 | ** (29) Either the subquery is not the right-hand operand of a join with an |
| 140040 | ** ON or USING clause nor the right-hand operand of a NATURAL JOIN, or |
| @@ -139795,21 +140130,15 @@ | |
| 140130 | ** |
| 140131 | ** (t1 LEFT OUTER JOIN t2) JOIN t3 |
| 140132 | ** |
| 140133 | ** which is not at all the same thing. |
| 140134 | ** |
| 140135 | ** See also tickets #306, #350, and #3300. |
| 140136 | */ |
| 140137 | if( (pSubitem->fg.jointype & (JT_OUTER|JT_LTORJ))!=0 ){ |
| 140138 | if( pSubSrc->nSrc>1 /* (3a) */ |
| 140139 | || IsVirtual(pSubSrc->a[0].pTab) /* (3b) */ |
| 140140 | || (p->selFlags & SF_Distinct)!=0 /* (3d) */ |
| 140141 | || (pSubitem->fg.jointype & JT_RIGHT)!=0 /* (26) */ |
| 140142 | ){ |
| 140143 | return 0; |
| 140144 | } |
| @@ -139825,11 +140154,11 @@ | |
| 140154 | } |
| 140155 | #endif |
| 140156 | |
| 140157 | assert( pSubSrc->nSrc>0 ); /* True by restriction (7) */ |
| 140158 | if( iFrom>0 && (pSubSrc->a[0].fg.jointype & JT_LTORJ)!=0 ){ |
| 140159 | return 0; /* Restriction (27a) */ |
| 140160 | } |
| 140161 | if( pSubitem->fg.isCte && pSubitem->u2.pCteUse->eM10d==M10d_Yes ){ |
| 140162 | return 0; /* (28) */ |
| 140163 | } |
| 140164 | |
| @@ -139845,11 +140174,11 @@ | |
| 140174 | ** |
| 140175 | ** (29b) The subquery itself must not be the right operand of a |
| 140176 | ** NATURAL join or a join that as an ON or USING clause. |
| 140177 | ** |
| 140178 | ** These conditions are sufficient to keep an EP_OuterON from being |
| 140179 | ** flattened into an EP_InnerON. Restrictions (3a) and (27a) prevent |
| 140180 | ** an EP_InnerON from being flattened into an EP_OuterON. |
| 140181 | */ |
| 140182 | if( pSubSrc->nSrc>=2 |
| 140183 | && (pSubSrc->a[pSubSrc->nSrc-1].fg.jointype & JT_OUTER)!=0 |
| 140184 | ){ |
| @@ -139886,10 +140215,16 @@ | |
| 140215 | #ifndef SQLITE_OMIT_WINDOWFUNC |
| 140216 | || pSub1->pWin /* (17e) */ |
| 140217 | #endif |
| 140218 | ){ |
| 140219 | return 0; |
| 140220 | } |
| 140221 | if( iFrom>0 && (pSub1->pSrc->a[0].fg.jointype & JT_LTORJ)!=0 ){ |
| 140222 | /* Without this restriction, the JT_LTORJ flag would end up being |
| 140223 | ** omitted on left-hand tables of the right join that is being |
| 140224 | ** flattened. */ |
| 140225 | return 0; /* Restrictions (17g), (27b) */ |
| 140226 | } |
| 140227 | testcase( pSub1->pSrc->nSrc>1 ); |
| 140228 | } |
| 140229 | |
| 140230 | /* Restriction (18). */ |
| @@ -140189,10 +140524,12 @@ | |
| 140524 | Parse *pParse; /* Parsing context */ |
| 140525 | u8 *pOomFault; /* Pointer to pParse->db->mallocFailed */ |
| 140526 | int nConst; /* Number for COLUMN=CONSTANT terms */ |
| 140527 | int nChng; /* Number of times a constant is propagated */ |
| 140528 | int bHasAffBlob; /* At least one column in apExpr[] as affinity BLOB */ |
| 140529 | u32 mExcludeOn; /* Which ON expressions to exclude from considertion. |
| 140530 | ** Either EP_OuterON or EP_InnerON|EP_OuterON */ |
| 140531 | Expr **apExpr; /* [i*2] is COLUMN and [i*2+1] is VALUE */ |
| 140532 | }; |
| 140533 | |
| 140534 | /* |
| 140535 | ** Add a new entry to the pConst object. Except, do not add duplicate |
| @@ -140251,11 +140588,11 @@ | |
| 140588 | ** found, add it to the pConst structure. |
| 140589 | */ |
| 140590 | static void findConstInWhere(WhereConst *pConst, Expr *pExpr){ |
| 140591 | Expr *pRight, *pLeft; |
| 140592 | if( NEVER(pExpr==0) ) return; |
| 140593 | if( ExprHasProperty(pExpr, pConst->mExcludeOn) ){ |
| 140594 | testcase( ExprHasProperty(pExpr, EP_OuterON) ); |
| 140595 | testcase( ExprHasProperty(pExpr, EP_InnerON) ); |
| 140596 | return; |
| 140597 | } |
| 140598 | if( pExpr->op==TK_AND ){ |
| @@ -140291,13 +140628,14 @@ | |
| 140628 | int bIgnoreAffBlob |
| 140629 | ){ |
| 140630 | int i; |
| 140631 | if( pConst->pOomFault[0] ) return WRC_Prune; |
| 140632 | if( pExpr->op!=TK_COLUMN ) return WRC_Continue; |
| 140633 | if( ExprHasProperty(pExpr, EP_FixedCol|pConst->mExcludeOn) ){ |
| 140634 | testcase( ExprHasProperty(pExpr, EP_FixedCol) ); |
| 140635 | testcase( ExprHasProperty(pExpr, EP_OuterON) ); |
| 140636 | testcase( ExprHasProperty(pExpr, EP_InnerON) ); |
| 140637 | return WRC_Continue; |
| 140638 | } |
| 140639 | for(i=0; i<pConst->nConst; i++){ |
| 140640 | Expr *pColumn = pConst->apExpr[i*2]; |
| 140641 | if( pColumn==pExpr ) continue; |
| @@ -140417,10 +140755,21 @@ | |
| 140755 | do{ |
| 140756 | x.nConst = 0; |
| 140757 | x.nChng = 0; |
| 140758 | x.apExpr = 0; |
| 140759 | x.bHasAffBlob = 0; |
| 140760 | if( ALWAYS(p->pSrc!=0) |
| 140761 | && p->pSrc->nSrc>0 |
| 140762 | && (p->pSrc->a[0].fg.jointype & JT_LTORJ)!=0 |
| 140763 | ){ |
| 140764 | /* Do not propagate constants on any ON clause if there is a |
| 140765 | ** RIGHT JOIN anywhere in the query */ |
| 140766 | x.mExcludeOn = EP_InnerON | EP_OuterON; |
| 140767 | }else{ |
| 140768 | /* Do not propagate constants through the ON clause of a LEFT JOIN */ |
| 140769 | x.mExcludeOn = EP_OuterON; |
| 140770 | } |
| 140771 | findConstInWhere(&x, p->pWhere); |
| 140772 | if( x.nConst ){ |
| 140773 | memset(&w, 0, sizeof(w)); |
| 140774 | w.pParse = pParse; |
| 140775 | w.xExprCallback = propagateConstantExprRewrite; |
| @@ -140705,10 +141054,11 @@ | |
| 141054 | if( p->pWhere |
| 141055 | || p->pEList->nExpr!=1 |
| 141056 | || p->pSrc->nSrc!=1 |
| 141057 | || p->pSrc->a[0].pSelect |
| 141058 | || pAggInfo->nFunc!=1 |
| 141059 | || p->pHaving |
| 141060 | ){ |
| 141061 | return 0; |
| 141062 | } |
| 141063 | pTab = p->pSrc->a[0].pTab; |
| 141064 | assert( pTab!=0 ); |
| @@ -141406,11 +141756,11 @@ | |
| 141756 | |
| 141757 | if( (zTabName = pFrom->zAlias)==0 ){ |
| 141758 | zTabName = pTab->zName; |
| 141759 | } |
| 141760 | if( db->mallocFailed ) break; |
| 141761 | assert( (int)pFrom->fg.isNestedFrom == IsNestedFrom(pFrom->pSelect) ); |
| 141762 | if( pFrom->fg.isNestedFrom ){ |
| 141763 | assert( pFrom->pSelect!=0 ); |
| 141764 | pNestedFrom = pFrom->pSelect->pEList; |
| 141765 | assert( pNestedFrom!=0 ); |
| 141766 | assert( pNestedFrom->nExpr==pTab->nCol ); |
| @@ -142280,10 +142630,11 @@ | |
| 142630 | && OptimizationEnabled(db, SQLITE_SimplifyJoin) |
| 142631 | ){ |
| 142632 | SELECTTRACE(0x100,pParse,p, |
| 142633 | ("LEFT-JOIN simplifies to JOIN on term %d\n",i)); |
| 142634 | pItem->fg.jointype &= ~(JT_LEFT|JT_OUTER); |
| 142635 | assert( pItem->iCursor>=0 ); |
| 142636 | unsetJoinExpr(p->pWhere, pItem->iCursor, |
| 142637 | pTabList->a[0].fg.jointype & JT_LTORJ); |
| 142638 | } |
| 142639 | |
| 142640 | /* No futher action if this term of the FROM clause is no a subquery */ |
| @@ -142334,11 +142685,13 @@ | |
| 142685 | && (p->selFlags & SF_OrderByReqd)==0 /* Condition (3) and (4) */ |
| 142686 | && OptimizationEnabled(db, SQLITE_OmitOrderBy) |
| 142687 | ){ |
| 142688 | SELECTTRACE(0x100,pParse,p, |
| 142689 | ("omit superfluous ORDER BY on %r FROM-clause subquery\n",i+1)); |
| 142690 | sqlite3ParserAddCleanup(pParse, |
| 142691 | (void(*)(sqlite3*,void*))sqlite3ExprListDelete, |
| 142692 | pSub->pOrderBy); |
| 142693 | pSub->pOrderBy = 0; |
| 142694 | } |
| 142695 | |
| 142696 | /* If the outer query contains a "complex" result set (that is, |
| 142697 | ** if the result set of the outer query uses functions or subqueries) |
| @@ -142501,11 +142854,11 @@ | |
| 142854 | zSavedAuthContext = pParse->zAuthContext; |
| 142855 | pParse->zAuthContext = pItem->zName; |
| 142856 | |
| 142857 | /* Generate code to implement the subquery |
| 142858 | ** |
| 142859 | ** The subquery is implemented as a co-routine if all of the following are |
| 142860 | ** true: |
| 142861 | ** |
| 142862 | ** (1) the subquery is guaranteed to be the outer loop (so that |
| 142863 | ** it does not need to be computed more than once), and |
| 142864 | ** (2) the subquery is not a CTE that should be materialized |
| @@ -142695,11 +143048,11 @@ | |
| 143048 | */ |
| 143049 | iEnd = sqlite3VdbeMakeLabel(pParse); |
| 143050 | if( (p->selFlags & SF_FixedLimit)==0 ){ |
| 143051 | p->nSelectRow = 320; /* 4 billion rows */ |
| 143052 | } |
| 143053 | if( p->pLimit ) computeLimitRegisters(pParse, p, iEnd); |
| 143054 | if( p->iLimit==0 && sSort.addrSortIndex>=0 ){ |
| 143055 | sqlite3VdbeChangeOpcode(v, sSort.addrSortIndex, OP_SorterOpen); |
| 143056 | sSort.sortFlags |= SORTFLAG_UseSorter; |
| 143057 | } |
| 143058 | |
| @@ -142917,12 +143270,17 @@ | |
| 143270 | if( minMaxFlag ){ |
| 143271 | sqlite3DebugPrintf("MIN/MAX Optimization (0x%02x) adds:\n", minMaxFlag); |
| 143272 | sqlite3TreeViewExprList(0, pMinMaxOrderBy, 0, "ORDERBY"); |
| 143273 | } |
| 143274 | for(ii=0; ii<pAggInfo->nColumn; ii++){ |
| 143275 | struct AggInfo_col *pCol = &pAggInfo->aCol[ii]; |
| 143276 | sqlite3DebugPrintf( |
| 143277 | "agg-column[%d] pTab=%s iTable=%d iColumn=%d iMem=%d" |
| 143278 | " iSorterColumn=%d\n", |
| 143279 | ii, pCol->pTab ? pCol->pTab->zName : "NULL", |
| 143280 | pCol->iTable, pCol->iColumn, pCol->iMem, |
| 143281 | pCol->iSorterColumn); |
| 143282 | sqlite3TreeViewExpr(0, pAggInfo->aCol[ii].pCExpr, 0); |
| 143283 | } |
| 143284 | for(ii=0; ii<pAggInfo->nFunc; ii++){ |
| 143285 | sqlite3DebugPrintf("agg-func[%d]: iMem=%d\n", |
| 143286 | ii, pAggInfo->aFunc[ii].iMem); |
| @@ -143039,19 +143397,19 @@ | |
| 143397 | } |
| 143398 | } |
| 143399 | regBase = sqlite3GetTempRange(pParse, nCol); |
| 143400 | sqlite3ExprCodeExprList(pParse, pGroupBy, regBase, 0, 0); |
| 143401 | j = nGroupBy; |
| 143402 | pAggInfo->directMode = 1; |
| 143403 | for(i=0; i<pAggInfo->nColumn; i++){ |
| 143404 | struct AggInfo_col *pCol = &pAggInfo->aCol[i]; |
| 143405 | if( pCol->iSorterColumn>=j ){ |
| 143406 | sqlite3ExprCode(pParse, pCol->pCExpr, j + regBase); |
| 143407 | j++; |
| 143408 | } |
| 143409 | } |
| 143410 | pAggInfo->directMode = 0; |
| 143411 | regRecord = sqlite3GetTempReg(pParse); |
| 143412 | sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regRecord); |
| 143413 | sqlite3VdbeAddOp2(v, OP_SorterInsert, pAggInfo->sortingIdx, regRecord); |
| 143414 | sqlite3ReleaseTempReg(pParse, regRecord); |
| 143415 | sqlite3ReleaseTempRange(pParse, regBase, nCol); |
| @@ -147465,11 +147823,12 @@ | |
| 147823 | ** in the list are moved to the sqlite3.pDisconnect list of the associated |
| 147824 | ** database connection. |
| 147825 | */ |
| 147826 | SQLITE_PRIVATE void sqlite3VtabClear(sqlite3 *db, Table *p){ |
| 147827 | assert( IsVirtual(p) ); |
| 147828 | assert( db!=0 ); |
| 147829 | if( db->pnBytesFreed==0 ) vtabDisconnectAll(0, p); |
| 147830 | if( p->u.vtab.azArg ){ |
| 147831 | int i; |
| 147832 | for(i=0; i<p->u.vtab.nArg; i++){ |
| 147833 | if( i!=1 ) sqlite3DbFree(db, p->u.vtab.azArg[i]); |
| 147834 | } |
| @@ -149142,10 +149501,11 @@ | |
| 149501 | #define WHERE_IN_SEEKSCAN 0x00100000 /* Seek-scan optimization for IN */ |
| 149502 | #define WHERE_TRANSCONS 0x00200000 /* Uses a transitive constraint */ |
| 149503 | #define WHERE_BLOOMFILTER 0x00400000 /* Consider using a Bloom-filter */ |
| 149504 | #define WHERE_SELFCULL 0x00800000 /* nOut reduced by extra WHERE terms */ |
| 149505 | #define WHERE_OMIT_OFFSET 0x01000000 /* Set offset counter to zero */ |
| 149506 | #define WHERE_VIEWSCAN 0x02000000 /* A full-scan of a VIEW or subquery */ |
| 149507 | |
| 149508 | #endif /* !defined(SQLITE_WHEREINT_H) */ |
| 149509 | |
| 149510 | /************** End of whereInt.h ********************************************/ |
| 149511 | /************** Continuing where we left off in wherecode.c ******************/ |
| @@ -149750,11 +150110,12 @@ | |
| 150110 | eType = sqlite3FindInIndex(pParse, pX, IN_INDEX_LOOP, 0, aiMap,&iTab); |
| 150111 | pExpr->iTable = iTab; |
| 150112 | } |
| 150113 | sqlite3ExprDelete(db, pX); |
| 150114 | }else{ |
| 150115 | int n = sqlite3ExprVectorSize(pX->pLeft); |
| 150116 | aiMap = (int*)sqlite3DbMallocZero(pParse->db, sizeof(int)*MAX(nEq,n)); |
| 150117 | eType = sqlite3FindInIndex(pParse, pX, IN_INDEX_LOOP, 0, aiMap, &iTab); |
| 150118 | } |
| 150119 | pX = pExpr; |
| 150120 | } |
| 150121 | |
| @@ -150020,11 +150381,11 @@ | |
| 150381 | WhereTerm *pTerm /* The upper or lower bound just coded */ |
| 150382 | ){ |
| 150383 | if( pTerm->wtFlags & TERM_LIKEOPT ){ |
| 150384 | VdbeOp *pOp; |
| 150385 | assert( pLevel->iLikeRepCntr>0 ); |
| 150386 | pOp = sqlite3VdbeGetLastOp(v); |
| 150387 | assert( pOp!=0 ); |
| 150388 | assert( pOp->opcode==OP_String8 |
| 150389 | || pTerm->pWC->pWInfo->pParse->db->mallocFailed ); |
| 150390 | pOp->p3 = (int)(pLevel->iLikeRepCntr>>1); /* Register holding counter */ |
| 150391 | pOp->p5 = (u8)(pLevel->iLikeRepCntr&1); /* ASC or DESC */ |
| @@ -151236,12 +151597,12 @@ | |
| 151597 | sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq); |
| 151598 | endEq = 0; |
| 151599 | } |
| 151600 | nConstraint++; |
| 151601 | } |
| 151602 | if( zStartAff ) sqlite3DbNNFreeNN(db, zStartAff); |
| 151603 | if( zEndAff ) sqlite3DbNNFreeNN(db, zEndAff); |
| 151604 | |
| 151605 | /* Top of the loop body */ |
| 151606 | if( pLevel->p2==0 ) pLevel->p2 = sqlite3VdbeCurrentAddr(v); |
| 151607 | |
| 151608 | /* Check if the index cursor is past the end of the range. */ |
| @@ -153168,13 +153529,19 @@ | |
| 153529 | sqlite3ErrorMsg(pParse, "ON clause references tables to its right"); |
| 153530 | return; |
| 153531 | } |
| 153532 | }else if( (prereqAll>>1)>=x ){ |
| 153533 | /* The ON clause of an INNER JOIN references a table to its right. |
| 153534 | ** Most other SQL database engines raise an error. But SQLite versions |
| 153535 | ** 3.0 through 3.38 just put the ON clause constraint into the WHERE |
| 153536 | ** clause and carried on. Beginning with 3.39, raise an error only |
| 153537 | ** if there is a RIGHT or FULL JOIN in the query. This makes SQLite |
| 153538 | ** more like other systems, and also preserves legacy. */ |
| 153539 | if( ALWAYS(pSrc->nSrc>0) && (pSrc->a[0].fg.jointype & JT_LTORJ)!=0 ){ |
| 153540 | sqlite3ErrorMsg(pParse, "ON clause references tables to its right"); |
| 153541 | return; |
| 153542 | } |
| 153543 | ExprClearProperty(pExpr, EP_InnerON); |
| 153544 | } |
| 153545 | } |
| 153546 | pTerm->prereqAll = prereqAll; |
| 153547 | pTerm->leftCursor = -1; |
| @@ -155328,11 +155695,11 @@ | |
| 155695 | #ifndef SQLITE_DEBUG |
| 155696 | UNUSED_PARAMETER( pParse ); |
| 155697 | #endif |
| 155698 | assert( pRec!=0 ); |
| 155699 | assert( pIdx->nSample>0 ); |
| 155700 | assert( pRec->nField>0 ); |
| 155701 | |
| 155702 | /* Do a binary search to find the first sample greater than or equal |
| 155703 | ** to pRec. If pRec contains a single field, the set of samples to search |
| 155704 | ** is simply the aSample[] array. If the samples in aSample[] contain more |
| 155705 | ** than one fields, all fields following the first are ignored. |
| @@ -155374,11 +155741,11 @@ | |
| 155741 | ** appears that it should be 1 field in size. However, that would make it |
| 155742 | ** smaller than sample 1, so the binary search would not work. As a result, |
| 155743 | ** it is extended to two fields. The duplicates that this creates do not |
| 155744 | ** cause any problems. |
| 155745 | */ |
| 155746 | nField = MIN(pRec->nField, pIdx->nSample); |
| 155747 | iCol = 0; |
| 155748 | iSample = pIdx->nSample * nField; |
| 155749 | do{ |
| 155750 | int iSamp; /* Index in aSample[] of test sample */ |
| 155751 | int n; /* Number of fields in test sample */ |
| @@ -155462,11 +155829,11 @@ | |
| 155829 | /* At this point, the (iCol+1) field prefix of aSample[i] is the first |
| 155830 | ** sample that is greater than pRec. Or, if i==pIdx->nSample then pRec |
| 155831 | ** is larger than all samples in the array. */ |
| 155832 | tRowcnt iUpper, iGap; |
| 155833 | if( i>=pIdx->nSample ){ |
| 155834 | iUpper = pIdx->nRowEst0; |
| 155835 | }else{ |
| 155836 | iUpper = aSample[i].anLt[iCol]; |
| 155837 | } |
| 155838 | |
| 155839 | if( iLower>=iUpper ){ |
| @@ -156091,16 +156458,22 @@ | |
| 156458 | } |
| 156459 | } |
| 156460 | } |
| 156461 | |
| 156462 | /* |
| 156463 | ** Deallocate internal memory used by a WhereLoop object. Leave the |
| 156464 | ** object in an initialized state, as if it had been newly allocated. |
| 156465 | */ |
| 156466 | static void whereLoopClear(sqlite3 *db, WhereLoop *p){ |
| 156467 | if( p->aLTerm!=p->aLTermSpace ){ |
| 156468 | sqlite3DbFreeNN(db, p->aLTerm); |
| 156469 | p->aLTerm = p->aLTermSpace; |
| 156470 | p->nLSlot = ArraySize(p->aLTermSpace); |
| 156471 | } |
| 156472 | whereLoopClearUnion(db, p); |
| 156473 | p->nLTerm = 0; |
| 156474 | p->wsFlags = 0; |
| 156475 | } |
| 156476 | |
| 156477 | /* |
| 156478 | ** Increase the memory allocation for pLoop->aLTerm[] to be at least n. |
| 156479 | */ |
| @@ -156120,11 +156493,13 @@ | |
| 156493 | /* |
| 156494 | ** Transfer content from the second pLoop into the first. |
| 156495 | */ |
| 156496 | static int whereLoopXfer(sqlite3 *db, WhereLoop *pTo, WhereLoop *pFrom){ |
| 156497 | whereLoopClearUnion(db, pTo); |
| 156498 | if( pFrom->nLTerm > pTo->nLSlot |
| 156499 | && whereLoopResize(db, pTo, pFrom->nLTerm) |
| 156500 | ){ |
| 156501 | memset(pTo, 0, WHERE_LOOP_XFER_SZ); |
| 156502 | return SQLITE_NOMEM_BKPT; |
| 156503 | } |
| 156504 | memcpy(pTo, pFrom, WHERE_LOOP_XFER_SZ); |
| 156505 | memcpy(pTo->aLTerm, pFrom->aLTerm, pTo->nLTerm*sizeof(pTo->aLTerm[0])); |
| @@ -156138,32 +156513,34 @@ | |
| 156513 | |
| 156514 | /* |
| 156515 | ** Delete a WhereLoop object |
| 156516 | */ |
| 156517 | static void whereLoopDelete(sqlite3 *db, WhereLoop *p){ |
| 156518 | assert( db!=0 ); |
| 156519 | whereLoopClear(db, p); |
| 156520 | sqlite3DbNNFreeNN(db, p); |
| 156521 | } |
| 156522 | |
| 156523 | /* |
| 156524 | ** Free a WhereInfo structure |
| 156525 | */ |
| 156526 | static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){ |
| 156527 | assert( pWInfo!=0 ); |
| 156528 | assert( db!=0 ); |
| 156529 | sqlite3WhereClauseClear(&pWInfo->sWC); |
| 156530 | while( pWInfo->pLoops ){ |
| 156531 | WhereLoop *p = pWInfo->pLoops; |
| 156532 | pWInfo->pLoops = p->pNextLoop; |
| 156533 | whereLoopDelete(db, p); |
| 156534 | } |
| 156535 | assert( pWInfo->pExprMods==0 ); |
| 156536 | while( pWInfo->pMemToFree ){ |
| 156537 | WhereMemBlock *pNext = pWInfo->pMemToFree->pNext; |
| 156538 | sqlite3DbNNFreeNN(db, pWInfo->pMemToFree); |
| 156539 | pWInfo->pMemToFree = pNext; |
| 156540 | } |
| 156541 | sqlite3DbNNFreeNN(db, pWInfo); |
| 156542 | } |
| 156543 | |
| 156544 | /* Undo all Expr node modifications |
| 156545 | */ |
| 156546 | static void whereUndoExprMods(WhereInfo *pWInfo){ |
| @@ -156773,11 +157150,15 @@ | |
| 157150 | pNew->wsFlags = saved_wsFlags; |
| 157151 | pNew->u.btree.nEq = saved_nEq; |
| 157152 | pNew->u.btree.nBtm = saved_nBtm; |
| 157153 | pNew->u.btree.nTop = saved_nTop; |
| 157154 | pNew->nLTerm = saved_nLTerm; |
| 157155 | if( pNew->nLTerm>=pNew->nLSlot |
| 157156 | && whereLoopResize(db, pNew, pNew->nLTerm+1) |
| 157157 | ){ |
| 157158 | break; /* OOM while trying to enlarge the pNew->aLTerm array */ |
| 157159 | } |
| 157160 | pNew->aLTerm[pNew->nLTerm++] = pTerm; |
| 157161 | pNew->prereq = (saved_prereq | pTerm->prereqRight) & ~pNew->maskSelf; |
| 157162 | |
| 157163 | assert( nInMul==0 |
| 157164 | || (pNew->wsFlags & WHERE_COLUMN_NULL)!=0 |
| @@ -156866,42 +157247,43 @@ | |
| 157247 | } |
| 157248 | } |
| 157249 | if( scan.iEquiv>1 ) pNew->wsFlags |= WHERE_TRANSCONS; |
| 157250 | }else if( eOp & WO_ISNULL ){ |
| 157251 | pNew->wsFlags |= WHERE_COLUMN_NULL; |
| 157252 | }else{ |
| 157253 | int nVecLen = whereRangeVectorLen( |
| 157254 | pParse, pSrc->iCursor, pProbe, saved_nEq, pTerm |
| 157255 | ); |
| 157256 | if( eOp & (WO_GT|WO_GE) ){ |
| 157257 | testcase( eOp & WO_GT ); |
| 157258 | testcase( eOp & WO_GE ); |
| 157259 | pNew->wsFlags |= WHERE_COLUMN_RANGE|WHERE_BTM_LIMIT; |
| 157260 | pNew->u.btree.nBtm = nVecLen; |
| 157261 | pBtm = pTerm; |
| 157262 | pTop = 0; |
| 157263 | if( pTerm->wtFlags & TERM_LIKEOPT ){ |
| 157264 | /* Range constraints that come from the LIKE optimization are |
| 157265 | ** always used in pairs. */ |
| 157266 | pTop = &pTerm[1]; |
| 157267 | assert( (pTop-(pTerm->pWC->a))<pTerm->pWC->nTerm ); |
| 157268 | assert( pTop->wtFlags & TERM_LIKEOPT ); |
| 157269 | assert( pTop->eOperator==WO_LT ); |
| 157270 | if( whereLoopResize(db, pNew, pNew->nLTerm+1) ) break; /* OOM */ |
| 157271 | pNew->aLTerm[pNew->nLTerm++] = pTop; |
| 157272 | pNew->wsFlags |= WHERE_TOP_LIMIT; |
| 157273 | pNew->u.btree.nTop = 1; |
| 157274 | } |
| 157275 | }else{ |
| 157276 | assert( eOp & (WO_LT|WO_LE) ); |
| 157277 | testcase( eOp & WO_LT ); |
| 157278 | testcase( eOp & WO_LE ); |
| 157279 | pNew->wsFlags |= WHERE_COLUMN_RANGE|WHERE_TOP_LIMIT; |
| 157280 | pNew->u.btree.nTop = nVecLen; |
| 157281 | pTop = pTerm; |
| 157282 | pBtm = (pNew->wsFlags & WHERE_BTM_LIMIT)!=0 ? |
| 157283 | pNew->aLTerm[pNew->nLTerm-2] : 0; |
| 157284 | } |
| 157285 | } |
| 157286 | |
| 157287 | /* At this point pNew->nOut is set to the number of rows expected to |
| 157288 | ** be visited by the index scan before considering term pTerm, or the |
| 157289 | ** values of nIn and nInMul. In other words, assuming that all |
| @@ -157343,10 +157725,13 @@ | |
| 157725 | #ifdef SQLITE_ENABLE_STAT4 |
| 157726 | pNew->rRun = rSize + 16 - 2*((pTab->tabFlags & TF_HasStat4)!=0); |
| 157727 | #else |
| 157728 | pNew->rRun = rSize + 16; |
| 157729 | #endif |
| 157730 | if( IsView(pTab) || (pTab->tabFlags & TF_Ephemeral)!=0 ){ |
| 157731 | pNew->wsFlags |= WHERE_VIEWSCAN; |
| 157732 | } |
| 157733 | ApplyCostMultiplier(pNew->rRun, pTab->costMult); |
| 157734 | whereLoopOutputAdjust(pWC, pNew, rSize); |
| 157735 | rc = whereLoopInsert(pBuilder, pNew); |
| 157736 | pNew->nOut = rSize; |
| 157737 | if( rc ) break; |
| @@ -158063,29 +158448,47 @@ | |
| 158448 | SrcItem *pItem; |
| 158449 | SrcItem *pEnd = &pTabList->a[pWInfo->nLevel]; |
| 158450 | sqlite3 *db = pWInfo->pParse->db; |
| 158451 | int rc = SQLITE_OK; |
| 158452 | int bFirstPastRJ = 0; |
| 158453 | int hasRightJoin = 0; |
| 158454 | WhereLoop *pNew; |
| 158455 | |
| 158456 | |
| 158457 | /* Loop over the tables in the join, from left to right */ |
| 158458 | pNew = pBuilder->pNew; |
| 158459 | |
| 158460 | /* Verify that pNew has already been initialized */ |
| 158461 | assert( pNew->nLTerm==0 ); |
| 158462 | assert( pNew->wsFlags==0 ); |
| 158463 | assert( pNew->nLSlot>=ArraySize(pNew->aLTermSpace) ); |
| 158464 | assert( pNew->aLTerm!=0 ); |
| 158465 | |
| 158466 | pBuilder->iPlanLimit = SQLITE_QUERY_PLANNER_LIMIT; |
| 158467 | for(iTab=0, pItem=pTabList->a; pItem<pEnd; iTab++, pItem++){ |
| 158468 | Bitmask mUnusable = 0; |
| 158469 | pNew->iTab = iTab; |
| 158470 | pBuilder->iPlanLimit += SQLITE_QUERY_PLANNER_LIMIT_INCR; |
| 158471 | pNew->maskSelf = sqlite3WhereGetMask(&pWInfo->sMaskSet, pItem->iCursor); |
| 158472 | if( bFirstPastRJ |
| 158473 | || (pItem->fg.jointype & (JT_OUTER|JT_CROSS|JT_LTORJ))!=0 |
| 158474 | ){ |
| 158475 | /* Add prerequisites to prevent reordering of FROM clause terms |
| 158476 | ** across CROSS joins and outer joins. The bFirstPastRJ boolean |
| 158477 | ** prevents the right operand of a RIGHT JOIN from being swapped with |
| 158478 | ** other elements even further to the right. |
| 158479 | ** |
| 158480 | ** The JT_LTORJ case and the hasRightJoin flag work together to |
| 158481 | ** prevent FROM-clause terms from moving from the right side of |
| 158482 | ** a LEFT JOIN over to the left side of that join if the LEFT JOIN |
| 158483 | ** is itself on the left side of a RIGHT JOIN. |
| 158484 | */ |
| 158485 | if( pItem->fg.jointype & JT_LTORJ ) hasRightJoin = 1; |
| 158486 | mPrereq |= mPrior; |
| 158487 | bFirstPastRJ = (pItem->fg.jointype & JT_RIGHT)!=0; |
| 158488 | }else if( !hasRightJoin ){ |
| 158489 | mPrereq = 0; |
| 158490 | } |
| 158491 | #ifndef SQLITE_OMIT_VIRTUALTABLE |
| 158492 | if( IsVirtual(pItem->pTab) ){ |
| 158493 | SrcItem *p; |
| 158494 | for(p=&pItem[1]; p<pEnd; p++){ |
| @@ -158654,13 +159057,13 @@ | |
| 159057 | for(ii=0, pFrom=aFrom; ii<nFrom; ii++, pFrom++){ |
| 159058 | for(pWLoop=pWInfo->pLoops; pWLoop; pWLoop=pWLoop->pNextLoop){ |
| 159059 | LogEst nOut; /* Rows visited by (pFrom+pWLoop) */ |
| 159060 | LogEst rCost; /* Cost of path (pFrom+pWLoop) */ |
| 159061 | LogEst rUnsorted; /* Unsorted cost of (pFrom+pWLoop) */ |
| 159062 | i8 isOrdered; /* isOrdered for (pFrom+pWLoop) */ |
| 159063 | Bitmask maskNew; /* Mask of src visited by (..) */ |
| 159064 | Bitmask revMask; /* Mask of rev-order loops for (..) */ |
| 159065 | |
| 159066 | if( (pWLoop->prereq & ~pFrom->maskLoop)!=0 ) continue; |
| 159067 | if( (pWLoop->maskSelf & pFrom->maskLoop)!=0 ) continue; |
| 159068 | if( (pWLoop->wsFlags & WHERE_AUTO_INDEX)!=0 && pFrom->nRow<3 ){ |
| 159069 | /* Do not use an automatic index if the this loop is expected |
| @@ -158675,11 +159078,13 @@ | |
| 159078 | ** Compute its cost */ |
| 159079 | rUnsorted = sqlite3LogEstAdd(pWLoop->rSetup,pWLoop->rRun + pFrom->nRow); |
| 159080 | rUnsorted = sqlite3LogEstAdd(rUnsorted, pFrom->rUnsorted); |
| 159081 | nOut = pFrom->nRow + pWLoop->nOut; |
| 159082 | maskNew = pFrom->maskLoop | pWLoop->maskSelf; |
| 159083 | isOrdered = pFrom->isOrdered; |
| 159084 | if( isOrdered<0 ){ |
| 159085 | revMask = 0; |
| 159086 | isOrdered = wherePathSatisfiesOrderBy(pWInfo, |
| 159087 | pWInfo->pOrderBy, pFrom, pWInfo->wctrlFlags, |
| 159088 | iLoop, pWLoop, &revMask); |
| 159089 | }else{ |
| 159090 | revMask = pFrom->revLoop; |
| @@ -158702,10 +159107,17 @@ | |
| 159107 | rUnsorted, rCost)); |
| 159108 | }else{ |
| 159109 | rCost = rUnsorted; |
| 159110 | rUnsorted -= 2; /* TUNING: Slight bias in favor of no-sort plans */ |
| 159111 | } |
| 159112 | |
| 159113 | /* TUNING: A full-scan of a VIEW or subquery in the outer loop |
| 159114 | ** is not so bad. */ |
| 159115 | if( iLoop==0 && (pWLoop->wsFlags & WHERE_VIEWSCAN)!=0 ){ |
| 159116 | rCost += -10; |
| 159117 | nOut += -30; |
| 159118 | } |
| 159119 | |
| 159120 | /* Check to see if pWLoop should be added to the set of |
| 159121 | ** mxChoice best-so-far paths. |
| 159122 | ** |
| 159123 | ** First look for an existing path among best-so-far paths |
| @@ -158935,11 +159347,12 @@ | |
| 159347 | |
| 159348 | |
| 159349 | pWInfo->nRowOut = pFrom->nRow; |
| 159350 | |
| 159351 | /* Free temporary memory and return success */ |
| 159352 | assert( db!=0 ); |
| 159353 | sqlite3DbNNFreeNN(db, pSpace); |
| 159354 | return SQLITE_OK; |
| 159355 | } |
| 159356 | |
| 159357 | /* |
| 159358 | ** Most queries use only a single table (they are not joins) and have |
| @@ -158968,11 +159381,15 @@ | |
| 159381 | if( pWInfo->wctrlFlags & WHERE_OR_SUBCLAUSE ) return 0; |
| 159382 | assert( pWInfo->pTabList->nSrc>=1 ); |
| 159383 | pItem = pWInfo->pTabList->a; |
| 159384 | pTab = pItem->pTab; |
| 159385 | if( IsVirtual(pTab) ) return 0; |
| 159386 | if( pItem->fg.isIndexedBy || pItem->fg.notIndexed ){ |
| 159387 | testcase( pItem->fg.isIndexedBy ); |
| 159388 | testcase( pItem->fg.notIndexed ); |
| 159389 | return 0; |
| 159390 | } |
| 159391 | iCur = pItem->iCursor; |
| 159392 | pWC = &pWInfo->sWC; |
| 159393 | pLoop = pBuilder->pNew; |
| 159394 | pLoop->wsFlags = 0; |
| 159395 | pLoop->nSkip = 0; |
| @@ -159141,11 +159558,11 @@ | |
| 159558 | WhereTerm *pTerm, *pEnd; |
| 159559 | SrcItem *pItem; |
| 159560 | WhereLoop *pLoop; |
| 159561 | pLoop = pWInfo->a[i].pWLoop; |
| 159562 | pItem = &pWInfo->pTabList->a[pLoop->iTab]; |
| 159563 | if( (pItem->fg.jointype & (JT_LEFT|JT_RIGHT))!=JT_LEFT ) continue; |
| 159564 | if( (pWInfo->wctrlFlags & WHERE_WANT_DISTINCT)==0 |
| 159565 | && (pLoop->wsFlags & WHERE_ONEROW)==0 |
| 159566 | ){ |
| 159567 | continue; |
| 159568 | } |
| @@ -159473,11 +159890,11 @@ | |
| 159890 | } |
| 159891 | |
| 159892 | /* Analyze all of the subexpressions. */ |
| 159893 | sqlite3WhereExprAnalyze(pTabList, &pWInfo->sWC); |
| 159894 | sqlite3WhereAddLimit(&pWInfo->sWC, pLimit); |
| 159895 | if( pParse->nErr ) goto whereBeginError; |
| 159896 | |
| 159897 | /* Special case: WHERE terms that do not refer to any tables in the join |
| 159898 | ** (constant expressions). Evaluate each such term, and jump over all the |
| 159899 | ** generated code if the result is not true. |
| 159900 | ** |
| @@ -161164,11 +161581,10 @@ | |
| 161581 | int i; |
| 161582 | int nInit = pList ? pList->nExpr : 0; |
| 161583 | for(i=0; i<pAppend->nExpr; i++){ |
| 161584 | sqlite3 *db = pParse->db; |
| 161585 | Expr *pDup = sqlite3ExprDup(db, pAppend->a[i].pExpr, 0); |
| 161586 | if( db->mallocFailed ){ |
| 161587 | sqlite3ExprDelete(db, pDup); |
| 161588 | break; |
| 161589 | } |
| 161590 | if( bIntToNull ){ |
| @@ -162435,14 +162851,13 @@ | |
| 162851 | } |
| 162852 | sqlite3VdbeAddOp2(v, OP_Goto, 0, addrDone); |
| 162853 | |
| 162854 | /* This block runs if reg1 is not NULL, but reg2 is. */ |
| 162855 | sqlite3VdbeJumpHere(v, addr); |
| 162856 | sqlite3VdbeAddOp2(v, OP_IsNull, reg2, |
| 162857 | (op==OP_Gt || op==OP_Ge) ? addrDone : lbl); |
| 162858 | VdbeCoverage(v); |
| 162859 | } |
| 162860 | |
| 162861 | /* Register reg1 currently contains csr1.peerVal (the peer-value from csr1). |
| 162862 | ** This block adds (or subtracts for DESC) the numeric value in regVal |
| 162863 | ** from it. Or, if reg1 is not numeric (it is a NULL, a text value or a blob), |
| @@ -169918,10 +170333,11 @@ | |
| 170333 | while( 1 ){ |
| 170334 | n = sqlite3GetToken((u8*)zSql, &tokenType); |
| 170335 | mxSqlLen -= n; |
| 170336 | if( mxSqlLen<0 ){ |
| 170337 | pParse->rc = SQLITE_TOOBIG; |
| 170338 | pParse->nErr++; |
| 170339 | break; |
| 170340 | } |
| 170341 | #ifndef SQLITE_OMIT_WINDOWFUNC |
| 170342 | if( tokenType>=TK_WINDOW ){ |
| 170343 | assert( tokenType==TK_SPACE || tokenType==TK_OVER || tokenType==TK_FILTER |
| @@ -170014,11 +170430,11 @@ | |
| 170430 | sqlite3DeleteTable(db, pParse->pNewTable); |
| 170431 | } |
| 170432 | if( pParse->pNewTrigger && !IN_RENAME_OBJECT ){ |
| 170433 | sqlite3DeleteTrigger(db, pParse->pNewTrigger); |
| 170434 | } |
| 170435 | if( pParse->pVList ) sqlite3DbNNFreeNN(db, pParse->pVList); |
| 170436 | db->pParse = pParentParse; |
| 170437 | assert( nErr==0 || pParse->rc!=SQLITE_OK ); |
| 170438 | return nErr; |
| 170439 | } |
| 170440 | |
| @@ -171370,22 +171786,23 @@ | |
| 171786 | db->lookaside.pEnd = p; |
| 171787 | db->lookaside.bDisable = 0; |
| 171788 | db->lookaside.bMalloced = pBuf==0 ?1:0; |
| 171789 | db->lookaside.nSlot = nBig+nSm; |
| 171790 | }else{ |
| 171791 | db->lookaside.pStart = 0; |
| 171792 | #ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE |
| 171793 | db->lookaside.pSmallInit = 0; |
| 171794 | db->lookaside.pSmallFree = 0; |
| 171795 | db->lookaside.pMiddle = 0; |
| 171796 | #endif /* SQLITE_OMIT_TWOSIZE_LOOKASIDE */ |
| 171797 | db->lookaside.pEnd = 0; |
| 171798 | db->lookaside.bDisable = 1; |
| 171799 | db->lookaside.sz = 0; |
| 171800 | db->lookaside.bMalloced = 0; |
| 171801 | db->lookaside.nSlot = 0; |
| 171802 | } |
| 171803 | db->lookaside.pTrueEnd = db->lookaside.pEnd; |
| 171804 | assert( sqlite3LookasideUsed(db,0)==0 ); |
| 171805 | #endif /* SQLITE_OMIT_LOOKASIDE */ |
| 171806 | return SQLITE_OK; |
| 171807 | } |
| 171808 | |
| @@ -171460,10 +171877,11 @@ | |
| 171877 | ** Configuration settings for an individual database connection |
| 171878 | */ |
| 171879 | SQLITE_API int sqlite3_db_config(sqlite3 *db, int op, ...){ |
| 171880 | va_list ap; |
| 171881 | int rc; |
| 171882 | sqlite3_mutex_enter(db->mutex); |
| 171883 | va_start(ap, op); |
| 171884 | switch( op ){ |
| 171885 | case SQLITE_DBCONFIG_MAINDBNAME: { |
| 171886 | /* IMP: R-06824-28531 */ |
| 171887 | /* IMP: R-36257-52125 */ |
| @@ -171525,10 +171943,11 @@ | |
| 171943 | } |
| 171944 | break; |
| 171945 | } |
| 171946 | } |
| 171947 | va_end(ap); |
| 171948 | sqlite3_mutex_leave(db->mutex); |
| 171949 | return rc; |
| 171950 | } |
| 171951 | |
| 171952 | /* |
| 171953 | ** This is the default collating function named "BINARY" which is always |
| @@ -174658,12 +175077,15 @@ | |
| 175077 | sqlite3ShowUpsert(0); |
| 175078 | sqlite3ShowTriggerStep(0); |
| 175079 | sqlite3ShowTriggerStepList(0); |
| 175080 | sqlite3ShowTrigger(0); |
| 175081 | sqlite3ShowTriggerList(0); |
| 175082 | #ifndef SQLITE_OMIT_WINDOWFUNC |
| 175083 | sqlite3ShowWindow(0); |
| 175084 | sqlite3ShowWinFunc(0); |
| 175085 | #endif |
| 175086 | sqlite3ShowSelect(0); |
| 175087 | } |
| 175088 | #endif |
| 175089 | break; |
| 175090 | } |
| 175091 | |
| @@ -180993,12 +181415,11 @@ | |
| 181415 | static int fts3EvalDeferredPhrase(Fts3Cursor *pCsr, Fts3Phrase *pPhrase){ |
| 181416 | int iToken; /* Used to iterate through phrase tokens */ |
| 181417 | char *aPoslist = 0; /* Position list for deferred tokens */ |
| 181418 | int nPoslist = 0; /* Number of bytes in aPoslist */ |
| 181419 | int iPrev = -1; /* Token number of previous deferred token */ |
| 181420 | char *aFree = (pPhrase->doclist.bFreeList ? pPhrase->doclist.pList : 0); |
| 181421 | |
| 181422 | for(iToken=0; iToken<pPhrase->nToken; iToken++){ |
| 181423 | Fts3PhraseToken *pToken = &pPhrase->aToken[iToken]; |
| 181424 | Fts3DeferredToken *pDeferred = pToken->pDeferred; |
| 181425 | |
| @@ -181008,10 +181429,11 @@ | |
| 181429 | int rc = sqlite3Fts3DeferredTokenList(pDeferred, &pList, &nList); |
| 181430 | if( rc!=SQLITE_OK ) return rc; |
| 181431 | |
| 181432 | if( pList==0 ){ |
| 181433 | sqlite3_free(aPoslist); |
| 181434 | sqlite3_free(aFree); |
| 181435 | pPhrase->doclist.pList = 0; |
| 181436 | pPhrase->doclist.nList = 0; |
| 181437 | return SQLITE_OK; |
| 181438 | |
| 181439 | }else if( aPoslist==0 ){ |
| @@ -181028,10 +181450,11 @@ | |
| 181450 | sqlite3_free(aPoslist); |
| 181451 | aPoslist = pList; |
| 181452 | nPoslist = (int)(aOut - aPoslist); |
| 181453 | if( nPoslist==0 ){ |
| 181454 | sqlite3_free(aPoslist); |
| 181455 | sqlite3_free(aFree); |
| 181456 | pPhrase->doclist.pList = 0; |
| 181457 | pPhrase->doclist.nList = 0; |
| 181458 | return SQLITE_OK; |
| 181459 | } |
| 181460 | } |
| @@ -181060,17 +181483,18 @@ | |
| 181483 | p1 = pPhrase->doclist.pList; |
| 181484 | p2 = aPoslist; |
| 181485 | nDistance = iPrev - nMaxUndeferred; |
| 181486 | } |
| 181487 | |
| 181488 | aOut = (char *)sqlite3Fts3MallocZero(nPoslist+FTS3_BUFFER_PADDING); |
| 181489 | if( !aOut ){ |
| 181490 | sqlite3_free(aPoslist); |
| 181491 | return SQLITE_NOMEM; |
| 181492 | } |
| 181493 | |
| 181494 | pPhrase->doclist.pList = aOut; |
| 181495 | assert( p1 && p2 ); |
| 181496 | if( fts3PoslistPhraseMerge(&aOut, nDistance, 0, 1, &p1, &p2) ){ |
| 181497 | pPhrase->doclist.bFreeList = 1; |
| 181498 | pPhrase->doclist.nList = (int)(aOut - pPhrase->doclist.pList); |
| 181499 | }else{ |
| 181500 | sqlite3_free(aOut); |
| @@ -181079,10 +181503,11 @@ | |
| 181503 | } |
| 181504 | sqlite3_free(aPoslist); |
| 181505 | } |
| 181506 | } |
| 181507 | |
| 181508 | if( pPhrase->doclist.pList!=aFree ) sqlite3_free(aFree); |
| 181509 | return SQLITE_OK; |
| 181510 | } |
| 181511 | #endif /* SQLITE_DISABLE_FTS4_DEFERRED */ |
| 181512 | |
| 181513 | /* |
| @@ -182253,15 +182678,14 @@ | |
| 182678 | ); |
| 182679 | break; |
| 182680 | |
| 182681 | default: { |
| 182682 | #ifndef SQLITE_DISABLE_FTS4_DEFERRED |
| 182683 | if( pCsr->pDeferred && (pExpr->bDeferred || ( |
| 182684 | pExpr->iDocid==pCsr->iPrevId && pExpr->pPhrase->doclist.pList |
| 182685 | ))){ |
| 182686 | Fts3Phrase *pPhrase = pExpr->pPhrase; |
| 182687 | if( pExpr->bDeferred ){ |
| 182688 | fts3EvalInvalidatePoslist(pPhrase); |
| 182689 | } |
| 182690 | *pRc = fts3EvalDeferredPhrase(pCsr, pPhrase); |
| 182691 | bHit = (pPhrase->doclist.pList!=0); |
| @@ -204085,11 +204509,11 @@ | |
| 204509 | sqlite3_bind_value(pUp, 2, aData[2]); |
| 204510 | } |
| 204511 | sqlite3_free(p); |
| 204512 | nChange = 1; |
| 204513 | } |
| 204514 | for(jj=1; jj<nData-2; jj++){ |
| 204515 | nChange++; |
| 204516 | sqlite3_bind_value(pUp, jj+2, aData[jj+2]); |
| 204517 | } |
| 204518 | if( nChange ){ |
| 204519 | sqlite3_step(pUp); |
| @@ -212444,15 +212868,16 @@ | |
| 212868 | */ |
| 212869 | static int dbpageBegin(sqlite3_vtab *pVtab){ |
| 212870 | DbpageTable *pTab = (DbpageTable *)pVtab; |
| 212871 | sqlite3 *db = pTab->db; |
| 212872 | int i; |
| 212873 | int rc = SQLITE_OK; |
| 212874 | for(i=0; rc==SQLITE_OK && i<db->nDb; i++){ |
| 212875 | Btree *pBt = db->aDb[i].pBt; |
| 212876 | if( pBt ) rc = sqlite3BtreeBeginTrans(pBt, 1, 0); |
| 212877 | } |
| 212878 | return rc; |
| 212879 | } |
| 212880 | |
| 212881 | |
| 212882 | /* |
| 212883 | ** Invoke this routine to register the "dbpage" virtual table module |
| @@ -219172,11 +219597,11 @@ | |
| 219597 | static void sqlite3Fts5BufferAppendPrintf(int *, Fts5Buffer*, char *zFmt, ...); |
| 219598 | |
| 219599 | static char *sqlite3Fts5Mprintf(int *pRc, const char *zFmt, ...); |
| 219600 | |
| 219601 | #define fts5BufferZero(x) sqlite3Fts5BufferZero(x) |
| 219602 | #define fts5BufferAppendVarint(a,b,c) sqlite3Fts5BufferAppendVarint(a,b,(i64)c) |
| 219603 | #define fts5BufferFree(a) sqlite3Fts5BufferFree(a) |
| 219604 | #define fts5BufferAppendBlob(a,b,c,d) sqlite3Fts5BufferAppendBlob(a,b,c,d) |
| 219605 | #define fts5BufferSet(a,b,c,d) sqlite3Fts5BufferSet(a,b,c,d) |
| 219606 | |
| 219607 | #define fts5BufferGrow(pRc,pBuf,nn) ( \ |
| @@ -231049,11 +231474,13 @@ | |
| 231474 | /* Write the rowid. */ |
| 231475 | if( pWriter->bFirstRowidInDoclist || pWriter->bFirstRowidInPage ){ |
| 231476 | fts5BufferAppendVarint(&p->rc, &pPage->buf, iRowid); |
| 231477 | }else{ |
| 231478 | assert_nc( p->rc || iRowid>pWriter->iPrevRowid ); |
| 231479 | fts5BufferAppendVarint(&p->rc, &pPage->buf, |
| 231480 | (u64)iRowid - (u64)pWriter->iPrevRowid |
| 231481 | ); |
| 231482 | } |
| 231483 | pWriter->iPrevRowid = iRowid; |
| 231484 | pWriter->bFirstRowidInDoclist = 0; |
| 231485 | pWriter->bFirstRowidInPage = 0; |
| 231486 | } |
| @@ -231813,21 +232240,21 @@ | |
| 232240 | return fts5IndexReturn(p); |
| 232241 | } |
| 232242 | |
| 232243 | static void fts5AppendRowid( |
| 232244 | Fts5Index *p, |
| 232245 | u64 iDelta, |
| 232246 | Fts5Iter *pUnused, |
| 232247 | Fts5Buffer *pBuf |
| 232248 | ){ |
| 232249 | UNUSED_PARAM(pUnused); |
| 232250 | fts5BufferAppendVarint(&p->rc, pBuf, iDelta); |
| 232251 | } |
| 232252 | |
| 232253 | static void fts5AppendPoslist( |
| 232254 | Fts5Index *p, |
| 232255 | u64 iDelta, |
| 232256 | Fts5Iter *pMulti, |
| 232257 | Fts5Buffer *pBuf |
| 232258 | ){ |
| 232259 | int nData = pMulti->base.nData; |
| 232260 | int nByte = nData + 9 + 9 + FTS5_DATA_ZERO_PADDING; |
| @@ -231898,14 +232325,14 @@ | |
| 232325 | fts5BufferSafeAppendVarint(pBuf, iRowid - *piLastRowid); |
| 232326 | *piLastRowid = iRowid; |
| 232327 | } |
| 232328 | #endif |
| 232329 | |
| 232330 | #define fts5MergeAppendDocid(pBuf, iLastRowid, iRowid) { \ |
| 232331 | assert( (pBuf)->n!=0 || (iLastRowid)==0 ); \ |
| 232332 | fts5BufferSafeAppendVarint((pBuf), (u64)(iRowid) - (u64)(iLastRowid)); \ |
| 232333 | (iLastRowid) = (iRowid); \ |
| 232334 | } |
| 232335 | |
| 232336 | /* |
| 232337 | ** Swap the contents of buffer *p1 with that of *p2. |
| 232338 | */ |
| @@ -232172,11 +232599,11 @@ | |
| 232599 | Fts5Buffer *aBuf; |
| 232600 | int nBuf = 32; |
| 232601 | int nMerge = 1; |
| 232602 | |
| 232603 | void (*xMerge)(Fts5Index*, Fts5Buffer*, int, Fts5Buffer*); |
| 232604 | void (*xAppend)(Fts5Index*, u64, Fts5Iter*, Fts5Buffer*); |
| 232605 | if( p->pConfig->eDetail==FTS5_DETAIL_NONE ){ |
| 232606 | xMerge = fts5MergeRowidLists; |
| 232607 | xAppend = fts5AppendRowid; |
| 232608 | }else{ |
| 232609 | nMerge = FTS5_MERGE_NLIST-1; |
| @@ -232211,11 +232638,11 @@ | |
| 232638 | fts5MultiIterNext2(p, p1, &dummy) |
| 232639 | ){ |
| 232640 | Fts5SegIter *pSeg = &p1->aSeg[ p1->aFirst[1].iFirst ]; |
| 232641 | p1->xSetOutputs(p1, pSeg); |
| 232642 | if( p1->base.nData ){ |
| 232643 | xAppend(p, (u64)p1->base.iRowid-(u64)iLastRowid, p1, &doclist); |
| 232644 | iLastRowid = p1->base.iRowid; |
| 232645 | } |
| 232646 | } |
| 232647 | fts5MultiIterFree(p1); |
| 232648 | } |
| @@ -232259,11 +232686,11 @@ | |
| 232686 | } |
| 232687 | } |
| 232688 | iLastRowid = 0; |
| 232689 | } |
| 232690 | |
| 232691 | xAppend(p, (u64)p1->base.iRowid-(u64)iLastRowid, p1, &doclist); |
| 232692 | iLastRowid = p1->base.iRowid; |
| 232693 | } |
| 232694 | |
| 232695 | assert( (nBuf%nMerge)==0 ); |
| 232696 | for(i=0; i<nBuf; i+=nMerge){ |
| @@ -236575,11 +237002,11 @@ | |
| 237002 | int nArg, /* Number of args */ |
| 237003 | sqlite3_value **apUnused /* Function arguments */ |
| 237004 | ){ |
| 237005 | assert( nArg==0 ); |
| 237006 | UNUSED_PARAM2(nArg, apUnused); |
| 237007 | sqlite3_result_text(pCtx, "fts5: 2022-09-02 21:19:24 da7af290960ab8a04a1f55cdc5eeac36b47fa194edf67f0a05daa4b7f2a4071c", -1, SQLITE_TRANSIENT); |
| 237008 | } |
| 237009 | |
| 237010 | /* |
| 237011 | ** Return true if zName is the extension on one of the shadow tables used |
| 237012 | ** by this module. |
| @@ -241246,10 +241673,20 @@ | |
| 241673 | /* #include <assert.h> */ |
| 241674 | /* #include <string.h> */ |
| 241675 | |
| 241676 | #ifndef SQLITE_OMIT_VIRTUALTABLE |
| 241677 | |
| 241678 | |
| 241679 | #define STMT_NUM_INTEGER_COLUMN 10 |
| 241680 | typedef struct StmtRow StmtRow; |
| 241681 | struct StmtRow { |
| 241682 | sqlite3_int64 iRowid; /* Rowid value */ |
| 241683 | char *zSql; /* column "sql" */ |
| 241684 | int aCol[STMT_NUM_INTEGER_COLUMN+1]; /* all other column values */ |
| 241685 | StmtRow *pNext; /* Next row to return */ |
| 241686 | }; |
| 241687 | |
| 241688 | /* stmt_vtab is a subclass of sqlite3_vtab which will |
| 241689 | ** serve as the underlying representation of a stmt virtual table |
| 241690 | */ |
| 241691 | typedef struct stmt_vtab stmt_vtab; |
| 241692 | struct stmt_vtab { |
| @@ -241263,12 +241700,11 @@ | |
| 241700 | */ |
| 241701 | typedef struct stmt_cursor stmt_cursor; |
| 241702 | struct stmt_cursor { |
| 241703 | sqlite3_vtab_cursor base; /* Base class - must be first */ |
| 241704 | sqlite3 *db; /* Database connection for this cursor */ |
| 241705 | StmtRow *pRow; /* Current row */ |
| 241706 | }; |
| 241707 | |
| 241708 | /* |
| 241709 | ** The stmtConnect() method is invoked to create a new |
| 241710 | ** stmt_vtab that describes the stmt virtual table. |
| @@ -241308,11 +241744,11 @@ | |
| 241744 | |
| 241745 | rc = sqlite3_declare_vtab(db, |
| 241746 | "CREATE TABLE x(sql,ncol,ro,busy,nscan,nsort,naidx,nstep," |
| 241747 | "reprep,run,mem)"); |
| 241748 | if( rc==SQLITE_OK ){ |
| 241749 | pNew = sqlite3_malloc64( sizeof(*pNew) ); |
| 241750 | *ppVtab = (sqlite3_vtab*)pNew; |
| 241751 | if( pNew==0 ) return SQLITE_NOMEM; |
| 241752 | memset(pNew, 0, sizeof(*pNew)); |
| 241753 | pNew->db = db; |
| 241754 | } |
| @@ -241330,22 +241766,33 @@ | |
| 241766 | /* |
| 241767 | ** Constructor for a new stmt_cursor object. |
| 241768 | */ |
| 241769 | static int stmtOpen(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){ |
| 241770 | stmt_cursor *pCur; |
| 241771 | pCur = sqlite3_malloc64( sizeof(*pCur) ); |
| 241772 | if( pCur==0 ) return SQLITE_NOMEM; |
| 241773 | memset(pCur, 0, sizeof(*pCur)); |
| 241774 | pCur->db = ((stmt_vtab*)p)->db; |
| 241775 | *ppCursor = &pCur->base; |
| 241776 | return SQLITE_OK; |
| 241777 | } |
| 241778 | |
| 241779 | static void stmtCsrReset(stmt_cursor *pCur){ |
| 241780 | StmtRow *pRow = 0; |
| 241781 | StmtRow *pNext = 0; |
| 241782 | for(pRow=pCur->pRow; pRow; pRow=pNext){ |
| 241783 | pNext = pRow->pNext; |
| 241784 | sqlite3_free(pRow); |
| 241785 | } |
| 241786 | pCur->pRow = 0; |
| 241787 | } |
| 241788 | |
| 241789 | /* |
| 241790 | ** Destructor for a stmt_cursor. |
| 241791 | */ |
| 241792 | static int stmtClose(sqlite3_vtab_cursor *cur){ |
| 241793 | stmtCsrReset((stmt_cursor*)cur); |
| 241794 | sqlite3_free(cur); |
| 241795 | return SQLITE_OK; |
| 241796 | } |
| 241797 | |
| 241798 | |
| @@ -241352,12 +241799,13 @@ | |
| 241799 | /* |
| 241800 | ** Advance a stmt_cursor to its next row of output. |
| 241801 | */ |
| 241802 | static int stmtNext(sqlite3_vtab_cursor *cur){ |
| 241803 | stmt_cursor *pCur = (stmt_cursor*)cur; |
| 241804 | StmtRow *pNext = pCur->pRow->pNext; |
| 241805 | sqlite3_free(pCur->pRow); |
| 241806 | pCur->pRow = pNext; |
| 241807 | return SQLITE_OK; |
| 241808 | } |
| 241809 | |
| 241810 | /* |
| 241811 | ** Return values of columns for the row at which the stmt_cursor |
| @@ -241367,43 +241815,15 @@ | |
| 241815 | sqlite3_vtab_cursor *cur, /* The cursor */ |
| 241816 | sqlite3_context *ctx, /* First argument to sqlite3_result_...() */ |
| 241817 | int i /* Which column to return */ |
| 241818 | ){ |
| 241819 | stmt_cursor *pCur = (stmt_cursor*)cur; |
| 241820 | StmtRow *pRow = pCur->pRow; |
| 241821 | if( i==STMT_COLUMN_SQL ){ |
| 241822 | sqlite3_result_text(ctx, pRow->zSql, -1, SQLITE_TRANSIENT); |
| 241823 | }else{ |
| 241824 | sqlite3_result_int(ctx, pRow->aCol[i]); |
| 241825 | } |
| 241826 | return SQLITE_OK; |
| 241827 | } |
| 241828 | |
| 241829 | /* |
| @@ -241410,21 +241830,21 @@ | |
| 241830 | ** Return the rowid for the current row. In this implementation, the |
| 241831 | ** rowid is the same as the output value. |
| 241832 | */ |
| 241833 | static int stmtRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){ |
| 241834 | stmt_cursor *pCur = (stmt_cursor*)cur; |
| 241835 | *pRowid = pCur->pRow->iRowid; |
| 241836 | return SQLITE_OK; |
| 241837 | } |
| 241838 | |
| 241839 | /* |
| 241840 | ** Return TRUE if the cursor has been moved off of the last |
| 241841 | ** row of output. |
| 241842 | */ |
| 241843 | static int stmtEof(sqlite3_vtab_cursor *cur){ |
| 241844 | stmt_cursor *pCur = (stmt_cursor*)cur; |
| 241845 | return pCur->pRow==0; |
| 241846 | } |
| 241847 | |
| 241848 | /* |
| 241849 | ** This method is called to "rewind" the stmt_cursor object back |
| 241850 | ** to the first row of output. This method is always called at least |
| @@ -241435,13 +241855,57 @@ | |
| 241855 | sqlite3_vtab_cursor *pVtabCursor, |
| 241856 | int idxNum, const char *idxStr, |
| 241857 | int argc, sqlite3_value **argv |
| 241858 | ){ |
| 241859 | stmt_cursor *pCur = (stmt_cursor *)pVtabCursor; |
| 241860 | sqlite3_stmt *p = 0; |
| 241861 | sqlite3_int64 iRowid = 1; |
| 241862 | StmtRow **ppRow = 0; |
| 241863 | |
| 241864 | stmtCsrReset(pCur); |
| 241865 | ppRow = &pCur->pRow; |
| 241866 | for(p=sqlite3_next_stmt(pCur->db, 0); p; p=sqlite3_next_stmt(pCur->db, p)){ |
| 241867 | const char *zSql = sqlite3_sql(p); |
| 241868 | sqlite3_int64 nSql = zSql ? strlen(zSql)+1 : 0; |
| 241869 | StmtRow *pNew = (StmtRow*)sqlite3_malloc64(sizeof(StmtRow) + nSql); |
| 241870 | |
| 241871 | if( pNew==0 ) return SQLITE_NOMEM; |
| 241872 | memset(pNew, 0, sizeof(StmtRow)); |
| 241873 | if( zSql ){ |
| 241874 | pNew->zSql = (char*)&pNew[1]; |
| 241875 | memcpy(pNew->zSql, zSql, nSql); |
| 241876 | } |
| 241877 | pNew->aCol[STMT_COLUMN_NCOL] = sqlite3_column_count(p); |
| 241878 | pNew->aCol[STMT_COLUMN_RO] = sqlite3_stmt_readonly(p); |
| 241879 | pNew->aCol[STMT_COLUMN_BUSY] = sqlite3_stmt_busy(p); |
| 241880 | pNew->aCol[STMT_COLUMN_NSCAN] = sqlite3_stmt_status( |
| 241881 | p, SQLITE_STMTSTATUS_FULLSCAN_STEP, 0 |
| 241882 | ); |
| 241883 | pNew->aCol[STMT_COLUMN_NSORT] = sqlite3_stmt_status( |
| 241884 | p, SQLITE_STMTSTATUS_SORT, 0 |
| 241885 | ); |
| 241886 | pNew->aCol[STMT_COLUMN_NAIDX] = sqlite3_stmt_status( |
| 241887 | p, SQLITE_STMTSTATUS_AUTOINDEX, 0 |
| 241888 | ); |
| 241889 | pNew->aCol[STMT_COLUMN_NSTEP] = sqlite3_stmt_status( |
| 241890 | p, SQLITE_STMTSTATUS_VM_STEP, 0 |
| 241891 | ); |
| 241892 | pNew->aCol[STMT_COLUMN_REPREP] = sqlite3_stmt_status( |
| 241893 | p, SQLITE_STMTSTATUS_REPREPARE, 0 |
| 241894 | ); |
| 241895 | pNew->aCol[STMT_COLUMN_RUN] = sqlite3_stmt_status( |
| 241896 | p, SQLITE_STMTSTATUS_RUN, 0 |
| 241897 | ); |
| 241898 | pNew->aCol[STMT_COLUMN_MEM] = sqlite3_stmt_status( |
| 241899 | p, SQLITE_STMTSTATUS_MEMUSED, 0 |
| 241900 | ); |
| 241901 | pNew->iRowid = iRowid++; |
| 241902 | *ppRow = pNew; |
| 241903 | ppRow = &pNew->pNext; |
| 241904 | } |
| 241905 | |
| 241906 | return SQLITE_OK; |
| 241907 | } |
| 241908 | |
| 241909 | /* |
| 241910 | ** SQLite will invoke this method one or more times while planning a query |
| 241911 | ** that uses the stmt virtual table. This routine needs to create |
| 241912 |
+17
-9
| --- extsrc/sqlite3.h | ||
| +++ extsrc/sqlite3.h | ||
| @@ -144,13 +144,13 @@ | ||
| 144 | 144 | ** |
| 145 | 145 | ** See also: [sqlite3_libversion()], |
| 146 | 146 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 147 | 147 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 148 | 148 | */ |
| 149 | -#define SQLITE_VERSION "3.39.0" | |
| 150 | -#define SQLITE_VERSION_NUMBER 3039000 | |
| 151 | -#define SQLITE_SOURCE_ID "2022-06-15 16:26:37 56c60a35ea457f06db58ec3f694a1ae16fd03e6625da1d7879d63d72bbcb1c62" | |
| 149 | +#define SQLITE_VERSION "3.40.0" | |
| 150 | +#define SQLITE_VERSION_NUMBER 3040000 | |
| 151 | +#define SQLITE_SOURCE_ID "2022-09-02 21:19:24 da7af290960ab8a04a1f55cdc5eeac36b47fa194edf67f0a05daa4b7f2a4071c" | |
| 152 | 152 | |
| 153 | 153 | /* |
| 154 | 154 | ** CAPI3REF: Run-Time Library Version Numbers |
| 155 | 155 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 156 | 156 | ** |
| @@ -3422,10 +3422,13 @@ | ||
| 3422 | 3422 | ** |
| 3423 | 3423 | ** ^(<dt>[SQLITE_OPEN_SHAREDCACHE]</dt> |
| 3424 | 3424 | ** <dd>The database is opened [shared cache] enabled, overriding |
| 3425 | 3425 | ** the default shared cache setting provided by |
| 3426 | 3426 | ** [sqlite3_enable_shared_cache()].)^ |
| 3427 | +** The [use of shared cache mode is discouraged] and hence shared cache | |
| 3428 | +** capabilities may be omitted from many builds of SQLite. In such cases, | |
| 3429 | +** this option is a no-op. | |
| 3427 | 3430 | ** |
| 3428 | 3431 | ** ^(<dt>[SQLITE_OPEN_PRIVATECACHE]</dt> |
| 3429 | 3432 | ** <dd>The database is opened [shared cache] disabled, overriding |
| 3430 | 3433 | ** the default shared cache setting provided by |
| 3431 | 3434 | ** [sqlite3_enable_shared_cache()].)^ |
| @@ -3437,11 +3440,11 @@ | ||
| 3437 | 3440 | ** connection as soon as the connection is created. In addition to setting |
| 3438 | 3441 | ** the extended result code mode, this flag also causes [sqlite3_open_v2()] |
| 3439 | 3442 | ** to return an extended result code.</dd> |
| 3440 | 3443 | ** |
| 3441 | 3444 | ** [[OPEN_NOFOLLOW]] ^(<dt>[SQLITE_OPEN_NOFOLLOW]</dt> |
| 3442 | -** <dd>The database filename is not allowed to be a symbolic link</dd> | |
| 3445 | +** <dd>The database filename is not allowed to contain a symbolic link</dd> | |
| 3443 | 3446 | ** </dl>)^ |
| 3444 | 3447 | ** |
| 3445 | 3448 | ** If the 3rd parameter to sqlite3_open_v2() is not one of the |
| 3446 | 3449 | ** required combinations shown above optionally combined with other |
| 3447 | 3450 | ** [SQLITE_OPEN_READONLY | SQLITE_OPEN_* bits] |
| @@ -6280,11 +6283,11 @@ | ||
| 6280 | 6283 | ** CAPI3REF: Return The Schema Name For A Database Connection |
| 6281 | 6284 | ** METHOD: sqlite3 |
| 6282 | 6285 | ** |
| 6283 | 6286 | ** ^The sqlite3_db_name(D,N) interface returns a pointer to the schema name |
| 6284 | 6287 | ** for the N-th database on database connection D, or a NULL pointer of N is |
| 6285 | -** out of range. An N alue of 0 means the main database file. An N of 1 is | |
| 6288 | +** out of range. An N value of 0 means the main database file. An N of 1 is | |
| 6286 | 6289 | ** the "temp" schema. Larger values of N correspond to various ATTACH-ed |
| 6287 | 6290 | ** databases. |
| 6288 | 6291 | ** |
| 6289 | 6292 | ** Space to hold the string that is returned by sqlite3_db_name() is managed |
| 6290 | 6293 | ** by SQLite itself. The string might be deallocated by any operation that |
| @@ -6463,11 +6466,11 @@ | ||
| 6463 | 6466 | ** |
| 6464 | 6467 | ** ^The sqlite3_autovacuum_pages(D,C,P,X) interface registers a callback |
| 6465 | 6468 | ** function C that is invoked prior to each autovacuum of the database |
| 6466 | 6469 | ** file. ^The callback is passed a copy of the generic data pointer (P), |
| 6467 | 6470 | ** the schema-name of the attached database that is being autovacuumed, |
| 6468 | -** the the size of the database file in pages, the number of free pages, | |
| 6471 | +** the size of the database file in pages, the number of free pages, | |
| 6469 | 6472 | ** and the number of bytes per page, respectively. The callback should |
| 6470 | 6473 | ** return the number of free pages that should be removed by the |
| 6471 | 6474 | ** autovacuum. ^If the callback returns zero, then no autovacuum happens. |
| 6472 | 6475 | ** ^If the value returned is greater than or equal to the number of |
| 6473 | 6476 | ** free pages, then a complete autovacuum happens. |
| @@ -6583,10 +6586,15 @@ | ||
| 6583 | 6586 | ** |
| 6584 | 6587 | ** ^(This routine enables or disables the sharing of the database cache |
| 6585 | 6588 | ** and schema data structures between [database connection | connections] |
| 6586 | 6589 | ** to the same database. Sharing is enabled if the argument is true |
| 6587 | 6590 | ** and disabled if the argument is false.)^ |
| 6591 | +** | |
| 6592 | +** This interface is omitted if SQLite is compiled with | |
| 6593 | +** [-DSQLITE_OMIT_SHARED_CACHE]. The [-DSQLITE_OMIT_SHARED_CACHE] | |
| 6594 | +** compile-time option is recommended because the | |
| 6595 | +** [use of shared cache mode is discouraged]. | |
| 6588 | 6596 | ** |
| 6589 | 6597 | ** ^Cache sharing is enabled and disabled for an entire process. |
| 6590 | 6598 | ** This is a change as of SQLite [version 3.5.0] ([dateof:3.5.0]). |
| 6591 | 6599 | ** In prior versions of SQLite, |
| 6592 | 6600 | ** sharing was enabled or disabled for each thread separately. |
| @@ -6682,11 +6690,11 @@ | ||
| 6682 | 6690 | ** ^Setting the heap limits to zero disables the heap limiter mechanism. |
| 6683 | 6691 | ** |
| 6684 | 6692 | ** ^The soft heap limit may not be greater than the hard heap limit. |
| 6685 | 6693 | ** ^If the hard heap limit is enabled and if sqlite3_soft_heap_limit(N) |
| 6686 | 6694 | ** is invoked with a value of N that is greater than the hard heap limit, |
| 6687 | -** the the soft heap limit is set to the value of the hard heap limit. | |
| 6695 | +** the soft heap limit is set to the value of the hard heap limit. | |
| 6688 | 6696 | ** ^The soft heap limit is automatically enabled whenever the hard heap |
| 6689 | 6697 | ** limit is enabled. ^When sqlite3_hard_heap_limit64(N) is invoked and |
| 6690 | 6698 | ** the soft heap limit is outside the range of 1..N, then the soft heap |
| 6691 | 6699 | ** limit is set to N. ^Invoking sqlite3_soft_heap_limit64(0) when the |
| 6692 | 6700 | ** hard heap limit is enabled makes the soft heap limit equal to the |
| @@ -8977,11 +8985,11 @@ | ||
| 8977 | 8985 | ** sqlite3_backup_init() is called and before the corresponding call to |
| 8978 | 8986 | ** sqlite3_backup_finish(). SQLite does not currently check to see |
| 8979 | 8987 | ** if the application incorrectly accesses the destination [database connection] |
| 8980 | 8988 | ** and so no error code is reported, but the operations may malfunction |
| 8981 | 8989 | ** nevertheless. Use of the destination database connection while a |
| 8982 | -** backup is in progress might also also cause a mutex deadlock. | |
| 8990 | +** backup is in progress might also cause a mutex deadlock. | |
| 8983 | 8991 | ** |
| 8984 | 8992 | ** If running in [shared cache mode], the application must |
| 8985 | 8993 | ** guarantee that the shared cache used by the destination database |
| 8986 | 8994 | ** is not accessed while the backup is running. In practice this means |
| 8987 | 8995 | ** that the application must guarantee that the disk file being |
| @@ -9405,11 +9413,11 @@ | ||
| 9405 | 9413 | ** See the [sqlite3_wal_checkpoint_v2()] documentation for details on the |
| 9406 | 9414 | ** meaning of each of these checkpoint modes. |
| 9407 | 9415 | */ |
| 9408 | 9416 | #define SQLITE_CHECKPOINT_PASSIVE 0 /* Do as much as possible w/o blocking */ |
| 9409 | 9417 | #define SQLITE_CHECKPOINT_FULL 1 /* Wait for writers, then checkpoint */ |
| 9410 | -#define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for for readers */ | |
| 9418 | +#define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for readers */ | |
| 9411 | 9419 | #define SQLITE_CHECKPOINT_TRUNCATE 3 /* Like RESTART but also truncate WAL */ |
| 9412 | 9420 | |
| 9413 | 9421 | /* |
| 9414 | 9422 | ** CAPI3REF: Virtual Table Interface Configuration |
| 9415 | 9423 | ** |
| 9416 | 9424 |
| --- extsrc/sqlite3.h | |
| +++ extsrc/sqlite3.h | |
| @@ -144,13 +144,13 @@ | |
| 144 | ** |
| 145 | ** See also: [sqlite3_libversion()], |
| 146 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 147 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 148 | */ |
| 149 | #define SQLITE_VERSION "3.39.0" |
| 150 | #define SQLITE_VERSION_NUMBER 3039000 |
| 151 | #define SQLITE_SOURCE_ID "2022-06-15 16:26:37 56c60a35ea457f06db58ec3f694a1ae16fd03e6625da1d7879d63d72bbcb1c62" |
| 152 | |
| 153 | /* |
| 154 | ** CAPI3REF: Run-Time Library Version Numbers |
| 155 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 156 | ** |
| @@ -3422,10 +3422,13 @@ | |
| 3422 | ** |
| 3423 | ** ^(<dt>[SQLITE_OPEN_SHAREDCACHE]</dt> |
| 3424 | ** <dd>The database is opened [shared cache] enabled, overriding |
| 3425 | ** the default shared cache setting provided by |
| 3426 | ** [sqlite3_enable_shared_cache()].)^ |
| 3427 | ** |
| 3428 | ** ^(<dt>[SQLITE_OPEN_PRIVATECACHE]</dt> |
| 3429 | ** <dd>The database is opened [shared cache] disabled, overriding |
| 3430 | ** the default shared cache setting provided by |
| 3431 | ** [sqlite3_enable_shared_cache()].)^ |
| @@ -3437,11 +3440,11 @@ | |
| 3437 | ** connection as soon as the connection is created. In addition to setting |
| 3438 | ** the extended result code mode, this flag also causes [sqlite3_open_v2()] |
| 3439 | ** to return an extended result code.</dd> |
| 3440 | ** |
| 3441 | ** [[OPEN_NOFOLLOW]] ^(<dt>[SQLITE_OPEN_NOFOLLOW]</dt> |
| 3442 | ** <dd>The database filename is not allowed to be a symbolic link</dd> |
| 3443 | ** </dl>)^ |
| 3444 | ** |
| 3445 | ** If the 3rd parameter to sqlite3_open_v2() is not one of the |
| 3446 | ** required combinations shown above optionally combined with other |
| 3447 | ** [SQLITE_OPEN_READONLY | SQLITE_OPEN_* bits] |
| @@ -6280,11 +6283,11 @@ | |
| 6280 | ** CAPI3REF: Return The Schema Name For A Database Connection |
| 6281 | ** METHOD: sqlite3 |
| 6282 | ** |
| 6283 | ** ^The sqlite3_db_name(D,N) interface returns a pointer to the schema name |
| 6284 | ** for the N-th database on database connection D, or a NULL pointer of N is |
| 6285 | ** out of range. An N alue of 0 means the main database file. An N of 1 is |
| 6286 | ** the "temp" schema. Larger values of N correspond to various ATTACH-ed |
| 6287 | ** databases. |
| 6288 | ** |
| 6289 | ** Space to hold the string that is returned by sqlite3_db_name() is managed |
| 6290 | ** by SQLite itself. The string might be deallocated by any operation that |
| @@ -6463,11 +6466,11 @@ | |
| 6463 | ** |
| 6464 | ** ^The sqlite3_autovacuum_pages(D,C,P,X) interface registers a callback |
| 6465 | ** function C that is invoked prior to each autovacuum of the database |
| 6466 | ** file. ^The callback is passed a copy of the generic data pointer (P), |
| 6467 | ** the schema-name of the attached database that is being autovacuumed, |
| 6468 | ** the the size of the database file in pages, the number of free pages, |
| 6469 | ** and the number of bytes per page, respectively. The callback should |
| 6470 | ** return the number of free pages that should be removed by the |
| 6471 | ** autovacuum. ^If the callback returns zero, then no autovacuum happens. |
| 6472 | ** ^If the value returned is greater than or equal to the number of |
| 6473 | ** free pages, then a complete autovacuum happens. |
| @@ -6583,10 +6586,15 @@ | |
| 6583 | ** |
| 6584 | ** ^(This routine enables or disables the sharing of the database cache |
| 6585 | ** and schema data structures between [database connection | connections] |
| 6586 | ** to the same database. Sharing is enabled if the argument is true |
| 6587 | ** and disabled if the argument is false.)^ |
| 6588 | ** |
| 6589 | ** ^Cache sharing is enabled and disabled for an entire process. |
| 6590 | ** This is a change as of SQLite [version 3.5.0] ([dateof:3.5.0]). |
| 6591 | ** In prior versions of SQLite, |
| 6592 | ** sharing was enabled or disabled for each thread separately. |
| @@ -6682,11 +6690,11 @@ | |
| 6682 | ** ^Setting the heap limits to zero disables the heap limiter mechanism. |
| 6683 | ** |
| 6684 | ** ^The soft heap limit may not be greater than the hard heap limit. |
| 6685 | ** ^If the hard heap limit is enabled and if sqlite3_soft_heap_limit(N) |
| 6686 | ** is invoked with a value of N that is greater than the hard heap limit, |
| 6687 | ** the the soft heap limit is set to the value of the hard heap limit. |
| 6688 | ** ^The soft heap limit is automatically enabled whenever the hard heap |
| 6689 | ** limit is enabled. ^When sqlite3_hard_heap_limit64(N) is invoked and |
| 6690 | ** the soft heap limit is outside the range of 1..N, then the soft heap |
| 6691 | ** limit is set to N. ^Invoking sqlite3_soft_heap_limit64(0) when the |
| 6692 | ** hard heap limit is enabled makes the soft heap limit equal to the |
| @@ -8977,11 +8985,11 @@ | |
| 8977 | ** sqlite3_backup_init() is called and before the corresponding call to |
| 8978 | ** sqlite3_backup_finish(). SQLite does not currently check to see |
| 8979 | ** if the application incorrectly accesses the destination [database connection] |
| 8980 | ** and so no error code is reported, but the operations may malfunction |
| 8981 | ** nevertheless. Use of the destination database connection while a |
| 8982 | ** backup is in progress might also also cause a mutex deadlock. |
| 8983 | ** |
| 8984 | ** If running in [shared cache mode], the application must |
| 8985 | ** guarantee that the shared cache used by the destination database |
| 8986 | ** is not accessed while the backup is running. In practice this means |
| 8987 | ** that the application must guarantee that the disk file being |
| @@ -9405,11 +9413,11 @@ | |
| 9405 | ** See the [sqlite3_wal_checkpoint_v2()] documentation for details on the |
| 9406 | ** meaning of each of these checkpoint modes. |
| 9407 | */ |
| 9408 | #define SQLITE_CHECKPOINT_PASSIVE 0 /* Do as much as possible w/o blocking */ |
| 9409 | #define SQLITE_CHECKPOINT_FULL 1 /* Wait for writers, then checkpoint */ |
| 9410 | #define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for for readers */ |
| 9411 | #define SQLITE_CHECKPOINT_TRUNCATE 3 /* Like RESTART but also truncate WAL */ |
| 9412 | |
| 9413 | /* |
| 9414 | ** CAPI3REF: Virtual Table Interface Configuration |
| 9415 | ** |
| 9416 |
| --- extsrc/sqlite3.h | |
| +++ extsrc/sqlite3.h | |
| @@ -144,13 +144,13 @@ | |
| 144 | ** |
| 145 | ** See also: [sqlite3_libversion()], |
| 146 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 147 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 148 | */ |
| 149 | #define SQLITE_VERSION "3.40.0" |
| 150 | #define SQLITE_VERSION_NUMBER 3040000 |
| 151 | #define SQLITE_SOURCE_ID "2022-09-02 21:19:24 da7af290960ab8a04a1f55cdc5eeac36b47fa194edf67f0a05daa4b7f2a4071c" |
| 152 | |
| 153 | /* |
| 154 | ** CAPI3REF: Run-Time Library Version Numbers |
| 155 | ** KEYWORDS: sqlite3_version sqlite3_sourceid |
| 156 | ** |
| @@ -3422,10 +3422,13 @@ | |
| 3422 | ** |
| 3423 | ** ^(<dt>[SQLITE_OPEN_SHAREDCACHE]</dt> |
| 3424 | ** <dd>The database is opened [shared cache] enabled, overriding |
| 3425 | ** the default shared cache setting provided by |
| 3426 | ** [sqlite3_enable_shared_cache()].)^ |
| 3427 | ** The [use of shared cache mode is discouraged] and hence shared cache |
| 3428 | ** capabilities may be omitted from many builds of SQLite. In such cases, |
| 3429 | ** this option is a no-op. |
| 3430 | ** |
| 3431 | ** ^(<dt>[SQLITE_OPEN_PRIVATECACHE]</dt> |
| 3432 | ** <dd>The database is opened [shared cache] disabled, overriding |
| 3433 | ** the default shared cache setting provided by |
| 3434 | ** [sqlite3_enable_shared_cache()].)^ |
| @@ -3437,11 +3440,11 @@ | |
| 3440 | ** connection as soon as the connection is created. In addition to setting |
| 3441 | ** the extended result code mode, this flag also causes [sqlite3_open_v2()] |
| 3442 | ** to return an extended result code.</dd> |
| 3443 | ** |
| 3444 | ** [[OPEN_NOFOLLOW]] ^(<dt>[SQLITE_OPEN_NOFOLLOW]</dt> |
| 3445 | ** <dd>The database filename is not allowed to contain a symbolic link</dd> |
| 3446 | ** </dl>)^ |
| 3447 | ** |
| 3448 | ** If the 3rd parameter to sqlite3_open_v2() is not one of the |
| 3449 | ** required combinations shown above optionally combined with other |
| 3450 | ** [SQLITE_OPEN_READONLY | SQLITE_OPEN_* bits] |
| @@ -6280,11 +6283,11 @@ | |
| 6283 | ** CAPI3REF: Return The Schema Name For A Database Connection |
| 6284 | ** METHOD: sqlite3 |
| 6285 | ** |
| 6286 | ** ^The sqlite3_db_name(D,N) interface returns a pointer to the schema name |
| 6287 | ** for the N-th database on database connection D, or a NULL pointer of N is |
| 6288 | ** out of range. An N value of 0 means the main database file. An N of 1 is |
| 6289 | ** the "temp" schema. Larger values of N correspond to various ATTACH-ed |
| 6290 | ** databases. |
| 6291 | ** |
| 6292 | ** Space to hold the string that is returned by sqlite3_db_name() is managed |
| 6293 | ** by SQLite itself. The string might be deallocated by any operation that |
| @@ -6463,11 +6466,11 @@ | |
| 6466 | ** |
| 6467 | ** ^The sqlite3_autovacuum_pages(D,C,P,X) interface registers a callback |
| 6468 | ** function C that is invoked prior to each autovacuum of the database |
| 6469 | ** file. ^The callback is passed a copy of the generic data pointer (P), |
| 6470 | ** the schema-name of the attached database that is being autovacuumed, |
| 6471 | ** the size of the database file in pages, the number of free pages, |
| 6472 | ** and the number of bytes per page, respectively. The callback should |
| 6473 | ** return the number of free pages that should be removed by the |
| 6474 | ** autovacuum. ^If the callback returns zero, then no autovacuum happens. |
| 6475 | ** ^If the value returned is greater than or equal to the number of |
| 6476 | ** free pages, then a complete autovacuum happens. |
| @@ -6583,10 +6586,15 @@ | |
| 6586 | ** |
| 6587 | ** ^(This routine enables or disables the sharing of the database cache |
| 6588 | ** and schema data structures between [database connection | connections] |
| 6589 | ** to the same database. Sharing is enabled if the argument is true |
| 6590 | ** and disabled if the argument is false.)^ |
| 6591 | ** |
| 6592 | ** This interface is omitted if SQLite is compiled with |
| 6593 | ** [-DSQLITE_OMIT_SHARED_CACHE]. The [-DSQLITE_OMIT_SHARED_CACHE] |
| 6594 | ** compile-time option is recommended because the |
| 6595 | ** [use of shared cache mode is discouraged]. |
| 6596 | ** |
| 6597 | ** ^Cache sharing is enabled and disabled for an entire process. |
| 6598 | ** This is a change as of SQLite [version 3.5.0] ([dateof:3.5.0]). |
| 6599 | ** In prior versions of SQLite, |
| 6600 | ** sharing was enabled or disabled for each thread separately. |
| @@ -6682,11 +6690,11 @@ | |
| 6690 | ** ^Setting the heap limits to zero disables the heap limiter mechanism. |
| 6691 | ** |
| 6692 | ** ^The soft heap limit may not be greater than the hard heap limit. |
| 6693 | ** ^If the hard heap limit is enabled and if sqlite3_soft_heap_limit(N) |
| 6694 | ** is invoked with a value of N that is greater than the hard heap limit, |
| 6695 | ** the soft heap limit is set to the value of the hard heap limit. |
| 6696 | ** ^The soft heap limit is automatically enabled whenever the hard heap |
| 6697 | ** limit is enabled. ^When sqlite3_hard_heap_limit64(N) is invoked and |
| 6698 | ** the soft heap limit is outside the range of 1..N, then the soft heap |
| 6699 | ** limit is set to N. ^Invoking sqlite3_soft_heap_limit64(0) when the |
| 6700 | ** hard heap limit is enabled makes the soft heap limit equal to the |
| @@ -8977,11 +8985,11 @@ | |
| 8985 | ** sqlite3_backup_init() is called and before the corresponding call to |
| 8986 | ** sqlite3_backup_finish(). SQLite does not currently check to see |
| 8987 | ** if the application incorrectly accesses the destination [database connection] |
| 8988 | ** and so no error code is reported, but the operations may malfunction |
| 8989 | ** nevertheless. Use of the destination database connection while a |
| 8990 | ** backup is in progress might also cause a mutex deadlock. |
| 8991 | ** |
| 8992 | ** If running in [shared cache mode], the application must |
| 8993 | ** guarantee that the shared cache used by the destination database |
| 8994 | ** is not accessed while the backup is running. In practice this means |
| 8995 | ** that the application must guarantee that the disk file being |
| @@ -9405,11 +9413,11 @@ | |
| 9413 | ** See the [sqlite3_wal_checkpoint_v2()] documentation for details on the |
| 9414 | ** meaning of each of these checkpoint modes. |
| 9415 | */ |
| 9416 | #define SQLITE_CHECKPOINT_PASSIVE 0 /* Do as much as possible w/o blocking */ |
| 9417 | #define SQLITE_CHECKPOINT_FULL 1 /* Wait for writers, then checkpoint */ |
| 9418 | #define SQLITE_CHECKPOINT_RESTART 2 /* Like FULL but wait for readers */ |
| 9419 | #define SQLITE_CHECKPOINT_TRUNCATE 3 /* Like RESTART but also truncate WAL */ |
| 9420 | |
| 9421 | /* |
| 9422 | ** CAPI3REF: Virtual Table Interface Configuration |
| 9423 | ** |
| 9424 |
+34
-8
| --- src/accordion.js | ||
| +++ src/accordion.js | ||
| @@ -1,12 +1,34 @@ | ||
| 1 | -/* Attach appropriate javascript to each ".accordion" button so that | |
| 2 | -** it expands and contracts when clicked. | |
| 3 | -** The uncompressed source code for the SVG icons can be found on the | |
| 4 | -** wiki page "branch/accordion-experiments" in the Fossil repository. | |
| 1 | +/* | |
| 2 | +** Attach appropriate javascript to each ".accordion" button so that it expands | |
| 3 | +** and contracts when clicked. | |
| 4 | +** | |
| 5 | +** The uncompressed source code for the SVG icons can be found on the wiki page | |
| 6 | +** "branch/accordion-experiments" in the Fossil repository. | |
| 7 | +** | |
| 8 | +** Implementation notes: | |
| 9 | +** | |
| 10 | +** The `maxHeight' CSS property is quite restrictive for vertical resizing of | |
| 11 | +** elements, especially for dynamic-content areas like the diff panels. That's | |
| 12 | +** why `maxHeight' is set only during animation, to prevent truncated elements. | |
| 13 | +** (The diff panels may get truncated right after page loading, and other | |
| 14 | +** elements may get truncated when resizing the browser window to a smaller | |
| 15 | +** width, causing vertical growth.) | |
| 16 | +** | |
| 17 | +** Another problem is that `scrollHeight' used to calculate the expanded height | |
| 18 | +** while still in the contracted state may return values with small errors on | |
| 19 | +** some browsers, especially for large elements, presumably due to omitting the | |
| 20 | +** space required by the vertical scrollbar that may become necessary, causing | |
| 21 | +** additional horizontal shrinking and consequently more vertical growth than | |
| 22 | +** calculated. That's why setting `maxHeight' to `scrollHeight' is considered | |
| 23 | +** "good enough" only during animation, but cleared afterwards. | |
| 24 | +** | |
| 25 | +** https://fossil-scm.org/forum/forumpost/66d7075f40 | |
| 26 | +** https://fossil-scm.org/home/timeline?r=accordion-fix | |
| 5 | 27 | */ |
| 6 | 28 | var acc_svgdata = ["data:image/svg+xml,"+ |
| 7 | - "%3Csvg xmlns='http:"+"/"+"/www.w3.org/2000/svg' viewBox='0 0 16 16'%3E"+ | |
| 29 | + "%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E"+ | |
| 8 | 30 | "%3Cpath style='fill:black;opacity:0' d='M16,16H0V0h16v16z'/%3E"+ |
| 9 | 31 | "%3Cpath style='fill:rgb(240,240,240)' d='M14,14H2V2h12v12z'/%3E"+ |
| 10 | 32 | "%3Cpath style='fill:rgb(64,64,64)' d='M13,13H3V3h10v10z'/%3E"+ |
| 11 | 33 | "%3Cpath style='fill:rgb(248,248,248)' d='M12,12H4V4h8v8z'/%3E"+ |
| 12 | 34 | "%3Cpath style='fill:rgb(80,128,208)' d='", "'/%3E%3C/svg%3E", |
| @@ -19,17 +41,21 @@ | ||
| 19 | 41 | a[i].insertBefore(img,a[i].firstChild); |
| 20 | 42 | img = document.createElement("img"); |
| 21 | 43 | img.src = acc_svgdata[0]+acc_svgdata[3]+acc_svgdata[1]; |
| 22 | 44 | img.className = "accordion_btn accordion_btn_minus"; |
| 23 | 45 | a[i].insertBefore(img,a[i].firstChild); |
| 24 | - var p = a[i].nextElementSibling; | |
| 25 | - p.style.maxHeight = p.scrollHeight + "px"; | |
| 26 | 46 | a[i].addEventListener("click",function(){ |
| 27 | 47 | var x = this.nextElementSibling; |
| 28 | 48 | if( this.classList.contains("accordion_closed") ){ |
| 29 | 49 | x.style.maxHeight = x.scrollHeight + "px"; |
| 50 | + setTimeout(function(){ | |
| 51 | + x.style.maxHeight = ""; | |
| 52 | + },250); // default.css: .accordion_panel { transition-duration } | |
| 30 | 53 | }else{ |
| 31 | - x.style.maxHeight = "0"; | |
| 54 | + x.style.maxHeight = x.scrollHeight + "px"; | |
| 55 | + setTimeout(function(){ | |
| 56 | + x.style.maxHeight = "0"; | |
| 57 | + },1); | |
| 32 | 58 | } |
| 33 | 59 | this.classList.toggle("accordion_closed"); |
| 34 | 60 | }); |
| 35 | 61 | } |
| 36 | 62 |
| --- src/accordion.js | |
| +++ src/accordion.js | |
| @@ -1,12 +1,34 @@ | |
| 1 | /* Attach appropriate javascript to each ".accordion" button so that |
| 2 | ** it expands and contracts when clicked. |
| 3 | ** The uncompressed source code for the SVG icons can be found on the |
| 4 | ** wiki page "branch/accordion-experiments" in the Fossil repository. |
| 5 | */ |
| 6 | var acc_svgdata = ["data:image/svg+xml,"+ |
| 7 | "%3Csvg xmlns='http:"+"/"+"/www.w3.org/2000/svg' viewBox='0 0 16 16'%3E"+ |
| 8 | "%3Cpath style='fill:black;opacity:0' d='M16,16H0V0h16v16z'/%3E"+ |
| 9 | "%3Cpath style='fill:rgb(240,240,240)' d='M14,14H2V2h12v12z'/%3E"+ |
| 10 | "%3Cpath style='fill:rgb(64,64,64)' d='M13,13H3V3h10v10z'/%3E"+ |
| 11 | "%3Cpath style='fill:rgb(248,248,248)' d='M12,12H4V4h8v8z'/%3E"+ |
| 12 | "%3Cpath style='fill:rgb(80,128,208)' d='", "'/%3E%3C/svg%3E", |
| @@ -19,17 +41,21 @@ | |
| 19 | a[i].insertBefore(img,a[i].firstChild); |
| 20 | img = document.createElement("img"); |
| 21 | img.src = acc_svgdata[0]+acc_svgdata[3]+acc_svgdata[1]; |
| 22 | img.className = "accordion_btn accordion_btn_minus"; |
| 23 | a[i].insertBefore(img,a[i].firstChild); |
| 24 | var p = a[i].nextElementSibling; |
| 25 | p.style.maxHeight = p.scrollHeight + "px"; |
| 26 | a[i].addEventListener("click",function(){ |
| 27 | var x = this.nextElementSibling; |
| 28 | if( this.classList.contains("accordion_closed") ){ |
| 29 | x.style.maxHeight = x.scrollHeight + "px"; |
| 30 | }else{ |
| 31 | x.style.maxHeight = "0"; |
| 32 | } |
| 33 | this.classList.toggle("accordion_closed"); |
| 34 | }); |
| 35 | } |
| 36 |
| --- src/accordion.js | |
| +++ src/accordion.js | |
| @@ -1,12 +1,34 @@ | |
| 1 | /* |
| 2 | ** Attach appropriate javascript to each ".accordion" button so that it expands |
| 3 | ** and contracts when clicked. |
| 4 | ** |
| 5 | ** The uncompressed source code for the SVG icons can be found on the wiki page |
| 6 | ** "branch/accordion-experiments" in the Fossil repository. |
| 7 | ** |
| 8 | ** Implementation notes: |
| 9 | ** |
| 10 | ** The `maxHeight' CSS property is quite restrictive for vertical resizing of |
| 11 | ** elements, especially for dynamic-content areas like the diff panels. That's |
| 12 | ** why `maxHeight' is set only during animation, to prevent truncated elements. |
| 13 | ** (The diff panels may get truncated right after page loading, and other |
| 14 | ** elements may get truncated when resizing the browser window to a smaller |
| 15 | ** width, causing vertical growth.) |
| 16 | ** |
| 17 | ** Another problem is that `scrollHeight' used to calculate the expanded height |
| 18 | ** while still in the contracted state may return values with small errors on |
| 19 | ** some browsers, especially for large elements, presumably due to omitting the |
| 20 | ** space required by the vertical scrollbar that may become necessary, causing |
| 21 | ** additional horizontal shrinking and consequently more vertical growth than |
| 22 | ** calculated. That's why setting `maxHeight' to `scrollHeight' is considered |
| 23 | ** "good enough" only during animation, but cleared afterwards. |
| 24 | ** |
| 25 | ** https://fossil-scm.org/forum/forumpost/66d7075f40 |
| 26 | ** https://fossil-scm.org/home/timeline?r=accordion-fix |
| 27 | */ |
| 28 | var acc_svgdata = ["data:image/svg+xml,"+ |
| 29 | "%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E"+ |
| 30 | "%3Cpath style='fill:black;opacity:0' d='M16,16H0V0h16v16z'/%3E"+ |
| 31 | "%3Cpath style='fill:rgb(240,240,240)' d='M14,14H2V2h12v12z'/%3E"+ |
| 32 | "%3Cpath style='fill:rgb(64,64,64)' d='M13,13H3V3h10v10z'/%3E"+ |
| 33 | "%3Cpath style='fill:rgb(248,248,248)' d='M12,12H4V4h8v8z'/%3E"+ |
| 34 | "%3Cpath style='fill:rgb(80,128,208)' d='", "'/%3E%3C/svg%3E", |
| @@ -19,17 +41,21 @@ | |
| 41 | a[i].insertBefore(img,a[i].firstChild); |
| 42 | img = document.createElement("img"); |
| 43 | img.src = acc_svgdata[0]+acc_svgdata[3]+acc_svgdata[1]; |
| 44 | img.className = "accordion_btn accordion_btn_minus"; |
| 45 | a[i].insertBefore(img,a[i].firstChild); |
| 46 | a[i].addEventListener("click",function(){ |
| 47 | var x = this.nextElementSibling; |
| 48 | if( this.classList.contains("accordion_closed") ){ |
| 49 | x.style.maxHeight = x.scrollHeight + "px"; |
| 50 | setTimeout(function(){ |
| 51 | x.style.maxHeight = ""; |
| 52 | },250); // default.css: .accordion_panel { transition-duration } |
| 53 | }else{ |
| 54 | x.style.maxHeight = x.scrollHeight + "px"; |
| 55 | setTimeout(function(){ |
| 56 | x.style.maxHeight = "0"; |
| 57 | },1); |
| 58 | } |
| 59 | this.classList.toggle("accordion_closed"); |
| 60 | }); |
| 61 | } |
| 62 |
+96
-23
| --- src/alerts.c | ||
| +++ src/alerts.c | ||
| @@ -140,39 +140,88 @@ | ||
| 140 | 140 | db_multi_exec( |
| 141 | 141 | "ALTER TABLE repository.pending_alert" |
| 142 | 142 | " ADD COLUMN sentMod BOOLEAN DEFAULT false;" |
| 143 | 143 | ); |
| 144 | 144 | } |
| 145 | + | |
| 146 | +/* | |
| 147 | +** Process deferred alert events. Return the number of errors. | |
| 148 | +*/ | |
| 149 | +static int alert_process_deferred_triggers(void){ | |
| 150 | + if( db_table_exists("temp","deferred_chat_events") | |
| 151 | + && db_table_exists("repository","chat") | |
| 152 | + ){ | |
| 153 | + const char *zChatUser = db_get("chat-timeline-user", 0); | |
| 154 | + if( zChatUser && zChatUser[0] ){ | |
| 155 | + db_multi_exec( | |
| 156 | + "INSERT INTO chat(mtime,lmtime,xfrom,xmsg)" | |
| 157 | + " SELECT julianday(), " | |
| 158 | + " strftime('%%Y-%%m-%%dT%%H:%%M:%%S','now','localtime')," | |
| 159 | + " %Q," | |
| 160 | + " chat_msg_from_event(type, objid, user, comment)\n" | |
| 161 | + " FROM deferred_chat_events;\n", | |
| 162 | + zChatUser | |
| 163 | + ); | |
| 164 | + } | |
| 165 | + } | |
| 166 | + return 0; | |
| 167 | +} | |
| 145 | 168 | |
| 146 | 169 | /* |
| 147 | 170 | ** Enable triggers that automatically populate the pending_alert |
| 148 | -** table. | |
| 171 | +** table. (Later:) Also add triggers that automatically relay timeline | |
| 172 | +** events to chat, if chat is configured for that. | |
| 149 | 173 | */ |
| 150 | 174 | void alert_create_trigger(void){ |
| 151 | - if( !db_table_exists("repository","pending_alert") ) return; | |
| 152 | - db_multi_exec( | |
| 153 | - "DROP TRIGGER IF EXISTS repository.alert_trigger1;\n" /* Purge legacy */ | |
| 154 | - /* "DROP TRIGGER IF EXISTS repository.email_trigger1;\n" Very old legacy */ | |
| 155 | - "CREATE TRIGGER temp.alert_trigger1\n" | |
| 156 | - "AFTER INSERT ON repository.event BEGIN\n" | |
| 157 | - " INSERT INTO pending_alert(eventid)\n" | |
| 158 | - " SELECT printf('%%.1c%%d',new.type,new.objid) WHERE true\n" | |
| 159 | - " ON CONFLICT(eventId) DO NOTHING;\n" | |
| 160 | - "END;" | |
| 161 | - ); | |
| 175 | + if( db_table_exists("repository","pending_alert") ){ | |
| 176 | + db_multi_exec( | |
| 177 | + "DROP TRIGGER IF EXISTS repository.alert_trigger1;\n" /* Purge legacy */ | |
| 178 | + "CREATE TRIGGER temp.alert_trigger1\n" | |
| 179 | + "AFTER INSERT ON repository.event BEGIN\n" | |
| 180 | + " INSERT INTO pending_alert(eventid)\n" | |
| 181 | + " SELECT printf('%%.1c%%d',new.type,new.objid) WHERE true\n" | |
| 182 | + " ON CONFLICT(eventId) DO NOTHING;\n" | |
| 183 | + "END;" | |
| 184 | + ); | |
| 185 | + } | |
| 186 | + if( db_table_exists("repository","chat") | |
| 187 | + && db_get("chat-timeline-user", "")[0]!=0 | |
| 188 | + ){ | |
| 189 | + /* Record events that will be relayed to chat, but do not relay | |
| 190 | + ** them immediately, as the chat_msg_from_event() function requires | |
| 191 | + ** that TAGXREF be up-to-date, and that has not happened yet when | |
| 192 | + ** the insert into the EVENT table occurs. Make arrangements to | |
| 193 | + ** invoke alert_process_deferred_triggers() when the transaction | |
| 194 | + ** commits. The TAGXREF table will be ready by then. */ | |
| 195 | + db_multi_exec( | |
| 196 | + "CREATE TABLE temp.deferred_chat_events(\n" | |
| 197 | + " type TEXT,\n" | |
| 198 | + " objid INT,\n" | |
| 199 | + " user TEXT,\n" | |
| 200 | + " comment TEXT\n" | |
| 201 | + ");\n" | |
| 202 | + "CREATE TRIGGER temp.chat_trigger1\n" | |
| 203 | + "AFTER INSERT ON repository.event BEGIN\n" | |
| 204 | + " INSERT INTO deferred_chat_events" | |
| 205 | + " VALUES(new.type,new.objid,new.user,new.comment);\n" | |
| 206 | + "END;\n" | |
| 207 | + ); | |
| 208 | + db_commit_hook(alert_process_deferred_triggers, 1); | |
| 209 | + } | |
| 162 | 210 | } |
| 163 | 211 | |
| 164 | 212 | /* |
| 165 | -** Disable triggers the event_pending triggers. | |
| 213 | +** Disable triggers the event_pending and chat triggers. | |
| 166 | 214 | ** |
| 167 | 215 | ** This must be called before rebuilding the EVENT table, for example |
| 168 | 216 | ** via the "fossil rebuild" command. |
| 169 | 217 | */ |
| 170 | 218 | void alert_drop_trigger(void){ |
| 171 | 219 | db_multi_exec( |
| 172 | 220 | "DROP TRIGGER IF EXISTS temp.alert_trigger1;\n" |
| 173 | 221 | "DROP TRIGGER IF EXISTS repository.alert_trigger1;\n" /* Purge legacy */ |
| 222 | + "DROP TRIGGER IF EXISTS temp.chat_trigger1;\n" | |
| 174 | 223 | ); |
| 175 | 224 | } |
| 176 | 225 | |
| 177 | 226 | /* |
| 178 | 227 | ** Return true if email alerts are active. |
| @@ -299,11 +348,11 @@ | ||
| 299 | 348 | @ <hr> |
| 300 | 349 | |
| 301 | 350 | entry_attribute("Subscription Renewal Interval In Days", 8, |
| 302 | 351 | "email-renew-interval", "eri", "", 0); |
| 303 | 352 | @ <p> |
| 304 | - @ If this value is a integer N greater than or equal to 14, then email | |
| 353 | + @ If this value is an integer N greater than or equal to 14, then email | |
| 305 | 354 | @ notification subscriptions will be suspended N days after the last known |
| 306 | 355 | @ interaction with the user. This prevents sending notifications |
| 307 | 356 | @ to abandoned accounts. If a subscription comes within 7 days of expiring, |
| 308 | 357 | @ a separate email goes out with the daily digest that prompts the |
| 309 | 358 | @ subscriber to click on a link to the "/renew" webpage in order to |
| @@ -1748,15 +1797,10 @@ | ||
| 1748 | 1797 | if( alert_webpages_disabled() ){ |
| 1749 | 1798 | db_commit_transaction(); |
| 1750 | 1799 | return; |
| 1751 | 1800 | } |
| 1752 | 1801 | login_check_credentials(); |
| 1753 | - if( !g.perm.EmailAlert ){ | |
| 1754 | - db_commit_transaction(); | |
| 1755 | - login_needed(g.anon.EmailAlert); | |
| 1756 | - /*NOTREACHED*/ | |
| 1757 | - } | |
| 1758 | 1802 | isLogin = login_is_individual(); |
| 1759 | 1803 | zName = P("name"); |
| 1760 | 1804 | nName = zName ? (int)strlen(zName) : 0; |
| 1761 | 1805 | if( g.perm.Admin && P("sid")!=0 ){ |
| 1762 | 1806 | sid = atoi(P("sid")); |
| @@ -1767,11 +1811,11 @@ | ||
| 1767 | 1811 | " THEN subscriberId ELSE 0 END" |
| 1768 | 1812 | " FROM subscriber WHERE subscriberCode>=hextoblob(%Q)" |
| 1769 | 1813 | " LIMIT 1", zName, zName); |
| 1770 | 1814 | if( sid ) keepAlive = 1; |
| 1771 | 1815 | } |
| 1772 | - if( sid==0 && isLogin ){ | |
| 1816 | + if( sid==0 && isLogin && g.perm.EmailAlert ){ | |
| 1773 | 1817 | sid = db_int(0, "SELECT subscriberId FROM subscriber" |
| 1774 | 1818 | " WHERE suname=%Q", g.zLogin); |
| 1775 | 1819 | } |
| 1776 | 1820 | if( sid==0 ){ |
| 1777 | 1821 | db_commit_transaction(); |
| @@ -2128,17 +2172,44 @@ | ||
| 2128 | 2172 | int bSubmit; |
| 2129 | 2173 | const char *zEAddr; |
| 2130 | 2174 | char *zCode = 0; |
| 2131 | 2175 | int sid = 0; |
| 2132 | 2176 | |
| 2133 | - /* If a valid subscriber code is supplied, then unsubscribe immediately. | |
| 2177 | + if( zName==0 ) zName = P("scode"); | |
| 2178 | + | |
| 2179 | + /* If a valid subscriber code is supplied, then either present the user | |
| 2180 | + ** with a comformation, or if already confirmed, unsubscribe immediately. | |
| 2134 | 2181 | */ |
| 2135 | 2182 | if( zName |
| 2136 | 2183 | && (sid = db_int(0, "SELECT subscriberId FROM subscriber" |
| 2137 | 2184 | " WHERE subscriberCode=hextoblob(%Q)", zName))!=0 |
| 2138 | 2185 | ){ |
| 2139 | - alert_unsubscribe(sid); | |
| 2186 | + char *zUnsubName = mprintf("confirm%04x", sid); | |
| 2187 | + if( P(zUnsubName)!=0 ){ | |
| 2188 | + alert_unsubscribe(sid); | |
| 2189 | + }else if( P("manage")!=0 ){ | |
| 2190 | + cgi_redirectf("%R/alerts/%s", zName); | |
| 2191 | + }else{ | |
| 2192 | + style_header("Unsubscribed"); | |
| 2193 | + form_begin(0, "%R/unsubscribe"); | |
| 2194 | + @ <input type="hidden" name="scode" value="%h(zName)"> | |
| 2195 | + @ <table border="0" cellpadding="10" width="100%%"> | |
| 2196 | + @ <tr><td align="right"> | |
| 2197 | + @ <input type="submit" name="%h(zUnsubName)" value="Unsubscribe"> | |
| 2198 | + @ </td><td><big><b>←</b></big></td> | |
| 2199 | + @ <td>Cancel your subscription to %h(g.zBaseURL) notifications | |
| 2200 | + @ </td><tr> | |
| 2201 | + @ <tr><td align="right"> | |
| 2202 | + @ <input type="submit" name="manage" \ | |
| 2203 | + @ value="Manage Subscription Settings"> | |
| 2204 | + @ </td><td><big><b>←</b></big></td> | |
| 2205 | + @ <td>Make changes to your subscription preferences | |
| 2206 | + @ </td><tr> | |
| 2207 | + @ </table> | |
| 2208 | + @ </form> | |
| 2209 | + style_finish_page(); | |
| 2210 | + } | |
| 2140 | 2211 | return; |
| 2141 | 2212 | } |
| 2142 | 2213 | |
| 2143 | 2214 | /* Logged in users are redirected to the /alerts page */ |
| 2144 | 2215 | login_check_credentials(); |
| @@ -2963,12 +3034,14 @@ | ||
| 2963 | 3034 | Blob fhdr, fbody; |
| 2964 | 3035 | blob_init(&fhdr, 0, 0); |
| 2965 | 3036 | blob_appendf(&fhdr, "To: <%s>\r\n", zEmail); |
| 2966 | 3037 | blob_append(&fhdr, blob_buffer(&p->hdr), blob_size(&p->hdr)); |
| 2967 | 3038 | blob_init(&fbody, blob_buffer(&p->txt), blob_size(&p->txt)); |
| 2968 | - blob_appendf(&fbody, "\n-- \nSubscription info: %s/alerts/%s\n", | |
| 3039 | + blob_appendf(&fbody, "\n-- \nUnsubscribe: %s/unsubscribe/%s\n", | |
| 2969 | 3040 | zUrl, zCode); |
| 3041 | + /* blob_appendf(&fbody, "Subscription settings: %s/alerts/%s\n", | |
| 3042 | + ** zUrl, zCode); */ | |
| 2970 | 3043 | alert_send(pSender,&fhdr,&fbody,p->zFromName); |
| 2971 | 3044 | nSent++; |
| 2972 | 3045 | blob_reset(&fhdr); |
| 2973 | 3046 | blob_reset(&fbody); |
| 2974 | 3047 | }else{ |
| 2975 | 3048 |
| --- src/alerts.c | |
| +++ src/alerts.c | |
| @@ -140,39 +140,88 @@ | |
| 140 | db_multi_exec( |
| 141 | "ALTER TABLE repository.pending_alert" |
| 142 | " ADD COLUMN sentMod BOOLEAN DEFAULT false;" |
| 143 | ); |
| 144 | } |
| 145 | |
| 146 | /* |
| 147 | ** Enable triggers that automatically populate the pending_alert |
| 148 | ** table. |
| 149 | */ |
| 150 | void alert_create_trigger(void){ |
| 151 | if( !db_table_exists("repository","pending_alert") ) return; |
| 152 | db_multi_exec( |
| 153 | "DROP TRIGGER IF EXISTS repository.alert_trigger1;\n" /* Purge legacy */ |
| 154 | /* "DROP TRIGGER IF EXISTS repository.email_trigger1;\n" Very old legacy */ |
| 155 | "CREATE TRIGGER temp.alert_trigger1\n" |
| 156 | "AFTER INSERT ON repository.event BEGIN\n" |
| 157 | " INSERT INTO pending_alert(eventid)\n" |
| 158 | " SELECT printf('%%.1c%%d',new.type,new.objid) WHERE true\n" |
| 159 | " ON CONFLICT(eventId) DO NOTHING;\n" |
| 160 | "END;" |
| 161 | ); |
| 162 | } |
| 163 | |
| 164 | /* |
| 165 | ** Disable triggers the event_pending triggers. |
| 166 | ** |
| 167 | ** This must be called before rebuilding the EVENT table, for example |
| 168 | ** via the "fossil rebuild" command. |
| 169 | */ |
| 170 | void alert_drop_trigger(void){ |
| 171 | db_multi_exec( |
| 172 | "DROP TRIGGER IF EXISTS temp.alert_trigger1;\n" |
| 173 | "DROP TRIGGER IF EXISTS repository.alert_trigger1;\n" /* Purge legacy */ |
| 174 | ); |
| 175 | } |
| 176 | |
| 177 | /* |
| 178 | ** Return true if email alerts are active. |
| @@ -299,11 +348,11 @@ | |
| 299 | @ <hr> |
| 300 | |
| 301 | entry_attribute("Subscription Renewal Interval In Days", 8, |
| 302 | "email-renew-interval", "eri", "", 0); |
| 303 | @ <p> |
| 304 | @ If this value is a integer N greater than or equal to 14, then email |
| 305 | @ notification subscriptions will be suspended N days after the last known |
| 306 | @ interaction with the user. This prevents sending notifications |
| 307 | @ to abandoned accounts. If a subscription comes within 7 days of expiring, |
| 308 | @ a separate email goes out with the daily digest that prompts the |
| 309 | @ subscriber to click on a link to the "/renew" webpage in order to |
| @@ -1748,15 +1797,10 @@ | |
| 1748 | if( alert_webpages_disabled() ){ |
| 1749 | db_commit_transaction(); |
| 1750 | return; |
| 1751 | } |
| 1752 | login_check_credentials(); |
| 1753 | if( !g.perm.EmailAlert ){ |
| 1754 | db_commit_transaction(); |
| 1755 | login_needed(g.anon.EmailAlert); |
| 1756 | /*NOTREACHED*/ |
| 1757 | } |
| 1758 | isLogin = login_is_individual(); |
| 1759 | zName = P("name"); |
| 1760 | nName = zName ? (int)strlen(zName) : 0; |
| 1761 | if( g.perm.Admin && P("sid")!=0 ){ |
| 1762 | sid = atoi(P("sid")); |
| @@ -1767,11 +1811,11 @@ | |
| 1767 | " THEN subscriberId ELSE 0 END" |
| 1768 | " FROM subscriber WHERE subscriberCode>=hextoblob(%Q)" |
| 1769 | " LIMIT 1", zName, zName); |
| 1770 | if( sid ) keepAlive = 1; |
| 1771 | } |
| 1772 | if( sid==0 && isLogin ){ |
| 1773 | sid = db_int(0, "SELECT subscriberId FROM subscriber" |
| 1774 | " WHERE suname=%Q", g.zLogin); |
| 1775 | } |
| 1776 | if( sid==0 ){ |
| 1777 | db_commit_transaction(); |
| @@ -2128,17 +2172,44 @@ | |
| 2128 | int bSubmit; |
| 2129 | const char *zEAddr; |
| 2130 | char *zCode = 0; |
| 2131 | int sid = 0; |
| 2132 | |
| 2133 | /* If a valid subscriber code is supplied, then unsubscribe immediately. |
| 2134 | */ |
| 2135 | if( zName |
| 2136 | && (sid = db_int(0, "SELECT subscriberId FROM subscriber" |
| 2137 | " WHERE subscriberCode=hextoblob(%Q)", zName))!=0 |
| 2138 | ){ |
| 2139 | alert_unsubscribe(sid); |
| 2140 | return; |
| 2141 | } |
| 2142 | |
| 2143 | /* Logged in users are redirected to the /alerts page */ |
| 2144 | login_check_credentials(); |
| @@ -2963,12 +3034,14 @@ | |
| 2963 | Blob fhdr, fbody; |
| 2964 | blob_init(&fhdr, 0, 0); |
| 2965 | blob_appendf(&fhdr, "To: <%s>\r\n", zEmail); |
| 2966 | blob_append(&fhdr, blob_buffer(&p->hdr), blob_size(&p->hdr)); |
| 2967 | blob_init(&fbody, blob_buffer(&p->txt), blob_size(&p->txt)); |
| 2968 | blob_appendf(&fbody, "\n-- \nSubscription info: %s/alerts/%s\n", |
| 2969 | zUrl, zCode); |
| 2970 | alert_send(pSender,&fhdr,&fbody,p->zFromName); |
| 2971 | nSent++; |
| 2972 | blob_reset(&fhdr); |
| 2973 | blob_reset(&fbody); |
| 2974 | }else{ |
| 2975 |
| --- src/alerts.c | |
| +++ src/alerts.c | |
| @@ -140,39 +140,88 @@ | |
| 140 | db_multi_exec( |
| 141 | "ALTER TABLE repository.pending_alert" |
| 142 | " ADD COLUMN sentMod BOOLEAN DEFAULT false;" |
| 143 | ); |
| 144 | } |
| 145 | |
| 146 | /* |
| 147 | ** Process deferred alert events. Return the number of errors. |
| 148 | */ |
| 149 | static int alert_process_deferred_triggers(void){ |
| 150 | if( db_table_exists("temp","deferred_chat_events") |
| 151 | && db_table_exists("repository","chat") |
| 152 | ){ |
| 153 | const char *zChatUser = db_get("chat-timeline-user", 0); |
| 154 | if( zChatUser && zChatUser[0] ){ |
| 155 | db_multi_exec( |
| 156 | "INSERT INTO chat(mtime,lmtime,xfrom,xmsg)" |
| 157 | " SELECT julianday(), " |
| 158 | " strftime('%%Y-%%m-%%dT%%H:%%M:%%S','now','localtime')," |
| 159 | " %Q," |
| 160 | " chat_msg_from_event(type, objid, user, comment)\n" |
| 161 | " FROM deferred_chat_events;\n", |
| 162 | zChatUser |
| 163 | ); |
| 164 | } |
| 165 | } |
| 166 | return 0; |
| 167 | } |
| 168 | |
| 169 | /* |
| 170 | ** Enable triggers that automatically populate the pending_alert |
| 171 | ** table. (Later:) Also add triggers that automatically relay timeline |
| 172 | ** events to chat, if chat is configured for that. |
| 173 | */ |
| 174 | void alert_create_trigger(void){ |
| 175 | if( db_table_exists("repository","pending_alert") ){ |
| 176 | db_multi_exec( |
| 177 | "DROP TRIGGER IF EXISTS repository.alert_trigger1;\n" /* Purge legacy */ |
| 178 | "CREATE TRIGGER temp.alert_trigger1\n" |
| 179 | "AFTER INSERT ON repository.event BEGIN\n" |
| 180 | " INSERT INTO pending_alert(eventid)\n" |
| 181 | " SELECT printf('%%.1c%%d',new.type,new.objid) WHERE true\n" |
| 182 | " ON CONFLICT(eventId) DO NOTHING;\n" |
| 183 | "END;" |
| 184 | ); |
| 185 | } |
| 186 | if( db_table_exists("repository","chat") |
| 187 | && db_get("chat-timeline-user", "")[0]!=0 |
| 188 | ){ |
| 189 | /* Record events that will be relayed to chat, but do not relay |
| 190 | ** them immediately, as the chat_msg_from_event() function requires |
| 191 | ** that TAGXREF be up-to-date, and that has not happened yet when |
| 192 | ** the insert into the EVENT table occurs. Make arrangements to |
| 193 | ** invoke alert_process_deferred_triggers() when the transaction |
| 194 | ** commits. The TAGXREF table will be ready by then. */ |
| 195 | db_multi_exec( |
| 196 | "CREATE TABLE temp.deferred_chat_events(\n" |
| 197 | " type TEXT,\n" |
| 198 | " objid INT,\n" |
| 199 | " user TEXT,\n" |
| 200 | " comment TEXT\n" |
| 201 | ");\n" |
| 202 | "CREATE TRIGGER temp.chat_trigger1\n" |
| 203 | "AFTER INSERT ON repository.event BEGIN\n" |
| 204 | " INSERT INTO deferred_chat_events" |
| 205 | " VALUES(new.type,new.objid,new.user,new.comment);\n" |
| 206 | "END;\n" |
| 207 | ); |
| 208 | db_commit_hook(alert_process_deferred_triggers, 1); |
| 209 | } |
| 210 | } |
| 211 | |
| 212 | /* |
| 213 | ** Disable triggers the event_pending and chat triggers. |
| 214 | ** |
| 215 | ** This must be called before rebuilding the EVENT table, for example |
| 216 | ** via the "fossil rebuild" command. |
| 217 | */ |
| 218 | void alert_drop_trigger(void){ |
| 219 | db_multi_exec( |
| 220 | "DROP TRIGGER IF EXISTS temp.alert_trigger1;\n" |
| 221 | "DROP TRIGGER IF EXISTS repository.alert_trigger1;\n" /* Purge legacy */ |
| 222 | "DROP TRIGGER IF EXISTS temp.chat_trigger1;\n" |
| 223 | ); |
| 224 | } |
| 225 | |
| 226 | /* |
| 227 | ** Return true if email alerts are active. |
| @@ -299,11 +348,11 @@ | |
| 348 | @ <hr> |
| 349 | |
| 350 | entry_attribute("Subscription Renewal Interval In Days", 8, |
| 351 | "email-renew-interval", "eri", "", 0); |
| 352 | @ <p> |
| 353 | @ If this value is an integer N greater than or equal to 14, then email |
| 354 | @ notification subscriptions will be suspended N days after the last known |
| 355 | @ interaction with the user. This prevents sending notifications |
| 356 | @ to abandoned accounts. If a subscription comes within 7 days of expiring, |
| 357 | @ a separate email goes out with the daily digest that prompts the |
| 358 | @ subscriber to click on a link to the "/renew" webpage in order to |
| @@ -1748,15 +1797,10 @@ | |
| 1797 | if( alert_webpages_disabled() ){ |
| 1798 | db_commit_transaction(); |
| 1799 | return; |
| 1800 | } |
| 1801 | login_check_credentials(); |
| 1802 | isLogin = login_is_individual(); |
| 1803 | zName = P("name"); |
| 1804 | nName = zName ? (int)strlen(zName) : 0; |
| 1805 | if( g.perm.Admin && P("sid")!=0 ){ |
| 1806 | sid = atoi(P("sid")); |
| @@ -1767,11 +1811,11 @@ | |
| 1811 | " THEN subscriberId ELSE 0 END" |
| 1812 | " FROM subscriber WHERE subscriberCode>=hextoblob(%Q)" |
| 1813 | " LIMIT 1", zName, zName); |
| 1814 | if( sid ) keepAlive = 1; |
| 1815 | } |
| 1816 | if( sid==0 && isLogin && g.perm.EmailAlert ){ |
| 1817 | sid = db_int(0, "SELECT subscriberId FROM subscriber" |
| 1818 | " WHERE suname=%Q", g.zLogin); |
| 1819 | } |
| 1820 | if( sid==0 ){ |
| 1821 | db_commit_transaction(); |
| @@ -2128,17 +2172,44 @@ | |
| 2172 | int bSubmit; |
| 2173 | const char *zEAddr; |
| 2174 | char *zCode = 0; |
| 2175 | int sid = 0; |
| 2176 | |
| 2177 | if( zName==0 ) zName = P("scode"); |
| 2178 | |
| 2179 | /* If a valid subscriber code is supplied, then either present the user |
| 2180 | ** with a comformation, or if already confirmed, unsubscribe immediately. |
| 2181 | */ |
| 2182 | if( zName |
| 2183 | && (sid = db_int(0, "SELECT subscriberId FROM subscriber" |
| 2184 | " WHERE subscriberCode=hextoblob(%Q)", zName))!=0 |
| 2185 | ){ |
| 2186 | char *zUnsubName = mprintf("confirm%04x", sid); |
| 2187 | if( P(zUnsubName)!=0 ){ |
| 2188 | alert_unsubscribe(sid); |
| 2189 | }else if( P("manage")!=0 ){ |
| 2190 | cgi_redirectf("%R/alerts/%s", zName); |
| 2191 | }else{ |
| 2192 | style_header("Unsubscribed"); |
| 2193 | form_begin(0, "%R/unsubscribe"); |
| 2194 | @ <input type="hidden" name="scode" value="%h(zName)"> |
| 2195 | @ <table border="0" cellpadding="10" width="100%%"> |
| 2196 | @ <tr><td align="right"> |
| 2197 | @ <input type="submit" name="%h(zUnsubName)" value="Unsubscribe"> |
| 2198 | @ </td><td><big><b>←</b></big></td> |
| 2199 | @ <td>Cancel your subscription to %h(g.zBaseURL) notifications |
| 2200 | @ </td><tr> |
| 2201 | @ <tr><td align="right"> |
| 2202 | @ <input type="submit" name="manage" \ |
| 2203 | @ value="Manage Subscription Settings"> |
| 2204 | @ </td><td><big><b>←</b></big></td> |
| 2205 | @ <td>Make changes to your subscription preferences |
| 2206 | @ </td><tr> |
| 2207 | @ </table> |
| 2208 | @ </form> |
| 2209 | style_finish_page(); |
| 2210 | } |
| 2211 | return; |
| 2212 | } |
| 2213 | |
| 2214 | /* Logged in users are redirected to the /alerts page */ |
| 2215 | login_check_credentials(); |
| @@ -2963,12 +3034,14 @@ | |
| 3034 | Blob fhdr, fbody; |
| 3035 | blob_init(&fhdr, 0, 0); |
| 3036 | blob_appendf(&fhdr, "To: <%s>\r\n", zEmail); |
| 3037 | blob_append(&fhdr, blob_buffer(&p->hdr), blob_size(&p->hdr)); |
| 3038 | blob_init(&fbody, blob_buffer(&p->txt), blob_size(&p->txt)); |
| 3039 | blob_appendf(&fbody, "\n-- \nUnsubscribe: %s/unsubscribe/%s\n", |
| 3040 | zUrl, zCode); |
| 3041 | /* blob_appendf(&fbody, "Subscription settings: %s/alerts/%s\n", |
| 3042 | ** zUrl, zCode); */ |
| 3043 | alert_send(pSender,&fhdr,&fbody,p->zFromName); |
| 3044 | nSent++; |
| 3045 | blob_reset(&fhdr); |
| 3046 | blob_reset(&fbody); |
| 3047 | }else{ |
| 3048 |
+27
-29
| --- src/allrepo.c | ||
| +++ src/allrepo.c | ||
| @@ -91,11 +91,11 @@ | ||
| 91 | 91 | ** line options supported by the extra command itself, if any |
| 92 | 92 | ** are present, are passed along verbatim. |
| 93 | 93 | ** |
| 94 | 94 | ** fts-config Run the "fts-config" command on all repositories. |
| 95 | 95 | ** |
| 96 | -** git CMD Do the "git export" or "git status" command (which every | |
| 96 | +** git CMD Do the "git export" or "git status" command (whichever | |
| 97 | 97 | ** is specified by CMD) on all repositories for which |
| 98 | 98 | ** a Git mirror has been previously established. |
| 99 | 99 | ** |
| 100 | 100 | ** info Run the "info" command on all repositories. |
| 101 | 101 | ** |
| @@ -153,11 +153,10 @@ | ||
| 153 | 153 | ** --dry-run If given, display instead of run actions. |
| 154 | 154 | ** --showfile Show the repository or checkout being operated upon. |
| 155 | 155 | ** --stop-on-error Halt immediately if any subprocess fails. |
| 156 | 156 | */ |
| 157 | 157 | void all_cmd(void){ |
| 158 | - int n; | |
| 159 | 158 | Stmt q; |
| 160 | 159 | const char *zCmd; |
| 161 | 160 | char *zSyscmd; |
| 162 | 161 | Blob extra; |
| 163 | 162 | int useCheckouts = 0; |
| @@ -176,35 +175,35 @@ | ||
| 176 | 175 | } |
| 177 | 176 | |
| 178 | 177 | if( g.argc<3 ){ |
| 179 | 178 | usage("SUBCOMMAND ..."); |
| 180 | 179 | } |
| 181 | - n = strlen(g.argv[2]); | |
| 182 | 180 | db_open_config(1, 0); |
| 183 | 181 | blob_zero(&extra); |
| 184 | 182 | zCmd = g.argv[2]; |
| 185 | 183 | if( !login_is_nobody() ) blob_appendf(&extra, " -U %s", g.zLogin); |
| 186 | - if( strncmp(zCmd, "ui", n)==0 || strncmp(zCmd, "server", n)==0 ){ | |
| 184 | + if( fossil_strcmp(zCmd, "ui")==0 | |
| 185 | + || fossil_strcmp(zCmd, "server")==0 ){ | |
| 187 | 186 | g.argv[1] = g.argv[2]; |
| 188 | 187 | g.argv[2] = "/"; |
| 189 | 188 | cmd_webserver(); |
| 190 | 189 | return; |
| 191 | 190 | } |
| 192 | - if( strncmp(zCmd, "list", n)==0 || strncmp(zCmd,"ls",n)==0 ){ | |
| 191 | + if( fossil_strcmp(zCmd, "list")==0 || fossil_strcmp(zCmd,"ls")==0 ){ | |
| 193 | 192 | zCmd = "list"; |
| 194 | 193 | useCheckouts = find_option("ckout","c",0)!=0; |
| 195 | - }else if( strncmp(zCmd, "backup", n)==0 ){ | |
| 194 | + }else if( fossil_strcmp(zCmd, "backup")==0 ){ | |
| 196 | 195 | char *zDest; |
| 197 | 196 | zCmd = "backup -R"; |
| 198 | 197 | collect_argument(&extra, "overwrite",0); |
| 199 | 198 | if( g.argc!=4 ) usage("backup DIRECTORY"); |
| 200 | 199 | zDest = g.argv[3]; |
| 201 | 200 | if( file_isdir(zDest, ExtFILE)!=1 ){ |
| 202 | 201 | fossil_fatal("argument to \"fossil all backup\" must be a directory"); |
| 203 | 202 | } |
| 204 | 203 | blob_appendf(&extra, " %$", zDest); |
| 205 | - }else if( strncmp(zCmd, "clean", n)==0 ){ | |
| 204 | + }else if( fossil_strcmp(zCmd, "clean")==0 ){ | |
| 206 | 205 | zCmd = "clean --chdir"; |
| 207 | 206 | collect_argument(&extra, "allckouts",0); |
| 208 | 207 | collect_argument_value(&extra, "case-sensitive"); |
| 209 | 208 | collect_argument_value(&extra, "clean"); |
| 210 | 209 | collect_argument(&extra, "dirsonly",0); |
| @@ -217,27 +216,27 @@ | ||
| 217 | 216 | collect_argument(&extra, "no-prompt",0); |
| 218 | 217 | collect_argument(&extra, "temp",0); |
| 219 | 218 | collect_argument(&extra, "verbose","v"); |
| 220 | 219 | collect_argument(&extra, "whatif",0); |
| 221 | 220 | useCheckouts = 1; |
| 222 | - }else if( strncmp(zCmd, "config", n)==0 ){ | |
| 221 | + }else if( fossil_strcmp(zCmd, "config")==0 ){ | |
| 223 | 222 | zCmd = "config -R"; |
| 224 | 223 | collect_argv(&extra, 3); |
| 225 | 224 | (void)find_option("legacy",0,0); |
| 226 | 225 | (void)find_option("overwrite",0,0); |
| 227 | 226 | verify_all_options(); |
| 228 | 227 | if( g.argc!=5 || fossil_strcmp(g.argv[3],"pull")!=0 ){ |
| 229 | 228 | usage("configure pull AREA ?OPTIONS?"); |
| 230 | 229 | } |
| 231 | - }else if( strncmp(zCmd, "dbstat", n)==0 ){ | |
| 230 | + }else if( fossil_strcmp(zCmd, "dbstat")==0 ){ | |
| 232 | 231 | zCmd = "dbstat --omit-version-info -R"; |
| 233 | 232 | showLabel = 1; |
| 234 | 233 | quiet = 1; |
| 235 | 234 | collect_argument(&extra, "brief", "b"); |
| 236 | 235 | collect_argument(&extra, "db-check", 0); |
| 237 | 236 | collect_argument(&extra, "db-verify", 0); |
| 238 | - }else if( strncmp(zCmd, "extras", n)==0 ){ | |
| 237 | + }else if( fossil_strcmp(zCmd, "extras")==0 ){ | |
| 239 | 238 | if( showFile ){ |
| 240 | 239 | zCmd = "extras --chdir"; |
| 241 | 240 | }else{ |
| 242 | 241 | zCmd = "extras --header --chdir"; |
| 243 | 242 | } |
| @@ -247,32 +246,31 @@ | ||
| 247 | 246 | collect_argument_value(&extra, "ignore"); |
| 248 | 247 | collect_argument(&extra, "rel-paths",0); |
| 249 | 248 | useCheckouts = 1; |
| 250 | 249 | stopOnError = 0; |
| 251 | 250 | quiet = 1; |
| 252 | - }else if( strncmp(zCmd, "git", n)==0 ){ | |
| 251 | + }else if( fossil_strcmp(zCmd, "git")==0 ){ | |
| 253 | 252 | if( g.argc<4 ){ |
| 254 | 253 | usage("git (export|status)"); |
| 255 | 254 | }else{ |
| 256 | - int n3 = (int)strlen(g.argv[3]); | |
| 257 | - if( strncmp(g.argv[3], "export", n3)==0 ){ | |
| 255 | + if( fossil_strcmp(g.argv[3], "export")==0 ){ | |
| 258 | 256 | zCmd = "git export --if-mirrored -R"; |
| 259 | - }else if( strncmp(g.argv[3], "status", n3)==0 ){ | |
| 257 | + }else if( fossil_strcmp(g.argv[3], "status")==0 ){ | |
| 260 | 258 | zCmd = "git status --by-all -q -R"; |
| 261 | 259 | quiet = 1; |
| 262 | 260 | }else{ |
| 263 | 261 | usage("git (export|status)"); |
| 264 | 262 | } |
| 265 | 263 | } |
| 266 | - }else if( strncmp(zCmd, "push", n)==0 ){ | |
| 264 | + }else if( fossil_strcmp(zCmd, "push")==0 ){ | |
| 267 | 265 | zCmd = "push -autourl -R"; |
| 268 | 266 | collect_argument(&extra, "verbose","v"); |
| 269 | - }else if( strncmp(zCmd, "pull", n)==0 ){ | |
| 267 | + }else if( fossil_strcmp(zCmd, "pull")==0 ){ | |
| 270 | 268 | zCmd = "pull -autourl -R"; |
| 271 | 269 | collect_argument(&extra, "verbose","v"); |
| 272 | 270 | collect_argument(&extra, "share-links",0); |
| 273 | - }else if( strncmp(zCmd, "rebuild", n)==0 ){ | |
| 271 | + }else if( fossil_strcmp(zCmd, "rebuild")==0 ){ | |
| 274 | 272 | zCmd = "rebuild"; |
| 275 | 273 | collect_argument(&extra, "cluster",0); |
| 276 | 274 | collect_argument(&extra, "compress",0); |
| 277 | 275 | collect_argument(&extra, "compress-only",0); |
| 278 | 276 | collect_argument(&extra, "noverify",0); |
| @@ -283,40 +281,40 @@ | ||
| 283 | 281 | collect_argument(&extra, "wal",0); |
| 284 | 282 | collect_argument(&extra, "stats",0); |
| 285 | 283 | collect_argument(&extra, "index",0); |
| 286 | 284 | collect_argument(&extra, "noindex",0); |
| 287 | 285 | collect_argument(&extra, "ifneeded", 0); |
| 288 | - }else if( strncmp(zCmd, "setting", n)==0 ){ | |
| 286 | + }else if( fossil_strcmp(zCmd, "setting")==0 ){ | |
| 289 | 287 | zCmd = "setting -R"; |
| 290 | 288 | collect_argv(&extra, 3); |
| 291 | - }else if( strncmp(zCmd, "unset", n)==0 ){ | |
| 289 | + }else if( fossil_strcmp(zCmd, "unset")==0 ){ | |
| 292 | 290 | zCmd = "unset -R"; |
| 293 | 291 | collect_argv(&extra, 3); |
| 294 | - }else if( strncmp(zCmd, "fts-config", n)==0 ){ | |
| 292 | + }else if( fossil_strcmp(zCmd, "fts-config")==0 ){ | |
| 295 | 293 | zCmd = "fts-config -R"; |
| 296 | 294 | collect_argv(&extra, 3); |
| 297 | - }else if( strncmp(zCmd, "sync", n)==0 ){ | |
| 295 | + }else if( fossil_strcmp(zCmd, "sync")==0 ){ | |
| 298 | 296 | zCmd = "sync -autourl -R"; |
| 299 | 297 | collect_argument(&extra, "share-links",0); |
| 300 | 298 | collect_argument(&extra, "verbose","v"); |
| 301 | 299 | collect_argument(&extra, "unversioned","u"); |
| 302 | - }else if( strncmp(zCmd, "test-integrity", n)==0 ){ | |
| 300 | + }else if( fossil_strcmp(zCmd, "test-integrity")==0 ){ | |
| 303 | 301 | collect_argument(&extra, "db-only", "d"); |
| 304 | 302 | collect_argument(&extra, "parse", 0); |
| 305 | 303 | collect_argument(&extra, "quick", "q"); |
| 306 | 304 | zCmd = "test-integrity"; |
| 307 | - }else if( strncmp(zCmd, "test-orphans", n)==0 ){ | |
| 305 | + }else if( fossil_strcmp(zCmd, "test-orphans")==0 ){ | |
| 308 | 306 | zCmd = "test-orphans -R"; |
| 309 | - }else if( strncmp(zCmd, "test-missing", n)==0 ){ | |
| 307 | + }else if( fossil_strcmp(zCmd, "test-missing")==0 ){ | |
| 310 | 308 | zCmd = "test-missing -q -R"; |
| 311 | 309 | collect_argument(&extra, "notshunned",0); |
| 312 | - }else if( strncmp(zCmd, "changes", n)==0 ){ | |
| 310 | + }else if( fossil_strcmp(zCmd, "changes")==0 ){ | |
| 313 | 311 | zCmd = "changes --quiet --header --chdir"; |
| 314 | 312 | useCheckouts = 1; |
| 315 | 313 | stopOnError = 0; |
| 316 | 314 | quiet = 1; |
| 317 | - }else if( strncmp(zCmd, "ignore", n)==0 ){ | |
| 315 | + }else if( fossil_strcmp(zCmd, "ignore")==0 ){ | |
| 318 | 316 | int j; |
| 319 | 317 | Blob fn = BLOB_INITIALIZER; |
| 320 | 318 | Blob sql = BLOB_INITIALIZER; |
| 321 | 319 | useCheckouts = find_option("ckout","c",0)!=0; |
| 322 | 320 | verify_all_options(); |
| @@ -338,11 +336,11 @@ | ||
| 338 | 336 | db_end_transaction(0); |
| 339 | 337 | blob_reset(&sql); |
| 340 | 338 | blob_reset(&fn); |
| 341 | 339 | blob_reset(&extra); |
| 342 | 340 | return; |
| 343 | - }else if( strncmp(zCmd, "add", n)==0 ){ | |
| 341 | + }else if( fossil_strcmp(zCmd, "add")==0 ){ | |
| 344 | 342 | int j; |
| 345 | 343 | Blob fn = BLOB_INITIALIZER; |
| 346 | 344 | Blob sql = BLOB_INITIALIZER; |
| 347 | 345 | verify_all_options(); |
| 348 | 346 | db_begin_transaction(); |
| @@ -375,15 +373,15 @@ | ||
| 375 | 373 | db_end_transaction(0); |
| 376 | 374 | blob_reset(&sql); |
| 377 | 375 | blob_reset(&fn); |
| 378 | 376 | blob_reset(&extra); |
| 379 | 377 | return; |
| 380 | - }else if( strncmp(zCmd, "info", n)==0 ){ | |
| 378 | + }else if( fossil_strcmp(zCmd, "info")==0 ){ | |
| 381 | 379 | zCmd = "info"; |
| 382 | 380 | showLabel = 1; |
| 383 | 381 | quiet = 1; |
| 384 | - }else if( strncmp(zCmd, "cache", n)==0 ){ | |
| 382 | + }else if( fossil_strcmp(zCmd, "cache")==0 ){ | |
| 385 | 383 | zCmd = "cache -R"; |
| 386 | 384 | showLabel = 1; |
| 387 | 385 | collect_argv(&extra, 3); |
| 388 | 386 | }else{ |
| 389 | 387 | fossil_fatal("\"all\" subcommand should be one of: " |
| 390 | 388 |
| --- src/allrepo.c | |
| +++ src/allrepo.c | |
| @@ -91,11 +91,11 @@ | |
| 91 | ** line options supported by the extra command itself, if any |
| 92 | ** are present, are passed along verbatim. |
| 93 | ** |
| 94 | ** fts-config Run the "fts-config" command on all repositories. |
| 95 | ** |
| 96 | ** git CMD Do the "git export" or "git status" command (which every |
| 97 | ** is specified by CMD) on all repositories for which |
| 98 | ** a Git mirror has been previously established. |
| 99 | ** |
| 100 | ** info Run the "info" command on all repositories. |
| 101 | ** |
| @@ -153,11 +153,10 @@ | |
| 153 | ** --dry-run If given, display instead of run actions. |
| 154 | ** --showfile Show the repository or checkout being operated upon. |
| 155 | ** --stop-on-error Halt immediately if any subprocess fails. |
| 156 | */ |
| 157 | void all_cmd(void){ |
| 158 | int n; |
| 159 | Stmt q; |
| 160 | const char *zCmd; |
| 161 | char *zSyscmd; |
| 162 | Blob extra; |
| 163 | int useCheckouts = 0; |
| @@ -176,35 +175,35 @@ | |
| 176 | } |
| 177 | |
| 178 | if( g.argc<3 ){ |
| 179 | usage("SUBCOMMAND ..."); |
| 180 | } |
| 181 | n = strlen(g.argv[2]); |
| 182 | db_open_config(1, 0); |
| 183 | blob_zero(&extra); |
| 184 | zCmd = g.argv[2]; |
| 185 | if( !login_is_nobody() ) blob_appendf(&extra, " -U %s", g.zLogin); |
| 186 | if( strncmp(zCmd, "ui", n)==0 || strncmp(zCmd, "server", n)==0 ){ |
| 187 | g.argv[1] = g.argv[2]; |
| 188 | g.argv[2] = "/"; |
| 189 | cmd_webserver(); |
| 190 | return; |
| 191 | } |
| 192 | if( strncmp(zCmd, "list", n)==0 || strncmp(zCmd,"ls",n)==0 ){ |
| 193 | zCmd = "list"; |
| 194 | useCheckouts = find_option("ckout","c",0)!=0; |
| 195 | }else if( strncmp(zCmd, "backup", n)==0 ){ |
| 196 | char *zDest; |
| 197 | zCmd = "backup -R"; |
| 198 | collect_argument(&extra, "overwrite",0); |
| 199 | if( g.argc!=4 ) usage("backup DIRECTORY"); |
| 200 | zDest = g.argv[3]; |
| 201 | if( file_isdir(zDest, ExtFILE)!=1 ){ |
| 202 | fossil_fatal("argument to \"fossil all backup\" must be a directory"); |
| 203 | } |
| 204 | blob_appendf(&extra, " %$", zDest); |
| 205 | }else if( strncmp(zCmd, "clean", n)==0 ){ |
| 206 | zCmd = "clean --chdir"; |
| 207 | collect_argument(&extra, "allckouts",0); |
| 208 | collect_argument_value(&extra, "case-sensitive"); |
| 209 | collect_argument_value(&extra, "clean"); |
| 210 | collect_argument(&extra, "dirsonly",0); |
| @@ -217,27 +216,27 @@ | |
| 217 | collect_argument(&extra, "no-prompt",0); |
| 218 | collect_argument(&extra, "temp",0); |
| 219 | collect_argument(&extra, "verbose","v"); |
| 220 | collect_argument(&extra, "whatif",0); |
| 221 | useCheckouts = 1; |
| 222 | }else if( strncmp(zCmd, "config", n)==0 ){ |
| 223 | zCmd = "config -R"; |
| 224 | collect_argv(&extra, 3); |
| 225 | (void)find_option("legacy",0,0); |
| 226 | (void)find_option("overwrite",0,0); |
| 227 | verify_all_options(); |
| 228 | if( g.argc!=5 || fossil_strcmp(g.argv[3],"pull")!=0 ){ |
| 229 | usage("configure pull AREA ?OPTIONS?"); |
| 230 | } |
| 231 | }else if( strncmp(zCmd, "dbstat", n)==0 ){ |
| 232 | zCmd = "dbstat --omit-version-info -R"; |
| 233 | showLabel = 1; |
| 234 | quiet = 1; |
| 235 | collect_argument(&extra, "brief", "b"); |
| 236 | collect_argument(&extra, "db-check", 0); |
| 237 | collect_argument(&extra, "db-verify", 0); |
| 238 | }else if( strncmp(zCmd, "extras", n)==0 ){ |
| 239 | if( showFile ){ |
| 240 | zCmd = "extras --chdir"; |
| 241 | }else{ |
| 242 | zCmd = "extras --header --chdir"; |
| 243 | } |
| @@ -247,32 +246,31 @@ | |
| 247 | collect_argument_value(&extra, "ignore"); |
| 248 | collect_argument(&extra, "rel-paths",0); |
| 249 | useCheckouts = 1; |
| 250 | stopOnError = 0; |
| 251 | quiet = 1; |
| 252 | }else if( strncmp(zCmd, "git", n)==0 ){ |
| 253 | if( g.argc<4 ){ |
| 254 | usage("git (export|status)"); |
| 255 | }else{ |
| 256 | int n3 = (int)strlen(g.argv[3]); |
| 257 | if( strncmp(g.argv[3], "export", n3)==0 ){ |
| 258 | zCmd = "git export --if-mirrored -R"; |
| 259 | }else if( strncmp(g.argv[3], "status", n3)==0 ){ |
| 260 | zCmd = "git status --by-all -q -R"; |
| 261 | quiet = 1; |
| 262 | }else{ |
| 263 | usage("git (export|status)"); |
| 264 | } |
| 265 | } |
| 266 | }else if( strncmp(zCmd, "push", n)==0 ){ |
| 267 | zCmd = "push -autourl -R"; |
| 268 | collect_argument(&extra, "verbose","v"); |
| 269 | }else if( strncmp(zCmd, "pull", n)==0 ){ |
| 270 | zCmd = "pull -autourl -R"; |
| 271 | collect_argument(&extra, "verbose","v"); |
| 272 | collect_argument(&extra, "share-links",0); |
| 273 | }else if( strncmp(zCmd, "rebuild", n)==0 ){ |
| 274 | zCmd = "rebuild"; |
| 275 | collect_argument(&extra, "cluster",0); |
| 276 | collect_argument(&extra, "compress",0); |
| 277 | collect_argument(&extra, "compress-only",0); |
| 278 | collect_argument(&extra, "noverify",0); |
| @@ -283,40 +281,40 @@ | |
| 283 | collect_argument(&extra, "wal",0); |
| 284 | collect_argument(&extra, "stats",0); |
| 285 | collect_argument(&extra, "index",0); |
| 286 | collect_argument(&extra, "noindex",0); |
| 287 | collect_argument(&extra, "ifneeded", 0); |
| 288 | }else if( strncmp(zCmd, "setting", n)==0 ){ |
| 289 | zCmd = "setting -R"; |
| 290 | collect_argv(&extra, 3); |
| 291 | }else if( strncmp(zCmd, "unset", n)==0 ){ |
| 292 | zCmd = "unset -R"; |
| 293 | collect_argv(&extra, 3); |
| 294 | }else if( strncmp(zCmd, "fts-config", n)==0 ){ |
| 295 | zCmd = "fts-config -R"; |
| 296 | collect_argv(&extra, 3); |
| 297 | }else if( strncmp(zCmd, "sync", n)==0 ){ |
| 298 | zCmd = "sync -autourl -R"; |
| 299 | collect_argument(&extra, "share-links",0); |
| 300 | collect_argument(&extra, "verbose","v"); |
| 301 | collect_argument(&extra, "unversioned","u"); |
| 302 | }else if( strncmp(zCmd, "test-integrity", n)==0 ){ |
| 303 | collect_argument(&extra, "db-only", "d"); |
| 304 | collect_argument(&extra, "parse", 0); |
| 305 | collect_argument(&extra, "quick", "q"); |
| 306 | zCmd = "test-integrity"; |
| 307 | }else if( strncmp(zCmd, "test-orphans", n)==0 ){ |
| 308 | zCmd = "test-orphans -R"; |
| 309 | }else if( strncmp(zCmd, "test-missing", n)==0 ){ |
| 310 | zCmd = "test-missing -q -R"; |
| 311 | collect_argument(&extra, "notshunned",0); |
| 312 | }else if( strncmp(zCmd, "changes", n)==0 ){ |
| 313 | zCmd = "changes --quiet --header --chdir"; |
| 314 | useCheckouts = 1; |
| 315 | stopOnError = 0; |
| 316 | quiet = 1; |
| 317 | }else if( strncmp(zCmd, "ignore", n)==0 ){ |
| 318 | int j; |
| 319 | Blob fn = BLOB_INITIALIZER; |
| 320 | Blob sql = BLOB_INITIALIZER; |
| 321 | useCheckouts = find_option("ckout","c",0)!=0; |
| 322 | verify_all_options(); |
| @@ -338,11 +336,11 @@ | |
| 338 | db_end_transaction(0); |
| 339 | blob_reset(&sql); |
| 340 | blob_reset(&fn); |
| 341 | blob_reset(&extra); |
| 342 | return; |
| 343 | }else if( strncmp(zCmd, "add", n)==0 ){ |
| 344 | int j; |
| 345 | Blob fn = BLOB_INITIALIZER; |
| 346 | Blob sql = BLOB_INITIALIZER; |
| 347 | verify_all_options(); |
| 348 | db_begin_transaction(); |
| @@ -375,15 +373,15 @@ | |
| 375 | db_end_transaction(0); |
| 376 | blob_reset(&sql); |
| 377 | blob_reset(&fn); |
| 378 | blob_reset(&extra); |
| 379 | return; |
| 380 | }else if( strncmp(zCmd, "info", n)==0 ){ |
| 381 | zCmd = "info"; |
| 382 | showLabel = 1; |
| 383 | quiet = 1; |
| 384 | }else if( strncmp(zCmd, "cache", n)==0 ){ |
| 385 | zCmd = "cache -R"; |
| 386 | showLabel = 1; |
| 387 | collect_argv(&extra, 3); |
| 388 | }else{ |
| 389 | fossil_fatal("\"all\" subcommand should be one of: " |
| 390 |
| --- src/allrepo.c | |
| +++ src/allrepo.c | |
| @@ -91,11 +91,11 @@ | |
| 91 | ** line options supported by the extra command itself, if any |
| 92 | ** are present, are passed along verbatim. |
| 93 | ** |
| 94 | ** fts-config Run the "fts-config" command on all repositories. |
| 95 | ** |
| 96 | ** git CMD Do the "git export" or "git status" command (whichever |
| 97 | ** is specified by CMD) on all repositories for which |
| 98 | ** a Git mirror has been previously established. |
| 99 | ** |
| 100 | ** info Run the "info" command on all repositories. |
| 101 | ** |
| @@ -153,11 +153,10 @@ | |
| 153 | ** --dry-run If given, display instead of run actions. |
| 154 | ** --showfile Show the repository or checkout being operated upon. |
| 155 | ** --stop-on-error Halt immediately if any subprocess fails. |
| 156 | */ |
| 157 | void all_cmd(void){ |
| 158 | Stmt q; |
| 159 | const char *zCmd; |
| 160 | char *zSyscmd; |
| 161 | Blob extra; |
| 162 | int useCheckouts = 0; |
| @@ -176,35 +175,35 @@ | |
| 175 | } |
| 176 | |
| 177 | if( g.argc<3 ){ |
| 178 | usage("SUBCOMMAND ..."); |
| 179 | } |
| 180 | db_open_config(1, 0); |
| 181 | blob_zero(&extra); |
| 182 | zCmd = g.argv[2]; |
| 183 | if( !login_is_nobody() ) blob_appendf(&extra, " -U %s", g.zLogin); |
| 184 | if( fossil_strcmp(zCmd, "ui")==0 |
| 185 | || fossil_strcmp(zCmd, "server")==0 ){ |
| 186 | g.argv[1] = g.argv[2]; |
| 187 | g.argv[2] = "/"; |
| 188 | cmd_webserver(); |
| 189 | return; |
| 190 | } |
| 191 | if( fossil_strcmp(zCmd, "list")==0 || fossil_strcmp(zCmd,"ls")==0 ){ |
| 192 | zCmd = "list"; |
| 193 | useCheckouts = find_option("ckout","c",0)!=0; |
| 194 | }else if( fossil_strcmp(zCmd, "backup")==0 ){ |
| 195 | char *zDest; |
| 196 | zCmd = "backup -R"; |
| 197 | collect_argument(&extra, "overwrite",0); |
| 198 | if( g.argc!=4 ) usage("backup DIRECTORY"); |
| 199 | zDest = g.argv[3]; |
| 200 | if( file_isdir(zDest, ExtFILE)!=1 ){ |
| 201 | fossil_fatal("argument to \"fossil all backup\" must be a directory"); |
| 202 | } |
| 203 | blob_appendf(&extra, " %$", zDest); |
| 204 | }else if( fossil_strcmp(zCmd, "clean")==0 ){ |
| 205 | zCmd = "clean --chdir"; |
| 206 | collect_argument(&extra, "allckouts",0); |
| 207 | collect_argument_value(&extra, "case-sensitive"); |
| 208 | collect_argument_value(&extra, "clean"); |
| 209 | collect_argument(&extra, "dirsonly",0); |
| @@ -217,27 +216,27 @@ | |
| 216 | collect_argument(&extra, "no-prompt",0); |
| 217 | collect_argument(&extra, "temp",0); |
| 218 | collect_argument(&extra, "verbose","v"); |
| 219 | collect_argument(&extra, "whatif",0); |
| 220 | useCheckouts = 1; |
| 221 | }else if( fossil_strcmp(zCmd, "config")==0 ){ |
| 222 | zCmd = "config -R"; |
| 223 | collect_argv(&extra, 3); |
| 224 | (void)find_option("legacy",0,0); |
| 225 | (void)find_option("overwrite",0,0); |
| 226 | verify_all_options(); |
| 227 | if( g.argc!=5 || fossil_strcmp(g.argv[3],"pull")!=0 ){ |
| 228 | usage("configure pull AREA ?OPTIONS?"); |
| 229 | } |
| 230 | }else if( fossil_strcmp(zCmd, "dbstat")==0 ){ |
| 231 | zCmd = "dbstat --omit-version-info -R"; |
| 232 | showLabel = 1; |
| 233 | quiet = 1; |
| 234 | collect_argument(&extra, "brief", "b"); |
| 235 | collect_argument(&extra, "db-check", 0); |
| 236 | collect_argument(&extra, "db-verify", 0); |
| 237 | }else if( fossil_strcmp(zCmd, "extras")==0 ){ |
| 238 | if( showFile ){ |
| 239 | zCmd = "extras --chdir"; |
| 240 | }else{ |
| 241 | zCmd = "extras --header --chdir"; |
| 242 | } |
| @@ -247,32 +246,31 @@ | |
| 246 | collect_argument_value(&extra, "ignore"); |
| 247 | collect_argument(&extra, "rel-paths",0); |
| 248 | useCheckouts = 1; |
| 249 | stopOnError = 0; |
| 250 | quiet = 1; |
| 251 | }else if( fossil_strcmp(zCmd, "git")==0 ){ |
| 252 | if( g.argc<4 ){ |
| 253 | usage("git (export|status)"); |
| 254 | }else{ |
| 255 | if( fossil_strcmp(g.argv[3], "export")==0 ){ |
| 256 | zCmd = "git export --if-mirrored -R"; |
| 257 | }else if( fossil_strcmp(g.argv[3], "status")==0 ){ |
| 258 | zCmd = "git status --by-all -q -R"; |
| 259 | quiet = 1; |
| 260 | }else{ |
| 261 | usage("git (export|status)"); |
| 262 | } |
| 263 | } |
| 264 | }else if( fossil_strcmp(zCmd, "push")==0 ){ |
| 265 | zCmd = "push -autourl -R"; |
| 266 | collect_argument(&extra, "verbose","v"); |
| 267 | }else if( fossil_strcmp(zCmd, "pull")==0 ){ |
| 268 | zCmd = "pull -autourl -R"; |
| 269 | collect_argument(&extra, "verbose","v"); |
| 270 | collect_argument(&extra, "share-links",0); |
| 271 | }else if( fossil_strcmp(zCmd, "rebuild")==0 ){ |
| 272 | zCmd = "rebuild"; |
| 273 | collect_argument(&extra, "cluster",0); |
| 274 | collect_argument(&extra, "compress",0); |
| 275 | collect_argument(&extra, "compress-only",0); |
| 276 | collect_argument(&extra, "noverify",0); |
| @@ -283,40 +281,40 @@ | |
| 281 | collect_argument(&extra, "wal",0); |
| 282 | collect_argument(&extra, "stats",0); |
| 283 | collect_argument(&extra, "index",0); |
| 284 | collect_argument(&extra, "noindex",0); |
| 285 | collect_argument(&extra, "ifneeded", 0); |
| 286 | }else if( fossil_strcmp(zCmd, "setting")==0 ){ |
| 287 | zCmd = "setting -R"; |
| 288 | collect_argv(&extra, 3); |
| 289 | }else if( fossil_strcmp(zCmd, "unset")==0 ){ |
| 290 | zCmd = "unset -R"; |
| 291 | collect_argv(&extra, 3); |
| 292 | }else if( fossil_strcmp(zCmd, "fts-config")==0 ){ |
| 293 | zCmd = "fts-config -R"; |
| 294 | collect_argv(&extra, 3); |
| 295 | }else if( fossil_strcmp(zCmd, "sync")==0 ){ |
| 296 | zCmd = "sync -autourl -R"; |
| 297 | collect_argument(&extra, "share-links",0); |
| 298 | collect_argument(&extra, "verbose","v"); |
| 299 | collect_argument(&extra, "unversioned","u"); |
| 300 | }else if( fossil_strcmp(zCmd, "test-integrity")==0 ){ |
| 301 | collect_argument(&extra, "db-only", "d"); |
| 302 | collect_argument(&extra, "parse", 0); |
| 303 | collect_argument(&extra, "quick", "q"); |
| 304 | zCmd = "test-integrity"; |
| 305 | }else if( fossil_strcmp(zCmd, "test-orphans")==0 ){ |
| 306 | zCmd = "test-orphans -R"; |
| 307 | }else if( fossil_strcmp(zCmd, "test-missing")==0 ){ |
| 308 | zCmd = "test-missing -q -R"; |
| 309 | collect_argument(&extra, "notshunned",0); |
| 310 | }else if( fossil_strcmp(zCmd, "changes")==0 ){ |
| 311 | zCmd = "changes --quiet --header --chdir"; |
| 312 | useCheckouts = 1; |
| 313 | stopOnError = 0; |
| 314 | quiet = 1; |
| 315 | }else if( fossil_strcmp(zCmd, "ignore")==0 ){ |
| 316 | int j; |
| 317 | Blob fn = BLOB_INITIALIZER; |
| 318 | Blob sql = BLOB_INITIALIZER; |
| 319 | useCheckouts = find_option("ckout","c",0)!=0; |
| 320 | verify_all_options(); |
| @@ -338,11 +336,11 @@ | |
| 336 | db_end_transaction(0); |
| 337 | blob_reset(&sql); |
| 338 | blob_reset(&fn); |
| 339 | blob_reset(&extra); |
| 340 | return; |
| 341 | }else if( fossil_strcmp(zCmd, "add")==0 ){ |
| 342 | int j; |
| 343 | Blob fn = BLOB_INITIALIZER; |
| 344 | Blob sql = BLOB_INITIALIZER; |
| 345 | verify_all_options(); |
| 346 | db_begin_transaction(); |
| @@ -375,15 +373,15 @@ | |
| 373 | db_end_transaction(0); |
| 374 | blob_reset(&sql); |
| 375 | blob_reset(&fn); |
| 376 | blob_reset(&extra); |
| 377 | return; |
| 378 | }else if( fossil_strcmp(zCmd, "info")==0 ){ |
| 379 | zCmd = "info"; |
| 380 | showLabel = 1; |
| 381 | quiet = 1; |
| 382 | }else if( fossil_strcmp(zCmd, "cache")==0 ){ |
| 383 | zCmd = "cache -R"; |
| 384 | showLabel = 1; |
| 385 | collect_argv(&extra, 3); |
| 386 | }else{ |
| 387 | fossil_fatal("\"all\" subcommand should be one of: " |
| 388 |
+12
-2
| --- src/backlink.c | ||
| +++ src/backlink.c | ||
| @@ -34,10 +34,11 @@ | ||
| 34 | 34 | */ |
| 35 | 35 | void render_backlink_graph(const char *zUuid, const char *zLabel){ |
| 36 | 36 | Blob sql; |
| 37 | 37 | Stmt q; |
| 38 | 38 | char *zGlob; |
| 39 | + int needEndPanel = 0; | |
| 39 | 40 | zGlob = mprintf("%.5s*", zUuid); |
| 40 | 41 | db_multi_exec( |
| 41 | 42 | "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);\n" |
| 42 | 43 | "DELETE FROM ok;\n" |
| 43 | 44 | "INSERT OR IGNORE INTO ok(rid)\n" |
| @@ -49,19 +50,28 @@ | ||
| 49 | 50 | " WHERE target GLOB %Q" |
| 50 | 51 | " AND %Q GLOB (target || '*');", |
| 51 | 52 | zGlob, zUuid |
| 52 | 53 | ); |
| 53 | 54 | if( !db_exists("SELECT 1 FROM ok") ) return; |
| 54 | - if( zLabel ) cgi_printf("%s", zLabel); | |
| 55 | + if( zLabel ){ | |
| 56 | + cgi_printf("%s", zLabel); | |
| 57 | + if( strstr(zLabel, "accordion")!=0 ){ | |
| 58 | + cgi_printf("<div class=\"accordion_panel\">\n"); | |
| 59 | + needEndPanel = 1; | |
| 60 | + } | |
| 61 | + } | |
| 55 | 62 | blob_zero(&sql); |
| 56 | 63 | blob_append(&sql, timeline_query_for_www(), -1); |
| 57 | 64 | blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC"); |
| 58 | 65 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| 59 | 66 | www_print_timeline(&q, |
| 60 | 67 | TIMELINE_DISJOINT|TIMELINE_GRAPH|TIMELINE_NOSCROLL|TIMELINE_REFS, |
| 61 | 68 | 0, 0, 0, 0, 0, 0); |
| 62 | 69 | db_finalize(&q); |
| 70 | + if( needEndPanel ){ | |
| 71 | + cgi_printf("</div>\n"); | |
| 72 | + } | |
| 63 | 73 | } |
| 64 | 74 | |
| 65 | 75 | /* |
| 66 | 76 | ** WEBPAGE: test-backlink-timeline |
| 67 | 77 | ** |
| @@ -366,11 +376,11 @@ | ||
| 366 | 376 | if( g.argc!=5 ){ |
| 367 | 377 | usage("SRCTYPE SRCID INPUTFILE"); |
| 368 | 378 | } |
| 369 | 379 | srctype = atoi(g.argv[2]); |
| 370 | 380 | if( srctype<0 || srctype>2 ){ |
| 371 | - fossil_fatal("SRCTYPE should be a integer 0, 1, or 2"); | |
| 381 | + fossil_fatal("SRCTYPE should be an integer 0, 1, or 2"); | |
| 372 | 382 | } |
| 373 | 383 | srcid = atoi(g.argv[3]); |
| 374 | 384 | blob_read_from_file(&in, g.argv[4], ExtFILE); |
| 375 | 385 | sqlite3_open(":memory:",&g.db); |
| 376 | 386 | if( zMTime==0 ) zMTime = "now"; |
| 377 | 387 |
| --- src/backlink.c | |
| +++ src/backlink.c | |
| @@ -34,10 +34,11 @@ | |
| 34 | */ |
| 35 | void render_backlink_graph(const char *zUuid, const char *zLabel){ |
| 36 | Blob sql; |
| 37 | Stmt q; |
| 38 | char *zGlob; |
| 39 | zGlob = mprintf("%.5s*", zUuid); |
| 40 | db_multi_exec( |
| 41 | "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);\n" |
| 42 | "DELETE FROM ok;\n" |
| 43 | "INSERT OR IGNORE INTO ok(rid)\n" |
| @@ -49,19 +50,28 @@ | |
| 49 | " WHERE target GLOB %Q" |
| 50 | " AND %Q GLOB (target || '*');", |
| 51 | zGlob, zUuid |
| 52 | ); |
| 53 | if( !db_exists("SELECT 1 FROM ok") ) return; |
| 54 | if( zLabel ) cgi_printf("%s", zLabel); |
| 55 | blob_zero(&sql); |
| 56 | blob_append(&sql, timeline_query_for_www(), -1); |
| 57 | blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC"); |
| 58 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| 59 | www_print_timeline(&q, |
| 60 | TIMELINE_DISJOINT|TIMELINE_GRAPH|TIMELINE_NOSCROLL|TIMELINE_REFS, |
| 61 | 0, 0, 0, 0, 0, 0); |
| 62 | db_finalize(&q); |
| 63 | } |
| 64 | |
| 65 | /* |
| 66 | ** WEBPAGE: test-backlink-timeline |
| 67 | ** |
| @@ -366,11 +376,11 @@ | |
| 366 | if( g.argc!=5 ){ |
| 367 | usage("SRCTYPE SRCID INPUTFILE"); |
| 368 | } |
| 369 | srctype = atoi(g.argv[2]); |
| 370 | if( srctype<0 || srctype>2 ){ |
| 371 | fossil_fatal("SRCTYPE should be a integer 0, 1, or 2"); |
| 372 | } |
| 373 | srcid = atoi(g.argv[3]); |
| 374 | blob_read_from_file(&in, g.argv[4], ExtFILE); |
| 375 | sqlite3_open(":memory:",&g.db); |
| 376 | if( zMTime==0 ) zMTime = "now"; |
| 377 |
| --- src/backlink.c | |
| +++ src/backlink.c | |
| @@ -34,10 +34,11 @@ | |
| 34 | */ |
| 35 | void render_backlink_graph(const char *zUuid, const char *zLabel){ |
| 36 | Blob sql; |
| 37 | Stmt q; |
| 38 | char *zGlob; |
| 39 | int needEndPanel = 0; |
| 40 | zGlob = mprintf("%.5s*", zUuid); |
| 41 | db_multi_exec( |
| 42 | "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);\n" |
| 43 | "DELETE FROM ok;\n" |
| 44 | "INSERT OR IGNORE INTO ok(rid)\n" |
| @@ -49,19 +50,28 @@ | |
| 50 | " WHERE target GLOB %Q" |
| 51 | " AND %Q GLOB (target || '*');", |
| 52 | zGlob, zUuid |
| 53 | ); |
| 54 | if( !db_exists("SELECT 1 FROM ok") ) return; |
| 55 | if( zLabel ){ |
| 56 | cgi_printf("%s", zLabel); |
| 57 | if( strstr(zLabel, "accordion")!=0 ){ |
| 58 | cgi_printf("<div class=\"accordion_panel\">\n"); |
| 59 | needEndPanel = 1; |
| 60 | } |
| 61 | } |
| 62 | blob_zero(&sql); |
| 63 | blob_append(&sql, timeline_query_for_www(), -1); |
| 64 | blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC"); |
| 65 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| 66 | www_print_timeline(&q, |
| 67 | TIMELINE_DISJOINT|TIMELINE_GRAPH|TIMELINE_NOSCROLL|TIMELINE_REFS, |
| 68 | 0, 0, 0, 0, 0, 0); |
| 69 | db_finalize(&q); |
| 70 | if( needEndPanel ){ |
| 71 | cgi_printf("</div>\n"); |
| 72 | } |
| 73 | } |
| 74 | |
| 75 | /* |
| 76 | ** WEBPAGE: test-backlink-timeline |
| 77 | ** |
| @@ -366,11 +376,11 @@ | |
| 376 | if( g.argc!=5 ){ |
| 377 | usage("SRCTYPE SRCID INPUTFILE"); |
| 378 | } |
| 379 | srctype = atoi(g.argv[2]); |
| 380 | if( srctype<0 || srctype>2 ){ |
| 381 | fossil_fatal("SRCTYPE should be an integer 0, 1, or 2"); |
| 382 | } |
| 383 | srcid = atoi(g.argv[3]); |
| 384 | blob_read_from_file(&in, g.argv[4], ExtFILE); |
| 385 | sqlite3_open(":memory:",&g.db); |
| 386 | if( zMTime==0 ) zMTime = "now"; |
| 387 |
+12
-2
| --- src/backlink.c | ||
| +++ src/backlink.c | ||
| @@ -34,10 +34,11 @@ | ||
| 34 | 34 | */ |
| 35 | 35 | void render_backlink_graph(const char *zUuid, const char *zLabel){ |
| 36 | 36 | Blob sql; |
| 37 | 37 | Stmt q; |
| 38 | 38 | char *zGlob; |
| 39 | + int needEndPanel = 0; | |
| 39 | 40 | zGlob = mprintf("%.5s*", zUuid); |
| 40 | 41 | db_multi_exec( |
| 41 | 42 | "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);\n" |
| 42 | 43 | "DELETE FROM ok;\n" |
| 43 | 44 | "INSERT OR IGNORE INTO ok(rid)\n" |
| @@ -49,19 +50,28 @@ | ||
| 49 | 50 | " WHERE target GLOB %Q" |
| 50 | 51 | " AND %Q GLOB (target || '*');", |
| 51 | 52 | zGlob, zUuid |
| 52 | 53 | ); |
| 53 | 54 | if( !db_exists("SELECT 1 FROM ok") ) return; |
| 54 | - if( zLabel ) cgi_printf("%s", zLabel); | |
| 55 | + if( zLabel ){ | |
| 56 | + cgi_printf("%s", zLabel); | |
| 57 | + if( strstr(zLabel, "accordion")!=0 ){ | |
| 58 | + cgi_printf("<div class=\"accordion_panel\">\n"); | |
| 59 | + needEndPanel = 1; | |
| 60 | + } | |
| 61 | + } | |
| 55 | 62 | blob_zero(&sql); |
| 56 | 63 | blob_append(&sql, timeline_query_for_www(), -1); |
| 57 | 64 | blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC"); |
| 58 | 65 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| 59 | 66 | www_print_timeline(&q, |
| 60 | 67 | TIMELINE_DISJOINT|TIMELINE_GRAPH|TIMELINE_NOSCROLL|TIMELINE_REFS, |
| 61 | 68 | 0, 0, 0, 0, 0, 0); |
| 62 | 69 | db_finalize(&q); |
| 70 | + if( needEndPanel ){ | |
| 71 | + cgi_printf("</div>\n"); | |
| 72 | + } | |
| 63 | 73 | } |
| 64 | 74 | |
| 65 | 75 | /* |
| 66 | 76 | ** WEBPAGE: test-backlink-timeline |
| 67 | 77 | ** |
| @@ -366,11 +376,11 @@ | ||
| 366 | 376 | if( g.argc!=5 ){ |
| 367 | 377 | usage("SRCTYPE SRCID INPUTFILE"); |
| 368 | 378 | } |
| 369 | 379 | srctype = atoi(g.argv[2]); |
| 370 | 380 | if( srctype<0 || srctype>2 ){ |
| 371 | - fossil_fatal("SRCTYPE should be a integer 0, 1, or 2"); | |
| 381 | + fossil_fatal("SRCTYPE should be an integer 0, 1, or 2"); | |
| 372 | 382 | } |
| 373 | 383 | srcid = atoi(g.argv[3]); |
| 374 | 384 | blob_read_from_file(&in, g.argv[4], ExtFILE); |
| 375 | 385 | sqlite3_open(":memory:",&g.db); |
| 376 | 386 | if( zMTime==0 ) zMTime = "now"; |
| 377 | 387 |
| --- src/backlink.c | |
| +++ src/backlink.c | |
| @@ -34,10 +34,11 @@ | |
| 34 | */ |
| 35 | void render_backlink_graph(const char *zUuid, const char *zLabel){ |
| 36 | Blob sql; |
| 37 | Stmt q; |
| 38 | char *zGlob; |
| 39 | zGlob = mprintf("%.5s*", zUuid); |
| 40 | db_multi_exec( |
| 41 | "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);\n" |
| 42 | "DELETE FROM ok;\n" |
| 43 | "INSERT OR IGNORE INTO ok(rid)\n" |
| @@ -49,19 +50,28 @@ | |
| 49 | " WHERE target GLOB %Q" |
| 50 | " AND %Q GLOB (target || '*');", |
| 51 | zGlob, zUuid |
| 52 | ); |
| 53 | if( !db_exists("SELECT 1 FROM ok") ) return; |
| 54 | if( zLabel ) cgi_printf("%s", zLabel); |
| 55 | blob_zero(&sql); |
| 56 | blob_append(&sql, timeline_query_for_www(), -1); |
| 57 | blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC"); |
| 58 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| 59 | www_print_timeline(&q, |
| 60 | TIMELINE_DISJOINT|TIMELINE_GRAPH|TIMELINE_NOSCROLL|TIMELINE_REFS, |
| 61 | 0, 0, 0, 0, 0, 0); |
| 62 | db_finalize(&q); |
| 63 | } |
| 64 | |
| 65 | /* |
| 66 | ** WEBPAGE: test-backlink-timeline |
| 67 | ** |
| @@ -366,11 +376,11 @@ | |
| 366 | if( g.argc!=5 ){ |
| 367 | usage("SRCTYPE SRCID INPUTFILE"); |
| 368 | } |
| 369 | srctype = atoi(g.argv[2]); |
| 370 | if( srctype<0 || srctype>2 ){ |
| 371 | fossil_fatal("SRCTYPE should be a integer 0, 1, or 2"); |
| 372 | } |
| 373 | srcid = atoi(g.argv[3]); |
| 374 | blob_read_from_file(&in, g.argv[4], ExtFILE); |
| 375 | sqlite3_open(":memory:",&g.db); |
| 376 | if( zMTime==0 ) zMTime = "now"; |
| 377 |
| --- src/backlink.c | |
| +++ src/backlink.c | |
| @@ -34,10 +34,11 @@ | |
| 34 | */ |
| 35 | void render_backlink_graph(const char *zUuid, const char *zLabel){ |
| 36 | Blob sql; |
| 37 | Stmt q; |
| 38 | char *zGlob; |
| 39 | int needEndPanel = 0; |
| 40 | zGlob = mprintf("%.5s*", zUuid); |
| 41 | db_multi_exec( |
| 42 | "CREATE TEMP TABLE IF NOT EXISTS ok(rid INTEGER PRIMARY KEY);\n" |
| 43 | "DELETE FROM ok;\n" |
| 44 | "INSERT OR IGNORE INTO ok(rid)\n" |
| @@ -49,19 +50,28 @@ | |
| 50 | " WHERE target GLOB %Q" |
| 51 | " AND %Q GLOB (target || '*');", |
| 52 | zGlob, zUuid |
| 53 | ); |
| 54 | if( !db_exists("SELECT 1 FROM ok") ) return; |
| 55 | if( zLabel ){ |
| 56 | cgi_printf("%s", zLabel); |
| 57 | if( strstr(zLabel, "accordion")!=0 ){ |
| 58 | cgi_printf("<div class=\"accordion_panel\">\n"); |
| 59 | needEndPanel = 1; |
| 60 | } |
| 61 | } |
| 62 | blob_zero(&sql); |
| 63 | blob_append(&sql, timeline_query_for_www(), -1); |
| 64 | blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC"); |
| 65 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| 66 | www_print_timeline(&q, |
| 67 | TIMELINE_DISJOINT|TIMELINE_GRAPH|TIMELINE_NOSCROLL|TIMELINE_REFS, |
| 68 | 0, 0, 0, 0, 0, 0); |
| 69 | db_finalize(&q); |
| 70 | if( needEndPanel ){ |
| 71 | cgi_printf("</div>\n"); |
| 72 | } |
| 73 | } |
| 74 | |
| 75 | /* |
| 76 | ** WEBPAGE: test-backlink-timeline |
| 77 | ** |
| @@ -366,11 +376,11 @@ | |
| 376 | if( g.argc!=5 ){ |
| 377 | usage("SRCTYPE SRCID INPUTFILE"); |
| 378 | } |
| 379 | srctype = atoi(g.argv[2]); |
| 380 | if( srctype<0 || srctype>2 ){ |
| 381 | fossil_fatal("SRCTYPE should be an integer 0, 1, or 2"); |
| 382 | } |
| 383 | srcid = atoi(g.argv[3]); |
| 384 | blob_read_from_file(&in, g.argv[4], ExtFILE); |
| 385 | sqlite3_open(":memory:",&g.db); |
| 386 | if( zMTime==0 ) zMTime = "now"; |
| 387 |
+1
-1
| --- src/backoffice.c | ||
| +++ src/backoffice.c | ||
| @@ -472,11 +472,11 @@ | ||
| 472 | 472 | ** without doing any work. |
| 473 | 473 | ** |
| 474 | 474 | ** If no backoffice processes are running at all, this routine becomes |
| 475 | 475 | ** the main backoffice. |
| 476 | 476 | ** |
| 477 | -** If a primary backoffice is running, but a on-deck backoffice is | |
| 477 | +** If a primary backoffice is running, but an on-deck backoffice is | |
| 478 | 478 | ** needed, this routine becomes that on-deck backoffice. |
| 479 | 479 | */ |
| 480 | 480 | static void backoffice_thread(void){ |
| 481 | 481 | Lease x; |
| 482 | 482 | sqlite3_uint64 tmNow; |
| 483 | 483 |
| --- src/backoffice.c | |
| +++ src/backoffice.c | |
| @@ -472,11 +472,11 @@ | |
| 472 | ** without doing any work. |
| 473 | ** |
| 474 | ** If no backoffice processes are running at all, this routine becomes |
| 475 | ** the main backoffice. |
| 476 | ** |
| 477 | ** If a primary backoffice is running, but a on-deck backoffice is |
| 478 | ** needed, this routine becomes that on-deck backoffice. |
| 479 | */ |
| 480 | static void backoffice_thread(void){ |
| 481 | Lease x; |
| 482 | sqlite3_uint64 tmNow; |
| 483 |
| --- src/backoffice.c | |
| +++ src/backoffice.c | |
| @@ -472,11 +472,11 @@ | |
| 472 | ** without doing any work. |
| 473 | ** |
| 474 | ** If no backoffice processes are running at all, this routine becomes |
| 475 | ** the main backoffice. |
| 476 | ** |
| 477 | ** If a primary backoffice is running, but an on-deck backoffice is |
| 478 | ** needed, this routine becomes that on-deck backoffice. |
| 479 | */ |
| 480 | static void backoffice_thread(void){ |
| 481 | Lease x; |
| 482 | sqlite3_uint64 tmNow; |
| 483 |
+2
-1
| --- src/bisect.c | ||
| +++ src/bisect.c | ||
| @@ -81,11 +81,12 @@ | ||
| 81 | 81 | "skip\"" }, |
| 82 | 82 | { "direct-only", "on", "Follow only primary parent-child links, not " |
| 83 | 83 | "merges\n" }, |
| 84 | 84 | { "display", "chart", "Command to run after \"next\". \"chart\", " |
| 85 | 85 | "\"log\", \"status\", or \"none\"" }, |
| 86 | - { "linear", "off", "Do a linear scan rather than a true bisect" }, | |
| 86 | + { "linear", "off", "Do a linear scan rather than a true bisect, " | |
| 87 | + "stopping at the first \"bad\" result"}, | |
| 87 | 88 | }; |
| 88 | 89 | |
| 89 | 90 | /* |
| 90 | 91 | ** Return the value of a boolean bisect option. |
| 91 | 92 | */ |
| 92 | 93 |
| --- src/bisect.c | |
| +++ src/bisect.c | |
| @@ -81,11 +81,12 @@ | |
| 81 | "skip\"" }, |
| 82 | { "direct-only", "on", "Follow only primary parent-child links, not " |
| 83 | "merges\n" }, |
| 84 | { "display", "chart", "Command to run after \"next\". \"chart\", " |
| 85 | "\"log\", \"status\", or \"none\"" }, |
| 86 | { "linear", "off", "Do a linear scan rather than a true bisect" }, |
| 87 | }; |
| 88 | |
| 89 | /* |
| 90 | ** Return the value of a boolean bisect option. |
| 91 | */ |
| 92 |
| --- src/bisect.c | |
| +++ src/bisect.c | |
| @@ -81,11 +81,12 @@ | |
| 81 | "skip\"" }, |
| 82 | { "direct-only", "on", "Follow only primary parent-child links, not " |
| 83 | "merges\n" }, |
| 84 | { "display", "chart", "Command to run after \"next\". \"chart\", " |
| 85 | "\"log\", \"status\", or \"none\"" }, |
| 86 | { "linear", "off", "Do a linear scan rather than a true bisect, " |
| 87 | "stopping at the first \"bad\" result"}, |
| 88 | }; |
| 89 | |
| 90 | /* |
| 91 | ** Return the value of a boolean bisect option. |
| 92 | */ |
| 93 |
+55
-10
| --- src/branch.c | ||
| +++ src/branch.c | ||
| @@ -289,31 +289,51 @@ | ||
| 289 | 289 | ** Prepare a query that will list branches. |
| 290 | 290 | ** |
| 291 | 291 | ** If (which<0) then the query pulls only closed branches. If |
| 292 | 292 | ** (which>0) then the query pulls all (closed and opened) |
| 293 | 293 | ** branches. Else the query pulls currently-opened branches. |
| 294 | +** | |
| 295 | +** If the BRL_ORDERBY_MTIME flag is set and nLimitMRU ("Limit Most Recently Used | |
| 296 | +** style") is a non-zero number, the result is limited to nLimitMRU entries, and | |
| 297 | +** the BRL_REVERSE flag is applied in an outer query after processing the limit, | |
| 298 | +** so that it's possible to generate short lists with the most recently modified | |
| 299 | +** branches sorted chronologically in either direction, as does the "branch lsh" | |
| 300 | +** command. | |
| 301 | +** For other cases, the outer query is also generated, but works as a no-op. The | |
| 302 | +** code to build the outer query is marked with *//* OUTER QUERY *//* comments. | |
| 294 | 303 | */ |
| 295 | -void branch_prepare_list_query(Stmt *pQuery, int brFlags, const char *zBrNameGlob){ | |
| 304 | +void branch_prepare_list_query( | |
| 305 | + Stmt *pQuery, | |
| 306 | + int brFlags, | |
| 307 | + const char *zBrNameGlob, | |
| 308 | + int nLimitMRU | |
| 309 | +){ | |
| 296 | 310 | Blob sql; |
| 297 | 311 | blob_init(&sql, 0, 0); |
| 298 | 312 | brlist_create_temp_table(); |
| 313 | + /* Ignore nLimitMRU if no chronological sort requested. */ | |
| 314 | + if( (brFlags & BRL_ORDERBY_MTIME)==0 ) nLimitMRU = 0; | |
| 315 | + /* Undocumented: invert negative values for nLimitMRU, so that command-line | |
| 316 | + ** arguments similar to `head -5' with "option numbers" are possible. */ | |
| 317 | + if( nLimitMRU<0 ) nLimitMRU = -nLimitMRU; | |
| 318 | + blob_append_sql(&sql,"SELECT name, isprivate FROM ("); /* OUTER QUERY */ | |
| 299 | 319 | switch( brFlags & BRL_OPEN_CLOSED_MASK ){ |
| 300 | 320 | case BRL_CLOSED_ONLY: { |
| 301 | 321 | blob_append_sql(&sql, |
| 302 | - "SELECT name, isprivate FROM tmp_brlist WHERE isclosed" | |
| 322 | + "SELECT name, isprivate, mtime FROM tmp_brlist WHERE isclosed" | |
| 303 | 323 | ); |
| 304 | 324 | break; |
| 305 | 325 | } |
| 306 | 326 | case BRL_BOTH: { |
| 307 | 327 | blob_append_sql(&sql, |
| 308 | - "SELECT name, isprivate FROM tmp_brlist WHERE 1" | |
| 328 | + "SELECT name, isprivate, mtime FROM tmp_brlist WHERE 1" | |
| 309 | 329 | ); |
| 310 | 330 | break; |
| 311 | 331 | } |
| 312 | 332 | case BRL_OPEN_ONLY: { |
| 313 | 333 | blob_append_sql(&sql, |
| 314 | - "SELECT name, isprivate FROM tmp_brlist WHERE NOT isclosed" | |
| 334 | + "SELECT name, isprivate, mtime FROM tmp_brlist WHERE NOT isclosed" | |
| 315 | 335 | ); |
| 316 | 336 | break; |
| 317 | 337 | } |
| 318 | 338 | } |
| 319 | 339 | if( brFlags & BRL_PRIVATE ) blob_append_sql(&sql, " AND isprivate"); |
| @@ -321,13 +341,20 @@ | ||
| 321 | 341 | if( brFlags & BRL_ORDERBY_MTIME ){ |
| 322 | 342 | blob_append_sql(&sql, " ORDER BY -mtime"); |
| 323 | 343 | }else{ |
| 324 | 344 | blob_append_sql(&sql, " ORDER BY name COLLATE nocase"); |
| 325 | 345 | } |
| 326 | - if( brFlags & BRL_REVERSE ){ | |
| 346 | + if( brFlags & BRL_REVERSE && !nLimitMRU ){ | |
| 327 | 347 | blob_append_sql(&sql," DESC"); |
| 328 | 348 | } |
| 349 | + if( nLimitMRU ){ | |
| 350 | + blob_append_sql(&sql," LIMIT %d",nLimitMRU); | |
| 351 | + } | |
| 352 | + blob_append_sql(&sql,")"); /* OUTER QUERY */ | |
| 353 | + if( brFlags & BRL_REVERSE && nLimitMRU ){ | |
| 354 | + blob_append_sql(&sql," ORDER BY mtime"); /* OUTER QUERY */ | |
| 355 | + } | |
| 329 | 356 | db_prepare_blob(pQuery, &sql); |
| 330 | 357 | blob_reset(&sql); |
| 331 | 358 | } |
| 332 | 359 | |
| 333 | 360 | /* |
| @@ -585,10 +612,11 @@ | ||
| 585 | 612 | ** > fossil branch info BRANCH-NAME |
| 586 | 613 | ** |
| 587 | 614 | ** Print information about a branch |
| 588 | 615 | ** |
| 589 | 616 | ** > fossil branch list|ls ?OPTIONS? ?GLOB? |
| 617 | +** > fossil branch lsh ?OPTIONS? ?LIMIT? | |
| 590 | 618 | ** |
| 591 | 619 | ** List all branches. Options: |
| 592 | 620 | ** -a|--all List all branches. Default show only open branches |
| 593 | 621 | ** -c|--closed List closed branches. |
| 594 | 622 | ** -p List only private branches. |
| @@ -597,10 +625,15 @@ | ||
| 597 | 625 | ** |
| 598 | 626 | ** The current branch is marked with an asterisk. Private branches are |
| 599 | 627 | ** marked with a hash sign. |
| 600 | 628 | ** |
| 601 | 629 | ** If GLOB is given, show only branches matching the pattern. |
| 630 | +** | |
| 631 | +** The "lsh" variant of this subcommand shows recently changed branches, | |
| 632 | +** and accepts an optional LIMIT argument (defaults to 5) to cap output, | |
| 633 | +** but no GLOB argument. All other options are supported, with -t being | |
| 634 | +** an implied no-op. | |
| 602 | 635 | ** |
| 603 | 636 | ** > fossil branch new BRANCH-NAME BASIS ?OPTIONS? |
| 604 | 637 | ** |
| 605 | 638 | ** Create a new branch BRANCH-NAME off of check-in BASIS. |
| 606 | 639 | ** Supported options for this subcommand include: |
| @@ -651,29 +684,41 @@ | ||
| 651 | 684 | "SELECT datetime(mtime,toLocal()) FROM event" |
| 652 | 685 | " WHERE objid=%d", rid); |
| 653 | 686 | fossil_print("%s: open as of %s on %.16s\n", zBrName, zDate, zUuid); |
| 654 | 687 | } |
| 655 | 688 | } |
| 656 | - }else if( (strncmp(zCmd,"list",n)==0)||(strncmp(zCmd, "ls", n)==0) ){ | |
| 689 | + }else if( strncmp(zCmd,"list",n)==0 || | |
| 690 | + strncmp(zCmd, "ls", n)==0 || | |
| 691 | + strcmp(zCmd, "lsh")==0 ){ | |
| 657 | 692 | Stmt q; |
| 658 | 693 | int vid; |
| 659 | 694 | char *zCurrent = 0; |
| 660 | 695 | const char *zBrNameGlob = 0; |
| 696 | + int nLimit = 0; | |
| 661 | 697 | int brFlags = BRL_OPEN_ONLY; |
| 662 | 698 | if( find_option("all","a",0)!=0 ) brFlags = BRL_BOTH; |
| 663 | 699 | if( find_option("closed","c",0)!=0 ) brFlags = BRL_CLOSED_ONLY; |
| 664 | 700 | if( find_option("t",0,0)!=0 ) brFlags |= BRL_ORDERBY_MTIME; |
| 665 | 701 | if( find_option("r",0,0)!=0 ) brFlags |= BRL_REVERSE; |
| 666 | 702 | if( find_option("p",0,0)!=0 ) brFlags |= BRL_PRIVATE; |
| 667 | - if( g.argc >= 4 ) zBrNameGlob = g.argv[3]; | |
| 703 | + | |
| 704 | + if( strcmp(zCmd, "lsh")==0 ){ | |
| 705 | + nLimit = 5; | |
| 706 | + if( g.argc>4 || (g.argc==4 && (nLimit = atoi(g.argv[3]))==0) ){ | |
| 707 | + fossil_fatal("the lsh subcommand allows one optional numeric argument"); | |
| 708 | + } | |
| 709 | + brFlags |= BRL_ORDERBY_MTIME; | |
| 710 | + }else{ | |
| 711 | + if( g.argc >= 4 ) zBrNameGlob = g.argv[3]; | |
| 712 | + } | |
| 668 | 713 | |
| 669 | 714 | if( g.localOpen ){ |
| 670 | 715 | vid = db_lget_int("checkout", 0); |
| 671 | 716 | zCurrent = db_text(0, "SELECT value FROM tagxref" |
| 672 | 717 | " WHERE rid=%d AND tagid=%d", vid, TAG_BRANCH); |
| 673 | 718 | } |
| 674 | - branch_prepare_list_query(&q, brFlags, zBrNameGlob); | |
| 719 | + branch_prepare_list_query(&q, brFlags, zBrNameGlob, nLimit); | |
| 675 | 720 | while( db_step(&q)==SQLITE_ROW ){ |
| 676 | 721 | const char *zBr = db_column_text(&q, 0); |
| 677 | 722 | int isPriv = zCurrent!=0 && db_column_int(&q, 1)==1; |
| 678 | 723 | int isCur = zCurrent!=0 && fossil_strcmp(zCurrent,zBr)==0; |
| 679 | 724 | fossil_print("%s%s%s\n", |
| @@ -703,11 +748,11 @@ | ||
| 703 | 748 | usage("branch unhide branch-name(s)..."); |
| 704 | 749 | } |
| 705 | 750 | branch_cmd_hide(3,0); |
| 706 | 751 | }else{ |
| 707 | 752 | fossil_fatal("branch subcommand should be one of: " |
| 708 | - "close current hide info list ls new reopen unhide"); | |
| 753 | + "close current hide info list ls lsh new reopen unhide"); | |
| 709 | 754 | } |
| 710 | 755 | } |
| 711 | 756 | |
| 712 | 757 | /* |
| 713 | 758 | ** This is the new-style branch-list page that shows the branch names |
| @@ -862,11 +907,11 @@ | ||
| 862 | 907 | @ reopened).</li> |
| 863 | 908 | @ </ol> |
| 864 | 909 | style_sidebox_end(); |
| 865 | 910 | #endif |
| 866 | 911 | |
| 867 | - branch_prepare_list_query(&q, brFlags, 0); | |
| 912 | + branch_prepare_list_query(&q, brFlags, 0, 0); | |
| 868 | 913 | cnt = 0; |
| 869 | 914 | while( db_step(&q)==SQLITE_ROW ){ |
| 870 | 915 | const char *zBr = db_column_text(&q, 0); |
| 871 | 916 | if( cnt==0 ){ |
| 872 | 917 | if( colorTest ){ |
| 873 | 918 |
| --- src/branch.c | |
| +++ src/branch.c | |
| @@ -289,31 +289,51 @@ | |
| 289 | ** Prepare a query that will list branches. |
| 290 | ** |
| 291 | ** If (which<0) then the query pulls only closed branches. If |
| 292 | ** (which>0) then the query pulls all (closed and opened) |
| 293 | ** branches. Else the query pulls currently-opened branches. |
| 294 | */ |
| 295 | void branch_prepare_list_query(Stmt *pQuery, int brFlags, const char *zBrNameGlob){ |
| 296 | Blob sql; |
| 297 | blob_init(&sql, 0, 0); |
| 298 | brlist_create_temp_table(); |
| 299 | switch( brFlags & BRL_OPEN_CLOSED_MASK ){ |
| 300 | case BRL_CLOSED_ONLY: { |
| 301 | blob_append_sql(&sql, |
| 302 | "SELECT name, isprivate FROM tmp_brlist WHERE isclosed" |
| 303 | ); |
| 304 | break; |
| 305 | } |
| 306 | case BRL_BOTH: { |
| 307 | blob_append_sql(&sql, |
| 308 | "SELECT name, isprivate FROM tmp_brlist WHERE 1" |
| 309 | ); |
| 310 | break; |
| 311 | } |
| 312 | case BRL_OPEN_ONLY: { |
| 313 | blob_append_sql(&sql, |
| 314 | "SELECT name, isprivate FROM tmp_brlist WHERE NOT isclosed" |
| 315 | ); |
| 316 | break; |
| 317 | } |
| 318 | } |
| 319 | if( brFlags & BRL_PRIVATE ) blob_append_sql(&sql, " AND isprivate"); |
| @@ -321,13 +341,20 @@ | |
| 321 | if( brFlags & BRL_ORDERBY_MTIME ){ |
| 322 | blob_append_sql(&sql, " ORDER BY -mtime"); |
| 323 | }else{ |
| 324 | blob_append_sql(&sql, " ORDER BY name COLLATE nocase"); |
| 325 | } |
| 326 | if( brFlags & BRL_REVERSE ){ |
| 327 | blob_append_sql(&sql," DESC"); |
| 328 | } |
| 329 | db_prepare_blob(pQuery, &sql); |
| 330 | blob_reset(&sql); |
| 331 | } |
| 332 | |
| 333 | /* |
| @@ -585,10 +612,11 @@ | |
| 585 | ** > fossil branch info BRANCH-NAME |
| 586 | ** |
| 587 | ** Print information about a branch |
| 588 | ** |
| 589 | ** > fossil branch list|ls ?OPTIONS? ?GLOB? |
| 590 | ** |
| 591 | ** List all branches. Options: |
| 592 | ** -a|--all List all branches. Default show only open branches |
| 593 | ** -c|--closed List closed branches. |
| 594 | ** -p List only private branches. |
| @@ -597,10 +625,15 @@ | |
| 597 | ** |
| 598 | ** The current branch is marked with an asterisk. Private branches are |
| 599 | ** marked with a hash sign. |
| 600 | ** |
| 601 | ** If GLOB is given, show only branches matching the pattern. |
| 602 | ** |
| 603 | ** > fossil branch new BRANCH-NAME BASIS ?OPTIONS? |
| 604 | ** |
| 605 | ** Create a new branch BRANCH-NAME off of check-in BASIS. |
| 606 | ** Supported options for this subcommand include: |
| @@ -651,29 +684,41 @@ | |
| 651 | "SELECT datetime(mtime,toLocal()) FROM event" |
| 652 | " WHERE objid=%d", rid); |
| 653 | fossil_print("%s: open as of %s on %.16s\n", zBrName, zDate, zUuid); |
| 654 | } |
| 655 | } |
| 656 | }else if( (strncmp(zCmd,"list",n)==0)||(strncmp(zCmd, "ls", n)==0) ){ |
| 657 | Stmt q; |
| 658 | int vid; |
| 659 | char *zCurrent = 0; |
| 660 | const char *zBrNameGlob = 0; |
| 661 | int brFlags = BRL_OPEN_ONLY; |
| 662 | if( find_option("all","a",0)!=0 ) brFlags = BRL_BOTH; |
| 663 | if( find_option("closed","c",0)!=0 ) brFlags = BRL_CLOSED_ONLY; |
| 664 | if( find_option("t",0,0)!=0 ) brFlags |= BRL_ORDERBY_MTIME; |
| 665 | if( find_option("r",0,0)!=0 ) brFlags |= BRL_REVERSE; |
| 666 | if( find_option("p",0,0)!=0 ) brFlags |= BRL_PRIVATE; |
| 667 | if( g.argc >= 4 ) zBrNameGlob = g.argv[3]; |
| 668 | |
| 669 | if( g.localOpen ){ |
| 670 | vid = db_lget_int("checkout", 0); |
| 671 | zCurrent = db_text(0, "SELECT value FROM tagxref" |
| 672 | " WHERE rid=%d AND tagid=%d", vid, TAG_BRANCH); |
| 673 | } |
| 674 | branch_prepare_list_query(&q, brFlags, zBrNameGlob); |
| 675 | while( db_step(&q)==SQLITE_ROW ){ |
| 676 | const char *zBr = db_column_text(&q, 0); |
| 677 | int isPriv = zCurrent!=0 && db_column_int(&q, 1)==1; |
| 678 | int isCur = zCurrent!=0 && fossil_strcmp(zCurrent,zBr)==0; |
| 679 | fossil_print("%s%s%s\n", |
| @@ -703,11 +748,11 @@ | |
| 703 | usage("branch unhide branch-name(s)..."); |
| 704 | } |
| 705 | branch_cmd_hide(3,0); |
| 706 | }else{ |
| 707 | fossil_fatal("branch subcommand should be one of: " |
| 708 | "close current hide info list ls new reopen unhide"); |
| 709 | } |
| 710 | } |
| 711 | |
| 712 | /* |
| 713 | ** This is the new-style branch-list page that shows the branch names |
| @@ -862,11 +907,11 @@ | |
| 862 | @ reopened).</li> |
| 863 | @ </ol> |
| 864 | style_sidebox_end(); |
| 865 | #endif |
| 866 | |
| 867 | branch_prepare_list_query(&q, brFlags, 0); |
| 868 | cnt = 0; |
| 869 | while( db_step(&q)==SQLITE_ROW ){ |
| 870 | const char *zBr = db_column_text(&q, 0); |
| 871 | if( cnt==0 ){ |
| 872 | if( colorTest ){ |
| 873 |
| --- src/branch.c | |
| +++ src/branch.c | |
| @@ -289,31 +289,51 @@ | |
| 289 | ** Prepare a query that will list branches. |
| 290 | ** |
| 291 | ** If (which<0) then the query pulls only closed branches. If |
| 292 | ** (which>0) then the query pulls all (closed and opened) |
| 293 | ** branches. Else the query pulls currently-opened branches. |
| 294 | ** |
| 295 | ** If the BRL_ORDERBY_MTIME flag is set and nLimitMRU ("Limit Most Recently Used |
| 296 | ** style") is a non-zero number, the result is limited to nLimitMRU entries, and |
| 297 | ** the BRL_REVERSE flag is applied in an outer query after processing the limit, |
| 298 | ** so that it's possible to generate short lists with the most recently modified |
| 299 | ** branches sorted chronologically in either direction, as does the "branch lsh" |
| 300 | ** command. |
| 301 | ** For other cases, the outer query is also generated, but works as a no-op. The |
| 302 | ** code to build the outer query is marked with *//* OUTER QUERY *//* comments. |
| 303 | */ |
| 304 | void branch_prepare_list_query( |
| 305 | Stmt *pQuery, |
| 306 | int brFlags, |
| 307 | const char *zBrNameGlob, |
| 308 | int nLimitMRU |
| 309 | ){ |
| 310 | Blob sql; |
| 311 | blob_init(&sql, 0, 0); |
| 312 | brlist_create_temp_table(); |
| 313 | /* Ignore nLimitMRU if no chronological sort requested. */ |
| 314 | if( (brFlags & BRL_ORDERBY_MTIME)==0 ) nLimitMRU = 0; |
| 315 | /* Undocumented: invert negative values for nLimitMRU, so that command-line |
| 316 | ** arguments similar to `head -5' with "option numbers" are possible. */ |
| 317 | if( nLimitMRU<0 ) nLimitMRU = -nLimitMRU; |
| 318 | blob_append_sql(&sql,"SELECT name, isprivate FROM ("); /* OUTER QUERY */ |
| 319 | switch( brFlags & BRL_OPEN_CLOSED_MASK ){ |
| 320 | case BRL_CLOSED_ONLY: { |
| 321 | blob_append_sql(&sql, |
| 322 | "SELECT name, isprivate, mtime FROM tmp_brlist WHERE isclosed" |
| 323 | ); |
| 324 | break; |
| 325 | } |
| 326 | case BRL_BOTH: { |
| 327 | blob_append_sql(&sql, |
| 328 | "SELECT name, isprivate, mtime FROM tmp_brlist WHERE 1" |
| 329 | ); |
| 330 | break; |
| 331 | } |
| 332 | case BRL_OPEN_ONLY: { |
| 333 | blob_append_sql(&sql, |
| 334 | "SELECT name, isprivate, mtime FROM tmp_brlist WHERE NOT isclosed" |
| 335 | ); |
| 336 | break; |
| 337 | } |
| 338 | } |
| 339 | if( brFlags & BRL_PRIVATE ) blob_append_sql(&sql, " AND isprivate"); |
| @@ -321,13 +341,20 @@ | |
| 341 | if( brFlags & BRL_ORDERBY_MTIME ){ |
| 342 | blob_append_sql(&sql, " ORDER BY -mtime"); |
| 343 | }else{ |
| 344 | blob_append_sql(&sql, " ORDER BY name COLLATE nocase"); |
| 345 | } |
| 346 | if( brFlags & BRL_REVERSE && !nLimitMRU ){ |
| 347 | blob_append_sql(&sql," DESC"); |
| 348 | } |
| 349 | if( nLimitMRU ){ |
| 350 | blob_append_sql(&sql," LIMIT %d",nLimitMRU); |
| 351 | } |
| 352 | blob_append_sql(&sql,")"); /* OUTER QUERY */ |
| 353 | if( brFlags & BRL_REVERSE && nLimitMRU ){ |
| 354 | blob_append_sql(&sql," ORDER BY mtime"); /* OUTER QUERY */ |
| 355 | } |
| 356 | db_prepare_blob(pQuery, &sql); |
| 357 | blob_reset(&sql); |
| 358 | } |
| 359 | |
| 360 | /* |
| @@ -585,10 +612,11 @@ | |
| 612 | ** > fossil branch info BRANCH-NAME |
| 613 | ** |
| 614 | ** Print information about a branch |
| 615 | ** |
| 616 | ** > fossil branch list|ls ?OPTIONS? ?GLOB? |
| 617 | ** > fossil branch lsh ?OPTIONS? ?LIMIT? |
| 618 | ** |
| 619 | ** List all branches. Options: |
| 620 | ** -a|--all List all branches. Default show only open branches |
| 621 | ** -c|--closed List closed branches. |
| 622 | ** -p List only private branches. |
| @@ -597,10 +625,15 @@ | |
| 625 | ** |
| 626 | ** The current branch is marked with an asterisk. Private branches are |
| 627 | ** marked with a hash sign. |
| 628 | ** |
| 629 | ** If GLOB is given, show only branches matching the pattern. |
| 630 | ** |
| 631 | ** The "lsh" variant of this subcommand shows recently changed branches, |
| 632 | ** and accepts an optional LIMIT argument (defaults to 5) to cap output, |
| 633 | ** but no GLOB argument. All other options are supported, with -t being |
| 634 | ** an implied no-op. |
| 635 | ** |
| 636 | ** > fossil branch new BRANCH-NAME BASIS ?OPTIONS? |
| 637 | ** |
| 638 | ** Create a new branch BRANCH-NAME off of check-in BASIS. |
| 639 | ** Supported options for this subcommand include: |
| @@ -651,29 +684,41 @@ | |
| 684 | "SELECT datetime(mtime,toLocal()) FROM event" |
| 685 | " WHERE objid=%d", rid); |
| 686 | fossil_print("%s: open as of %s on %.16s\n", zBrName, zDate, zUuid); |
| 687 | } |
| 688 | } |
| 689 | }else if( strncmp(zCmd,"list",n)==0 || |
| 690 | strncmp(zCmd, "ls", n)==0 || |
| 691 | strcmp(zCmd, "lsh")==0 ){ |
| 692 | Stmt q; |
| 693 | int vid; |
| 694 | char *zCurrent = 0; |
| 695 | const char *zBrNameGlob = 0; |
| 696 | int nLimit = 0; |
| 697 | int brFlags = BRL_OPEN_ONLY; |
| 698 | if( find_option("all","a",0)!=0 ) brFlags = BRL_BOTH; |
| 699 | if( find_option("closed","c",0)!=0 ) brFlags = BRL_CLOSED_ONLY; |
| 700 | if( find_option("t",0,0)!=0 ) brFlags |= BRL_ORDERBY_MTIME; |
| 701 | if( find_option("r",0,0)!=0 ) brFlags |= BRL_REVERSE; |
| 702 | if( find_option("p",0,0)!=0 ) brFlags |= BRL_PRIVATE; |
| 703 | |
| 704 | if( strcmp(zCmd, "lsh")==0 ){ |
| 705 | nLimit = 5; |
| 706 | if( g.argc>4 || (g.argc==4 && (nLimit = atoi(g.argv[3]))==0) ){ |
| 707 | fossil_fatal("the lsh subcommand allows one optional numeric argument"); |
| 708 | } |
| 709 | brFlags |= BRL_ORDERBY_MTIME; |
| 710 | }else{ |
| 711 | if( g.argc >= 4 ) zBrNameGlob = g.argv[3]; |
| 712 | } |
| 713 | |
| 714 | if( g.localOpen ){ |
| 715 | vid = db_lget_int("checkout", 0); |
| 716 | zCurrent = db_text(0, "SELECT value FROM tagxref" |
| 717 | " WHERE rid=%d AND tagid=%d", vid, TAG_BRANCH); |
| 718 | } |
| 719 | branch_prepare_list_query(&q, brFlags, zBrNameGlob, nLimit); |
| 720 | while( db_step(&q)==SQLITE_ROW ){ |
| 721 | const char *zBr = db_column_text(&q, 0); |
| 722 | int isPriv = zCurrent!=0 && db_column_int(&q, 1)==1; |
| 723 | int isCur = zCurrent!=0 && fossil_strcmp(zCurrent,zBr)==0; |
| 724 | fossil_print("%s%s%s\n", |
| @@ -703,11 +748,11 @@ | |
| 748 | usage("branch unhide branch-name(s)..."); |
| 749 | } |
| 750 | branch_cmd_hide(3,0); |
| 751 | }else{ |
| 752 | fossil_fatal("branch subcommand should be one of: " |
| 753 | "close current hide info list ls lsh new reopen unhide"); |
| 754 | } |
| 755 | } |
| 756 | |
| 757 | /* |
| 758 | ** This is the new-style branch-list page that shows the branch names |
| @@ -862,11 +907,11 @@ | |
| 907 | @ reopened).</li> |
| 908 | @ </ol> |
| 909 | style_sidebox_end(); |
| 910 | #endif |
| 911 | |
| 912 | branch_prepare_list_query(&q, brFlags, 0, 0); |
| 913 | cnt = 0; |
| 914 | while( db_step(&q)==SQLITE_ROW ){ |
| 915 | const char *zBr = db_column_text(&q, 0); |
| 916 | if( cnt==0 ){ |
| 917 | if( colorTest ){ |
| 918 |
+2
-2
| --- src/builtin.c | ||
| +++ src/builtin.c | ||
| @@ -148,12 +148,12 @@ | ||
| 148 | 148 | if( i>0 && i<=count(aBuiltinFiles) ){ |
| 149 | 149 | blob_appendf(pOut, "/* %s */\n", aBuiltinFiles[i-1].zName); |
| 150 | 150 | blob_append(pOut, (const char*)aBuiltinFiles[i-1].pData, |
| 151 | 151 | aBuiltinFiles[i-1].nByte); |
| 152 | 152 | } |
| 153 | - while( fossil_isdigit(zList[0]) ) zList++; | |
| 154 | - if( zList[0]==',' ) zList++; | |
| 153 | + while( zList[0] && fossil_isdigit(zList[0]) ) zList++; | |
| 154 | + while( zList[0] && !fossil_isdigit(zList[0]) ) zList++; | |
| 155 | 155 | } |
| 156 | 156 | return; |
| 157 | 157 | } |
| 158 | 158 | |
| 159 | 159 | /* |
| 160 | 160 |
| --- src/builtin.c | |
| +++ src/builtin.c | |
| @@ -148,12 +148,12 @@ | |
| 148 | if( i>0 && i<=count(aBuiltinFiles) ){ |
| 149 | blob_appendf(pOut, "/* %s */\n", aBuiltinFiles[i-1].zName); |
| 150 | blob_append(pOut, (const char*)aBuiltinFiles[i-1].pData, |
| 151 | aBuiltinFiles[i-1].nByte); |
| 152 | } |
| 153 | while( fossil_isdigit(zList[0]) ) zList++; |
| 154 | if( zList[0]==',' ) zList++; |
| 155 | } |
| 156 | return; |
| 157 | } |
| 158 | |
| 159 | /* |
| 160 |
| --- src/builtin.c | |
| +++ src/builtin.c | |
| @@ -148,12 +148,12 @@ | |
| 148 | if( i>0 && i<=count(aBuiltinFiles) ){ |
| 149 | blob_appendf(pOut, "/* %s */\n", aBuiltinFiles[i-1].zName); |
| 150 | blob_append(pOut, (const char*)aBuiltinFiles[i-1].pData, |
| 151 | aBuiltinFiles[i-1].nByte); |
| 152 | } |
| 153 | while( zList[0] && fossil_isdigit(zList[0]) ) zList++; |
| 154 | while( zList[0] && !fossil_isdigit(zList[0]) ) zList++; |
| 155 | } |
| 156 | return; |
| 157 | } |
| 158 | |
| 159 | /* |
| 160 |
+116
-6
| --- src/chat.c | ||
| +++ src/chat.c | ||
| @@ -127,10 +127,22 @@ | ||
| 127 | 127 | ** SETTING: chat-alert-sound width=10 |
| 128 | 128 | ** |
| 129 | 129 | ** This is the name of the builtin sound file to use for the alert tone. |
| 130 | 130 | ** The value must be the name of a builtin WAV file. |
| 131 | 131 | */ |
| 132 | +/* | |
| 133 | +** SETTING: chat-timeline-user width=10 | |
| 134 | +** | |
| 135 | +** If this setting is defined and is not an empty string, then | |
| 136 | +** timeline events are posted to the chat as they arrive. The synthesized | |
| 137 | +** chat messages appear to come from the user identified by this setting, | |
| 138 | +** not the user on the timeline event. | |
| 139 | +** | |
| 140 | +** All chat messages that come from the chat-timeline-user are interpreted | |
| 141 | +** as text/x-fossil-wiki instead of as text/markdown. For this reason, | |
| 142 | +** the chat-timeline-user name should probably not be a real user. | |
| 143 | +*/ | |
| 132 | 144 | /* |
| 133 | 145 | ** WEBPAGE: chat loadavg-exempt |
| 134 | 146 | ** |
| 135 | 147 | ** Start up a browser-based chat session. |
| 136 | 148 | ** |
| @@ -236,11 +248,12 @@ | ||
| 236 | 248 | @ <span id='message-inject-point'></span> |
| 237 | 249 | @ </div> |
| 238 | 250 | fossil_free(zProjectName); |
| 239 | 251 | fossil_free(zInputPlaceholder0); |
| 240 | 252 | builtin_fossil_js_bundle_or("popupwidget", "storage", "fetch", |
| 241 | - "pikchr", "confirmer", NULL); | |
| 253 | + "pikchr", "confirmer", "copybutton", | |
| 254 | + NULL); | |
| 242 | 255 | /* Always in-line the javascript for the chat page */ |
| 243 | 256 | @ <script nonce="%h(style_nonce())">/* chat.c:%d(__LINE__) */ |
| 244 | 257 | /* We need an onload handler to ensure that window.fossil is |
| 245 | 258 | initialized before the chat init code runs. */ |
| 246 | 259 | @ window.addEventListener('load', function(){ |
| @@ -415,14 +428,22 @@ | ||
| 415 | 428 | ** zMsg to HTML. |
| 416 | 429 | ** |
| 417 | 430 | ** Space to hold the returned string is obtained from fossil_malloc() |
| 418 | 431 | ** and must be freed by the caller. |
| 419 | 432 | */ |
| 420 | -static char *chat_format_to_html(const char *zMsg){ | |
| 433 | +static char *chat_format_to_html(const char *zMsg, int isWiki){ | |
| 421 | 434 | Blob out; |
| 422 | 435 | blob_init(&out, "", 0); |
| 423 | - if(*zMsg){ | |
| 436 | + if( zMsg==0 || zMsg[0]==0 ){ | |
| 437 | + /* No-op */ | |
| 438 | + }else if( isWiki ){ | |
| 439 | + /* Used for chat-timeline-user. The zMsg is text/x-fossil-wiki. */ | |
| 440 | + Blob bIn; | |
| 441 | + blob_init(&bIn, zMsg, (int)strlen(zMsg)); | |
| 442 | + wiki_convert(&bIn, &out, WIKI_INLINE); | |
| 443 | + }else{ | |
| 444 | + /* The common case: zMsg is text/markdown */ | |
| 424 | 445 | Blob bIn; |
| 425 | 446 | blob_init(&bIn, zMsg, (int)strlen(zMsg)); |
| 426 | 447 | markdown_to_html(&bIn, NULL, &out); |
| 427 | 448 | } |
| 428 | 449 | return blob_str(&out); |
| @@ -442,11 +463,11 @@ | ||
| 442 | 463 | int i; |
| 443 | 464 | char *zOut; |
| 444 | 465 | db_find_and_open_repository(0,0); |
| 445 | 466 | g.perm.Hyperlink = 1; |
| 446 | 467 | for(i=0; i<g.argc; i++){ |
| 447 | - zOut = chat_format_to_html(g.argv[i]); | |
| 468 | + zOut = chat_format_to_html(g.argv[i], 0); | |
| 448 | 469 | fossil_print("[%d]: %s\n", i, zOut); |
| 449 | 470 | fossil_free(zOut); |
| 450 | 471 | } |
| 451 | 472 | } |
| 452 | 473 | |
| @@ -545,22 +566,26 @@ | ||
| 545 | 566 | void chat_poll_webpage(void){ |
| 546 | 567 | Blob json; /* The json to be constructed and returned */ |
| 547 | 568 | sqlite3_int64 dataVersion; /* Data version. Used for polling. */ |
| 548 | 569 | const int iDelay = 1000; /* Delay until next poll (milliseconds) */ |
| 549 | 570 | int nDelay; /* Maximum delay.*/ |
| 571 | + const char *zChatUser; /* chat-timeline-user */ | |
| 572 | + int isWiki = 0; /* True if chat message is x-fossil-wiki */ | |
| 550 | 573 | int msgid = atoi(PD("name","0")); |
| 551 | 574 | const int msgBefore = atoi(PD("before","0")); |
| 552 | 575 | int nLimit = msgBefore>0 ? atoi(PD("n","0")) : 0; |
| 553 | 576 | const int bRaw = P("raw")!=0; |
| 577 | + | |
| 554 | 578 | Blob sql = empty_blob; |
| 555 | 579 | Stmt q1; |
| 556 | 580 | nDelay = db_get_int("chat-poll-timeout",420); /* Default about 7 minutes */ |
| 557 | 581 | login_check_credentials(); |
| 558 | 582 | if( !g.perm.Chat ) { |
| 559 | 583 | chat_emit_permissions_error(1); |
| 560 | 584 | return; |
| 561 | 585 | } |
| 586 | + zChatUser = db_get("chat-timeline-user",0); | |
| 562 | 587 | chat_create_tables(); |
| 563 | 588 | cgi_set_content_type("application/json"); |
| 564 | 589 | dataVersion = db_int64(0, "PRAGMA data_version"); |
| 565 | 590 | blob_append_sql(&sql, |
| 566 | 591 | "SELECT msgid, datetime(mtime), xfrom, xmsg, length(file)," |
| @@ -619,21 +644,23 @@ | ||
| 619 | 644 | blob_appendf(&json, "\"lmtime\":%!j,", zLMtime); |
| 620 | 645 | } |
| 621 | 646 | blob_append(&json, "\"xfrom\":", -1); |
| 622 | 647 | if(zFrom){ |
| 623 | 648 | blob_appendf(&json, "%!j,", zFrom); |
| 649 | + isWiki = fossil_strcmp(zFrom,zChatUser)==0; | |
| 624 | 650 | }else{ |
| 625 | 651 | /* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */ |
| 626 | 652 | blob_appendf(&json, "null,"); |
| 653 | + isWiki = 0; | |
| 627 | 654 | } |
| 628 | 655 | blob_appendf(&json, "\"uclr\":%!j,", |
| 629 | 656 | user_color(zFrom ? zFrom : "nobody")); |
| 630 | 657 | |
| 631 | 658 | if(bRaw){ |
| 632 | 659 | blob_appendf(&json, "\"xmsg\":%!j,", zRawMsg); |
| 633 | 660 | }else{ |
| 634 | - zMsg = chat_format_to_html(zRawMsg ? zRawMsg : ""); | |
| 661 | + zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "", isWiki); | |
| 635 | 662 | blob_appendf(&json, "\"xmsg\":%!j,", zMsg); |
| 636 | 663 | fossil_free(zMsg); |
| 637 | 664 | } |
| 638 | 665 | |
| 639 | 666 | if( nByte==0 ){ |
| @@ -686,16 +713,19 @@ | ||
| 686 | 713 | */ |
| 687 | 714 | void chat_fetch_one(void){ |
| 688 | 715 | Blob json = empty_blob; /* The json to be constructed and returned */ |
| 689 | 716 | const int fRaw = PD("raw",0)!=0; |
| 690 | 717 | const int msgid = atoi(PD("name","0")); |
| 718 | + const char *zChatUser; | |
| 719 | + int isWiki; | |
| 691 | 720 | Stmt q; |
| 692 | 721 | login_check_credentials(); |
| 693 | 722 | if( !g.perm.Chat ) { |
| 694 | 723 | chat_emit_permissions_error(0); |
| 695 | 724 | return; |
| 696 | 725 | } |
| 726 | + zChatUser = db_get("chat-timeline-user",0); | |
| 697 | 727 | chat_create_tables(); |
| 698 | 728 | cgi_set_content_type("application/json"); |
| 699 | 729 | db_prepare(&q, |
| 700 | 730 | "SELECT datetime(mtime), xfrom, xmsg, length(file)," |
| 701 | 731 | " fname, fmime, lmtime" |
| @@ -716,21 +746,23 @@ | ||
| 716 | 746 | blob_appendf(&json, "\"lmtime\":%!j,", zLMtime); |
| 717 | 747 | } |
| 718 | 748 | blob_append(&json, "\"xfrom\":", -1); |
| 719 | 749 | if(zFrom){ |
| 720 | 750 | blob_appendf(&json, "%!j,", zFrom); |
| 751 | + isWiki = fossil_strcmp(zFrom, zChatUser); | |
| 721 | 752 | }else{ |
| 722 | 753 | /* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */ |
| 723 | 754 | blob_appendf(&json, "null,"); |
| 755 | + isWiki = 0; | |
| 724 | 756 | } |
| 725 | 757 | blob_appendf(&json, "\"uclr\":%!j,", |
| 726 | 758 | user_color(zFrom ? zFrom : "nobody")); |
| 727 | 759 | blob_append(&json,"\"xmsg\":", 7); |
| 728 | 760 | if(fRaw){ |
| 729 | 761 | blob_appendf(&json, "%!j,", zRawMsg); |
| 730 | 762 | }else{ |
| 731 | - char * zMsg = chat_format_to_html(zRawMsg ? zRawMsg : ""); | |
| 763 | + char * zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "", isWiki); | |
| 732 | 764 | blob_appendf(&json, "%!j,", zMsg); |
| 733 | 765 | fossil_free(zMsg); |
| 734 | 766 | } |
| 735 | 767 | if( nByte==0 ){ |
| 736 | 768 | blob_appendf(&json, "\"fsize\":0"); |
| @@ -848,10 +880,88 @@ | ||
| 848 | 880 | } |
| 849 | 881 | blob_init(&chatDb, (const char*)pDb, (int)szDb); |
| 850 | 882 | cgi_set_content_type("application/x-sqlite3"); |
| 851 | 883 | cgi_set_content(&chatDb); |
| 852 | 884 | } |
| 885 | + | |
| 886 | +/* | |
| 887 | +** SQL Function: chat_msg_from_event(TYPE,OBJID,USER,MSG) | |
| 888 | +** | |
| 889 | +** This function returns HTML text that describes an entry from the EVENT | |
| 890 | +** table (that is, a timeline event) for display in chat. Parameters: | |
| 891 | +** | |
| 892 | +** TYPE The event type. 'ci', 'w', 't', 'g', and so forth | |
| 893 | +** OBJID EVENT.OBJID | |
| 894 | +** USER coalesce(EVENT.EUSER,EVENT.USER) | |
| 895 | +** MSG coalesce(EVENT.ECOMMENT, EVENT.COMMENT) | |
| 896 | +** | |
| 897 | +** This function is intended to be called by the temp.chat_trigger1 trigger | |
| 898 | +** which is created by alert_create_trigger() routine. | |
| 899 | +*/ | |
| 900 | +void chat_msg_from_event( | |
| 901 | + sqlite3_context *context, | |
| 902 | + int argc, | |
| 903 | + sqlite3_value **argv | |
| 904 | +){ | |
| 905 | + const char *zType = (const char*)sqlite3_value_text(argv[0]); | |
| 906 | + int rid = sqlite3_value_int(argv[1]); | |
| 907 | + const char *zUser = (const char*)sqlite3_value_text(argv[2]); | |
| 908 | + const char *zMsg = (const char*)sqlite3_value_text(argv[3]); | |
| 909 | + char *zRes = 0; | |
| 910 | + | |
| 911 | + if( zType==0 || zUser==0 || zMsg==0 ) return; | |
| 912 | + if( zType[0]=='c' ){ | |
| 913 | + /* Check-ins */ | |
| 914 | + char *zBranch; | |
| 915 | + char *zUuid; | |
| 916 | + | |
| 917 | + zBranch = db_text(0, | |
| 918 | + "SELECT value FROM tagxref" | |
| 919 | + " WHERE tagxref.rid=%d" | |
| 920 | + " AND tagxref.tagid=%d" | |
| 921 | + " AND tagxref.tagtype>0", | |
| 922 | + rid, TAG_BRANCH); | |
| 923 | + zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); | |
| 924 | + zRes = mprintf("%W (check-in: <a href='%R/info/%S'>%S</a>, " | |
| 925 | + "user: <a href='%R/timeline?u=%t&c=%S'>%h</a>, " | |
| 926 | + "branch: <a href='%R/timeline?r=%t&c=%S'>%h</a>)", | |
| 927 | + zMsg, | |
| 928 | + zUuid, zUuid, | |
| 929 | + zUser, zUuid, zUser, | |
| 930 | + zBranch, zUuid, zBranch | |
| 931 | + ); | |
| 932 | + fossil_free(zBranch); | |
| 933 | + fossil_free(zUuid); | |
| 934 | + }else if( zType[0]=='w' ){ | |
| 935 | + /* Wiki page changes */ | |
| 936 | + char *zUuid; | |
| 937 | + zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); | |
| 938 | + wiki_hyperlink_override(zUuid); | |
| 939 | + if( zMsg[0]=='-' ){ | |
| 940 | + zRes = mprintf("Delete wiki page <a href='%R/whistory?name=%t'>%h</a>", | |
| 941 | + zMsg+1, zMsg+1); | |
| 942 | + }else if( zMsg[0]=='+' ){ | |
| 943 | + zRes = mprintf("Added wiki page <a href='%R/whistory?name=%t'>%h</a>", | |
| 944 | + zMsg+1, zMsg+1); | |
| 945 | + }else if( zMsg[0]==':' ){ | |
| 946 | + zRes = mprintf("<a href='%R/wdiff?id=%!S'>Changes</a> to wiki page " | |
| 947 | + "<a href='%R/whistory?name=%t'>%h</a>", | |
| 948 | + zUuid, zMsg+1, zMsg+1); | |
| 949 | + }else{ | |
| 950 | + zRes = mprintf("%W", zMsg); | |
| 951 | + } | |
| 952 | + wiki_hyperlink_override(0); | |
| 953 | + fossil_free(zUuid); | |
| 954 | + }else{ | |
| 955 | + /* Anything else */ | |
| 956 | + zRes = mprintf("%W", zMsg); | |
| 957 | + } | |
| 958 | + if( zRes ){ | |
| 959 | + sqlite3_result_text(context, zRes, -1, fossil_free); | |
| 960 | + } | |
| 961 | +} | |
| 962 | + | |
| 853 | 963 | |
| 854 | 964 | /* |
| 855 | 965 | ** COMMAND: chat |
| 856 | 966 | ** |
| 857 | 967 | ** Usage: %fossil chat [SUBCOMMAND] [--remote URL] [ARGS...] |
| 858 | 968 |
| --- src/chat.c | |
| +++ src/chat.c | |
| @@ -127,10 +127,22 @@ | |
| 127 | ** SETTING: chat-alert-sound width=10 |
| 128 | ** |
| 129 | ** This is the name of the builtin sound file to use for the alert tone. |
| 130 | ** The value must be the name of a builtin WAV file. |
| 131 | */ |
| 132 | /* |
| 133 | ** WEBPAGE: chat loadavg-exempt |
| 134 | ** |
| 135 | ** Start up a browser-based chat session. |
| 136 | ** |
| @@ -236,11 +248,12 @@ | |
| 236 | @ <span id='message-inject-point'></span> |
| 237 | @ </div> |
| 238 | fossil_free(zProjectName); |
| 239 | fossil_free(zInputPlaceholder0); |
| 240 | builtin_fossil_js_bundle_or("popupwidget", "storage", "fetch", |
| 241 | "pikchr", "confirmer", NULL); |
| 242 | /* Always in-line the javascript for the chat page */ |
| 243 | @ <script nonce="%h(style_nonce())">/* chat.c:%d(__LINE__) */ |
| 244 | /* We need an onload handler to ensure that window.fossil is |
| 245 | initialized before the chat init code runs. */ |
| 246 | @ window.addEventListener('load', function(){ |
| @@ -415,14 +428,22 @@ | |
| 415 | ** zMsg to HTML. |
| 416 | ** |
| 417 | ** Space to hold the returned string is obtained from fossil_malloc() |
| 418 | ** and must be freed by the caller. |
| 419 | */ |
| 420 | static char *chat_format_to_html(const char *zMsg){ |
| 421 | Blob out; |
| 422 | blob_init(&out, "", 0); |
| 423 | if(*zMsg){ |
| 424 | Blob bIn; |
| 425 | blob_init(&bIn, zMsg, (int)strlen(zMsg)); |
| 426 | markdown_to_html(&bIn, NULL, &out); |
| 427 | } |
| 428 | return blob_str(&out); |
| @@ -442,11 +463,11 @@ | |
| 442 | int i; |
| 443 | char *zOut; |
| 444 | db_find_and_open_repository(0,0); |
| 445 | g.perm.Hyperlink = 1; |
| 446 | for(i=0; i<g.argc; i++){ |
| 447 | zOut = chat_format_to_html(g.argv[i]); |
| 448 | fossil_print("[%d]: %s\n", i, zOut); |
| 449 | fossil_free(zOut); |
| 450 | } |
| 451 | } |
| 452 | |
| @@ -545,22 +566,26 @@ | |
| 545 | void chat_poll_webpage(void){ |
| 546 | Blob json; /* The json to be constructed and returned */ |
| 547 | sqlite3_int64 dataVersion; /* Data version. Used for polling. */ |
| 548 | const int iDelay = 1000; /* Delay until next poll (milliseconds) */ |
| 549 | int nDelay; /* Maximum delay.*/ |
| 550 | int msgid = atoi(PD("name","0")); |
| 551 | const int msgBefore = atoi(PD("before","0")); |
| 552 | int nLimit = msgBefore>0 ? atoi(PD("n","0")) : 0; |
| 553 | const int bRaw = P("raw")!=0; |
| 554 | Blob sql = empty_blob; |
| 555 | Stmt q1; |
| 556 | nDelay = db_get_int("chat-poll-timeout",420); /* Default about 7 minutes */ |
| 557 | login_check_credentials(); |
| 558 | if( !g.perm.Chat ) { |
| 559 | chat_emit_permissions_error(1); |
| 560 | return; |
| 561 | } |
| 562 | chat_create_tables(); |
| 563 | cgi_set_content_type("application/json"); |
| 564 | dataVersion = db_int64(0, "PRAGMA data_version"); |
| 565 | blob_append_sql(&sql, |
| 566 | "SELECT msgid, datetime(mtime), xfrom, xmsg, length(file)," |
| @@ -619,21 +644,23 @@ | |
| 619 | blob_appendf(&json, "\"lmtime\":%!j,", zLMtime); |
| 620 | } |
| 621 | blob_append(&json, "\"xfrom\":", -1); |
| 622 | if(zFrom){ |
| 623 | blob_appendf(&json, "%!j,", zFrom); |
| 624 | }else{ |
| 625 | /* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */ |
| 626 | blob_appendf(&json, "null,"); |
| 627 | } |
| 628 | blob_appendf(&json, "\"uclr\":%!j,", |
| 629 | user_color(zFrom ? zFrom : "nobody")); |
| 630 | |
| 631 | if(bRaw){ |
| 632 | blob_appendf(&json, "\"xmsg\":%!j,", zRawMsg); |
| 633 | }else{ |
| 634 | zMsg = chat_format_to_html(zRawMsg ? zRawMsg : ""); |
| 635 | blob_appendf(&json, "\"xmsg\":%!j,", zMsg); |
| 636 | fossil_free(zMsg); |
| 637 | } |
| 638 | |
| 639 | if( nByte==0 ){ |
| @@ -686,16 +713,19 @@ | |
| 686 | */ |
| 687 | void chat_fetch_one(void){ |
| 688 | Blob json = empty_blob; /* The json to be constructed and returned */ |
| 689 | const int fRaw = PD("raw",0)!=0; |
| 690 | const int msgid = atoi(PD("name","0")); |
| 691 | Stmt q; |
| 692 | login_check_credentials(); |
| 693 | if( !g.perm.Chat ) { |
| 694 | chat_emit_permissions_error(0); |
| 695 | return; |
| 696 | } |
| 697 | chat_create_tables(); |
| 698 | cgi_set_content_type("application/json"); |
| 699 | db_prepare(&q, |
| 700 | "SELECT datetime(mtime), xfrom, xmsg, length(file)," |
| 701 | " fname, fmime, lmtime" |
| @@ -716,21 +746,23 @@ | |
| 716 | blob_appendf(&json, "\"lmtime\":%!j,", zLMtime); |
| 717 | } |
| 718 | blob_append(&json, "\"xfrom\":", -1); |
| 719 | if(zFrom){ |
| 720 | blob_appendf(&json, "%!j,", zFrom); |
| 721 | }else{ |
| 722 | /* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */ |
| 723 | blob_appendf(&json, "null,"); |
| 724 | } |
| 725 | blob_appendf(&json, "\"uclr\":%!j,", |
| 726 | user_color(zFrom ? zFrom : "nobody")); |
| 727 | blob_append(&json,"\"xmsg\":", 7); |
| 728 | if(fRaw){ |
| 729 | blob_appendf(&json, "%!j,", zRawMsg); |
| 730 | }else{ |
| 731 | char * zMsg = chat_format_to_html(zRawMsg ? zRawMsg : ""); |
| 732 | blob_appendf(&json, "%!j,", zMsg); |
| 733 | fossil_free(zMsg); |
| 734 | } |
| 735 | if( nByte==0 ){ |
| 736 | blob_appendf(&json, "\"fsize\":0"); |
| @@ -848,10 +880,88 @@ | |
| 848 | } |
| 849 | blob_init(&chatDb, (const char*)pDb, (int)szDb); |
| 850 | cgi_set_content_type("application/x-sqlite3"); |
| 851 | cgi_set_content(&chatDb); |
| 852 | } |
| 853 | |
| 854 | /* |
| 855 | ** COMMAND: chat |
| 856 | ** |
| 857 | ** Usage: %fossil chat [SUBCOMMAND] [--remote URL] [ARGS...] |
| 858 |
| --- src/chat.c | |
| +++ src/chat.c | |
| @@ -127,10 +127,22 @@ | |
| 127 | ** SETTING: chat-alert-sound width=10 |
| 128 | ** |
| 129 | ** This is the name of the builtin sound file to use for the alert tone. |
| 130 | ** The value must be the name of a builtin WAV file. |
| 131 | */ |
| 132 | /* |
| 133 | ** SETTING: chat-timeline-user width=10 |
| 134 | ** |
| 135 | ** If this setting is defined and is not an empty string, then |
| 136 | ** timeline events are posted to the chat as they arrive. The synthesized |
| 137 | ** chat messages appear to come from the user identified by this setting, |
| 138 | ** not the user on the timeline event. |
| 139 | ** |
| 140 | ** All chat messages that come from the chat-timeline-user are interpreted |
| 141 | ** as text/x-fossil-wiki instead of as text/markdown. For this reason, |
| 142 | ** the chat-timeline-user name should probably not be a real user. |
| 143 | */ |
| 144 | /* |
| 145 | ** WEBPAGE: chat loadavg-exempt |
| 146 | ** |
| 147 | ** Start up a browser-based chat session. |
| 148 | ** |
| @@ -236,11 +248,12 @@ | |
| 248 | @ <span id='message-inject-point'></span> |
| 249 | @ </div> |
| 250 | fossil_free(zProjectName); |
| 251 | fossil_free(zInputPlaceholder0); |
| 252 | builtin_fossil_js_bundle_or("popupwidget", "storage", "fetch", |
| 253 | "pikchr", "confirmer", "copybutton", |
| 254 | NULL); |
| 255 | /* Always in-line the javascript for the chat page */ |
| 256 | @ <script nonce="%h(style_nonce())">/* chat.c:%d(__LINE__) */ |
| 257 | /* We need an onload handler to ensure that window.fossil is |
| 258 | initialized before the chat init code runs. */ |
| 259 | @ window.addEventListener('load', function(){ |
| @@ -415,14 +428,22 @@ | |
| 428 | ** zMsg to HTML. |
| 429 | ** |
| 430 | ** Space to hold the returned string is obtained from fossil_malloc() |
| 431 | ** and must be freed by the caller. |
| 432 | */ |
| 433 | static char *chat_format_to_html(const char *zMsg, int isWiki){ |
| 434 | Blob out; |
| 435 | blob_init(&out, "", 0); |
| 436 | if( zMsg==0 || zMsg[0]==0 ){ |
| 437 | /* No-op */ |
| 438 | }else if( isWiki ){ |
| 439 | /* Used for chat-timeline-user. The zMsg is text/x-fossil-wiki. */ |
| 440 | Blob bIn; |
| 441 | blob_init(&bIn, zMsg, (int)strlen(zMsg)); |
| 442 | wiki_convert(&bIn, &out, WIKI_INLINE); |
| 443 | }else{ |
| 444 | /* The common case: zMsg is text/markdown */ |
| 445 | Blob bIn; |
| 446 | blob_init(&bIn, zMsg, (int)strlen(zMsg)); |
| 447 | markdown_to_html(&bIn, NULL, &out); |
| 448 | } |
| 449 | return blob_str(&out); |
| @@ -442,11 +463,11 @@ | |
| 463 | int i; |
| 464 | char *zOut; |
| 465 | db_find_and_open_repository(0,0); |
| 466 | g.perm.Hyperlink = 1; |
| 467 | for(i=0; i<g.argc; i++){ |
| 468 | zOut = chat_format_to_html(g.argv[i], 0); |
| 469 | fossil_print("[%d]: %s\n", i, zOut); |
| 470 | fossil_free(zOut); |
| 471 | } |
| 472 | } |
| 473 | |
| @@ -545,22 +566,26 @@ | |
| 566 | void chat_poll_webpage(void){ |
| 567 | Blob json; /* The json to be constructed and returned */ |
| 568 | sqlite3_int64 dataVersion; /* Data version. Used for polling. */ |
| 569 | const int iDelay = 1000; /* Delay until next poll (milliseconds) */ |
| 570 | int nDelay; /* Maximum delay.*/ |
| 571 | const char *zChatUser; /* chat-timeline-user */ |
| 572 | int isWiki = 0; /* True if chat message is x-fossil-wiki */ |
| 573 | int msgid = atoi(PD("name","0")); |
| 574 | const int msgBefore = atoi(PD("before","0")); |
| 575 | int nLimit = msgBefore>0 ? atoi(PD("n","0")) : 0; |
| 576 | const int bRaw = P("raw")!=0; |
| 577 | |
| 578 | Blob sql = empty_blob; |
| 579 | Stmt q1; |
| 580 | nDelay = db_get_int("chat-poll-timeout",420); /* Default about 7 minutes */ |
| 581 | login_check_credentials(); |
| 582 | if( !g.perm.Chat ) { |
| 583 | chat_emit_permissions_error(1); |
| 584 | return; |
| 585 | } |
| 586 | zChatUser = db_get("chat-timeline-user",0); |
| 587 | chat_create_tables(); |
| 588 | cgi_set_content_type("application/json"); |
| 589 | dataVersion = db_int64(0, "PRAGMA data_version"); |
| 590 | blob_append_sql(&sql, |
| 591 | "SELECT msgid, datetime(mtime), xfrom, xmsg, length(file)," |
| @@ -619,21 +644,23 @@ | |
| 644 | blob_appendf(&json, "\"lmtime\":%!j,", zLMtime); |
| 645 | } |
| 646 | blob_append(&json, "\"xfrom\":", -1); |
| 647 | if(zFrom){ |
| 648 | blob_appendf(&json, "%!j,", zFrom); |
| 649 | isWiki = fossil_strcmp(zFrom,zChatUser)==0; |
| 650 | }else{ |
| 651 | /* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */ |
| 652 | blob_appendf(&json, "null,"); |
| 653 | isWiki = 0; |
| 654 | } |
| 655 | blob_appendf(&json, "\"uclr\":%!j,", |
| 656 | user_color(zFrom ? zFrom : "nobody")); |
| 657 | |
| 658 | if(bRaw){ |
| 659 | blob_appendf(&json, "\"xmsg\":%!j,", zRawMsg); |
| 660 | }else{ |
| 661 | zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "", isWiki); |
| 662 | blob_appendf(&json, "\"xmsg\":%!j,", zMsg); |
| 663 | fossil_free(zMsg); |
| 664 | } |
| 665 | |
| 666 | if( nByte==0 ){ |
| @@ -686,16 +713,19 @@ | |
| 713 | */ |
| 714 | void chat_fetch_one(void){ |
| 715 | Blob json = empty_blob; /* The json to be constructed and returned */ |
| 716 | const int fRaw = PD("raw",0)!=0; |
| 717 | const int msgid = atoi(PD("name","0")); |
| 718 | const char *zChatUser; |
| 719 | int isWiki; |
| 720 | Stmt q; |
| 721 | login_check_credentials(); |
| 722 | if( !g.perm.Chat ) { |
| 723 | chat_emit_permissions_error(0); |
| 724 | return; |
| 725 | } |
| 726 | zChatUser = db_get("chat-timeline-user",0); |
| 727 | chat_create_tables(); |
| 728 | cgi_set_content_type("application/json"); |
| 729 | db_prepare(&q, |
| 730 | "SELECT datetime(mtime), xfrom, xmsg, length(file)," |
| 731 | " fname, fmime, lmtime" |
| @@ -716,21 +746,23 @@ | |
| 746 | blob_appendf(&json, "\"lmtime\":%!j,", zLMtime); |
| 747 | } |
| 748 | blob_append(&json, "\"xfrom\":", -1); |
| 749 | if(zFrom){ |
| 750 | blob_appendf(&json, "%!j,", zFrom); |
| 751 | isWiki = fossil_strcmp(zFrom, zChatUser); |
| 752 | }else{ |
| 753 | /* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */ |
| 754 | blob_appendf(&json, "null,"); |
| 755 | isWiki = 0; |
| 756 | } |
| 757 | blob_appendf(&json, "\"uclr\":%!j,", |
| 758 | user_color(zFrom ? zFrom : "nobody")); |
| 759 | blob_append(&json,"\"xmsg\":", 7); |
| 760 | if(fRaw){ |
| 761 | blob_appendf(&json, "%!j,", zRawMsg); |
| 762 | }else{ |
| 763 | char * zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "", isWiki); |
| 764 | blob_appendf(&json, "%!j,", zMsg); |
| 765 | fossil_free(zMsg); |
| 766 | } |
| 767 | if( nByte==0 ){ |
| 768 | blob_appendf(&json, "\"fsize\":0"); |
| @@ -848,10 +880,88 @@ | |
| 880 | } |
| 881 | blob_init(&chatDb, (const char*)pDb, (int)szDb); |
| 882 | cgi_set_content_type("application/x-sqlite3"); |
| 883 | cgi_set_content(&chatDb); |
| 884 | } |
| 885 | |
| 886 | /* |
| 887 | ** SQL Function: chat_msg_from_event(TYPE,OBJID,USER,MSG) |
| 888 | ** |
| 889 | ** This function returns HTML text that describes an entry from the EVENT |
| 890 | ** table (that is, a timeline event) for display in chat. Parameters: |
| 891 | ** |
| 892 | ** TYPE The event type. 'ci', 'w', 't', 'g', and so forth |
| 893 | ** OBJID EVENT.OBJID |
| 894 | ** USER coalesce(EVENT.EUSER,EVENT.USER) |
| 895 | ** MSG coalesce(EVENT.ECOMMENT, EVENT.COMMENT) |
| 896 | ** |
| 897 | ** This function is intended to be called by the temp.chat_trigger1 trigger |
| 898 | ** which is created by alert_create_trigger() routine. |
| 899 | */ |
| 900 | void chat_msg_from_event( |
| 901 | sqlite3_context *context, |
| 902 | int argc, |
| 903 | sqlite3_value **argv |
| 904 | ){ |
| 905 | const char *zType = (const char*)sqlite3_value_text(argv[0]); |
| 906 | int rid = sqlite3_value_int(argv[1]); |
| 907 | const char *zUser = (const char*)sqlite3_value_text(argv[2]); |
| 908 | const char *zMsg = (const char*)sqlite3_value_text(argv[3]); |
| 909 | char *zRes = 0; |
| 910 | |
| 911 | if( zType==0 || zUser==0 || zMsg==0 ) return; |
| 912 | if( zType[0]=='c' ){ |
| 913 | /* Check-ins */ |
| 914 | char *zBranch; |
| 915 | char *zUuid; |
| 916 | |
| 917 | zBranch = db_text(0, |
| 918 | "SELECT value FROM tagxref" |
| 919 | " WHERE tagxref.rid=%d" |
| 920 | " AND tagxref.tagid=%d" |
| 921 | " AND tagxref.tagtype>0", |
| 922 | rid, TAG_BRANCH); |
| 923 | zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); |
| 924 | zRes = mprintf("%W (check-in: <a href='%R/info/%S'>%S</a>, " |
| 925 | "user: <a href='%R/timeline?u=%t&c=%S'>%h</a>, " |
| 926 | "branch: <a href='%R/timeline?r=%t&c=%S'>%h</a>)", |
| 927 | zMsg, |
| 928 | zUuid, zUuid, |
| 929 | zUser, zUuid, zUser, |
| 930 | zBranch, zUuid, zBranch |
| 931 | ); |
| 932 | fossil_free(zBranch); |
| 933 | fossil_free(zUuid); |
| 934 | }else if( zType[0]=='w' ){ |
| 935 | /* Wiki page changes */ |
| 936 | char *zUuid; |
| 937 | zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); |
| 938 | wiki_hyperlink_override(zUuid); |
| 939 | if( zMsg[0]=='-' ){ |
| 940 | zRes = mprintf("Delete wiki page <a href='%R/whistory?name=%t'>%h</a>", |
| 941 | zMsg+1, zMsg+1); |
| 942 | }else if( zMsg[0]=='+' ){ |
| 943 | zRes = mprintf("Added wiki page <a href='%R/whistory?name=%t'>%h</a>", |
| 944 | zMsg+1, zMsg+1); |
| 945 | }else if( zMsg[0]==':' ){ |
| 946 | zRes = mprintf("<a href='%R/wdiff?id=%!S'>Changes</a> to wiki page " |
| 947 | "<a href='%R/whistory?name=%t'>%h</a>", |
| 948 | zUuid, zMsg+1, zMsg+1); |
| 949 | }else{ |
| 950 | zRes = mprintf("%W", zMsg); |
| 951 | } |
| 952 | wiki_hyperlink_override(0); |
| 953 | fossil_free(zUuid); |
| 954 | }else{ |
| 955 | /* Anything else */ |
| 956 | zRes = mprintf("%W", zMsg); |
| 957 | } |
| 958 | if( zRes ){ |
| 959 | sqlite3_result_text(context, zRes, -1, fossil_free); |
| 960 | } |
| 961 | } |
| 962 | |
| 963 | |
| 964 | /* |
| 965 | ** COMMAND: chat |
| 966 | ** |
| 967 | ** Usage: %fossil chat [SUBCOMMAND] [--remote URL] [ARGS...] |
| 968 |
+116
-6
| --- src/chat.c | ||
| +++ src/chat.c | ||
| @@ -127,10 +127,22 @@ | ||
| 127 | 127 | ** SETTING: chat-alert-sound width=10 |
| 128 | 128 | ** |
| 129 | 129 | ** This is the name of the builtin sound file to use for the alert tone. |
| 130 | 130 | ** The value must be the name of a builtin WAV file. |
| 131 | 131 | */ |
| 132 | +/* | |
| 133 | +** SETTING: chat-timeline-user width=10 | |
| 134 | +** | |
| 135 | +** If this setting is defined and is not an empty string, then | |
| 136 | +** timeline events are posted to the chat as they arrive. The synthesized | |
| 137 | +** chat messages appear to come from the user identified by this setting, | |
| 138 | +** not the user on the timeline event. | |
| 139 | +** | |
| 140 | +** All chat messages that come from the chat-timeline-user are interpreted | |
| 141 | +** as text/x-fossil-wiki instead of as text/markdown. For this reason, | |
| 142 | +** the chat-timeline-user name should probably not be a real user. | |
| 143 | +*/ | |
| 132 | 144 | /* |
| 133 | 145 | ** WEBPAGE: chat loadavg-exempt |
| 134 | 146 | ** |
| 135 | 147 | ** Start up a browser-based chat session. |
| 136 | 148 | ** |
| @@ -236,11 +248,12 @@ | ||
| 236 | 248 | @ <span id='message-inject-point'></span> |
| 237 | 249 | @ </div> |
| 238 | 250 | fossil_free(zProjectName); |
| 239 | 251 | fossil_free(zInputPlaceholder0); |
| 240 | 252 | builtin_fossil_js_bundle_or("popupwidget", "storage", "fetch", |
| 241 | - "pikchr", "confirmer", NULL); | |
| 253 | + "pikchr", "confirmer", "copybutton", | |
| 254 | + NULL); | |
| 242 | 255 | /* Always in-line the javascript for the chat page */ |
| 243 | 256 | @ <script nonce="%h(style_nonce())">/* chat.c:%d(__LINE__) */ |
| 244 | 257 | /* We need an onload handler to ensure that window.fossil is |
| 245 | 258 | initialized before the chat init code runs. */ |
| 246 | 259 | @ window.addEventListener('load', function(){ |
| @@ -415,14 +428,22 @@ | ||
| 415 | 428 | ** zMsg to HTML. |
| 416 | 429 | ** |
| 417 | 430 | ** Space to hold the returned string is obtained from fossil_malloc() |
| 418 | 431 | ** and must be freed by the caller. |
| 419 | 432 | */ |
| 420 | -static char *chat_format_to_html(const char *zMsg){ | |
| 433 | +static char *chat_format_to_html(const char *zMsg, int isWiki){ | |
| 421 | 434 | Blob out; |
| 422 | 435 | blob_init(&out, "", 0); |
| 423 | - if(*zMsg){ | |
| 436 | + if( zMsg==0 || zMsg[0]==0 ){ | |
| 437 | + /* No-op */ | |
| 438 | + }else if( isWiki ){ | |
| 439 | + /* Used for chat-timeline-user. The zMsg is text/x-fossil-wiki. */ | |
| 440 | + Blob bIn; | |
| 441 | + blob_init(&bIn, zMsg, (int)strlen(zMsg)); | |
| 442 | + wiki_convert(&bIn, &out, WIKI_INLINE); | |
| 443 | + }else{ | |
| 444 | + /* The common case: zMsg is text/markdown */ | |
| 424 | 445 | Blob bIn; |
| 425 | 446 | blob_init(&bIn, zMsg, (int)strlen(zMsg)); |
| 426 | 447 | markdown_to_html(&bIn, NULL, &out); |
| 427 | 448 | } |
| 428 | 449 | return blob_str(&out); |
| @@ -442,11 +463,11 @@ | ||
| 442 | 463 | int i; |
| 443 | 464 | char *zOut; |
| 444 | 465 | db_find_and_open_repository(0,0); |
| 445 | 466 | g.perm.Hyperlink = 1; |
| 446 | 467 | for(i=0; i<g.argc; i++){ |
| 447 | - zOut = chat_format_to_html(g.argv[i]); | |
| 468 | + zOut = chat_format_to_html(g.argv[i], 0); | |
| 448 | 469 | fossil_print("[%d]: %s\n", i, zOut); |
| 449 | 470 | fossil_free(zOut); |
| 450 | 471 | } |
| 451 | 472 | } |
| 452 | 473 | |
| @@ -545,22 +566,26 @@ | ||
| 545 | 566 | void chat_poll_webpage(void){ |
| 546 | 567 | Blob json; /* The json to be constructed and returned */ |
| 547 | 568 | sqlite3_int64 dataVersion; /* Data version. Used for polling. */ |
| 548 | 569 | const int iDelay = 1000; /* Delay until next poll (milliseconds) */ |
| 549 | 570 | int nDelay; /* Maximum delay.*/ |
| 571 | + const char *zChatUser; /* chat-timeline-user */ | |
| 572 | + int isWiki = 0; /* True if chat message is x-fossil-wiki */ | |
| 550 | 573 | int msgid = atoi(PD("name","0")); |
| 551 | 574 | const int msgBefore = atoi(PD("before","0")); |
| 552 | 575 | int nLimit = msgBefore>0 ? atoi(PD("n","0")) : 0; |
| 553 | 576 | const int bRaw = P("raw")!=0; |
| 577 | + | |
| 554 | 578 | Blob sql = empty_blob; |
| 555 | 579 | Stmt q1; |
| 556 | 580 | nDelay = db_get_int("chat-poll-timeout",420); /* Default about 7 minutes */ |
| 557 | 581 | login_check_credentials(); |
| 558 | 582 | if( !g.perm.Chat ) { |
| 559 | 583 | chat_emit_permissions_error(1); |
| 560 | 584 | return; |
| 561 | 585 | } |
| 586 | + zChatUser = db_get("chat-timeline-user",0); | |
| 562 | 587 | chat_create_tables(); |
| 563 | 588 | cgi_set_content_type("application/json"); |
| 564 | 589 | dataVersion = db_int64(0, "PRAGMA data_version"); |
| 565 | 590 | blob_append_sql(&sql, |
| 566 | 591 | "SELECT msgid, datetime(mtime), xfrom, xmsg, length(file)," |
| @@ -619,21 +644,23 @@ | ||
| 619 | 644 | blob_appendf(&json, "\"lmtime\":%!j,", zLMtime); |
| 620 | 645 | } |
| 621 | 646 | blob_append(&json, "\"xfrom\":", -1); |
| 622 | 647 | if(zFrom){ |
| 623 | 648 | blob_appendf(&json, "%!j,", zFrom); |
| 649 | + isWiki = fossil_strcmp(zFrom,zChatUser)==0; | |
| 624 | 650 | }else{ |
| 625 | 651 | /* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */ |
| 626 | 652 | blob_appendf(&json, "null,"); |
| 653 | + isWiki = 0; | |
| 627 | 654 | } |
| 628 | 655 | blob_appendf(&json, "\"uclr\":%!j,", |
| 629 | 656 | user_color(zFrom ? zFrom : "nobody")); |
| 630 | 657 | |
| 631 | 658 | if(bRaw){ |
| 632 | 659 | blob_appendf(&json, "\"xmsg\":%!j,", zRawMsg); |
| 633 | 660 | }else{ |
| 634 | - zMsg = chat_format_to_html(zRawMsg ? zRawMsg : ""); | |
| 661 | + zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "", isWiki); | |
| 635 | 662 | blob_appendf(&json, "\"xmsg\":%!j,", zMsg); |
| 636 | 663 | fossil_free(zMsg); |
| 637 | 664 | } |
| 638 | 665 | |
| 639 | 666 | if( nByte==0 ){ |
| @@ -686,16 +713,19 @@ | ||
| 686 | 713 | */ |
| 687 | 714 | void chat_fetch_one(void){ |
| 688 | 715 | Blob json = empty_blob; /* The json to be constructed and returned */ |
| 689 | 716 | const int fRaw = PD("raw",0)!=0; |
| 690 | 717 | const int msgid = atoi(PD("name","0")); |
| 718 | + const char *zChatUser; | |
| 719 | + int isWiki; | |
| 691 | 720 | Stmt q; |
| 692 | 721 | login_check_credentials(); |
| 693 | 722 | if( !g.perm.Chat ) { |
| 694 | 723 | chat_emit_permissions_error(0); |
| 695 | 724 | return; |
| 696 | 725 | } |
| 726 | + zChatUser = db_get("chat-timeline-user",0); | |
| 697 | 727 | chat_create_tables(); |
| 698 | 728 | cgi_set_content_type("application/json"); |
| 699 | 729 | db_prepare(&q, |
| 700 | 730 | "SELECT datetime(mtime), xfrom, xmsg, length(file)," |
| 701 | 731 | " fname, fmime, lmtime" |
| @@ -716,21 +746,23 @@ | ||
| 716 | 746 | blob_appendf(&json, "\"lmtime\":%!j,", zLMtime); |
| 717 | 747 | } |
| 718 | 748 | blob_append(&json, "\"xfrom\":", -1); |
| 719 | 749 | if(zFrom){ |
| 720 | 750 | blob_appendf(&json, "%!j,", zFrom); |
| 751 | + isWiki = fossil_strcmp(zFrom, zChatUser); | |
| 721 | 752 | }else{ |
| 722 | 753 | /* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */ |
| 723 | 754 | blob_appendf(&json, "null,"); |
| 755 | + isWiki = 0; | |
| 724 | 756 | } |
| 725 | 757 | blob_appendf(&json, "\"uclr\":%!j,", |
| 726 | 758 | user_color(zFrom ? zFrom : "nobody")); |
| 727 | 759 | blob_append(&json,"\"xmsg\":", 7); |
| 728 | 760 | if(fRaw){ |
| 729 | 761 | blob_appendf(&json, "%!j,", zRawMsg); |
| 730 | 762 | }else{ |
| 731 | - char * zMsg = chat_format_to_html(zRawMsg ? zRawMsg : ""); | |
| 763 | + char * zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "", isWiki); | |
| 732 | 764 | blob_appendf(&json, "%!j,", zMsg); |
| 733 | 765 | fossil_free(zMsg); |
| 734 | 766 | } |
| 735 | 767 | if( nByte==0 ){ |
| 736 | 768 | blob_appendf(&json, "\"fsize\":0"); |
| @@ -848,10 +880,88 @@ | ||
| 848 | 880 | } |
| 849 | 881 | blob_init(&chatDb, (const char*)pDb, (int)szDb); |
| 850 | 882 | cgi_set_content_type("application/x-sqlite3"); |
| 851 | 883 | cgi_set_content(&chatDb); |
| 852 | 884 | } |
| 885 | + | |
| 886 | +/* | |
| 887 | +** SQL Function: chat_msg_from_event(TYPE,OBJID,USER,MSG) | |
| 888 | +** | |
| 889 | +** This function returns HTML text that describes an entry from the EVENT | |
| 890 | +** table (that is, a timeline event) for display in chat. Parameters: | |
| 891 | +** | |
| 892 | +** TYPE The event type. 'ci', 'w', 't', 'g', and so forth | |
| 893 | +** OBJID EVENT.OBJID | |
| 894 | +** USER coalesce(EVENT.EUSER,EVENT.USER) | |
| 895 | +** MSG coalesce(EVENT.ECOMMENT, EVENT.COMMENT) | |
| 896 | +** | |
| 897 | +** This function is intended to be called by the temp.chat_trigger1 trigger | |
| 898 | +** which is created by alert_create_trigger() routine. | |
| 899 | +*/ | |
| 900 | +void chat_msg_from_event( | |
| 901 | + sqlite3_context *context, | |
| 902 | + int argc, | |
| 903 | + sqlite3_value **argv | |
| 904 | +){ | |
| 905 | + const char *zType = (const char*)sqlite3_value_text(argv[0]); | |
| 906 | + int rid = sqlite3_value_int(argv[1]); | |
| 907 | + const char *zUser = (const char*)sqlite3_value_text(argv[2]); | |
| 908 | + const char *zMsg = (const char*)sqlite3_value_text(argv[3]); | |
| 909 | + char *zRes = 0; | |
| 910 | + | |
| 911 | + if( zType==0 || zUser==0 || zMsg==0 ) return; | |
| 912 | + if( zType[0]=='c' ){ | |
| 913 | + /* Check-ins */ | |
| 914 | + char *zBranch; | |
| 915 | + char *zUuid; | |
| 916 | + | |
| 917 | + zBranch = db_text(0, | |
| 918 | + "SELECT value FROM tagxref" | |
| 919 | + " WHERE tagxref.rid=%d" | |
| 920 | + " AND tagxref.tagid=%d" | |
| 921 | + " AND tagxref.tagtype>0", | |
| 922 | + rid, TAG_BRANCH); | |
| 923 | + zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); | |
| 924 | + zRes = mprintf("%W (check-in: <a href='%R/info/%S'>%S</a>, " | |
| 925 | + "user: <a href='%R/timeline?u=%t&c=%S'>%h</a>, " | |
| 926 | + "branch: <a href='%R/timeline?r=%t&c=%S'>%h</a>)", | |
| 927 | + zMsg, | |
| 928 | + zUuid, zUuid, | |
| 929 | + zUser, zUuid, zUser, | |
| 930 | + zBranch, zUuid, zBranch | |
| 931 | + ); | |
| 932 | + fossil_free(zBranch); | |
| 933 | + fossil_free(zUuid); | |
| 934 | + }else if( zType[0]=='w' ){ | |
| 935 | + /* Wiki page changes */ | |
| 936 | + char *zUuid; | |
| 937 | + zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); | |
| 938 | + wiki_hyperlink_override(zUuid); | |
| 939 | + if( zMsg[0]=='-' ){ | |
| 940 | + zRes = mprintf("Delete wiki page <a href='%R/whistory?name=%t'>%h</a>", | |
| 941 | + zMsg+1, zMsg+1); | |
| 942 | + }else if( zMsg[0]=='+' ){ | |
| 943 | + zRes = mprintf("Added wiki page <a href='%R/whistory?name=%t'>%h</a>", | |
| 944 | + zMsg+1, zMsg+1); | |
| 945 | + }else if( zMsg[0]==':' ){ | |
| 946 | + zRes = mprintf("<a href='%R/wdiff?id=%!S'>Changes</a> to wiki page " | |
| 947 | + "<a href='%R/whistory?name=%t'>%h</a>", | |
| 948 | + zUuid, zMsg+1, zMsg+1); | |
| 949 | + }else{ | |
| 950 | + zRes = mprintf("%W", zMsg); | |
| 951 | + } | |
| 952 | + wiki_hyperlink_override(0); | |
| 953 | + fossil_free(zUuid); | |
| 954 | + }else{ | |
| 955 | + /* Anything else */ | |
| 956 | + zRes = mprintf("%W", zMsg); | |
| 957 | + } | |
| 958 | + if( zRes ){ | |
| 959 | + sqlite3_result_text(context, zRes, -1, fossil_free); | |
| 960 | + } | |
| 961 | +} | |
| 962 | + | |
| 853 | 963 | |
| 854 | 964 | /* |
| 855 | 965 | ** COMMAND: chat |
| 856 | 966 | ** |
| 857 | 967 | ** Usage: %fossil chat [SUBCOMMAND] [--remote URL] [ARGS...] |
| 858 | 968 |
| --- src/chat.c | |
| +++ src/chat.c | |
| @@ -127,10 +127,22 @@ | |
| 127 | ** SETTING: chat-alert-sound width=10 |
| 128 | ** |
| 129 | ** This is the name of the builtin sound file to use for the alert tone. |
| 130 | ** The value must be the name of a builtin WAV file. |
| 131 | */ |
| 132 | /* |
| 133 | ** WEBPAGE: chat loadavg-exempt |
| 134 | ** |
| 135 | ** Start up a browser-based chat session. |
| 136 | ** |
| @@ -236,11 +248,12 @@ | |
| 236 | @ <span id='message-inject-point'></span> |
| 237 | @ </div> |
| 238 | fossil_free(zProjectName); |
| 239 | fossil_free(zInputPlaceholder0); |
| 240 | builtin_fossil_js_bundle_or("popupwidget", "storage", "fetch", |
| 241 | "pikchr", "confirmer", NULL); |
| 242 | /* Always in-line the javascript for the chat page */ |
| 243 | @ <script nonce="%h(style_nonce())">/* chat.c:%d(__LINE__) */ |
| 244 | /* We need an onload handler to ensure that window.fossil is |
| 245 | initialized before the chat init code runs. */ |
| 246 | @ window.addEventListener('load', function(){ |
| @@ -415,14 +428,22 @@ | |
| 415 | ** zMsg to HTML. |
| 416 | ** |
| 417 | ** Space to hold the returned string is obtained from fossil_malloc() |
| 418 | ** and must be freed by the caller. |
| 419 | */ |
| 420 | static char *chat_format_to_html(const char *zMsg){ |
| 421 | Blob out; |
| 422 | blob_init(&out, "", 0); |
| 423 | if(*zMsg){ |
| 424 | Blob bIn; |
| 425 | blob_init(&bIn, zMsg, (int)strlen(zMsg)); |
| 426 | markdown_to_html(&bIn, NULL, &out); |
| 427 | } |
| 428 | return blob_str(&out); |
| @@ -442,11 +463,11 @@ | |
| 442 | int i; |
| 443 | char *zOut; |
| 444 | db_find_and_open_repository(0,0); |
| 445 | g.perm.Hyperlink = 1; |
| 446 | for(i=0; i<g.argc; i++){ |
| 447 | zOut = chat_format_to_html(g.argv[i]); |
| 448 | fossil_print("[%d]: %s\n", i, zOut); |
| 449 | fossil_free(zOut); |
| 450 | } |
| 451 | } |
| 452 | |
| @@ -545,22 +566,26 @@ | |
| 545 | void chat_poll_webpage(void){ |
| 546 | Blob json; /* The json to be constructed and returned */ |
| 547 | sqlite3_int64 dataVersion; /* Data version. Used for polling. */ |
| 548 | const int iDelay = 1000; /* Delay until next poll (milliseconds) */ |
| 549 | int nDelay; /* Maximum delay.*/ |
| 550 | int msgid = atoi(PD("name","0")); |
| 551 | const int msgBefore = atoi(PD("before","0")); |
| 552 | int nLimit = msgBefore>0 ? atoi(PD("n","0")) : 0; |
| 553 | const int bRaw = P("raw")!=0; |
| 554 | Blob sql = empty_blob; |
| 555 | Stmt q1; |
| 556 | nDelay = db_get_int("chat-poll-timeout",420); /* Default about 7 minutes */ |
| 557 | login_check_credentials(); |
| 558 | if( !g.perm.Chat ) { |
| 559 | chat_emit_permissions_error(1); |
| 560 | return; |
| 561 | } |
| 562 | chat_create_tables(); |
| 563 | cgi_set_content_type("application/json"); |
| 564 | dataVersion = db_int64(0, "PRAGMA data_version"); |
| 565 | blob_append_sql(&sql, |
| 566 | "SELECT msgid, datetime(mtime), xfrom, xmsg, length(file)," |
| @@ -619,21 +644,23 @@ | |
| 619 | blob_appendf(&json, "\"lmtime\":%!j,", zLMtime); |
| 620 | } |
| 621 | blob_append(&json, "\"xfrom\":", -1); |
| 622 | if(zFrom){ |
| 623 | blob_appendf(&json, "%!j,", zFrom); |
| 624 | }else{ |
| 625 | /* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */ |
| 626 | blob_appendf(&json, "null,"); |
| 627 | } |
| 628 | blob_appendf(&json, "\"uclr\":%!j,", |
| 629 | user_color(zFrom ? zFrom : "nobody")); |
| 630 | |
| 631 | if(bRaw){ |
| 632 | blob_appendf(&json, "\"xmsg\":%!j,", zRawMsg); |
| 633 | }else{ |
| 634 | zMsg = chat_format_to_html(zRawMsg ? zRawMsg : ""); |
| 635 | blob_appendf(&json, "\"xmsg\":%!j,", zMsg); |
| 636 | fossil_free(zMsg); |
| 637 | } |
| 638 | |
| 639 | if( nByte==0 ){ |
| @@ -686,16 +713,19 @@ | |
| 686 | */ |
| 687 | void chat_fetch_one(void){ |
| 688 | Blob json = empty_blob; /* The json to be constructed and returned */ |
| 689 | const int fRaw = PD("raw",0)!=0; |
| 690 | const int msgid = atoi(PD("name","0")); |
| 691 | Stmt q; |
| 692 | login_check_credentials(); |
| 693 | if( !g.perm.Chat ) { |
| 694 | chat_emit_permissions_error(0); |
| 695 | return; |
| 696 | } |
| 697 | chat_create_tables(); |
| 698 | cgi_set_content_type("application/json"); |
| 699 | db_prepare(&q, |
| 700 | "SELECT datetime(mtime), xfrom, xmsg, length(file)," |
| 701 | " fname, fmime, lmtime" |
| @@ -716,21 +746,23 @@ | |
| 716 | blob_appendf(&json, "\"lmtime\":%!j,", zLMtime); |
| 717 | } |
| 718 | blob_append(&json, "\"xfrom\":", -1); |
| 719 | if(zFrom){ |
| 720 | blob_appendf(&json, "%!j,", zFrom); |
| 721 | }else{ |
| 722 | /* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */ |
| 723 | blob_appendf(&json, "null,"); |
| 724 | } |
| 725 | blob_appendf(&json, "\"uclr\":%!j,", |
| 726 | user_color(zFrom ? zFrom : "nobody")); |
| 727 | blob_append(&json,"\"xmsg\":", 7); |
| 728 | if(fRaw){ |
| 729 | blob_appendf(&json, "%!j,", zRawMsg); |
| 730 | }else{ |
| 731 | char * zMsg = chat_format_to_html(zRawMsg ? zRawMsg : ""); |
| 732 | blob_appendf(&json, "%!j,", zMsg); |
| 733 | fossil_free(zMsg); |
| 734 | } |
| 735 | if( nByte==0 ){ |
| 736 | blob_appendf(&json, "\"fsize\":0"); |
| @@ -848,10 +880,88 @@ | |
| 848 | } |
| 849 | blob_init(&chatDb, (const char*)pDb, (int)szDb); |
| 850 | cgi_set_content_type("application/x-sqlite3"); |
| 851 | cgi_set_content(&chatDb); |
| 852 | } |
| 853 | |
| 854 | /* |
| 855 | ** COMMAND: chat |
| 856 | ** |
| 857 | ** Usage: %fossil chat [SUBCOMMAND] [--remote URL] [ARGS...] |
| 858 |
| --- src/chat.c | |
| +++ src/chat.c | |
| @@ -127,10 +127,22 @@ | |
| 127 | ** SETTING: chat-alert-sound width=10 |
| 128 | ** |
| 129 | ** This is the name of the builtin sound file to use for the alert tone. |
| 130 | ** The value must be the name of a builtin WAV file. |
| 131 | */ |
| 132 | /* |
| 133 | ** SETTING: chat-timeline-user width=10 |
| 134 | ** |
| 135 | ** If this setting is defined and is not an empty string, then |
| 136 | ** timeline events are posted to the chat as they arrive. The synthesized |
| 137 | ** chat messages appear to come from the user identified by this setting, |
| 138 | ** not the user on the timeline event. |
| 139 | ** |
| 140 | ** All chat messages that come from the chat-timeline-user are interpreted |
| 141 | ** as text/x-fossil-wiki instead of as text/markdown. For this reason, |
| 142 | ** the chat-timeline-user name should probably not be a real user. |
| 143 | */ |
| 144 | /* |
| 145 | ** WEBPAGE: chat loadavg-exempt |
| 146 | ** |
| 147 | ** Start up a browser-based chat session. |
| 148 | ** |
| @@ -236,11 +248,12 @@ | |
| 248 | @ <span id='message-inject-point'></span> |
| 249 | @ </div> |
| 250 | fossil_free(zProjectName); |
| 251 | fossil_free(zInputPlaceholder0); |
| 252 | builtin_fossil_js_bundle_or("popupwidget", "storage", "fetch", |
| 253 | "pikchr", "confirmer", "copybutton", |
| 254 | NULL); |
| 255 | /* Always in-line the javascript for the chat page */ |
| 256 | @ <script nonce="%h(style_nonce())">/* chat.c:%d(__LINE__) */ |
| 257 | /* We need an onload handler to ensure that window.fossil is |
| 258 | initialized before the chat init code runs. */ |
| 259 | @ window.addEventListener('load', function(){ |
| @@ -415,14 +428,22 @@ | |
| 428 | ** zMsg to HTML. |
| 429 | ** |
| 430 | ** Space to hold the returned string is obtained from fossil_malloc() |
| 431 | ** and must be freed by the caller. |
| 432 | */ |
| 433 | static char *chat_format_to_html(const char *zMsg, int isWiki){ |
| 434 | Blob out; |
| 435 | blob_init(&out, "", 0); |
| 436 | if( zMsg==0 || zMsg[0]==0 ){ |
| 437 | /* No-op */ |
| 438 | }else if( isWiki ){ |
| 439 | /* Used for chat-timeline-user. The zMsg is text/x-fossil-wiki. */ |
| 440 | Blob bIn; |
| 441 | blob_init(&bIn, zMsg, (int)strlen(zMsg)); |
| 442 | wiki_convert(&bIn, &out, WIKI_INLINE); |
| 443 | }else{ |
| 444 | /* The common case: zMsg is text/markdown */ |
| 445 | Blob bIn; |
| 446 | blob_init(&bIn, zMsg, (int)strlen(zMsg)); |
| 447 | markdown_to_html(&bIn, NULL, &out); |
| 448 | } |
| 449 | return blob_str(&out); |
| @@ -442,11 +463,11 @@ | |
| 463 | int i; |
| 464 | char *zOut; |
| 465 | db_find_and_open_repository(0,0); |
| 466 | g.perm.Hyperlink = 1; |
| 467 | for(i=0; i<g.argc; i++){ |
| 468 | zOut = chat_format_to_html(g.argv[i], 0); |
| 469 | fossil_print("[%d]: %s\n", i, zOut); |
| 470 | fossil_free(zOut); |
| 471 | } |
| 472 | } |
| 473 | |
| @@ -545,22 +566,26 @@ | |
| 566 | void chat_poll_webpage(void){ |
| 567 | Blob json; /* The json to be constructed and returned */ |
| 568 | sqlite3_int64 dataVersion; /* Data version. Used for polling. */ |
| 569 | const int iDelay = 1000; /* Delay until next poll (milliseconds) */ |
| 570 | int nDelay; /* Maximum delay.*/ |
| 571 | const char *zChatUser; /* chat-timeline-user */ |
| 572 | int isWiki = 0; /* True if chat message is x-fossil-wiki */ |
| 573 | int msgid = atoi(PD("name","0")); |
| 574 | const int msgBefore = atoi(PD("before","0")); |
| 575 | int nLimit = msgBefore>0 ? atoi(PD("n","0")) : 0; |
| 576 | const int bRaw = P("raw")!=0; |
| 577 | |
| 578 | Blob sql = empty_blob; |
| 579 | Stmt q1; |
| 580 | nDelay = db_get_int("chat-poll-timeout",420); /* Default about 7 minutes */ |
| 581 | login_check_credentials(); |
| 582 | if( !g.perm.Chat ) { |
| 583 | chat_emit_permissions_error(1); |
| 584 | return; |
| 585 | } |
| 586 | zChatUser = db_get("chat-timeline-user",0); |
| 587 | chat_create_tables(); |
| 588 | cgi_set_content_type("application/json"); |
| 589 | dataVersion = db_int64(0, "PRAGMA data_version"); |
| 590 | blob_append_sql(&sql, |
| 591 | "SELECT msgid, datetime(mtime), xfrom, xmsg, length(file)," |
| @@ -619,21 +644,23 @@ | |
| 644 | blob_appendf(&json, "\"lmtime\":%!j,", zLMtime); |
| 645 | } |
| 646 | blob_append(&json, "\"xfrom\":", -1); |
| 647 | if(zFrom){ |
| 648 | blob_appendf(&json, "%!j,", zFrom); |
| 649 | isWiki = fossil_strcmp(zFrom,zChatUser)==0; |
| 650 | }else{ |
| 651 | /* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */ |
| 652 | blob_appendf(&json, "null,"); |
| 653 | isWiki = 0; |
| 654 | } |
| 655 | blob_appendf(&json, "\"uclr\":%!j,", |
| 656 | user_color(zFrom ? zFrom : "nobody")); |
| 657 | |
| 658 | if(bRaw){ |
| 659 | blob_appendf(&json, "\"xmsg\":%!j,", zRawMsg); |
| 660 | }else{ |
| 661 | zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "", isWiki); |
| 662 | blob_appendf(&json, "\"xmsg\":%!j,", zMsg); |
| 663 | fossil_free(zMsg); |
| 664 | } |
| 665 | |
| 666 | if( nByte==0 ){ |
| @@ -686,16 +713,19 @@ | |
| 713 | */ |
| 714 | void chat_fetch_one(void){ |
| 715 | Blob json = empty_blob; /* The json to be constructed and returned */ |
| 716 | const int fRaw = PD("raw",0)!=0; |
| 717 | const int msgid = atoi(PD("name","0")); |
| 718 | const char *zChatUser; |
| 719 | int isWiki; |
| 720 | Stmt q; |
| 721 | login_check_credentials(); |
| 722 | if( !g.perm.Chat ) { |
| 723 | chat_emit_permissions_error(0); |
| 724 | return; |
| 725 | } |
| 726 | zChatUser = db_get("chat-timeline-user",0); |
| 727 | chat_create_tables(); |
| 728 | cgi_set_content_type("application/json"); |
| 729 | db_prepare(&q, |
| 730 | "SELECT datetime(mtime), xfrom, xmsg, length(file)," |
| 731 | " fname, fmime, lmtime" |
| @@ -716,21 +746,23 @@ | |
| 746 | blob_appendf(&json, "\"lmtime\":%!j,", zLMtime); |
| 747 | } |
| 748 | blob_append(&json, "\"xfrom\":", -1); |
| 749 | if(zFrom){ |
| 750 | blob_appendf(&json, "%!j,", zFrom); |
| 751 | isWiki = fossil_strcmp(zFrom, zChatUser); |
| 752 | }else{ |
| 753 | /* see https://fossil-scm.org/forum/forumpost/e0be0eeb4c */ |
| 754 | blob_appendf(&json, "null,"); |
| 755 | isWiki = 0; |
| 756 | } |
| 757 | blob_appendf(&json, "\"uclr\":%!j,", |
| 758 | user_color(zFrom ? zFrom : "nobody")); |
| 759 | blob_append(&json,"\"xmsg\":", 7); |
| 760 | if(fRaw){ |
| 761 | blob_appendf(&json, "%!j,", zRawMsg); |
| 762 | }else{ |
| 763 | char * zMsg = chat_format_to_html(zRawMsg ? zRawMsg : "", isWiki); |
| 764 | blob_appendf(&json, "%!j,", zMsg); |
| 765 | fossil_free(zMsg); |
| 766 | } |
| 767 | if( nByte==0 ){ |
| 768 | blob_appendf(&json, "\"fsize\":0"); |
| @@ -848,10 +880,88 @@ | |
| 880 | } |
| 881 | blob_init(&chatDb, (const char*)pDb, (int)szDb); |
| 882 | cgi_set_content_type("application/x-sqlite3"); |
| 883 | cgi_set_content(&chatDb); |
| 884 | } |
| 885 | |
| 886 | /* |
| 887 | ** SQL Function: chat_msg_from_event(TYPE,OBJID,USER,MSG) |
| 888 | ** |
| 889 | ** This function returns HTML text that describes an entry from the EVENT |
| 890 | ** table (that is, a timeline event) for display in chat. Parameters: |
| 891 | ** |
| 892 | ** TYPE The event type. 'ci', 'w', 't', 'g', and so forth |
| 893 | ** OBJID EVENT.OBJID |
| 894 | ** USER coalesce(EVENT.EUSER,EVENT.USER) |
| 895 | ** MSG coalesce(EVENT.ECOMMENT, EVENT.COMMENT) |
| 896 | ** |
| 897 | ** This function is intended to be called by the temp.chat_trigger1 trigger |
| 898 | ** which is created by alert_create_trigger() routine. |
| 899 | */ |
| 900 | void chat_msg_from_event( |
| 901 | sqlite3_context *context, |
| 902 | int argc, |
| 903 | sqlite3_value **argv |
| 904 | ){ |
| 905 | const char *zType = (const char*)sqlite3_value_text(argv[0]); |
| 906 | int rid = sqlite3_value_int(argv[1]); |
| 907 | const char *zUser = (const char*)sqlite3_value_text(argv[2]); |
| 908 | const char *zMsg = (const char*)sqlite3_value_text(argv[3]); |
| 909 | char *zRes = 0; |
| 910 | |
| 911 | if( zType==0 || zUser==0 || zMsg==0 ) return; |
| 912 | if( zType[0]=='c' ){ |
| 913 | /* Check-ins */ |
| 914 | char *zBranch; |
| 915 | char *zUuid; |
| 916 | |
| 917 | zBranch = db_text(0, |
| 918 | "SELECT value FROM tagxref" |
| 919 | " WHERE tagxref.rid=%d" |
| 920 | " AND tagxref.tagid=%d" |
| 921 | " AND tagxref.tagtype>0", |
| 922 | rid, TAG_BRANCH); |
| 923 | zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); |
| 924 | zRes = mprintf("%W (check-in: <a href='%R/info/%S'>%S</a>, " |
| 925 | "user: <a href='%R/timeline?u=%t&c=%S'>%h</a>, " |
| 926 | "branch: <a href='%R/timeline?r=%t&c=%S'>%h</a>)", |
| 927 | zMsg, |
| 928 | zUuid, zUuid, |
| 929 | zUser, zUuid, zUser, |
| 930 | zBranch, zUuid, zBranch |
| 931 | ); |
| 932 | fossil_free(zBranch); |
| 933 | fossil_free(zUuid); |
| 934 | }else if( zType[0]=='w' ){ |
| 935 | /* Wiki page changes */ |
| 936 | char *zUuid; |
| 937 | zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); |
| 938 | wiki_hyperlink_override(zUuid); |
| 939 | if( zMsg[0]=='-' ){ |
| 940 | zRes = mprintf("Delete wiki page <a href='%R/whistory?name=%t'>%h</a>", |
| 941 | zMsg+1, zMsg+1); |
| 942 | }else if( zMsg[0]=='+' ){ |
| 943 | zRes = mprintf("Added wiki page <a href='%R/whistory?name=%t'>%h</a>", |
| 944 | zMsg+1, zMsg+1); |
| 945 | }else if( zMsg[0]==':' ){ |
| 946 | zRes = mprintf("<a href='%R/wdiff?id=%!S'>Changes</a> to wiki page " |
| 947 | "<a href='%R/whistory?name=%t'>%h</a>", |
| 948 | zUuid, zMsg+1, zMsg+1); |
| 949 | }else{ |
| 950 | zRes = mprintf("%W", zMsg); |
| 951 | } |
| 952 | wiki_hyperlink_override(0); |
| 953 | fossil_free(zUuid); |
| 954 | }else{ |
| 955 | /* Anything else */ |
| 956 | zRes = mprintf("%W", zMsg); |
| 957 | } |
| 958 | if( zRes ){ |
| 959 | sqlite3_result_text(context, zRes, -1, fossil_free); |
| 960 | } |
| 961 | } |
| 962 | |
| 963 | |
| 964 | /* |
| 965 | ** COMMAND: chat |
| 966 | ** |
| 967 | ** Usage: %fossil chat [SUBCOMMAND] [--remote URL] [ARGS...] |
| 968 |
+11
-4
| --- src/checkin.c | ||
| +++ src/checkin.c | ||
| @@ -153,11 +153,12 @@ | ||
| 153 | 153 | blob_zero(&sql); |
| 154 | 154 | if( flags & C_ALL ){ |
| 155 | 155 | /* Start with a list of all managed files. */ |
| 156 | 156 | blob_append_sql(&sql, |
| 157 | 157 | "SELECT pathname, %s as mtime, %s as size, deleted, chnged, rid," |
| 158 | - " coalesce(origname!=pathname,0) AS renamed, 1 AS managed" | |
| 158 | + " coalesce(origname!=pathname,0) AS renamed, 1 AS managed," | |
| 159 | + " origname" | |
| 159 | 160 | " FROM vfile LEFT JOIN blob USING (rid)" |
| 160 | 161 | " WHERE is_selected(id)%s", |
| 161 | 162 | flags & C_MTIME ? "datetime(checkin_mtime(:vid, rid), " |
| 162 | 163 | "'unixepoch', toLocal())" : "''" /*safe-for-%s*/, |
| 163 | 164 | flags & C_SIZE ? "coalesce(blob.size, 0)" : "0" /*safe-for-%s*/, |
| @@ -174,11 +175,11 @@ | ||
| 174 | 175 | if( flags & C_EXTRA ){ |
| 175 | 176 | if( blob_size(&sql) ){ |
| 176 | 177 | blob_append_sql(&sql, " UNION ALL"); |
| 177 | 178 | } |
| 178 | 179 | blob_append_sql(&sql, |
| 179 | - " SELECT pathname, %s, %s, 0, 0, 0, 0, 0" | |
| 180 | + " SELECT pathname, %s, %s, 0, 0, 0, 0, 0, NULL" | |
| 180 | 181 | " FROM sfile WHERE pathname NOT IN (%s)%s", |
| 181 | 182 | flags & C_MTIME ? "datetime(mtime, 'unixepoch', toLocal())" : "''", |
| 182 | 183 | flags & C_SIZE ? "size" : "0", |
| 183 | 184 | fossil_all_reserved_names(0), blob_sql_text(&where)); |
| 184 | 185 | } |
| @@ -211,10 +212,11 @@ | ||
| 211 | 212 | int size = db_column_int(&q, 2); |
| 212 | 213 | int isDeleted = db_column_int(&q, 3); |
| 213 | 214 | int isChnged = db_column_int(&q, 4); |
| 214 | 215 | int isNew = isManaged && !db_column_int(&q, 5); |
| 215 | 216 | int isRenamed = db_column_int(&q, 6); |
| 217 | + const char *zOrigName = 0; | |
| 216 | 218 | char *zFullName = mprintf("%s%s", g.zLocalRoot, zPathname); |
| 217 | 219 | int isMissing = !file_isfile_or_link(zFullName); |
| 218 | 220 | |
| 219 | 221 | /* Determine the file change classification, if any. */ |
| 220 | 222 | if( isDeleted ){ |
| @@ -265,10 +267,11 @@ | ||
| 265 | 267 | }else if( (flags & (C_EDITED | C_CHANGED)) && isChnged |
| 266 | 268 | && (isChnged<2 || isChnged>9) ){ |
| 267 | 269 | zClass = "EDITED"; |
| 268 | 270 | }else if( (flags & C_RENAMED) && isRenamed ){ |
| 269 | 271 | zClass = "RENAMED"; |
| 272 | + zOrigName = db_column_text(&q,8); | |
| 270 | 273 | }else if( (flags & C_UNCHANGED) && isManaged && !isNew |
| 271 | 274 | && !isChnged && !isRenamed ){ |
| 272 | 275 | zClass = "UNCHANGED"; |
| 273 | 276 | }else if( (flags & C_EXTRA) && !isManaged ){ |
| 274 | 277 | zClass = "EXTRA"; |
| @@ -295,11 +298,15 @@ | ||
| 295 | 298 | file_relative_name(zFullName, &rewrittenPathname, 0); |
| 296 | 299 | zDisplayName = blob_str(&rewrittenPathname); |
| 297 | 300 | if( zDisplayName[0]=='.' && zDisplayName[1]=='/' ){ |
| 298 | 301 | zDisplayName += 2; /* no unnecessary ./ prefix */ |
| 299 | 302 | } |
| 300 | - blob_append(report, zDisplayName, -1); | |
| 303 | + if( (flags & (C_FILTER ^ C_RENAMED)) && zOrigName ){ | |
| 304 | + blob_appendf(report, "%s -> %s", zOrigName, zDisplayName); | |
| 305 | + }else{ | |
| 306 | + blob_append(report, zDisplayName, -1); | |
| 307 | + } | |
| 301 | 308 | }else{ |
| 302 | 309 | /* If not C_RELPATH, display paths relative to project root. */ |
| 303 | 310 | blob_append(report, zPathname, -1); |
| 304 | 311 | } |
| 305 | 312 | blob_append(report, "\n", 1); |
| @@ -2081,11 +2088,11 @@ | ||
| 2081 | 2088 | char **pB = (char**)b; |
| 2082 | 2089 | return fossil_strcmp(pA[0], pB[0]); |
| 2083 | 2090 | } |
| 2084 | 2091 | |
| 2085 | 2092 | /* |
| 2086 | -** COMMAND: ci* | |
| 2093 | +** COMMAND: ci# | |
| 2087 | 2094 | ** COMMAND: commit |
| 2088 | 2095 | ** |
| 2089 | 2096 | ** Usage: %fossil commit ?OPTIONS? ?FILE...? |
| 2090 | 2097 | ** or: %fossil ci ?OPTIONS? ?FILE...? |
| 2091 | 2098 | ** |
| 2092 | 2099 |
| --- src/checkin.c | |
| +++ src/checkin.c | |
| @@ -153,11 +153,12 @@ | |
| 153 | blob_zero(&sql); |
| 154 | if( flags & C_ALL ){ |
| 155 | /* Start with a list of all managed files. */ |
| 156 | blob_append_sql(&sql, |
| 157 | "SELECT pathname, %s as mtime, %s as size, deleted, chnged, rid," |
| 158 | " coalesce(origname!=pathname,0) AS renamed, 1 AS managed" |
| 159 | " FROM vfile LEFT JOIN blob USING (rid)" |
| 160 | " WHERE is_selected(id)%s", |
| 161 | flags & C_MTIME ? "datetime(checkin_mtime(:vid, rid), " |
| 162 | "'unixepoch', toLocal())" : "''" /*safe-for-%s*/, |
| 163 | flags & C_SIZE ? "coalesce(blob.size, 0)" : "0" /*safe-for-%s*/, |
| @@ -174,11 +175,11 @@ | |
| 174 | if( flags & C_EXTRA ){ |
| 175 | if( blob_size(&sql) ){ |
| 176 | blob_append_sql(&sql, " UNION ALL"); |
| 177 | } |
| 178 | blob_append_sql(&sql, |
| 179 | " SELECT pathname, %s, %s, 0, 0, 0, 0, 0" |
| 180 | " FROM sfile WHERE pathname NOT IN (%s)%s", |
| 181 | flags & C_MTIME ? "datetime(mtime, 'unixepoch', toLocal())" : "''", |
| 182 | flags & C_SIZE ? "size" : "0", |
| 183 | fossil_all_reserved_names(0), blob_sql_text(&where)); |
| 184 | } |
| @@ -211,10 +212,11 @@ | |
| 211 | int size = db_column_int(&q, 2); |
| 212 | int isDeleted = db_column_int(&q, 3); |
| 213 | int isChnged = db_column_int(&q, 4); |
| 214 | int isNew = isManaged && !db_column_int(&q, 5); |
| 215 | int isRenamed = db_column_int(&q, 6); |
| 216 | char *zFullName = mprintf("%s%s", g.zLocalRoot, zPathname); |
| 217 | int isMissing = !file_isfile_or_link(zFullName); |
| 218 | |
| 219 | /* Determine the file change classification, if any. */ |
| 220 | if( isDeleted ){ |
| @@ -265,10 +267,11 @@ | |
| 265 | }else if( (flags & (C_EDITED | C_CHANGED)) && isChnged |
| 266 | && (isChnged<2 || isChnged>9) ){ |
| 267 | zClass = "EDITED"; |
| 268 | }else if( (flags & C_RENAMED) && isRenamed ){ |
| 269 | zClass = "RENAMED"; |
| 270 | }else if( (flags & C_UNCHANGED) && isManaged && !isNew |
| 271 | && !isChnged && !isRenamed ){ |
| 272 | zClass = "UNCHANGED"; |
| 273 | }else if( (flags & C_EXTRA) && !isManaged ){ |
| 274 | zClass = "EXTRA"; |
| @@ -295,11 +298,15 @@ | |
| 295 | file_relative_name(zFullName, &rewrittenPathname, 0); |
| 296 | zDisplayName = blob_str(&rewrittenPathname); |
| 297 | if( zDisplayName[0]=='.' && zDisplayName[1]=='/' ){ |
| 298 | zDisplayName += 2; /* no unnecessary ./ prefix */ |
| 299 | } |
| 300 | blob_append(report, zDisplayName, -1); |
| 301 | }else{ |
| 302 | /* If not C_RELPATH, display paths relative to project root. */ |
| 303 | blob_append(report, zPathname, -1); |
| 304 | } |
| 305 | blob_append(report, "\n", 1); |
| @@ -2081,11 +2088,11 @@ | |
| 2081 | char **pB = (char**)b; |
| 2082 | return fossil_strcmp(pA[0], pB[0]); |
| 2083 | } |
| 2084 | |
| 2085 | /* |
| 2086 | ** COMMAND: ci* |
| 2087 | ** COMMAND: commit |
| 2088 | ** |
| 2089 | ** Usage: %fossil commit ?OPTIONS? ?FILE...? |
| 2090 | ** or: %fossil ci ?OPTIONS? ?FILE...? |
| 2091 | ** |
| 2092 |
| --- src/checkin.c | |
| +++ src/checkin.c | |
| @@ -153,11 +153,12 @@ | |
| 153 | blob_zero(&sql); |
| 154 | if( flags & C_ALL ){ |
| 155 | /* Start with a list of all managed files. */ |
| 156 | blob_append_sql(&sql, |
| 157 | "SELECT pathname, %s as mtime, %s as size, deleted, chnged, rid," |
| 158 | " coalesce(origname!=pathname,0) AS renamed, 1 AS managed," |
| 159 | " origname" |
| 160 | " FROM vfile LEFT JOIN blob USING (rid)" |
| 161 | " WHERE is_selected(id)%s", |
| 162 | flags & C_MTIME ? "datetime(checkin_mtime(:vid, rid), " |
| 163 | "'unixepoch', toLocal())" : "''" /*safe-for-%s*/, |
| 164 | flags & C_SIZE ? "coalesce(blob.size, 0)" : "0" /*safe-for-%s*/, |
| @@ -174,11 +175,11 @@ | |
| 175 | if( flags & C_EXTRA ){ |
| 176 | if( blob_size(&sql) ){ |
| 177 | blob_append_sql(&sql, " UNION ALL"); |
| 178 | } |
| 179 | blob_append_sql(&sql, |
| 180 | " SELECT pathname, %s, %s, 0, 0, 0, 0, 0, NULL" |
| 181 | " FROM sfile WHERE pathname NOT IN (%s)%s", |
| 182 | flags & C_MTIME ? "datetime(mtime, 'unixepoch', toLocal())" : "''", |
| 183 | flags & C_SIZE ? "size" : "0", |
| 184 | fossil_all_reserved_names(0), blob_sql_text(&where)); |
| 185 | } |
| @@ -211,10 +212,11 @@ | |
| 212 | int size = db_column_int(&q, 2); |
| 213 | int isDeleted = db_column_int(&q, 3); |
| 214 | int isChnged = db_column_int(&q, 4); |
| 215 | int isNew = isManaged && !db_column_int(&q, 5); |
| 216 | int isRenamed = db_column_int(&q, 6); |
| 217 | const char *zOrigName = 0; |
| 218 | char *zFullName = mprintf("%s%s", g.zLocalRoot, zPathname); |
| 219 | int isMissing = !file_isfile_or_link(zFullName); |
| 220 | |
| 221 | /* Determine the file change classification, if any. */ |
| 222 | if( isDeleted ){ |
| @@ -265,10 +267,11 @@ | |
| 267 | }else if( (flags & (C_EDITED | C_CHANGED)) && isChnged |
| 268 | && (isChnged<2 || isChnged>9) ){ |
| 269 | zClass = "EDITED"; |
| 270 | }else if( (flags & C_RENAMED) && isRenamed ){ |
| 271 | zClass = "RENAMED"; |
| 272 | zOrigName = db_column_text(&q,8); |
| 273 | }else if( (flags & C_UNCHANGED) && isManaged && !isNew |
| 274 | && !isChnged && !isRenamed ){ |
| 275 | zClass = "UNCHANGED"; |
| 276 | }else if( (flags & C_EXTRA) && !isManaged ){ |
| 277 | zClass = "EXTRA"; |
| @@ -295,11 +298,15 @@ | |
| 298 | file_relative_name(zFullName, &rewrittenPathname, 0); |
| 299 | zDisplayName = blob_str(&rewrittenPathname); |
| 300 | if( zDisplayName[0]=='.' && zDisplayName[1]=='/' ){ |
| 301 | zDisplayName += 2; /* no unnecessary ./ prefix */ |
| 302 | } |
| 303 | if( (flags & (C_FILTER ^ C_RENAMED)) && zOrigName ){ |
| 304 | blob_appendf(report, "%s -> %s", zOrigName, zDisplayName); |
| 305 | }else{ |
| 306 | blob_append(report, zDisplayName, -1); |
| 307 | } |
| 308 | }else{ |
| 309 | /* If not C_RELPATH, display paths relative to project root. */ |
| 310 | blob_append(report, zPathname, -1); |
| 311 | } |
| 312 | blob_append(report, "\n", 1); |
| @@ -2081,11 +2088,11 @@ | |
| 2088 | char **pB = (char**)b; |
| 2089 | return fossil_strcmp(pA[0], pB[0]); |
| 2090 | } |
| 2091 | |
| 2092 | /* |
| 2093 | ** COMMAND: ci# |
| 2094 | ** COMMAND: commit |
| 2095 | ** |
| 2096 | ** Usage: %fossil commit ?OPTIONS? ?FILE...? |
| 2097 | ** or: %fossil ci ?OPTIONS? ?FILE...? |
| 2098 | ** |
| 2099 |
+2
-2
| --- src/checkout.c | ||
| +++ src/checkout.c | ||
| @@ -257,11 +257,11 @@ | ||
| 257 | 257 | } |
| 258 | 258 | |
| 259 | 259 | |
| 260 | 260 | /* |
| 261 | 261 | ** COMMAND: checkout* |
| 262 | -** COMMAND: co* | |
| 262 | +** COMMAND: co# | |
| 263 | 263 | ** |
| 264 | 264 | ** Usage: %fossil checkout ?VERSION | --latest? ?OPTIONS? |
| 265 | 265 | ** or: %fossil co ?VERSION | --latest? ?OPTIONS? |
| 266 | 266 | ** |
| 267 | 267 | ** NOTE: Most people use "fossil update" instead of "fossil checkout" for |
| @@ -278,11 +278,11 @@ | ||
| 278 | 278 | ** The --latest flag can be used in place of VERSION to checkout the |
| 279 | 279 | ** latest version in the repository. |
| 280 | 280 | ** |
| 281 | 281 | ** Options: |
| 282 | 282 | ** --force Ignore edited files in the current checkout |
| 283 | -** --keep Only update the manifest and manifest.uuid files | |
| 283 | +** --keep Only update the manifest file(s) | |
| 284 | 284 | ** --force-missing Force checkout even if content is missing |
| 285 | 285 | ** --setmtime Set timestamps of all files to match their SCM-side |
| 286 | 286 | ** times (the timestamp of the last checkin which modified |
| 287 | 287 | ** them) |
| 288 | 288 | ** |
| 289 | 289 |
| --- src/checkout.c | |
| +++ src/checkout.c | |
| @@ -257,11 +257,11 @@ | |
| 257 | } |
| 258 | |
| 259 | |
| 260 | /* |
| 261 | ** COMMAND: checkout* |
| 262 | ** COMMAND: co* |
| 263 | ** |
| 264 | ** Usage: %fossil checkout ?VERSION | --latest? ?OPTIONS? |
| 265 | ** or: %fossil co ?VERSION | --latest? ?OPTIONS? |
| 266 | ** |
| 267 | ** NOTE: Most people use "fossil update" instead of "fossil checkout" for |
| @@ -278,11 +278,11 @@ | |
| 278 | ** The --latest flag can be used in place of VERSION to checkout the |
| 279 | ** latest version in the repository. |
| 280 | ** |
| 281 | ** Options: |
| 282 | ** --force Ignore edited files in the current checkout |
| 283 | ** --keep Only update the manifest and manifest.uuid files |
| 284 | ** --force-missing Force checkout even if content is missing |
| 285 | ** --setmtime Set timestamps of all files to match their SCM-side |
| 286 | ** times (the timestamp of the last checkin which modified |
| 287 | ** them) |
| 288 | ** |
| 289 |
| --- src/checkout.c | |
| +++ src/checkout.c | |
| @@ -257,11 +257,11 @@ | |
| 257 | } |
| 258 | |
| 259 | |
| 260 | /* |
| 261 | ** COMMAND: checkout* |
| 262 | ** COMMAND: co# |
| 263 | ** |
| 264 | ** Usage: %fossil checkout ?VERSION | --latest? ?OPTIONS? |
| 265 | ** or: %fossil co ?VERSION | --latest? ?OPTIONS? |
| 266 | ** |
| 267 | ** NOTE: Most people use "fossil update" instead of "fossil checkout" for |
| @@ -278,11 +278,11 @@ | |
| 278 | ** The --latest flag can be used in place of VERSION to checkout the |
| 279 | ** latest version in the repository. |
| 280 | ** |
| 281 | ** Options: |
| 282 | ** --force Ignore edited files in the current checkout |
| 283 | ** --keep Only update the manifest file(s) |
| 284 | ** --force-missing Force checkout even if content is missing |
| 285 | ** --setmtime Set timestamps of all files to match their SCM-side |
| 286 | ** times (the timestamp of the last checkin which modified |
| 287 | ** them) |
| 288 | ** |
| 289 |
+2
| --- src/configure.c | ||
| +++ src/configure.c | ||
| @@ -844,11 +844,13 @@ | ||
| 844 | 844 | url_enable_proxy("via proxy: "); |
| 845 | 845 | if( overwriteFlag ) mask |= CONFIGSET_OVERWRITE; |
| 846 | 846 | if( strncmp(zMethod, "push", n)==0 ){ |
| 847 | 847 | client_sync(0,0,(unsigned)mask,0); |
| 848 | 848 | }else if( strncmp(zMethod, "pull", n)==0 ){ |
| 849 | + if( overwriteFlag ) db_unprotect(PROTECT_USER); | |
| 849 | 850 | client_sync(0,(unsigned)mask,0,0); |
| 851 | + if( overwriteFlag ) db_protect_pop(); | |
| 850 | 852 | }else{ |
| 851 | 853 | client_sync(0,(unsigned)mask,(unsigned)mask,0); |
| 852 | 854 | } |
| 853 | 855 | }else |
| 854 | 856 | if( strncmp(zMethod, "reset", n)==0 ){ |
| 855 | 857 |
| --- src/configure.c | |
| +++ src/configure.c | |
| @@ -844,11 +844,13 @@ | |
| 844 | url_enable_proxy("via proxy: "); |
| 845 | if( overwriteFlag ) mask |= CONFIGSET_OVERWRITE; |
| 846 | if( strncmp(zMethod, "push", n)==0 ){ |
| 847 | client_sync(0,0,(unsigned)mask,0); |
| 848 | }else if( strncmp(zMethod, "pull", n)==0 ){ |
| 849 | client_sync(0,(unsigned)mask,0,0); |
| 850 | }else{ |
| 851 | client_sync(0,(unsigned)mask,(unsigned)mask,0); |
| 852 | } |
| 853 | }else |
| 854 | if( strncmp(zMethod, "reset", n)==0 ){ |
| 855 |
| --- src/configure.c | |
| +++ src/configure.c | |
| @@ -844,11 +844,13 @@ | |
| 844 | url_enable_proxy("via proxy: "); |
| 845 | if( overwriteFlag ) mask |= CONFIGSET_OVERWRITE; |
| 846 | if( strncmp(zMethod, "push", n)==0 ){ |
| 847 | client_sync(0,0,(unsigned)mask,0); |
| 848 | }else if( strncmp(zMethod, "pull", n)==0 ){ |
| 849 | if( overwriteFlag ) db_unprotect(PROTECT_USER); |
| 850 | client_sync(0,(unsigned)mask,0,0); |
| 851 | if( overwriteFlag ) db_protect_pop(); |
| 852 | }else{ |
| 853 | client_sync(0,(unsigned)mask,(unsigned)mask,0); |
| 854 | } |
| 855 | }else |
| 856 | if( strncmp(zMethod, "reset", n)==0 ){ |
| 857 |
M
src/db.c
+19
-11
| --- src/db.c | ||
| +++ src/db.c | ||
| @@ -125,11 +125,11 @@ | ||
| 125 | 125 | int nPrepare; /* Number of calls to sqlite3_prepare_v2() */ |
| 126 | 126 | int nDeleteOnFail; /* Number of entries in azDeleteOnFail[] */ |
| 127 | 127 | struct sCommitHook { |
| 128 | 128 | int (*xHook)(void); /* Functions to call at db_end_transaction() */ |
| 129 | 129 | int sequence; /* Call functions in sequence order */ |
| 130 | - } aHook[5]; | |
| 130 | + } aHook[6]; | |
| 131 | 131 | char *azDeleteOnFail[3]; /* Files to delete on a failure */ |
| 132 | 132 | char *azBeforeCommit[5]; /* Commands to run prior to COMMIT */ |
| 133 | 133 | int nBeforeCommit; /* Number of entries in azBeforeCommit */ |
| 134 | 134 | int nPriorChanges; /* sqlite3_total_changes() at transaction start */ |
| 135 | 135 | const char *zStartFile; /* File in which transaction was started */ |
| @@ -1464,10 +1464,14 @@ | ||
| 1464 | 1464 | db_protected_setting_func, 0, 0); |
| 1465 | 1465 | sqlite3_create_function(db, "win_reserved", 1, SQLITE_UTF8, 0, |
| 1466 | 1466 | db_win_reserved_func,0,0); |
| 1467 | 1467 | sqlite3_create_function(db, "url_nouser", 1, SQLITE_UTF8, 0, |
| 1468 | 1468 | url_nouser_func,0,0); |
| 1469 | + sqlite3_create_function(db, "chat_msg_from_event", 4, | |
| 1470 | + SQLITE_UTF8 | SQLITE_INNOCUOUS, 0, | |
| 1471 | + chat_msg_from_event, 0, 0); | |
| 1472 | + | |
| 1469 | 1473 | } |
| 1470 | 1474 | |
| 1471 | 1475 | #if USE_SEE |
| 1472 | 1476 | /* |
| 1473 | 1477 | ** This is a pointer to the saved database encryption key string. |
| @@ -1614,10 +1618,11 @@ | ||
| 1614 | 1618 | void db_read_saved_encryption_key_from_process_via_th1( |
| 1615 | 1619 | const char *zConfig /* The TH1 script to evaluate. */ |
| 1616 | 1620 | ){ |
| 1617 | 1621 | int rc; |
| 1618 | 1622 | char *zResult; |
| 1623 | + char *zPwd = file_getcwd(0, 0); | |
| 1619 | 1624 | Th_FossilInit(TH_INIT_DEFAULT | TH_INIT_NEED_CONFIG | TH_INIT_NO_REPO); |
| 1620 | 1625 | rc = Th_Eval(g.interp, 0, zConfig, -1); |
| 1621 | 1626 | zResult = (char*)Th_GetResult(g.interp, 0); |
| 1622 | 1627 | if( rc!=TH_OK ){ |
| 1623 | 1628 | fossil_fatal("script for pid key failed: %s", zResult); |
| @@ -1627,10 +1632,12 @@ | ||
| 1627 | 1632 | LPVOID pAddress = NULL; |
| 1628 | 1633 | SIZE_T nSize = 0; |
| 1629 | 1634 | parse_pid_key_value(zResult, &processId, &pAddress, &nSize); |
| 1630 | 1635 | db_read_saved_encryption_key_from_process(processId, pAddress, nSize); |
| 1631 | 1636 | } |
| 1637 | + file_chdir(zPwd, 0); | |
| 1638 | + fossil_free(zPwd); | |
| 1632 | 1639 | } |
| 1633 | 1640 | #endif /* defined(_WIN32) */ |
| 1634 | 1641 | #endif /* USE_SEE */ |
| 1635 | 1642 | |
| 1636 | 1643 | /* |
| @@ -2803,11 +2810,11 @@ | ||
| 2803 | 2810 | manifest_crosslink(rid, &manifest, MC_NONE); |
| 2804 | 2811 | } |
| 2805 | 2812 | } |
| 2806 | 2813 | |
| 2807 | 2814 | /* |
| 2808 | -** COMMAND: new* | |
| 2815 | +** COMMAND: new# | |
| 2809 | 2816 | ** COMMAND: init |
| 2810 | 2817 | ** |
| 2811 | 2818 | ** Usage: %fossil new ?OPTIONS? FILENAME |
| 2812 | 2819 | ** or: %fossil init ?OPTIONS? FILENAME |
| 2813 | 2820 | ** |
| @@ -3047,11 +3054,11 @@ | ||
| 3047 | 3054 | sqlite3_result_int(context, file_is_win_reserved(zName)!=0); |
| 3048 | 3055 | } |
| 3049 | 3056 | } |
| 3050 | 3057 | |
| 3051 | 3058 | /* |
| 3052 | -** Convert the input string into a artifact hash. Make a notation in the | |
| 3059 | +** Convert the input string into an artifact hash. Make a notation in the | |
| 3053 | 3060 | ** CONCEALED table so that the hash can be undo using the db_reveal() |
| 3054 | 3061 | ** function at some later time. |
| 3055 | 3062 | ** |
| 3056 | 3063 | ** The value returned is stored in static space and will be overwritten |
| 3057 | 3064 | ** on subsequent calls. |
| @@ -3679,11 +3686,11 @@ | ||
| 3679 | 3686 | ** with the local repository. If you commit this checkout, |
| 3680 | 3687 | ** it will become a new "initial" commit in the repository. |
| 3681 | 3688 | ** -f|--force Continue with the open even if the working directory is |
| 3682 | 3689 | ** not empty. |
| 3683 | 3690 | ** --force-missing Force opening a repository with missing content |
| 3684 | -** -k|--keep Only modify the manifest and manifest.uuid files | |
| 3691 | +** -k|--keep Only modify the manifest file(s) | |
| 3685 | 3692 | ** --nested Allow opening a repository inside an opened checkout |
| 3686 | 3693 | ** --nosync Do not auto-sync the repository prior to opening even |
| 3687 | 3694 | ** if the autosync setting is on. |
| 3688 | 3695 | ** --repodir DIR If REPOSITORY is a URI that will be cloned, store |
| 3689 | 3696 | ** the clone in DIR rather than in "." |
| @@ -4252,20 +4259,21 @@ | ||
| 4252 | 4259 | ** If true, then the Fossil web server will redirect unencrypted |
| 4253 | 4260 | ** login screen requests to HTTPS. |
| 4254 | 4261 | */ |
| 4255 | 4262 | /* |
| 4256 | 4263 | ** SETTING: ignore-glob width=40 versionable block-text |
| 4257 | -** The value is a comma or newline-separated list of GLOB | |
| 4258 | -** patterns specifying files that the "add", "addremove", | |
| 4259 | -** "clean", and "extras" commands will ignore. | |
| 4264 | +** The value is a list of GLOB patterns, separated by spaces, | |
| 4265 | +** commas, or newlines, specifying files that the "add", | |
| 4266 | +** "addremove", "clean", and "extras" commands will ignore. | |
| 4260 | 4267 | ** |
| 4261 | -** Example: *.log customCode.c notes.txt | |
| 4268 | +** Example: *.log, customCode.c, notes.txt | |
| 4262 | 4269 | */ |
| 4263 | 4270 | /* |
| 4264 | 4271 | ** SETTING: keep-glob width=40 versionable block-text |
| 4265 | -** The value is a comma or newline-separated list of GLOB | |
| 4266 | -** patterns specifying files that the "clean" command will keep. | |
| 4272 | +** The value is list of GLOB patterns, separated by spaces, | |
| 4273 | +** commas, or newlines, specifying files that the "clean" | |
| 4274 | +** command will keep. | |
| 4267 | 4275 | */ |
| 4268 | 4276 | /* |
| 4269 | 4277 | ** SETTING: localauth boolean default=off |
| 4270 | 4278 | ** If enabled, require that HTTP connections from the loopback |
| 4271 | 4279 | ** address (127.0.0.1) be authenticated by password. If false, |
| @@ -4769,11 +4777,11 @@ | ||
| 4769 | 4777 | ** |
| 4770 | 4778 | ** The purpose of this command is for testing the WITHOUT ROWID capabilities |
| 4771 | 4779 | ** of SQLite. There is no big advantage to using WITHOUT ROWID in Fossil. |
| 4772 | 4780 | ** |
| 4773 | 4781 | ** Options: |
| 4774 | -** --dryrun | -n No changes. Just print what would happen. | |
| 4782 | +** --dry-run | -n No changes. Just print what would happen. | |
| 4775 | 4783 | */ |
| 4776 | 4784 | void test_without_rowid(void){ |
| 4777 | 4785 | int i, j; |
| 4778 | 4786 | Stmt q; |
| 4779 | 4787 | Blob allSql; |
| 4780 | 4788 |
| --- src/db.c | |
| +++ src/db.c | |
| @@ -125,11 +125,11 @@ | |
| 125 | int nPrepare; /* Number of calls to sqlite3_prepare_v2() */ |
| 126 | int nDeleteOnFail; /* Number of entries in azDeleteOnFail[] */ |
| 127 | struct sCommitHook { |
| 128 | int (*xHook)(void); /* Functions to call at db_end_transaction() */ |
| 129 | int sequence; /* Call functions in sequence order */ |
| 130 | } aHook[5]; |
| 131 | char *azDeleteOnFail[3]; /* Files to delete on a failure */ |
| 132 | char *azBeforeCommit[5]; /* Commands to run prior to COMMIT */ |
| 133 | int nBeforeCommit; /* Number of entries in azBeforeCommit */ |
| 134 | int nPriorChanges; /* sqlite3_total_changes() at transaction start */ |
| 135 | const char *zStartFile; /* File in which transaction was started */ |
| @@ -1464,10 +1464,14 @@ | |
| 1464 | db_protected_setting_func, 0, 0); |
| 1465 | sqlite3_create_function(db, "win_reserved", 1, SQLITE_UTF8, 0, |
| 1466 | db_win_reserved_func,0,0); |
| 1467 | sqlite3_create_function(db, "url_nouser", 1, SQLITE_UTF8, 0, |
| 1468 | url_nouser_func,0,0); |
| 1469 | } |
| 1470 | |
| 1471 | #if USE_SEE |
| 1472 | /* |
| 1473 | ** This is a pointer to the saved database encryption key string. |
| @@ -1614,10 +1618,11 @@ | |
| 1614 | void db_read_saved_encryption_key_from_process_via_th1( |
| 1615 | const char *zConfig /* The TH1 script to evaluate. */ |
| 1616 | ){ |
| 1617 | int rc; |
| 1618 | char *zResult; |
| 1619 | Th_FossilInit(TH_INIT_DEFAULT | TH_INIT_NEED_CONFIG | TH_INIT_NO_REPO); |
| 1620 | rc = Th_Eval(g.interp, 0, zConfig, -1); |
| 1621 | zResult = (char*)Th_GetResult(g.interp, 0); |
| 1622 | if( rc!=TH_OK ){ |
| 1623 | fossil_fatal("script for pid key failed: %s", zResult); |
| @@ -1627,10 +1632,12 @@ | |
| 1627 | LPVOID pAddress = NULL; |
| 1628 | SIZE_T nSize = 0; |
| 1629 | parse_pid_key_value(zResult, &processId, &pAddress, &nSize); |
| 1630 | db_read_saved_encryption_key_from_process(processId, pAddress, nSize); |
| 1631 | } |
| 1632 | } |
| 1633 | #endif /* defined(_WIN32) */ |
| 1634 | #endif /* USE_SEE */ |
| 1635 | |
| 1636 | /* |
| @@ -2803,11 +2810,11 @@ | |
| 2803 | manifest_crosslink(rid, &manifest, MC_NONE); |
| 2804 | } |
| 2805 | } |
| 2806 | |
| 2807 | /* |
| 2808 | ** COMMAND: new* |
| 2809 | ** COMMAND: init |
| 2810 | ** |
| 2811 | ** Usage: %fossil new ?OPTIONS? FILENAME |
| 2812 | ** or: %fossil init ?OPTIONS? FILENAME |
| 2813 | ** |
| @@ -3047,11 +3054,11 @@ | |
| 3047 | sqlite3_result_int(context, file_is_win_reserved(zName)!=0); |
| 3048 | } |
| 3049 | } |
| 3050 | |
| 3051 | /* |
| 3052 | ** Convert the input string into a artifact hash. Make a notation in the |
| 3053 | ** CONCEALED table so that the hash can be undo using the db_reveal() |
| 3054 | ** function at some later time. |
| 3055 | ** |
| 3056 | ** The value returned is stored in static space and will be overwritten |
| 3057 | ** on subsequent calls. |
| @@ -3679,11 +3686,11 @@ | |
| 3679 | ** with the local repository. If you commit this checkout, |
| 3680 | ** it will become a new "initial" commit in the repository. |
| 3681 | ** -f|--force Continue with the open even if the working directory is |
| 3682 | ** not empty. |
| 3683 | ** --force-missing Force opening a repository with missing content |
| 3684 | ** -k|--keep Only modify the manifest and manifest.uuid files |
| 3685 | ** --nested Allow opening a repository inside an opened checkout |
| 3686 | ** --nosync Do not auto-sync the repository prior to opening even |
| 3687 | ** if the autosync setting is on. |
| 3688 | ** --repodir DIR If REPOSITORY is a URI that will be cloned, store |
| 3689 | ** the clone in DIR rather than in "." |
| @@ -4252,20 +4259,21 @@ | |
| 4252 | ** If true, then the Fossil web server will redirect unencrypted |
| 4253 | ** login screen requests to HTTPS. |
| 4254 | */ |
| 4255 | /* |
| 4256 | ** SETTING: ignore-glob width=40 versionable block-text |
| 4257 | ** The value is a comma or newline-separated list of GLOB |
| 4258 | ** patterns specifying files that the "add", "addremove", |
| 4259 | ** "clean", and "extras" commands will ignore. |
| 4260 | ** |
| 4261 | ** Example: *.log customCode.c notes.txt |
| 4262 | */ |
| 4263 | /* |
| 4264 | ** SETTING: keep-glob width=40 versionable block-text |
| 4265 | ** The value is a comma or newline-separated list of GLOB |
| 4266 | ** patterns specifying files that the "clean" command will keep. |
| 4267 | */ |
| 4268 | /* |
| 4269 | ** SETTING: localauth boolean default=off |
| 4270 | ** If enabled, require that HTTP connections from the loopback |
| 4271 | ** address (127.0.0.1) be authenticated by password. If false, |
| @@ -4769,11 +4777,11 @@ | |
| 4769 | ** |
| 4770 | ** The purpose of this command is for testing the WITHOUT ROWID capabilities |
| 4771 | ** of SQLite. There is no big advantage to using WITHOUT ROWID in Fossil. |
| 4772 | ** |
| 4773 | ** Options: |
| 4774 | ** --dryrun | -n No changes. Just print what would happen. |
| 4775 | */ |
| 4776 | void test_without_rowid(void){ |
| 4777 | int i, j; |
| 4778 | Stmt q; |
| 4779 | Blob allSql; |
| 4780 |
| --- src/db.c | |
| +++ src/db.c | |
| @@ -125,11 +125,11 @@ | |
| 125 | int nPrepare; /* Number of calls to sqlite3_prepare_v2() */ |
| 126 | int nDeleteOnFail; /* Number of entries in azDeleteOnFail[] */ |
| 127 | struct sCommitHook { |
| 128 | int (*xHook)(void); /* Functions to call at db_end_transaction() */ |
| 129 | int sequence; /* Call functions in sequence order */ |
| 130 | } aHook[6]; |
| 131 | char *azDeleteOnFail[3]; /* Files to delete on a failure */ |
| 132 | char *azBeforeCommit[5]; /* Commands to run prior to COMMIT */ |
| 133 | int nBeforeCommit; /* Number of entries in azBeforeCommit */ |
| 134 | int nPriorChanges; /* sqlite3_total_changes() at transaction start */ |
| 135 | const char *zStartFile; /* File in which transaction was started */ |
| @@ -1464,10 +1464,14 @@ | |
| 1464 | db_protected_setting_func, 0, 0); |
| 1465 | sqlite3_create_function(db, "win_reserved", 1, SQLITE_UTF8, 0, |
| 1466 | db_win_reserved_func,0,0); |
| 1467 | sqlite3_create_function(db, "url_nouser", 1, SQLITE_UTF8, 0, |
| 1468 | url_nouser_func,0,0); |
| 1469 | sqlite3_create_function(db, "chat_msg_from_event", 4, |
| 1470 | SQLITE_UTF8 | SQLITE_INNOCUOUS, 0, |
| 1471 | chat_msg_from_event, 0, 0); |
| 1472 | |
| 1473 | } |
| 1474 | |
| 1475 | #if USE_SEE |
| 1476 | /* |
| 1477 | ** This is a pointer to the saved database encryption key string. |
| @@ -1614,10 +1618,11 @@ | |
| 1618 | void db_read_saved_encryption_key_from_process_via_th1( |
| 1619 | const char *zConfig /* The TH1 script to evaluate. */ |
| 1620 | ){ |
| 1621 | int rc; |
| 1622 | char *zResult; |
| 1623 | char *zPwd = file_getcwd(0, 0); |
| 1624 | Th_FossilInit(TH_INIT_DEFAULT | TH_INIT_NEED_CONFIG | TH_INIT_NO_REPO); |
| 1625 | rc = Th_Eval(g.interp, 0, zConfig, -1); |
| 1626 | zResult = (char*)Th_GetResult(g.interp, 0); |
| 1627 | if( rc!=TH_OK ){ |
| 1628 | fossil_fatal("script for pid key failed: %s", zResult); |
| @@ -1627,10 +1632,12 @@ | |
| 1632 | LPVOID pAddress = NULL; |
| 1633 | SIZE_T nSize = 0; |
| 1634 | parse_pid_key_value(zResult, &processId, &pAddress, &nSize); |
| 1635 | db_read_saved_encryption_key_from_process(processId, pAddress, nSize); |
| 1636 | } |
| 1637 | file_chdir(zPwd, 0); |
| 1638 | fossil_free(zPwd); |
| 1639 | } |
| 1640 | #endif /* defined(_WIN32) */ |
| 1641 | #endif /* USE_SEE */ |
| 1642 | |
| 1643 | /* |
| @@ -2803,11 +2810,11 @@ | |
| 2810 | manifest_crosslink(rid, &manifest, MC_NONE); |
| 2811 | } |
| 2812 | } |
| 2813 | |
| 2814 | /* |
| 2815 | ** COMMAND: new# |
| 2816 | ** COMMAND: init |
| 2817 | ** |
| 2818 | ** Usage: %fossil new ?OPTIONS? FILENAME |
| 2819 | ** or: %fossil init ?OPTIONS? FILENAME |
| 2820 | ** |
| @@ -3047,11 +3054,11 @@ | |
| 3054 | sqlite3_result_int(context, file_is_win_reserved(zName)!=0); |
| 3055 | } |
| 3056 | } |
| 3057 | |
| 3058 | /* |
| 3059 | ** Convert the input string into an artifact hash. Make a notation in the |
| 3060 | ** CONCEALED table so that the hash can be undo using the db_reveal() |
| 3061 | ** function at some later time. |
| 3062 | ** |
| 3063 | ** The value returned is stored in static space and will be overwritten |
| 3064 | ** on subsequent calls. |
| @@ -3679,11 +3686,11 @@ | |
| 3686 | ** with the local repository. If you commit this checkout, |
| 3687 | ** it will become a new "initial" commit in the repository. |
| 3688 | ** -f|--force Continue with the open even if the working directory is |
| 3689 | ** not empty. |
| 3690 | ** --force-missing Force opening a repository with missing content |
| 3691 | ** -k|--keep Only modify the manifest file(s) |
| 3692 | ** --nested Allow opening a repository inside an opened checkout |
| 3693 | ** --nosync Do not auto-sync the repository prior to opening even |
| 3694 | ** if the autosync setting is on. |
| 3695 | ** --repodir DIR If REPOSITORY is a URI that will be cloned, store |
| 3696 | ** the clone in DIR rather than in "." |
| @@ -4252,20 +4259,21 @@ | |
| 4259 | ** If true, then the Fossil web server will redirect unencrypted |
| 4260 | ** login screen requests to HTTPS. |
| 4261 | */ |
| 4262 | /* |
| 4263 | ** SETTING: ignore-glob width=40 versionable block-text |
| 4264 | ** The value is a list of GLOB patterns, separated by spaces, |
| 4265 | ** commas, or newlines, specifying files that the "add", |
| 4266 | ** "addremove", "clean", and "extras" commands will ignore. |
| 4267 | ** |
| 4268 | ** Example: *.log, customCode.c, notes.txt |
| 4269 | */ |
| 4270 | /* |
| 4271 | ** SETTING: keep-glob width=40 versionable block-text |
| 4272 | ** The value is list of GLOB patterns, separated by spaces, |
| 4273 | ** commas, or newlines, specifying files that the "clean" |
| 4274 | ** command will keep. |
| 4275 | */ |
| 4276 | /* |
| 4277 | ** SETTING: localauth boolean default=off |
| 4278 | ** If enabled, require that HTTP connections from the loopback |
| 4279 | ** address (127.0.0.1) be authenticated by password. If false, |
| @@ -4769,11 +4777,11 @@ | |
| 4777 | ** |
| 4778 | ** The purpose of this command is for testing the WITHOUT ROWID capabilities |
| 4779 | ** of SQLite. There is no big advantage to using WITHOUT ROWID in Fossil. |
| 4780 | ** |
| 4781 | ** Options: |
| 4782 | ** --dry-run | -n No changes. Just print what would happen. |
| 4783 | */ |
| 4784 | void test_without_rowid(void){ |
| 4785 | int i, j; |
| 4786 | Stmt q; |
| 4787 | Blob allSql; |
| 4788 |
+9
| --- src/default.css | ||
| +++ src/default.css | ||
| @@ -236,10 +236,13 @@ | ||
| 236 | 236 | } |
| 237 | 237 | .columns li { |
| 238 | 238 | break-inside: avoid; |
| 239 | 239 | page-break-inside: avoid; |
| 240 | 240 | } |
| 241 | +body.help .columns li { | |
| 242 | + white-space: nowrap /* keep command name aliases from wrapping */; | |
| 243 | +} | |
| 241 | 244 | .filetree { |
| 242 | 245 | margin: 1em 0; |
| 243 | 246 | line-height: 1.5; |
| 244 | 247 | } |
| 245 | 248 | .filetree > ul { |
| @@ -1577,10 +1580,16 @@ | ||
| 1577 | 1580 | /* ^^^ Centered non-source-view elements */ |
| 1578 | 1581 | div.pikchr-wrapper.center.source.source-inline > pre.pikchr-src, |
| 1579 | 1582 | div.pikchr-wrapper.center.source.source-inline > div.pikchr-svg |
| 1580 | 1583 | /* ^^^ Centered inline-source-view elements */{ |
| 1581 | 1584 | display:inline-block/*allows parent text-align to do the alignment*/; |
| 1585 | + /* ^^^^ Browser incompatibility: inline-block causes the centered | |
| 1586 | + pikchr to shrink to the point of illegiblity in Chrome. The | |
| 1587 | + closest match on Chrome seems to be using 'unset', which centers | |
| 1588 | + by virtue of stretching it to the width of the window. Similarly, | |
| 1589 | + using {display: grid; place-items: center} centers and sizes well | |
| 1590 | + on FF but Chrome shrinks it in the same way. */ | |
| 1582 | 1591 | } |
| 1583 | 1592 | div.pikchr-wrapper.indent:not(.source), |
| 1584 | 1593 | div.pikchr-wrapper.indent.source.source-inline{ |
| 1585 | 1594 | margin-left: 4em; |
| 1586 | 1595 | } |
| 1587 | 1596 |
| --- src/default.css | |
| +++ src/default.css | |
| @@ -236,10 +236,13 @@ | |
| 236 | } |
| 237 | .columns li { |
| 238 | break-inside: avoid; |
| 239 | page-break-inside: avoid; |
| 240 | } |
| 241 | .filetree { |
| 242 | margin: 1em 0; |
| 243 | line-height: 1.5; |
| 244 | } |
| 245 | .filetree > ul { |
| @@ -1577,10 +1580,16 @@ | |
| 1577 | /* ^^^ Centered non-source-view elements */ |
| 1578 | div.pikchr-wrapper.center.source.source-inline > pre.pikchr-src, |
| 1579 | div.pikchr-wrapper.center.source.source-inline > div.pikchr-svg |
| 1580 | /* ^^^ Centered inline-source-view elements */{ |
| 1581 | display:inline-block/*allows parent text-align to do the alignment*/; |
| 1582 | } |
| 1583 | div.pikchr-wrapper.indent:not(.source), |
| 1584 | div.pikchr-wrapper.indent.source.source-inline{ |
| 1585 | margin-left: 4em; |
| 1586 | } |
| 1587 |
| --- src/default.css | |
| +++ src/default.css | |
| @@ -236,10 +236,13 @@ | |
| 236 | } |
| 237 | .columns li { |
| 238 | break-inside: avoid; |
| 239 | page-break-inside: avoid; |
| 240 | } |
| 241 | body.help .columns li { |
| 242 | white-space: nowrap /* keep command name aliases from wrapping */; |
| 243 | } |
| 244 | .filetree { |
| 245 | margin: 1em 0; |
| 246 | line-height: 1.5; |
| 247 | } |
| 248 | .filetree > ul { |
| @@ -1577,10 +1580,16 @@ | |
| 1580 | /* ^^^ Centered non-source-view elements */ |
| 1581 | div.pikchr-wrapper.center.source.source-inline > pre.pikchr-src, |
| 1582 | div.pikchr-wrapper.center.source.source-inline > div.pikchr-svg |
| 1583 | /* ^^^ Centered inline-source-view elements */{ |
| 1584 | display:inline-block/*allows parent text-align to do the alignment*/; |
| 1585 | /* ^^^^ Browser incompatibility: inline-block causes the centered |
| 1586 | pikchr to shrink to the point of illegiblity in Chrome. The |
| 1587 | closest match on Chrome seems to be using 'unset', which centers |
| 1588 | by virtue of stretching it to the width of the window. Similarly, |
| 1589 | using {display: grid; place-items: center} centers and sizes well |
| 1590 | on FF but Chrome shrinks it in the same way. */ |
| 1591 | } |
| 1592 | div.pikchr-wrapper.indent:not(.source), |
| 1593 | div.pikchr-wrapper.indent.source.source-inline{ |
| 1594 | margin-left: 4em; |
| 1595 | } |
| 1596 |
+2
| --- src/diff.c | ||
| +++ src/diff.c | ||
| @@ -47,10 +47,11 @@ | ||
| 47 | 47 | #define DIFF_JSON 0x00010000 /* JSON output */ |
| 48 | 48 | #define DIFF_DEBUG 0x00020000 /* Debugging diff output */ |
| 49 | 49 | #define DIFF_RAW 0x00040000 /* Raw triples - for debugging */ |
| 50 | 50 | #define DIFF_TCL 0x00080000 /* For the --tk option */ |
| 51 | 51 | #define DIFF_INCBINARY 0x00100000 /* The --diff-binary option */ |
| 52 | +#define DIFF_SHOW_VERS 0x00200000 /* Show compared versions */ | |
| 52 | 53 | |
| 53 | 54 | /* |
| 54 | 55 | ** These error messages are shared in multiple locations. They are defined |
| 55 | 56 | ** here for consistency. |
| 56 | 57 | */ |
| @@ -3161,10 +3162,11 @@ | ||
| 3161 | 3162 | pCfg->wColumn = f; |
| 3162 | 3163 | } |
| 3163 | 3164 | if( find_option("linenum","n",0)!=0 ) diffFlags |= DIFF_LINENO; |
| 3164 | 3165 | if( find_option("noopt",0,0)!=0 ) diffFlags |= DIFF_NOOPT; |
| 3165 | 3166 | if( find_option("numstat",0,0)!=0 ) diffFlags |= DIFF_NUMSTAT; |
| 3167 | + if( find_option("versions","h",0)!=0 ) diffFlags |= DIFF_SHOW_VERS; | |
| 3166 | 3168 | if( find_option("invert",0,0)!=0 ) diffFlags |= DIFF_INVERT; |
| 3167 | 3169 | if( find_option("brief",0,0)!=0 ) diffFlags |= DIFF_BRIEF; |
| 3168 | 3170 | if( find_option("internal","i",0)==0 |
| 3169 | 3171 | && (diffFlags & (DIFF_HTML|DIFF_TCL|DIFF_DEBUG|DIFF_JSON))==0 |
| 3170 | 3172 | ){ |
| 3171 | 3173 |
| --- src/diff.c | |
| +++ src/diff.c | |
| @@ -47,10 +47,11 @@ | |
| 47 | #define DIFF_JSON 0x00010000 /* JSON output */ |
| 48 | #define DIFF_DEBUG 0x00020000 /* Debugging diff output */ |
| 49 | #define DIFF_RAW 0x00040000 /* Raw triples - for debugging */ |
| 50 | #define DIFF_TCL 0x00080000 /* For the --tk option */ |
| 51 | #define DIFF_INCBINARY 0x00100000 /* The --diff-binary option */ |
| 52 | |
| 53 | /* |
| 54 | ** These error messages are shared in multiple locations. They are defined |
| 55 | ** here for consistency. |
| 56 | */ |
| @@ -3161,10 +3162,11 @@ | |
| 3161 | pCfg->wColumn = f; |
| 3162 | } |
| 3163 | if( find_option("linenum","n",0)!=0 ) diffFlags |= DIFF_LINENO; |
| 3164 | if( find_option("noopt",0,0)!=0 ) diffFlags |= DIFF_NOOPT; |
| 3165 | if( find_option("numstat",0,0)!=0 ) diffFlags |= DIFF_NUMSTAT; |
| 3166 | if( find_option("invert",0,0)!=0 ) diffFlags |= DIFF_INVERT; |
| 3167 | if( find_option("brief",0,0)!=0 ) diffFlags |= DIFF_BRIEF; |
| 3168 | if( find_option("internal","i",0)==0 |
| 3169 | && (diffFlags & (DIFF_HTML|DIFF_TCL|DIFF_DEBUG|DIFF_JSON))==0 |
| 3170 | ){ |
| 3171 |
| --- src/diff.c | |
| +++ src/diff.c | |
| @@ -47,10 +47,11 @@ | |
| 47 | #define DIFF_JSON 0x00010000 /* JSON output */ |
| 48 | #define DIFF_DEBUG 0x00020000 /* Debugging diff output */ |
| 49 | #define DIFF_RAW 0x00040000 /* Raw triples - for debugging */ |
| 50 | #define DIFF_TCL 0x00080000 /* For the --tk option */ |
| 51 | #define DIFF_INCBINARY 0x00100000 /* The --diff-binary option */ |
| 52 | #define DIFF_SHOW_VERS 0x00200000 /* Show compared versions */ |
| 53 | |
| 54 | /* |
| 55 | ** These error messages are shared in multiple locations. They are defined |
| 56 | ** here for consistency. |
| 57 | */ |
| @@ -3161,10 +3162,11 @@ | |
| 3162 | pCfg->wColumn = f; |
| 3163 | } |
| 3164 | if( find_option("linenum","n",0)!=0 ) diffFlags |= DIFF_LINENO; |
| 3165 | if( find_option("noopt",0,0)!=0 ) diffFlags |= DIFF_NOOPT; |
| 3166 | if( find_option("numstat",0,0)!=0 ) diffFlags |= DIFF_NUMSTAT; |
| 3167 | if( find_option("versions","h",0)!=0 ) diffFlags |= DIFF_SHOW_VERS; |
| 3168 | if( find_option("invert",0,0)!=0 ) diffFlags |= DIFF_INVERT; |
| 3169 | if( find_option("brief",0,0)!=0 ) diffFlags |= DIFF_BRIEF; |
| 3170 | if( find_option("internal","i",0)==0 |
| 3171 | && (diffFlags & (DIFF_HTML|DIFF_TCL|DIFF_DEBUG|DIFF_JSON))==0 |
| 3172 | ){ |
| 3173 |
+39
-1
| --- src/diffcmd.c | ||
| +++ src/diffcmd.c | ||
| @@ -109,10 +109,37 @@ | ||
| 109 | 109 | p->nUsed++; |
| 110 | 110 | return 1; |
| 111 | 111 | } |
| 112 | 112 | return 0; |
| 113 | 113 | } |
| 114 | + | |
| 115 | +/* | |
| 116 | +** Print details about the compared versions - possibly the working directory | |
| 117 | +** or the undo buffer. For check-ins, show hash and commit time. | |
| 118 | +** | |
| 119 | +** This is intended primarily to go into the "header garbage" that is ignored | |
| 120 | +** by patch(1). | |
| 121 | +** | |
| 122 | +** zFrom and zTo are interpreted as symbolic version names, unless they | |
| 123 | +** start with '(', in which case they are printed directly. | |
| 124 | +*/ | |
| 125 | +void diff_print_versions(const char *zFrom, const char *zTo, DiffConfig *pCfg){ | |
| 126 | + if( (pCfg->diffFlags & (DIFF_SIDEBYSIDE|DIFF_BRIEF|DIFF_NUMSTAT| | |
| 127 | + DIFF_HTML|DIFF_WEBPAGE|DIFF_BROWSER|DIFF_JSON|DIFF_TCL))==0 ){ | |
| 128 | + fossil_print("Fossil-Diff-From: %s\n", | |
| 129 | + zFrom[0]=='(' ? zFrom : mprintf("%S %s", | |
| 130 | + rid_to_uuid(symbolic_name_to_rid(zFrom, "ci")), | |
| 131 | + db_text("","SELECT datetime(%f)||' UTC'", | |
| 132 | + symbolic_name_to_mtime(zFrom, 0)))); | |
| 133 | + fossil_print("Fossil-Diff-To: %s\n", | |
| 134 | + zTo[0]=='(' ? zTo : mprintf("%S %s", | |
| 135 | + rid_to_uuid(symbolic_name_to_rid(zTo, "ci")), | |
| 136 | + db_text("","SELECT datetime(%f)||' UTC'", | |
| 137 | + symbolic_name_to_mtime(zTo, 0)))); | |
| 138 | + fossil_print("%.66c\n", '-'); | |
| 139 | + } | |
| 140 | +} | |
| 114 | 141 | |
| 115 | 142 | /* |
| 116 | 143 | ** Print the "Index:" message that patches wants to see at the top of a diff. |
| 117 | 144 | */ |
| 118 | 145 | void diff_print_index(const char *zFile, DiffConfig *pCfg, Blob *pOut){ |
| @@ -125,10 +152,11 @@ | ||
| 125 | 152 | } |
| 126 | 153 | |
| 127 | 154 | /* |
| 128 | 155 | ** Print the +++/--- filename lines or whatever filename information |
| 129 | 156 | ** is appropriate for the output format. |
| 157 | +** | |
| 130 | 158 | */ |
| 131 | 159 | void diff_print_filenames( |
| 132 | 160 | const char *zLeft, /* Name of the left file */ |
| 133 | 161 | const char *zRight, /* Name of the right file */ |
| 134 | 162 | DiffConfig *pCfg, /* Diff configuration */ |
| @@ -659,10 +687,14 @@ | ||
| 659 | 687 | " WHERE vid=%d" |
| 660 | 688 | " AND (deleted OR chnged OR rid==0)" |
| 661 | 689 | " ORDER BY pathname /*scan*/", |
| 662 | 690 | vid |
| 663 | 691 | ); |
| 692 | + } | |
| 693 | + if( (pCfg->diffFlags & DIFF_SHOW_VERS)!=0 ){ | |
| 694 | + diff_print_versions(zFrom ? zFrom : db_lget("checkout-hash", 0), | |
| 695 | + "(workdir)", pCfg); | |
| 664 | 696 | } |
| 665 | 697 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| 666 | 698 | blob_reset(&sql); |
| 667 | 699 | while( db_step(&q)==SQLITE_ROW ){ |
| 668 | 700 | const char *zPathname = db_column_text(&q,0); |
| @@ -744,10 +776,13 @@ | ||
| 744 | 776 | ){ |
| 745 | 777 | Stmt q; |
| 746 | 778 | Blob content; |
| 747 | 779 | db_prepare(&q, "SELECT pathname, content FROM undo"); |
| 748 | 780 | blob_init(&content, 0, 0); |
| 781 | + if( (pCfg->diffFlags & DIFF_SHOW_VERS)!=0 ){ | |
| 782 | + diff_print_versions("(undo)", "(workdir)", pCfg); | |
| 783 | + } | |
| 749 | 784 | while( db_step(&q)==SQLITE_ROW ){ |
| 750 | 785 | char *zFullName; |
| 751 | 786 | const char *zFile = (const char*)db_column_text(&q, 0); |
| 752 | 787 | if( !file_dir_match(pFileDir, zFile) ) continue; |
| 753 | 788 | zFullName = mprintf("%s%s", g.zLocalRoot, zFile); |
| @@ -828,11 +863,13 @@ | ||
| 828 | 863 | manifest_file_rewind(pFrom); |
| 829 | 864 | pFromFile = manifest_file_next(pFrom,0); |
| 830 | 865 | pTo = manifest_get_by_name(zTo, 0); |
| 831 | 866 | manifest_file_rewind(pTo); |
| 832 | 867 | pToFile = manifest_file_next(pTo,0); |
| 833 | - | |
| 868 | + if( (pCfg->diffFlags & DIFF_SHOW_VERS)!=0 ){ | |
| 869 | + diff_print_versions(zFrom, zTo, pCfg); | |
| 870 | + } | |
| 834 | 871 | while( pFromFile || pToFile ){ |
| 835 | 872 | int cmp; |
| 836 | 873 | if( pFromFile==0 ){ |
| 837 | 874 | cmp = +1; |
| 838 | 875 | }else if( pToFile==0 ){ |
| @@ -1058,10 +1095,11 @@ | ||
| 1058 | 1095 | ** --tk Launch a Tcl/Tk GUI for display |
| 1059 | 1096 | ** --to VERSION Select VERSION as target for the diff |
| 1060 | 1097 | ** --undo Diff against the "undo" buffer |
| 1061 | 1098 | ** --unified Unified diff |
| 1062 | 1099 | ** -v|--verbose Output complete text of added or deleted files |
| 1100 | +** -h|--versions Show compared versions in the diff header | |
| 1063 | 1101 | ** --webpage Format output as a stand-alone HTML webpage |
| 1064 | 1102 | ** -W|--width N Width of lines in side-by-side diff |
| 1065 | 1103 | ** -Z|--ignore-trailing-space Ignore changes to end-of-line whitespace |
| 1066 | 1104 | */ |
| 1067 | 1105 | void diff_cmd(void){ |
| 1068 | 1106 |
| --- src/diffcmd.c | |
| +++ src/diffcmd.c | |
| @@ -109,10 +109,37 @@ | |
| 109 | p->nUsed++; |
| 110 | return 1; |
| 111 | } |
| 112 | return 0; |
| 113 | } |
| 114 | |
| 115 | /* |
| 116 | ** Print the "Index:" message that patches wants to see at the top of a diff. |
| 117 | */ |
| 118 | void diff_print_index(const char *zFile, DiffConfig *pCfg, Blob *pOut){ |
| @@ -125,10 +152,11 @@ | |
| 125 | } |
| 126 | |
| 127 | /* |
| 128 | ** Print the +++/--- filename lines or whatever filename information |
| 129 | ** is appropriate for the output format. |
| 130 | */ |
| 131 | void diff_print_filenames( |
| 132 | const char *zLeft, /* Name of the left file */ |
| 133 | const char *zRight, /* Name of the right file */ |
| 134 | DiffConfig *pCfg, /* Diff configuration */ |
| @@ -659,10 +687,14 @@ | |
| 659 | " WHERE vid=%d" |
| 660 | " AND (deleted OR chnged OR rid==0)" |
| 661 | " ORDER BY pathname /*scan*/", |
| 662 | vid |
| 663 | ); |
| 664 | } |
| 665 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| 666 | blob_reset(&sql); |
| 667 | while( db_step(&q)==SQLITE_ROW ){ |
| 668 | const char *zPathname = db_column_text(&q,0); |
| @@ -744,10 +776,13 @@ | |
| 744 | ){ |
| 745 | Stmt q; |
| 746 | Blob content; |
| 747 | db_prepare(&q, "SELECT pathname, content FROM undo"); |
| 748 | blob_init(&content, 0, 0); |
| 749 | while( db_step(&q)==SQLITE_ROW ){ |
| 750 | char *zFullName; |
| 751 | const char *zFile = (const char*)db_column_text(&q, 0); |
| 752 | if( !file_dir_match(pFileDir, zFile) ) continue; |
| 753 | zFullName = mprintf("%s%s", g.zLocalRoot, zFile); |
| @@ -828,11 +863,13 @@ | |
| 828 | manifest_file_rewind(pFrom); |
| 829 | pFromFile = manifest_file_next(pFrom,0); |
| 830 | pTo = manifest_get_by_name(zTo, 0); |
| 831 | manifest_file_rewind(pTo); |
| 832 | pToFile = manifest_file_next(pTo,0); |
| 833 | |
| 834 | while( pFromFile || pToFile ){ |
| 835 | int cmp; |
| 836 | if( pFromFile==0 ){ |
| 837 | cmp = +1; |
| 838 | }else if( pToFile==0 ){ |
| @@ -1058,10 +1095,11 @@ | |
| 1058 | ** --tk Launch a Tcl/Tk GUI for display |
| 1059 | ** --to VERSION Select VERSION as target for the diff |
| 1060 | ** --undo Diff against the "undo" buffer |
| 1061 | ** --unified Unified diff |
| 1062 | ** -v|--verbose Output complete text of added or deleted files |
| 1063 | ** --webpage Format output as a stand-alone HTML webpage |
| 1064 | ** -W|--width N Width of lines in side-by-side diff |
| 1065 | ** -Z|--ignore-trailing-space Ignore changes to end-of-line whitespace |
| 1066 | */ |
| 1067 | void diff_cmd(void){ |
| 1068 |
| --- src/diffcmd.c | |
| +++ src/diffcmd.c | |
| @@ -109,10 +109,37 @@ | |
| 109 | p->nUsed++; |
| 110 | return 1; |
| 111 | } |
| 112 | return 0; |
| 113 | } |
| 114 | |
| 115 | /* |
| 116 | ** Print details about the compared versions - possibly the working directory |
| 117 | ** or the undo buffer. For check-ins, show hash and commit time. |
| 118 | ** |
| 119 | ** This is intended primarily to go into the "header garbage" that is ignored |
| 120 | ** by patch(1). |
| 121 | ** |
| 122 | ** zFrom and zTo are interpreted as symbolic version names, unless they |
| 123 | ** start with '(', in which case they are printed directly. |
| 124 | */ |
| 125 | void diff_print_versions(const char *zFrom, const char *zTo, DiffConfig *pCfg){ |
| 126 | if( (pCfg->diffFlags & (DIFF_SIDEBYSIDE|DIFF_BRIEF|DIFF_NUMSTAT| |
| 127 | DIFF_HTML|DIFF_WEBPAGE|DIFF_BROWSER|DIFF_JSON|DIFF_TCL))==0 ){ |
| 128 | fossil_print("Fossil-Diff-From: %s\n", |
| 129 | zFrom[0]=='(' ? zFrom : mprintf("%S %s", |
| 130 | rid_to_uuid(symbolic_name_to_rid(zFrom, "ci")), |
| 131 | db_text("","SELECT datetime(%f)||' UTC'", |
| 132 | symbolic_name_to_mtime(zFrom, 0)))); |
| 133 | fossil_print("Fossil-Diff-To: %s\n", |
| 134 | zTo[0]=='(' ? zTo : mprintf("%S %s", |
| 135 | rid_to_uuid(symbolic_name_to_rid(zTo, "ci")), |
| 136 | db_text("","SELECT datetime(%f)||' UTC'", |
| 137 | symbolic_name_to_mtime(zTo, 0)))); |
| 138 | fossil_print("%.66c\n", '-'); |
| 139 | } |
| 140 | } |
| 141 | |
| 142 | /* |
| 143 | ** Print the "Index:" message that patches wants to see at the top of a diff. |
| 144 | */ |
| 145 | void diff_print_index(const char *zFile, DiffConfig *pCfg, Blob *pOut){ |
| @@ -125,10 +152,11 @@ | |
| 152 | } |
| 153 | |
| 154 | /* |
| 155 | ** Print the +++/--- filename lines or whatever filename information |
| 156 | ** is appropriate for the output format. |
| 157 | ** |
| 158 | */ |
| 159 | void diff_print_filenames( |
| 160 | const char *zLeft, /* Name of the left file */ |
| 161 | const char *zRight, /* Name of the right file */ |
| 162 | DiffConfig *pCfg, /* Diff configuration */ |
| @@ -659,10 +687,14 @@ | |
| 687 | " WHERE vid=%d" |
| 688 | " AND (deleted OR chnged OR rid==0)" |
| 689 | " ORDER BY pathname /*scan*/", |
| 690 | vid |
| 691 | ); |
| 692 | } |
| 693 | if( (pCfg->diffFlags & DIFF_SHOW_VERS)!=0 ){ |
| 694 | diff_print_versions(zFrom ? zFrom : db_lget("checkout-hash", 0), |
| 695 | "(workdir)", pCfg); |
| 696 | } |
| 697 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| 698 | blob_reset(&sql); |
| 699 | while( db_step(&q)==SQLITE_ROW ){ |
| 700 | const char *zPathname = db_column_text(&q,0); |
| @@ -744,10 +776,13 @@ | |
| 776 | ){ |
| 777 | Stmt q; |
| 778 | Blob content; |
| 779 | db_prepare(&q, "SELECT pathname, content FROM undo"); |
| 780 | blob_init(&content, 0, 0); |
| 781 | if( (pCfg->diffFlags & DIFF_SHOW_VERS)!=0 ){ |
| 782 | diff_print_versions("(undo)", "(workdir)", pCfg); |
| 783 | } |
| 784 | while( db_step(&q)==SQLITE_ROW ){ |
| 785 | char *zFullName; |
| 786 | const char *zFile = (const char*)db_column_text(&q, 0); |
| 787 | if( !file_dir_match(pFileDir, zFile) ) continue; |
| 788 | zFullName = mprintf("%s%s", g.zLocalRoot, zFile); |
| @@ -828,11 +863,13 @@ | |
| 863 | manifest_file_rewind(pFrom); |
| 864 | pFromFile = manifest_file_next(pFrom,0); |
| 865 | pTo = manifest_get_by_name(zTo, 0); |
| 866 | manifest_file_rewind(pTo); |
| 867 | pToFile = manifest_file_next(pTo,0); |
| 868 | if( (pCfg->diffFlags & DIFF_SHOW_VERS)!=0 ){ |
| 869 | diff_print_versions(zFrom, zTo, pCfg); |
| 870 | } |
| 871 | while( pFromFile || pToFile ){ |
| 872 | int cmp; |
| 873 | if( pFromFile==0 ){ |
| 874 | cmp = +1; |
| 875 | }else if( pToFile==0 ){ |
| @@ -1058,10 +1095,11 @@ | |
| 1095 | ** --tk Launch a Tcl/Tk GUI for display |
| 1096 | ** --to VERSION Select VERSION as target for the diff |
| 1097 | ** --undo Diff against the "undo" buffer |
| 1098 | ** --unified Unified diff |
| 1099 | ** -v|--verbose Output complete text of added or deleted files |
| 1100 | ** -h|--versions Show compared versions in the diff header |
| 1101 | ** --webpage Format output as a stand-alone HTML webpage |
| 1102 | ** -W|--width N Width of lines in side-by-side diff |
| 1103 | ** -Z|--ignore-trailing-space Ignore changes to end-of-line whitespace |
| 1104 | */ |
| 1105 | void diff_cmd(void){ |
| 1106 |
+124
-31
| --- src/dispatch.c | ||
| +++ src/dispatch.c | ||
| @@ -31,10 +31,11 @@ | ||
| 31 | 31 | */ |
| 32 | 32 | struct CmdOrPage { |
| 33 | 33 | const char *zName; /* Name. Webpages start with "/". Commands do not */ |
| 34 | 34 | void (*xFunc)(void); /* Implementation function, or NULL for settings */ |
| 35 | 35 | const char *zHelp; /* Raw help text */ |
| 36 | + int iHelp; /* Index of help variable */ | |
| 36 | 37 | unsigned int eCmdFlags; /* Flags */ |
| 37 | 38 | }; |
| 38 | 39 | |
| 39 | 40 | /*************************************************************************** |
| 40 | 41 | ** These macros must match similar macros in mkindex.c |
| @@ -51,10 +52,11 @@ | ||
| 51 | 52 | #define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */ |
| 52 | 53 | #define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret POST content */ |
| 53 | 54 | /* NOTE: 0x0400 = CMDFLAG_SENSITIVE in mkindex.c! */ |
| 54 | 55 | #define CMDFLAG_HIDDEN 0x0800 /* Elide from most listings */ |
| 55 | 56 | #define CMDFLAG_LDAVG_EXEMPT 0x1000 /* Exempt from load_control() */ |
| 57 | +#define CMDFLAG_ALIAS 0x2000 /* Command aliases */ | |
| 56 | 58 | /**************************************************************************/ |
| 57 | 59 | |
| 58 | 60 | /* Values for the 2nd parameter to dispatch_name_search() */ |
| 59 | 61 | #define CMDFLAG_ANY 0x0038 /* Match anything */ |
| 60 | 62 | #define CMDFLAG_PREFIX 0x0200 /* Prefix match is ok */ |
| @@ -77,10 +79,11 @@ | ||
| 77 | 79 | ** source code files looking for header comments on the functions that |
| 78 | 80 | ** implement command and webpages. |
| 79 | 81 | */ |
| 80 | 82 | #include "page_index.h" |
| 81 | 83 | #define MX_COMMAND count(aCommand) |
| 84 | +#define MX_HELP_DUP 5 /* Upper bound estimate on help string duplication */ | |
| 82 | 85 | |
| 83 | 86 | /* |
| 84 | 87 | ** Given a command, webpage, or setting name in zName, find the corresponding |
| 85 | 88 | ** CmdOrPage object and return a pointer to that object in *ppCmd. |
| 86 | 89 | ** |
| @@ -546,45 +549,65 @@ | ||
| 546 | 549 | /* |
| 547 | 550 | ** Display help for all commands based on provided flags. |
| 548 | 551 | */ |
| 549 | 552 | static void display_all_help(int mask, int useHtml, int rawOut){ |
| 550 | 553 | int i; |
| 554 | + unsigned char occHelp[FOSSIL_MX_CMDIDX] = {0}; /* Help string occurrences */ | |
| 555 | + int bktHelp[FOSSIL_MX_CMDIDX][MX_HELP_DUP] = {0};/* Help strings -> commands*/ | |
| 551 | 556 | if( useHtml ) fossil_print("<!--\n"); |
| 552 | 557 | fossil_print("Help text for:\n"); |
| 553 | 558 | if( mask & CMDFLAG_1ST_TIER ) fossil_print(" * Commands\n"); |
| 554 | 559 | if( mask & CMDFLAG_2ND_TIER ) fossil_print(" * Auxiliary commands\n"); |
| 560 | + if( mask & CMDFLAG_ALIAS ) fossil_print(" * Aliases\n"); | |
| 555 | 561 | if( mask & CMDFLAG_TEST ) fossil_print(" * Test commands\n"); |
| 556 | 562 | if( mask & CMDFLAG_WEBPAGE ) fossil_print(" * Web pages\n"); |
| 557 | 563 | if( mask & CMDFLAG_SETTING ) fossil_print(" * Settings\n"); |
| 558 | 564 | if( useHtml ){ |
| 559 | 565 | fossil_print("-->\n"); |
| 560 | 566 | fossil_print("<!-- start_all_help -->\n"); |
| 561 | 567 | }else{ |
| 562 | 568 | fossil_print("---\n"); |
| 563 | 569 | } |
| 570 | + /* Fill in help string buckets */ | |
| 571 | + for(i=0; i<MX_COMMAND; i++){ | |
| 572 | + if( (aCommand[i].eCmdFlags & mask)==0 ) continue; | |
| 573 | + else if(aCommand[i].eCmdFlags & CMDFLAG_HIDDEN) continue; | |
| 574 | + bktHelp[aCommand[i].iHelp][occHelp[aCommand[i].iHelp]++] = i; | |
| 575 | + } | |
| 564 | 576 | for(i=0; i<MX_COMMAND; i++){ |
| 565 | 577 | if( (aCommand[i].eCmdFlags & mask)==0 ) continue; |
| 566 | 578 | else if(aCommand[i].eCmdFlags & CMDFLAG_HIDDEN) continue; |
| 567 | - if( useHtml ){ | |
| 568 | - Blob html; | |
| 569 | - blob_init(&html, 0, 0); | |
| 570 | - help_to_html(aCommand[i].zHelp, &html); | |
| 571 | - fossil_print("<h1>%h</h1>\n", aCommand[i].zName); | |
| 572 | - fossil_print("%s\n<hr>\n", blob_str(&html)); | |
| 573 | - blob_reset(&html); | |
| 574 | - }else if( rawOut ){ | |
| 575 | - fossil_print("# %s\n", aCommand[i].zName); | |
| 576 | - fossil_print("%s\n\n", aCommand[i].zHelp); | |
| 577 | - }else{ | |
| 578 | - Blob txt; | |
| 579 | - blob_init(&txt, 0, 0); | |
| 580 | - help_to_text(aCommand[i].zHelp, &txt); | |
| 581 | - fossil_print("# %s%s\n", aCommand[i].zName, | |
| 582 | - (aCommand[i].eCmdFlags & CMDFLAG_VERSIONABLE)!=0 ? | |
| 583 | - " (versionable)" : ""); | |
| 584 | - fossil_print("%s\n\n", blob_str(&txt)); | |
| 585 | - blob_reset(&txt); | |
| 579 | + if( occHelp[aCommand[i].iHelp] > 0 ){ | |
| 580 | + int j; | |
| 581 | + if( useHtml ){ | |
| 582 | + Blob html; | |
| 583 | + blob_init(&html, 0, 0); | |
| 584 | + help_to_html(aCommand[i].zHelp, &html); | |
| 585 | + for(j=0; j<occHelp[aCommand[i].iHelp]; j++){ | |
| 586 | + fossil_print("<h1>%h</h1>\n", | |
| 587 | + aCommand[bktHelp[aCommand[i].iHelp][j]].zName); | |
| 588 | + } | |
| 589 | + fossil_print("%s\n<hr>\n", blob_str(&html)); | |
| 590 | + blob_reset(&html); | |
| 591 | + }else if( rawOut ){ | |
| 592 | + for(j=0; j<occHelp[aCommand[i].iHelp]; j++) | |
| 593 | + fossil_print("# %s\n", aCommand[bktHelp[aCommand[i].iHelp][j]].zName); | |
| 594 | + fossil_print("%s\n\n", aCommand[i].zHelp); | |
| 595 | + }else{ | |
| 596 | + Blob txt; | |
| 597 | + blob_init(&txt, 0, 0); | |
| 598 | + help_to_text(aCommand[i].zHelp, &txt); | |
| 599 | + for(j=0; j<occHelp[aCommand[i].iHelp]; j++){ | |
| 600 | + fossil_print("# %s%s\n", | |
| 601 | + aCommand[bktHelp[aCommand[i].iHelp][j]].zName, | |
| 602 | + (aCommand[i].eCmdFlags & CMDFLAG_VERSIONABLE)!=0 ? | |
| 603 | + " (versionable)" : ""); | |
| 604 | + } | |
| 605 | + fossil_print("%s\n\n", blob_str(&txt)); | |
| 606 | + blob_reset(&txt); | |
| 607 | + } | |
| 608 | + occHelp[aCommand[i].iHelp] = 0; | |
| 586 | 609 | } |
| 587 | 610 | } |
| 588 | 611 | if( useHtml ){ |
| 589 | 612 | fossil_print("<!-- end_all_help -->\n"); |
| 590 | 613 | }else{ |
| @@ -601,17 +624,19 @@ | ||
| 601 | 624 | ** Show help text for commands and pages. Useful for proof-reading. |
| 602 | 625 | ** Defaults to just the CLI commands. Specify --www to see only the |
| 603 | 626 | ** web pages, or --everything to see both commands and pages. |
| 604 | 627 | ** |
| 605 | 628 | ** Options: |
| 606 | -** -e|--everything Show all commands and pages. | |
| 629 | +** -a|--aliases Show aliases. | |
| 630 | +** -e|--everything Show all commands and pages. Omit aliases to | |
| 631 | +** avoid duplicates. | |
| 632 | +** -h|--html Transform output to HTML. | |
| 633 | +** -o|--options Show global options. | |
| 634 | +** -r|--raw No output formatting. | |
| 635 | +** -s|--settings Show settings. | |
| 607 | 636 | ** -t|--test Include test- commands. |
| 608 | 637 | ** -w|--www Show WWW pages. |
| 609 | -** -s|--settings Show settings. | |
| 610 | -** -h|--html Transform output to HTML. | |
| 611 | -** -r|--raw No output formatting. | |
| 612 | -** -o|--options Show global options. | |
| 613 | 638 | */ |
| 614 | 639 | void test_all_help_cmd(void){ |
| 615 | 640 | int mask = CMDFLAG_1ST_TIER | CMDFLAG_2ND_TIER; |
| 616 | 641 | int useHtml = find_option("html","h",0)!=0; |
| 617 | 642 | int rawOut = find_option("raw","r",0)!=0; |
| @@ -619,15 +644,18 @@ | ||
| 619 | 644 | if( find_option("www","w",0) ){ |
| 620 | 645 | mask = CMDFLAG_WEBPAGE; |
| 621 | 646 | } |
| 622 | 647 | if( find_option("everything","e",0) ){ |
| 623 | 648 | mask = CMDFLAG_1ST_TIER | CMDFLAG_2ND_TIER | CMDFLAG_WEBPAGE | |
| 624 | - CMDFLAG_SETTING | CMDFLAG_TEST; | |
| 649 | + CMDFLAG_ALIAS | CMDFLAG_SETTING | CMDFLAG_TEST; | |
| 625 | 650 | } |
| 626 | 651 | if( find_option("settings","s",0) ){ |
| 627 | 652 | mask = CMDFLAG_SETTING; |
| 628 | 653 | } |
| 654 | + if( find_option("aliases","a",0) ){ | |
| 655 | + mask = CMDFLAG_ALIAS; | |
| 656 | + } | |
| 629 | 657 | if( find_option("test","t",0) ){ |
| 630 | 658 | mask |= CMDFLAG_TEST; |
| 631 | 659 | } |
| 632 | 660 | display_all_help(mask, useHtml, rawOut); |
| 633 | 661 | } |
| @@ -655,10 +683,12 @@ | ||
| 655 | 683 | countCmds( CMDFLAG_COMMAND )); |
| 656 | 684 | fossil_print(" 1st tier %4d\n", |
| 657 | 685 | countCmds( CMDFLAG_1ST_TIER )); |
| 658 | 686 | fossil_print(" 2nd tier %4d\n", |
| 659 | 687 | countCmds( CMDFLAG_2ND_TIER )); |
| 688 | + fossil_print(" alias %4d\n", | |
| 689 | + countCmds( CMDFLAG_ALIAS )); | |
| 660 | 690 | fossil_print(" test %4d\n", |
| 661 | 691 | countCmds( CMDFLAG_TEST )); |
| 662 | 692 | fossil_print("web-pages: %4d\n", |
| 663 | 693 | countCmds( CMDFLAG_WEBPAGE )); |
| 664 | 694 | fossil_print("settings: %4d\n", |
| @@ -828,26 +858,56 @@ | ||
| 828 | 858 | @ </div> |
| 829 | 859 | } |
| 830 | 860 | } |
| 831 | 861 | }else{ |
| 832 | 862 | int i; |
| 833 | - | |
| 863 | + unsigned char occHelp[FOSSIL_MX_CMDIDX] = {0}; /* Help str occurrences */ | |
| 864 | + int bktHelp[FOSSIL_MX_CMDIDX][MX_HELP_DUP] = {0};/* Help str -> commands */ | |
| 834 | 865 | style_header("Help"); |
| 835 | 866 | |
| 836 | 867 | @ <a name='commands'></a> |
| 837 | 868 | @ <h1>Available commands:</h1> |
| 838 | 869 | @ <div class="columns" style="column-width: 12ex;"> |
| 839 | 870 | @ <ul> |
| 871 | + /* Fill in help string buckets */ | |
| 872 | + for(i=0; i<MX_COMMAND; i++){ | |
| 873 | + if(aCommand[i].eCmdFlags & CMDFLAG_HIDDEN) continue; | |
| 874 | + bktHelp[aCommand[i].iHelp][occHelp[aCommand[i].iHelp]++] = i; | |
| 875 | + } | |
| 840 | 876 | for(i=0; i<MX_COMMAND; i++){ |
| 841 | 877 | const char *z = aCommand[i].zName; |
| 842 | 878 | const char *zBoldOn = aCommand[i].eCmdFlags&CMDFLAG_1ST_TIER?"<b>" :""; |
| 843 | 879 | const char *zBoldOff = aCommand[i].eCmdFlags&CMDFLAG_1ST_TIER?"</b>":""; |
| 844 | 880 | if( '/'==*z || strncmp(z,"test",4)==0 ) continue; |
| 845 | 881 | if( (aCommand[i].eCmdFlags & CMDFLAG_SETTING)!=0 ) continue; |
| 846 | 882 | else if( (aCommand[i].eCmdFlags & CMDFLAG_HIDDEN)!=0 ) continue; |
| 847 | - @ <li><a href="%R/help?cmd=%s(z)">%s(zBoldOn)%s(z)%s(zBoldOff)</a></li> | |
| 883 | + else if( (aCommand[i].eCmdFlags & CMDFLAG_ALIAS)!=0 ) continue; | |
| 884 | + @ <li><a href="%R/help?cmd=%s(z)">%s(zBoldOn)%s(z)%s(zBoldOff)</a> | |
| 885 | + /* Output aliases */ | |
| 886 | + if( occHelp[aCommand[i].iHelp] > 1 ){ | |
| 887 | + int j; | |
| 888 | + int aliases[MX_HELP_DUP], nAliases=0; | |
| 889 | + for(j=0; j<occHelp[aCommand[i].iHelp]; j++){ | |
| 890 | + if( bktHelp[aCommand[i].iHelp][j] != i ){ | |
| 891 | + if( aCommand[bktHelp[aCommand[i].iHelp][j]].eCmdFlags & CMDFLAG_ALIAS ){ | |
| 892 | + aliases[nAliases++] = bktHelp[aCommand[i].iHelp][j]; | |
| 893 | + } | |
| 894 | + } | |
| 895 | + } | |
| 896 | + if( nAliases>0 ){ | |
| 897 | + int k; | |
| 898 | + @(\ | |
| 899 | + for(k=0; k<nAliases; k++){ | |
| 900 | + @<a href="%R/help?cmd=%s(aCommand[aliases[k]].zName)">\ | |
| 901 | + @%s(aCommand[aliases[k]].zName)</a>%s((k<nAliases-1)?", ":"")\ | |
| 902 | + } | |
| 903 | + @)\ | |
| 904 | + } | |
| 905 | + } | |
| 906 | + @ </li> | |
| 848 | 907 | } |
| 908 | + | |
| 849 | 909 | @ </ul></div> |
| 850 | 910 | |
| 851 | 911 | @ <a name='webpages'></a> |
| 852 | 912 | @ <h1>Available web UI pages:</h1> |
| 853 | 913 | @ <div class="columns" style="column-width: 18ex;"> |
| @@ -905,22 +965,31 @@ | ||
| 905 | 965 | ** |
| 906 | 966 | ** Show all help text on a single page. Useful for proof-reading. |
| 907 | 967 | */ |
| 908 | 968 | void test_all_help_page(void){ |
| 909 | 969 | int i; |
| 970 | + unsigned char occHelp[FOSSIL_MX_CMDIDX] = {0}; /* Help string occurrences */ | |
| 971 | + int bktHelp[FOSSIL_MX_CMDIDX][MX_HELP_DUP] = {0};/* Help strings -> commands*/ | |
| 910 | 972 | Blob buf; |
| 911 | 973 | blob_init(&buf,0,0); |
| 912 | 974 | style_set_current_feature("test"); |
| 913 | 975 | style_header("All Help Text"); |
| 914 | 976 | @ <dl> |
| 977 | + /* Fill in help string buckets */ | |
| 978 | + for(i=0; i<MX_COMMAND; i++){ | |
| 979 | + if(aCommand[i].eCmdFlags & CMDFLAG_HIDDEN) continue; | |
| 980 | + bktHelp[aCommand[i].iHelp][occHelp[aCommand[i].iHelp]++] = i; | |
| 981 | + } | |
| 915 | 982 | for(i=0; i<MX_COMMAND; i++){ |
| 916 | 983 | const char *zDesc; |
| 917 | 984 | unsigned int e = aCommand[i].eCmdFlags; |
| 918 | 985 | if( e & CMDFLAG_1ST_TIER ){ |
| 919 | 986 | zDesc = "1st tier command"; |
| 920 | 987 | }else if( e & CMDFLAG_2ND_TIER ){ |
| 921 | 988 | zDesc = "2nd tier command"; |
| 989 | + }else if( e & CMDFLAG_ALIAS ){ | |
| 990 | + zDesc = "alias"; | |
| 922 | 991 | }else if( e & CMDFLAG_TEST ){ |
| 923 | 992 | zDesc = "test command"; |
| 924 | 993 | }else if( e & CMDFLAG_WEBPAGE ){ |
| 925 | 994 | if( e & CMDFLAG_RAWCONTENT ){ |
| 926 | 995 | zDesc = "raw-content web page"; |
| @@ -940,14 +1009,38 @@ | ||
| 940 | 1009 | } |
| 941 | 1010 | blob_appendf(&buf,"setting"); |
| 942 | 1011 | zDesc = blob_str(&buf); |
| 943 | 1012 | } |
| 944 | 1013 | if( memcmp(aCommand[i].zName, "test", 4)==0 ) continue; |
| 945 | - @ <dt><big><b>%s(aCommand[i].zName)</b></big> (%s(zDesc))</dt> | |
| 946 | - @ <dd> | |
| 947 | - help_to_html(aCommand[i].zHelp, cgi_output_blob()); | |
| 948 | - @ </dd> | |
| 1014 | + if( occHelp[aCommand[i].iHelp] > 0 ){ | |
| 1015 | + int j; | |
| 1016 | + for(j=0; j<occHelp[aCommand[i].iHelp]; j++){ | |
| 1017 | + unsigned int e = aCommand[bktHelp[aCommand[i].iHelp][j]].eCmdFlags; | |
| 1018 | + if( e & CMDFLAG_1ST_TIER ){ | |
| 1019 | + zDesc = "1st tier command"; | |
| 1020 | + }else if( e & CMDFLAG_2ND_TIER ){ | |
| 1021 | + zDesc = "2nd tier command"; | |
| 1022 | + }else if( e & CMDFLAG_ALIAS ){ | |
| 1023 | + zDesc = "alias"; | |
| 1024 | + }else if( e & CMDFLAG_TEST ){ | |
| 1025 | + zDesc = "test command"; | |
| 1026 | + }else if( e & CMDFLAG_WEBPAGE ){ | |
| 1027 | + if( e & CMDFLAG_RAWCONTENT ){ | |
| 1028 | + zDesc = "raw-content web page"; | |
| 1029 | + }else{ | |
| 1030 | + zDesc = "web page"; | |
| 1031 | + } | |
| 1032 | + } | |
| 1033 | + | |
| 1034 | + @ <dt><big><b>%s(aCommand[bktHelp[aCommand[i].iHelp][j]].zName)</b> | |
| 1035 | + @</big> (%s(zDesc))</dt> | |
| 1036 | + } | |
| 1037 | + @ <dd> | |
| 1038 | + help_to_html(aCommand[i].zHelp, cgi_output_blob()); | |
| 1039 | + @ </dd> | |
| 1040 | + occHelp[aCommand[i].iHelp] = 0; | |
| 1041 | + } | |
| 949 | 1042 | } |
| 950 | 1043 | @ </dl> |
| 951 | 1044 | blob_reset(&buf); |
| 952 | 1045 | style_finish_page(); |
| 953 | 1046 | } |
| 954 | 1047 |
| --- src/dispatch.c | |
| +++ src/dispatch.c | |
| @@ -31,10 +31,11 @@ | |
| 31 | */ |
| 32 | struct CmdOrPage { |
| 33 | const char *zName; /* Name. Webpages start with "/". Commands do not */ |
| 34 | void (*xFunc)(void); /* Implementation function, or NULL for settings */ |
| 35 | const char *zHelp; /* Raw help text */ |
| 36 | unsigned int eCmdFlags; /* Flags */ |
| 37 | }; |
| 38 | |
| 39 | /*************************************************************************** |
| 40 | ** These macros must match similar macros in mkindex.c |
| @@ -51,10 +52,11 @@ | |
| 51 | #define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */ |
| 52 | #define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret POST content */ |
| 53 | /* NOTE: 0x0400 = CMDFLAG_SENSITIVE in mkindex.c! */ |
| 54 | #define CMDFLAG_HIDDEN 0x0800 /* Elide from most listings */ |
| 55 | #define CMDFLAG_LDAVG_EXEMPT 0x1000 /* Exempt from load_control() */ |
| 56 | /**************************************************************************/ |
| 57 | |
| 58 | /* Values for the 2nd parameter to dispatch_name_search() */ |
| 59 | #define CMDFLAG_ANY 0x0038 /* Match anything */ |
| 60 | #define CMDFLAG_PREFIX 0x0200 /* Prefix match is ok */ |
| @@ -77,10 +79,11 @@ | |
| 77 | ** source code files looking for header comments on the functions that |
| 78 | ** implement command and webpages. |
| 79 | */ |
| 80 | #include "page_index.h" |
| 81 | #define MX_COMMAND count(aCommand) |
| 82 | |
| 83 | /* |
| 84 | ** Given a command, webpage, or setting name in zName, find the corresponding |
| 85 | ** CmdOrPage object and return a pointer to that object in *ppCmd. |
| 86 | ** |
| @@ -546,45 +549,65 @@ | |
| 546 | /* |
| 547 | ** Display help for all commands based on provided flags. |
| 548 | */ |
| 549 | static void display_all_help(int mask, int useHtml, int rawOut){ |
| 550 | int i; |
| 551 | if( useHtml ) fossil_print("<!--\n"); |
| 552 | fossil_print("Help text for:\n"); |
| 553 | if( mask & CMDFLAG_1ST_TIER ) fossil_print(" * Commands\n"); |
| 554 | if( mask & CMDFLAG_2ND_TIER ) fossil_print(" * Auxiliary commands\n"); |
| 555 | if( mask & CMDFLAG_TEST ) fossil_print(" * Test commands\n"); |
| 556 | if( mask & CMDFLAG_WEBPAGE ) fossil_print(" * Web pages\n"); |
| 557 | if( mask & CMDFLAG_SETTING ) fossil_print(" * Settings\n"); |
| 558 | if( useHtml ){ |
| 559 | fossil_print("-->\n"); |
| 560 | fossil_print("<!-- start_all_help -->\n"); |
| 561 | }else{ |
| 562 | fossil_print("---\n"); |
| 563 | } |
| 564 | for(i=0; i<MX_COMMAND; i++){ |
| 565 | if( (aCommand[i].eCmdFlags & mask)==0 ) continue; |
| 566 | else if(aCommand[i].eCmdFlags & CMDFLAG_HIDDEN) continue; |
| 567 | if( useHtml ){ |
| 568 | Blob html; |
| 569 | blob_init(&html, 0, 0); |
| 570 | help_to_html(aCommand[i].zHelp, &html); |
| 571 | fossil_print("<h1>%h</h1>\n", aCommand[i].zName); |
| 572 | fossil_print("%s\n<hr>\n", blob_str(&html)); |
| 573 | blob_reset(&html); |
| 574 | }else if( rawOut ){ |
| 575 | fossil_print("# %s\n", aCommand[i].zName); |
| 576 | fossil_print("%s\n\n", aCommand[i].zHelp); |
| 577 | }else{ |
| 578 | Blob txt; |
| 579 | blob_init(&txt, 0, 0); |
| 580 | help_to_text(aCommand[i].zHelp, &txt); |
| 581 | fossil_print("# %s%s\n", aCommand[i].zName, |
| 582 | (aCommand[i].eCmdFlags & CMDFLAG_VERSIONABLE)!=0 ? |
| 583 | " (versionable)" : ""); |
| 584 | fossil_print("%s\n\n", blob_str(&txt)); |
| 585 | blob_reset(&txt); |
| 586 | } |
| 587 | } |
| 588 | if( useHtml ){ |
| 589 | fossil_print("<!-- end_all_help -->\n"); |
| 590 | }else{ |
| @@ -601,17 +624,19 @@ | |
| 601 | ** Show help text for commands and pages. Useful for proof-reading. |
| 602 | ** Defaults to just the CLI commands. Specify --www to see only the |
| 603 | ** web pages, or --everything to see both commands and pages. |
| 604 | ** |
| 605 | ** Options: |
| 606 | ** -e|--everything Show all commands and pages. |
| 607 | ** -t|--test Include test- commands. |
| 608 | ** -w|--www Show WWW pages. |
| 609 | ** -s|--settings Show settings. |
| 610 | ** -h|--html Transform output to HTML. |
| 611 | ** -r|--raw No output formatting. |
| 612 | ** -o|--options Show global options. |
| 613 | */ |
| 614 | void test_all_help_cmd(void){ |
| 615 | int mask = CMDFLAG_1ST_TIER | CMDFLAG_2ND_TIER; |
| 616 | int useHtml = find_option("html","h",0)!=0; |
| 617 | int rawOut = find_option("raw","r",0)!=0; |
| @@ -619,15 +644,18 @@ | |
| 619 | if( find_option("www","w",0) ){ |
| 620 | mask = CMDFLAG_WEBPAGE; |
| 621 | } |
| 622 | if( find_option("everything","e",0) ){ |
| 623 | mask = CMDFLAG_1ST_TIER | CMDFLAG_2ND_TIER | CMDFLAG_WEBPAGE | |
| 624 | CMDFLAG_SETTING | CMDFLAG_TEST; |
| 625 | } |
| 626 | if( find_option("settings","s",0) ){ |
| 627 | mask = CMDFLAG_SETTING; |
| 628 | } |
| 629 | if( find_option("test","t",0) ){ |
| 630 | mask |= CMDFLAG_TEST; |
| 631 | } |
| 632 | display_all_help(mask, useHtml, rawOut); |
| 633 | } |
| @@ -655,10 +683,12 @@ | |
| 655 | countCmds( CMDFLAG_COMMAND )); |
| 656 | fossil_print(" 1st tier %4d\n", |
| 657 | countCmds( CMDFLAG_1ST_TIER )); |
| 658 | fossil_print(" 2nd tier %4d\n", |
| 659 | countCmds( CMDFLAG_2ND_TIER )); |
| 660 | fossil_print(" test %4d\n", |
| 661 | countCmds( CMDFLAG_TEST )); |
| 662 | fossil_print("web-pages: %4d\n", |
| 663 | countCmds( CMDFLAG_WEBPAGE )); |
| 664 | fossil_print("settings: %4d\n", |
| @@ -828,26 +858,56 @@ | |
| 828 | @ </div> |
| 829 | } |
| 830 | } |
| 831 | }else{ |
| 832 | int i; |
| 833 | |
| 834 | style_header("Help"); |
| 835 | |
| 836 | @ <a name='commands'></a> |
| 837 | @ <h1>Available commands:</h1> |
| 838 | @ <div class="columns" style="column-width: 12ex;"> |
| 839 | @ <ul> |
| 840 | for(i=0; i<MX_COMMAND; i++){ |
| 841 | const char *z = aCommand[i].zName; |
| 842 | const char *zBoldOn = aCommand[i].eCmdFlags&CMDFLAG_1ST_TIER?"<b>" :""; |
| 843 | const char *zBoldOff = aCommand[i].eCmdFlags&CMDFLAG_1ST_TIER?"</b>":""; |
| 844 | if( '/'==*z || strncmp(z,"test",4)==0 ) continue; |
| 845 | if( (aCommand[i].eCmdFlags & CMDFLAG_SETTING)!=0 ) continue; |
| 846 | else if( (aCommand[i].eCmdFlags & CMDFLAG_HIDDEN)!=0 ) continue; |
| 847 | @ <li><a href="%R/help?cmd=%s(z)">%s(zBoldOn)%s(z)%s(zBoldOff)</a></li> |
| 848 | } |
| 849 | @ </ul></div> |
| 850 | |
| 851 | @ <a name='webpages'></a> |
| 852 | @ <h1>Available web UI pages:</h1> |
| 853 | @ <div class="columns" style="column-width: 18ex;"> |
| @@ -905,22 +965,31 @@ | |
| 905 | ** |
| 906 | ** Show all help text on a single page. Useful for proof-reading. |
| 907 | */ |
| 908 | void test_all_help_page(void){ |
| 909 | int i; |
| 910 | Blob buf; |
| 911 | blob_init(&buf,0,0); |
| 912 | style_set_current_feature("test"); |
| 913 | style_header("All Help Text"); |
| 914 | @ <dl> |
| 915 | for(i=0; i<MX_COMMAND; i++){ |
| 916 | const char *zDesc; |
| 917 | unsigned int e = aCommand[i].eCmdFlags; |
| 918 | if( e & CMDFLAG_1ST_TIER ){ |
| 919 | zDesc = "1st tier command"; |
| 920 | }else if( e & CMDFLAG_2ND_TIER ){ |
| 921 | zDesc = "2nd tier command"; |
| 922 | }else if( e & CMDFLAG_TEST ){ |
| 923 | zDesc = "test command"; |
| 924 | }else if( e & CMDFLAG_WEBPAGE ){ |
| 925 | if( e & CMDFLAG_RAWCONTENT ){ |
| 926 | zDesc = "raw-content web page"; |
| @@ -940,14 +1009,38 @@ | |
| 940 | } |
| 941 | blob_appendf(&buf,"setting"); |
| 942 | zDesc = blob_str(&buf); |
| 943 | } |
| 944 | if( memcmp(aCommand[i].zName, "test", 4)==0 ) continue; |
| 945 | @ <dt><big><b>%s(aCommand[i].zName)</b></big> (%s(zDesc))</dt> |
| 946 | @ <dd> |
| 947 | help_to_html(aCommand[i].zHelp, cgi_output_blob()); |
| 948 | @ </dd> |
| 949 | } |
| 950 | @ </dl> |
| 951 | blob_reset(&buf); |
| 952 | style_finish_page(); |
| 953 | } |
| 954 |
| --- src/dispatch.c | |
| +++ src/dispatch.c | |
| @@ -31,10 +31,11 @@ | |
| 31 | */ |
| 32 | struct CmdOrPage { |
| 33 | const char *zName; /* Name. Webpages start with "/". Commands do not */ |
| 34 | void (*xFunc)(void); /* Implementation function, or NULL for settings */ |
| 35 | const char *zHelp; /* Raw help text */ |
| 36 | int iHelp; /* Index of help variable */ |
| 37 | unsigned int eCmdFlags; /* Flags */ |
| 38 | }; |
| 39 | |
| 40 | /*************************************************************************** |
| 41 | ** These macros must match similar macros in mkindex.c |
| @@ -51,10 +52,11 @@ | |
| 52 | #define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */ |
| 53 | #define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret POST content */ |
| 54 | /* NOTE: 0x0400 = CMDFLAG_SENSITIVE in mkindex.c! */ |
| 55 | #define CMDFLAG_HIDDEN 0x0800 /* Elide from most listings */ |
| 56 | #define CMDFLAG_LDAVG_EXEMPT 0x1000 /* Exempt from load_control() */ |
| 57 | #define CMDFLAG_ALIAS 0x2000 /* Command aliases */ |
| 58 | /**************************************************************************/ |
| 59 | |
| 60 | /* Values for the 2nd parameter to dispatch_name_search() */ |
| 61 | #define CMDFLAG_ANY 0x0038 /* Match anything */ |
| 62 | #define CMDFLAG_PREFIX 0x0200 /* Prefix match is ok */ |
| @@ -77,10 +79,11 @@ | |
| 79 | ** source code files looking for header comments on the functions that |
| 80 | ** implement command and webpages. |
| 81 | */ |
| 82 | #include "page_index.h" |
| 83 | #define MX_COMMAND count(aCommand) |
| 84 | #define MX_HELP_DUP 5 /* Upper bound estimate on help string duplication */ |
| 85 | |
| 86 | /* |
| 87 | ** Given a command, webpage, or setting name in zName, find the corresponding |
| 88 | ** CmdOrPage object and return a pointer to that object in *ppCmd. |
| 89 | ** |
| @@ -546,45 +549,65 @@ | |
| 549 | /* |
| 550 | ** Display help for all commands based on provided flags. |
| 551 | */ |
| 552 | static void display_all_help(int mask, int useHtml, int rawOut){ |
| 553 | int i; |
| 554 | unsigned char occHelp[FOSSIL_MX_CMDIDX] = {0}; /* Help string occurrences */ |
| 555 | int bktHelp[FOSSIL_MX_CMDIDX][MX_HELP_DUP] = {0};/* Help strings -> commands*/ |
| 556 | if( useHtml ) fossil_print("<!--\n"); |
| 557 | fossil_print("Help text for:\n"); |
| 558 | if( mask & CMDFLAG_1ST_TIER ) fossil_print(" * Commands\n"); |
| 559 | if( mask & CMDFLAG_2ND_TIER ) fossil_print(" * Auxiliary commands\n"); |
| 560 | if( mask & CMDFLAG_ALIAS ) fossil_print(" * Aliases\n"); |
| 561 | if( mask & CMDFLAG_TEST ) fossil_print(" * Test commands\n"); |
| 562 | if( mask & CMDFLAG_WEBPAGE ) fossil_print(" * Web pages\n"); |
| 563 | if( mask & CMDFLAG_SETTING ) fossil_print(" * Settings\n"); |
| 564 | if( useHtml ){ |
| 565 | fossil_print("-->\n"); |
| 566 | fossil_print("<!-- start_all_help -->\n"); |
| 567 | }else{ |
| 568 | fossil_print("---\n"); |
| 569 | } |
| 570 | /* Fill in help string buckets */ |
| 571 | for(i=0; i<MX_COMMAND; i++){ |
| 572 | if( (aCommand[i].eCmdFlags & mask)==0 ) continue; |
| 573 | else if(aCommand[i].eCmdFlags & CMDFLAG_HIDDEN) continue; |
| 574 | bktHelp[aCommand[i].iHelp][occHelp[aCommand[i].iHelp]++] = i; |
| 575 | } |
| 576 | for(i=0; i<MX_COMMAND; i++){ |
| 577 | if( (aCommand[i].eCmdFlags & mask)==0 ) continue; |
| 578 | else if(aCommand[i].eCmdFlags & CMDFLAG_HIDDEN) continue; |
| 579 | if( occHelp[aCommand[i].iHelp] > 0 ){ |
| 580 | int j; |
| 581 | if( useHtml ){ |
| 582 | Blob html; |
| 583 | blob_init(&html, 0, 0); |
| 584 | help_to_html(aCommand[i].zHelp, &html); |
| 585 | for(j=0; j<occHelp[aCommand[i].iHelp]; j++){ |
| 586 | fossil_print("<h1>%h</h1>\n", |
| 587 | aCommand[bktHelp[aCommand[i].iHelp][j]].zName); |
| 588 | } |
| 589 | fossil_print("%s\n<hr>\n", blob_str(&html)); |
| 590 | blob_reset(&html); |
| 591 | }else if( rawOut ){ |
| 592 | for(j=0; j<occHelp[aCommand[i].iHelp]; j++) |
| 593 | fossil_print("# %s\n", aCommand[bktHelp[aCommand[i].iHelp][j]].zName); |
| 594 | fossil_print("%s\n\n", aCommand[i].zHelp); |
| 595 | }else{ |
| 596 | Blob txt; |
| 597 | blob_init(&txt, 0, 0); |
| 598 | help_to_text(aCommand[i].zHelp, &txt); |
| 599 | for(j=0; j<occHelp[aCommand[i].iHelp]; j++){ |
| 600 | fossil_print("# %s%s\n", |
| 601 | aCommand[bktHelp[aCommand[i].iHelp][j]].zName, |
| 602 | (aCommand[i].eCmdFlags & CMDFLAG_VERSIONABLE)!=0 ? |
| 603 | " (versionable)" : ""); |
| 604 | } |
| 605 | fossil_print("%s\n\n", blob_str(&txt)); |
| 606 | blob_reset(&txt); |
| 607 | } |
| 608 | occHelp[aCommand[i].iHelp] = 0; |
| 609 | } |
| 610 | } |
| 611 | if( useHtml ){ |
| 612 | fossil_print("<!-- end_all_help -->\n"); |
| 613 | }else{ |
| @@ -601,17 +624,19 @@ | |
| 624 | ** Show help text for commands and pages. Useful for proof-reading. |
| 625 | ** Defaults to just the CLI commands. Specify --www to see only the |
| 626 | ** web pages, or --everything to see both commands and pages. |
| 627 | ** |
| 628 | ** Options: |
| 629 | ** -a|--aliases Show aliases. |
| 630 | ** -e|--everything Show all commands and pages. Omit aliases to |
| 631 | ** avoid duplicates. |
| 632 | ** -h|--html Transform output to HTML. |
| 633 | ** -o|--options Show global options. |
| 634 | ** -r|--raw No output formatting. |
| 635 | ** -s|--settings Show settings. |
| 636 | ** -t|--test Include test- commands. |
| 637 | ** -w|--www Show WWW pages. |
| 638 | */ |
| 639 | void test_all_help_cmd(void){ |
| 640 | int mask = CMDFLAG_1ST_TIER | CMDFLAG_2ND_TIER; |
| 641 | int useHtml = find_option("html","h",0)!=0; |
| 642 | int rawOut = find_option("raw","r",0)!=0; |
| @@ -619,15 +644,18 @@ | |
| 644 | if( find_option("www","w",0) ){ |
| 645 | mask = CMDFLAG_WEBPAGE; |
| 646 | } |
| 647 | if( find_option("everything","e",0) ){ |
| 648 | mask = CMDFLAG_1ST_TIER | CMDFLAG_2ND_TIER | CMDFLAG_WEBPAGE | |
| 649 | CMDFLAG_ALIAS | CMDFLAG_SETTING | CMDFLAG_TEST; |
| 650 | } |
| 651 | if( find_option("settings","s",0) ){ |
| 652 | mask = CMDFLAG_SETTING; |
| 653 | } |
| 654 | if( find_option("aliases","a",0) ){ |
| 655 | mask = CMDFLAG_ALIAS; |
| 656 | } |
| 657 | if( find_option("test","t",0) ){ |
| 658 | mask |= CMDFLAG_TEST; |
| 659 | } |
| 660 | display_all_help(mask, useHtml, rawOut); |
| 661 | } |
| @@ -655,10 +683,12 @@ | |
| 683 | countCmds( CMDFLAG_COMMAND )); |
| 684 | fossil_print(" 1st tier %4d\n", |
| 685 | countCmds( CMDFLAG_1ST_TIER )); |
| 686 | fossil_print(" 2nd tier %4d\n", |
| 687 | countCmds( CMDFLAG_2ND_TIER )); |
| 688 | fossil_print(" alias %4d\n", |
| 689 | countCmds( CMDFLAG_ALIAS )); |
| 690 | fossil_print(" test %4d\n", |
| 691 | countCmds( CMDFLAG_TEST )); |
| 692 | fossil_print("web-pages: %4d\n", |
| 693 | countCmds( CMDFLAG_WEBPAGE )); |
| 694 | fossil_print("settings: %4d\n", |
| @@ -828,26 +858,56 @@ | |
| 858 | @ </div> |
| 859 | } |
| 860 | } |
| 861 | }else{ |
| 862 | int i; |
| 863 | unsigned char occHelp[FOSSIL_MX_CMDIDX] = {0}; /* Help str occurrences */ |
| 864 | int bktHelp[FOSSIL_MX_CMDIDX][MX_HELP_DUP] = {0};/* Help str -> commands */ |
| 865 | style_header("Help"); |
| 866 | |
| 867 | @ <a name='commands'></a> |
| 868 | @ <h1>Available commands:</h1> |
| 869 | @ <div class="columns" style="column-width: 12ex;"> |
| 870 | @ <ul> |
| 871 | /* Fill in help string buckets */ |
| 872 | for(i=0; i<MX_COMMAND; i++){ |
| 873 | if(aCommand[i].eCmdFlags & CMDFLAG_HIDDEN) continue; |
| 874 | bktHelp[aCommand[i].iHelp][occHelp[aCommand[i].iHelp]++] = i; |
| 875 | } |
| 876 | for(i=0; i<MX_COMMAND; i++){ |
| 877 | const char *z = aCommand[i].zName; |
| 878 | const char *zBoldOn = aCommand[i].eCmdFlags&CMDFLAG_1ST_TIER?"<b>" :""; |
| 879 | const char *zBoldOff = aCommand[i].eCmdFlags&CMDFLAG_1ST_TIER?"</b>":""; |
| 880 | if( '/'==*z || strncmp(z,"test",4)==0 ) continue; |
| 881 | if( (aCommand[i].eCmdFlags & CMDFLAG_SETTING)!=0 ) continue; |
| 882 | else if( (aCommand[i].eCmdFlags & CMDFLAG_HIDDEN)!=0 ) continue; |
| 883 | else if( (aCommand[i].eCmdFlags & CMDFLAG_ALIAS)!=0 ) continue; |
| 884 | @ <li><a href="%R/help?cmd=%s(z)">%s(zBoldOn)%s(z)%s(zBoldOff)</a> |
| 885 | /* Output aliases */ |
| 886 | if( occHelp[aCommand[i].iHelp] > 1 ){ |
| 887 | int j; |
| 888 | int aliases[MX_HELP_DUP], nAliases=0; |
| 889 | for(j=0; j<occHelp[aCommand[i].iHelp]; j++){ |
| 890 | if( bktHelp[aCommand[i].iHelp][j] != i ){ |
| 891 | if( aCommand[bktHelp[aCommand[i].iHelp][j]].eCmdFlags & CMDFLAG_ALIAS ){ |
| 892 | aliases[nAliases++] = bktHelp[aCommand[i].iHelp][j]; |
| 893 | } |
| 894 | } |
| 895 | } |
| 896 | if( nAliases>0 ){ |
| 897 | int k; |
| 898 | @(\ |
| 899 | for(k=0; k<nAliases; k++){ |
| 900 | @<a href="%R/help?cmd=%s(aCommand[aliases[k]].zName)">\ |
| 901 | @%s(aCommand[aliases[k]].zName)</a>%s((k<nAliases-1)?", ":"")\ |
| 902 | } |
| 903 | @)\ |
| 904 | } |
| 905 | } |
| 906 | @ </li> |
| 907 | } |
| 908 | |
| 909 | @ </ul></div> |
| 910 | |
| 911 | @ <a name='webpages'></a> |
| 912 | @ <h1>Available web UI pages:</h1> |
| 913 | @ <div class="columns" style="column-width: 18ex;"> |
| @@ -905,22 +965,31 @@ | |
| 965 | ** |
| 966 | ** Show all help text on a single page. Useful for proof-reading. |
| 967 | */ |
| 968 | void test_all_help_page(void){ |
| 969 | int i; |
| 970 | unsigned char occHelp[FOSSIL_MX_CMDIDX] = {0}; /* Help string occurrences */ |
| 971 | int bktHelp[FOSSIL_MX_CMDIDX][MX_HELP_DUP] = {0};/* Help strings -> commands*/ |
| 972 | Blob buf; |
| 973 | blob_init(&buf,0,0); |
| 974 | style_set_current_feature("test"); |
| 975 | style_header("All Help Text"); |
| 976 | @ <dl> |
| 977 | /* Fill in help string buckets */ |
| 978 | for(i=0; i<MX_COMMAND; i++){ |
| 979 | if(aCommand[i].eCmdFlags & CMDFLAG_HIDDEN) continue; |
| 980 | bktHelp[aCommand[i].iHelp][occHelp[aCommand[i].iHelp]++] = i; |
| 981 | } |
| 982 | for(i=0; i<MX_COMMAND; i++){ |
| 983 | const char *zDesc; |
| 984 | unsigned int e = aCommand[i].eCmdFlags; |
| 985 | if( e & CMDFLAG_1ST_TIER ){ |
| 986 | zDesc = "1st tier command"; |
| 987 | }else if( e & CMDFLAG_2ND_TIER ){ |
| 988 | zDesc = "2nd tier command"; |
| 989 | }else if( e & CMDFLAG_ALIAS ){ |
| 990 | zDesc = "alias"; |
| 991 | }else if( e & CMDFLAG_TEST ){ |
| 992 | zDesc = "test command"; |
| 993 | }else if( e & CMDFLAG_WEBPAGE ){ |
| 994 | if( e & CMDFLAG_RAWCONTENT ){ |
| 995 | zDesc = "raw-content web page"; |
| @@ -940,14 +1009,38 @@ | |
| 1009 | } |
| 1010 | blob_appendf(&buf,"setting"); |
| 1011 | zDesc = blob_str(&buf); |
| 1012 | } |
| 1013 | if( memcmp(aCommand[i].zName, "test", 4)==0 ) continue; |
| 1014 | if( occHelp[aCommand[i].iHelp] > 0 ){ |
| 1015 | int j; |
| 1016 | for(j=0; j<occHelp[aCommand[i].iHelp]; j++){ |
| 1017 | unsigned int e = aCommand[bktHelp[aCommand[i].iHelp][j]].eCmdFlags; |
| 1018 | if( e & CMDFLAG_1ST_TIER ){ |
| 1019 | zDesc = "1st tier command"; |
| 1020 | }else if( e & CMDFLAG_2ND_TIER ){ |
| 1021 | zDesc = "2nd tier command"; |
| 1022 | }else if( e & CMDFLAG_ALIAS ){ |
| 1023 | zDesc = "alias"; |
| 1024 | }else if( e & CMDFLAG_TEST ){ |
| 1025 | zDesc = "test command"; |
| 1026 | }else if( e & CMDFLAG_WEBPAGE ){ |
| 1027 | if( e & CMDFLAG_RAWCONTENT ){ |
| 1028 | zDesc = "raw-content web page"; |
| 1029 | }else{ |
| 1030 | zDesc = "web page"; |
| 1031 | } |
| 1032 | } |
| 1033 | |
| 1034 | @ <dt><big><b>%s(aCommand[bktHelp[aCommand[i].iHelp][j]].zName)</b> |
| 1035 | @</big> (%s(zDesc))</dt> |
| 1036 | } |
| 1037 | @ <dd> |
| 1038 | help_to_html(aCommand[i].zHelp, cgi_output_blob()); |
| 1039 | @ </dd> |
| 1040 | occHelp[aCommand[i].iHelp] = 0; |
| 1041 | } |
| 1042 | } |
| 1043 | @ </dl> |
| 1044 | blob_reset(&buf); |
| 1045 | style_finish_page(); |
| 1046 | } |
| 1047 |
+5
-7
| --- src/file.c | ||
| +++ src/file.c | ||
| @@ -38,11 +38,11 @@ | ||
| 38 | 38 | # include <sys/time.h> |
| 39 | 39 | #endif |
| 40 | 40 | |
| 41 | 41 | #if INTERFACE |
| 42 | 42 | |
| 43 | -/* Many APIs take a eFType argument which must be one of ExtFILE, RepoFILE, | |
| 43 | +/* Many APIs take an eFType argument which must be one of ExtFILE, RepoFILE, | |
| 44 | 44 | ** or SymFILE. |
| 45 | 45 | ** |
| 46 | 46 | ** The difference is in the handling of symbolic links. RepoFILE should be |
| 47 | 47 | ** used for files that are under management by a Fossil repository. ExtFILE |
| 48 | 48 | ** should be used for files that are not under management. SymFILE is for |
| @@ -1192,14 +1192,13 @@ | ||
| 1192 | 1192 | ** |
| 1193 | 1193 | ** Store the value of the CWD in zBuf which is nBuf bytes in size. |
| 1194 | 1194 | ** or if zBuf==0, allocate space to hold the result using fossil_malloc(). |
| 1195 | 1195 | */ |
| 1196 | 1196 | char *file_getcwd(char *zBuf, int nBuf){ |
| 1197 | - char zTemp[2000]; | |
| 1198 | 1197 | if( zBuf==0 ){ |
| 1199 | - zBuf = zTemp; | |
| 1200 | - nBuf = sizeof(zTemp); | |
| 1198 | + char zTemp[2000]; | |
| 1199 | + return fossil_strdup(file_getcwd(zTemp, sizeof(zTemp))); | |
| 1201 | 1200 | } |
| 1202 | 1201 | #ifdef _WIN32 |
| 1203 | 1202 | win32_getcwd(zBuf, nBuf); |
| 1204 | 1203 | #else |
| 1205 | 1204 | if( getcwd(zBuf, nBuf-1)==0 ){ |
| @@ -1209,11 +1208,11 @@ | ||
| 1209 | 1208 | fossil_fatal("cannot find current working directory; %s", |
| 1210 | 1209 | strerror(errno)); |
| 1211 | 1210 | } |
| 1212 | 1211 | } |
| 1213 | 1212 | #endif |
| 1214 | - return zBuf==zTemp ? fossil_strdup(zBuf) : zBuf; | |
| 1213 | + return zBuf; | |
| 1215 | 1214 | } |
| 1216 | 1215 | |
| 1217 | 1216 | /* |
| 1218 | 1217 | ** Return true if zPath is an absolute pathname. Return false |
| 1219 | 1218 | ** if it is relative. |
| @@ -2493,12 +2492,11 @@ | ||
| 2493 | 2492 | Stmt q; |
| 2494 | 2493 | Blob absBuffer = empty_blob; /* Absolute filename buffer */ |
| 2495 | 2494 | |
| 2496 | 2495 | verboseFlag = find_option("verbose","v",0)!=0; |
| 2497 | 2496 | quietFlag = find_option("quiet","q",0)!=0 || g.fQuiet; |
| 2498 | - dryRunFlag = find_option("dry-run","n",0)!=0 | |
| 2499 | - || find_option("dryrun",0,0)!=0; | |
| 2497 | + dryRunFlag = find_option("dry-run","n",0)!=0; | |
| 2500 | 2498 | zGlobList = find_option("glob", "g",1); |
| 2501 | 2499 | zGlobFile = find_option("globfile", "G",1); |
| 2502 | 2500 | |
| 2503 | 2501 | if(zGlobList && zGlobFile){ |
| 2504 | 2502 | fossil_fatal("Options -g and -G may not be used together."); |
| 2505 | 2503 |
| --- src/file.c | |
| +++ src/file.c | |
| @@ -38,11 +38,11 @@ | |
| 38 | # include <sys/time.h> |
| 39 | #endif |
| 40 | |
| 41 | #if INTERFACE |
| 42 | |
| 43 | /* Many APIs take a eFType argument which must be one of ExtFILE, RepoFILE, |
| 44 | ** or SymFILE. |
| 45 | ** |
| 46 | ** The difference is in the handling of symbolic links. RepoFILE should be |
| 47 | ** used for files that are under management by a Fossil repository. ExtFILE |
| 48 | ** should be used for files that are not under management. SymFILE is for |
| @@ -1192,14 +1192,13 @@ | |
| 1192 | ** |
| 1193 | ** Store the value of the CWD in zBuf which is nBuf bytes in size. |
| 1194 | ** or if zBuf==0, allocate space to hold the result using fossil_malloc(). |
| 1195 | */ |
| 1196 | char *file_getcwd(char *zBuf, int nBuf){ |
| 1197 | char zTemp[2000]; |
| 1198 | if( zBuf==0 ){ |
| 1199 | zBuf = zTemp; |
| 1200 | nBuf = sizeof(zTemp); |
| 1201 | } |
| 1202 | #ifdef _WIN32 |
| 1203 | win32_getcwd(zBuf, nBuf); |
| 1204 | #else |
| 1205 | if( getcwd(zBuf, nBuf-1)==0 ){ |
| @@ -1209,11 +1208,11 @@ | |
| 1209 | fossil_fatal("cannot find current working directory; %s", |
| 1210 | strerror(errno)); |
| 1211 | } |
| 1212 | } |
| 1213 | #endif |
| 1214 | return zBuf==zTemp ? fossil_strdup(zBuf) : zBuf; |
| 1215 | } |
| 1216 | |
| 1217 | /* |
| 1218 | ** Return true if zPath is an absolute pathname. Return false |
| 1219 | ** if it is relative. |
| @@ -2493,12 +2492,11 @@ | |
| 2493 | Stmt q; |
| 2494 | Blob absBuffer = empty_blob; /* Absolute filename buffer */ |
| 2495 | |
| 2496 | verboseFlag = find_option("verbose","v",0)!=0; |
| 2497 | quietFlag = find_option("quiet","q",0)!=0 || g.fQuiet; |
| 2498 | dryRunFlag = find_option("dry-run","n",0)!=0 |
| 2499 | || find_option("dryrun",0,0)!=0; |
| 2500 | zGlobList = find_option("glob", "g",1); |
| 2501 | zGlobFile = find_option("globfile", "G",1); |
| 2502 | |
| 2503 | if(zGlobList && zGlobFile){ |
| 2504 | fossil_fatal("Options -g and -G may not be used together."); |
| 2505 |
| --- src/file.c | |
| +++ src/file.c | |
| @@ -38,11 +38,11 @@ | |
| 38 | # include <sys/time.h> |
| 39 | #endif |
| 40 | |
| 41 | #if INTERFACE |
| 42 | |
| 43 | /* Many APIs take an eFType argument which must be one of ExtFILE, RepoFILE, |
| 44 | ** or SymFILE. |
| 45 | ** |
| 46 | ** The difference is in the handling of symbolic links. RepoFILE should be |
| 47 | ** used for files that are under management by a Fossil repository. ExtFILE |
| 48 | ** should be used for files that are not under management. SymFILE is for |
| @@ -1192,14 +1192,13 @@ | |
| 1192 | ** |
| 1193 | ** Store the value of the CWD in zBuf which is nBuf bytes in size. |
| 1194 | ** or if zBuf==0, allocate space to hold the result using fossil_malloc(). |
| 1195 | */ |
| 1196 | char *file_getcwd(char *zBuf, int nBuf){ |
| 1197 | if( zBuf==0 ){ |
| 1198 | char zTemp[2000]; |
| 1199 | return fossil_strdup(file_getcwd(zTemp, sizeof(zTemp))); |
| 1200 | } |
| 1201 | #ifdef _WIN32 |
| 1202 | win32_getcwd(zBuf, nBuf); |
| 1203 | #else |
| 1204 | if( getcwd(zBuf, nBuf-1)==0 ){ |
| @@ -1209,11 +1208,11 @@ | |
| 1208 | fossil_fatal("cannot find current working directory; %s", |
| 1209 | strerror(errno)); |
| 1210 | } |
| 1211 | } |
| 1212 | #endif |
| 1213 | return zBuf; |
| 1214 | } |
| 1215 | |
| 1216 | /* |
| 1217 | ** Return true if zPath is an absolute pathname. Return false |
| 1218 | ** if it is relative. |
| @@ -2493,12 +2492,11 @@ | |
| 2492 | Stmt q; |
| 2493 | Blob absBuffer = empty_blob; /* Absolute filename buffer */ |
| 2494 | |
| 2495 | verboseFlag = find_option("verbose","v",0)!=0; |
| 2496 | quietFlag = find_option("quiet","q",0)!=0 || g.fQuiet; |
| 2497 | dryRunFlag = find_option("dry-run","n",0)!=0; |
| 2498 | zGlobList = find_option("glob", "g",1); |
| 2499 | zGlobFile = find_option("globfile", "G",1); |
| 2500 | |
| 2501 | if(zGlobList && zGlobFile){ |
| 2502 | fossil_fatal("Options -g and -G may not be used together."); |
| 2503 |
+2
-1
| --- src/forum.c | ||
| +++ src/forum.c | ||
| @@ -862,11 +862,10 @@ | ||
| 862 | 862 | } |
| 863 | 863 | froot = db_int(0, "SELECT froot FROM forumpost WHERE fpid=%d", fpid); |
| 864 | 864 | if( froot==0 ){ |
| 865 | 865 | webpage_notfound_error("Not a forum post: \"%s\"", zName); |
| 866 | 866 | } |
| 867 | - if( fossil_strcmp(g.zPath,"forumthread")==0 ) fpid = 0; | |
| 868 | 867 | |
| 869 | 868 | /* Decode the mode parameters. */ |
| 870 | 869 | if( bRaw ){ |
| 871 | 870 | mode = FD_RAW; |
| 872 | 871 | bUnf = 1; |
| @@ -916,10 +915,11 @@ | ||
| 916 | 915 | } |
| 917 | 916 | style_submenu_checkbox("unf", "Unformatted", 0, 0); |
| 918 | 917 | style_submenu_checkbox("hist", "History", 0, 0); |
| 919 | 918 | |
| 920 | 919 | /* Display the thread. */ |
| 920 | + if( fossil_strcmp(g.zPath,"forumthread")==0 ) fpid = 0; | |
| 921 | 921 | forum_display_thread(froot, fpid, mode, autoMode, bUnf, bHist); |
| 922 | 922 | |
| 923 | 923 | /* Emit Forum Javascript. */ |
| 924 | 924 | builtin_request_js("forum.js"); |
| 925 | 925 | forum_emit_js(); |
| @@ -1397,10 +1397,11 @@ | ||
| 1397 | 1397 | login_needed(g.anon.RdForum); |
| 1398 | 1398 | return; |
| 1399 | 1399 | } |
| 1400 | 1400 | style_set_current_feature("forum"); |
| 1401 | 1401 | style_header( "%s", isSearch ? "Forum Search Results" : "Forum" ); |
| 1402 | + style_submenu_element("Timeline", "%R/timeline?ss=v&y=f&vfx"); | |
| 1402 | 1403 | if( g.perm.WrForum ){ |
| 1403 | 1404 | style_submenu_element("New Thread","%R/forumnew"); |
| 1404 | 1405 | }else{ |
| 1405 | 1406 | /* Can't combine this with previous case using the ternary operator |
| 1406 | 1407 | * because that causes an error yelling about "non-constant format" |
| 1407 | 1408 |
| --- src/forum.c | |
| +++ src/forum.c | |
| @@ -862,11 +862,10 @@ | |
| 862 | } |
| 863 | froot = db_int(0, "SELECT froot FROM forumpost WHERE fpid=%d", fpid); |
| 864 | if( froot==0 ){ |
| 865 | webpage_notfound_error("Not a forum post: \"%s\"", zName); |
| 866 | } |
| 867 | if( fossil_strcmp(g.zPath,"forumthread")==0 ) fpid = 0; |
| 868 | |
| 869 | /* Decode the mode parameters. */ |
| 870 | if( bRaw ){ |
| 871 | mode = FD_RAW; |
| 872 | bUnf = 1; |
| @@ -916,10 +915,11 @@ | |
| 916 | } |
| 917 | style_submenu_checkbox("unf", "Unformatted", 0, 0); |
| 918 | style_submenu_checkbox("hist", "History", 0, 0); |
| 919 | |
| 920 | /* Display the thread. */ |
| 921 | forum_display_thread(froot, fpid, mode, autoMode, bUnf, bHist); |
| 922 | |
| 923 | /* Emit Forum Javascript. */ |
| 924 | builtin_request_js("forum.js"); |
| 925 | forum_emit_js(); |
| @@ -1397,10 +1397,11 @@ | |
| 1397 | login_needed(g.anon.RdForum); |
| 1398 | return; |
| 1399 | } |
| 1400 | style_set_current_feature("forum"); |
| 1401 | style_header( "%s", isSearch ? "Forum Search Results" : "Forum" ); |
| 1402 | if( g.perm.WrForum ){ |
| 1403 | style_submenu_element("New Thread","%R/forumnew"); |
| 1404 | }else{ |
| 1405 | /* Can't combine this with previous case using the ternary operator |
| 1406 | * because that causes an error yelling about "non-constant format" |
| 1407 |
| --- src/forum.c | |
| +++ src/forum.c | |
| @@ -862,11 +862,10 @@ | |
| 862 | } |
| 863 | froot = db_int(0, "SELECT froot FROM forumpost WHERE fpid=%d", fpid); |
| 864 | if( froot==0 ){ |
| 865 | webpage_notfound_error("Not a forum post: \"%s\"", zName); |
| 866 | } |
| 867 | |
| 868 | /* Decode the mode parameters. */ |
| 869 | if( bRaw ){ |
| 870 | mode = FD_RAW; |
| 871 | bUnf = 1; |
| @@ -916,10 +915,11 @@ | |
| 915 | } |
| 916 | style_submenu_checkbox("unf", "Unformatted", 0, 0); |
| 917 | style_submenu_checkbox("hist", "History", 0, 0); |
| 918 | |
| 919 | /* Display the thread. */ |
| 920 | if( fossil_strcmp(g.zPath,"forumthread")==0 ) fpid = 0; |
| 921 | forum_display_thread(froot, fpid, mode, autoMode, bUnf, bHist); |
| 922 | |
| 923 | /* Emit Forum Javascript. */ |
| 924 | builtin_request_js("forum.js"); |
| 925 | forum_emit_js(); |
| @@ -1397,10 +1397,11 @@ | |
| 1397 | login_needed(g.anon.RdForum); |
| 1398 | return; |
| 1399 | } |
| 1400 | style_set_current_feature("forum"); |
| 1401 | style_header( "%s", isSearch ? "Forum Search Results" : "Forum" ); |
| 1402 | style_submenu_element("Timeline", "%R/timeline?ss=v&y=f&vfx"); |
| 1403 | if( g.perm.WrForum ){ |
| 1404 | style_submenu_element("New Thread","%R/forumnew"); |
| 1405 | }else{ |
| 1406 | /* Can't combine this with previous case using the ternary operator |
| 1407 | * because that causes an error yelling about "non-constant format" |
| 1408 |
+3
-3
| --- src/fossil.page.pikchrshowasm.js | ||
| +++ src/fossil.page.pikchrshowasm.js | ||
| @@ -170,14 +170,14 @@ | ||
| 170 | 170 | |
| 171 | 171 | PS.e.previewModeLabel.innerText = |
| 172 | 172 | PS.renderModeLabels[PS.renderModes[PS.renderModes.selectedIndex]]; |
| 173 | 173 | |
| 174 | 174 | /** |
| 175 | - The 'pikchrshow-ready' event is fired (with no payload) when the | |
| 175 | + The 'pikchr-ready' event is fired (with no payload) when the | |
| 176 | 176 | wasm module has finished loading. */ |
| 177 | - PS.addMsgHandler('pikchrshow-ready', function(){ | |
| 178 | - PS.clearMsgHandlers('pikchrshow-ready'); | |
| 177 | + PS.addMsgHandler('pikchr-ready', function(){ | |
| 178 | + PS.clearMsgHandlers('pikchr-ready'); | |
| 179 | 179 | F.page.onPikchrshowLoaded(); |
| 180 | 180 | }); |
| 181 | 181 | |
| 182 | 182 | /** |
| 183 | 183 | Performs all app initialization which must wait until after the |
| 184 | 184 |
| --- src/fossil.page.pikchrshowasm.js | |
| +++ src/fossil.page.pikchrshowasm.js | |
| @@ -170,14 +170,14 @@ | |
| 170 | |
| 171 | PS.e.previewModeLabel.innerText = |
| 172 | PS.renderModeLabels[PS.renderModes[PS.renderModes.selectedIndex]]; |
| 173 | |
| 174 | /** |
| 175 | The 'pikchrshow-ready' event is fired (with no payload) when the |
| 176 | wasm module has finished loading. */ |
| 177 | PS.addMsgHandler('pikchrshow-ready', function(){ |
| 178 | PS.clearMsgHandlers('pikchrshow-ready'); |
| 179 | F.page.onPikchrshowLoaded(); |
| 180 | }); |
| 181 | |
| 182 | /** |
| 183 | Performs all app initialization which must wait until after the |
| 184 |
| --- src/fossil.page.pikchrshowasm.js | |
| +++ src/fossil.page.pikchrshowasm.js | |
| @@ -170,14 +170,14 @@ | |
| 170 | |
| 171 | PS.e.previewModeLabel.innerText = |
| 172 | PS.renderModeLabels[PS.renderModes[PS.renderModes.selectedIndex]]; |
| 173 | |
| 174 | /** |
| 175 | The 'pikchr-ready' event is fired (with no payload) when the |
| 176 | wasm module has finished loading. */ |
| 177 | PS.addMsgHandler('pikchr-ready', function(){ |
| 178 | PS.clearMsgHandlers('pikchr-ready'); |
| 179 | F.page.onPikchrshowLoaded(); |
| 180 | }); |
| 181 | |
| 182 | /** |
| 183 | Performs all app initialization which must wait until after the |
| 184 |
+1
-1
| --- src/http_ssl.c | ||
| +++ src/http_ssl.c | ||
| @@ -622,11 +622,11 @@ | ||
| 622 | 622 | X509_free(cert); |
| 623 | 623 | return 0; |
| 624 | 624 | } |
| 625 | 625 | |
| 626 | 626 | /* |
| 627 | -** Remember that the cert with the given hash is a acceptable for | |
| 627 | +** Remember that the cert with the given hash is acceptable for | |
| 628 | 628 | ** use with pUrlData->name. |
| 629 | 629 | */ |
| 630 | 630 | LOCAL void ssl_remember_certificate_exception( |
| 631 | 631 | UrlData *pUrlData, |
| 632 | 632 | const char *zHash |
| 633 | 633 |
| --- src/http_ssl.c | |
| +++ src/http_ssl.c | |
| @@ -622,11 +622,11 @@ | |
| 622 | X509_free(cert); |
| 623 | return 0; |
| 624 | } |
| 625 | |
| 626 | /* |
| 627 | ** Remember that the cert with the given hash is a acceptable for |
| 628 | ** use with pUrlData->name. |
| 629 | */ |
| 630 | LOCAL void ssl_remember_certificate_exception( |
| 631 | UrlData *pUrlData, |
| 632 | const char *zHash |
| 633 |
| --- src/http_ssl.c | |
| +++ src/http_ssl.c | |
| @@ -622,11 +622,11 @@ | |
| 622 | X509_free(cert); |
| 623 | return 0; |
| 624 | } |
| 625 | |
| 626 | /* |
| 627 | ** Remember that the cert with the given hash is acceptable for |
| 628 | ** use with pUrlData->name. |
| 629 | */ |
| 630 | LOCAL void ssl_remember_certificate_exception( |
| 631 | UrlData *pUrlData, |
| 632 | const char *zHash |
| 633 |
+12
-7
| --- src/info.c | ||
| +++ src/info.c | ||
| @@ -181,11 +181,11 @@ | ||
| 181 | 181 | ** information about that repository. |
| 182 | 182 | ** |
| 183 | 183 | ** If the argument is a repository name, then the --verbose option shows |
| 184 | 184 | ** all known check-out locations for that repository and all URLs used |
| 185 | 185 | ** to access the repository. The --verbose is (currently) a no-op if |
| 186 | -** the argument is the name of a object within the repository. | |
| 186 | +** the argument is the name of an object within the repository. | |
| 187 | 187 | ** |
| 188 | 188 | ** Use the "finfo" command to get information about a specific |
| 189 | 189 | ** file in a checkout. |
| 190 | 190 | ** |
| 191 | 191 | ** Options: |
| @@ -680,11 +680,12 @@ | ||
| 680 | 680 | zUser = zEUser ? zEUser : zOrigUser; |
| 681 | 681 | zComment = db_column_text(&q1, 3); |
| 682 | 682 | zDate = db_column_text(&q1,1); |
| 683 | 683 | zOrigDate = db_column_text(&q1, 4); |
| 684 | 684 | if( zOrigDate==0 ) zOrigDate = zDate; |
| 685 | - @ <div class="section">Overview</div> | |
| 685 | + @ <div class="section accordion">Overview</div> | |
| 686 | + @ <div class="accordion_panel"> | |
| 686 | 687 | @ <table class="label-value"> |
| 687 | 688 | @ <tr><th>Comment:</th><td class="infoComment">\ |
| 688 | 689 | @ %!W(zEComment?zEComment:zComment)</td></tr> |
| 689 | 690 | |
| 690 | 691 | /* The Download: line */ |
| @@ -868,17 +869,21 @@ | ||
| 868 | 869 | }else{ |
| 869 | 870 | style_header("Check-in Information"); |
| 870 | 871 | login_anonymous_available(); |
| 871 | 872 | } |
| 872 | 873 | db_finalize(&q1); |
| 874 | + @ </div> | |
| 875 | + builtin_request_js("accordion.js"); | |
| 873 | 876 | if( !PB("nowiki") ){ |
| 874 | 877 | wiki_render_associated("checkin", zUuid, 0); |
| 875 | 878 | } |
| 876 | - render_backlink_graph(zUuid, "<div class=\"section\">References</div>\n"); | |
| 877 | - @ <div class="section">Context</div> | |
| 879 | + render_backlink_graph(zUuid, | |
| 880 | + "<div class=\"section accordion\">References</div>\n"); | |
| 881 | + @ <div class="section accordion">Context</div><div class="accordion_panel"> | |
| 878 | 882 | render_checkin_context(rid, 0, 0, 0); |
| 879 | - @ <div class="section">Changes</div> | |
| 883 | + @ </div><div class="section accordion">Changes</div> | |
| 884 | + @ <div class="accordion_panel"> | |
| 880 | 885 | @ <div class="sectionmenu"> |
| 881 | 886 | pCfg = construct_diff_flags(diffType, &DCfg); |
| 882 | 887 | DCfg.pRe = pRe; |
| 883 | 888 | zW = (DCfg.diffFlags&DIFF_IGNORE_ALLWS)?"&w":""; |
| 884 | 889 | if( diffType!=0 ){ |
| @@ -907,11 +912,11 @@ | ||
| 907 | 912 | @ Patch</a> |
| 908 | 913 | } |
| 909 | 914 | if( g.perm.Admin ){ |
| 910 | 915 | @ %z(chref("button","%R/mlink?ci=%!S",zUuid))MLink Table</a> |
| 911 | 916 | } |
| 912 | - @</div> | |
| 917 | + @ </div> | |
| 913 | 918 | if( pRe ){ |
| 914 | 919 | @ <p><b>Only differences that match regular expression "%h(zRe)" |
| 915 | 920 | @ are shown.</b></p> |
| 916 | 921 | } |
| 917 | 922 | db_prepare(&q3, |
| @@ -935,10 +940,11 @@ | ||
| 935 | 940 | const char *zOldName = db_column_text(&q3, 4); |
| 936 | 941 | append_file_change_line(zUuid, zName, zOld, zNew, zOldName, |
| 937 | 942 | pCfg,mperm); |
| 938 | 943 | } |
| 939 | 944 | db_finalize(&q3); |
| 945 | + @ </div> | |
| 940 | 946 | append_diff_javascript(diffType); |
| 941 | 947 | style_finish_page(); |
| 942 | 948 | } |
| 943 | 949 | |
| 944 | 950 | /* |
| @@ -3539,11 +3545,10 @@ | ||
| 3539 | 3545 | pzNewTags = find_repeatable_option("tag",0,&nTags); |
| 3540 | 3546 | pzCancelTags = find_repeatable_option("cancel",0,&nCancels); |
| 3541 | 3547 | fClose = find_option("close",0,0)!=0; |
| 3542 | 3548 | fHide = find_option("hide",0,0)!=0; |
| 3543 | 3549 | fDryRun = find_option("dry-run","n",0)!=0; |
| 3544 | - if( fDryRun==0 ) fDryRun = find_option("dryrun","n",0)!=0; | |
| 3545 | 3550 | zChngTime = find_option("date-override",0,1); |
| 3546 | 3551 | if( zChngTime==0 ) zChngTime = find_option("chngtime",0,1); |
| 3547 | 3552 | zUserOvrd = find_option("user-override",0,1); |
| 3548 | 3553 | db_find_and_open_repository(0,0); |
| 3549 | 3554 | user_select(); |
| 3550 | 3555 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -181,11 +181,11 @@ | |
| 181 | ** information about that repository. |
| 182 | ** |
| 183 | ** If the argument is a repository name, then the --verbose option shows |
| 184 | ** all known check-out locations for that repository and all URLs used |
| 185 | ** to access the repository. The --verbose is (currently) a no-op if |
| 186 | ** the argument is the name of a object within the repository. |
| 187 | ** |
| 188 | ** Use the "finfo" command to get information about a specific |
| 189 | ** file in a checkout. |
| 190 | ** |
| 191 | ** Options: |
| @@ -680,11 +680,12 @@ | |
| 680 | zUser = zEUser ? zEUser : zOrigUser; |
| 681 | zComment = db_column_text(&q1, 3); |
| 682 | zDate = db_column_text(&q1,1); |
| 683 | zOrigDate = db_column_text(&q1, 4); |
| 684 | if( zOrigDate==0 ) zOrigDate = zDate; |
| 685 | @ <div class="section">Overview</div> |
| 686 | @ <table class="label-value"> |
| 687 | @ <tr><th>Comment:</th><td class="infoComment">\ |
| 688 | @ %!W(zEComment?zEComment:zComment)</td></tr> |
| 689 | |
| 690 | /* The Download: line */ |
| @@ -868,17 +869,21 @@ | |
| 868 | }else{ |
| 869 | style_header("Check-in Information"); |
| 870 | login_anonymous_available(); |
| 871 | } |
| 872 | db_finalize(&q1); |
| 873 | if( !PB("nowiki") ){ |
| 874 | wiki_render_associated("checkin", zUuid, 0); |
| 875 | } |
| 876 | render_backlink_graph(zUuid, "<div class=\"section\">References</div>\n"); |
| 877 | @ <div class="section">Context</div> |
| 878 | render_checkin_context(rid, 0, 0, 0); |
| 879 | @ <div class="section">Changes</div> |
| 880 | @ <div class="sectionmenu"> |
| 881 | pCfg = construct_diff_flags(diffType, &DCfg); |
| 882 | DCfg.pRe = pRe; |
| 883 | zW = (DCfg.diffFlags&DIFF_IGNORE_ALLWS)?"&w":""; |
| 884 | if( diffType!=0 ){ |
| @@ -907,11 +912,11 @@ | |
| 907 | @ Patch</a> |
| 908 | } |
| 909 | if( g.perm.Admin ){ |
| 910 | @ %z(chref("button","%R/mlink?ci=%!S",zUuid))MLink Table</a> |
| 911 | } |
| 912 | @</div> |
| 913 | if( pRe ){ |
| 914 | @ <p><b>Only differences that match regular expression "%h(zRe)" |
| 915 | @ are shown.</b></p> |
| 916 | } |
| 917 | db_prepare(&q3, |
| @@ -935,10 +940,11 @@ | |
| 935 | const char *zOldName = db_column_text(&q3, 4); |
| 936 | append_file_change_line(zUuid, zName, zOld, zNew, zOldName, |
| 937 | pCfg,mperm); |
| 938 | } |
| 939 | db_finalize(&q3); |
| 940 | append_diff_javascript(diffType); |
| 941 | style_finish_page(); |
| 942 | } |
| 943 | |
| 944 | /* |
| @@ -3539,11 +3545,10 @@ | |
| 3539 | pzNewTags = find_repeatable_option("tag",0,&nTags); |
| 3540 | pzCancelTags = find_repeatable_option("cancel",0,&nCancels); |
| 3541 | fClose = find_option("close",0,0)!=0; |
| 3542 | fHide = find_option("hide",0,0)!=0; |
| 3543 | fDryRun = find_option("dry-run","n",0)!=0; |
| 3544 | if( fDryRun==0 ) fDryRun = find_option("dryrun","n",0)!=0; |
| 3545 | zChngTime = find_option("date-override",0,1); |
| 3546 | if( zChngTime==0 ) zChngTime = find_option("chngtime",0,1); |
| 3547 | zUserOvrd = find_option("user-override",0,1); |
| 3548 | db_find_and_open_repository(0,0); |
| 3549 | user_select(); |
| 3550 |
| --- src/info.c | |
| +++ src/info.c | |
| @@ -181,11 +181,11 @@ | |
| 181 | ** information about that repository. |
| 182 | ** |
| 183 | ** If the argument is a repository name, then the --verbose option shows |
| 184 | ** all known check-out locations for that repository and all URLs used |
| 185 | ** to access the repository. The --verbose is (currently) a no-op if |
| 186 | ** the argument is the name of an object within the repository. |
| 187 | ** |
| 188 | ** Use the "finfo" command to get information about a specific |
| 189 | ** file in a checkout. |
| 190 | ** |
| 191 | ** Options: |
| @@ -680,11 +680,12 @@ | |
| 680 | zUser = zEUser ? zEUser : zOrigUser; |
| 681 | zComment = db_column_text(&q1, 3); |
| 682 | zDate = db_column_text(&q1,1); |
| 683 | zOrigDate = db_column_text(&q1, 4); |
| 684 | if( zOrigDate==0 ) zOrigDate = zDate; |
| 685 | @ <div class="section accordion">Overview</div> |
| 686 | @ <div class="accordion_panel"> |
| 687 | @ <table class="label-value"> |
| 688 | @ <tr><th>Comment:</th><td class="infoComment">\ |
| 689 | @ %!W(zEComment?zEComment:zComment)</td></tr> |
| 690 | |
| 691 | /* The Download: line */ |
| @@ -868,17 +869,21 @@ | |
| 869 | }else{ |
| 870 | style_header("Check-in Information"); |
| 871 | login_anonymous_available(); |
| 872 | } |
| 873 | db_finalize(&q1); |
| 874 | @ </div> |
| 875 | builtin_request_js("accordion.js"); |
| 876 | if( !PB("nowiki") ){ |
| 877 | wiki_render_associated("checkin", zUuid, 0); |
| 878 | } |
| 879 | render_backlink_graph(zUuid, |
| 880 | "<div class=\"section accordion\">References</div>\n"); |
| 881 | @ <div class="section accordion">Context</div><div class="accordion_panel"> |
| 882 | render_checkin_context(rid, 0, 0, 0); |
| 883 | @ </div><div class="section accordion">Changes</div> |
| 884 | @ <div class="accordion_panel"> |
| 885 | @ <div class="sectionmenu"> |
| 886 | pCfg = construct_diff_flags(diffType, &DCfg); |
| 887 | DCfg.pRe = pRe; |
| 888 | zW = (DCfg.diffFlags&DIFF_IGNORE_ALLWS)?"&w":""; |
| 889 | if( diffType!=0 ){ |
| @@ -907,11 +912,11 @@ | |
| 912 | @ Patch</a> |
| 913 | } |
| 914 | if( g.perm.Admin ){ |
| 915 | @ %z(chref("button","%R/mlink?ci=%!S",zUuid))MLink Table</a> |
| 916 | } |
| 917 | @ </div> |
| 918 | if( pRe ){ |
| 919 | @ <p><b>Only differences that match regular expression "%h(zRe)" |
| 920 | @ are shown.</b></p> |
| 921 | } |
| 922 | db_prepare(&q3, |
| @@ -935,10 +940,11 @@ | |
| 940 | const char *zOldName = db_column_text(&q3, 4); |
| 941 | append_file_change_line(zUuid, zName, zOld, zNew, zOldName, |
| 942 | pCfg,mperm); |
| 943 | } |
| 944 | db_finalize(&q3); |
| 945 | @ </div> |
| 946 | append_diff_javascript(diffType); |
| 947 | style_finish_page(); |
| 948 | } |
| 949 | |
| 950 | /* |
| @@ -3539,11 +3545,10 @@ | |
| 3545 | pzNewTags = find_repeatable_option("tag",0,&nTags); |
| 3546 | pzCancelTags = find_repeatable_option("cancel",0,&nCancels); |
| 3547 | fClose = find_option("close",0,0)!=0; |
| 3548 | fHide = find_option("hide",0,0)!=0; |
| 3549 | fDryRun = find_option("dry-run","n",0)!=0; |
| 3550 | zChngTime = find_option("date-override",0,1); |
| 3551 | if( zChngTime==0 ) zChngTime = find_option("chngtime",0,1); |
| 3552 | zUserOvrd = find_option("user-override",0,1); |
| 3553 | db_find_and_open_repository(0,0); |
| 3554 | user_select(); |
| 3555 |
+1
-1
| --- src/interwiki.c | ||
| +++ src/interwiki.c | ||
| @@ -167,11 +167,11 @@ | ||
| 167 | 167 | ** |
| 168 | 168 | ** Delete one or more interwiki maps. |
| 169 | 169 | ** |
| 170 | 170 | ** > fossil interwiki edit TAG --base URL --hash PATH --wiki PATH |
| 171 | 171 | ** |
| 172 | -** Create a interwiki referenced call TAG. The base URL is | |
| 172 | +** Create an interwiki referenced call TAG. The base URL is | |
| 173 | 173 | ** the --base option, which is required. The --hash and --wiki |
| 174 | 174 | ** paths are optional. The TAG must be lower-case alphanumeric |
| 175 | 175 | ** and must be unique. A new entry is created if it does not |
| 176 | 176 | ** already exit. |
| 177 | 177 | ** |
| 178 | 178 |
| --- src/interwiki.c | |
| +++ src/interwiki.c | |
| @@ -167,11 +167,11 @@ | |
| 167 | ** |
| 168 | ** Delete one or more interwiki maps. |
| 169 | ** |
| 170 | ** > fossil interwiki edit TAG --base URL --hash PATH --wiki PATH |
| 171 | ** |
| 172 | ** Create a interwiki referenced call TAG. The base URL is |
| 173 | ** the --base option, which is required. The --hash and --wiki |
| 174 | ** paths are optional. The TAG must be lower-case alphanumeric |
| 175 | ** and must be unique. A new entry is created if it does not |
| 176 | ** already exit. |
| 177 | ** |
| 178 |
| --- src/interwiki.c | |
| +++ src/interwiki.c | |
| @@ -167,11 +167,11 @@ | |
| 167 | ** |
| 168 | ** Delete one or more interwiki maps. |
| 169 | ** |
| 170 | ** > fossil interwiki edit TAG --base URL --hash PATH --wiki PATH |
| 171 | ** |
| 172 | ** Create an interwiki referenced call TAG. The base URL is |
| 173 | ** the --base option, which is required. The --hash and --wiki |
| 174 | ** paths are optional. The TAG must be lower-case alphanumeric |
| 175 | ** and must be unique. A new entry is created if it does not |
| 176 | ** already exit. |
| 177 | ** |
| 178 |
+1
-1
| --- src/json_branch.c | ||
| +++ src/json_branch.c | ||
| @@ -128,11 +128,11 @@ | ||
| 128 | 128 | cson_object_set(pay,"current",json_new_string(zCurrent)); |
| 129 | 129 | } |
| 130 | 130 | } |
| 131 | 131 | |
| 132 | 132 | |
| 133 | - branch_prepare_list_query(&q, branchListFlags, 0); | |
| 133 | + branch_prepare_list_query(&q, branchListFlags, 0, 0); | |
| 134 | 134 | cson_object_set(pay,"branches",listV); |
| 135 | 135 | while((SQLITE_ROW==db_step(&q))){ |
| 136 | 136 | cson_value * v = cson_sqlite3_column_to_value(q.pStmt,0); |
| 137 | 137 | if(v){ |
| 138 | 138 | cson_array_append(list,v); |
| 139 | 139 |
| --- src/json_branch.c | |
| +++ src/json_branch.c | |
| @@ -128,11 +128,11 @@ | |
| 128 | cson_object_set(pay,"current",json_new_string(zCurrent)); |
| 129 | } |
| 130 | } |
| 131 | |
| 132 | |
| 133 | branch_prepare_list_query(&q, branchListFlags, 0); |
| 134 | cson_object_set(pay,"branches",listV); |
| 135 | while((SQLITE_ROW==db_step(&q))){ |
| 136 | cson_value * v = cson_sqlite3_column_to_value(q.pStmt,0); |
| 137 | if(v){ |
| 138 | cson_array_append(list,v); |
| 139 |
| --- src/json_branch.c | |
| +++ src/json_branch.c | |
| @@ -128,11 +128,11 @@ | |
| 128 | cson_object_set(pay,"current",json_new_string(zCurrent)); |
| 129 | } |
| 130 | } |
| 131 | |
| 132 | |
| 133 | branch_prepare_list_query(&q, branchListFlags, 0, 0); |
| 134 | cson_object_set(pay,"branches",listV); |
| 135 | while((SQLITE_ROW==db_step(&q))){ |
| 136 | cson_value * v = cson_sqlite3_column_to_value(q.pStmt,0); |
| 137 | if(v){ |
| 138 | cson_array_append(list,v); |
| 139 |
+7
-6
| --- src/login.c | ||
| +++ src/login.c | ||
| @@ -2127,16 +2127,17 @@ | ||
| 2127 | 2127 | ** |
| 2128 | 2128 | ** > fossil login-group |
| 2129 | 2129 | ** |
| 2130 | 2130 | ** Show the login-group to which the repository belongs. |
| 2131 | 2131 | ** |
| 2132 | -** > fossil login-group join ?--name NAME? | |
| 2132 | +** > fossil login-group join REPO ?--name NAME? | |
| 2133 | 2133 | ** |
| 2134 | 2134 | ** Add this repository to login group to which REPO belongs, or creates a |
| 2135 | 2135 | ** new login group between itself and REPO if REPO does not already belong |
| 2136 | 2136 | ** to a login-group. When creating a new login-group, the name of the new |
| 2137 | -** group is determined by the "--name" option. | |
| 2137 | +** group is determined by the "--name" option. REPO may optionally be | |
| 2138 | +** specified using the -R REPO flag. | |
| 2138 | 2139 | ** |
| 2139 | 2140 | ** > fossil login-group leave |
| 2140 | 2141 | ** |
| 2141 | 2142 | ** Takes the repository out of whatever login group it is currently |
| 2142 | 2143 | ** a part of. |
| @@ -2163,17 +2164,17 @@ | ||
| 2163 | 2164 | if( g.argc>2 ){ |
| 2164 | 2165 | zCmd = g.argv[2]; |
| 2165 | 2166 | nCmd = (int)strlen(zCmd); |
| 2166 | 2167 | if( strncmp(zCmd,"join",nCmd)==0 && nCmd>=1 ){ |
| 2167 | 2168 | const char *zNewName = find_option("name",0,1); |
| 2168 | - const char *zOther; | |
| 2169 | + const char *zOther = g.zRepositoryOption | |
| 2170 | + ? g.zRepositoryOption : (g.argc>3 ? g.argv[3] : 0); | |
| 2169 | 2171 | char *zErr = 0; |
| 2170 | 2172 | verify_all_options(); |
| 2171 | - if( g.argc!=4 ){ | |
| 2172 | - fossil_fatal("unknown extra arguments to \"login-group join\""); | |
| 2173 | + if( g.zRepositoryOption ? g.argc!=3 : g.argc!=4 ){ | |
| 2174 | + fossil_fatal("unexpected argument count for \"login-group join\""); | |
| 2173 | 2175 | } |
| 2174 | - zOther = g.argv[3]; | |
| 2175 | 2176 | login_group_leave(&zErr); |
| 2176 | 2177 | sqlite3_free(zErr); |
| 2177 | 2178 | zErr = 0; |
| 2178 | 2179 | login_group_join(zOther,0,0,0,zNewName,&zErr); |
| 2179 | 2180 | if( zErr ){ |
| 2180 | 2181 |
| --- src/login.c | |
| +++ src/login.c | |
| @@ -2127,16 +2127,17 @@ | |
| 2127 | ** |
| 2128 | ** > fossil login-group |
| 2129 | ** |
| 2130 | ** Show the login-group to which the repository belongs. |
| 2131 | ** |
| 2132 | ** > fossil login-group join ?--name NAME? |
| 2133 | ** |
| 2134 | ** Add this repository to login group to which REPO belongs, or creates a |
| 2135 | ** new login group between itself and REPO if REPO does not already belong |
| 2136 | ** to a login-group. When creating a new login-group, the name of the new |
| 2137 | ** group is determined by the "--name" option. |
| 2138 | ** |
| 2139 | ** > fossil login-group leave |
| 2140 | ** |
| 2141 | ** Takes the repository out of whatever login group it is currently |
| 2142 | ** a part of. |
| @@ -2163,17 +2164,17 @@ | |
| 2163 | if( g.argc>2 ){ |
| 2164 | zCmd = g.argv[2]; |
| 2165 | nCmd = (int)strlen(zCmd); |
| 2166 | if( strncmp(zCmd,"join",nCmd)==0 && nCmd>=1 ){ |
| 2167 | const char *zNewName = find_option("name",0,1); |
| 2168 | const char *zOther; |
| 2169 | char *zErr = 0; |
| 2170 | verify_all_options(); |
| 2171 | if( g.argc!=4 ){ |
| 2172 | fossil_fatal("unknown extra arguments to \"login-group join\""); |
| 2173 | } |
| 2174 | zOther = g.argv[3]; |
| 2175 | login_group_leave(&zErr); |
| 2176 | sqlite3_free(zErr); |
| 2177 | zErr = 0; |
| 2178 | login_group_join(zOther,0,0,0,zNewName,&zErr); |
| 2179 | if( zErr ){ |
| 2180 |
| --- src/login.c | |
| +++ src/login.c | |
| @@ -2127,16 +2127,17 @@ | |
| 2127 | ** |
| 2128 | ** > fossil login-group |
| 2129 | ** |
| 2130 | ** Show the login-group to which the repository belongs. |
| 2131 | ** |
| 2132 | ** > fossil login-group join REPO ?--name NAME? |
| 2133 | ** |
| 2134 | ** Add this repository to login group to which REPO belongs, or creates a |
| 2135 | ** new login group between itself and REPO if REPO does not already belong |
| 2136 | ** to a login-group. When creating a new login-group, the name of the new |
| 2137 | ** group is determined by the "--name" option. REPO may optionally be |
| 2138 | ** specified using the -R REPO flag. |
| 2139 | ** |
| 2140 | ** > fossil login-group leave |
| 2141 | ** |
| 2142 | ** Takes the repository out of whatever login group it is currently |
| 2143 | ** a part of. |
| @@ -2163,17 +2164,17 @@ | |
| 2164 | if( g.argc>2 ){ |
| 2165 | zCmd = g.argv[2]; |
| 2166 | nCmd = (int)strlen(zCmd); |
| 2167 | if( strncmp(zCmd,"join",nCmd)==0 && nCmd>=1 ){ |
| 2168 | const char *zNewName = find_option("name",0,1); |
| 2169 | const char *zOther = g.zRepositoryOption |
| 2170 | ? g.zRepositoryOption : (g.argc>3 ? g.argv[3] : 0); |
| 2171 | char *zErr = 0; |
| 2172 | verify_all_options(); |
| 2173 | if( g.zRepositoryOption ? g.argc!=3 : g.argc!=4 ){ |
| 2174 | fossil_fatal("unexpected argument count for \"login-group join\""); |
| 2175 | } |
| 2176 | login_group_leave(&zErr); |
| 2177 | sqlite3_free(zErr); |
| 2178 | zErr = 0; |
| 2179 | login_group_join(zOther,0,0,0,zNewName,&zErr); |
| 2180 | if( zErr ){ |
| 2181 |
+82
-40
| --- src/main.c | ||
| +++ src/main.c | ||
| @@ -437,11 +437,15 @@ | ||
| 437 | 437 | for(i=1; i<g.argc-1; i++){ |
| 438 | 438 | z = g.argv[i]; |
| 439 | 439 | if( z[0]!='-' ) continue; |
| 440 | 440 | z++; |
| 441 | 441 | if( z[0]=='-' ) z++; |
| 442 | - if( z[0]==0 ) return; /* Stop searching at "--" */ | |
| 442 | + /* Maintenance reminder: we do not stop at a "--" flag here, | |
| 443 | + ** instead delegating that to find_option(). Doing it here | |
| 444 | + ** introduces some weird corner cases, as covered in forum thread | |
| 445 | + ** 4382bbc66757c39f. e.g. (fossil -U -- --args ...) is handled | |
| 446 | + ** differently when we stop at "--" here. */ | |
| 443 | 447 | if( fossil_strcmp(z, "args")==0 ) break; |
| 444 | 448 | } |
| 445 | 449 | if( i>=g.argc-1 ) return; |
| 446 | 450 | |
| 447 | 451 | zFileName = g.argv[i+1]; |
| @@ -1172,38 +1176,51 @@ | ||
| 1172 | 1176 | ** the "version" command and "test-version" web page. It assumes the blob |
| 1173 | 1177 | ** passed to it is uninitialized; otherwise, it will leak memory. |
| 1174 | 1178 | */ |
| 1175 | 1179 | void fossil_version_blob( |
| 1176 | 1180 | Blob *pOut, /* Write the manifest here */ |
| 1177 | - int bVerbose /* Non-zero for full information. */ | |
| 1181 | + int eVerbose /* 0: brief. 1: more text, 2: lots of text */ | |
| 1178 | 1182 | ){ |
| 1179 | 1183 | #if defined(FOSSIL_ENABLE_TCL) |
| 1180 | 1184 | int rc; |
| 1181 | 1185 | const char *zRc; |
| 1182 | 1186 | #endif |
| 1183 | 1187 | Stmt q; |
| 1184 | 1188 | size_t pageSize = 0; |
| 1185 | 1189 | blob_zero(pOut); |
| 1186 | 1190 | blob_appendf(pOut, "This is fossil version %s\n", get_version()); |
| 1187 | - if( !bVerbose ) return; | |
| 1191 | + if( eVerbose<=0 ) return; | |
| 1192 | + | |
| 1188 | 1193 | blob_appendf(pOut, "Compiled on %s %s using %s (%d-bit)\n", |
| 1189 | 1194 | __DATE__, __TIME__, COMPILER_NAME, sizeof(void*)*8); |
| 1195 | + blob_appendf(pOut, "SQLite %s %.30s\n", sqlite3_libversion(), | |
| 1196 | + sqlite3_sourceid()); | |
| 1197 | +#if defined(FOSSIL_ENABLE_SSL) | |
| 1198 | + blob_appendf(pOut, "SSL (%s)\n", SSLeay_version(SSLEAY_VERSION)); | |
| 1199 | +#endif | |
| 1200 | + blob_appendf(pOut, "zlib %s, loaded %s\n", ZLIB_VERSION, zlibVersion()); | |
| 1201 | +#if defined(FOSSIL_HAVE_FUSEFS) | |
| 1202 | + blob_appendf(pOut, "libfuse %s, loaded %s\n", fusefs_inc_version(), | |
| 1203 | + fusefs_lib_version()); | |
| 1204 | +#endif | |
| 1205 | +#if defined(FOSSIL_ENABLE_TCL) | |
| 1206 | + Th_FossilInit(TH_INIT_DEFAULT | TH_INIT_FORCE_TCL); | |
| 1207 | + rc = Th_Eval(g.interp, 0, "tclInvoke info patchlevel", -1); | |
| 1208 | + zRc = Th_ReturnCodeName(rc, 0); | |
| 1209 | + blob_appendf(pOut, "TCL (Tcl %s, loaded %s: %s)\n", | |
| 1210 | + TCL_PATCH_LEVEL, zRc, Th_GetResult(g.interp, 0) | |
| 1211 | + ); | |
| 1212 | +#endif | |
| 1213 | + if( eVerbose<=1 ) return; | |
| 1214 | + | |
| 1190 | 1215 | blob_appendf(pOut, "Schema version %s\n", AUX_SCHEMA_MAX); |
| 1191 | 1216 | fossil_get_page_size(&pageSize); |
| 1192 | 1217 | blob_appendf(pOut, "Detected memory page size is %lu bytes\n", |
| 1193 | 1218 | (unsigned long)pageSize); |
| 1194 | - blob_appendf(pOut, "zlib %s, loaded %s\n", ZLIB_VERSION, zlibVersion()); | |
| 1195 | 1219 | #if FOSSIL_HARDENED_SHA1 |
| 1196 | 1220 | blob_appendf(pOut, "hardened-SHA1 by Marc Stevens and Dan Shumow\n"); |
| 1197 | 1221 | #endif |
| 1198 | -#if defined(FOSSIL_ENABLE_SSL) | |
| 1199 | - blob_appendf(pOut, "SSL (%s)\n", SSLeay_version(SSLEAY_VERSION)); | |
| 1200 | -#endif | |
| 1201 | -#if defined(FOSSIL_HAVE_FUSEFS) | |
| 1202 | - blob_appendf(pOut, "libfuse %s, loaded %s\n", fusefs_inc_version(), | |
| 1203 | - fusefs_lib_version()); | |
| 1204 | -#endif | |
| 1205 | 1222 | #if defined(FOSSIL_DEBUG) |
| 1206 | 1223 | blob_append(pOut, "FOSSIL_DEBUG\n", -1); |
| 1207 | 1224 | #endif |
| 1208 | 1225 | #if defined(FOSSIL_ENABLE_DELTA_CKSUM_TEST) |
| 1209 | 1226 | blob_append(pOut, "FOSSIL_ENABLE_DELTA_CKSUM_TEST\n", -1); |
| @@ -1215,18 +1232,10 @@ | ||
| 1215 | 1232 | #if defined(FOSSIL_ENABLE_TH1_DOCS) |
| 1216 | 1233 | blob_append(pOut, "FOSSIL_ENABLE_TH1_DOCS\n", -1); |
| 1217 | 1234 | #endif |
| 1218 | 1235 | #if defined(FOSSIL_ENABLE_TH1_HOOKS) |
| 1219 | 1236 | blob_append(pOut, "FOSSIL_ENABLE_TH1_HOOKS\n", -1); |
| 1220 | -#endif | |
| 1221 | -#if defined(FOSSIL_ENABLE_TCL) | |
| 1222 | - Th_FossilInit(TH_INIT_DEFAULT | TH_INIT_FORCE_TCL); | |
| 1223 | - rc = Th_Eval(g.interp, 0, "tclInvoke info patchlevel", -1); | |
| 1224 | - zRc = Th_ReturnCodeName(rc, 0); | |
| 1225 | - blob_appendf(pOut, "TCL (Tcl %s, loaded %s: %s)\n", | |
| 1226 | - TCL_PATCH_LEVEL, zRc, Th_GetResult(g.interp, 0) | |
| 1227 | - ); | |
| 1228 | 1237 | #endif |
| 1229 | 1238 | #if defined(USE_TCL_STUBS) |
| 1230 | 1239 | blob_append(pOut, "USE_TCL_STUBS\n", -1); |
| 1231 | 1240 | #endif |
| 1232 | 1241 | #if defined(FOSSIL_ENABLE_TCL_STUBS) |
| @@ -1259,12 +1268,11 @@ | ||
| 1259 | 1268 | blob_append(pOut, "USE_SEE\n", -1); |
| 1260 | 1269 | #endif |
| 1261 | 1270 | #if defined(FOSSIL_ALLOW_OUT_OF_ORDER_DATES) |
| 1262 | 1271 | blob_append(pOut, "FOSSIL_ALLOW_OUT_OF_ORDER_DATES\n"); |
| 1263 | 1272 | #endif |
| 1264 | - blob_appendf(pOut, "SQLite %s %.30s\n", sqlite3_libversion(), | |
| 1265 | - sqlite3_sourceid()); | |
| 1273 | + | |
| 1266 | 1274 | if( g.db==0 ) sqlite3_open(":memory:", &g.db); |
| 1267 | 1275 | db_prepare(&q, |
| 1268 | 1276 | "pragma compile_options"); |
| 1269 | 1277 | while( db_step(&q)==SQLITE_ROW ){ |
| 1270 | 1278 | const char *text = db_column_text(&q, 0); |
| @@ -1292,15 +1300,20 @@ | ||
| 1292 | 1300 | ** Usage: %fossil version ?-v|--verbose? |
| 1293 | 1301 | ** |
| 1294 | 1302 | ** Print the source code version number for the fossil executable. |
| 1295 | 1303 | ** If the verbose option is specified, additional details will |
| 1296 | 1304 | ** be output about what optional features this binary was compiled |
| 1297 | -** with | |
| 1305 | +** with. | |
| 1306 | +** | |
| 1307 | +** Repeat the -v option or use -vv for even more information. | |
| 1298 | 1308 | */ |
| 1299 | 1309 | void version_cmd(void){ |
| 1300 | 1310 | Blob versionInfo; |
| 1301 | - int verboseFlag = find_option("verbose","v",0)!=0; | |
| 1311 | + int verboseFlag = 0; | |
| 1312 | + | |
| 1313 | + while( find_option("verbose","v",0)!=0 ) verboseFlag++; | |
| 1314 | + while( find_option("vv",0,0)!=0 ) verboseFlag += 2; | |
| 1302 | 1315 | |
| 1303 | 1316 | /* We should be done with options.. */ |
| 1304 | 1317 | verify_all_options(); |
| 1305 | 1318 | fossil_version_blob(&versionInfo, verboseFlag); |
| 1306 | 1319 | fossil_print("%s", blob_str(&versionInfo)); |
| @@ -1320,11 +1333,11 @@ | ||
| 1320 | 1333 | Blob versionInfo; |
| 1321 | 1334 | int verboseFlag; |
| 1322 | 1335 | |
| 1323 | 1336 | login_check_credentials(); |
| 1324 | 1337 | if( !g.perm.Read ){ login_needed(g.anon.Read); return; } |
| 1325 | - verboseFlag = PD("verbose", 0) != 0; | |
| 1338 | + verboseFlag = P("verbose")!=0 ? 2 : 1; | |
| 1326 | 1339 | style_header("Version Information"); |
| 1327 | 1340 | style_submenu_element("Stat", "stat"); |
| 1328 | 1341 | fossil_version_blob(&versionInfo, verboseFlag); |
| 1329 | 1342 | @ <pre> |
| 1330 | 1343 | @ %h(blob_str(&versionInfo)) |
| @@ -1458,21 +1471,24 @@ | ||
| 1458 | 1471 | /* |
| 1459 | 1472 | ** If running as root, chroot to the directory containing the |
| 1460 | 1473 | ** repository zRepo and then drop root privileges. Return the |
| 1461 | 1474 | ** new repository name. |
| 1462 | 1475 | ** |
| 1463 | -** zRepo might be a directory itself. In that case chroot into | |
| 1464 | -** the directory zRepo. | |
| 1476 | +** zRepo can be a directory. If so and if the repo name was saved | |
| 1477 | +** to g.zRepositoryName before we were called, we canonicalize the | |
| 1478 | +** two paths and check that one is the prefix of the other, else you | |
| 1479 | +** won't be able to open the repo inside the jail. If it all works | |
| 1480 | +** out, we return the "jailed" version of the repo name. | |
| 1465 | 1481 | ** |
| 1466 | 1482 | ** Assume the user-id and group-id of the repository, or if zRepo |
| 1467 | 1483 | ** is a directory, of that directory. |
| 1468 | 1484 | ** |
| 1469 | 1485 | ** The noJail flag means that the chroot jail is not entered. But |
| 1470 | 1486 | ** privileges are still lowered to that of the user-id and group-id |
| 1471 | 1487 | ** of the repository file. |
| 1472 | 1488 | */ |
| 1473 | -char *enter_chroot_jail(char *zRepo, int noJail){ | |
| 1489 | +static char *enter_chroot_jail(const char *zRepo, int noJail){ | |
| 1474 | 1490 | #if !defined(_WIN32) |
| 1475 | 1491 | if( getuid()==0 ){ |
| 1476 | 1492 | int i; |
| 1477 | 1493 | struct stat sStat; |
| 1478 | 1494 | Blob dir; |
| @@ -1483,15 +1499,27 @@ | ||
| 1483 | 1499 | |
| 1484 | 1500 | file_canonical_name(zRepo, &dir, 0); |
| 1485 | 1501 | zDir = blob_str(&dir); |
| 1486 | 1502 | if( !noJail ){ |
| 1487 | 1503 | if( file_isdir(zDir, ExtFILE)==1 ){ |
| 1504 | + if( g.zRepositoryName ){ | |
| 1505 | + size_t n = strlen(zDir); | |
| 1506 | + Blob repo; | |
| 1507 | + file_canonical_name(g.zRepositoryName, &repo, 0); | |
| 1508 | + zRepo = blob_str(&repo); | |
| 1509 | + if( strncmp(zRepo, zDir, n)!=0 ){ | |
| 1510 | + fossil_fatal("repo %s not under chroot dir %s", zRepo, zDir); | |
| 1511 | + } | |
| 1512 | + zRepo += n; | |
| 1513 | + if( *zRepo == '\0' ) zRepo = "/"; | |
| 1514 | + }else { | |
| 1515 | + zRepo = "/"; | |
| 1516 | + g.fJail = 1; | |
| 1517 | + } | |
| 1488 | 1518 | if( file_chdir(zDir, 1) ){ |
| 1489 | 1519 | fossil_panic("unable to chroot into %s", zDir); |
| 1490 | 1520 | } |
| 1491 | - g.fJail = 1; | |
| 1492 | - zRepo = "/"; | |
| 1493 | 1521 | }else{ |
| 1494 | 1522 | for(i=strlen(zDir)-1; i>0 && zDir[i]!='/'; i--){} |
| 1495 | 1523 | if( zDir[i]!='/' ) fossil_fatal("bad repository name: %s", zRepo); |
| 1496 | 1524 | if( i>0 ){ |
| 1497 | 1525 | zDir[i] = 0; |
| @@ -1514,11 +1542,11 @@ | ||
| 1514 | 1542 | if( g.db==0 && file_isfile(zRepo, ExtFILE) ){ |
| 1515 | 1543 | db_open_repository(zRepo); |
| 1516 | 1544 | } |
| 1517 | 1545 | } |
| 1518 | 1546 | #endif |
| 1519 | - return zRepo; | |
| 1547 | + return (char*)zRepo; /* no longer const: always reassigned from blob_str() */ | |
| 1520 | 1548 | } |
| 1521 | 1549 | |
| 1522 | 1550 | /* |
| 1523 | 1551 | ** Called whenever a crash is encountered while processing a webpage. |
| 1524 | 1552 | */ |
| @@ -2257,10 +2285,15 @@ | ||
| 2257 | 2285 | ** mainmenu: FILE Override the mainmenu config setting with the |
| 2258 | 2286 | ** contents of the given file. |
| 2259 | 2287 | ** |
| 2260 | 2288 | ** Most CGI files contain only a "repository:" line. It is uncommon to |
| 2261 | 2289 | ** use any other option. |
| 2290 | +** | |
| 2291 | +** The lines are processed in the order they are read, which is most | |
| 2292 | +** significant for "errorlog:", which should be set before "repository:" | |
| 2293 | +** so that any warnings from the database when opening the repository | |
| 2294 | +** go to that log file. | |
| 2262 | 2295 | ** |
| 2263 | 2296 | ** See also: [[http]], [[server]], [[winsrv]] |
| 2264 | 2297 | */ |
| 2265 | 2298 | void cmd_cgi(void){ |
| 2266 | 2299 | const char *zFile; |
| @@ -2796,15 +2829,12 @@ | ||
| 2796 | 2829 | zIpAddr = cgi_ssh_remote_addr(0); |
| 2797 | 2830 | if( zIpAddr && zIpAddr[0] ){ |
| 2798 | 2831 | g.fSshClient |= CGI_SSH_CLIENT; |
| 2799 | 2832 | } |
| 2800 | 2833 | } |
| 2801 | - if( zChRoot ){ | |
| 2802 | - enter_chroot_jail((char*)zChRoot, noJail); | |
| 2803 | - }else{ | |
| 2804 | - g.zRepositoryName = enter_chroot_jail(g.zRepositoryName, noJail); | |
| 2805 | - } | |
| 2834 | + g.zRepositoryName = enter_chroot_jail( | |
| 2835 | + zChRoot ? zChRoot : g.zRepositoryName, noJail); | |
| 2806 | 2836 | if( useSCGI ){ |
| 2807 | 2837 | cgi_handle_scgi_request(); |
| 2808 | 2838 | }else if( g.fSshClient & CGI_SSH_CLIENT ){ |
| 2809 | 2839 | ssh_request_loop(zIpAddr, glob_create(zFileGlob)); |
| 2810 | 2840 | }else{ |
| @@ -3265,10 +3295,25 @@ | ||
| 3265 | 3295 | return; |
| 3266 | 3296 | } |
| 3267 | 3297 | if( g.repositoryOpen ) flags |= HTTP_SERVER_HAD_REPOSITORY; |
| 3268 | 3298 | if( g.localOpen ) flags |= HTTP_SERVER_HAD_CHECKOUT; |
| 3269 | 3299 | db_close(1); |
| 3300 | +#if !defined(_WIN32) | |
| 3301 | + if( getpid()==1 ){ | |
| 3302 | + /* Modern kernels suppress SIGTERM to PID 1 to prevent root from | |
| 3303 | + ** rebooting the system by nuking the init system. The only way | |
| 3304 | + ** Fossil becomes that PID 1 is when it's running solo in a Linux | |
| 3305 | + ** container or similar, so we do want to exit immediately, to | |
| 3306 | + ** allow the container to shut down quickly. | |
| 3307 | + ** | |
| 3308 | + ** This has to happen ahead of the other signal() calls below. | |
| 3309 | + ** They apply after the HTTP hit is handled, but this one needs | |
| 3310 | + ** to be registered while we're waiting for that to occur. | |
| 3311 | + **/ | |
| 3312 | + signal(SIGTERM, fossil_exit); | |
| 3313 | + } | |
| 3314 | +#endif /* !WIN32 */ | |
| 3270 | 3315 | |
| 3271 | 3316 | /* Start up an HTTP server |
| 3272 | 3317 | */ |
| 3273 | 3318 | fossil_setenv("SERVER_SOFTWARE", "fossil version " RELEASE_VERSION |
| 3274 | 3319 | " " MANIFEST_VERSION " " MANIFEST_DATE); |
| @@ -3301,15 +3346,12 @@ | ||
| 3301 | 3346 | g.cgiOutput = 1; |
| 3302 | 3347 | find_server_repository(2, 0); |
| 3303 | 3348 | if( fossil_strcmp(g.zRepositoryName,"/")==0 ){ |
| 3304 | 3349 | allowRepoList = 1; |
| 3305 | 3350 | }else{ |
| 3306 | - if( zChRoot ){ | |
| 3307 | - enter_chroot_jail((char*)zChRoot, noJail); | |
| 3308 | - }else{ | |
| 3309 | - g.zRepositoryName = enter_chroot_jail(g.zRepositoryName, noJail); | |
| 3310 | - } | |
| 3351 | + g.zRepositoryName = enter_chroot_jail( | |
| 3352 | + zChRoot ? zChRoot : g.zRepositoryName, noJail); | |
| 3311 | 3353 | } |
| 3312 | 3354 | if( flags & HTTP_SERVER_SCGI ){ |
| 3313 | 3355 | cgi_handle_scgi_request(); |
| 3314 | 3356 | }else if( g.httpUseSSL ){ |
| 3315 | 3357 | #if FOSSIL_ENABLE_SSL |
| 3316 | 3358 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -437,11 +437,15 @@ | |
| 437 | for(i=1; i<g.argc-1; i++){ |
| 438 | z = g.argv[i]; |
| 439 | if( z[0]!='-' ) continue; |
| 440 | z++; |
| 441 | if( z[0]=='-' ) z++; |
| 442 | if( z[0]==0 ) return; /* Stop searching at "--" */ |
| 443 | if( fossil_strcmp(z, "args")==0 ) break; |
| 444 | } |
| 445 | if( i>=g.argc-1 ) return; |
| 446 | |
| 447 | zFileName = g.argv[i+1]; |
| @@ -1172,38 +1176,51 @@ | |
| 1172 | ** the "version" command and "test-version" web page. It assumes the blob |
| 1173 | ** passed to it is uninitialized; otherwise, it will leak memory. |
| 1174 | */ |
| 1175 | void fossil_version_blob( |
| 1176 | Blob *pOut, /* Write the manifest here */ |
| 1177 | int bVerbose /* Non-zero for full information. */ |
| 1178 | ){ |
| 1179 | #if defined(FOSSIL_ENABLE_TCL) |
| 1180 | int rc; |
| 1181 | const char *zRc; |
| 1182 | #endif |
| 1183 | Stmt q; |
| 1184 | size_t pageSize = 0; |
| 1185 | blob_zero(pOut); |
| 1186 | blob_appendf(pOut, "This is fossil version %s\n", get_version()); |
| 1187 | if( !bVerbose ) return; |
| 1188 | blob_appendf(pOut, "Compiled on %s %s using %s (%d-bit)\n", |
| 1189 | __DATE__, __TIME__, COMPILER_NAME, sizeof(void*)*8); |
| 1190 | blob_appendf(pOut, "Schema version %s\n", AUX_SCHEMA_MAX); |
| 1191 | fossil_get_page_size(&pageSize); |
| 1192 | blob_appendf(pOut, "Detected memory page size is %lu bytes\n", |
| 1193 | (unsigned long)pageSize); |
| 1194 | blob_appendf(pOut, "zlib %s, loaded %s\n", ZLIB_VERSION, zlibVersion()); |
| 1195 | #if FOSSIL_HARDENED_SHA1 |
| 1196 | blob_appendf(pOut, "hardened-SHA1 by Marc Stevens and Dan Shumow\n"); |
| 1197 | #endif |
| 1198 | #if defined(FOSSIL_ENABLE_SSL) |
| 1199 | blob_appendf(pOut, "SSL (%s)\n", SSLeay_version(SSLEAY_VERSION)); |
| 1200 | #endif |
| 1201 | #if defined(FOSSIL_HAVE_FUSEFS) |
| 1202 | blob_appendf(pOut, "libfuse %s, loaded %s\n", fusefs_inc_version(), |
| 1203 | fusefs_lib_version()); |
| 1204 | #endif |
| 1205 | #if defined(FOSSIL_DEBUG) |
| 1206 | blob_append(pOut, "FOSSIL_DEBUG\n", -1); |
| 1207 | #endif |
| 1208 | #if defined(FOSSIL_ENABLE_DELTA_CKSUM_TEST) |
| 1209 | blob_append(pOut, "FOSSIL_ENABLE_DELTA_CKSUM_TEST\n", -1); |
| @@ -1215,18 +1232,10 @@ | |
| 1215 | #if defined(FOSSIL_ENABLE_TH1_DOCS) |
| 1216 | blob_append(pOut, "FOSSIL_ENABLE_TH1_DOCS\n", -1); |
| 1217 | #endif |
| 1218 | #if defined(FOSSIL_ENABLE_TH1_HOOKS) |
| 1219 | blob_append(pOut, "FOSSIL_ENABLE_TH1_HOOKS\n", -1); |
| 1220 | #endif |
| 1221 | #if defined(FOSSIL_ENABLE_TCL) |
| 1222 | Th_FossilInit(TH_INIT_DEFAULT | TH_INIT_FORCE_TCL); |
| 1223 | rc = Th_Eval(g.interp, 0, "tclInvoke info patchlevel", -1); |
| 1224 | zRc = Th_ReturnCodeName(rc, 0); |
| 1225 | blob_appendf(pOut, "TCL (Tcl %s, loaded %s: %s)\n", |
| 1226 | TCL_PATCH_LEVEL, zRc, Th_GetResult(g.interp, 0) |
| 1227 | ); |
| 1228 | #endif |
| 1229 | #if defined(USE_TCL_STUBS) |
| 1230 | blob_append(pOut, "USE_TCL_STUBS\n", -1); |
| 1231 | #endif |
| 1232 | #if defined(FOSSIL_ENABLE_TCL_STUBS) |
| @@ -1259,12 +1268,11 @@ | |
| 1259 | blob_append(pOut, "USE_SEE\n", -1); |
| 1260 | #endif |
| 1261 | #if defined(FOSSIL_ALLOW_OUT_OF_ORDER_DATES) |
| 1262 | blob_append(pOut, "FOSSIL_ALLOW_OUT_OF_ORDER_DATES\n"); |
| 1263 | #endif |
| 1264 | blob_appendf(pOut, "SQLite %s %.30s\n", sqlite3_libversion(), |
| 1265 | sqlite3_sourceid()); |
| 1266 | if( g.db==0 ) sqlite3_open(":memory:", &g.db); |
| 1267 | db_prepare(&q, |
| 1268 | "pragma compile_options"); |
| 1269 | while( db_step(&q)==SQLITE_ROW ){ |
| 1270 | const char *text = db_column_text(&q, 0); |
| @@ -1292,15 +1300,20 @@ | |
| 1292 | ** Usage: %fossil version ?-v|--verbose? |
| 1293 | ** |
| 1294 | ** Print the source code version number for the fossil executable. |
| 1295 | ** If the verbose option is specified, additional details will |
| 1296 | ** be output about what optional features this binary was compiled |
| 1297 | ** with |
| 1298 | */ |
| 1299 | void version_cmd(void){ |
| 1300 | Blob versionInfo; |
| 1301 | int verboseFlag = find_option("verbose","v",0)!=0; |
| 1302 | |
| 1303 | /* We should be done with options.. */ |
| 1304 | verify_all_options(); |
| 1305 | fossil_version_blob(&versionInfo, verboseFlag); |
| 1306 | fossil_print("%s", blob_str(&versionInfo)); |
| @@ -1320,11 +1333,11 @@ | |
| 1320 | Blob versionInfo; |
| 1321 | int verboseFlag; |
| 1322 | |
| 1323 | login_check_credentials(); |
| 1324 | if( !g.perm.Read ){ login_needed(g.anon.Read); return; } |
| 1325 | verboseFlag = PD("verbose", 0) != 0; |
| 1326 | style_header("Version Information"); |
| 1327 | style_submenu_element("Stat", "stat"); |
| 1328 | fossil_version_blob(&versionInfo, verboseFlag); |
| 1329 | @ <pre> |
| 1330 | @ %h(blob_str(&versionInfo)) |
| @@ -1458,21 +1471,24 @@ | |
| 1458 | /* |
| 1459 | ** If running as root, chroot to the directory containing the |
| 1460 | ** repository zRepo and then drop root privileges. Return the |
| 1461 | ** new repository name. |
| 1462 | ** |
| 1463 | ** zRepo might be a directory itself. In that case chroot into |
| 1464 | ** the directory zRepo. |
| 1465 | ** |
| 1466 | ** Assume the user-id and group-id of the repository, or if zRepo |
| 1467 | ** is a directory, of that directory. |
| 1468 | ** |
| 1469 | ** The noJail flag means that the chroot jail is not entered. But |
| 1470 | ** privileges are still lowered to that of the user-id and group-id |
| 1471 | ** of the repository file. |
| 1472 | */ |
| 1473 | char *enter_chroot_jail(char *zRepo, int noJail){ |
| 1474 | #if !defined(_WIN32) |
| 1475 | if( getuid()==0 ){ |
| 1476 | int i; |
| 1477 | struct stat sStat; |
| 1478 | Blob dir; |
| @@ -1483,15 +1499,27 @@ | |
| 1483 | |
| 1484 | file_canonical_name(zRepo, &dir, 0); |
| 1485 | zDir = blob_str(&dir); |
| 1486 | if( !noJail ){ |
| 1487 | if( file_isdir(zDir, ExtFILE)==1 ){ |
| 1488 | if( file_chdir(zDir, 1) ){ |
| 1489 | fossil_panic("unable to chroot into %s", zDir); |
| 1490 | } |
| 1491 | g.fJail = 1; |
| 1492 | zRepo = "/"; |
| 1493 | }else{ |
| 1494 | for(i=strlen(zDir)-1; i>0 && zDir[i]!='/'; i--){} |
| 1495 | if( zDir[i]!='/' ) fossil_fatal("bad repository name: %s", zRepo); |
| 1496 | if( i>0 ){ |
| 1497 | zDir[i] = 0; |
| @@ -1514,11 +1542,11 @@ | |
| 1514 | if( g.db==0 && file_isfile(zRepo, ExtFILE) ){ |
| 1515 | db_open_repository(zRepo); |
| 1516 | } |
| 1517 | } |
| 1518 | #endif |
| 1519 | return zRepo; |
| 1520 | } |
| 1521 | |
| 1522 | /* |
| 1523 | ** Called whenever a crash is encountered while processing a webpage. |
| 1524 | */ |
| @@ -2257,10 +2285,15 @@ | |
| 2257 | ** mainmenu: FILE Override the mainmenu config setting with the |
| 2258 | ** contents of the given file. |
| 2259 | ** |
| 2260 | ** Most CGI files contain only a "repository:" line. It is uncommon to |
| 2261 | ** use any other option. |
| 2262 | ** |
| 2263 | ** See also: [[http]], [[server]], [[winsrv]] |
| 2264 | */ |
| 2265 | void cmd_cgi(void){ |
| 2266 | const char *zFile; |
| @@ -2796,15 +2829,12 @@ | |
| 2796 | zIpAddr = cgi_ssh_remote_addr(0); |
| 2797 | if( zIpAddr && zIpAddr[0] ){ |
| 2798 | g.fSshClient |= CGI_SSH_CLIENT; |
| 2799 | } |
| 2800 | } |
| 2801 | if( zChRoot ){ |
| 2802 | enter_chroot_jail((char*)zChRoot, noJail); |
| 2803 | }else{ |
| 2804 | g.zRepositoryName = enter_chroot_jail(g.zRepositoryName, noJail); |
| 2805 | } |
| 2806 | if( useSCGI ){ |
| 2807 | cgi_handle_scgi_request(); |
| 2808 | }else if( g.fSshClient & CGI_SSH_CLIENT ){ |
| 2809 | ssh_request_loop(zIpAddr, glob_create(zFileGlob)); |
| 2810 | }else{ |
| @@ -3265,10 +3295,25 @@ | |
| 3265 | return; |
| 3266 | } |
| 3267 | if( g.repositoryOpen ) flags |= HTTP_SERVER_HAD_REPOSITORY; |
| 3268 | if( g.localOpen ) flags |= HTTP_SERVER_HAD_CHECKOUT; |
| 3269 | db_close(1); |
| 3270 | |
| 3271 | /* Start up an HTTP server |
| 3272 | */ |
| 3273 | fossil_setenv("SERVER_SOFTWARE", "fossil version " RELEASE_VERSION |
| 3274 | " " MANIFEST_VERSION " " MANIFEST_DATE); |
| @@ -3301,15 +3346,12 @@ | |
| 3301 | g.cgiOutput = 1; |
| 3302 | find_server_repository(2, 0); |
| 3303 | if( fossil_strcmp(g.zRepositoryName,"/")==0 ){ |
| 3304 | allowRepoList = 1; |
| 3305 | }else{ |
| 3306 | if( zChRoot ){ |
| 3307 | enter_chroot_jail((char*)zChRoot, noJail); |
| 3308 | }else{ |
| 3309 | g.zRepositoryName = enter_chroot_jail(g.zRepositoryName, noJail); |
| 3310 | } |
| 3311 | } |
| 3312 | if( flags & HTTP_SERVER_SCGI ){ |
| 3313 | cgi_handle_scgi_request(); |
| 3314 | }else if( g.httpUseSSL ){ |
| 3315 | #if FOSSIL_ENABLE_SSL |
| 3316 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -437,11 +437,15 @@ | |
| 437 | for(i=1; i<g.argc-1; i++){ |
| 438 | z = g.argv[i]; |
| 439 | if( z[0]!='-' ) continue; |
| 440 | z++; |
| 441 | if( z[0]=='-' ) z++; |
| 442 | /* Maintenance reminder: we do not stop at a "--" flag here, |
| 443 | ** instead delegating that to find_option(). Doing it here |
| 444 | ** introduces some weird corner cases, as covered in forum thread |
| 445 | ** 4382bbc66757c39f. e.g. (fossil -U -- --args ...) is handled |
| 446 | ** differently when we stop at "--" here. */ |
| 447 | if( fossil_strcmp(z, "args")==0 ) break; |
| 448 | } |
| 449 | if( i>=g.argc-1 ) return; |
| 450 | |
| 451 | zFileName = g.argv[i+1]; |
| @@ -1172,38 +1176,51 @@ | |
| 1176 | ** the "version" command and "test-version" web page. It assumes the blob |
| 1177 | ** passed to it is uninitialized; otherwise, it will leak memory. |
| 1178 | */ |
| 1179 | void fossil_version_blob( |
| 1180 | Blob *pOut, /* Write the manifest here */ |
| 1181 | int eVerbose /* 0: brief. 1: more text, 2: lots of text */ |
| 1182 | ){ |
| 1183 | #if defined(FOSSIL_ENABLE_TCL) |
| 1184 | int rc; |
| 1185 | const char *zRc; |
| 1186 | #endif |
| 1187 | Stmt q; |
| 1188 | size_t pageSize = 0; |
| 1189 | blob_zero(pOut); |
| 1190 | blob_appendf(pOut, "This is fossil version %s\n", get_version()); |
| 1191 | if( eVerbose<=0 ) return; |
| 1192 | |
| 1193 | blob_appendf(pOut, "Compiled on %s %s using %s (%d-bit)\n", |
| 1194 | __DATE__, __TIME__, COMPILER_NAME, sizeof(void*)*8); |
| 1195 | blob_appendf(pOut, "SQLite %s %.30s\n", sqlite3_libversion(), |
| 1196 | sqlite3_sourceid()); |
| 1197 | #if defined(FOSSIL_ENABLE_SSL) |
| 1198 | blob_appendf(pOut, "SSL (%s)\n", SSLeay_version(SSLEAY_VERSION)); |
| 1199 | #endif |
| 1200 | blob_appendf(pOut, "zlib %s, loaded %s\n", ZLIB_VERSION, zlibVersion()); |
| 1201 | #if defined(FOSSIL_HAVE_FUSEFS) |
| 1202 | blob_appendf(pOut, "libfuse %s, loaded %s\n", fusefs_inc_version(), |
| 1203 | fusefs_lib_version()); |
| 1204 | #endif |
| 1205 | #if defined(FOSSIL_ENABLE_TCL) |
| 1206 | Th_FossilInit(TH_INIT_DEFAULT | TH_INIT_FORCE_TCL); |
| 1207 | rc = Th_Eval(g.interp, 0, "tclInvoke info patchlevel", -1); |
| 1208 | zRc = Th_ReturnCodeName(rc, 0); |
| 1209 | blob_appendf(pOut, "TCL (Tcl %s, loaded %s: %s)\n", |
| 1210 | TCL_PATCH_LEVEL, zRc, Th_GetResult(g.interp, 0) |
| 1211 | ); |
| 1212 | #endif |
| 1213 | if( eVerbose<=1 ) return; |
| 1214 | |
| 1215 | blob_appendf(pOut, "Schema version %s\n", AUX_SCHEMA_MAX); |
| 1216 | fossil_get_page_size(&pageSize); |
| 1217 | blob_appendf(pOut, "Detected memory page size is %lu bytes\n", |
| 1218 | (unsigned long)pageSize); |
| 1219 | #if FOSSIL_HARDENED_SHA1 |
| 1220 | blob_appendf(pOut, "hardened-SHA1 by Marc Stevens and Dan Shumow\n"); |
| 1221 | #endif |
| 1222 | #if defined(FOSSIL_DEBUG) |
| 1223 | blob_append(pOut, "FOSSIL_DEBUG\n", -1); |
| 1224 | #endif |
| 1225 | #if defined(FOSSIL_ENABLE_DELTA_CKSUM_TEST) |
| 1226 | blob_append(pOut, "FOSSIL_ENABLE_DELTA_CKSUM_TEST\n", -1); |
| @@ -1215,18 +1232,10 @@ | |
| 1232 | #if defined(FOSSIL_ENABLE_TH1_DOCS) |
| 1233 | blob_append(pOut, "FOSSIL_ENABLE_TH1_DOCS\n", -1); |
| 1234 | #endif |
| 1235 | #if defined(FOSSIL_ENABLE_TH1_HOOKS) |
| 1236 | blob_append(pOut, "FOSSIL_ENABLE_TH1_HOOKS\n", -1); |
| 1237 | #endif |
| 1238 | #if defined(USE_TCL_STUBS) |
| 1239 | blob_append(pOut, "USE_TCL_STUBS\n", -1); |
| 1240 | #endif |
| 1241 | #if defined(FOSSIL_ENABLE_TCL_STUBS) |
| @@ -1259,12 +1268,11 @@ | |
| 1268 | blob_append(pOut, "USE_SEE\n", -1); |
| 1269 | #endif |
| 1270 | #if defined(FOSSIL_ALLOW_OUT_OF_ORDER_DATES) |
| 1271 | blob_append(pOut, "FOSSIL_ALLOW_OUT_OF_ORDER_DATES\n"); |
| 1272 | #endif |
| 1273 | |
| 1274 | if( g.db==0 ) sqlite3_open(":memory:", &g.db); |
| 1275 | db_prepare(&q, |
| 1276 | "pragma compile_options"); |
| 1277 | while( db_step(&q)==SQLITE_ROW ){ |
| 1278 | const char *text = db_column_text(&q, 0); |
| @@ -1292,15 +1300,20 @@ | |
| 1300 | ** Usage: %fossil version ?-v|--verbose? |
| 1301 | ** |
| 1302 | ** Print the source code version number for the fossil executable. |
| 1303 | ** If the verbose option is specified, additional details will |
| 1304 | ** be output about what optional features this binary was compiled |
| 1305 | ** with. |
| 1306 | ** |
| 1307 | ** Repeat the -v option or use -vv for even more information. |
| 1308 | */ |
| 1309 | void version_cmd(void){ |
| 1310 | Blob versionInfo; |
| 1311 | int verboseFlag = 0; |
| 1312 | |
| 1313 | while( find_option("verbose","v",0)!=0 ) verboseFlag++; |
| 1314 | while( find_option("vv",0,0)!=0 ) verboseFlag += 2; |
| 1315 | |
| 1316 | /* We should be done with options.. */ |
| 1317 | verify_all_options(); |
| 1318 | fossil_version_blob(&versionInfo, verboseFlag); |
| 1319 | fossil_print("%s", blob_str(&versionInfo)); |
| @@ -1320,11 +1333,11 @@ | |
| 1333 | Blob versionInfo; |
| 1334 | int verboseFlag; |
| 1335 | |
| 1336 | login_check_credentials(); |
| 1337 | if( !g.perm.Read ){ login_needed(g.anon.Read); return; } |
| 1338 | verboseFlag = P("verbose")!=0 ? 2 : 1; |
| 1339 | style_header("Version Information"); |
| 1340 | style_submenu_element("Stat", "stat"); |
| 1341 | fossil_version_blob(&versionInfo, verboseFlag); |
| 1342 | @ <pre> |
| 1343 | @ %h(blob_str(&versionInfo)) |
| @@ -1458,21 +1471,24 @@ | |
| 1471 | /* |
| 1472 | ** If running as root, chroot to the directory containing the |
| 1473 | ** repository zRepo and then drop root privileges. Return the |
| 1474 | ** new repository name. |
| 1475 | ** |
| 1476 | ** zRepo can be a directory. If so and if the repo name was saved |
| 1477 | ** to g.zRepositoryName before we were called, we canonicalize the |
| 1478 | ** two paths and check that one is the prefix of the other, else you |
| 1479 | ** won't be able to open the repo inside the jail. If it all works |
| 1480 | ** out, we return the "jailed" version of the repo name. |
| 1481 | ** |
| 1482 | ** Assume the user-id and group-id of the repository, or if zRepo |
| 1483 | ** is a directory, of that directory. |
| 1484 | ** |
| 1485 | ** The noJail flag means that the chroot jail is not entered. But |
| 1486 | ** privileges are still lowered to that of the user-id and group-id |
| 1487 | ** of the repository file. |
| 1488 | */ |
| 1489 | static char *enter_chroot_jail(const char *zRepo, int noJail){ |
| 1490 | #if !defined(_WIN32) |
| 1491 | if( getuid()==0 ){ |
| 1492 | int i; |
| 1493 | struct stat sStat; |
| 1494 | Blob dir; |
| @@ -1483,15 +1499,27 @@ | |
| 1499 | |
| 1500 | file_canonical_name(zRepo, &dir, 0); |
| 1501 | zDir = blob_str(&dir); |
| 1502 | if( !noJail ){ |
| 1503 | if( file_isdir(zDir, ExtFILE)==1 ){ |
| 1504 | if( g.zRepositoryName ){ |
| 1505 | size_t n = strlen(zDir); |
| 1506 | Blob repo; |
| 1507 | file_canonical_name(g.zRepositoryName, &repo, 0); |
| 1508 | zRepo = blob_str(&repo); |
| 1509 | if( strncmp(zRepo, zDir, n)!=0 ){ |
| 1510 | fossil_fatal("repo %s not under chroot dir %s", zRepo, zDir); |
| 1511 | } |
| 1512 | zRepo += n; |
| 1513 | if( *zRepo == '\0' ) zRepo = "/"; |
| 1514 | }else { |
| 1515 | zRepo = "/"; |
| 1516 | g.fJail = 1; |
| 1517 | } |
| 1518 | if( file_chdir(zDir, 1) ){ |
| 1519 | fossil_panic("unable to chroot into %s", zDir); |
| 1520 | } |
| 1521 | }else{ |
| 1522 | for(i=strlen(zDir)-1; i>0 && zDir[i]!='/'; i--){} |
| 1523 | if( zDir[i]!='/' ) fossil_fatal("bad repository name: %s", zRepo); |
| 1524 | if( i>0 ){ |
| 1525 | zDir[i] = 0; |
| @@ -1514,11 +1542,11 @@ | |
| 1542 | if( g.db==0 && file_isfile(zRepo, ExtFILE) ){ |
| 1543 | db_open_repository(zRepo); |
| 1544 | } |
| 1545 | } |
| 1546 | #endif |
| 1547 | return (char*)zRepo; /* no longer const: always reassigned from blob_str() */ |
| 1548 | } |
| 1549 | |
| 1550 | /* |
| 1551 | ** Called whenever a crash is encountered while processing a webpage. |
| 1552 | */ |
| @@ -2257,10 +2285,15 @@ | |
| 2285 | ** mainmenu: FILE Override the mainmenu config setting with the |
| 2286 | ** contents of the given file. |
| 2287 | ** |
| 2288 | ** Most CGI files contain only a "repository:" line. It is uncommon to |
| 2289 | ** use any other option. |
| 2290 | ** |
| 2291 | ** The lines are processed in the order they are read, which is most |
| 2292 | ** significant for "errorlog:", which should be set before "repository:" |
| 2293 | ** so that any warnings from the database when opening the repository |
| 2294 | ** go to that log file. |
| 2295 | ** |
| 2296 | ** See also: [[http]], [[server]], [[winsrv]] |
| 2297 | */ |
| 2298 | void cmd_cgi(void){ |
| 2299 | const char *zFile; |
| @@ -2796,15 +2829,12 @@ | |
| 2829 | zIpAddr = cgi_ssh_remote_addr(0); |
| 2830 | if( zIpAddr && zIpAddr[0] ){ |
| 2831 | g.fSshClient |= CGI_SSH_CLIENT; |
| 2832 | } |
| 2833 | } |
| 2834 | g.zRepositoryName = enter_chroot_jail( |
| 2835 | zChRoot ? zChRoot : g.zRepositoryName, noJail); |
| 2836 | if( useSCGI ){ |
| 2837 | cgi_handle_scgi_request(); |
| 2838 | }else if( g.fSshClient & CGI_SSH_CLIENT ){ |
| 2839 | ssh_request_loop(zIpAddr, glob_create(zFileGlob)); |
| 2840 | }else{ |
| @@ -3265,10 +3295,25 @@ | |
| 3295 | return; |
| 3296 | } |
| 3297 | if( g.repositoryOpen ) flags |= HTTP_SERVER_HAD_REPOSITORY; |
| 3298 | if( g.localOpen ) flags |= HTTP_SERVER_HAD_CHECKOUT; |
| 3299 | db_close(1); |
| 3300 | #if !defined(_WIN32) |
| 3301 | if( getpid()==1 ){ |
| 3302 | /* Modern kernels suppress SIGTERM to PID 1 to prevent root from |
| 3303 | ** rebooting the system by nuking the init system. The only way |
| 3304 | ** Fossil becomes that PID 1 is when it's running solo in a Linux |
| 3305 | ** container or similar, so we do want to exit immediately, to |
| 3306 | ** allow the container to shut down quickly. |
| 3307 | ** |
| 3308 | ** This has to happen ahead of the other signal() calls below. |
| 3309 | ** They apply after the HTTP hit is handled, but this one needs |
| 3310 | ** to be registered while we're waiting for that to occur. |
| 3311 | **/ |
| 3312 | signal(SIGTERM, fossil_exit); |
| 3313 | } |
| 3314 | #endif /* !WIN32 */ |
| 3315 | |
| 3316 | /* Start up an HTTP server |
| 3317 | */ |
| 3318 | fossil_setenv("SERVER_SOFTWARE", "fossil version " RELEASE_VERSION |
| 3319 | " " MANIFEST_VERSION " " MANIFEST_DATE); |
| @@ -3301,15 +3346,12 @@ | |
| 3346 | g.cgiOutput = 1; |
| 3347 | find_server_repository(2, 0); |
| 3348 | if( fossil_strcmp(g.zRepositoryName,"/")==0 ){ |
| 3349 | allowRepoList = 1; |
| 3350 | }else{ |
| 3351 | g.zRepositoryName = enter_chroot_jail( |
| 3352 | zChRoot ? zChRoot : g.zRepositoryName, noJail); |
| 3353 | } |
| 3354 | if( flags & HTTP_SERVER_SCGI ){ |
| 3355 | cgi_handle_scgi_request(); |
| 3356 | }else if( g.httpUseSSL ){ |
| 3357 | #if FOSSIL_ENABLE_SSL |
| 3358 |
+3
-2
| --- src/main.mk | ||
| +++ src/main.mk | ||
| @@ -692,13 +692,14 @@ | ||
| 692 | 692 | # using -lsqlite3. |
| 693 | 693 | # |
| 694 | 694 | # Closely related is SQLITE3_ORIGIN, with the same numeric mapping plus |
| 695 | 695 | # a value of 2 means that we are building a client-provided sqlite3.c. |
| 696 | 696 | SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o |
| 697 | -SQLITE3_OBJ.1 = | |
| 697 | +SQLITE3_OBJ.1 = $(OBJDIR)/sqlite3-see.o | |
| 698 | 698 | # SQLITE3_OBJ.2 is set by the configure process |
| 699 | 699 | SQLITE3_OBJ. = $(SQLITE3_OBJ.0) |
| 700 | +SQLITE3_OBJ = $(SQLITE3_OBJ.$(SQLITE3_ORIGIN)) | |
| 700 | 701 | |
| 701 | 702 | # The USE_LINENOISE variable may be undefined, set to 0, or set |
| 702 | 703 | # to 1. If it is set to 0, then there is no need to build or link |
| 703 | 704 | # the linenoise.o object. |
| 704 | 705 | LINENOISE_DEF.0 = |
| @@ -2089,11 +2090,11 @@ | ||
| 2089 | 2090 | $(OBJDIR)/zip.o: $(OBJDIR)/zip_.c $(OBJDIR)/zip.h $(SRCDIR)/config.h |
| 2090 | 2091 | $(XTCC) -o $(OBJDIR)/zip.o -c $(OBJDIR)/zip_.c |
| 2091 | 2092 | |
| 2092 | 2093 | $(OBJDIR)/zip.h: $(OBJDIR)/headers |
| 2093 | 2094 | |
| 2094 | -$(OBJDIR)/sqlite3.o: $(SQLITE3_SRC) | |
| 2095 | +$(SQLITE3_OBJ): $(SQLITE3_SRC) | |
| 2095 | 2096 | $(XTCC) $(SQLITE_OPTIONS) $(SQLITE_CFLAGS) $(SEE_FLAGS) \ |
| 2096 | 2097 | -c $(SQLITE3_SRC) -o $@ |
| 2097 | 2098 | $(OBJDIR)/shell.o: $(SQLITE3_SHELL_SRC) $(SRCDIR_extsrc)/sqlite3.h |
| 2098 | 2099 | $(XTCC) $(SHELL_OPTIONS) $(SHELL_CFLAGS) $(SEE_FLAGS) $(LINENOISE_DEF.$(USE_LINENOISE)) -c $(SQLITE3_SHELL_SRC) -o $@ |
| 2099 | 2100 | |
| 2100 | 2101 |
| --- src/main.mk | |
| +++ src/main.mk | |
| @@ -692,13 +692,14 @@ | |
| 692 | # using -lsqlite3. |
| 693 | # |
| 694 | # Closely related is SQLITE3_ORIGIN, with the same numeric mapping plus |
| 695 | # a value of 2 means that we are building a client-provided sqlite3.c. |
| 696 | SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o |
| 697 | SQLITE3_OBJ.1 = |
| 698 | # SQLITE3_OBJ.2 is set by the configure process |
| 699 | SQLITE3_OBJ. = $(SQLITE3_OBJ.0) |
| 700 | |
| 701 | # The USE_LINENOISE variable may be undefined, set to 0, or set |
| 702 | # to 1. If it is set to 0, then there is no need to build or link |
| 703 | # the linenoise.o object. |
| 704 | LINENOISE_DEF.0 = |
| @@ -2089,11 +2090,11 @@ | |
| 2089 | $(OBJDIR)/zip.o: $(OBJDIR)/zip_.c $(OBJDIR)/zip.h $(SRCDIR)/config.h |
| 2090 | $(XTCC) -o $(OBJDIR)/zip.o -c $(OBJDIR)/zip_.c |
| 2091 | |
| 2092 | $(OBJDIR)/zip.h: $(OBJDIR)/headers |
| 2093 | |
| 2094 | $(OBJDIR)/sqlite3.o: $(SQLITE3_SRC) |
| 2095 | $(XTCC) $(SQLITE_OPTIONS) $(SQLITE_CFLAGS) $(SEE_FLAGS) \ |
| 2096 | -c $(SQLITE3_SRC) -o $@ |
| 2097 | $(OBJDIR)/shell.o: $(SQLITE3_SHELL_SRC) $(SRCDIR_extsrc)/sqlite3.h |
| 2098 | $(XTCC) $(SHELL_OPTIONS) $(SHELL_CFLAGS) $(SEE_FLAGS) $(LINENOISE_DEF.$(USE_LINENOISE)) -c $(SQLITE3_SHELL_SRC) -o $@ |
| 2099 | |
| 2100 |
| --- src/main.mk | |
| +++ src/main.mk | |
| @@ -692,13 +692,14 @@ | |
| 692 | # using -lsqlite3. |
| 693 | # |
| 694 | # Closely related is SQLITE3_ORIGIN, with the same numeric mapping plus |
| 695 | # a value of 2 means that we are building a client-provided sqlite3.c. |
| 696 | SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o |
| 697 | SQLITE3_OBJ.1 = $(OBJDIR)/sqlite3-see.o |
| 698 | # SQLITE3_OBJ.2 is set by the configure process |
| 699 | SQLITE3_OBJ. = $(SQLITE3_OBJ.0) |
| 700 | SQLITE3_OBJ = $(SQLITE3_OBJ.$(SQLITE3_ORIGIN)) |
| 701 | |
| 702 | # The USE_LINENOISE variable may be undefined, set to 0, or set |
| 703 | # to 1. If it is set to 0, then there is no need to build or link |
| 704 | # the linenoise.o object. |
| 705 | LINENOISE_DEF.0 = |
| @@ -2089,11 +2090,11 @@ | |
| 2090 | $(OBJDIR)/zip.o: $(OBJDIR)/zip_.c $(OBJDIR)/zip.h $(SRCDIR)/config.h |
| 2091 | $(XTCC) -o $(OBJDIR)/zip.o -c $(OBJDIR)/zip_.c |
| 2092 | |
| 2093 | $(OBJDIR)/zip.h: $(OBJDIR)/headers |
| 2094 | |
| 2095 | $(SQLITE3_OBJ): $(SQLITE3_SRC) |
| 2096 | $(XTCC) $(SQLITE_OPTIONS) $(SQLITE_CFLAGS) $(SEE_FLAGS) \ |
| 2097 | -c $(SQLITE3_SRC) -o $@ |
| 2098 | $(OBJDIR)/shell.o: $(SQLITE3_SHELL_SRC) $(SRCDIR_extsrc)/sqlite3.h |
| 2099 | $(XTCC) $(SHELL_OPTIONS) $(SHELL_CFLAGS) $(SEE_FLAGS) $(LINENOISE_DEF.$(USE_LINENOISE)) -c $(SQLITE3_SHELL_SRC) -o $@ |
| 2100 | |
| 2101 |
+16
-12
| --- src/markdown.c | ||
| +++ src/markdown.c | ||
| @@ -1505,34 +1505,38 @@ | ||
| 1505 | 1505 | struct render *rndr, |
| 1506 | 1506 | char *data, |
| 1507 | 1507 | size_t offset, |
| 1508 | 1508 | size_t size /* parse_inline() ensures that size > 0 */ |
| 1509 | 1509 | ){ |
| 1510 | - const int is_img = (offset && data[-1] == '!'); | |
| 1511 | - size_t i = 1, txt_e; | |
| 1512 | - struct Blob *content = 0; | |
| 1513 | - struct Blob *link = 0; | |
| 1514 | - struct Blob *title = 0; | |
| 1510 | + const int bFsfn = (size>3 && data[1]=='^'); /*free-standing footnote ref*/ | |
| 1511 | + const int bImg = !bFsfn && (offset && data[-1] == '!'); | |
| 1512 | + size_t i, txt_e; | |
| 1513 | + struct Blob *content; | |
| 1514 | + struct Blob *link; | |
| 1515 | + struct Blob *title; | |
| 1515 | 1516 | struct footnote fn; |
| 1516 | 1517 | int ret; |
| 1517 | 1518 | |
| 1518 | 1519 | /* checking whether the correct renderer exists */ |
| 1519 | - if( (is_img && !rndr->make.image) || (!is_img && !rndr->make.link) ){ | |
| 1520 | - return 0; | |
| 1520 | + if( !bFsfn ){ | |
| 1521 | + if( (bImg && !rndr->make.image) || (!bImg && !rndr->make.link) ){ | |
| 1522 | + return 0; | |
| 1523 | + } | |
| 1521 | 1524 | } |
| 1522 | 1525 | |
| 1523 | 1526 | /* looking for the matching closing bracket */ |
| 1524 | 1527 | txt_e = matching_bracket_offset(data, data+size); |
| 1525 | 1528 | if( !txt_e ) return 0; |
| 1526 | 1529 | i = txt_e + 1; |
| 1527 | 1530 | ret = 0; /* error if we don't get to the callback */ |
| 1528 | - fn.nUsed = 0; | |
| 1529 | 1531 | |
| 1530 | - /* free-standing footnote refernece */ | |
| 1531 | - if(!is_img && size>3 && data[1]=='^'){ | |
| 1532 | + /* free-standing footnote reference */ | |
| 1533 | + if( bFsfn ){ | |
| 1532 | 1534 | fn = get_footnote(rndr, data+2, txt_e-2); |
| 1535 | + content = link = title = 0; | |
| 1533 | 1536 | }else{ |
| 1537 | + fn.nUsed = 0; | |
| 1534 | 1538 | |
| 1535 | 1539 | /* skip "inter-bracket-whitespace" - any amount of whitespace or newline */ |
| 1536 | 1540 | /* (this is much more lax than original markdown syntax) */ |
| 1537 | 1541 | while( i<size && (data[i]==' ' || data[i]=='\t' || data[i]=='\n') ){ i++; } |
| 1538 | 1542 | |
| @@ -1599,16 +1603,16 @@ | ||
| 1599 | 1603 | i = txt_e+1; |
| 1600 | 1604 | } |
| 1601 | 1605 | } |
| 1602 | 1606 | /* building content: img alt is escaped, link content is parsed */ |
| 1603 | 1607 | if( txt_e>1 && content ){ |
| 1604 | - if( is_img ) blob_append(content, data+1, txt_e-1); | |
| 1608 | + if( bImg ) blob_append(content, data+1, txt_e-1); | |
| 1605 | 1609 | else parse_inline(content, rndr, data+1, txt_e-1); |
| 1606 | 1610 | } |
| 1607 | 1611 | |
| 1608 | 1612 | /* calling the relevant rendering function */ |
| 1609 | - if( is_img ){ | |
| 1613 | + if( bImg ){ | |
| 1610 | 1614 | if( blob_size(ob)>0 && blob_buffer(ob)[blob_size(ob)-1]=='!' ){ |
| 1611 | 1615 | ob->nUsed--; |
| 1612 | 1616 | } |
| 1613 | 1617 | ret = rndr->make.image(ob, link, title, content, rndr->make.opaque); |
| 1614 | 1618 | }else if( fn.nUsed ){ |
| 1615 | 1619 |
| --- src/markdown.c | |
| +++ src/markdown.c | |
| @@ -1505,34 +1505,38 @@ | |
| 1505 | struct render *rndr, |
| 1506 | char *data, |
| 1507 | size_t offset, |
| 1508 | size_t size /* parse_inline() ensures that size > 0 */ |
| 1509 | ){ |
| 1510 | const int is_img = (offset && data[-1] == '!'); |
| 1511 | size_t i = 1, txt_e; |
| 1512 | struct Blob *content = 0; |
| 1513 | struct Blob *link = 0; |
| 1514 | struct Blob *title = 0; |
| 1515 | struct footnote fn; |
| 1516 | int ret; |
| 1517 | |
| 1518 | /* checking whether the correct renderer exists */ |
| 1519 | if( (is_img && !rndr->make.image) || (!is_img && !rndr->make.link) ){ |
| 1520 | return 0; |
| 1521 | } |
| 1522 | |
| 1523 | /* looking for the matching closing bracket */ |
| 1524 | txt_e = matching_bracket_offset(data, data+size); |
| 1525 | if( !txt_e ) return 0; |
| 1526 | i = txt_e + 1; |
| 1527 | ret = 0; /* error if we don't get to the callback */ |
| 1528 | fn.nUsed = 0; |
| 1529 | |
| 1530 | /* free-standing footnote refernece */ |
| 1531 | if(!is_img && size>3 && data[1]=='^'){ |
| 1532 | fn = get_footnote(rndr, data+2, txt_e-2); |
| 1533 | }else{ |
| 1534 | |
| 1535 | /* skip "inter-bracket-whitespace" - any amount of whitespace or newline */ |
| 1536 | /* (this is much more lax than original markdown syntax) */ |
| 1537 | while( i<size && (data[i]==' ' || data[i]=='\t' || data[i]=='\n') ){ i++; } |
| 1538 | |
| @@ -1599,16 +1603,16 @@ | |
| 1599 | i = txt_e+1; |
| 1600 | } |
| 1601 | } |
| 1602 | /* building content: img alt is escaped, link content is parsed */ |
| 1603 | if( txt_e>1 && content ){ |
| 1604 | if( is_img ) blob_append(content, data+1, txt_e-1); |
| 1605 | else parse_inline(content, rndr, data+1, txt_e-1); |
| 1606 | } |
| 1607 | |
| 1608 | /* calling the relevant rendering function */ |
| 1609 | if( is_img ){ |
| 1610 | if( blob_size(ob)>0 && blob_buffer(ob)[blob_size(ob)-1]=='!' ){ |
| 1611 | ob->nUsed--; |
| 1612 | } |
| 1613 | ret = rndr->make.image(ob, link, title, content, rndr->make.opaque); |
| 1614 | }else if( fn.nUsed ){ |
| 1615 |
| --- src/markdown.c | |
| +++ src/markdown.c | |
| @@ -1505,34 +1505,38 @@ | |
| 1505 | struct render *rndr, |
| 1506 | char *data, |
| 1507 | size_t offset, |
| 1508 | size_t size /* parse_inline() ensures that size > 0 */ |
| 1509 | ){ |
| 1510 | const int bFsfn = (size>3 && data[1]=='^'); /*free-standing footnote ref*/ |
| 1511 | const int bImg = !bFsfn && (offset && data[-1] == '!'); |
| 1512 | size_t i, txt_e; |
| 1513 | struct Blob *content; |
| 1514 | struct Blob *link; |
| 1515 | struct Blob *title; |
| 1516 | struct footnote fn; |
| 1517 | int ret; |
| 1518 | |
| 1519 | /* checking whether the correct renderer exists */ |
| 1520 | if( !bFsfn ){ |
| 1521 | if( (bImg && !rndr->make.image) || (!bImg && !rndr->make.link) ){ |
| 1522 | return 0; |
| 1523 | } |
| 1524 | } |
| 1525 | |
| 1526 | /* looking for the matching closing bracket */ |
| 1527 | txt_e = matching_bracket_offset(data, data+size); |
| 1528 | if( !txt_e ) return 0; |
| 1529 | i = txt_e + 1; |
| 1530 | ret = 0; /* error if we don't get to the callback */ |
| 1531 | |
| 1532 | /* free-standing footnote reference */ |
| 1533 | if( bFsfn ){ |
| 1534 | fn = get_footnote(rndr, data+2, txt_e-2); |
| 1535 | content = link = title = 0; |
| 1536 | }else{ |
| 1537 | fn.nUsed = 0; |
| 1538 | |
| 1539 | /* skip "inter-bracket-whitespace" - any amount of whitespace or newline */ |
| 1540 | /* (this is much more lax than original markdown syntax) */ |
| 1541 | while( i<size && (data[i]==' ' || data[i]=='\t' || data[i]=='\n') ){ i++; } |
| 1542 | |
| @@ -1599,16 +1603,16 @@ | |
| 1603 | i = txt_e+1; |
| 1604 | } |
| 1605 | } |
| 1606 | /* building content: img alt is escaped, link content is parsed */ |
| 1607 | if( txt_e>1 && content ){ |
| 1608 | if( bImg ) blob_append(content, data+1, txt_e-1); |
| 1609 | else parse_inline(content, rndr, data+1, txt_e-1); |
| 1610 | } |
| 1611 | |
| 1612 | /* calling the relevant rendering function */ |
| 1613 | if( bImg ){ |
| 1614 | if( blob_size(ob)>0 && blob_buffer(ob)[blob_size(ob)-1]=='!' ){ |
| 1615 | ob->nUsed--; |
| 1616 | } |
| 1617 | ret = rndr->make.image(ob, link, title, content, rndr->make.opaque); |
| 1618 | }else if( fn.nUsed ){ |
| 1619 |
+16
-12
| --- src/markdown.c | ||
| +++ src/markdown.c | ||
| @@ -1505,34 +1505,38 @@ | ||
| 1505 | 1505 | struct render *rndr, |
| 1506 | 1506 | char *data, |
| 1507 | 1507 | size_t offset, |
| 1508 | 1508 | size_t size /* parse_inline() ensures that size > 0 */ |
| 1509 | 1509 | ){ |
| 1510 | - const int is_img = (offset && data[-1] == '!'); | |
| 1511 | - size_t i = 1, txt_e; | |
| 1512 | - struct Blob *content = 0; | |
| 1513 | - struct Blob *link = 0; | |
| 1514 | - struct Blob *title = 0; | |
| 1510 | + const int bFsfn = (size>3 && data[1]=='^'); /*free-standing footnote ref*/ | |
| 1511 | + const int bImg = !bFsfn && (offset && data[-1] == '!'); | |
| 1512 | + size_t i, txt_e; | |
| 1513 | + struct Blob *content; | |
| 1514 | + struct Blob *link; | |
| 1515 | + struct Blob *title; | |
| 1515 | 1516 | struct footnote fn; |
| 1516 | 1517 | int ret; |
| 1517 | 1518 | |
| 1518 | 1519 | /* checking whether the correct renderer exists */ |
| 1519 | - if( (is_img && !rndr->make.image) || (!is_img && !rndr->make.link) ){ | |
| 1520 | - return 0; | |
| 1520 | + if( !bFsfn ){ | |
| 1521 | + if( (bImg && !rndr->make.image) || (!bImg && !rndr->make.link) ){ | |
| 1522 | + return 0; | |
| 1523 | + } | |
| 1521 | 1524 | } |
| 1522 | 1525 | |
| 1523 | 1526 | /* looking for the matching closing bracket */ |
| 1524 | 1527 | txt_e = matching_bracket_offset(data, data+size); |
| 1525 | 1528 | if( !txt_e ) return 0; |
| 1526 | 1529 | i = txt_e + 1; |
| 1527 | 1530 | ret = 0; /* error if we don't get to the callback */ |
| 1528 | - fn.nUsed = 0; | |
| 1529 | 1531 | |
| 1530 | - /* free-standing footnote refernece */ | |
| 1531 | - if(!is_img && size>3 && data[1]=='^'){ | |
| 1532 | + /* free-standing footnote reference */ | |
| 1533 | + if( bFsfn ){ | |
| 1532 | 1534 | fn = get_footnote(rndr, data+2, txt_e-2); |
| 1535 | + content = link = title = 0; | |
| 1533 | 1536 | }else{ |
| 1537 | + fn.nUsed = 0; | |
| 1534 | 1538 | |
| 1535 | 1539 | /* skip "inter-bracket-whitespace" - any amount of whitespace or newline */ |
| 1536 | 1540 | /* (this is much more lax than original markdown syntax) */ |
| 1537 | 1541 | while( i<size && (data[i]==' ' || data[i]=='\t' || data[i]=='\n') ){ i++; } |
| 1538 | 1542 | |
| @@ -1599,16 +1603,16 @@ | ||
| 1599 | 1603 | i = txt_e+1; |
| 1600 | 1604 | } |
| 1601 | 1605 | } |
| 1602 | 1606 | /* building content: img alt is escaped, link content is parsed */ |
| 1603 | 1607 | if( txt_e>1 && content ){ |
| 1604 | - if( is_img ) blob_append(content, data+1, txt_e-1); | |
| 1608 | + if( bImg ) blob_append(content, data+1, txt_e-1); | |
| 1605 | 1609 | else parse_inline(content, rndr, data+1, txt_e-1); |
| 1606 | 1610 | } |
| 1607 | 1611 | |
| 1608 | 1612 | /* calling the relevant rendering function */ |
| 1609 | - if( is_img ){ | |
| 1613 | + if( bImg ){ | |
| 1610 | 1614 | if( blob_size(ob)>0 && blob_buffer(ob)[blob_size(ob)-1]=='!' ){ |
| 1611 | 1615 | ob->nUsed--; |
| 1612 | 1616 | } |
| 1613 | 1617 | ret = rndr->make.image(ob, link, title, content, rndr->make.opaque); |
| 1614 | 1618 | }else if( fn.nUsed ){ |
| 1615 | 1619 |
| --- src/markdown.c | |
| +++ src/markdown.c | |
| @@ -1505,34 +1505,38 @@ | |
| 1505 | struct render *rndr, |
| 1506 | char *data, |
| 1507 | size_t offset, |
| 1508 | size_t size /* parse_inline() ensures that size > 0 */ |
| 1509 | ){ |
| 1510 | const int is_img = (offset && data[-1] == '!'); |
| 1511 | size_t i = 1, txt_e; |
| 1512 | struct Blob *content = 0; |
| 1513 | struct Blob *link = 0; |
| 1514 | struct Blob *title = 0; |
| 1515 | struct footnote fn; |
| 1516 | int ret; |
| 1517 | |
| 1518 | /* checking whether the correct renderer exists */ |
| 1519 | if( (is_img && !rndr->make.image) || (!is_img && !rndr->make.link) ){ |
| 1520 | return 0; |
| 1521 | } |
| 1522 | |
| 1523 | /* looking for the matching closing bracket */ |
| 1524 | txt_e = matching_bracket_offset(data, data+size); |
| 1525 | if( !txt_e ) return 0; |
| 1526 | i = txt_e + 1; |
| 1527 | ret = 0; /* error if we don't get to the callback */ |
| 1528 | fn.nUsed = 0; |
| 1529 | |
| 1530 | /* free-standing footnote refernece */ |
| 1531 | if(!is_img && size>3 && data[1]=='^'){ |
| 1532 | fn = get_footnote(rndr, data+2, txt_e-2); |
| 1533 | }else{ |
| 1534 | |
| 1535 | /* skip "inter-bracket-whitespace" - any amount of whitespace or newline */ |
| 1536 | /* (this is much more lax than original markdown syntax) */ |
| 1537 | while( i<size && (data[i]==' ' || data[i]=='\t' || data[i]=='\n') ){ i++; } |
| 1538 | |
| @@ -1599,16 +1603,16 @@ | |
| 1599 | i = txt_e+1; |
| 1600 | } |
| 1601 | } |
| 1602 | /* building content: img alt is escaped, link content is parsed */ |
| 1603 | if( txt_e>1 && content ){ |
| 1604 | if( is_img ) blob_append(content, data+1, txt_e-1); |
| 1605 | else parse_inline(content, rndr, data+1, txt_e-1); |
| 1606 | } |
| 1607 | |
| 1608 | /* calling the relevant rendering function */ |
| 1609 | if( is_img ){ |
| 1610 | if( blob_size(ob)>0 && blob_buffer(ob)[blob_size(ob)-1]=='!' ){ |
| 1611 | ob->nUsed--; |
| 1612 | } |
| 1613 | ret = rndr->make.image(ob, link, title, content, rndr->make.opaque); |
| 1614 | }else if( fn.nUsed ){ |
| 1615 |
| --- src/markdown.c | |
| +++ src/markdown.c | |
| @@ -1505,34 +1505,38 @@ | |
| 1505 | struct render *rndr, |
| 1506 | char *data, |
| 1507 | size_t offset, |
| 1508 | size_t size /* parse_inline() ensures that size > 0 */ |
| 1509 | ){ |
| 1510 | const int bFsfn = (size>3 && data[1]=='^'); /*free-standing footnote ref*/ |
| 1511 | const int bImg = !bFsfn && (offset && data[-1] == '!'); |
| 1512 | size_t i, txt_e; |
| 1513 | struct Blob *content; |
| 1514 | struct Blob *link; |
| 1515 | struct Blob *title; |
| 1516 | struct footnote fn; |
| 1517 | int ret; |
| 1518 | |
| 1519 | /* checking whether the correct renderer exists */ |
| 1520 | if( !bFsfn ){ |
| 1521 | if( (bImg && !rndr->make.image) || (!bImg && !rndr->make.link) ){ |
| 1522 | return 0; |
| 1523 | } |
| 1524 | } |
| 1525 | |
| 1526 | /* looking for the matching closing bracket */ |
| 1527 | txt_e = matching_bracket_offset(data, data+size); |
| 1528 | if( !txt_e ) return 0; |
| 1529 | i = txt_e + 1; |
| 1530 | ret = 0; /* error if we don't get to the callback */ |
| 1531 | |
| 1532 | /* free-standing footnote reference */ |
| 1533 | if( bFsfn ){ |
| 1534 | fn = get_footnote(rndr, data+2, txt_e-2); |
| 1535 | content = link = title = 0; |
| 1536 | }else{ |
| 1537 | fn.nUsed = 0; |
| 1538 | |
| 1539 | /* skip "inter-bracket-whitespace" - any amount of whitespace or newline */ |
| 1540 | /* (this is much more lax than original markdown syntax) */ |
| 1541 | while( i<size && (data[i]==' ' || data[i]=='\t' || data[i]=='\n') ){ i++; } |
| 1542 | |
| @@ -1599,16 +1603,16 @@ | |
| 1603 | i = txt_e+1; |
| 1604 | } |
| 1605 | } |
| 1606 | /* building content: img alt is escaped, link content is parsed */ |
| 1607 | if( txt_e>1 && content ){ |
| 1608 | if( bImg ) blob_append(content, data+1, txt_e-1); |
| 1609 | else parse_inline(content, rndr, data+1, txt_e-1); |
| 1610 | } |
| 1611 | |
| 1612 | /* calling the relevant rendering function */ |
| 1613 | if( bImg ){ |
| 1614 | if( blob_size(ob)>0 && blob_buffer(ob)[blob_size(ob)-1]=='!' ){ |
| 1615 | ob->nUsed--; |
| 1616 | } |
| 1617 | ret = rndr->make.image(ob, link, title, content, rndr->make.opaque); |
| 1618 | }else if( fn.nUsed ){ |
| 1619 |
+1
-1
| --- src/md5.c | ||
| +++ src/md5.c | ||
| @@ -303,11 +303,11 @@ | ||
| 303 | 303 | } |
| 304 | 304 | zBuf[j] = 0; |
| 305 | 305 | } |
| 306 | 306 | |
| 307 | 307 | /* |
| 308 | -** The state of a incremental MD5 checksum computation. Only one | |
| 308 | +** The state of an incremental MD5 checksum computation. Only one | |
| 309 | 309 | ** such computation can be underway at a time, of course. |
| 310 | 310 | */ |
| 311 | 311 | static MD5Context incrCtx; |
| 312 | 312 | static int incrInit = 0; |
| 313 | 313 | |
| 314 | 314 |
| --- src/md5.c | |
| +++ src/md5.c | |
| @@ -303,11 +303,11 @@ | |
| 303 | } |
| 304 | zBuf[j] = 0; |
| 305 | } |
| 306 | |
| 307 | /* |
| 308 | ** The state of a incremental MD5 checksum computation. Only one |
| 309 | ** such computation can be underway at a time, of course. |
| 310 | */ |
| 311 | static MD5Context incrCtx; |
| 312 | static int incrInit = 0; |
| 313 | |
| 314 |
| --- src/md5.c | |
| +++ src/md5.c | |
| @@ -303,11 +303,11 @@ | |
| 303 | } |
| 304 | zBuf[j] = 0; |
| 305 | } |
| 306 | |
| 307 | /* |
| 308 | ** The state of an incremental MD5 checksum computation. Only one |
| 309 | ** such computation can be underway at a time, of course. |
| 310 | */ |
| 311 | static MD5Context incrCtx; |
| 312 | static int incrInit = 0; |
| 313 | |
| 314 |
+1
-1
| --- src/name.c | ||
| +++ src/name.c | ||
| @@ -244,11 +244,11 @@ | ||
| 244 | 244 | |
| 245 | 245 | /* |
| 246 | 246 | ** Convert a symbolic name into a RID. Acceptable forms: |
| 247 | 247 | ** |
| 248 | 248 | ** * artifact hash (optionally enclosed in [...]) |
| 249 | -** * 4-character or larger prefix of a artifact | |
| 249 | +** * 4-character or larger prefix of an artifact | |
| 250 | 250 | ** * Symbolic Name |
| 251 | 251 | ** * "tag:" + symbolic name |
| 252 | 252 | ** * Date or date-time |
| 253 | 253 | ** * "date:" + Date or date-time |
| 254 | 254 | ** * symbolic-name ":" date-time |
| 255 | 255 |
| --- src/name.c | |
| +++ src/name.c | |
| @@ -244,11 +244,11 @@ | |
| 244 | |
| 245 | /* |
| 246 | ** Convert a symbolic name into a RID. Acceptable forms: |
| 247 | ** |
| 248 | ** * artifact hash (optionally enclosed in [...]) |
| 249 | ** * 4-character or larger prefix of a artifact |
| 250 | ** * Symbolic Name |
| 251 | ** * "tag:" + symbolic name |
| 252 | ** * Date or date-time |
| 253 | ** * "date:" + Date or date-time |
| 254 | ** * symbolic-name ":" date-time |
| 255 |
| --- src/name.c | |
| +++ src/name.c | |
| @@ -244,11 +244,11 @@ | |
| 244 | |
| 245 | /* |
| 246 | ** Convert a symbolic name into a RID. Acceptable forms: |
| 247 | ** |
| 248 | ** * artifact hash (optionally enclosed in [...]) |
| 249 | ** * 4-character or larger prefix of an artifact |
| 250 | ** * Symbolic Name |
| 251 | ** * "tag:" + symbolic name |
| 252 | ** * Date or date-time |
| 253 | ** * "date:" + Date or date-time |
| 254 | ** * symbolic-name ":" date-time |
| 255 |
+5
-5
| --- src/patch.c | ||
| +++ src/patch.c | ||
| @@ -855,11 +855,11 @@ | ||
| 855 | 855 | ** in the current directory if DIRECTORY is omitted. Options: |
| 856 | 856 | ** |
| 857 | 857 | ** -f|--force Apply the patch even though there are unsaved |
| 858 | 858 | ** changes in the current check-out. Unsaved changes |
| 859 | 859 | ** are reverted and permanently lost. |
| 860 | -** -n|--dryrun Do nothing, but print what would have happened. | |
| 860 | +** -n|--dry-run Do nothing, but print what would have happened. | |
| 861 | 861 | ** -v|--verbose Extra output explaining what happens. |
| 862 | 862 | ** |
| 863 | 863 | ** > fossil patch diff [DIRECTORY] FILENAME |
| 864 | 864 | ** |
| 865 | 865 | ** Show a human-readable diff for the patch. All the usual |
| @@ -884,11 +884,11 @@ | ||
| 884 | 884 | ** -f|--force Apply the patch even though there are unsaved |
| 885 | 885 | ** changes in the current check-out. Unsaved |
| 886 | 886 | ** changes will be reverted and then the patch is |
| 887 | 887 | ** applied. |
| 888 | 888 | ** --fossilcmd EXE Name of the "fossil" executable on the remote |
| 889 | -** -n|--dryrun Do nothing, but print what would have happened. | |
| 889 | +** -n|--dry-run Do nothing, but print what would have happened. | |
| 890 | 890 | ** -v|--verbose Extra output explaining what happens. |
| 891 | 891 | ** |
| 892 | 892 | ** |
| 893 | 893 | ** > fossil patch pull REMOTE-CHECKOUT |
| 894 | 894 | ** |
| @@ -913,11 +913,11 @@ | ||
| 913 | 913 | zCmd = g.argv[2]; |
| 914 | 914 | n = strlen(zCmd); |
| 915 | 915 | if( strncmp(zCmd, "apply", n)==0 ){ |
| 916 | 916 | char *zIn; |
| 917 | 917 | unsigned flags = 0; |
| 918 | - if( find_option("dryrun","n",0) ) flags |= PATCH_DRYRUN; | |
| 918 | + if( find_option("dry-run","n",0) ) flags |= PATCH_DRYRUN; | |
| 919 | 919 | if( find_option("verbose","v",0) ) flags |= PATCH_VERBOSE; |
| 920 | 920 | if( find_option("force","f",0) ) flags |= PATCH_FORCE; |
| 921 | 921 | zIn = patch_find_patch_filename("apply"); |
| 922 | 922 | db_must_be_within_tree(); |
| 923 | 923 | patch_attach(zIn, stdin); |
| @@ -955,11 +955,11 @@ | ||
| 955 | 955 | }else |
| 956 | 956 | if( strncmp(zCmd, "pull", n)==0 ){ |
| 957 | 957 | FILE *pIn = 0; |
| 958 | 958 | unsigned flags = 0; |
| 959 | 959 | const char *zFossilCmd = find_option("fossilcmd",0,1); |
| 960 | - if( find_option("dryrun","n",0) ) flags |= PATCH_DRYRUN; | |
| 960 | + if( find_option("dry-run","n",0) ) flags |= PATCH_DRYRUN; | |
| 961 | 961 | if( find_option("verbose","v",0) ) flags |= PATCH_VERBOSE; |
| 962 | 962 | if( find_option("force","f",0) ) flags |= PATCH_FORCE; |
| 963 | 963 | db_must_be_within_tree(); |
| 964 | 964 | verify_all_options(); |
| 965 | 965 | pIn = patch_remote_command(flags & (~PATCH_FORCE), |
| @@ -972,11 +972,11 @@ | ||
| 972 | 972 | }else |
| 973 | 973 | if( strncmp(zCmd, "push", n)==0 ){ |
| 974 | 974 | FILE *pOut = 0; |
| 975 | 975 | unsigned flags = 0; |
| 976 | 976 | const char *zFossilCmd = find_option("fossilcmd",0,1); |
| 977 | - if( find_option("dryrun","n",0) ) flags |= PATCH_DRYRUN; | |
| 977 | + if( find_option("dry-run","n",0) ) flags |= PATCH_DRYRUN; | |
| 978 | 978 | if( find_option("verbose","v",0) ) flags |= PATCH_VERBOSE; |
| 979 | 979 | if( find_option("force","f",0) ) flags |= PATCH_FORCE; |
| 980 | 980 | db_must_be_within_tree(); |
| 981 | 981 | verify_all_options(); |
| 982 | 982 | pOut = patch_remote_command(flags, "push", "apply", zFossilCmd, "w"); |
| 983 | 983 |
| --- src/patch.c | |
| +++ src/patch.c | |
| @@ -855,11 +855,11 @@ | |
| 855 | ** in the current directory if DIRECTORY is omitted. Options: |
| 856 | ** |
| 857 | ** -f|--force Apply the patch even though there are unsaved |
| 858 | ** changes in the current check-out. Unsaved changes |
| 859 | ** are reverted and permanently lost. |
| 860 | ** -n|--dryrun Do nothing, but print what would have happened. |
| 861 | ** -v|--verbose Extra output explaining what happens. |
| 862 | ** |
| 863 | ** > fossil patch diff [DIRECTORY] FILENAME |
| 864 | ** |
| 865 | ** Show a human-readable diff for the patch. All the usual |
| @@ -884,11 +884,11 @@ | |
| 884 | ** -f|--force Apply the patch even though there are unsaved |
| 885 | ** changes in the current check-out. Unsaved |
| 886 | ** changes will be reverted and then the patch is |
| 887 | ** applied. |
| 888 | ** --fossilcmd EXE Name of the "fossil" executable on the remote |
| 889 | ** -n|--dryrun Do nothing, but print what would have happened. |
| 890 | ** -v|--verbose Extra output explaining what happens. |
| 891 | ** |
| 892 | ** |
| 893 | ** > fossil patch pull REMOTE-CHECKOUT |
| 894 | ** |
| @@ -913,11 +913,11 @@ | |
| 913 | zCmd = g.argv[2]; |
| 914 | n = strlen(zCmd); |
| 915 | if( strncmp(zCmd, "apply", n)==0 ){ |
| 916 | char *zIn; |
| 917 | unsigned flags = 0; |
| 918 | if( find_option("dryrun","n",0) ) flags |= PATCH_DRYRUN; |
| 919 | if( find_option("verbose","v",0) ) flags |= PATCH_VERBOSE; |
| 920 | if( find_option("force","f",0) ) flags |= PATCH_FORCE; |
| 921 | zIn = patch_find_patch_filename("apply"); |
| 922 | db_must_be_within_tree(); |
| 923 | patch_attach(zIn, stdin); |
| @@ -955,11 +955,11 @@ | |
| 955 | }else |
| 956 | if( strncmp(zCmd, "pull", n)==0 ){ |
| 957 | FILE *pIn = 0; |
| 958 | unsigned flags = 0; |
| 959 | const char *zFossilCmd = find_option("fossilcmd",0,1); |
| 960 | if( find_option("dryrun","n",0) ) flags |= PATCH_DRYRUN; |
| 961 | if( find_option("verbose","v",0) ) flags |= PATCH_VERBOSE; |
| 962 | if( find_option("force","f",0) ) flags |= PATCH_FORCE; |
| 963 | db_must_be_within_tree(); |
| 964 | verify_all_options(); |
| 965 | pIn = patch_remote_command(flags & (~PATCH_FORCE), |
| @@ -972,11 +972,11 @@ | |
| 972 | }else |
| 973 | if( strncmp(zCmd, "push", n)==0 ){ |
| 974 | FILE *pOut = 0; |
| 975 | unsigned flags = 0; |
| 976 | const char *zFossilCmd = find_option("fossilcmd",0,1); |
| 977 | if( find_option("dryrun","n",0) ) flags |= PATCH_DRYRUN; |
| 978 | if( find_option("verbose","v",0) ) flags |= PATCH_VERBOSE; |
| 979 | if( find_option("force","f",0) ) flags |= PATCH_FORCE; |
| 980 | db_must_be_within_tree(); |
| 981 | verify_all_options(); |
| 982 | pOut = patch_remote_command(flags, "push", "apply", zFossilCmd, "w"); |
| 983 |
| --- src/patch.c | |
| +++ src/patch.c | |
| @@ -855,11 +855,11 @@ | |
| 855 | ** in the current directory if DIRECTORY is omitted. Options: |
| 856 | ** |
| 857 | ** -f|--force Apply the patch even though there are unsaved |
| 858 | ** changes in the current check-out. Unsaved changes |
| 859 | ** are reverted and permanently lost. |
| 860 | ** -n|--dry-run Do nothing, but print what would have happened. |
| 861 | ** -v|--verbose Extra output explaining what happens. |
| 862 | ** |
| 863 | ** > fossil patch diff [DIRECTORY] FILENAME |
| 864 | ** |
| 865 | ** Show a human-readable diff for the patch. All the usual |
| @@ -884,11 +884,11 @@ | |
| 884 | ** -f|--force Apply the patch even though there are unsaved |
| 885 | ** changes in the current check-out. Unsaved |
| 886 | ** changes will be reverted and then the patch is |
| 887 | ** applied. |
| 888 | ** --fossilcmd EXE Name of the "fossil" executable on the remote |
| 889 | ** -n|--dry-run Do nothing, but print what would have happened. |
| 890 | ** -v|--verbose Extra output explaining what happens. |
| 891 | ** |
| 892 | ** |
| 893 | ** > fossil patch pull REMOTE-CHECKOUT |
| 894 | ** |
| @@ -913,11 +913,11 @@ | |
| 913 | zCmd = g.argv[2]; |
| 914 | n = strlen(zCmd); |
| 915 | if( strncmp(zCmd, "apply", n)==0 ){ |
| 916 | char *zIn; |
| 917 | unsigned flags = 0; |
| 918 | if( find_option("dry-run","n",0) ) flags |= PATCH_DRYRUN; |
| 919 | if( find_option("verbose","v",0) ) flags |= PATCH_VERBOSE; |
| 920 | if( find_option("force","f",0) ) flags |= PATCH_FORCE; |
| 921 | zIn = patch_find_patch_filename("apply"); |
| 922 | db_must_be_within_tree(); |
| 923 | patch_attach(zIn, stdin); |
| @@ -955,11 +955,11 @@ | |
| 955 | }else |
| 956 | if( strncmp(zCmd, "pull", n)==0 ){ |
| 957 | FILE *pIn = 0; |
| 958 | unsigned flags = 0; |
| 959 | const char *zFossilCmd = find_option("fossilcmd",0,1); |
| 960 | if( find_option("dry-run","n",0) ) flags |= PATCH_DRYRUN; |
| 961 | if( find_option("verbose","v",0) ) flags |= PATCH_VERBOSE; |
| 962 | if( find_option("force","f",0) ) flags |= PATCH_FORCE; |
| 963 | db_must_be_within_tree(); |
| 964 | verify_all_options(); |
| 965 | pIn = patch_remote_command(flags & (~PATCH_FORCE), |
| @@ -972,11 +972,11 @@ | |
| 972 | }else |
| 973 | if( strncmp(zCmd, "push", n)==0 ){ |
| 974 | FILE *pOut = 0; |
| 975 | unsigned flags = 0; |
| 976 | const char *zFossilCmd = find_option("fossilcmd",0,1); |
| 977 | if( find_option("dry-run","n",0) ) flags |= PATCH_DRYRUN; |
| 978 | if( find_option("verbose","v",0) ) flags |= PATCH_VERBOSE; |
| 979 | if( find_option("force","f",0) ) flags |= PATCH_FORCE; |
| 980 | db_must_be_within_tree(); |
| 981 | verify_all_options(); |
| 982 | pOut = patch_remote_command(flags, "push", "apply", zFossilCmd, "w"); |
| 983 |
+1
-1
| --- src/printf.c | ||
| +++ src/printf.c | ||
| @@ -281,11 +281,11 @@ | ||
| 281 | 281 | ** ap This is a pointer to a list of arguments. Same as in |
| 282 | 282 | ** vfprint. |
| 283 | 283 | ** |
| 284 | 284 | ** OUTPUTS: |
| 285 | 285 | ** The return value is the total number of characters sent to |
| 286 | -** the function "func". Returns -1 on a error. | |
| 286 | +** the function "func". Returns -1 on error. | |
| 287 | 287 | ** |
| 288 | 288 | ** Note that the order in which automatic variables are declared below |
| 289 | 289 | ** seems to make a big difference in determining how fast this beast |
| 290 | 290 | ** will run. |
| 291 | 291 | */ |
| 292 | 292 |
| --- src/printf.c | |
| +++ src/printf.c | |
| @@ -281,11 +281,11 @@ | |
| 281 | ** ap This is a pointer to a list of arguments. Same as in |
| 282 | ** vfprint. |
| 283 | ** |
| 284 | ** OUTPUTS: |
| 285 | ** The return value is the total number of characters sent to |
| 286 | ** the function "func". Returns -1 on a error. |
| 287 | ** |
| 288 | ** Note that the order in which automatic variables are declared below |
| 289 | ** seems to make a big difference in determining how fast this beast |
| 290 | ** will run. |
| 291 | */ |
| 292 |
| --- src/printf.c | |
| +++ src/printf.c | |
| @@ -281,11 +281,11 @@ | |
| 281 | ** ap This is a pointer to a list of arguments. Same as in |
| 282 | ** vfprint. |
| 283 | ** |
| 284 | ** OUTPUTS: |
| 285 | ** The return value is the total number of characters sent to |
| 286 | ** the function "func". Returns -1 on error. |
| 287 | ** |
| 288 | ** Note that the order in which automatic variables are declared below |
| 289 | ** seems to make a big difference in determining how fast this beast |
| 290 | ** will run. |
| 291 | */ |
| 292 |
+20
| --- src/repolist.c | ||
| +++ src/repolist.c | ||
| @@ -230,10 +230,30 @@ | ||
| 230 | 230 | blob_append_sql(&html, "%h (hidden)", zName); |
| 231 | 231 | } else if( allRepo && sqlite3_strglob("[a-zA-Z]:/?*", zName)!=0 ){ |
| 232 | 232 | blob_append_sql(&html, |
| 233 | 233 | "<a href='%R/%T/home' target='_blank'>/%h</a>\n", |
| 234 | 234 | zUrl, zName); |
| 235 | + }else if( sqlite3_strglob("*/*.fossil", zName)==0 ){ | |
| 236 | + /* As described in | |
| 237 | + ** https://fossil-scm.org/forum/info/f50f647c97c72fc1: if | |
| 238 | + ** foo.fossil and foo/bar.fossil both exist and we create a | |
| 239 | + ** link to foo/bar/... then the URI dispatcher will instead | |
| 240 | + ** see that as a link to foo.fossil. In such cases, do not | |
| 241 | + ** emit a link to foo/bar.fossil. */ | |
| 242 | + char * zDirPart = file_dirname(zName); | |
| 243 | + if( db_exists("SELECT 1 FROM sfile " | |
| 244 | + "WHERE pathname=(%Q || '.fossil') COLLATE nocase", | |
| 245 | + zDirPart) ){ | |
| 246 | + blob_append_sql(&html, | |
| 247 | + "<s>%h</s> (directory/repo name collision)\n", | |
| 248 | + zName); | |
| 249 | + }else{ | |
| 250 | + blob_append_sql(&html, | |
| 251 | + "<a href='%R/%T/home' target='_blank'>%h</a>\n", | |
| 252 | + zUrl, zName); | |
| 253 | + } | |
| 254 | + fossil_free(zDirPart); | |
| 235 | 255 | }else{ |
| 236 | 256 | blob_append_sql(&html, |
| 237 | 257 | "<a href='%R/%T/home' target='_blank'>%h</a>\n", |
| 238 | 258 | zUrl, zName); |
| 239 | 259 | } |
| 240 | 260 |
| --- src/repolist.c | |
| +++ src/repolist.c | |
| @@ -230,10 +230,30 @@ | |
| 230 | blob_append_sql(&html, "%h (hidden)", zName); |
| 231 | } else if( allRepo && sqlite3_strglob("[a-zA-Z]:/?*", zName)!=0 ){ |
| 232 | blob_append_sql(&html, |
| 233 | "<a href='%R/%T/home' target='_blank'>/%h</a>\n", |
| 234 | zUrl, zName); |
| 235 | }else{ |
| 236 | blob_append_sql(&html, |
| 237 | "<a href='%R/%T/home' target='_blank'>%h</a>\n", |
| 238 | zUrl, zName); |
| 239 | } |
| 240 |
| --- src/repolist.c | |
| +++ src/repolist.c | |
| @@ -230,10 +230,30 @@ | |
| 230 | blob_append_sql(&html, "%h (hidden)", zName); |
| 231 | } else if( allRepo && sqlite3_strglob("[a-zA-Z]:/?*", zName)!=0 ){ |
| 232 | blob_append_sql(&html, |
| 233 | "<a href='%R/%T/home' target='_blank'>/%h</a>\n", |
| 234 | zUrl, zName); |
| 235 | }else if( sqlite3_strglob("*/*.fossil", zName)==0 ){ |
| 236 | /* As described in |
| 237 | ** https://fossil-scm.org/forum/info/f50f647c97c72fc1: if |
| 238 | ** foo.fossil and foo/bar.fossil both exist and we create a |
| 239 | ** link to foo/bar/... then the URI dispatcher will instead |
| 240 | ** see that as a link to foo.fossil. In such cases, do not |
| 241 | ** emit a link to foo/bar.fossil. */ |
| 242 | char * zDirPart = file_dirname(zName); |
| 243 | if( db_exists("SELECT 1 FROM sfile " |
| 244 | "WHERE pathname=(%Q || '.fossil') COLLATE nocase", |
| 245 | zDirPart) ){ |
| 246 | blob_append_sql(&html, |
| 247 | "<s>%h</s> (directory/repo name collision)\n", |
| 248 | zName); |
| 249 | }else{ |
| 250 | blob_append_sql(&html, |
| 251 | "<a href='%R/%T/home' target='_blank'>%h</a>\n", |
| 252 | zUrl, zName); |
| 253 | } |
| 254 | fossil_free(zDirPart); |
| 255 | }else{ |
| 256 | blob_append_sql(&html, |
| 257 | "<a href='%R/%T/home' target='_blank'>%h</a>\n", |
| 258 | zUrl, zName); |
| 259 | } |
| 260 |
+40
-32
| --- src/rss.c | ||
| +++ src/rss.c | ||
| @@ -57,10 +57,11 @@ | ||
| 57 | 57 | const char zSQL1[] = |
| 58 | 58 | @ SELECT |
| 59 | 59 | @ blob.rid, |
| 60 | 60 | @ uuid, |
| 61 | 61 | @ event.mtime, |
| 62 | + @ event.type, | |
| 62 | 63 | @ coalesce(ecomment,comment), |
| 63 | 64 | @ coalesce(euser,user), |
| 64 | 65 | @ (SELECT count(*) FROM plink WHERE pid=blob.rid AND isprim), |
| 65 | 66 | @ (SELECT count(*) FROM plink WHERE cid=blob.rid), |
| 66 | 67 | @ (SELECT group_concat(substr(tagname,5), ', ') FROM tag, tagxref |
| @@ -74,37 +75,33 @@ | ||
| 74 | 75 | if( !g.perm.Read && !g.perm.RdTkt && !g.perm.RdWiki ){ |
| 75 | 76 | return; |
| 76 | 77 | } |
| 77 | 78 | |
| 78 | 79 | blob_zero(&bSQL); |
| 79 | - blob_append( &bSQL, zSQL1, -1 ); | |
| 80 | + blob_append_sql( &bSQL, "%s", zSQL1/*safe-for-%s*/ ); | |
| 80 | 81 | |
| 81 | 82 | if( zType[0]!='a' ){ |
| 82 | 83 | if( zType[0]=='c' && !g.perm.Read ) zType = "x"; |
| 83 | 84 | if( zType[0]=='w' && !g.perm.RdWiki ) zType = "x"; |
| 84 | 85 | if( zType[0]=='t' && !g.perm.RdTkt ) zType = "x"; |
| 86 | + if( zType[0]=='f' && !g.perm.RdForum ) zType = "x"; | |
| 85 | 87 | blob_append_sql(&bSQL, " AND event.type=%Q", zType); |
| 86 | 88 | }else{ |
| 87 | - if( !g.perm.Read ){ | |
| 88 | - if( g.perm.RdTkt && g.perm.RdWiki ){ | |
| 89 | - blob_append(&bSQL, " AND event.type!='ci'", -1); | |
| 90 | - }else if( g.perm.RdTkt ){ | |
| 91 | - blob_append(&bSQL, " AND event.type=='t'", -1); | |
| 92 | - | |
| 93 | - }else{ | |
| 94 | - blob_append(&bSQL, " AND event.type=='w'", -1); | |
| 95 | - } | |
| 96 | - }else if( !g.perm.RdWiki ){ | |
| 97 | - if( g.perm.RdTkt ){ | |
| 98 | - blob_append(&bSQL, " AND event.type!='w'", -1); | |
| 99 | - }else{ | |
| 100 | - blob_append(&bSQL, " AND event.type=='ci'", -1); | |
| 101 | - } | |
| 102 | - }else if( !g.perm.RdTkt ){ | |
| 103 | - assert( !g.perm.RdTkt && g.perm.Read && g.perm.RdWiki ); | |
| 104 | - blob_append(&bSQL, " AND event.type!='t'", -1); | |
| 105 | - } | |
| 89 | + blob_append_sql(&bSQL, " AND event.type in ("); | |
| 90 | + if( g.perm.Read ){ | |
| 91 | + blob_append_sql(&bSQL, "'ci',"); | |
| 92 | + } | |
| 93 | + if( g.perm.RdTkt ){ | |
| 94 | + blob_append_sql(&bSQL, "'t',"); | |
| 95 | + } | |
| 96 | + if( g.perm.RdWiki ){ | |
| 97 | + blob_append_sql(&bSQL, "'w',"); | |
| 98 | + } | |
| 99 | + if( g.perm.RdForum ){ | |
| 100 | + blob_append_sql(&bSQL, "'f',"); | |
| 101 | + } | |
| 102 | + blob_append_sql(&bSQL, "'x')"); | |
| 106 | 103 | } |
| 107 | 104 | |
| 108 | 105 | if( zTicketUuid ){ |
| 109 | 106 | nTagId = db_int(0, "SELECT tagid FROM tag WHERE tagname GLOB 'tkt-%q*'", |
| 110 | 107 | zTicketUuid); |
| @@ -134,16 +131,17 @@ | ||
| 134 | 131 | " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid))", nTagId); |
| 135 | 132 | } |
| 136 | 133 | |
| 137 | 134 | if( zFilename ){ |
| 138 | 135 | blob_append_sql(&bSQL, |
| 139 | - " AND (SELECT mlink.fnid FROM mlink WHERE event.objid=mlink.mid) IN (SELECT fnid FROM filename WHERE name=%Q %s)", | |
| 136 | + " AND (SELECT mlink.fnid FROM mlink WHERE event.objid=mlink.mid) " | |
| 137 | + " IN (SELECT fnid FROM filename WHERE name=%Q %s)", | |
| 140 | 138 | zFilename, filename_collation() |
| 141 | 139 | ); |
| 142 | 140 | } |
| 143 | 141 | |
| 144 | - blob_append( &bSQL, " ORDER BY event.mtime DESC", -1 ); | |
| 142 | + blob_append_sql( &bSQL, " ORDER BY event.mtime DESC" ); | |
| 145 | 143 | |
| 146 | 144 | cgi_set_content_type("application/rss+xml"); |
| 147 | 145 | |
| 148 | 146 | zProjectName = db_get("project-name", 0); |
| 149 | 147 | if( zProjectName==0 ){ |
| @@ -168,30 +166,40 @@ | ||
| 168 | 166 | free(zPubDate); |
| 169 | 167 | db_prepare(&q, "%s", blob_sql_text(&bSQL)); |
| 170 | 168 | blob_reset( &bSQL ); |
| 171 | 169 | while( db_step(&q)==SQLITE_ROW && nLine<nLimit ){ |
| 172 | 170 | const char *zId = db_column_text(&q, 1); |
| 173 | - const char *zCom = db_column_text(&q, 3); | |
| 174 | - const char *zAuthor = db_column_text(&q, 4); | |
| 171 | + const char *zEType = db_column_text(&q, 3); | |
| 172 | + const char *zCom = db_column_text(&q, 4); | |
| 173 | + const char *zAuthor = db_column_text(&q, 5); | |
| 175 | 174 | char *zPrefix = ""; |
| 176 | 175 | char *zSuffix = 0; |
| 177 | 176 | char *zDate; |
| 178 | 177 | int nChild = db_column_int(&q, 5); |
| 179 | - int nParent = db_column_int(&q, 6); | |
| 180 | - const char *zTagList = db_column_text(&q, 7); | |
| 178 | + int nParent = db_column_int(&q, 7); | |
| 179 | + const char *zTagList = db_column_text(&q, 8); | |
| 181 | 180 | time_t ts; |
| 182 | 181 | |
| 183 | 182 | if( zTagList && zTagList[0]==0 ) zTagList = 0; |
| 184 | 183 | ts = (time_t)((db_column_double(&q,2) - 2440587.5)*86400.0); |
| 185 | 184 | zDate = cgi_rfc822_datestamp(ts); |
| 186 | 185 | |
| 187 | - if( nParent>1 && nChild>1 ){ | |
| 188 | - zPrefix = "*MERGE/FORK* "; | |
| 189 | - }else if( nParent>1 ){ | |
| 190 | - zPrefix = "*MERGE* "; | |
| 191 | - }else if( nChild>1 ){ | |
| 192 | - zPrefix = "*FORK* "; | |
| 186 | + if('c'==zEType[0]){ | |
| 187 | + if( nParent>1 && nChild>1 ){ | |
| 188 | + zPrefix = "*MERGE/FORK* "; | |
| 189 | + }else if( nParent>1 ){ | |
| 190 | + zPrefix = "*MERGE* "; | |
| 191 | + }else if( nChild>1 ){ | |
| 192 | + zPrefix = "*FORK* "; | |
| 193 | + } | |
| 194 | + }else if('w'==zEType[0]){ | |
| 195 | + switch(zCom ? zCom[0] : 0){ | |
| 196 | + case ':': zPrefix = "Edit wiki page: "; break; | |
| 197 | + case '+': zPrefix = "Add wiki page: "; break; | |
| 198 | + case '-': zPrefix = "Delete wiki page: "; break; | |
| 199 | + } | |
| 200 | + if(*zPrefix) ++zCom; | |
| 193 | 201 | } |
| 194 | 202 | |
| 195 | 203 | if( zTagList ){ |
| 196 | 204 | zSuffix = mprintf(" (tags: %s)", zTagList); |
| 197 | 205 | } |
| 198 | 206 |
| --- src/rss.c | |
| +++ src/rss.c | |
| @@ -57,10 +57,11 @@ | |
| 57 | const char zSQL1[] = |
| 58 | @ SELECT |
| 59 | @ blob.rid, |
| 60 | @ uuid, |
| 61 | @ event.mtime, |
| 62 | @ coalesce(ecomment,comment), |
| 63 | @ coalesce(euser,user), |
| 64 | @ (SELECT count(*) FROM plink WHERE pid=blob.rid AND isprim), |
| 65 | @ (SELECT count(*) FROM plink WHERE cid=blob.rid), |
| 66 | @ (SELECT group_concat(substr(tagname,5), ', ') FROM tag, tagxref |
| @@ -74,37 +75,33 @@ | |
| 74 | if( !g.perm.Read && !g.perm.RdTkt && !g.perm.RdWiki ){ |
| 75 | return; |
| 76 | } |
| 77 | |
| 78 | blob_zero(&bSQL); |
| 79 | blob_append( &bSQL, zSQL1, -1 ); |
| 80 | |
| 81 | if( zType[0]!='a' ){ |
| 82 | if( zType[0]=='c' && !g.perm.Read ) zType = "x"; |
| 83 | if( zType[0]=='w' && !g.perm.RdWiki ) zType = "x"; |
| 84 | if( zType[0]=='t' && !g.perm.RdTkt ) zType = "x"; |
| 85 | blob_append_sql(&bSQL, " AND event.type=%Q", zType); |
| 86 | }else{ |
| 87 | if( !g.perm.Read ){ |
| 88 | if( g.perm.RdTkt && g.perm.RdWiki ){ |
| 89 | blob_append(&bSQL, " AND event.type!='ci'", -1); |
| 90 | }else if( g.perm.RdTkt ){ |
| 91 | blob_append(&bSQL, " AND event.type=='t'", -1); |
| 92 | |
| 93 | }else{ |
| 94 | blob_append(&bSQL, " AND event.type=='w'", -1); |
| 95 | } |
| 96 | }else if( !g.perm.RdWiki ){ |
| 97 | if( g.perm.RdTkt ){ |
| 98 | blob_append(&bSQL, " AND event.type!='w'", -1); |
| 99 | }else{ |
| 100 | blob_append(&bSQL, " AND event.type=='ci'", -1); |
| 101 | } |
| 102 | }else if( !g.perm.RdTkt ){ |
| 103 | assert( !g.perm.RdTkt && g.perm.Read && g.perm.RdWiki ); |
| 104 | blob_append(&bSQL, " AND event.type!='t'", -1); |
| 105 | } |
| 106 | } |
| 107 | |
| 108 | if( zTicketUuid ){ |
| 109 | nTagId = db_int(0, "SELECT tagid FROM tag WHERE tagname GLOB 'tkt-%q*'", |
| 110 | zTicketUuid); |
| @@ -134,16 +131,17 @@ | |
| 134 | " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid))", nTagId); |
| 135 | } |
| 136 | |
| 137 | if( zFilename ){ |
| 138 | blob_append_sql(&bSQL, |
| 139 | " AND (SELECT mlink.fnid FROM mlink WHERE event.objid=mlink.mid) IN (SELECT fnid FROM filename WHERE name=%Q %s)", |
| 140 | zFilename, filename_collation() |
| 141 | ); |
| 142 | } |
| 143 | |
| 144 | blob_append( &bSQL, " ORDER BY event.mtime DESC", -1 ); |
| 145 | |
| 146 | cgi_set_content_type("application/rss+xml"); |
| 147 | |
| 148 | zProjectName = db_get("project-name", 0); |
| 149 | if( zProjectName==0 ){ |
| @@ -168,30 +166,40 @@ | |
| 168 | free(zPubDate); |
| 169 | db_prepare(&q, "%s", blob_sql_text(&bSQL)); |
| 170 | blob_reset( &bSQL ); |
| 171 | while( db_step(&q)==SQLITE_ROW && nLine<nLimit ){ |
| 172 | const char *zId = db_column_text(&q, 1); |
| 173 | const char *zCom = db_column_text(&q, 3); |
| 174 | const char *zAuthor = db_column_text(&q, 4); |
| 175 | char *zPrefix = ""; |
| 176 | char *zSuffix = 0; |
| 177 | char *zDate; |
| 178 | int nChild = db_column_int(&q, 5); |
| 179 | int nParent = db_column_int(&q, 6); |
| 180 | const char *zTagList = db_column_text(&q, 7); |
| 181 | time_t ts; |
| 182 | |
| 183 | if( zTagList && zTagList[0]==0 ) zTagList = 0; |
| 184 | ts = (time_t)((db_column_double(&q,2) - 2440587.5)*86400.0); |
| 185 | zDate = cgi_rfc822_datestamp(ts); |
| 186 | |
| 187 | if( nParent>1 && nChild>1 ){ |
| 188 | zPrefix = "*MERGE/FORK* "; |
| 189 | }else if( nParent>1 ){ |
| 190 | zPrefix = "*MERGE* "; |
| 191 | }else if( nChild>1 ){ |
| 192 | zPrefix = "*FORK* "; |
| 193 | } |
| 194 | |
| 195 | if( zTagList ){ |
| 196 | zSuffix = mprintf(" (tags: %s)", zTagList); |
| 197 | } |
| 198 |
| --- src/rss.c | |
| +++ src/rss.c | |
| @@ -57,10 +57,11 @@ | |
| 57 | const char zSQL1[] = |
| 58 | @ SELECT |
| 59 | @ blob.rid, |
| 60 | @ uuid, |
| 61 | @ event.mtime, |
| 62 | @ event.type, |
| 63 | @ coalesce(ecomment,comment), |
| 64 | @ coalesce(euser,user), |
| 65 | @ (SELECT count(*) FROM plink WHERE pid=blob.rid AND isprim), |
| 66 | @ (SELECT count(*) FROM plink WHERE cid=blob.rid), |
| 67 | @ (SELECT group_concat(substr(tagname,5), ', ') FROM tag, tagxref |
| @@ -74,37 +75,33 @@ | |
| 75 | if( !g.perm.Read && !g.perm.RdTkt && !g.perm.RdWiki ){ |
| 76 | return; |
| 77 | } |
| 78 | |
| 79 | blob_zero(&bSQL); |
| 80 | blob_append_sql( &bSQL, "%s", zSQL1/*safe-for-%s*/ ); |
| 81 | |
| 82 | if( zType[0]!='a' ){ |
| 83 | if( zType[0]=='c' && !g.perm.Read ) zType = "x"; |
| 84 | if( zType[0]=='w' && !g.perm.RdWiki ) zType = "x"; |
| 85 | if( zType[0]=='t' && !g.perm.RdTkt ) zType = "x"; |
| 86 | if( zType[0]=='f' && !g.perm.RdForum ) zType = "x"; |
| 87 | blob_append_sql(&bSQL, " AND event.type=%Q", zType); |
| 88 | }else{ |
| 89 | blob_append_sql(&bSQL, " AND event.type in ("); |
| 90 | if( g.perm.Read ){ |
| 91 | blob_append_sql(&bSQL, "'ci',"); |
| 92 | } |
| 93 | if( g.perm.RdTkt ){ |
| 94 | blob_append_sql(&bSQL, "'t',"); |
| 95 | } |
| 96 | if( g.perm.RdWiki ){ |
| 97 | blob_append_sql(&bSQL, "'w',"); |
| 98 | } |
| 99 | if( g.perm.RdForum ){ |
| 100 | blob_append_sql(&bSQL, "'f',"); |
| 101 | } |
| 102 | blob_append_sql(&bSQL, "'x')"); |
| 103 | } |
| 104 | |
| 105 | if( zTicketUuid ){ |
| 106 | nTagId = db_int(0, "SELECT tagid FROM tag WHERE tagname GLOB 'tkt-%q*'", |
| 107 | zTicketUuid); |
| @@ -134,16 +131,17 @@ | |
| 131 | " WHERE tagid=%d AND tagtype>0 AND rid=blob.rid))", nTagId); |
| 132 | } |
| 133 | |
| 134 | if( zFilename ){ |
| 135 | blob_append_sql(&bSQL, |
| 136 | " AND (SELECT mlink.fnid FROM mlink WHERE event.objid=mlink.mid) " |
| 137 | " IN (SELECT fnid FROM filename WHERE name=%Q %s)", |
| 138 | zFilename, filename_collation() |
| 139 | ); |
| 140 | } |
| 141 | |
| 142 | blob_append_sql( &bSQL, " ORDER BY event.mtime DESC" ); |
| 143 | |
| 144 | cgi_set_content_type("application/rss+xml"); |
| 145 | |
| 146 | zProjectName = db_get("project-name", 0); |
| 147 | if( zProjectName==0 ){ |
| @@ -168,30 +166,40 @@ | |
| 166 | free(zPubDate); |
| 167 | db_prepare(&q, "%s", blob_sql_text(&bSQL)); |
| 168 | blob_reset( &bSQL ); |
| 169 | while( db_step(&q)==SQLITE_ROW && nLine<nLimit ){ |
| 170 | const char *zId = db_column_text(&q, 1); |
| 171 | const char *zEType = db_column_text(&q, 3); |
| 172 | const char *zCom = db_column_text(&q, 4); |
| 173 | const char *zAuthor = db_column_text(&q, 5); |
| 174 | char *zPrefix = ""; |
| 175 | char *zSuffix = 0; |
| 176 | char *zDate; |
| 177 | int nChild = db_column_int(&q, 5); |
| 178 | int nParent = db_column_int(&q, 7); |
| 179 | const char *zTagList = db_column_text(&q, 8); |
| 180 | time_t ts; |
| 181 | |
| 182 | if( zTagList && zTagList[0]==0 ) zTagList = 0; |
| 183 | ts = (time_t)((db_column_double(&q,2) - 2440587.5)*86400.0); |
| 184 | zDate = cgi_rfc822_datestamp(ts); |
| 185 | |
| 186 | if('c'==zEType[0]){ |
| 187 | if( nParent>1 && nChild>1 ){ |
| 188 | zPrefix = "*MERGE/FORK* "; |
| 189 | }else if( nParent>1 ){ |
| 190 | zPrefix = "*MERGE* "; |
| 191 | }else if( nChild>1 ){ |
| 192 | zPrefix = "*FORK* "; |
| 193 | } |
| 194 | }else if('w'==zEType[0]){ |
| 195 | switch(zCom ? zCom[0] : 0){ |
| 196 | case ':': zPrefix = "Edit wiki page: "; break; |
| 197 | case '+': zPrefix = "Add wiki page: "; break; |
| 198 | case '-': zPrefix = "Delete wiki page: "; break; |
| 199 | } |
| 200 | if(*zPrefix) ++zCom; |
| 201 | } |
| 202 | |
| 203 | if( zTagList ){ |
| 204 | zSuffix = mprintf(" (tags: %s)", zTagList); |
| 205 | } |
| 206 |
+1
-1
| --- src/schema.c | ||
| +++ src/schema.c | ||
| @@ -584,11 +584,11 @@ | ||
| 584 | 584 | @ -- file tree. If a VFILE entry with id has merged with another |
| 585 | 585 | @ -- record, there is an entry in this table with (id,merge) where |
| 586 | 586 | @ -- merge is the RECORD table entry that the file merged against. |
| 587 | 587 | @ -- An id of 0 or <-3 here means the version record itself. When |
| 588 | 588 | @ -- id==(-1) that is a cherrypick merge, id==(-2) that is a |
| 589 | -@ -- backout merge and id==(-4) is a integrate merge. | |
| 589 | +@ -- backout merge and id==(-4) is an integrate merge. | |
| 590 | 590 | @ -- |
| 591 | 591 | @ |
| 592 | 592 | @ CREATE TABLE vmerge( |
| 593 | 593 | @ id INTEGER REFERENCES vfile, -- VFILE entry that has been merged |
| 594 | 594 | @ merge INTEGER, -- Merged with this record |
| 595 | 595 |
| --- src/schema.c | |
| +++ src/schema.c | |
| @@ -584,11 +584,11 @@ | |
| 584 | @ -- file tree. If a VFILE entry with id has merged with another |
| 585 | @ -- record, there is an entry in this table with (id,merge) where |
| 586 | @ -- merge is the RECORD table entry that the file merged against. |
| 587 | @ -- An id of 0 or <-3 here means the version record itself. When |
| 588 | @ -- id==(-1) that is a cherrypick merge, id==(-2) that is a |
| 589 | @ -- backout merge and id==(-4) is a integrate merge. |
| 590 | @ -- |
| 591 | @ |
| 592 | @ CREATE TABLE vmerge( |
| 593 | @ id INTEGER REFERENCES vfile, -- VFILE entry that has been merged |
| 594 | @ merge INTEGER, -- Merged with this record |
| 595 |
| --- src/schema.c | |
| +++ src/schema.c | |
| @@ -584,11 +584,11 @@ | |
| 584 | @ -- file tree. If a VFILE entry with id has merged with another |
| 585 | @ -- record, there is an entry in this table with (id,merge) where |
| 586 | @ -- merge is the RECORD table entry that the file merged against. |
| 587 | @ -- An id of 0 or <-3 here means the version record itself. When |
| 588 | @ -- id==(-1) that is a cherrypick merge, id==(-2) that is a |
| 589 | @ -- backout merge and id==(-4) is an integrate merge. |
| 590 | @ -- |
| 591 | @ |
| 592 | @ CREATE TABLE vmerge( |
| 593 | @ id INTEGER REFERENCES vfile, -- VFILE entry that has been merged |
| 594 | @ merge INTEGER, -- Merged with this record |
| 595 |
+1
-1
| --- src/search.c | ||
| +++ src/search.c | ||
| @@ -19,11 +19,11 @@ | ||
| 19 | 19 | ** against timeline comments, check-in content, wiki pages, tickets, |
| 20 | 20 | ** and/or forum posts. |
| 21 | 21 | ** |
| 22 | 22 | ** The search can be either a per-query "grep"-like search that scans |
| 23 | 23 | ** the entire corpus. Or it can use the FTS4 search engine of SQLite. |
| 24 | -** The choice is a administrator configuration option. | |
| 24 | +** The choice is an administrator configuration option. | |
| 25 | 25 | ** |
| 26 | 26 | ** The first option is referred to as "full-scan search". The second |
| 27 | 27 | ** option is called "indexed search". |
| 28 | 28 | ** |
| 29 | 29 | ** The code in this file is ordered approximately as follows: |
| 30 | 30 |
| --- src/search.c | |
| +++ src/search.c | |
| @@ -19,11 +19,11 @@ | |
| 19 | ** against timeline comments, check-in content, wiki pages, tickets, |
| 20 | ** and/or forum posts. |
| 21 | ** |
| 22 | ** The search can be either a per-query "grep"-like search that scans |
| 23 | ** the entire corpus. Or it can use the FTS4 search engine of SQLite. |
| 24 | ** The choice is a administrator configuration option. |
| 25 | ** |
| 26 | ** The first option is referred to as "full-scan search". The second |
| 27 | ** option is called "indexed search". |
| 28 | ** |
| 29 | ** The code in this file is ordered approximately as follows: |
| 30 |
| --- src/search.c | |
| +++ src/search.c | |
| @@ -19,11 +19,11 @@ | |
| 19 | ** against timeline comments, check-in content, wiki pages, tickets, |
| 20 | ** and/or forum posts. |
| 21 | ** |
| 22 | ** The search can be either a per-query "grep"-like search that scans |
| 23 | ** the entire corpus. Or it can use the FTS4 search engine of SQLite. |
| 24 | ** The choice is an administrator configuration option. |
| 25 | ** |
| 26 | ** The first option is referred to as "full-scan search". The second |
| 27 | ** option is called "indexed search". |
| 28 | ** |
| 29 | ** The code in this file is ordered approximately as follows: |
| 30 |
+4
-3
| --- src/security_audit.c | ||
| +++ src/security_audit.c | ||
| @@ -208,12 +208,12 @@ | ||
| 208 | 208 | zPublicUrl = public_url(); |
| 209 | 209 | if( zPublicUrl!=0 ){ |
| 210 | 210 | int nOther = db_int(0, "SELECT count(*) FROM config" |
| 211 | 211 | " WHERE name GLOB 'baseurl:*'" |
| 212 | 212 | " AND name<>'baseurl:%q'", zPublicUrl); |
| 213 | - @ <li><p>The canonical URL for this repository is | |
| 214 | - @ <a href="%s(zPublicUrl)">%h(zPublicUrl)</a>. | |
| 213 | + @ <li><p>The <a href="setup_config#eurl">canonical URL</a> for this | |
| 214 | + @ repository is <a href="%s(zPublicUrl)">%h(zPublicUrl)</a>. | |
| 215 | 215 | if( nOther==1 ){ |
| 216 | 216 | @ This is also <a href="urllist?urlonly">1 other URL</a> that has |
| 217 | 217 | @ been used to access this repository. |
| 218 | 218 | }else if( nOther>=2 ){ |
| 219 | 219 | @ There are also |
| @@ -221,11 +221,12 @@ | ||
| 221 | 221 | @ been used to access this repository. |
| 222 | 222 | } |
| 223 | 223 | }else{ |
| 224 | 224 | int nUrl = db_int(0, "SELECT count(*) FROM config" |
| 225 | 225 | " WHERE name GLOB 'baseurl:*'"); |
| 226 | - @ <li><p>This repository does not have a canonical access URL. | |
| 226 | + @ <li><p>This repository does not have a | |
| 227 | + @ <a href="setup_config#eurl">canonical access URL</a>. | |
| 227 | 228 | if( nUrl==1 ){ |
| 228 | 229 | @ There is |
| 229 | 230 | @ <a href="urllist?urlonly">1 non-canonical URL</a> |
| 230 | 231 | @ that has been used to access this repository. |
| 231 | 232 | }else if( nUrl>=2 ){ |
| 232 | 233 |
| --- src/security_audit.c | |
| +++ src/security_audit.c | |
| @@ -208,12 +208,12 @@ | |
| 208 | zPublicUrl = public_url(); |
| 209 | if( zPublicUrl!=0 ){ |
| 210 | int nOther = db_int(0, "SELECT count(*) FROM config" |
| 211 | " WHERE name GLOB 'baseurl:*'" |
| 212 | " AND name<>'baseurl:%q'", zPublicUrl); |
| 213 | @ <li><p>The canonical URL for this repository is |
| 214 | @ <a href="%s(zPublicUrl)">%h(zPublicUrl)</a>. |
| 215 | if( nOther==1 ){ |
| 216 | @ This is also <a href="urllist?urlonly">1 other URL</a> that has |
| 217 | @ been used to access this repository. |
| 218 | }else if( nOther>=2 ){ |
| 219 | @ There are also |
| @@ -221,11 +221,12 @@ | |
| 221 | @ been used to access this repository. |
| 222 | } |
| 223 | }else{ |
| 224 | int nUrl = db_int(0, "SELECT count(*) FROM config" |
| 225 | " WHERE name GLOB 'baseurl:*'"); |
| 226 | @ <li><p>This repository does not have a canonical access URL. |
| 227 | if( nUrl==1 ){ |
| 228 | @ There is |
| 229 | @ <a href="urllist?urlonly">1 non-canonical URL</a> |
| 230 | @ that has been used to access this repository. |
| 231 | }else if( nUrl>=2 ){ |
| 232 |
| --- src/security_audit.c | |
| +++ src/security_audit.c | |
| @@ -208,12 +208,12 @@ | |
| 208 | zPublicUrl = public_url(); |
| 209 | if( zPublicUrl!=0 ){ |
| 210 | int nOther = db_int(0, "SELECT count(*) FROM config" |
| 211 | " WHERE name GLOB 'baseurl:*'" |
| 212 | " AND name<>'baseurl:%q'", zPublicUrl); |
| 213 | @ <li><p>The <a href="setup_config#eurl">canonical URL</a> for this |
| 214 | @ repository is <a href="%s(zPublicUrl)">%h(zPublicUrl)</a>. |
| 215 | if( nOther==1 ){ |
| 216 | @ This is also <a href="urllist?urlonly">1 other URL</a> that has |
| 217 | @ been used to access this repository. |
| 218 | }else if( nOther>=2 ){ |
| 219 | @ There are also |
| @@ -221,11 +221,12 @@ | |
| 221 | @ been used to access this repository. |
| 222 | } |
| 223 | }else{ |
| 224 | int nUrl = db_int(0, "SELECT count(*) FROM config" |
| 225 | " WHERE name GLOB 'baseurl:*'"); |
| 226 | @ <li><p>This repository does not have a |
| 227 | @ <a href="setup_config#eurl">canonical access URL</a>. |
| 228 | if( nUrl==1 ){ |
| 229 | @ There is |
| 230 | @ <a href="urllist?urlonly">1 non-canonical URL</a> |
| 231 | @ that has been used to access this repository. |
| 232 | }else if( nUrl>=2 ){ |
| 233 |
+9
-1
| --- src/setup.c | ||
| +++ src/setup.c | ||
| @@ -1102,11 +1102,11 @@ | ||
| 1102 | 1102 | @ engines as well as a short RSS description. |
| 1103 | 1103 | @ (Property: "project-description")</p> |
| 1104 | 1104 | @ <hr /> |
| 1105 | 1105 | entry_attribute("Canonical Server URL", 40, "email-url", |
| 1106 | 1106 | "eurl", "", 0); |
| 1107 | - @ <p>This is the URL used access this repository as a server. | |
| 1107 | + @ <p>This is the URL used to access this repository as a server. | |
| 1108 | 1108 | @ Other repositories use this URL to clone or sync against this repository. |
| 1109 | 1109 | @ This is also the basename for hyperlinks included in email alert text. |
| 1110 | 1110 | @ Omit the trailing "/". |
| 1111 | 1111 | @ If this repo will not be set up as a persistent server and will not |
| 1112 | 1112 | @ be sending email alerts, then leave this entry blank. |
| @@ -1351,10 +1351,18 @@ | ||
| 1351 | 1351 | @ default setting of approximately 7 minutes works well on many systems. |
| 1352 | 1352 | @ Shorter delays might be required on installations that use proxies |
| 1353 | 1353 | @ or web-servers with short timeouts. For best efficiency, this value |
| 1354 | 1354 | @ should be larger rather than smaller. |
| 1355 | 1355 | @ (Property: "chat-poll-timeout")</p> |
| 1356 | + @ <hr /> | |
| 1357 | + entry_attribute("Chat Timeline Robot Username", 15, | |
| 1358 | + "chat-timeline-user", "chatrobot", "", 0); | |
| 1359 | + @ <p>If this setting is not an empty string, then any changes that appear | |
| 1360 | + @ on the timeline are announced in the chatroom under the username | |
| 1361 | + @ supplied. The username does not need to actually exist in the USER table. | |
| 1362 | + @ Suggested username: "chat-robot". | |
| 1363 | + @ (Property: "chat-timeline-user")</p> | |
| 1356 | 1364 | @ <hr /> |
| 1357 | 1365 | |
| 1358 | 1366 | multiple_choice_attribute("Alert sound", |
| 1359 | 1367 | "chat-alert-sound", "snd", azAlerts[0], |
| 1360 | 1368 | count(azAlerts)/2, azAlerts); |
| 1361 | 1369 |
| --- src/setup.c | |
| +++ src/setup.c | |
| @@ -1102,11 +1102,11 @@ | |
| 1102 | @ engines as well as a short RSS description. |
| 1103 | @ (Property: "project-description")</p> |
| 1104 | @ <hr /> |
| 1105 | entry_attribute("Canonical Server URL", 40, "email-url", |
| 1106 | "eurl", "", 0); |
| 1107 | @ <p>This is the URL used access this repository as a server. |
| 1108 | @ Other repositories use this URL to clone or sync against this repository. |
| 1109 | @ This is also the basename for hyperlinks included in email alert text. |
| 1110 | @ Omit the trailing "/". |
| 1111 | @ If this repo will not be set up as a persistent server and will not |
| 1112 | @ be sending email alerts, then leave this entry blank. |
| @@ -1351,10 +1351,18 @@ | |
| 1351 | @ default setting of approximately 7 minutes works well on many systems. |
| 1352 | @ Shorter delays might be required on installations that use proxies |
| 1353 | @ or web-servers with short timeouts. For best efficiency, this value |
| 1354 | @ should be larger rather than smaller. |
| 1355 | @ (Property: "chat-poll-timeout")</p> |
| 1356 | @ <hr /> |
| 1357 | |
| 1358 | multiple_choice_attribute("Alert sound", |
| 1359 | "chat-alert-sound", "snd", azAlerts[0], |
| 1360 | count(azAlerts)/2, azAlerts); |
| 1361 |
| --- src/setup.c | |
| +++ src/setup.c | |
| @@ -1102,11 +1102,11 @@ | |
| 1102 | @ engines as well as a short RSS description. |
| 1103 | @ (Property: "project-description")</p> |
| 1104 | @ <hr /> |
| 1105 | entry_attribute("Canonical Server URL", 40, "email-url", |
| 1106 | "eurl", "", 0); |
| 1107 | @ <p>This is the URL used to access this repository as a server. |
| 1108 | @ Other repositories use this URL to clone or sync against this repository. |
| 1109 | @ This is also the basename for hyperlinks included in email alert text. |
| 1110 | @ Omit the trailing "/". |
| 1111 | @ If this repo will not be set up as a persistent server and will not |
| 1112 | @ be sending email alerts, then leave this entry blank. |
| @@ -1351,10 +1351,18 @@ | |
| 1351 | @ default setting of approximately 7 minutes works well on many systems. |
| 1352 | @ Shorter delays might be required on installations that use proxies |
| 1353 | @ or web-servers with short timeouts. For best efficiency, this value |
| 1354 | @ should be larger rather than smaller. |
| 1355 | @ (Property: "chat-poll-timeout")</p> |
| 1356 | @ <hr /> |
| 1357 | entry_attribute("Chat Timeline Robot Username", 15, |
| 1358 | "chat-timeline-user", "chatrobot", "", 0); |
| 1359 | @ <p>If this setting is not an empty string, then any changes that appear |
| 1360 | @ on the timeline are announced in the chatroom under the username |
| 1361 | @ supplied. The username does not need to actually exist in the USER table. |
| 1362 | @ Suggested username: "chat-robot". |
| 1363 | @ (Property: "chat-timeline-user")</p> |
| 1364 | @ <hr /> |
| 1365 | |
| 1366 | multiple_choice_attribute("Alert sound", |
| 1367 | "chat-alert-sound", "snd", azAlerts[0], |
| 1368 | count(azAlerts)/2, azAlerts); |
| 1369 |
+4
-1
| --- src/setupuser.c | ||
| +++ src/setupuser.c | ||
| @@ -586,11 +586,14 @@ | ||
| 586 | 586 | /* Begin generating the page |
| 587 | 587 | */ |
| 588 | 588 | style_submenu_element("Cancel", "%s", cgi_referer("setup_ulist")); |
| 589 | 589 | if( uid ){ |
| 590 | 590 | style_header("Edit User %h", zLogin); |
| 591 | - style_submenu_element("Access Log", "%R/access_log?u=%t", zLogin); | |
| 591 | + if( !login_is_special(zLogin) ){ | |
| 592 | + style_submenu_element("Access Log", "%R/access_log?u=%t", zLogin); | |
| 593 | + style_submenu_element("Timeline","%R/timeline?u=%t", zLogin); | |
| 594 | + } | |
| 592 | 595 | }else{ |
| 593 | 596 | style_header("Add A New User"); |
| 594 | 597 | } |
| 595 | 598 | @ <div class="ueditCapBox"> |
| 596 | 599 | @ <form action="%s(g.zPath)" method="post"><div> |
| 597 | 600 |
| --- src/setupuser.c | |
| +++ src/setupuser.c | |
| @@ -586,11 +586,14 @@ | |
| 586 | /* Begin generating the page |
| 587 | */ |
| 588 | style_submenu_element("Cancel", "%s", cgi_referer("setup_ulist")); |
| 589 | if( uid ){ |
| 590 | style_header("Edit User %h", zLogin); |
| 591 | style_submenu_element("Access Log", "%R/access_log?u=%t", zLogin); |
| 592 | }else{ |
| 593 | style_header("Add A New User"); |
| 594 | } |
| 595 | @ <div class="ueditCapBox"> |
| 596 | @ <form action="%s(g.zPath)" method="post"><div> |
| 597 |
| --- src/setupuser.c | |
| +++ src/setupuser.c | |
| @@ -586,11 +586,14 @@ | |
| 586 | /* Begin generating the page |
| 587 | */ |
| 588 | style_submenu_element("Cancel", "%s", cgi_referer("setup_ulist")); |
| 589 | if( uid ){ |
| 590 | style_header("Edit User %h", zLogin); |
| 591 | if( !login_is_special(zLogin) ){ |
| 592 | style_submenu_element("Access Log", "%R/access_log?u=%t", zLogin); |
| 593 | style_submenu_element("Timeline","%R/timeline?u=%t", zLogin); |
| 594 | } |
| 595 | }else{ |
| 596 | style_header("Add A New User"); |
| 597 | } |
| 598 | @ <div class="ueditCapBox"> |
| 599 | @ <form action="%s(g.zPath)" method="post"><div> |
| 600 |
+1
-1
| --- src/sha1.c | ||
| +++ src/sha1.c | ||
| @@ -276,11 +276,11 @@ | ||
| 276 | 276 | } |
| 277 | 277 | *zBuf = '\0'; |
| 278 | 278 | } |
| 279 | 279 | |
| 280 | 280 | /* |
| 281 | -** The state of a incremental SHA1 checksum computation. Only one | |
| 281 | +** The state of an incremental SHA1 checksum computation. Only one | |
| 282 | 282 | ** such computation can be underway at a time, of course. |
| 283 | 283 | */ |
| 284 | 284 | static SHA1Context incrCtx; |
| 285 | 285 | static int incrInit = 0; |
| 286 | 286 | |
| 287 | 287 |
| --- src/sha1.c | |
| +++ src/sha1.c | |
| @@ -276,11 +276,11 @@ | |
| 276 | } |
| 277 | *zBuf = '\0'; |
| 278 | } |
| 279 | |
| 280 | /* |
| 281 | ** The state of a incremental SHA1 checksum computation. Only one |
| 282 | ** such computation can be underway at a time, of course. |
| 283 | */ |
| 284 | static SHA1Context incrCtx; |
| 285 | static int incrInit = 0; |
| 286 | |
| 287 |
| --- src/sha1.c | |
| +++ src/sha1.c | |
| @@ -276,11 +276,11 @@ | |
| 276 | } |
| 277 | *zBuf = '\0'; |
| 278 | } |
| 279 | |
| 280 | /* |
| 281 | ** The state of an incremental SHA1 checksum computation. Only one |
| 282 | ** such computation can be underway at a time, of course. |
| 283 | */ |
| 284 | static SHA1Context incrCtx; |
| 285 | static int incrInit = 0; |
| 286 | |
| 287 |
+1
-1
| --- src/sha3.c | ||
| +++ src/sha3.c | ||
| @@ -484,11 +484,11 @@ | ||
| 484 | 484 | } |
| 485 | 485 | *zBuf = '\0'; |
| 486 | 486 | } |
| 487 | 487 | |
| 488 | 488 | /* |
| 489 | -** The state of a incremental SHA3 checksum computation. Only one | |
| 489 | +** The state of an incremental SHA3 checksum computation. Only one | |
| 490 | 490 | ** such computation can be underway at a time, of course. |
| 491 | 491 | */ |
| 492 | 492 | static SHA3Context incrCtx; |
| 493 | 493 | static int incrInit = 0; |
| 494 | 494 | |
| 495 | 495 |
| --- src/sha3.c | |
| +++ src/sha3.c | |
| @@ -484,11 +484,11 @@ | |
| 484 | } |
| 485 | *zBuf = '\0'; |
| 486 | } |
| 487 | |
| 488 | /* |
| 489 | ** The state of a incremental SHA3 checksum computation. Only one |
| 490 | ** such computation can be underway at a time, of course. |
| 491 | */ |
| 492 | static SHA3Context incrCtx; |
| 493 | static int incrInit = 0; |
| 494 | |
| 495 |
| --- src/sha3.c | |
| +++ src/sha3.c | |
| @@ -484,11 +484,11 @@ | |
| 484 | } |
| 485 | *zBuf = '\0'; |
| 486 | } |
| 487 | |
| 488 | /* |
| 489 | ** The state of an incremental SHA3 checksum computation. Only one |
| 490 | ** such computation can be underway at a time, of course. |
| 491 | */ |
| 492 | static SHA3Context incrCtx; |
| 493 | static int incrInit = 0; |
| 494 | |
| 495 |
+1
-1
| --- src/skins.c | ||
| +++ src/skins.c | ||
| @@ -849,11 +849,11 @@ | ||
| 849 | 849 | @ <form action="%R/setup_skinedit" method="post"><div> |
| 850 | 850 | login_insert_csrf_secret(); |
| 851 | 851 | @ <input type='hidden' name='w' value='%d(ii)'> |
| 852 | 852 | @ <input type='hidden' name='sk' value='%d(iSkin)'> |
| 853 | 853 | @ <h2>Edit %s(zTitle):</h2> |
| 854 | - if( P("submit") && cgi_csrf_safe(0) && strcmp(zOrig,zContent)!=0 ){ | |
| 854 | + if( P("submit") && cgi_csrf_safe(0) && (zOrig==0 || strcmp(zOrig,zContent)!=0) ){ | |
| 855 | 855 | db_set_mprintf(zContent, 0, "draft%d-%s",iSkin,zFile); |
| 856 | 856 | } |
| 857 | 857 | @ <textarea name="%s(zFile)" rows="10" cols="80">\ |
| 858 | 858 | @ %h(zContent)</textarea> |
| 859 | 859 | @ <br /> |
| 860 | 860 |
| --- src/skins.c | |
| +++ src/skins.c | |
| @@ -849,11 +849,11 @@ | |
| 849 | @ <form action="%R/setup_skinedit" method="post"><div> |
| 850 | login_insert_csrf_secret(); |
| 851 | @ <input type='hidden' name='w' value='%d(ii)'> |
| 852 | @ <input type='hidden' name='sk' value='%d(iSkin)'> |
| 853 | @ <h2>Edit %s(zTitle):</h2> |
| 854 | if( P("submit") && cgi_csrf_safe(0) && strcmp(zOrig,zContent)!=0 ){ |
| 855 | db_set_mprintf(zContent, 0, "draft%d-%s",iSkin,zFile); |
| 856 | } |
| 857 | @ <textarea name="%s(zFile)" rows="10" cols="80">\ |
| 858 | @ %h(zContent)</textarea> |
| 859 | @ <br /> |
| 860 |
| --- src/skins.c | |
| +++ src/skins.c | |
| @@ -849,11 +849,11 @@ | |
| 849 | @ <form action="%R/setup_skinedit" method="post"><div> |
| 850 | login_insert_csrf_secret(); |
| 851 | @ <input type='hidden' name='w' value='%d(ii)'> |
| 852 | @ <input type='hidden' name='sk' value='%d(iSkin)'> |
| 853 | @ <h2>Edit %s(zTitle):</h2> |
| 854 | if( P("submit") && cgi_csrf_safe(0) && (zOrig==0 || strcmp(zOrig,zContent)!=0) ){ |
| 855 | db_set_mprintf(zContent, 0, "draft%d-%s",iSkin,zFile); |
| 856 | } |
| 857 | @ <textarea name="%s(zFile)" rows="10" cols="80">\ |
| 858 | @ %h(zContent)</textarea> |
| 859 | @ <br /> |
| 860 |
+1
-1
| --- src/stat.c | ||
| +++ src/stat.c | ||
| @@ -231,11 +231,11 @@ | ||
| 231 | 231 | @ <tr><th>Number Of Wiki Pages:</th><td> |
| 232 | 232 | n = db_int(0, "SELECT count(*) FROM tag /*scan*/" |
| 233 | 233 | " WHERE +tagname GLOB 'wiki-*'"); |
| 234 | 234 | @ %,d(n) |
| 235 | 235 | @ </td></tr> |
| 236 | - if( db_table_exists("repository","chat") ){ | |
| 236 | + if( g.perm.Chat && db_table_exists("repository","chat") ){ | |
| 237 | 237 | sqlite3_int64 sz = 0; |
| 238 | 238 | char zSz[100]; |
| 239 | 239 | n = db_int(0, "SELECT max(msgid) FROM chat"); |
| 240 | 240 | m = db_int(0, "SELECT count(*) FROM chat WHERE mdel IS NOT TRUE"); |
| 241 | 241 | sz = db_int64(0, "SELECT sum(coalesce(length(xmsg),0)+" |
| 242 | 242 |
| --- src/stat.c | |
| +++ src/stat.c | |
| @@ -231,11 +231,11 @@ | |
| 231 | @ <tr><th>Number Of Wiki Pages:</th><td> |
| 232 | n = db_int(0, "SELECT count(*) FROM tag /*scan*/" |
| 233 | " WHERE +tagname GLOB 'wiki-*'"); |
| 234 | @ %,d(n) |
| 235 | @ </td></tr> |
| 236 | if( db_table_exists("repository","chat") ){ |
| 237 | sqlite3_int64 sz = 0; |
| 238 | char zSz[100]; |
| 239 | n = db_int(0, "SELECT max(msgid) FROM chat"); |
| 240 | m = db_int(0, "SELECT count(*) FROM chat WHERE mdel IS NOT TRUE"); |
| 241 | sz = db_int64(0, "SELECT sum(coalesce(length(xmsg),0)+" |
| 242 |
| --- src/stat.c | |
| +++ src/stat.c | |
| @@ -231,11 +231,11 @@ | |
| 231 | @ <tr><th>Number Of Wiki Pages:</th><td> |
| 232 | n = db_int(0, "SELECT count(*) FROM tag /*scan*/" |
| 233 | " WHERE +tagname GLOB 'wiki-*'"); |
| 234 | @ %,d(n) |
| 235 | @ </td></tr> |
| 236 | if( g.perm.Chat && db_table_exists("repository","chat") ){ |
| 237 | sqlite3_int64 sz = 0; |
| 238 | char zSz[100]; |
| 239 | n = db_int(0, "SELECT max(msgid) FROM chat"); |
| 240 | m = db_int(0, "SELECT count(*) FROM chat WHERE mdel IS NOT TRUE"); |
| 241 | sz = db_int64(0, "SELECT sum(coalesce(length(xmsg),0)+" |
| 242 |
+1
-1
| --- src/style.c | ||
| +++ src/style.c | ||
| @@ -101,11 +101,11 @@ | ||
| 101 | 101 | ** Extra JS added to the end of the file. |
| 102 | 102 | */ |
| 103 | 103 | static Blob blobOnLoad = BLOB_INITIALIZER; |
| 104 | 104 | |
| 105 | 105 | /* |
| 106 | -** Generate and return a anchor tag like this: | |
| 106 | +** Generate and return an anchor tag like this: | |
| 107 | 107 | ** |
| 108 | 108 | ** <a href="URL"> |
| 109 | 109 | ** or <a id="ID"> |
| 110 | 110 | ** |
| 111 | 111 | ** The form of the anchor tag is determined by the g.jsHref |
| 112 | 112 |
| --- src/style.c | |
| +++ src/style.c | |
| @@ -101,11 +101,11 @@ | |
| 101 | ** Extra JS added to the end of the file. |
| 102 | */ |
| 103 | static Blob blobOnLoad = BLOB_INITIALIZER; |
| 104 | |
| 105 | /* |
| 106 | ** Generate and return a anchor tag like this: |
| 107 | ** |
| 108 | ** <a href="URL"> |
| 109 | ** or <a id="ID"> |
| 110 | ** |
| 111 | ** The form of the anchor tag is determined by the g.jsHref |
| 112 |
| --- src/style.c | |
| +++ src/style.c | |
| @@ -101,11 +101,11 @@ | |
| 101 | ** Extra JS added to the end of the file. |
| 102 | */ |
| 103 | static Blob blobOnLoad = BLOB_INITIALIZER; |
| 104 | |
| 105 | /* |
| 106 | ** Generate and return an anchor tag like this: |
| 107 | ** |
| 108 | ** <a href="URL"> |
| 109 | ** or <a id="ID"> |
| 110 | ** |
| 111 | ** The form of the anchor tag is determined by the g.jsHref |
| 112 |
+8
-8
| --- src/tag.c | ||
| +++ src/tag.c | ||
| @@ -282,11 +282,11 @@ | ||
| 282 | 282 | } |
| 283 | 283 | |
| 284 | 284 | /* |
| 285 | 285 | ** OR this value into the tagtype argument to tag_add_artifact to |
| 286 | 286 | ** cause the tag to be displayed on standard output rather than be |
| 287 | -** inserted. Used for --dryrun options and debugging. | |
| 287 | +** inserted. Used for --dry-run options and debugging. | |
| 288 | 288 | */ |
| 289 | 289 | #if INTERFACE |
| 290 | 290 | #define TAG_ADD_DRYRUN 0x04 |
| 291 | 291 | #endif |
| 292 | 292 | |
| @@ -407,11 +407,11 @@ | ||
| 407 | 407 | ** --raw Raw tag name. Ignored for |
| 408 | 408 | ** non-CHECK-IN artifacts. |
| 409 | 409 | ** --propagate Propagating tag. |
| 410 | 410 | ** --date-override DATETIME Set date and time added. |
| 411 | 411 | ** --user-override USER Name USER when adding the tag. |
| 412 | -** -n|--dryrun Display the tag text, but do not | |
| 412 | +** -n|--dry-run Display the tag text, but do not | |
| 413 | 413 | ** actually insert it into the database. |
| 414 | 414 | ** |
| 415 | 415 | ** The --date-override and --user-override options support |
| 416 | 416 | ** importing history from other SCM systems. DATETIME has |
| 417 | 417 | ** the form 'YYYY-MMM-DD HH:MM:SS'. |
| @@ -422,20 +422,20 @@ | ||
| 422 | 422 | ** |
| 423 | 423 | ** > fossil tag cancel ?--raw? TAGNAME ARTIFACT-ID |
| 424 | 424 | ** |
| 425 | 425 | ** Remove the tag TAGNAME from the artifact referenced by |
| 426 | 426 | ** ARTIFACT-ID, and also remove the propagation of the tag to |
| 427 | -** any descendants. Use the the -n|--dryrun option to see | |
| 427 | +** any descendants. Use the the -n|--dry-run option to see | |
| 428 | 428 | ** what would have happened. Certain tag name prefixes are |
| 429 | 429 | ** forbidden, as documented for the 'add' subcommand. |
| 430 | 430 | ** |
| 431 | 431 | ** Options: |
| 432 | 432 | ** --raw Raw tag name. Ignored for |
| 433 | 433 | ** non-CHECK-IN artifacts. |
| 434 | 434 | ** --date-override DATETIME Set date and time deleted. |
| 435 | 435 | ** --user-override USER Name USER when deleting the tag. |
| 436 | -** -n|--dryrun Display the control artifact, but do | |
| 436 | +** -n|--dry-run Display the control artifact, but do | |
| 437 | 437 | ** not insert it into the database. |
| 438 | 438 | ** |
| 439 | 439 | ** > fossil tag find ?OPTIONS? TAGNAME |
| 440 | 440 | ** |
| 441 | 441 | ** List all objects that use TAGNAME. |
| @@ -514,11 +514,11 @@ | ||
| 514 | 514 | const char *zDateOvrd = find_option("date-override",0,1); |
| 515 | 515 | const char *zUserOvrd = find_option("user-override",0,1); |
| 516 | 516 | const char *zTag; |
| 517 | 517 | const char *zObjId; |
| 518 | 518 | int objType; |
| 519 | - if( find_option("dryrun","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN; | |
| 519 | + if( find_option("dry-run","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN; | |
| 520 | 520 | if( g.argc!=5 && g.argc!=6 ){ |
| 521 | 521 | usage("add ?options? TAGNAME ARTIFACT-ID ?VALUE?"); |
| 522 | 522 | } |
| 523 | 523 | zTag = g.argv[3]; |
| 524 | 524 | tag_cmd_tagname_check(zTag); |
| @@ -552,11 +552,11 @@ | ||
| 552 | 552 | const char *zDateOvrd = find_option("date-override",0,1); |
| 553 | 553 | const char *zUserOvrd = find_option("user-override",0,1); |
| 554 | 554 | const char *zTag; |
| 555 | 555 | const char *zObjId; |
| 556 | 556 | int objType; |
| 557 | - if( find_option("dryrun","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN; | |
| 557 | + if( find_option("dry-run","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN; | |
| 558 | 558 | if( g.argc!=5 ){ |
| 559 | 559 | usage("cancel ?options? TAGNAME ARTIFACT-ID"); |
| 560 | 560 | } |
| 561 | 561 | zTag = g.argv[3]; |
| 562 | 562 | tag_cmd_tagname_check(zTag); |
| @@ -751,11 +751,11 @@ | ||
| 751 | 751 | ** reparenting operation, simply delete the tag. |
| 752 | 752 | ** |
| 753 | 753 | ** --test Make database entries but do not add the tag artifact. |
| 754 | 754 | ** So the reparent operation will be undone by the next |
| 755 | 755 | ** "fossil rebuild" command. |
| 756 | -** -n|--dryrun Print the tag that would have been created but do not | |
| 756 | +** -n|--dry-run Print the tag that would have been created but do not | |
| 757 | 757 | ** actually change the database in any way. |
| 758 | 758 | ** --date-override DATETIME Set the change time on the control artifact |
| 759 | 759 | ** --user-override USER Set the user name on the control artifact |
| 760 | 760 | */ |
| 761 | 761 | void reparent_cmd(void){ |
| @@ -766,11 +766,11 @@ | ||
| 766 | 766 | char *zUuid; |
| 767 | 767 | int dryRun = 0; |
| 768 | 768 | const char *zDateOvrd; /* The change time on the control artifact */ |
| 769 | 769 | const char *zUserOvrd; /* The user name on the control artifact */ |
| 770 | 770 | |
| 771 | - if( find_option("dryrun","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN; | |
| 771 | + if( find_option("dry-run","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN; | |
| 772 | 772 | zDateOvrd = find_option("date-override",0,1); |
| 773 | 773 | zUserOvrd = find_option("user-override",0,1); |
| 774 | 774 | db_find_and_open_repository(0, 0); |
| 775 | 775 | verify_all_options(); |
| 776 | 776 | if( g.argc<4 ){ |
| 777 | 777 |
| --- src/tag.c | |
| +++ src/tag.c | |
| @@ -282,11 +282,11 @@ | |
| 282 | } |
| 283 | |
| 284 | /* |
| 285 | ** OR this value into the tagtype argument to tag_add_artifact to |
| 286 | ** cause the tag to be displayed on standard output rather than be |
| 287 | ** inserted. Used for --dryrun options and debugging. |
| 288 | */ |
| 289 | #if INTERFACE |
| 290 | #define TAG_ADD_DRYRUN 0x04 |
| 291 | #endif |
| 292 | |
| @@ -407,11 +407,11 @@ | |
| 407 | ** --raw Raw tag name. Ignored for |
| 408 | ** non-CHECK-IN artifacts. |
| 409 | ** --propagate Propagating tag. |
| 410 | ** --date-override DATETIME Set date and time added. |
| 411 | ** --user-override USER Name USER when adding the tag. |
| 412 | ** -n|--dryrun Display the tag text, but do not |
| 413 | ** actually insert it into the database. |
| 414 | ** |
| 415 | ** The --date-override and --user-override options support |
| 416 | ** importing history from other SCM systems. DATETIME has |
| 417 | ** the form 'YYYY-MMM-DD HH:MM:SS'. |
| @@ -422,20 +422,20 @@ | |
| 422 | ** |
| 423 | ** > fossil tag cancel ?--raw? TAGNAME ARTIFACT-ID |
| 424 | ** |
| 425 | ** Remove the tag TAGNAME from the artifact referenced by |
| 426 | ** ARTIFACT-ID, and also remove the propagation of the tag to |
| 427 | ** any descendants. Use the the -n|--dryrun option to see |
| 428 | ** what would have happened. Certain tag name prefixes are |
| 429 | ** forbidden, as documented for the 'add' subcommand. |
| 430 | ** |
| 431 | ** Options: |
| 432 | ** --raw Raw tag name. Ignored for |
| 433 | ** non-CHECK-IN artifacts. |
| 434 | ** --date-override DATETIME Set date and time deleted. |
| 435 | ** --user-override USER Name USER when deleting the tag. |
| 436 | ** -n|--dryrun Display the control artifact, but do |
| 437 | ** not insert it into the database. |
| 438 | ** |
| 439 | ** > fossil tag find ?OPTIONS? TAGNAME |
| 440 | ** |
| 441 | ** List all objects that use TAGNAME. |
| @@ -514,11 +514,11 @@ | |
| 514 | const char *zDateOvrd = find_option("date-override",0,1); |
| 515 | const char *zUserOvrd = find_option("user-override",0,1); |
| 516 | const char *zTag; |
| 517 | const char *zObjId; |
| 518 | int objType; |
| 519 | if( find_option("dryrun","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN; |
| 520 | if( g.argc!=5 && g.argc!=6 ){ |
| 521 | usage("add ?options? TAGNAME ARTIFACT-ID ?VALUE?"); |
| 522 | } |
| 523 | zTag = g.argv[3]; |
| 524 | tag_cmd_tagname_check(zTag); |
| @@ -552,11 +552,11 @@ | |
| 552 | const char *zDateOvrd = find_option("date-override",0,1); |
| 553 | const char *zUserOvrd = find_option("user-override",0,1); |
| 554 | const char *zTag; |
| 555 | const char *zObjId; |
| 556 | int objType; |
| 557 | if( find_option("dryrun","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN; |
| 558 | if( g.argc!=5 ){ |
| 559 | usage("cancel ?options? TAGNAME ARTIFACT-ID"); |
| 560 | } |
| 561 | zTag = g.argv[3]; |
| 562 | tag_cmd_tagname_check(zTag); |
| @@ -751,11 +751,11 @@ | |
| 751 | ** reparenting operation, simply delete the tag. |
| 752 | ** |
| 753 | ** --test Make database entries but do not add the tag artifact. |
| 754 | ** So the reparent operation will be undone by the next |
| 755 | ** "fossil rebuild" command. |
| 756 | ** -n|--dryrun Print the tag that would have been created but do not |
| 757 | ** actually change the database in any way. |
| 758 | ** --date-override DATETIME Set the change time on the control artifact |
| 759 | ** --user-override USER Set the user name on the control artifact |
| 760 | */ |
| 761 | void reparent_cmd(void){ |
| @@ -766,11 +766,11 @@ | |
| 766 | char *zUuid; |
| 767 | int dryRun = 0; |
| 768 | const char *zDateOvrd; /* The change time on the control artifact */ |
| 769 | const char *zUserOvrd; /* The user name on the control artifact */ |
| 770 | |
| 771 | if( find_option("dryrun","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN; |
| 772 | zDateOvrd = find_option("date-override",0,1); |
| 773 | zUserOvrd = find_option("user-override",0,1); |
| 774 | db_find_and_open_repository(0, 0); |
| 775 | verify_all_options(); |
| 776 | if( g.argc<4 ){ |
| 777 |
| --- src/tag.c | |
| +++ src/tag.c | |
| @@ -282,11 +282,11 @@ | |
| 282 | } |
| 283 | |
| 284 | /* |
| 285 | ** OR this value into the tagtype argument to tag_add_artifact to |
| 286 | ** cause the tag to be displayed on standard output rather than be |
| 287 | ** inserted. Used for --dry-run options and debugging. |
| 288 | */ |
| 289 | #if INTERFACE |
| 290 | #define TAG_ADD_DRYRUN 0x04 |
| 291 | #endif |
| 292 | |
| @@ -407,11 +407,11 @@ | |
| 407 | ** --raw Raw tag name. Ignored for |
| 408 | ** non-CHECK-IN artifacts. |
| 409 | ** --propagate Propagating tag. |
| 410 | ** --date-override DATETIME Set date and time added. |
| 411 | ** --user-override USER Name USER when adding the tag. |
| 412 | ** -n|--dry-run Display the tag text, but do not |
| 413 | ** actually insert it into the database. |
| 414 | ** |
| 415 | ** The --date-override and --user-override options support |
| 416 | ** importing history from other SCM systems. DATETIME has |
| 417 | ** the form 'YYYY-MMM-DD HH:MM:SS'. |
| @@ -422,20 +422,20 @@ | |
| 422 | ** |
| 423 | ** > fossil tag cancel ?--raw? TAGNAME ARTIFACT-ID |
| 424 | ** |
| 425 | ** Remove the tag TAGNAME from the artifact referenced by |
| 426 | ** ARTIFACT-ID, and also remove the propagation of the tag to |
| 427 | ** any descendants. Use the the -n|--dry-run option to see |
| 428 | ** what would have happened. Certain tag name prefixes are |
| 429 | ** forbidden, as documented for the 'add' subcommand. |
| 430 | ** |
| 431 | ** Options: |
| 432 | ** --raw Raw tag name. Ignored for |
| 433 | ** non-CHECK-IN artifacts. |
| 434 | ** --date-override DATETIME Set date and time deleted. |
| 435 | ** --user-override USER Name USER when deleting the tag. |
| 436 | ** -n|--dry-run Display the control artifact, but do |
| 437 | ** not insert it into the database. |
| 438 | ** |
| 439 | ** > fossil tag find ?OPTIONS? TAGNAME |
| 440 | ** |
| 441 | ** List all objects that use TAGNAME. |
| @@ -514,11 +514,11 @@ | |
| 514 | const char *zDateOvrd = find_option("date-override",0,1); |
| 515 | const char *zUserOvrd = find_option("user-override",0,1); |
| 516 | const char *zTag; |
| 517 | const char *zObjId; |
| 518 | int objType; |
| 519 | if( find_option("dry-run","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN; |
| 520 | if( g.argc!=5 && g.argc!=6 ){ |
| 521 | usage("add ?options? TAGNAME ARTIFACT-ID ?VALUE?"); |
| 522 | } |
| 523 | zTag = g.argv[3]; |
| 524 | tag_cmd_tagname_check(zTag); |
| @@ -552,11 +552,11 @@ | |
| 552 | const char *zDateOvrd = find_option("date-override",0,1); |
| 553 | const char *zUserOvrd = find_option("user-override",0,1); |
| 554 | const char *zTag; |
| 555 | const char *zObjId; |
| 556 | int objType; |
| 557 | if( find_option("dry-run","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN; |
| 558 | if( g.argc!=5 ){ |
| 559 | usage("cancel ?options? TAGNAME ARTIFACT-ID"); |
| 560 | } |
| 561 | zTag = g.argv[3]; |
| 562 | tag_cmd_tagname_check(zTag); |
| @@ -751,11 +751,11 @@ | |
| 751 | ** reparenting operation, simply delete the tag. |
| 752 | ** |
| 753 | ** --test Make database entries but do not add the tag artifact. |
| 754 | ** So the reparent operation will be undone by the next |
| 755 | ** "fossil rebuild" command. |
| 756 | ** -n|--dry-run Print the tag that would have been created but do not |
| 757 | ** actually change the database in any way. |
| 758 | ** --date-override DATETIME Set the change time on the control artifact |
| 759 | ** --user-override USER Set the user name on the control artifact |
| 760 | */ |
| 761 | void reparent_cmd(void){ |
| @@ -766,11 +766,11 @@ | |
| 766 | char *zUuid; |
| 767 | int dryRun = 0; |
| 768 | const char *zDateOvrd; /* The change time on the control artifact */ |
| 769 | const char *zUserOvrd; /* The user name on the control artifact */ |
| 770 | |
| 771 | if( find_option("dry-run","n",0)!=0 ) dryRun = TAG_ADD_DRYRUN; |
| 772 | zDateOvrd = find_option("date-override",0,1); |
| 773 | zUserOvrd = find_option("user-override",0,1); |
| 774 | db_find_and_open_repository(0, 0); |
| 775 | verify_all_options(); |
| 776 | if( g.argc<4 ){ |
| 777 |
+1
-1
| --- src/tar.c | ||
| +++ src/tar.c | ||
| @@ -605,11 +605,11 @@ | ||
| 605 | 605 | ** in "..." or '...' so that it may contain commas. If a file matches both |
| 606 | 606 | ** --include and --exclude then it is excluded. |
| 607 | 607 | ** |
| 608 | 608 | ** If OUTPUTFILE is an empty string or "/dev/null" then no tarball is |
| 609 | 609 | ** actually generated. This feature can be used in combination with |
| 610 | -** the --list option to get a list of the filename that would be in the | |
| 610 | +** the --list option to get a list of the filenames that would be in the | |
| 611 | 611 | ** tarball had it actually been generated. Note that --list shows only |
| 612 | 612 | ** filenames. "tar tzf" shows both filesnames and subdirectory names. |
| 613 | 613 | ** |
| 614 | 614 | ** Options: |
| 615 | 615 | ** -X|--exclude GLOBLIST Comma-separated list of GLOBs of files to exclude |
| 616 | 616 |
| --- src/tar.c | |
| +++ src/tar.c | |
| @@ -605,11 +605,11 @@ | |
| 605 | ** in "..." or '...' so that it may contain commas. If a file matches both |
| 606 | ** --include and --exclude then it is excluded. |
| 607 | ** |
| 608 | ** If OUTPUTFILE is an empty string or "/dev/null" then no tarball is |
| 609 | ** actually generated. This feature can be used in combination with |
| 610 | ** the --list option to get a list of the filename that would be in the |
| 611 | ** tarball had it actually been generated. Note that --list shows only |
| 612 | ** filenames. "tar tzf" shows both filesnames and subdirectory names. |
| 613 | ** |
| 614 | ** Options: |
| 615 | ** -X|--exclude GLOBLIST Comma-separated list of GLOBs of files to exclude |
| 616 |
| --- src/tar.c | |
| +++ src/tar.c | |
| @@ -605,11 +605,11 @@ | |
| 605 | ** in "..." or '...' so that it may contain commas. If a file matches both |
| 606 | ** --include and --exclude then it is excluded. |
| 607 | ** |
| 608 | ** If OUTPUTFILE is an empty string or "/dev/null" then no tarball is |
| 609 | ** actually generated. This feature can be used in combination with |
| 610 | ** the --list option to get a list of the filenames that would be in the |
| 611 | ** tarball had it actually been generated. Note that --list shows only |
| 612 | ** filenames. "tar tzf" shows both filesnames and subdirectory names. |
| 613 | ** |
| 614 | ** Options: |
| 615 | ** -X|--exclude GLOBLIST Comma-separated list of GLOBs of files to exclude |
| 616 |
+41
-5
| --- src/timeline.c | ||
| +++ src/timeline.c | ||
| @@ -521,12 +521,12 @@ | ||
| 521 | 521 | && (zCom[0]=='+' || zCom[0]==':') ){ |
| 522 | 522 | @ Wiki page "%z(href("%R/wiki?name=%t",zCom+1))%h(zCom+1)</a>" |
| 523 | 523 | }else if( zCom[0]=='+' ){ |
| 524 | 524 | @ Added wiki page "%z(href("%R/wiki?name=%t",zCom+1))%h(zCom+1)</a>" |
| 525 | 525 | }else if( zCom[0]==':' ){ |
| 526 | - @ Changes to wiki page "%z(href("%R/wiki?name=%t",zCom+1))\ | |
| 527 | - @ %h(zCom+1)</a>" | |
| 526 | + @ %z(href("%R/wdiff?id=%!S",zUuid))Changes</a> to wiki page | |
| 527 | + @ "%z(href("%R/wiki?name=%t",zCom+1))%h(zCom+1)</a>" | |
| 528 | 528 | }else{ |
| 529 | 529 | /* Assume this is an attachment message. It _might_ also |
| 530 | 530 | ** be a legacy-format wiki log entry, in which case it |
| 531 | 531 | ** will simply be rendered in the older format. */ |
| 532 | 532 | wiki_convert(&comment, 0, WIKI_INLINE); |
| @@ -2777,10 +2777,14 @@ | ||
| 2777 | 2777 | ){ |
| 2778 | 2778 | Blob r, co; |
| 2779 | 2779 | int i, j; |
| 2780 | 2780 | blob_init(&r, 0, 0); |
| 2781 | 2781 | blob_init(&co, 0, 0); |
| 2782 | + | |
| 2783 | + if( 0==zCom ){ | |
| 2784 | + zCom = "(NULL)"; | |
| 2785 | + } | |
| 2782 | 2786 | |
| 2783 | 2787 | /* Replace LF and tab with space, delete CR */ |
| 2784 | 2788 | while( zCom[0] ){ |
| 2785 | 2789 | for(j=0; zCom[j] && zCom[j]!='\r' && zCom[j]!='\n' && zCom[j]!='\t'; j++){} |
| 2786 | 2790 | blob_append(&co, zCom, j); |
| @@ -3108,10 +3112,12 @@ | ||
| 3108 | 3112 | ** (westward) or "+HH:MM" (eastward). Either no timezone suffix or "Z" |
| 3109 | 3113 | ** means UTC. |
| 3110 | 3114 | ** |
| 3111 | 3115 | ** |
| 3112 | 3116 | ** Options: |
| 3117 | +** -b|--branch BRANCH Show only items on the branch named BRANCH | |
| 3118 | +** -c|--current-branch Show only items on the current branch | |
| 3113 | 3119 | ** -F|--format Entry format. Values "oneline", "medium", and "full" |
| 3114 | 3120 | ** get mapped to the full options below. Otherwise a |
| 3115 | 3121 | ** string which can contain these placeholders: |
| 3116 | 3122 | ** %n newline |
| 3117 | 3123 | ** %% a raw % |
| @@ -3125,20 +3131,18 @@ | ||
| 3125 | 3131 | ** %p phase: zero or more of *CURRENT*, *MERGE*, |
| 3126 | 3132 | ** *FORK*, *UNPUBLISHED*, *LEAF*, *BRANCH* |
| 3127 | 3133 | ** --oneline Show only short hash and comment for each entry |
| 3128 | 3134 | ** --medium Medium-verbose entry formatting |
| 3129 | 3135 | ** --full Extra verbose entry formatting |
| 3130 | -** | |
| 3131 | 3136 | ** -n|--limit N If N is positive, output the first N entries. If |
| 3132 | 3137 | ** N is negative, output the first -N lines. If N is |
| 3133 | 3138 | ** zero, no limit. Default is -20 meaning 20 lines. |
| 3134 | 3139 | ** --offset P skip P changes |
| 3135 | 3140 | ** -p|--path PATH Output items affecting PATH only. |
| 3136 | 3141 | ** PATH can be a file or a sub directory. |
| 3137 | 3142 | ** -R REPO_FILE Specifies the repository db to use. Default is |
| 3138 | 3143 | ** the current checkout's repository. |
| 3139 | - | |
| 3140 | 3144 | ** --sql Show the SQL used to generate the timeline |
| 3141 | 3145 | ** -t|--type TYPE Output items from the given types only, such as: |
| 3142 | 3146 | ** ci = file commits only |
| 3143 | 3147 | ** e = technical notes only |
| 3144 | 3148 | ** f = forum posts only |
| @@ -3146,11 +3150,11 @@ | ||
| 3146 | 3150 | ** w = wiki commits only |
| 3147 | 3151 | ** -v|--verbose Output the list of files changed by each commit |
| 3148 | 3152 | ** and the type of each change (edited, deleted, |
| 3149 | 3153 | ** etc.) after the check-in comment. |
| 3150 | 3154 | ** -W|--width N Width of lines (default is to auto-detect). N must be |
| 3151 | -** either greater than 20 or it ust be zero 0 to | |
| 3155 | +** either greater than 20 or it must be zero 0 to | |
| 3152 | 3156 | ** indicate no limit, resulting in a single line per |
| 3153 | 3157 | ** entry. |
| 3154 | 3158 | */ |
| 3155 | 3159 | void timeline_cmd(void){ |
| 3156 | 3160 | Stmt q; |
| @@ -3167,10 +3171,11 @@ | ||
| 3167 | 3171 | int mode = TIMELINE_MODE_NONE; |
| 3168 | 3172 | int verboseFlag = 0 ; |
| 3169 | 3173 | int iOffset; |
| 3170 | 3174 | const char *zFilePattern = 0; |
| 3171 | 3175 | const char *zFormat = 0; |
| 3176 | + const char *zBr = 0; | |
| 3172 | 3177 | Blob treeName; |
| 3173 | 3178 | int showSql = 0; |
| 3174 | 3179 | |
| 3175 | 3180 | verboseFlag = find_option("verbose","v", 0)!=0; |
| 3176 | 3181 | if( !verboseFlag){ |
| @@ -3180,10 +3185,20 @@ | ||
| 3180 | 3185 | zLimit = find_option("limit","n",1); |
| 3181 | 3186 | zWidth = find_option("width","W",1); |
| 3182 | 3187 | zType = find_option("type","t",1); |
| 3183 | 3188 | zFilePattern = find_option("path","p",1); |
| 3184 | 3189 | zFormat = find_option("format","F",1); |
| 3190 | + zBr = find_option("branch","b",1); | |
| 3191 | + if( find_option("current-branch","c",0)!=0 ){ | |
| 3192 | + if( !g.localOpen ){ | |
| 3193 | + fossil_fatal("not within an open checkout"); | |
| 3194 | + }else{ | |
| 3195 | + int vid = db_lget_int("checkout", 0); | |
| 3196 | + zBr = db_text(0, "SELECT value FROM tagxref WHERE rid=%d AND tagid=%d", | |
| 3197 | + vid, TAG_BRANCH); | |
| 3198 | + } | |
| 3199 | + } | |
| 3185 | 3200 | if( find_option("oneline",0,0)!= 0 || fossil_strcmp(zFormat,"oneline")==0 ) |
| 3186 | 3201 | zFormat = "%h %c"; |
| 3187 | 3202 | if( find_option("medium",0,0)!= 0 || fossil_strcmp(zFormat,"medium")==0 ) |
| 3188 | 3203 | zFormat = "Commit: %h%nDate: %d%nAuthor: %a%nComment: %c%n"; |
| 3189 | 3204 | if( find_option("full",0,0)!= 0 || fossil_strcmp(zFormat,"full")==0 ) |
| @@ -3325,10 +3340,31 @@ | ||
| 3325 | 3340 | " OR lower(name) GLOB lower('%q/*'))", |
| 3326 | 3341 | blob_str(&treeName), blob_str(&treeName)); |
| 3327 | 3342 | } |
| 3328 | 3343 | blob_append(&sql, ")", -1); |
| 3329 | 3344 | } |
| 3345 | + if( zBr ){ | |
| 3346 | + blob_append_sql(&sql, | |
| 3347 | + "\n AND blob.rid IN (\n" /* Commits */ | |
| 3348 | + " SELECT rid FROM tagxref NATURAL JOIN tag\n" | |
| 3349 | + " WHERE tagtype>0 AND tagname='sym-%q'\n" | |
| 3350 | + " UNION\n" /* Tags */ | |
| 3351 | + " SELECT srcid FROM tagxref WHERE origid IN (\n" | |
| 3352 | + " SELECT rid FROM tagxref NATURAL JOIN tag\n" | |
| 3353 | + " WHERE tagname='sym-%q')\n" | |
| 3354 | + " UNION\n" /* Branch wikis */ | |
| 3355 | + " SELECT objid FROM event WHERE comment LIKE '_branch/%q'\n" | |
| 3356 | + " UNION\n" /* Checkin wikis */ | |
| 3357 | + " SELECT e.objid FROM event e\n" | |
| 3358 | + " INNER JOIN blob b ON b.uuid=substr(e.comment, 10)\n" | |
| 3359 | + " AND e.comment LIKE '_checkin/%%'\n" | |
| 3360 | + " LEFT JOIN tagxref tx ON tx.rid=b.rid AND tx.tagid=%d\n" | |
| 3361 | + " WHERE tx.value='%q'\n" | |
| 3362 | + ")\n" /* No merge closures */ | |
| 3363 | + " AND (tagxref.value IS NULL OR tagxref.value='%q')", | |
| 3364 | + zBr, zBr, zBr, TAG_BRANCH, zBr, zBr); | |
| 3365 | + } | |
| 3330 | 3366 | blob_append_sql(&sql, "\nORDER BY event.mtime DESC"); |
| 3331 | 3367 | if( iOffset>0 ){ |
| 3332 | 3368 | /* Don't handle LIMIT here, otherwise print_timeline() |
| 3333 | 3369 | * will not determine the end-marker correctly! */ |
| 3334 | 3370 | blob_append_sql(&sql, "\n LIMIT -1 OFFSET %d", iOffset); |
| 3335 | 3371 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -521,12 +521,12 @@ | |
| 521 | && (zCom[0]=='+' || zCom[0]==':') ){ |
| 522 | @ Wiki page "%z(href("%R/wiki?name=%t",zCom+1))%h(zCom+1)</a>" |
| 523 | }else if( zCom[0]=='+' ){ |
| 524 | @ Added wiki page "%z(href("%R/wiki?name=%t",zCom+1))%h(zCom+1)</a>" |
| 525 | }else if( zCom[0]==':' ){ |
| 526 | @ Changes to wiki page "%z(href("%R/wiki?name=%t",zCom+1))\ |
| 527 | @ %h(zCom+1)</a>" |
| 528 | }else{ |
| 529 | /* Assume this is an attachment message. It _might_ also |
| 530 | ** be a legacy-format wiki log entry, in which case it |
| 531 | ** will simply be rendered in the older format. */ |
| 532 | wiki_convert(&comment, 0, WIKI_INLINE); |
| @@ -2777,10 +2777,14 @@ | |
| 2777 | ){ |
| 2778 | Blob r, co; |
| 2779 | int i, j; |
| 2780 | blob_init(&r, 0, 0); |
| 2781 | blob_init(&co, 0, 0); |
| 2782 | |
| 2783 | /* Replace LF and tab with space, delete CR */ |
| 2784 | while( zCom[0] ){ |
| 2785 | for(j=0; zCom[j] && zCom[j]!='\r' && zCom[j]!='\n' && zCom[j]!='\t'; j++){} |
| 2786 | blob_append(&co, zCom, j); |
| @@ -3108,10 +3112,12 @@ | |
| 3108 | ** (westward) or "+HH:MM" (eastward). Either no timezone suffix or "Z" |
| 3109 | ** means UTC. |
| 3110 | ** |
| 3111 | ** |
| 3112 | ** Options: |
| 3113 | ** -F|--format Entry format. Values "oneline", "medium", and "full" |
| 3114 | ** get mapped to the full options below. Otherwise a |
| 3115 | ** string which can contain these placeholders: |
| 3116 | ** %n newline |
| 3117 | ** %% a raw % |
| @@ -3125,20 +3131,18 @@ | |
| 3125 | ** %p phase: zero or more of *CURRENT*, *MERGE*, |
| 3126 | ** *FORK*, *UNPUBLISHED*, *LEAF*, *BRANCH* |
| 3127 | ** --oneline Show only short hash and comment for each entry |
| 3128 | ** --medium Medium-verbose entry formatting |
| 3129 | ** --full Extra verbose entry formatting |
| 3130 | ** |
| 3131 | ** -n|--limit N If N is positive, output the first N entries. If |
| 3132 | ** N is negative, output the first -N lines. If N is |
| 3133 | ** zero, no limit. Default is -20 meaning 20 lines. |
| 3134 | ** --offset P skip P changes |
| 3135 | ** -p|--path PATH Output items affecting PATH only. |
| 3136 | ** PATH can be a file or a sub directory. |
| 3137 | ** -R REPO_FILE Specifies the repository db to use. Default is |
| 3138 | ** the current checkout's repository. |
| 3139 | |
| 3140 | ** --sql Show the SQL used to generate the timeline |
| 3141 | ** -t|--type TYPE Output items from the given types only, such as: |
| 3142 | ** ci = file commits only |
| 3143 | ** e = technical notes only |
| 3144 | ** f = forum posts only |
| @@ -3146,11 +3150,11 @@ | |
| 3146 | ** w = wiki commits only |
| 3147 | ** -v|--verbose Output the list of files changed by each commit |
| 3148 | ** and the type of each change (edited, deleted, |
| 3149 | ** etc.) after the check-in comment. |
| 3150 | ** -W|--width N Width of lines (default is to auto-detect). N must be |
| 3151 | ** either greater than 20 or it ust be zero 0 to |
| 3152 | ** indicate no limit, resulting in a single line per |
| 3153 | ** entry. |
| 3154 | */ |
| 3155 | void timeline_cmd(void){ |
| 3156 | Stmt q; |
| @@ -3167,10 +3171,11 @@ | |
| 3167 | int mode = TIMELINE_MODE_NONE; |
| 3168 | int verboseFlag = 0 ; |
| 3169 | int iOffset; |
| 3170 | const char *zFilePattern = 0; |
| 3171 | const char *zFormat = 0; |
| 3172 | Blob treeName; |
| 3173 | int showSql = 0; |
| 3174 | |
| 3175 | verboseFlag = find_option("verbose","v", 0)!=0; |
| 3176 | if( !verboseFlag){ |
| @@ -3180,10 +3185,20 @@ | |
| 3180 | zLimit = find_option("limit","n",1); |
| 3181 | zWidth = find_option("width","W",1); |
| 3182 | zType = find_option("type","t",1); |
| 3183 | zFilePattern = find_option("path","p",1); |
| 3184 | zFormat = find_option("format","F",1); |
| 3185 | if( find_option("oneline",0,0)!= 0 || fossil_strcmp(zFormat,"oneline")==0 ) |
| 3186 | zFormat = "%h %c"; |
| 3187 | if( find_option("medium",0,0)!= 0 || fossil_strcmp(zFormat,"medium")==0 ) |
| 3188 | zFormat = "Commit: %h%nDate: %d%nAuthor: %a%nComment: %c%n"; |
| 3189 | if( find_option("full",0,0)!= 0 || fossil_strcmp(zFormat,"full")==0 ) |
| @@ -3325,10 +3340,31 @@ | |
| 3325 | " OR lower(name) GLOB lower('%q/*'))", |
| 3326 | blob_str(&treeName), blob_str(&treeName)); |
| 3327 | } |
| 3328 | blob_append(&sql, ")", -1); |
| 3329 | } |
| 3330 | blob_append_sql(&sql, "\nORDER BY event.mtime DESC"); |
| 3331 | if( iOffset>0 ){ |
| 3332 | /* Don't handle LIMIT here, otherwise print_timeline() |
| 3333 | * will not determine the end-marker correctly! */ |
| 3334 | blob_append_sql(&sql, "\n LIMIT -1 OFFSET %d", iOffset); |
| 3335 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -521,12 +521,12 @@ | |
| 521 | && (zCom[0]=='+' || zCom[0]==':') ){ |
| 522 | @ Wiki page "%z(href("%R/wiki?name=%t",zCom+1))%h(zCom+1)</a>" |
| 523 | }else if( zCom[0]=='+' ){ |
| 524 | @ Added wiki page "%z(href("%R/wiki?name=%t",zCom+1))%h(zCom+1)</a>" |
| 525 | }else if( zCom[0]==':' ){ |
| 526 | @ %z(href("%R/wdiff?id=%!S",zUuid))Changes</a> to wiki page |
| 527 | @ "%z(href("%R/wiki?name=%t",zCom+1))%h(zCom+1)</a>" |
| 528 | }else{ |
| 529 | /* Assume this is an attachment message. It _might_ also |
| 530 | ** be a legacy-format wiki log entry, in which case it |
| 531 | ** will simply be rendered in the older format. */ |
| 532 | wiki_convert(&comment, 0, WIKI_INLINE); |
| @@ -2777,10 +2777,14 @@ | |
| 2777 | ){ |
| 2778 | Blob r, co; |
| 2779 | int i, j; |
| 2780 | blob_init(&r, 0, 0); |
| 2781 | blob_init(&co, 0, 0); |
| 2782 | |
| 2783 | if( 0==zCom ){ |
| 2784 | zCom = "(NULL)"; |
| 2785 | } |
| 2786 | |
| 2787 | /* Replace LF and tab with space, delete CR */ |
| 2788 | while( zCom[0] ){ |
| 2789 | for(j=0; zCom[j] && zCom[j]!='\r' && zCom[j]!='\n' && zCom[j]!='\t'; j++){} |
| 2790 | blob_append(&co, zCom, j); |
| @@ -3108,10 +3112,12 @@ | |
| 3112 | ** (westward) or "+HH:MM" (eastward). Either no timezone suffix or "Z" |
| 3113 | ** means UTC. |
| 3114 | ** |
| 3115 | ** |
| 3116 | ** Options: |
| 3117 | ** -b|--branch BRANCH Show only items on the branch named BRANCH |
| 3118 | ** -c|--current-branch Show only items on the current branch |
| 3119 | ** -F|--format Entry format. Values "oneline", "medium", and "full" |
| 3120 | ** get mapped to the full options below. Otherwise a |
| 3121 | ** string which can contain these placeholders: |
| 3122 | ** %n newline |
| 3123 | ** %% a raw % |
| @@ -3125,20 +3131,18 @@ | |
| 3131 | ** %p phase: zero or more of *CURRENT*, *MERGE*, |
| 3132 | ** *FORK*, *UNPUBLISHED*, *LEAF*, *BRANCH* |
| 3133 | ** --oneline Show only short hash and comment for each entry |
| 3134 | ** --medium Medium-verbose entry formatting |
| 3135 | ** --full Extra verbose entry formatting |
| 3136 | ** -n|--limit N If N is positive, output the first N entries. If |
| 3137 | ** N is negative, output the first -N lines. If N is |
| 3138 | ** zero, no limit. Default is -20 meaning 20 lines. |
| 3139 | ** --offset P skip P changes |
| 3140 | ** -p|--path PATH Output items affecting PATH only. |
| 3141 | ** PATH can be a file or a sub directory. |
| 3142 | ** -R REPO_FILE Specifies the repository db to use. Default is |
| 3143 | ** the current checkout's repository. |
| 3144 | ** --sql Show the SQL used to generate the timeline |
| 3145 | ** -t|--type TYPE Output items from the given types only, such as: |
| 3146 | ** ci = file commits only |
| 3147 | ** e = technical notes only |
| 3148 | ** f = forum posts only |
| @@ -3146,11 +3150,11 @@ | |
| 3150 | ** w = wiki commits only |
| 3151 | ** -v|--verbose Output the list of files changed by each commit |
| 3152 | ** and the type of each change (edited, deleted, |
| 3153 | ** etc.) after the check-in comment. |
| 3154 | ** -W|--width N Width of lines (default is to auto-detect). N must be |
| 3155 | ** either greater than 20 or it must be zero 0 to |
| 3156 | ** indicate no limit, resulting in a single line per |
| 3157 | ** entry. |
| 3158 | */ |
| 3159 | void timeline_cmd(void){ |
| 3160 | Stmt q; |
| @@ -3167,10 +3171,11 @@ | |
| 3171 | int mode = TIMELINE_MODE_NONE; |
| 3172 | int verboseFlag = 0 ; |
| 3173 | int iOffset; |
| 3174 | const char *zFilePattern = 0; |
| 3175 | const char *zFormat = 0; |
| 3176 | const char *zBr = 0; |
| 3177 | Blob treeName; |
| 3178 | int showSql = 0; |
| 3179 | |
| 3180 | verboseFlag = find_option("verbose","v", 0)!=0; |
| 3181 | if( !verboseFlag){ |
| @@ -3180,10 +3185,20 @@ | |
| 3185 | zLimit = find_option("limit","n",1); |
| 3186 | zWidth = find_option("width","W",1); |
| 3187 | zType = find_option("type","t",1); |
| 3188 | zFilePattern = find_option("path","p",1); |
| 3189 | zFormat = find_option("format","F",1); |
| 3190 | zBr = find_option("branch","b",1); |
| 3191 | if( find_option("current-branch","c",0)!=0 ){ |
| 3192 | if( !g.localOpen ){ |
| 3193 | fossil_fatal("not within an open checkout"); |
| 3194 | }else{ |
| 3195 | int vid = db_lget_int("checkout", 0); |
| 3196 | zBr = db_text(0, "SELECT value FROM tagxref WHERE rid=%d AND tagid=%d", |
| 3197 | vid, TAG_BRANCH); |
| 3198 | } |
| 3199 | } |
| 3200 | if( find_option("oneline",0,0)!= 0 || fossil_strcmp(zFormat,"oneline")==0 ) |
| 3201 | zFormat = "%h %c"; |
| 3202 | if( find_option("medium",0,0)!= 0 || fossil_strcmp(zFormat,"medium")==0 ) |
| 3203 | zFormat = "Commit: %h%nDate: %d%nAuthor: %a%nComment: %c%n"; |
| 3204 | if( find_option("full",0,0)!= 0 || fossil_strcmp(zFormat,"full")==0 ) |
| @@ -3325,10 +3340,31 @@ | |
| 3340 | " OR lower(name) GLOB lower('%q/*'))", |
| 3341 | blob_str(&treeName), blob_str(&treeName)); |
| 3342 | } |
| 3343 | blob_append(&sql, ")", -1); |
| 3344 | } |
| 3345 | if( zBr ){ |
| 3346 | blob_append_sql(&sql, |
| 3347 | "\n AND blob.rid IN (\n" /* Commits */ |
| 3348 | " SELECT rid FROM tagxref NATURAL JOIN tag\n" |
| 3349 | " WHERE tagtype>0 AND tagname='sym-%q'\n" |
| 3350 | " UNION\n" /* Tags */ |
| 3351 | " SELECT srcid FROM tagxref WHERE origid IN (\n" |
| 3352 | " SELECT rid FROM tagxref NATURAL JOIN tag\n" |
| 3353 | " WHERE tagname='sym-%q')\n" |
| 3354 | " UNION\n" /* Branch wikis */ |
| 3355 | " SELECT objid FROM event WHERE comment LIKE '_branch/%q'\n" |
| 3356 | " UNION\n" /* Checkin wikis */ |
| 3357 | " SELECT e.objid FROM event e\n" |
| 3358 | " INNER JOIN blob b ON b.uuid=substr(e.comment, 10)\n" |
| 3359 | " AND e.comment LIKE '_checkin/%%'\n" |
| 3360 | " LEFT JOIN tagxref tx ON tx.rid=b.rid AND tx.tagid=%d\n" |
| 3361 | " WHERE tx.value='%q'\n" |
| 3362 | ")\n" /* No merge closures */ |
| 3363 | " AND (tagxref.value IS NULL OR tagxref.value='%q')", |
| 3364 | zBr, zBr, zBr, TAG_BRANCH, zBr, zBr); |
| 3365 | } |
| 3366 | blob_append_sql(&sql, "\nORDER BY event.mtime DESC"); |
| 3367 | if( iOffset>0 ){ |
| 3368 | /* Don't handle LIMIT here, otherwise print_timeline() |
| 3369 | * will not determine the end-marker correctly! */ |
| 3370 | blob_append_sql(&sql, "\n LIMIT -1 OFFSET %d", iOffset); |
| 3371 |
+5
-5
| --- src/unversioned.c | ||
| +++ src/unversioned.c | ||
| @@ -161,11 +161,11 @@ | ||
| 161 | 161 | ** time of last change and hash of a copy of this file on a remote |
| 162 | 162 | ** server. Return an integer status code as follows: |
| 163 | 163 | ** |
| 164 | 164 | ** 0: zName does not exist in the unversioned table. |
| 165 | 165 | ** 1: zName exists and should be replaced by the mtime/zHash remote. |
| 166 | -** 2: zName exists and is the same as zHash but has a older mtime | |
| 166 | +** 2: zName exists and is the same as zHash but has an older mtime | |
| 167 | 167 | ** 3: zName exists and is identical to mtime/zHash in all respects. |
| 168 | 168 | ** 4: zName exists and is the same as zHash but has a newer mtime. |
| 169 | 169 | ** 5: zName exists and should override the mtime/zHash remote. |
| 170 | 170 | */ |
| 171 | 171 | int unversioned_status( |
| @@ -200,11 +200,11 @@ | ||
| 200 | 200 | */ |
| 201 | 201 | static int unversioned_sync_flags(unsigned syncFlags){ |
| 202 | 202 | if( find_option("verbose","v",0)!=0 ){ |
| 203 | 203 | syncFlags |= SYNC_UV_TRACE | SYNC_VERBOSE; |
| 204 | 204 | } |
| 205 | - if( find_option("dryrun","n",0)!=0 ){ | |
| 205 | + if( find_option("dry-run","n",0)!=0 ){ | |
| 206 | 206 | syncFlags |= SYNC_UV_DRYRUN | SYNC_UV_TRACE | SYNC_VERBOSE; |
| 207 | 207 | } |
| 208 | 208 | return syncFlags; |
| 209 | 209 | } |
| 210 | 210 | |
| @@ -218,11 +218,11 @@ | ||
| 218 | 218 | } |
| 219 | 219 | return 0; |
| 220 | 220 | } |
| 221 | 221 | |
| 222 | 222 | /* |
| 223 | -** COMMAND: uv* | |
| 223 | +** COMMAND: uv# | |
| 224 | 224 | ** COMMAND: unversioned |
| 225 | 225 | ** |
| 226 | 226 | ** Usage: %fossil unversioned SUBCOMMAND ARGS... |
| 227 | 227 | ** or: %fossil uv SUBCOMMAND ARGS.. |
| 228 | 228 | ** |
| @@ -264,11 +264,11 @@ | ||
| 264 | 264 | ** local repository to match the remote repository |
| 265 | 265 | ** URL. |
| 266 | 266 | ** |
| 267 | 267 | ** Options: |
| 268 | 268 | ** -v|--verbose Extra diagnostic output |
| 269 | -** -n|--dryrun Show what would have happened | |
| 269 | +** -n|--dry-run Show what would have happened | |
| 270 | 270 | ** |
| 271 | 271 | ** remove|rm|delete FILE ... |
| 272 | 272 | ** Remove unversioned files from the local repository. |
| 273 | 273 | ** Changes are not pushed to other repositories until |
| 274 | 274 | ** the next sync. Options: |
| @@ -281,11 +281,11 @@ | ||
| 281 | 281 | ** of each file is propagated to all repositories and |
| 282 | 282 | ** all prior versions are permanently forgotten. |
| 283 | 283 | ** |
| 284 | 284 | ** Options: |
| 285 | 285 | ** -v|--verbose Extra diagnostic output |
| 286 | -** -n|--dryrun Show what would have happened | |
| 286 | +** -n|--dry-run Show what would have happened | |
| 287 | 287 | ** |
| 288 | 288 | ** touch FILE ... Update the TIMESTAMP on all of the listed files |
| 289 | 289 | ** |
| 290 | 290 | ** Options: |
| 291 | 291 | ** |
| 292 | 292 |
| --- src/unversioned.c | |
| +++ src/unversioned.c | |
| @@ -161,11 +161,11 @@ | |
| 161 | ** time of last change and hash of a copy of this file on a remote |
| 162 | ** server. Return an integer status code as follows: |
| 163 | ** |
| 164 | ** 0: zName does not exist in the unversioned table. |
| 165 | ** 1: zName exists and should be replaced by the mtime/zHash remote. |
| 166 | ** 2: zName exists and is the same as zHash but has a older mtime |
| 167 | ** 3: zName exists and is identical to mtime/zHash in all respects. |
| 168 | ** 4: zName exists and is the same as zHash but has a newer mtime. |
| 169 | ** 5: zName exists and should override the mtime/zHash remote. |
| 170 | */ |
| 171 | int unversioned_status( |
| @@ -200,11 +200,11 @@ | |
| 200 | */ |
| 201 | static int unversioned_sync_flags(unsigned syncFlags){ |
| 202 | if( find_option("verbose","v",0)!=0 ){ |
| 203 | syncFlags |= SYNC_UV_TRACE | SYNC_VERBOSE; |
| 204 | } |
| 205 | if( find_option("dryrun","n",0)!=0 ){ |
| 206 | syncFlags |= SYNC_UV_DRYRUN | SYNC_UV_TRACE | SYNC_VERBOSE; |
| 207 | } |
| 208 | return syncFlags; |
| 209 | } |
| 210 | |
| @@ -218,11 +218,11 @@ | |
| 218 | } |
| 219 | return 0; |
| 220 | } |
| 221 | |
| 222 | /* |
| 223 | ** COMMAND: uv* |
| 224 | ** COMMAND: unversioned |
| 225 | ** |
| 226 | ** Usage: %fossil unversioned SUBCOMMAND ARGS... |
| 227 | ** or: %fossil uv SUBCOMMAND ARGS.. |
| 228 | ** |
| @@ -264,11 +264,11 @@ | |
| 264 | ** local repository to match the remote repository |
| 265 | ** URL. |
| 266 | ** |
| 267 | ** Options: |
| 268 | ** -v|--verbose Extra diagnostic output |
| 269 | ** -n|--dryrun Show what would have happened |
| 270 | ** |
| 271 | ** remove|rm|delete FILE ... |
| 272 | ** Remove unversioned files from the local repository. |
| 273 | ** Changes are not pushed to other repositories until |
| 274 | ** the next sync. Options: |
| @@ -281,11 +281,11 @@ | |
| 281 | ** of each file is propagated to all repositories and |
| 282 | ** all prior versions are permanently forgotten. |
| 283 | ** |
| 284 | ** Options: |
| 285 | ** -v|--verbose Extra diagnostic output |
| 286 | ** -n|--dryrun Show what would have happened |
| 287 | ** |
| 288 | ** touch FILE ... Update the TIMESTAMP on all of the listed files |
| 289 | ** |
| 290 | ** Options: |
| 291 | ** |
| 292 |
| --- src/unversioned.c | |
| +++ src/unversioned.c | |
| @@ -161,11 +161,11 @@ | |
| 161 | ** time of last change and hash of a copy of this file on a remote |
| 162 | ** server. Return an integer status code as follows: |
| 163 | ** |
| 164 | ** 0: zName does not exist in the unversioned table. |
| 165 | ** 1: zName exists and should be replaced by the mtime/zHash remote. |
| 166 | ** 2: zName exists and is the same as zHash but has an older mtime |
| 167 | ** 3: zName exists and is identical to mtime/zHash in all respects. |
| 168 | ** 4: zName exists and is the same as zHash but has a newer mtime. |
| 169 | ** 5: zName exists and should override the mtime/zHash remote. |
| 170 | */ |
| 171 | int unversioned_status( |
| @@ -200,11 +200,11 @@ | |
| 200 | */ |
| 201 | static int unversioned_sync_flags(unsigned syncFlags){ |
| 202 | if( find_option("verbose","v",0)!=0 ){ |
| 203 | syncFlags |= SYNC_UV_TRACE | SYNC_VERBOSE; |
| 204 | } |
| 205 | if( find_option("dry-run","n",0)!=0 ){ |
| 206 | syncFlags |= SYNC_UV_DRYRUN | SYNC_UV_TRACE | SYNC_VERBOSE; |
| 207 | } |
| 208 | return syncFlags; |
| 209 | } |
| 210 | |
| @@ -218,11 +218,11 @@ | |
| 218 | } |
| 219 | return 0; |
| 220 | } |
| 221 | |
| 222 | /* |
| 223 | ** COMMAND: uv# |
| 224 | ** COMMAND: unversioned |
| 225 | ** |
| 226 | ** Usage: %fossil unversioned SUBCOMMAND ARGS... |
| 227 | ** or: %fossil uv SUBCOMMAND ARGS.. |
| 228 | ** |
| @@ -264,11 +264,11 @@ | |
| 264 | ** local repository to match the remote repository |
| 265 | ** URL. |
| 266 | ** |
| 267 | ** Options: |
| 268 | ** -v|--verbose Extra diagnostic output |
| 269 | ** -n|--dry-run Show what would have happened |
| 270 | ** |
| 271 | ** remove|rm|delete FILE ... |
| 272 | ** Remove unversioned files from the local repository. |
| 273 | ** Changes are not pushed to other repositories until |
| 274 | ** the next sync. Options: |
| @@ -281,11 +281,11 @@ | |
| 281 | ** of each file is propagated to all repositories and |
| 282 | ** all prior versions are permanently forgotten. |
| 283 | ** |
| 284 | ** Options: |
| 285 | ** -v|--verbose Extra diagnostic output |
| 286 | ** -n|--dry-run Show what would have happened |
| 287 | ** |
| 288 | ** touch FILE ... Update the TIMESTAMP on all of the listed files |
| 289 | ** |
| 290 | ** Options: |
| 291 | ** |
| 292 |
+2
-2
| --- src/wiki.c | ||
| +++ src/wiki.c | ||
| @@ -1846,13 +1846,13 @@ | ||
| 1846 | 1846 | rid2 = name_to_typed_rid(zPid, "w"); |
| 1847 | 1847 | pW2 = manifest_get(rid2, CFTYPE_WIKI, 0); |
| 1848 | 1848 | blob_init(&w2, pW2->zWiki, -1); |
| 1849 | 1849 | @ <h2>Changes to \ |
| 1850 | 1850 | @ "%z(href("%R/whistory?name=%s",pW1->zWikiTitle))%h(pW1->zWikiTitle)</a>" \ |
| 1851 | - zDate = db_text(0, "SELECT datetime(%.16g)",pW2->rDate); | |
| 1851 | + zDate = db_text(0, "SELECT datetime(%.16g,toLocal())",pW2->rDate); | |
| 1852 | 1852 | @ between %z(href("%R/info/%s",zPid))%z(zDate)</a> \ |
| 1853 | - zDate = db_text(0, "SELECT datetime(%.16g)",pW1->rDate); | |
| 1853 | + zDate = db_text(0, "SELECT datetime(%.16g,toLocal())",pW1->rDate); | |
| 1854 | 1854 | @ and %z(href("%R/info/%s",zId))%z(zDate)</a></h2> |
| 1855 | 1855 | style_submenu_element("Previous", "%R/wdiff?id=%S", zPid); |
| 1856 | 1856 | }else{ |
| 1857 | 1857 | blob_zero(&w2); |
| 1858 | 1858 | @ <h2>Initial version of \ |
| 1859 | 1859 |
| --- src/wiki.c | |
| +++ src/wiki.c | |
| @@ -1846,13 +1846,13 @@ | |
| 1846 | rid2 = name_to_typed_rid(zPid, "w"); |
| 1847 | pW2 = manifest_get(rid2, CFTYPE_WIKI, 0); |
| 1848 | blob_init(&w2, pW2->zWiki, -1); |
| 1849 | @ <h2>Changes to \ |
| 1850 | @ "%z(href("%R/whistory?name=%s",pW1->zWikiTitle))%h(pW1->zWikiTitle)</a>" \ |
| 1851 | zDate = db_text(0, "SELECT datetime(%.16g)",pW2->rDate); |
| 1852 | @ between %z(href("%R/info/%s",zPid))%z(zDate)</a> \ |
| 1853 | zDate = db_text(0, "SELECT datetime(%.16g)",pW1->rDate); |
| 1854 | @ and %z(href("%R/info/%s",zId))%z(zDate)</a></h2> |
| 1855 | style_submenu_element("Previous", "%R/wdiff?id=%S", zPid); |
| 1856 | }else{ |
| 1857 | blob_zero(&w2); |
| 1858 | @ <h2>Initial version of \ |
| 1859 |
| --- src/wiki.c | |
| +++ src/wiki.c | |
| @@ -1846,13 +1846,13 @@ | |
| 1846 | rid2 = name_to_typed_rid(zPid, "w"); |
| 1847 | pW2 = manifest_get(rid2, CFTYPE_WIKI, 0); |
| 1848 | blob_init(&w2, pW2->zWiki, -1); |
| 1849 | @ <h2>Changes to \ |
| 1850 | @ "%z(href("%R/whistory?name=%s",pW1->zWikiTitle))%h(pW1->zWikiTitle)</a>" \ |
| 1851 | zDate = db_text(0, "SELECT datetime(%.16g,toLocal())",pW2->rDate); |
| 1852 | @ between %z(href("%R/info/%s",zPid))%z(zDate)</a> \ |
| 1853 | zDate = db_text(0, "SELECT datetime(%.16g,toLocal())",pW1->rDate); |
| 1854 | @ and %z(href("%R/info/%s",zId))%z(zDate)</a></h2> |
| 1855 | style_submenu_element("Previous", "%R/wdiff?id=%S", zPid); |
| 1856 | }else{ |
| 1857 | blob_zero(&w2); |
| 1858 | @ <h2>Initial version of \ |
| 1859 |
+1
-1
| --- src/wikiformat.c | ||
| +++ src/wikiformat.c | ||
| @@ -597,11 +597,11 @@ | ||
| 597 | 597 | if( i<2 || fossil_isspace(z[n]) ) return 0; |
| 598 | 598 | return n; |
| 599 | 599 | } |
| 600 | 600 | |
| 601 | 601 | /* |
| 602 | -** Check to see if the z[] string is the beginning of a enumeration value. | |
| 602 | +** Check to see if the z[] string is the beginning of an enumeration value. | |
| 603 | 603 | ** If it is, return the length of the bullet text. Otherwise return 0. |
| 604 | 604 | ** |
| 605 | 605 | ** Syntax: |
| 606 | 606 | ** * a tab or two or more spaces |
| 607 | 607 | ** * one or more digits |
| 608 | 608 |
| --- src/wikiformat.c | |
| +++ src/wikiformat.c | |
| @@ -597,11 +597,11 @@ | |
| 597 | if( i<2 || fossil_isspace(z[n]) ) return 0; |
| 598 | return n; |
| 599 | } |
| 600 | |
| 601 | /* |
| 602 | ** Check to see if the z[] string is the beginning of a enumeration value. |
| 603 | ** If it is, return the length of the bullet text. Otherwise return 0. |
| 604 | ** |
| 605 | ** Syntax: |
| 606 | ** * a tab or two or more spaces |
| 607 | ** * one or more digits |
| 608 |
| --- src/wikiformat.c | |
| +++ src/wikiformat.c | |
| @@ -597,11 +597,11 @@ | |
| 597 | if( i<2 || fossil_isspace(z[n]) ) return 0; |
| 598 | return n; |
| 599 | } |
| 600 | |
| 601 | /* |
| 602 | ** Check to see if the z[] string is the beginning of an enumeration value. |
| 603 | ** If it is, return the length of the bullet text. Otherwise return 0. |
| 604 | ** |
| 605 | ** Syntax: |
| 606 | ** * a tab or two or more spaces |
| 607 | ** * one or more digits |
| 608 |
+1
-1
| --- src/wikiformat.c | ||
| +++ src/wikiformat.c | ||
| @@ -597,11 +597,11 @@ | ||
| 597 | 597 | if( i<2 || fossil_isspace(z[n]) ) return 0; |
| 598 | 598 | return n; |
| 599 | 599 | } |
| 600 | 600 | |
| 601 | 601 | /* |
| 602 | -** Check to see if the z[] string is the beginning of a enumeration value. | |
| 602 | +** Check to see if the z[] string is the beginning of an enumeration value. | |
| 603 | 603 | ** If it is, return the length of the bullet text. Otherwise return 0. |
| 604 | 604 | ** |
| 605 | 605 | ** Syntax: |
| 606 | 606 | ** * a tab or two or more spaces |
| 607 | 607 | ** * one or more digits |
| 608 | 608 |
| --- src/wikiformat.c | |
| +++ src/wikiformat.c | |
| @@ -597,11 +597,11 @@ | |
| 597 | if( i<2 || fossil_isspace(z[n]) ) return 0; |
| 598 | return n; |
| 599 | } |
| 600 | |
| 601 | /* |
| 602 | ** Check to see if the z[] string is the beginning of a enumeration value. |
| 603 | ** If it is, return the length of the bullet text. Otherwise return 0. |
| 604 | ** |
| 605 | ** Syntax: |
| 606 | ** * a tab or two or more spaces |
| 607 | ** * one or more digits |
| 608 |
| --- src/wikiformat.c | |
| +++ src/wikiformat.c | |
| @@ -597,11 +597,11 @@ | |
| 597 | if( i<2 || fossil_isspace(z[n]) ) return 0; |
| 598 | return n; |
| 599 | } |
| 600 | |
| 601 | /* |
| 602 | ** Check to see if the z[] string is the beginning of an enumeration value. |
| 603 | ** If it is, return the length of the bullet text. Otherwise return 0. |
| 604 | ** |
| 605 | ** Syntax: |
| 606 | ** * a tab or two or more spaces |
| 607 | ** * one or more digits |
| 608 |
+1
-1
| --- src/winhttp.c | ||
| +++ src/winhttp.c | ||
| @@ -931,11 +931,11 @@ | ||
| 931 | 931 | } |
| 932 | 932 | } |
| 933 | 933 | |
| 934 | 934 | /* |
| 935 | 935 | ** Try to start the http server as a windows service. If we are running in |
| 936 | -** a interactive console session, this routine fails and returns a non zero | |
| 936 | +** an interactive console session, this routine fails and returns a non zero | |
| 937 | 937 | ** integer value. When running as service, this routine does not return until |
| 938 | 938 | ** the service is stopped. In this case, the return value is zero. |
| 939 | 939 | */ |
| 940 | 940 | int win32_http_service( |
| 941 | 941 | int nPort, /* TCP port number */ |
| 942 | 942 |
| --- src/winhttp.c | |
| +++ src/winhttp.c | |
| @@ -931,11 +931,11 @@ | |
| 931 | } |
| 932 | } |
| 933 | |
| 934 | /* |
| 935 | ** Try to start the http server as a windows service. If we are running in |
| 936 | ** a interactive console session, this routine fails and returns a non zero |
| 937 | ** integer value. When running as service, this routine does not return until |
| 938 | ** the service is stopped. In this case, the return value is zero. |
| 939 | */ |
| 940 | int win32_http_service( |
| 941 | int nPort, /* TCP port number */ |
| 942 |
| --- src/winhttp.c | |
| +++ src/winhttp.c | |
| @@ -931,11 +931,11 @@ | |
| 931 | } |
| 932 | } |
| 933 | |
| 934 | /* |
| 935 | ** Try to start the http server as a windows service. If we are running in |
| 936 | ** an interactive console session, this routine fails and returns a non zero |
| 937 | ** integer value. When running as service, this routine does not return until |
| 938 | ** the service is stopped. In this case, the return value is zero. |
| 939 | */ |
| 940 | int win32_http_service( |
| 941 | int nPort, /* TCP port number */ |
| 942 |
+1
-1
| --- src/xfer.c | ||
| +++ src/xfer.c | ||
| @@ -1543,11 +1543,11 @@ | ||
| 1543 | 1543 | }else |
| 1544 | 1544 | |
| 1545 | 1545 | |
| 1546 | 1546 | /* cookie TEXT |
| 1547 | 1547 | ** |
| 1548 | - ** A cookie contains a arbitrary-length argument that is server-defined. | |
| 1548 | + ** A cookie contains an arbitrary-length argument that is server-defined. | |
| 1549 | 1549 | ** The argument must be encoded so as not to contain any whitespace. |
| 1550 | 1550 | ** The server can optionally send a cookie to the client. The client |
| 1551 | 1551 | ** might then return the same cookie back to the server on its next |
| 1552 | 1552 | ** communication. The cookie might record information that helps |
| 1553 | 1553 | ** the server optimize a push or pull. |
| 1554 | 1554 |
| --- src/xfer.c | |
| +++ src/xfer.c | |
| @@ -1543,11 +1543,11 @@ | |
| 1543 | }else |
| 1544 | |
| 1545 | |
| 1546 | /* cookie TEXT |
| 1547 | ** |
| 1548 | ** A cookie contains a arbitrary-length argument that is server-defined. |
| 1549 | ** The argument must be encoded so as not to contain any whitespace. |
| 1550 | ** The server can optionally send a cookie to the client. The client |
| 1551 | ** might then return the same cookie back to the server on its next |
| 1552 | ** communication. The cookie might record information that helps |
| 1553 | ** the server optimize a push or pull. |
| 1554 |
| --- src/xfer.c | |
| +++ src/xfer.c | |
| @@ -1543,11 +1543,11 @@ | |
| 1543 | }else |
| 1544 | |
| 1545 | |
| 1546 | /* cookie TEXT |
| 1547 | ** |
| 1548 | ** A cookie contains an arbitrary-length argument that is server-defined. |
| 1549 | ** The argument must be encoded so as not to contain any whitespace. |
| 1550 | ** The server can optionally send a cookie to the client. The client |
| 1551 | ** might then return the same cookie back to the server on its next |
| 1552 | ** communication. The cookie might record information that helps |
| 1553 | ** the server optimize a push or pull. |
| 1554 |
+2
-2
| --- src/zip.c | ||
| +++ src/zip.c | ||
| @@ -814,11 +814,11 @@ | ||
| 814 | 814 | ** in "..." or '...' so that it may contain commas. If a file matches both |
| 815 | 815 | ** --include and --exclude then it is excluded. |
| 816 | 816 | ** |
| 817 | 817 | ** If OUTPUTFILE is an empty string or "/dev/null" then no ZIP archive is |
| 818 | 818 | ** actually generated. This feature can be used in combination with |
| 819 | -** the --list option to get a list of the filename that would be in the | |
| 819 | +** the --list option to get a list of the filenames that would be in the | |
| 820 | 820 | ** ZIP archive had it actually been generated. |
| 821 | 821 | ** |
| 822 | 822 | ** Options: |
| 823 | 823 | ** -X|--exclude GLOBLIST Comma-separated list of GLOBs of files to exclude |
| 824 | 824 | ** --include GLOBLIST Comma-separated list of GLOBs of files to include |
| @@ -846,11 +846,11 @@ | ||
| 846 | 846 | ** in "..." or '...' so that it may contain commas. If a file matches both |
| 847 | 847 | ** --include and --exclude then it is excluded. |
| 848 | 848 | ** |
| 849 | 849 | ** If OUTPUTFILE is an empty string or "/dev/null" then no SQLAR archive is |
| 850 | 850 | ** actually generated. This feature can be used in combination with |
| 851 | -** the --list option to get a list of the filename that would be in the | |
| 851 | +** the --list option to get a list of the filenames that would be in the | |
| 852 | 852 | ** SQLAR archive had it actually been generated. |
| 853 | 853 | ** |
| 854 | 854 | ** Options: |
| 855 | 855 | ** -X|--exclude GLOBLIST Comma-separated list of GLOBs of files to exclude |
| 856 | 856 | ** --include GLOBLIST Comma-separated list of GLOBs of files to include |
| 857 | 857 |
| --- src/zip.c | |
| +++ src/zip.c | |
| @@ -814,11 +814,11 @@ | |
| 814 | ** in "..." or '...' so that it may contain commas. If a file matches both |
| 815 | ** --include and --exclude then it is excluded. |
| 816 | ** |
| 817 | ** If OUTPUTFILE is an empty string or "/dev/null" then no ZIP archive is |
| 818 | ** actually generated. This feature can be used in combination with |
| 819 | ** the --list option to get a list of the filename that would be in the |
| 820 | ** ZIP archive had it actually been generated. |
| 821 | ** |
| 822 | ** Options: |
| 823 | ** -X|--exclude GLOBLIST Comma-separated list of GLOBs of files to exclude |
| 824 | ** --include GLOBLIST Comma-separated list of GLOBs of files to include |
| @@ -846,11 +846,11 @@ | |
| 846 | ** in "..." or '...' so that it may contain commas. If a file matches both |
| 847 | ** --include and --exclude then it is excluded. |
| 848 | ** |
| 849 | ** If OUTPUTFILE is an empty string or "/dev/null" then no SQLAR archive is |
| 850 | ** actually generated. This feature can be used in combination with |
| 851 | ** the --list option to get a list of the filename that would be in the |
| 852 | ** SQLAR archive had it actually been generated. |
| 853 | ** |
| 854 | ** Options: |
| 855 | ** -X|--exclude GLOBLIST Comma-separated list of GLOBs of files to exclude |
| 856 | ** --include GLOBLIST Comma-separated list of GLOBs of files to include |
| 857 |
| --- src/zip.c | |
| +++ src/zip.c | |
| @@ -814,11 +814,11 @@ | |
| 814 | ** in "..." or '...' so that it may contain commas. If a file matches both |
| 815 | ** --include and --exclude then it is excluded. |
| 816 | ** |
| 817 | ** If OUTPUTFILE is an empty string or "/dev/null" then no ZIP archive is |
| 818 | ** actually generated. This feature can be used in combination with |
| 819 | ** the --list option to get a list of the filenames that would be in the |
| 820 | ** ZIP archive had it actually been generated. |
| 821 | ** |
| 822 | ** Options: |
| 823 | ** -X|--exclude GLOBLIST Comma-separated list of GLOBs of files to exclude |
| 824 | ** --include GLOBLIST Comma-separated list of GLOBs of files to include |
| @@ -846,11 +846,11 @@ | |
| 846 | ** in "..." or '...' so that it may contain commas. If a file matches both |
| 847 | ** --include and --exclude then it is excluded. |
| 848 | ** |
| 849 | ** If OUTPUTFILE is an empty string or "/dev/null" then no SQLAR archive is |
| 850 | ** actually generated. This feature can be used in combination with |
| 851 | ** the --list option to get a list of the filenames that would be in the |
| 852 | ** SQLAR archive had it actually been generated. |
| 853 | ** |
| 854 | ** Options: |
| 855 | ** -X|--exclude GLOBLIST Comma-separated list of GLOBs of files to exclude |
| 856 | ** --include GLOBLIST Comma-separated list of GLOBs of files to include |
| 857 |
| --- test/markdown-test3.md | ||
| +++ test/markdown-test3.md | ||
| @@ -67,10 +67,13 @@ | ||
| 67 | 67 | This facilitates the usage in the usual case |
| 68 | 68 | when several footnotes are refenrenced at the end |
| 69 | 69 | of a phrase.[^scipub][^many-refs](^All these four should |
| 70 | 70 | be parsed as "free-standing" footnotes)[^Coelurosauria] |
| 71 | 71 | |
| 72 | +An ambiguity between a link to an image and a *free-standing referenced | |
| 73 | +footnote* should be resolved as a footnote![^not-image] | |
| 74 | + | |
| 72 | 75 | A footnote may not be empty(^) |
| 73 | 76 | or consist just of blank characters.(^ |
| 74 | 77 | ) |
| 75 | 78 | |
| 76 | 79 | The same holds for labeled footnotes. If definition of a labeled footnote |
| @@ -220,10 +223,14 @@ | ||
| 220 | 223 | |
| 221 | 224 | [^markup]: E.g. *emphasis*, and [so on](/md_rules). |
| 222 | 225 | BTW, this note may not have a backreference to the "stray". |
| 223 | 226 | |
| 224 | 227 | [^undefined label is used]: For example due to a typo. |
| 228 | + | |
| 229 | +[^not-image]: The rationale is that URLs do not start with **^** | |
| 230 | + while a footnote may follow *immediately* after an exclamation mark | |
| 231 | + at the end of a sentence. | |
| 225 | 232 | |
| 226 | 233 | [^another stray]: Just to verify the correctness of ordering and styling. |
| 227 | 234 | |
| 228 | 235 | [^scipub]: Which is common in the scientific publications. |
| 229 | 236 | |
| 230 | 237 |
| --- test/markdown-test3.md | |
| +++ test/markdown-test3.md | |
| @@ -67,10 +67,13 @@ | |
| 67 | This facilitates the usage in the usual case |
| 68 | when several footnotes are refenrenced at the end |
| 69 | of a phrase.[^scipub][^many-refs](^All these four should |
| 70 | be parsed as "free-standing" footnotes)[^Coelurosauria] |
| 71 | |
| 72 | A footnote may not be empty(^) |
| 73 | or consist just of blank characters.(^ |
| 74 | ) |
| 75 | |
| 76 | The same holds for labeled footnotes. If definition of a labeled footnote |
| @@ -220,10 +223,14 @@ | |
| 220 | |
| 221 | [^markup]: E.g. *emphasis*, and [so on](/md_rules). |
| 222 | BTW, this note may not have a backreference to the "stray". |
| 223 | |
| 224 | [^undefined label is used]: For example due to a typo. |
| 225 | |
| 226 | [^another stray]: Just to verify the correctness of ordering and styling. |
| 227 | |
| 228 | [^scipub]: Which is common in the scientific publications. |
| 229 | |
| 230 |
| --- test/markdown-test3.md | |
| +++ test/markdown-test3.md | |
| @@ -67,10 +67,13 @@ | |
| 67 | This facilitates the usage in the usual case |
| 68 | when several footnotes are refenrenced at the end |
| 69 | of a phrase.[^scipub][^many-refs](^All these four should |
| 70 | be parsed as "free-standing" footnotes)[^Coelurosauria] |
| 71 | |
| 72 | An ambiguity between a link to an image and a *free-standing referenced |
| 73 | footnote* should be resolved as a footnote![^not-image] |
| 74 | |
| 75 | A footnote may not be empty(^) |
| 76 | or consist just of blank characters.(^ |
| 77 | ) |
| 78 | |
| 79 | The same holds for labeled footnotes. If definition of a labeled footnote |
| @@ -220,10 +223,14 @@ | |
| 223 | |
| 224 | [^markup]: E.g. *emphasis*, and [so on](/md_rules). |
| 225 | BTW, this note may not have a backreference to the "stray". |
| 226 | |
| 227 | [^undefined label is used]: For example due to a typo. |
| 228 | |
| 229 | [^not-image]: The rationale is that URLs do not start with **^** |
| 230 | while a footnote may follow *immediately* after an exclamation mark |
| 231 | at the end of a sentence. |
| 232 | |
| 233 | [^another stray]: Just to verify the correctness of ordering and styling. |
| 234 | |
| 235 | [^scipub]: Which is common in the scientific publications. |
| 236 | |
| 237 |
+6
-4
| --- tools/makemake.tcl | ||
| +++ tools/makemake.tcl | ||
| @@ -435,13 +435,14 @@ | ||
| 435 | 435 | # using -lsqlite3. |
| 436 | 436 | # |
| 437 | 437 | # Closely related is SQLITE3_ORIGIN, with the same numeric mapping plus |
| 438 | 438 | # a value of 2 means that we are building a client-provided sqlite3.c. |
| 439 | 439 | SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o |
| 440 | -SQLITE3_OBJ.1 = | |
| 440 | +SQLITE3_OBJ.1 = $(OBJDIR)/sqlite3-see.o | |
| 441 | 441 | # SQLITE3_OBJ.2 is set by the configure process |
| 442 | 442 | SQLITE3_OBJ. = $(SQLITE3_OBJ.0) |
| 443 | +SQLITE3_OBJ = $(SQLITE3_OBJ.$(SQLITE3_ORIGIN)) | |
| 443 | 444 | |
| 444 | 445 | # The USE_LINENOISE variable may be undefined, set to 0, or set |
| 445 | 446 | # to 1. If it is set to 0, then there is no need to build or link |
| 446 | 447 | # the linenoise.o object. |
| 447 | 448 | LINENOISE_DEF.0 = |
| @@ -535,11 +536,11 @@ | ||
| 535 | 536 | writeln "\$(OBJDIR)/$s.o:\t\$(OBJDIR)/${s}_.c \$(OBJDIR)/$s.h$extra_h($s)\$(SRCDIR)/config.h" |
| 536 | 537 | writeln "\t\$(XTCC) -o \$(OBJDIR)/$s.o -c \$(OBJDIR)/${s}_.c\n" |
| 537 | 538 | writeln "\$(OBJDIR)/$s.h:\t\$(OBJDIR)/headers\n" |
| 538 | 539 | } |
| 539 | 540 | |
| 540 | -writeln "\$(OBJDIR)/sqlite3.o:\t\$(SQLITE3_SRC)" | |
| 541 | +writeln "\$(SQLITE3_OBJ):\t\$(SQLITE3_SRC)" | |
| 541 | 542 | writeln "\t\$(XTCC) \$(SQLITE_OPTIONS) \$(SQLITE_CFLAGS) \$(SEE_FLAGS) \\" |
| 542 | 543 | writeln "\t\t-c \$(SQLITE3_SRC) -o \$@" |
| 543 | 544 | |
| 544 | 545 | writeln "\$(OBJDIR)/shell.o:\t\$(SQLITE3_SHELL_SRC) \$(SRCDIR_extsrc)/sqlite3.h" |
| 545 | 546 | writeln "\t\$(XTCC) \$(SHELL_OPTIONS) \$(SHELL_CFLAGS) \$(SEE_FLAGS) \$(LINENOISE_DEF.\$(USE_LINENOISE)) -c \$(SQLITE3_SHELL_SRC) -o \$@\n" |
| @@ -1125,13 +1126,14 @@ | ||
| 1125 | 1126 | # |
| 1126 | 1127 | # Closely related is SQLITE3_ORIGIN, with the same 0/1 mapping, |
| 1127 | 1128 | # plus a value of 2 means that we are building a client-provided |
| 1128 | 1129 | # sqlite3.c. |
| 1129 | 1130 | SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o |
| 1130 | -SQLITE3_OBJ.1 = | |
| 1131 | +SQLITE3_OBJ.1 = $(OBJDIR)/sqlite3-see.o | |
| 1131 | 1132 | # SQLITE3_OBJ.2 is set by the configure process |
| 1132 | 1133 | SQLITE3_OBJ. = $(SQLITE3_OBJ.0) |
| 1134 | +SQLITE3_OBJ = $(SQLITE3_OBJ.$(SQLITE3_ORIGIN)) | |
| 1133 | 1135 | |
| 1134 | 1136 | # The USE_SEE variable may be undefined, 0 or 1. If undefined or 0, |
| 1135 | 1137 | # in-tree SQLite is used. If 1, then sqlite3-see.c (not part of the |
| 1136 | 1138 | # source tree) is used and extra flags are provided to enable the |
| 1137 | 1139 | # SQLite Encryption Extension. |
| @@ -1277,11 +1279,11 @@ | ||
| 1277 | 1279 | set j " \\\n " |
| 1278 | 1280 | writeln "SQLITE_OPTIONS = [join $MINGW_SQLITE_OPTIONS $j]\n" |
| 1279 | 1281 | writeln "SHELL_OPTIONS = [join $SHELL_WIN32_OPTIONS $j]\n" |
| 1280 | 1282 | writeln "PIKCHR_OPTIONS = [join $MINGW_PIKCHR_OPTIONS $j]\n" |
| 1281 | 1283 | |
| 1282 | -writeln "\$(OBJDIR)/sqlite3.o:\t\$(SQLITE3_SRC) \$(SRCDIR)/../win/Makefile.mingw" | |
| 1284 | +writeln "\$(SQLITE3_OBJ):\t\$(SQLITE3_SRC) \$(SRCDIR)/../win/Makefile.mingw" | |
| 1283 | 1285 | writeln "\t\$(XTCC) \$(SQLITE_OPTIONS) \$(SQLITE_CFLAGS) \$(SEE_FLAGS) \\" |
| 1284 | 1286 | writeln "\t\t-c \$(SQLITE3_SRC) -o \$@\n" |
| 1285 | 1287 | |
| 1286 | 1288 | writeln "\$(OBJDIR)/cson_amalgamation.o:\t\$(SRCDIR_extsrc)/cson_amalgamation.c" |
| 1287 | 1289 | writeln "\t\$(XTCC) -c \$(SRCDIR_extsrc)/cson_amalgamation.c -o \$@\n" |
| 1288 | 1290 |
| --- tools/makemake.tcl | |
| +++ tools/makemake.tcl | |
| @@ -435,13 +435,14 @@ | |
| 435 | # using -lsqlite3. |
| 436 | # |
| 437 | # Closely related is SQLITE3_ORIGIN, with the same numeric mapping plus |
| 438 | # a value of 2 means that we are building a client-provided sqlite3.c. |
| 439 | SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o |
| 440 | SQLITE3_OBJ.1 = |
| 441 | # SQLITE3_OBJ.2 is set by the configure process |
| 442 | SQLITE3_OBJ. = $(SQLITE3_OBJ.0) |
| 443 | |
| 444 | # The USE_LINENOISE variable may be undefined, set to 0, or set |
| 445 | # to 1. If it is set to 0, then there is no need to build or link |
| 446 | # the linenoise.o object. |
| 447 | LINENOISE_DEF.0 = |
| @@ -535,11 +536,11 @@ | |
| 535 | writeln "\$(OBJDIR)/$s.o:\t\$(OBJDIR)/${s}_.c \$(OBJDIR)/$s.h$extra_h($s)\$(SRCDIR)/config.h" |
| 536 | writeln "\t\$(XTCC) -o \$(OBJDIR)/$s.o -c \$(OBJDIR)/${s}_.c\n" |
| 537 | writeln "\$(OBJDIR)/$s.h:\t\$(OBJDIR)/headers\n" |
| 538 | } |
| 539 | |
| 540 | writeln "\$(OBJDIR)/sqlite3.o:\t\$(SQLITE3_SRC)" |
| 541 | writeln "\t\$(XTCC) \$(SQLITE_OPTIONS) \$(SQLITE_CFLAGS) \$(SEE_FLAGS) \\" |
| 542 | writeln "\t\t-c \$(SQLITE3_SRC) -o \$@" |
| 543 | |
| 544 | writeln "\$(OBJDIR)/shell.o:\t\$(SQLITE3_SHELL_SRC) \$(SRCDIR_extsrc)/sqlite3.h" |
| 545 | writeln "\t\$(XTCC) \$(SHELL_OPTIONS) \$(SHELL_CFLAGS) \$(SEE_FLAGS) \$(LINENOISE_DEF.\$(USE_LINENOISE)) -c \$(SQLITE3_SHELL_SRC) -o \$@\n" |
| @@ -1125,13 +1126,14 @@ | |
| 1125 | # |
| 1126 | # Closely related is SQLITE3_ORIGIN, with the same 0/1 mapping, |
| 1127 | # plus a value of 2 means that we are building a client-provided |
| 1128 | # sqlite3.c. |
| 1129 | SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o |
| 1130 | SQLITE3_OBJ.1 = |
| 1131 | # SQLITE3_OBJ.2 is set by the configure process |
| 1132 | SQLITE3_OBJ. = $(SQLITE3_OBJ.0) |
| 1133 | |
| 1134 | # The USE_SEE variable may be undefined, 0 or 1. If undefined or 0, |
| 1135 | # in-tree SQLite is used. If 1, then sqlite3-see.c (not part of the |
| 1136 | # source tree) is used and extra flags are provided to enable the |
| 1137 | # SQLite Encryption Extension. |
| @@ -1277,11 +1279,11 @@ | |
| 1277 | set j " \\\n " |
| 1278 | writeln "SQLITE_OPTIONS = [join $MINGW_SQLITE_OPTIONS $j]\n" |
| 1279 | writeln "SHELL_OPTIONS = [join $SHELL_WIN32_OPTIONS $j]\n" |
| 1280 | writeln "PIKCHR_OPTIONS = [join $MINGW_PIKCHR_OPTIONS $j]\n" |
| 1281 | |
| 1282 | writeln "\$(OBJDIR)/sqlite3.o:\t\$(SQLITE3_SRC) \$(SRCDIR)/../win/Makefile.mingw" |
| 1283 | writeln "\t\$(XTCC) \$(SQLITE_OPTIONS) \$(SQLITE_CFLAGS) \$(SEE_FLAGS) \\" |
| 1284 | writeln "\t\t-c \$(SQLITE3_SRC) -o \$@\n" |
| 1285 | |
| 1286 | writeln "\$(OBJDIR)/cson_amalgamation.o:\t\$(SRCDIR_extsrc)/cson_amalgamation.c" |
| 1287 | writeln "\t\$(XTCC) -c \$(SRCDIR_extsrc)/cson_amalgamation.c -o \$@\n" |
| 1288 |
| --- tools/makemake.tcl | |
| +++ tools/makemake.tcl | |
| @@ -435,13 +435,14 @@ | |
| 435 | # using -lsqlite3. |
| 436 | # |
| 437 | # Closely related is SQLITE3_ORIGIN, with the same numeric mapping plus |
| 438 | # a value of 2 means that we are building a client-provided sqlite3.c. |
| 439 | SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o |
| 440 | SQLITE3_OBJ.1 = $(OBJDIR)/sqlite3-see.o |
| 441 | # SQLITE3_OBJ.2 is set by the configure process |
| 442 | SQLITE3_OBJ. = $(SQLITE3_OBJ.0) |
| 443 | SQLITE3_OBJ = $(SQLITE3_OBJ.$(SQLITE3_ORIGIN)) |
| 444 | |
| 445 | # The USE_LINENOISE variable may be undefined, set to 0, or set |
| 446 | # to 1. If it is set to 0, then there is no need to build or link |
| 447 | # the linenoise.o object. |
| 448 | LINENOISE_DEF.0 = |
| @@ -535,11 +536,11 @@ | |
| 536 | writeln "\$(OBJDIR)/$s.o:\t\$(OBJDIR)/${s}_.c \$(OBJDIR)/$s.h$extra_h($s)\$(SRCDIR)/config.h" |
| 537 | writeln "\t\$(XTCC) -o \$(OBJDIR)/$s.o -c \$(OBJDIR)/${s}_.c\n" |
| 538 | writeln "\$(OBJDIR)/$s.h:\t\$(OBJDIR)/headers\n" |
| 539 | } |
| 540 | |
| 541 | writeln "\$(SQLITE3_OBJ):\t\$(SQLITE3_SRC)" |
| 542 | writeln "\t\$(XTCC) \$(SQLITE_OPTIONS) \$(SQLITE_CFLAGS) \$(SEE_FLAGS) \\" |
| 543 | writeln "\t\t-c \$(SQLITE3_SRC) -o \$@" |
| 544 | |
| 545 | writeln "\$(OBJDIR)/shell.o:\t\$(SQLITE3_SHELL_SRC) \$(SRCDIR_extsrc)/sqlite3.h" |
| 546 | writeln "\t\$(XTCC) \$(SHELL_OPTIONS) \$(SHELL_CFLAGS) \$(SEE_FLAGS) \$(LINENOISE_DEF.\$(USE_LINENOISE)) -c \$(SQLITE3_SHELL_SRC) -o \$@\n" |
| @@ -1125,13 +1126,14 @@ | |
| 1126 | # |
| 1127 | # Closely related is SQLITE3_ORIGIN, with the same 0/1 mapping, |
| 1128 | # plus a value of 2 means that we are building a client-provided |
| 1129 | # sqlite3.c. |
| 1130 | SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o |
| 1131 | SQLITE3_OBJ.1 = $(OBJDIR)/sqlite3-see.o |
| 1132 | # SQLITE3_OBJ.2 is set by the configure process |
| 1133 | SQLITE3_OBJ. = $(SQLITE3_OBJ.0) |
| 1134 | SQLITE3_OBJ = $(SQLITE3_OBJ.$(SQLITE3_ORIGIN)) |
| 1135 | |
| 1136 | # The USE_SEE variable may be undefined, 0 or 1. If undefined or 0, |
| 1137 | # in-tree SQLite is used. If 1, then sqlite3-see.c (not part of the |
| 1138 | # source tree) is used and extra flags are provided to enable the |
| 1139 | # SQLite Encryption Extension. |
| @@ -1277,11 +1279,11 @@ | |
| 1279 | set j " \\\n " |
| 1280 | writeln "SQLITE_OPTIONS = [join $MINGW_SQLITE_OPTIONS $j]\n" |
| 1281 | writeln "SHELL_OPTIONS = [join $SHELL_WIN32_OPTIONS $j]\n" |
| 1282 | writeln "PIKCHR_OPTIONS = [join $MINGW_PIKCHR_OPTIONS $j]\n" |
| 1283 | |
| 1284 | writeln "\$(SQLITE3_OBJ):\t\$(SQLITE3_SRC) \$(SRCDIR)/../win/Makefile.mingw" |
| 1285 | writeln "\t\$(XTCC) \$(SQLITE_OPTIONS) \$(SQLITE_CFLAGS) \$(SEE_FLAGS) \\" |
| 1286 | writeln "\t\t-c \$(SQLITE3_SRC) -o \$@\n" |
| 1287 | |
| 1288 | writeln "\$(OBJDIR)/cson_amalgamation.o:\t\$(SRCDIR_extsrc)/cson_amalgamation.c" |
| 1289 | writeln "\t\$(XTCC) -c \$(SRCDIR_extsrc)/cson_amalgamation.c -o \$@\n" |
| 1290 |
+1
-1
| --- tools/mkbuiltin.c | ||
| +++ tools/mkbuiltin.c | ||
| @@ -75,11 +75,11 @@ | ||
| 75 | 75 | static void compressJavascript(unsigned char *z, int *pn){ |
| 76 | 76 | int n = *pn; |
| 77 | 77 | int i, j, k; |
| 78 | 78 | for(i=j=0; i<n; i++){ |
| 79 | 79 | unsigned char c = z[i]; |
| 80 | - if( c=='/' ){ | |
| 80 | + if( c=='/' && (i==0 || z[i-1]!=':')){ | |
| 81 | 81 | if( z[i+1]=='*' ){ |
| 82 | 82 | while( j>0 && (z[j-1]==' ' || z[j-1]=='\t') ){ j--; } |
| 83 | 83 | for(k=i+3; k<n && (z[k]!='/' || z[k-1]!='*'); k++){} |
| 84 | 84 | i = k; |
| 85 | 85 | continue; |
| 86 | 86 |
| --- tools/mkbuiltin.c | |
| +++ tools/mkbuiltin.c | |
| @@ -75,11 +75,11 @@ | |
| 75 | static void compressJavascript(unsigned char *z, int *pn){ |
| 76 | int n = *pn; |
| 77 | int i, j, k; |
| 78 | for(i=j=0; i<n; i++){ |
| 79 | unsigned char c = z[i]; |
| 80 | if( c=='/' ){ |
| 81 | if( z[i+1]=='*' ){ |
| 82 | while( j>0 && (z[j-1]==' ' || z[j-1]=='\t') ){ j--; } |
| 83 | for(k=i+3; k<n && (z[k]!='/' || z[k-1]!='*'); k++){} |
| 84 | i = k; |
| 85 | continue; |
| 86 |
| --- tools/mkbuiltin.c | |
| +++ tools/mkbuiltin.c | |
| @@ -75,11 +75,11 @@ | |
| 75 | static void compressJavascript(unsigned char *z, int *pn){ |
| 76 | int n = *pn; |
| 77 | int i, j, k; |
| 78 | for(i=j=0; i<n; i++){ |
| 79 | unsigned char c = z[i]; |
| 80 | if( c=='/' && (i==0 || z[i-1]!=':')){ |
| 81 | if( z[i+1]=='*' ){ |
| 82 | while( j>0 && (z[j-1]==' ' || z[j-1]=='\t') ){ j--; } |
| 83 | for(k=i+3; k<n && (z[k]!='/' || z[k-1]!='*'); k++){} |
| 84 | i = k; |
| 85 | continue; |
| 86 |
+20
-5
| --- tools/mkindex.c | ||
| +++ tools/mkindex.c | ||
| @@ -37,14 +37,18 @@ | ||
| 37 | 37 | ** and analysis only. |
| 38 | 38 | ** |
| 39 | 39 | ** Commands are 1st-tier by default. If the command name begins with |
| 40 | 40 | ** "test-" or if the command name has a "test" argument, then it becomes |
| 41 | 41 | ** a test command. If the command name has a "2nd-tier" argument or ends |
| 42 | -** with a "*" character, it is second tier. Examples: | |
| 42 | +** with a "*" character, it is second tier. If the command name has an "alias" | |
| 43 | +** argument or ends with a "#" character, it is an alias: another name | |
| 44 | +** (a one-to-one replacement) for a command. Examples: | |
| 43 | 45 | ** |
| 44 | 46 | ** COMMAND: abcde* |
| 45 | 47 | ** COMMAND: fghij 2nd-tier |
| 48 | +** COMMAND: mnopq# | |
| 49 | +** COMMAND: rstuv alias | |
| 46 | 50 | ** COMMAND: test-xyzzy |
| 47 | 51 | ** COMMAND: xyzzy test |
| 48 | 52 | ** |
| 49 | 53 | ** A SETTING: may be followed by arguments that give additional attributes |
| 50 | 54 | ** to that setting: |
| @@ -93,10 +97,11 @@ | ||
| 93 | 97 | #define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */ |
| 94 | 98 | #define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret webpage content */ |
| 95 | 99 | #define CMDFLAG_SENSITIVE 0x0400 /* Security-sensitive setting */ |
| 96 | 100 | #define CMDFLAG_HIDDEN 0x0800 /* Elide from most listings */ |
| 97 | 101 | #define CMDFLAG_LDAVG_EXEMPT 0x1000 /* Exempt from load_control() */ |
| 102 | +#define CMDFLAG_ALIAS 0x2000 /* Command aliases */ | |
| 98 | 103 | /**************************************************************************/ |
| 99 | 104 | |
| 100 | 105 | /* |
| 101 | 106 | ** Each entry looks like this: |
| 102 | 107 | */ |
| @@ -219,10 +224,15 @@ | ||
| 219 | 224 | }else if( zLine[i+j-1]=='*' ){ |
| 220 | 225 | /* If the command name ends in '*', remove the '*' from the name |
| 221 | 226 | ** but move the command into the second tier */ |
| 222 | 227 | aEntry[nUsed].zPath[j-1] = 0; |
| 223 | 228 | aEntry[nUsed].eType |= CMDFLAG_2ND_TIER; |
| 229 | + }else if( zLine[i+j-1]=='#' ){ | |
| 230 | + /* If the command name ends in '#', remove the '#' from the name | |
| 231 | + ** but move the command into aliases */ | |
| 232 | + aEntry[nUsed].zPath[j-1] = 0; | |
| 233 | + aEntry[nUsed].eType |= CMDFLAG_ALIAS; | |
| 224 | 234 | }else{ |
| 225 | 235 | /* Otherwise, this is a first-tier command */ |
| 226 | 236 | aEntry[nUsed].eType |= CMDFLAG_1ST_TIER; |
| 227 | 237 | } |
| 228 | 238 | } |
| @@ -232,18 +242,21 @@ | ||
| 232 | 242 | i += j; |
| 233 | 243 | while( fossil_isspace(zLine[i]) ){ i++; } |
| 234 | 244 | if( zLine[i]==0 ) break; |
| 235 | 245 | for(j=0; zLine[i+j] && !fossil_isspace(zLine[i+j]); j++){} |
| 236 | 246 | if( j==8 && strncmp(&zLine[i], "1st-tier", j)==0 ){ |
| 237 | - aEntry[nUsed].eType &= ~(CMDFLAG_2ND_TIER|CMDFLAG_TEST); | |
| 247 | + aEntry[nUsed].eType &= ~(CMDFLAG_2ND_TIER|CMDFLAG_TEST|CMDFLAG_ALIAS); | |
| 238 | 248 | aEntry[nUsed].eType |= CMDFLAG_1ST_TIER; |
| 239 | 249 | }else if( j==8 && strncmp(&zLine[i], "2nd-tier", j)==0 ){ |
| 240 | - aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_TEST); | |
| 250 | + aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_TEST|CMDFLAG_ALIAS); | |
| 241 | 251 | aEntry[nUsed].eType |= CMDFLAG_2ND_TIER; |
| 242 | 252 | }else if( j==4 && strncmp(&zLine[i], "test", j)==0 ){ |
| 243 | - aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_2ND_TIER); | |
| 253 | + aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_2ND_TIER|CMDFLAG_ALIAS); | |
| 244 | 254 | aEntry[nUsed].eType |= CMDFLAG_TEST; |
| 255 | + }else if( j==5 && strncmp(&zLine[i], "alias", j)==0 ){ | |
| 256 | + aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_2ND_TIER|CMDFLAG_TEST); | |
| 257 | + aEntry[nUsed].eType |= CMDFLAG_ALIAS; | |
| 245 | 258 | }else if( j==11 && strncmp(&zLine[i], "raw-content", j)==0 ){ |
| 246 | 259 | aEntry[nUsed].eType |= CMDFLAG_RAWCONTENT; |
| 247 | 260 | }else if( j==7 && strncmp(&zLine[i], "boolean", j)==0 ){ |
| 248 | 261 | aEntry[nUsed].eType &= ~(CMDFLAG_BLOCKTEXT); |
| 249 | 262 | aEntry[nUsed].iWidth = 0; |
| @@ -453,24 +466,26 @@ | ||
| 453 | 466 | if( aEntry[i].zIf ){ |
| 454 | 467 | printf("%s", aEntry[i].zIf); |
| 455 | 468 | }else if( (aEntry[i].eType & CMDFLAG_WEBPAGE)!=0 ){ |
| 456 | 469 | nWeb++; |
| 457 | 470 | } |
| 458 | - printf(" { \"%.*s\",%*s%s,%*szHelp%03d, 0x%03x },\n", | |
| 471 | + printf(" { \"%.*s\",%*s%s,%*szHelp%03d, %3d, 0x%03x },\n", | |
| 459 | 472 | n, z, |
| 460 | 473 | 25-n, "", |
| 461 | 474 | aEntry[i].zFunc, |
| 462 | 475 | (int)(29-strlen(aEntry[i].zFunc)), "", |
| 476 | + aEntry[i].iHelp, | |
| 463 | 477 | aEntry[i].iHelp, |
| 464 | 478 | aEntry[i].eType |
| 465 | 479 | ); |
| 466 | 480 | if( aEntry[i].zIf ) printf("#endif\n"); |
| 467 | 481 | } |
| 468 | 482 | printf("};\n"); |
| 469 | 483 | printf("#define FOSSIL_FIRST_CMD %d\n", nWeb); |
| 470 | 484 | printf("#define FOSSIL_MX_CMDNAME %d /* max length of any command name */\n", |
| 471 | 485 | mxLen); |
| 486 | + printf("#define FOSSIL_MX_CMDIDX %d /* max index for commands */\n", nFixed); | |
| 472 | 487 | |
| 473 | 488 | /* Generate the aSetting[] table */ |
| 474 | 489 | printf("const Setting aSetting[] = {\n"); |
| 475 | 490 | for(i=0; i<nFixed; i++){ |
| 476 | 491 | const char *z; |
| 477 | 492 |
| --- tools/mkindex.c | |
| +++ tools/mkindex.c | |
| @@ -37,14 +37,18 @@ | |
| 37 | ** and analysis only. |
| 38 | ** |
| 39 | ** Commands are 1st-tier by default. If the command name begins with |
| 40 | ** "test-" or if the command name has a "test" argument, then it becomes |
| 41 | ** a test command. If the command name has a "2nd-tier" argument or ends |
| 42 | ** with a "*" character, it is second tier. Examples: |
| 43 | ** |
| 44 | ** COMMAND: abcde* |
| 45 | ** COMMAND: fghij 2nd-tier |
| 46 | ** COMMAND: test-xyzzy |
| 47 | ** COMMAND: xyzzy test |
| 48 | ** |
| 49 | ** A SETTING: may be followed by arguments that give additional attributes |
| 50 | ** to that setting: |
| @@ -93,10 +97,11 @@ | |
| 93 | #define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */ |
| 94 | #define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret webpage content */ |
| 95 | #define CMDFLAG_SENSITIVE 0x0400 /* Security-sensitive setting */ |
| 96 | #define CMDFLAG_HIDDEN 0x0800 /* Elide from most listings */ |
| 97 | #define CMDFLAG_LDAVG_EXEMPT 0x1000 /* Exempt from load_control() */ |
| 98 | /**************************************************************************/ |
| 99 | |
| 100 | /* |
| 101 | ** Each entry looks like this: |
| 102 | */ |
| @@ -219,10 +224,15 @@ | |
| 219 | }else if( zLine[i+j-1]=='*' ){ |
| 220 | /* If the command name ends in '*', remove the '*' from the name |
| 221 | ** but move the command into the second tier */ |
| 222 | aEntry[nUsed].zPath[j-1] = 0; |
| 223 | aEntry[nUsed].eType |= CMDFLAG_2ND_TIER; |
| 224 | }else{ |
| 225 | /* Otherwise, this is a first-tier command */ |
| 226 | aEntry[nUsed].eType |= CMDFLAG_1ST_TIER; |
| 227 | } |
| 228 | } |
| @@ -232,18 +242,21 @@ | |
| 232 | i += j; |
| 233 | while( fossil_isspace(zLine[i]) ){ i++; } |
| 234 | if( zLine[i]==0 ) break; |
| 235 | for(j=0; zLine[i+j] && !fossil_isspace(zLine[i+j]); j++){} |
| 236 | if( j==8 && strncmp(&zLine[i], "1st-tier", j)==0 ){ |
| 237 | aEntry[nUsed].eType &= ~(CMDFLAG_2ND_TIER|CMDFLAG_TEST); |
| 238 | aEntry[nUsed].eType |= CMDFLAG_1ST_TIER; |
| 239 | }else if( j==8 && strncmp(&zLine[i], "2nd-tier", j)==0 ){ |
| 240 | aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_TEST); |
| 241 | aEntry[nUsed].eType |= CMDFLAG_2ND_TIER; |
| 242 | }else if( j==4 && strncmp(&zLine[i], "test", j)==0 ){ |
| 243 | aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_2ND_TIER); |
| 244 | aEntry[nUsed].eType |= CMDFLAG_TEST; |
| 245 | }else if( j==11 && strncmp(&zLine[i], "raw-content", j)==0 ){ |
| 246 | aEntry[nUsed].eType |= CMDFLAG_RAWCONTENT; |
| 247 | }else if( j==7 && strncmp(&zLine[i], "boolean", j)==0 ){ |
| 248 | aEntry[nUsed].eType &= ~(CMDFLAG_BLOCKTEXT); |
| 249 | aEntry[nUsed].iWidth = 0; |
| @@ -453,24 +466,26 @@ | |
| 453 | if( aEntry[i].zIf ){ |
| 454 | printf("%s", aEntry[i].zIf); |
| 455 | }else if( (aEntry[i].eType & CMDFLAG_WEBPAGE)!=0 ){ |
| 456 | nWeb++; |
| 457 | } |
| 458 | printf(" { \"%.*s\",%*s%s,%*szHelp%03d, 0x%03x },\n", |
| 459 | n, z, |
| 460 | 25-n, "", |
| 461 | aEntry[i].zFunc, |
| 462 | (int)(29-strlen(aEntry[i].zFunc)), "", |
| 463 | aEntry[i].iHelp, |
| 464 | aEntry[i].eType |
| 465 | ); |
| 466 | if( aEntry[i].zIf ) printf("#endif\n"); |
| 467 | } |
| 468 | printf("};\n"); |
| 469 | printf("#define FOSSIL_FIRST_CMD %d\n", nWeb); |
| 470 | printf("#define FOSSIL_MX_CMDNAME %d /* max length of any command name */\n", |
| 471 | mxLen); |
| 472 | |
| 473 | /* Generate the aSetting[] table */ |
| 474 | printf("const Setting aSetting[] = {\n"); |
| 475 | for(i=0; i<nFixed; i++){ |
| 476 | const char *z; |
| 477 |
| --- tools/mkindex.c | |
| +++ tools/mkindex.c | |
| @@ -37,14 +37,18 @@ | |
| 37 | ** and analysis only. |
| 38 | ** |
| 39 | ** Commands are 1st-tier by default. If the command name begins with |
| 40 | ** "test-" or if the command name has a "test" argument, then it becomes |
| 41 | ** a test command. If the command name has a "2nd-tier" argument or ends |
| 42 | ** with a "*" character, it is second tier. If the command name has an "alias" |
| 43 | ** argument or ends with a "#" character, it is an alias: another name |
| 44 | ** (a one-to-one replacement) for a command. Examples: |
| 45 | ** |
| 46 | ** COMMAND: abcde* |
| 47 | ** COMMAND: fghij 2nd-tier |
| 48 | ** COMMAND: mnopq# |
| 49 | ** COMMAND: rstuv alias |
| 50 | ** COMMAND: test-xyzzy |
| 51 | ** COMMAND: xyzzy test |
| 52 | ** |
| 53 | ** A SETTING: may be followed by arguments that give additional attributes |
| 54 | ** to that setting: |
| @@ -93,10 +97,11 @@ | |
| 97 | #define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */ |
| 98 | #define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret webpage content */ |
| 99 | #define CMDFLAG_SENSITIVE 0x0400 /* Security-sensitive setting */ |
| 100 | #define CMDFLAG_HIDDEN 0x0800 /* Elide from most listings */ |
| 101 | #define CMDFLAG_LDAVG_EXEMPT 0x1000 /* Exempt from load_control() */ |
| 102 | #define CMDFLAG_ALIAS 0x2000 /* Command aliases */ |
| 103 | /**************************************************************************/ |
| 104 | |
| 105 | /* |
| 106 | ** Each entry looks like this: |
| 107 | */ |
| @@ -219,10 +224,15 @@ | |
| 224 | }else if( zLine[i+j-1]=='*' ){ |
| 225 | /* If the command name ends in '*', remove the '*' from the name |
| 226 | ** but move the command into the second tier */ |
| 227 | aEntry[nUsed].zPath[j-1] = 0; |
| 228 | aEntry[nUsed].eType |= CMDFLAG_2ND_TIER; |
| 229 | }else if( zLine[i+j-1]=='#' ){ |
| 230 | /* If the command name ends in '#', remove the '#' from the name |
| 231 | ** but move the command into aliases */ |
| 232 | aEntry[nUsed].zPath[j-1] = 0; |
| 233 | aEntry[nUsed].eType |= CMDFLAG_ALIAS; |
| 234 | }else{ |
| 235 | /* Otherwise, this is a first-tier command */ |
| 236 | aEntry[nUsed].eType |= CMDFLAG_1ST_TIER; |
| 237 | } |
| 238 | } |
| @@ -232,18 +242,21 @@ | |
| 242 | i += j; |
| 243 | while( fossil_isspace(zLine[i]) ){ i++; } |
| 244 | if( zLine[i]==0 ) break; |
| 245 | for(j=0; zLine[i+j] && !fossil_isspace(zLine[i+j]); j++){} |
| 246 | if( j==8 && strncmp(&zLine[i], "1st-tier", j)==0 ){ |
| 247 | aEntry[nUsed].eType &= ~(CMDFLAG_2ND_TIER|CMDFLAG_TEST|CMDFLAG_ALIAS); |
| 248 | aEntry[nUsed].eType |= CMDFLAG_1ST_TIER; |
| 249 | }else if( j==8 && strncmp(&zLine[i], "2nd-tier", j)==0 ){ |
| 250 | aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_TEST|CMDFLAG_ALIAS); |
| 251 | aEntry[nUsed].eType |= CMDFLAG_2ND_TIER; |
| 252 | }else if( j==4 && strncmp(&zLine[i], "test", j)==0 ){ |
| 253 | aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_2ND_TIER|CMDFLAG_ALIAS); |
| 254 | aEntry[nUsed].eType |= CMDFLAG_TEST; |
| 255 | }else if( j==5 && strncmp(&zLine[i], "alias", j)==0 ){ |
| 256 | aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_2ND_TIER|CMDFLAG_TEST); |
| 257 | aEntry[nUsed].eType |= CMDFLAG_ALIAS; |
| 258 | }else if( j==11 && strncmp(&zLine[i], "raw-content", j)==0 ){ |
| 259 | aEntry[nUsed].eType |= CMDFLAG_RAWCONTENT; |
| 260 | }else if( j==7 && strncmp(&zLine[i], "boolean", j)==0 ){ |
| 261 | aEntry[nUsed].eType &= ~(CMDFLAG_BLOCKTEXT); |
| 262 | aEntry[nUsed].iWidth = 0; |
| @@ -453,24 +466,26 @@ | |
| 466 | if( aEntry[i].zIf ){ |
| 467 | printf("%s", aEntry[i].zIf); |
| 468 | }else if( (aEntry[i].eType & CMDFLAG_WEBPAGE)!=0 ){ |
| 469 | nWeb++; |
| 470 | } |
| 471 | printf(" { \"%.*s\",%*s%s,%*szHelp%03d, %3d, 0x%03x },\n", |
| 472 | n, z, |
| 473 | 25-n, "", |
| 474 | aEntry[i].zFunc, |
| 475 | (int)(29-strlen(aEntry[i].zFunc)), "", |
| 476 | aEntry[i].iHelp, |
| 477 | aEntry[i].iHelp, |
| 478 | aEntry[i].eType |
| 479 | ); |
| 480 | if( aEntry[i].zIf ) printf("#endif\n"); |
| 481 | } |
| 482 | printf("};\n"); |
| 483 | printf("#define FOSSIL_FIRST_CMD %d\n", nWeb); |
| 484 | printf("#define FOSSIL_MX_CMDNAME %d /* max length of any command name */\n", |
| 485 | mxLen); |
| 486 | printf("#define FOSSIL_MX_CMDIDX %d /* max index for commands */\n", nFixed); |
| 487 | |
| 488 | /* Generate the aSetting[] table */ |
| 489 | printf("const Setting aSetting[] = {\n"); |
| 490 | for(i=0; i<nFixed; i++){ |
| 491 | const char *z; |
| 492 |
+3
-2
| --- win/Makefile.mingw | ||
| +++ win/Makefile.mingw | ||
| @@ -1069,13 +1069,14 @@ | ||
| 1069 | 1069 | # |
| 1070 | 1070 | # Closely related is SQLITE3_ORIGIN, with the same 0/1 mapping, |
| 1071 | 1071 | # plus a value of 2 means that we are building a client-provided |
| 1072 | 1072 | # sqlite3.c. |
| 1073 | 1073 | SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o |
| 1074 | -SQLITE3_OBJ.1 = | |
| 1074 | +SQLITE3_OBJ.1 = $(OBJDIR)/sqlite3-see.o | |
| 1075 | 1075 | # SQLITE3_OBJ.2 is set by the configure process |
| 1076 | 1076 | SQLITE3_OBJ. = $(SQLITE3_OBJ.0) |
| 1077 | +SQLITE3_OBJ = $(SQLITE3_OBJ.$(SQLITE3_ORIGIN)) | |
| 1077 | 1078 | |
| 1078 | 1079 | # The USE_SEE variable may be undefined, 0 or 1. If undefined or 0, |
| 1079 | 1080 | # in-tree SQLite is used. If 1, then sqlite3-see.c (not part of the |
| 1080 | 1081 | # source tree) is used and extra flags are provided to enable the |
| 1081 | 1082 | # SQLite Encryption Extension. |
| @@ -2567,11 +2568,11 @@ | ||
| 2567 | 2568 | -Dgetenv=fossil_getenv \ |
| 2568 | 2569 | -Dfopen=fossil_fopen |
| 2569 | 2570 | |
| 2570 | 2571 | PIKCHR_OPTIONS = -DPIKCHR_TOKEN_LIMIT=10000 |
| 2571 | 2572 | |
| 2572 | -$(OBJDIR)/sqlite3.o: $(SQLITE3_SRC) $(SRCDIR)/../win/Makefile.mingw | |
| 2573 | +$(SQLITE3_OBJ): $(SQLITE3_SRC) $(SRCDIR)/../win/Makefile.mingw | |
| 2573 | 2574 | $(XTCC) $(SQLITE_OPTIONS) $(SQLITE_CFLAGS) $(SEE_FLAGS) \ |
| 2574 | 2575 | -c $(SQLITE3_SRC) -o $@ |
| 2575 | 2576 | |
| 2576 | 2577 | $(OBJDIR)/cson_amalgamation.o: $(SRCDIR_extsrc)/cson_amalgamation.c |
| 2577 | 2578 | $(XTCC) -c $(SRCDIR_extsrc)/cson_amalgamation.c -o $@ |
| 2578 | 2579 |
| --- win/Makefile.mingw | |
| +++ win/Makefile.mingw | |
| @@ -1069,13 +1069,14 @@ | |
| 1069 | # |
| 1070 | # Closely related is SQLITE3_ORIGIN, with the same 0/1 mapping, |
| 1071 | # plus a value of 2 means that we are building a client-provided |
| 1072 | # sqlite3.c. |
| 1073 | SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o |
| 1074 | SQLITE3_OBJ.1 = |
| 1075 | # SQLITE3_OBJ.2 is set by the configure process |
| 1076 | SQLITE3_OBJ. = $(SQLITE3_OBJ.0) |
| 1077 | |
| 1078 | # The USE_SEE variable may be undefined, 0 or 1. If undefined or 0, |
| 1079 | # in-tree SQLite is used. If 1, then sqlite3-see.c (not part of the |
| 1080 | # source tree) is used and extra flags are provided to enable the |
| 1081 | # SQLite Encryption Extension. |
| @@ -2567,11 +2568,11 @@ | |
| 2567 | -Dgetenv=fossil_getenv \ |
| 2568 | -Dfopen=fossil_fopen |
| 2569 | |
| 2570 | PIKCHR_OPTIONS = -DPIKCHR_TOKEN_LIMIT=10000 |
| 2571 | |
| 2572 | $(OBJDIR)/sqlite3.o: $(SQLITE3_SRC) $(SRCDIR)/../win/Makefile.mingw |
| 2573 | $(XTCC) $(SQLITE_OPTIONS) $(SQLITE_CFLAGS) $(SEE_FLAGS) \ |
| 2574 | -c $(SQLITE3_SRC) -o $@ |
| 2575 | |
| 2576 | $(OBJDIR)/cson_amalgamation.o: $(SRCDIR_extsrc)/cson_amalgamation.c |
| 2577 | $(XTCC) -c $(SRCDIR_extsrc)/cson_amalgamation.c -o $@ |
| 2578 |
| --- win/Makefile.mingw | |
| +++ win/Makefile.mingw | |
| @@ -1069,13 +1069,14 @@ | |
| 1069 | # |
| 1070 | # Closely related is SQLITE3_ORIGIN, with the same 0/1 mapping, |
| 1071 | # plus a value of 2 means that we are building a client-provided |
| 1072 | # sqlite3.c. |
| 1073 | SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o |
| 1074 | SQLITE3_OBJ.1 = $(OBJDIR)/sqlite3-see.o |
| 1075 | # SQLITE3_OBJ.2 is set by the configure process |
| 1076 | SQLITE3_OBJ. = $(SQLITE3_OBJ.0) |
| 1077 | SQLITE3_OBJ = $(SQLITE3_OBJ.$(SQLITE3_ORIGIN)) |
| 1078 | |
| 1079 | # The USE_SEE variable may be undefined, 0 or 1. If undefined or 0, |
| 1080 | # in-tree SQLite is used. If 1, then sqlite3-see.c (not part of the |
| 1081 | # source tree) is used and extra flags are provided to enable the |
| 1082 | # SQLite Encryption Extension. |
| @@ -2567,11 +2568,11 @@ | |
| 2568 | -Dgetenv=fossil_getenv \ |
| 2569 | -Dfopen=fossil_fopen |
| 2570 | |
| 2571 | PIKCHR_OPTIONS = -DPIKCHR_TOKEN_LIMIT=10000 |
| 2572 | |
| 2573 | $(SQLITE3_OBJ): $(SQLITE3_SRC) $(SRCDIR)/../win/Makefile.mingw |
| 2574 | $(XTCC) $(SQLITE_OPTIONS) $(SQLITE_CFLAGS) $(SEE_FLAGS) \ |
| 2575 | -c $(SQLITE3_SRC) -o $@ |
| 2576 | |
| 2577 | $(OBJDIR)/cson_amalgamation.o: $(SRCDIR_extsrc)/cson_amalgamation.c |
| 2578 | $(XTCC) -c $(SRCDIR_extsrc)/cson_amalgamation.c -o $@ |
| 2579 |
+44
-42
| --- win/Makefile.mingw.mistachkin | ||
| +++ win/Makefile.mingw.mistachkin | ||
| @@ -54,11 +54,11 @@ | ||
| 54 | 54 | |
| 55 | 55 | #### Enable compiling with debug symbols (much larger binary) |
| 56 | 56 | # |
| 57 | 57 | # FOSSIL_ENABLE_SYMBOLS = 1 |
| 58 | 58 | |
| 59 | -#### Enable JSON (http://www.json.org) support using "cson" | |
| 59 | +#### Enable JSON (https://www.json.org) support using "cson" | |
| 60 | 60 | # |
| 61 | 61 | FOSSIL_ENABLE_JSON = 1 |
| 62 | 62 | |
| 63 | 63 | #### Enable HTTPS support via OpenSSL (links to libssl and libcrypto) |
| 64 | 64 | # |
| @@ -549,10 +549,13 @@ | ||
| 549 | 549 | $(SRCDIR)/xfer.c \ |
| 550 | 550 | $(SRCDIR)/xfersetup.c \ |
| 551 | 551 | $(SRCDIR)/zip.c |
| 552 | 552 | |
| 553 | 553 | EXTRA_FILES = \ |
| 554 | + $(SRCDIR)/../extsrc/pikchr-worker.js \ | |
| 555 | + $(SRCDIR)/../extsrc/pikchr.js \ | |
| 556 | + $(SRCDIR)/../extsrc/pikchr.wasm \ | |
| 554 | 557 | $(SRCDIR)/../skins/ardoise/css.txt \ |
| 555 | 558 | $(SRCDIR)/../skins/ardoise/details.txt \ |
| 556 | 559 | $(SRCDIR)/../skins/ardoise/footer.txt \ |
| 557 | 560 | $(SRCDIR)/../skins/ardoise/header.txt \ |
| 558 | 561 | $(SRCDIR)/../skins/black_and_white/css.txt \ |
| @@ -617,10 +620,11 @@ | ||
| 617 | 620 | $(SRCDIR)/fossil.page.brlist.js \ |
| 618 | 621 | $(SRCDIR)/fossil.page.chat.js \ |
| 619 | 622 | $(SRCDIR)/fossil.page.fileedit.js \ |
| 620 | 623 | $(SRCDIR)/fossil.page.forumpost.js \ |
| 621 | 624 | $(SRCDIR)/fossil.page.pikchrshow.js \ |
| 625 | + $(SRCDIR)/fossil.page.pikchrshowasm.js \ | |
| 622 | 626 | $(SRCDIR)/fossil.page.whistory.js \ |
| 623 | 627 | $(SRCDIR)/fossil.page.wikiedit.js \ |
| 624 | 628 | $(SRCDIR)/fossil.pikchr.js \ |
| 625 | 629 | $(SRCDIR)/fossil.popupwidget.js \ |
| 626 | 630 | $(SRCDIR)/fossil.storage.js \ |
| @@ -652,10 +656,11 @@ | ||
| 652 | 656 | $(SRCDIR)/sounds/e.wav \ |
| 653 | 657 | $(SRCDIR)/sounds/f.wav \ |
| 654 | 658 | $(SRCDIR)/style.admin_log.css \ |
| 655 | 659 | $(SRCDIR)/style.chat.css \ |
| 656 | 660 | $(SRCDIR)/style.fileedit.css \ |
| 661 | + $(SRCDIR)/style.pikchrshow.css \ | |
| 657 | 662 | $(SRCDIR)/style.wikiedit.css \ |
| 658 | 663 | $(SRCDIR)/tree.js \ |
| 659 | 664 | $(SRCDIR)/useredit.js \ |
| 660 | 665 | $(SRCDIR)/wiki.wiki |
| 661 | 666 | |
| @@ -1064,13 +1069,14 @@ | ||
| 1064 | 1069 | # |
| 1065 | 1070 | # Closely related is SQLITE3_ORIGIN, with the same 0/1 mapping, |
| 1066 | 1071 | # plus a value of 2 means that we are building a client-provided |
| 1067 | 1072 | # sqlite3.c. |
| 1068 | 1073 | SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o |
| 1069 | -SQLITE3_OBJ.1 = | |
| 1074 | +SQLITE3_OBJ.1 = $(OBJDIR)/sqlite3-see.o | |
| 1070 | 1075 | # SQLITE3_OBJ.2 is set by the configure process |
| 1071 | 1076 | SQLITE3_OBJ. = $(SQLITE3_OBJ.0) |
| 1077 | +SQLITE3_OBJ = $(SQLITE3_OBJ.$(SQLITE3_ORIGIN)) | |
| 1072 | 1078 | |
| 1073 | 1079 | # The USE_SEE variable may be undefined, 0 or 1. If undefined or 0, |
| 1074 | 1080 | # in-tree SQLite is used. If 1, then sqlite3-see.c (not part of the |
| 1075 | 1081 | # source tree) is used and extra flags are provided to enable the |
| 1076 | 1082 | # SQLite Encryption Extension. |
| @@ -2512,65 +2518,61 @@ | ||
| 2512 | 2518 | -DSQLITE_OMIT_DEPRECATED \ |
| 2513 | 2519 | -DSQLITE_OMIT_PROGRESS_CALLBACK \ |
| 2514 | 2520 | -DSQLITE_OMIT_SHARED_CACHE \ |
| 2515 | 2521 | -DSQLITE_OMIT_LOAD_EXTENSION \ |
| 2516 | 2522 | -DSQLITE_MAX_EXPR_DEPTH=0 \ |
| 2517 | - -DSQLITE_USE_ALLOCA \ | |
| 2518 | 2523 | -DSQLITE_ENABLE_LOCKING_STYLE=0 \ |
| 2519 | 2524 | -DSQLITE_DEFAULT_FILE_FORMAT=4 \ |
| 2520 | 2525 | -DSQLITE_ENABLE_EXPLAIN_COMMENTS \ |
| 2521 | 2526 | -DSQLITE_ENABLE_FTS4 \ |
| 2522 | 2527 | -DSQLITE_ENABLE_DBSTAT_VTAB \ |
| 2523 | - -DSQLITE_ENABLE_JSON1 \ | |
| 2524 | 2528 | -DSQLITE_ENABLE_FTS5 \ |
| 2525 | 2529 | -DSQLITE_ENABLE_STMTVTAB \ |
| 2526 | 2530 | -DSQLITE_HAVE_ZLIB \ |
| 2527 | - -DSQLITE_INTROSPECTION_PRAGMAS \ | |
| 2528 | 2531 | -DSQLITE_ENABLE_DBPAGE_VTAB \ |
| 2529 | 2532 | -DSQLITE_TRUSTED_SCHEMA=0 \ |
| 2530 | 2533 | -DSQLITE_WIN32_NO_ANSI \ |
| 2531 | 2534 | $(MINGW_OPTIONS) \ |
| 2532 | 2535 | -DSQLITE_USE_MALLOC_H \ |
| 2533 | 2536 | -DSQLITE_USE_MSIZE |
| 2534 | 2537 | |
| 2535 | 2538 | SHELL_OPTIONS = -DNDEBUG=1 \ |
| 2536 | - -DSQLITE_DQS=0 \ | |
| 2537 | - -DSQLITE_THREADSAFE=0 \ | |
| 2538 | - -DSQLITE_DEFAULT_MEMSTATUS=0 \ | |
| 2539 | - -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \ | |
| 2540 | - -DSQLITE_LIKE_DOESNT_MATCH_BLOBS \ | |
| 2541 | - -DSQLITE_OMIT_DECLTYPE \ | |
| 2542 | - -DSQLITE_OMIT_DEPRECATED \ | |
| 2543 | - -DSQLITE_OMIT_PROGRESS_CALLBACK \ | |
| 2544 | - -DSQLITE_OMIT_SHARED_CACHE \ | |
| 2545 | - -DSQLITE_OMIT_LOAD_EXTENSION \ | |
| 2546 | - -DSQLITE_MAX_EXPR_DEPTH=0 \ | |
| 2547 | - -DSQLITE_USE_ALLOCA \ | |
| 2548 | - -DSQLITE_ENABLE_LOCKING_STYLE=0 \ | |
| 2549 | - -DSQLITE_DEFAULT_FILE_FORMAT=4 \ | |
| 2550 | - -DSQLITE_ENABLE_EXPLAIN_COMMENTS \ | |
| 2551 | - -DSQLITE_ENABLE_FTS4 \ | |
| 2552 | - -DSQLITE_ENABLE_DBSTAT_VTAB \ | |
| 2553 | - -DSQLITE_ENABLE_JSON1 \ | |
| 2554 | - -DSQLITE_ENABLE_FTS5 \ | |
| 2555 | - -DSQLITE_ENABLE_STMTVTAB \ | |
| 2556 | - -DSQLITE_HAVE_ZLIB \ | |
| 2557 | - -DSQLITE_INTROSPECTION_PRAGMAS \ | |
| 2558 | - -DSQLITE_ENABLE_DBPAGE_VTAB \ | |
| 2559 | - -DSQLITE_TRUSTED_SCHEMA=0 \ | |
| 2560 | - -Dmain=sqlite3_shell \ | |
| 2561 | - -DSQLITE_SHELL_IS_UTF8=1 \ | |
| 2562 | - -DSQLITE_OMIT_LOAD_EXTENSION=1 \ | |
| 2563 | - -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) \ | |
| 2564 | - -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname \ | |
| 2565 | - -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc \ | |
| 2566 | - -Daccess=file_access \ | |
| 2567 | - -Dsystem=fossil_system \ | |
| 2568 | - -Dgetenv=fossil_getenv \ | |
| 2569 | - -Dfopen=fossil_fopen | |
| 2570 | - | |
| 2571 | -$(OBJDIR)/sqlite3.o: $(SQLITE3_SRC) $(SRCDIR)/../win/Makefile.mingw.mistachkin | |
| 2539 | + -DSQLITE_DQS=0 \ | |
| 2540 | + -DSQLITE_THREADSAFE=0 \ | |
| 2541 | + -DSQLITE_DEFAULT_MEMSTATUS=0 \ | |
| 2542 | + -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \ | |
| 2543 | + -DSQLITE_LIKE_DOESNT_MATCH_BLOBS \ | |
| 2544 | + -DSQLITE_OMIT_DECLTYPE \ | |
| 2545 | + -DSQLITE_OMIT_DEPRECATED \ | |
| 2546 | + -DSQLITE_OMIT_PROGRESS_CALLBACK \ | |
| 2547 | + -DSQLITE_OMIT_SHARED_CACHE \ | |
| 2548 | + -DSQLITE_OMIT_LOAD_EXTENSION \ | |
| 2549 | + -DSQLITE_MAX_EXPR_DEPTH=0 \ | |
| 2550 | + -DSQLITE_ENABLE_LOCKING_STYLE=0 \ | |
| 2551 | + -DSQLITE_DEFAULT_FILE_FORMAT=4 \ | |
| 2552 | + -DSQLITE_ENABLE_EXPLAIN_COMMENTS \ | |
| 2553 | + -DSQLITE_ENABLE_FTS4 \ | |
| 2554 | + -DSQLITE_ENABLE_DBSTAT_VTAB \ | |
| 2555 | + -DSQLITE_ENABLE_FTS5 \ | |
| 2556 | + -DSQLITE_ENABLE_STMTVTAB \ | |
| 2557 | + -DSQLITE_HAVE_ZLIB \ | |
| 2558 | + -DSQLITE_ENABLE_DBPAGE_VTAB \ | |
| 2559 | + -DSQLITE_TRUSTED_SCHEMA=0 \ | |
| 2560 | + -Dmain=sqlite3_shell \ | |
| 2561 | + -DSQLITE_SHELL_IS_UTF8=1 \ | |
| 2562 | + -DSQLITE_OMIT_LOAD_EXTENSION=1 \ | |
| 2563 | + -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) \ | |
| 2564 | + -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname \ | |
| 2565 | + -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc \ | |
| 2566 | + -Daccess=file_access \ | |
| 2567 | + -Dsystem=fossil_system \ | |
| 2568 | + -Dgetenv=fossil_getenv \ | |
| 2569 | + -Dfopen=fossil_fopen | |
| 2570 | + | |
| 2571 | +PIKCHR_OPTIONS = -DPIKCHR_TOKEN_LIMIT=10000 | |
| 2572 | + | |
| 2573 | +$(SQLITE3_OBJ): $(SQLITE3_SRC) $(SRCDIR)/../win/Makefile.mingw.mistachkin | |
| 2572 | 2574 | $(XTCC) $(SQLITE_OPTIONS) $(SQLITE_CFLAGS) $(SEE_FLAGS) \ |
| 2573 | 2575 | -c $(SQLITE3_SRC) -o $@ |
| 2574 | 2576 | |
| 2575 | 2577 | $(OBJDIR)/cson_amalgamation.o: $(SRCDIR_extsrc)/cson_amalgamation.c |
| 2576 | 2578 | $(XTCC) -c $(SRCDIR_extsrc)/cson_amalgamation.c -o $@ |
| @@ -2588,7 +2590,7 @@ | ||
| 2588 | 2590 | |
| 2589 | 2591 | $(OBJDIR)/th_tcl.o: $(SRCDIR)/th_tcl.c |
| 2590 | 2592 | $(XTCC) -c $(SRCDIR)/th_tcl.c -o $@ |
| 2591 | 2593 | |
| 2592 | 2594 | $(OBJDIR)/pikchr.o: $(SRCDIR_extsrc)/pikchr.c |
| 2593 | - $(XTCC) -c $(SRCDIR_extsrc)/pikchr.c -o $@ | |
| 2595 | + $(XTCC) $(PIKCHR_OPTIONS) -c $(SRCDIR_extsrc)/pikchr.c -o $@ | |
| 2594 | 2596 | |
| 2595 | 2597 |
| --- win/Makefile.mingw.mistachkin | |
| +++ win/Makefile.mingw.mistachkin | |
| @@ -54,11 +54,11 @@ | |
| 54 | |
| 55 | #### Enable compiling with debug symbols (much larger binary) |
| 56 | # |
| 57 | # FOSSIL_ENABLE_SYMBOLS = 1 |
| 58 | |
| 59 | #### Enable JSON (http://www.json.org) support using "cson" |
| 60 | # |
| 61 | FOSSIL_ENABLE_JSON = 1 |
| 62 | |
| 63 | #### Enable HTTPS support via OpenSSL (links to libssl and libcrypto) |
| 64 | # |
| @@ -549,10 +549,13 @@ | |
| 549 | $(SRCDIR)/xfer.c \ |
| 550 | $(SRCDIR)/xfersetup.c \ |
| 551 | $(SRCDIR)/zip.c |
| 552 | |
| 553 | EXTRA_FILES = \ |
| 554 | $(SRCDIR)/../skins/ardoise/css.txt \ |
| 555 | $(SRCDIR)/../skins/ardoise/details.txt \ |
| 556 | $(SRCDIR)/../skins/ardoise/footer.txt \ |
| 557 | $(SRCDIR)/../skins/ardoise/header.txt \ |
| 558 | $(SRCDIR)/../skins/black_and_white/css.txt \ |
| @@ -617,10 +620,11 @@ | |
| 617 | $(SRCDIR)/fossil.page.brlist.js \ |
| 618 | $(SRCDIR)/fossil.page.chat.js \ |
| 619 | $(SRCDIR)/fossil.page.fileedit.js \ |
| 620 | $(SRCDIR)/fossil.page.forumpost.js \ |
| 621 | $(SRCDIR)/fossil.page.pikchrshow.js \ |
| 622 | $(SRCDIR)/fossil.page.whistory.js \ |
| 623 | $(SRCDIR)/fossil.page.wikiedit.js \ |
| 624 | $(SRCDIR)/fossil.pikchr.js \ |
| 625 | $(SRCDIR)/fossil.popupwidget.js \ |
| 626 | $(SRCDIR)/fossil.storage.js \ |
| @@ -652,10 +656,11 @@ | |
| 652 | $(SRCDIR)/sounds/e.wav \ |
| 653 | $(SRCDIR)/sounds/f.wav \ |
| 654 | $(SRCDIR)/style.admin_log.css \ |
| 655 | $(SRCDIR)/style.chat.css \ |
| 656 | $(SRCDIR)/style.fileedit.css \ |
| 657 | $(SRCDIR)/style.wikiedit.css \ |
| 658 | $(SRCDIR)/tree.js \ |
| 659 | $(SRCDIR)/useredit.js \ |
| 660 | $(SRCDIR)/wiki.wiki |
| 661 | |
| @@ -1064,13 +1069,14 @@ | |
| 1064 | # |
| 1065 | # Closely related is SQLITE3_ORIGIN, with the same 0/1 mapping, |
| 1066 | # plus a value of 2 means that we are building a client-provided |
| 1067 | # sqlite3.c. |
| 1068 | SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o |
| 1069 | SQLITE3_OBJ.1 = |
| 1070 | # SQLITE3_OBJ.2 is set by the configure process |
| 1071 | SQLITE3_OBJ. = $(SQLITE3_OBJ.0) |
| 1072 | |
| 1073 | # The USE_SEE variable may be undefined, 0 or 1. If undefined or 0, |
| 1074 | # in-tree SQLite is used. If 1, then sqlite3-see.c (not part of the |
| 1075 | # source tree) is used and extra flags are provided to enable the |
| 1076 | # SQLite Encryption Extension. |
| @@ -2512,65 +2518,61 @@ | |
| 2512 | -DSQLITE_OMIT_DEPRECATED \ |
| 2513 | -DSQLITE_OMIT_PROGRESS_CALLBACK \ |
| 2514 | -DSQLITE_OMIT_SHARED_CACHE \ |
| 2515 | -DSQLITE_OMIT_LOAD_EXTENSION \ |
| 2516 | -DSQLITE_MAX_EXPR_DEPTH=0 \ |
| 2517 | -DSQLITE_USE_ALLOCA \ |
| 2518 | -DSQLITE_ENABLE_LOCKING_STYLE=0 \ |
| 2519 | -DSQLITE_DEFAULT_FILE_FORMAT=4 \ |
| 2520 | -DSQLITE_ENABLE_EXPLAIN_COMMENTS \ |
| 2521 | -DSQLITE_ENABLE_FTS4 \ |
| 2522 | -DSQLITE_ENABLE_DBSTAT_VTAB \ |
| 2523 | -DSQLITE_ENABLE_JSON1 \ |
| 2524 | -DSQLITE_ENABLE_FTS5 \ |
| 2525 | -DSQLITE_ENABLE_STMTVTAB \ |
| 2526 | -DSQLITE_HAVE_ZLIB \ |
| 2527 | -DSQLITE_INTROSPECTION_PRAGMAS \ |
| 2528 | -DSQLITE_ENABLE_DBPAGE_VTAB \ |
| 2529 | -DSQLITE_TRUSTED_SCHEMA=0 \ |
| 2530 | -DSQLITE_WIN32_NO_ANSI \ |
| 2531 | $(MINGW_OPTIONS) \ |
| 2532 | -DSQLITE_USE_MALLOC_H \ |
| 2533 | -DSQLITE_USE_MSIZE |
| 2534 | |
| 2535 | SHELL_OPTIONS = -DNDEBUG=1 \ |
| 2536 | -DSQLITE_DQS=0 \ |
| 2537 | -DSQLITE_THREADSAFE=0 \ |
| 2538 | -DSQLITE_DEFAULT_MEMSTATUS=0 \ |
| 2539 | -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \ |
| 2540 | -DSQLITE_LIKE_DOESNT_MATCH_BLOBS \ |
| 2541 | -DSQLITE_OMIT_DECLTYPE \ |
| 2542 | -DSQLITE_OMIT_DEPRECATED \ |
| 2543 | -DSQLITE_OMIT_PROGRESS_CALLBACK \ |
| 2544 | -DSQLITE_OMIT_SHARED_CACHE \ |
| 2545 | -DSQLITE_OMIT_LOAD_EXTENSION \ |
| 2546 | -DSQLITE_MAX_EXPR_DEPTH=0 \ |
| 2547 | -DSQLITE_USE_ALLOCA \ |
| 2548 | -DSQLITE_ENABLE_LOCKING_STYLE=0 \ |
| 2549 | -DSQLITE_DEFAULT_FILE_FORMAT=4 \ |
| 2550 | -DSQLITE_ENABLE_EXPLAIN_COMMENTS \ |
| 2551 | -DSQLITE_ENABLE_FTS4 \ |
| 2552 | -DSQLITE_ENABLE_DBSTAT_VTAB \ |
| 2553 | -DSQLITE_ENABLE_JSON1 \ |
| 2554 | -DSQLITE_ENABLE_FTS5 \ |
| 2555 | -DSQLITE_ENABLE_STMTVTAB \ |
| 2556 | -DSQLITE_HAVE_ZLIB \ |
| 2557 | -DSQLITE_INTROSPECTION_PRAGMAS \ |
| 2558 | -DSQLITE_ENABLE_DBPAGE_VTAB \ |
| 2559 | -DSQLITE_TRUSTED_SCHEMA=0 \ |
| 2560 | -Dmain=sqlite3_shell \ |
| 2561 | -DSQLITE_SHELL_IS_UTF8=1 \ |
| 2562 | -DSQLITE_OMIT_LOAD_EXTENSION=1 \ |
| 2563 | -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) \ |
| 2564 | -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname \ |
| 2565 | -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc \ |
| 2566 | -Daccess=file_access \ |
| 2567 | -Dsystem=fossil_system \ |
| 2568 | -Dgetenv=fossil_getenv \ |
| 2569 | -Dfopen=fossil_fopen |
| 2570 | |
| 2571 | $(OBJDIR)/sqlite3.o: $(SQLITE3_SRC) $(SRCDIR)/../win/Makefile.mingw.mistachkin |
| 2572 | $(XTCC) $(SQLITE_OPTIONS) $(SQLITE_CFLAGS) $(SEE_FLAGS) \ |
| 2573 | -c $(SQLITE3_SRC) -o $@ |
| 2574 | |
| 2575 | $(OBJDIR)/cson_amalgamation.o: $(SRCDIR_extsrc)/cson_amalgamation.c |
| 2576 | $(XTCC) -c $(SRCDIR_extsrc)/cson_amalgamation.c -o $@ |
| @@ -2588,7 +2590,7 @@ | |
| 2588 | |
| 2589 | $(OBJDIR)/th_tcl.o: $(SRCDIR)/th_tcl.c |
| 2590 | $(XTCC) -c $(SRCDIR)/th_tcl.c -o $@ |
| 2591 | |
| 2592 | $(OBJDIR)/pikchr.o: $(SRCDIR_extsrc)/pikchr.c |
| 2593 | $(XTCC) -c $(SRCDIR_extsrc)/pikchr.c -o $@ |
| 2594 | |
| 2595 |
| --- win/Makefile.mingw.mistachkin | |
| +++ win/Makefile.mingw.mistachkin | |
| @@ -54,11 +54,11 @@ | |
| 54 | |
| 55 | #### Enable compiling with debug symbols (much larger binary) |
| 56 | # |
| 57 | # FOSSIL_ENABLE_SYMBOLS = 1 |
| 58 | |
| 59 | #### Enable JSON (https://www.json.org) support using "cson" |
| 60 | # |
| 61 | FOSSIL_ENABLE_JSON = 1 |
| 62 | |
| 63 | #### Enable HTTPS support via OpenSSL (links to libssl and libcrypto) |
| 64 | # |
| @@ -549,10 +549,13 @@ | |
| 549 | $(SRCDIR)/xfer.c \ |
| 550 | $(SRCDIR)/xfersetup.c \ |
| 551 | $(SRCDIR)/zip.c |
| 552 | |
| 553 | EXTRA_FILES = \ |
| 554 | $(SRCDIR)/../extsrc/pikchr-worker.js \ |
| 555 | $(SRCDIR)/../extsrc/pikchr.js \ |
| 556 | $(SRCDIR)/../extsrc/pikchr.wasm \ |
| 557 | $(SRCDIR)/../skins/ardoise/css.txt \ |
| 558 | $(SRCDIR)/../skins/ardoise/details.txt \ |
| 559 | $(SRCDIR)/../skins/ardoise/footer.txt \ |
| 560 | $(SRCDIR)/../skins/ardoise/header.txt \ |
| 561 | $(SRCDIR)/../skins/black_and_white/css.txt \ |
| @@ -617,10 +620,11 @@ | |
| 620 | $(SRCDIR)/fossil.page.brlist.js \ |
| 621 | $(SRCDIR)/fossil.page.chat.js \ |
| 622 | $(SRCDIR)/fossil.page.fileedit.js \ |
| 623 | $(SRCDIR)/fossil.page.forumpost.js \ |
| 624 | $(SRCDIR)/fossil.page.pikchrshow.js \ |
| 625 | $(SRCDIR)/fossil.page.pikchrshowasm.js \ |
| 626 | $(SRCDIR)/fossil.page.whistory.js \ |
| 627 | $(SRCDIR)/fossil.page.wikiedit.js \ |
| 628 | $(SRCDIR)/fossil.pikchr.js \ |
| 629 | $(SRCDIR)/fossil.popupwidget.js \ |
| 630 | $(SRCDIR)/fossil.storage.js \ |
| @@ -652,10 +656,11 @@ | |
| 656 | $(SRCDIR)/sounds/e.wav \ |
| 657 | $(SRCDIR)/sounds/f.wav \ |
| 658 | $(SRCDIR)/style.admin_log.css \ |
| 659 | $(SRCDIR)/style.chat.css \ |
| 660 | $(SRCDIR)/style.fileedit.css \ |
| 661 | $(SRCDIR)/style.pikchrshow.css \ |
| 662 | $(SRCDIR)/style.wikiedit.css \ |
| 663 | $(SRCDIR)/tree.js \ |
| 664 | $(SRCDIR)/useredit.js \ |
| 665 | $(SRCDIR)/wiki.wiki |
| 666 | |
| @@ -1064,13 +1069,14 @@ | |
| 1069 | # |
| 1070 | # Closely related is SQLITE3_ORIGIN, with the same 0/1 mapping, |
| 1071 | # plus a value of 2 means that we are building a client-provided |
| 1072 | # sqlite3.c. |
| 1073 | SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o |
| 1074 | SQLITE3_OBJ.1 = $(OBJDIR)/sqlite3-see.o |
| 1075 | # SQLITE3_OBJ.2 is set by the configure process |
| 1076 | SQLITE3_OBJ. = $(SQLITE3_OBJ.0) |
| 1077 | SQLITE3_OBJ = $(SQLITE3_OBJ.$(SQLITE3_ORIGIN)) |
| 1078 | |
| 1079 | # The USE_SEE variable may be undefined, 0 or 1. If undefined or 0, |
| 1080 | # in-tree SQLite is used. If 1, then sqlite3-see.c (not part of the |
| 1081 | # source tree) is used and extra flags are provided to enable the |
| 1082 | # SQLite Encryption Extension. |
| @@ -2512,65 +2518,61 @@ | |
| 2518 | -DSQLITE_OMIT_DEPRECATED \ |
| 2519 | -DSQLITE_OMIT_PROGRESS_CALLBACK \ |
| 2520 | -DSQLITE_OMIT_SHARED_CACHE \ |
| 2521 | -DSQLITE_OMIT_LOAD_EXTENSION \ |
| 2522 | -DSQLITE_MAX_EXPR_DEPTH=0 \ |
| 2523 | -DSQLITE_ENABLE_LOCKING_STYLE=0 \ |
| 2524 | -DSQLITE_DEFAULT_FILE_FORMAT=4 \ |
| 2525 | -DSQLITE_ENABLE_EXPLAIN_COMMENTS \ |
| 2526 | -DSQLITE_ENABLE_FTS4 \ |
| 2527 | -DSQLITE_ENABLE_DBSTAT_VTAB \ |
| 2528 | -DSQLITE_ENABLE_FTS5 \ |
| 2529 | -DSQLITE_ENABLE_STMTVTAB \ |
| 2530 | -DSQLITE_HAVE_ZLIB \ |
| 2531 | -DSQLITE_ENABLE_DBPAGE_VTAB \ |
| 2532 | -DSQLITE_TRUSTED_SCHEMA=0 \ |
| 2533 | -DSQLITE_WIN32_NO_ANSI \ |
| 2534 | $(MINGW_OPTIONS) \ |
| 2535 | -DSQLITE_USE_MALLOC_H \ |
| 2536 | -DSQLITE_USE_MSIZE |
| 2537 | |
| 2538 | SHELL_OPTIONS = -DNDEBUG=1 \ |
| 2539 | -DSQLITE_DQS=0 \ |
| 2540 | -DSQLITE_THREADSAFE=0 \ |
| 2541 | -DSQLITE_DEFAULT_MEMSTATUS=0 \ |
| 2542 | -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 \ |
| 2543 | -DSQLITE_LIKE_DOESNT_MATCH_BLOBS \ |
| 2544 | -DSQLITE_OMIT_DECLTYPE \ |
| 2545 | -DSQLITE_OMIT_DEPRECATED \ |
| 2546 | -DSQLITE_OMIT_PROGRESS_CALLBACK \ |
| 2547 | -DSQLITE_OMIT_SHARED_CACHE \ |
| 2548 | -DSQLITE_OMIT_LOAD_EXTENSION \ |
| 2549 | -DSQLITE_MAX_EXPR_DEPTH=0 \ |
| 2550 | -DSQLITE_ENABLE_LOCKING_STYLE=0 \ |
| 2551 | -DSQLITE_DEFAULT_FILE_FORMAT=4 \ |
| 2552 | -DSQLITE_ENABLE_EXPLAIN_COMMENTS \ |
| 2553 | -DSQLITE_ENABLE_FTS4 \ |
| 2554 | -DSQLITE_ENABLE_DBSTAT_VTAB \ |
| 2555 | -DSQLITE_ENABLE_FTS5 \ |
| 2556 | -DSQLITE_ENABLE_STMTVTAB \ |
| 2557 | -DSQLITE_HAVE_ZLIB \ |
| 2558 | -DSQLITE_ENABLE_DBPAGE_VTAB \ |
| 2559 | -DSQLITE_TRUSTED_SCHEMA=0 \ |
| 2560 | -Dmain=sqlite3_shell \ |
| 2561 | -DSQLITE_SHELL_IS_UTF8=1 \ |
| 2562 | -DSQLITE_OMIT_LOAD_EXTENSION=1 \ |
| 2563 | -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) \ |
| 2564 | -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname \ |
| 2565 | -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc \ |
| 2566 | -Daccess=file_access \ |
| 2567 | -Dsystem=fossil_system \ |
| 2568 | -Dgetenv=fossil_getenv \ |
| 2569 | -Dfopen=fossil_fopen |
| 2570 | |
| 2571 | PIKCHR_OPTIONS = -DPIKCHR_TOKEN_LIMIT=10000 |
| 2572 | |
| 2573 | $(SQLITE3_OBJ): $(SQLITE3_SRC) $(SRCDIR)/../win/Makefile.mingw.mistachkin |
| 2574 | $(XTCC) $(SQLITE_OPTIONS) $(SQLITE_CFLAGS) $(SEE_FLAGS) \ |
| 2575 | -c $(SQLITE3_SRC) -o $@ |
| 2576 | |
| 2577 | $(OBJDIR)/cson_amalgamation.o: $(SRCDIR_extsrc)/cson_amalgamation.c |
| 2578 | $(XTCC) -c $(SRCDIR_extsrc)/cson_amalgamation.c -o $@ |
| @@ -2588,7 +2590,7 @@ | |
| 2590 | |
| 2591 | $(OBJDIR)/th_tcl.o: $(SRCDIR)/th_tcl.c |
| 2592 | $(XTCC) -c $(SRCDIR)/th_tcl.c -o $@ |
| 2593 | |
| 2594 | $(OBJDIR)/pikchr.o: $(SRCDIR_extsrc)/pikchr.c |
| 2595 | $(XTCC) $(PIKCHR_OPTIONS) -c $(SRCDIR_extsrc)/pikchr.c -o $@ |
| 2596 | |
| 2597 |
+2
-2
| --- win/fossil.exe.manifest | ||
| +++ win/fossil.exe.manifest | ||
| @@ -1,9 +1,9 @@ | ||
| 1 | 1 | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
| 2 | 2 | <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" |
| 3 | 3 | xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> |
| 4 | - <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="fossil" | |
| 4 | + <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="fossil" | |
| 5 | 5 | type="win32" /> |
| 6 | 6 | <description> |
| 7 | 7 | Simple, high-reliability, distributed software configuration management system. |
| 8 | 8 | </description> |
| 9 | 9 | <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> |
| @@ -34,10 +34,10 @@ | ||
| 34 | 34 | </asmv3:windowsSettings> |
| 35 | 35 | </asmv3:application> |
| 36 | 36 | <dependency> |
| 37 | 37 | <dependentAssembly> |
| 38 | 38 | <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" |
| 39 | - version="6.0.0.0" processorArchitecture="X86" | |
| 39 | + version="6.0.0.0" processorArchitecture="*" | |
| 40 | 40 | publicKeyToken="6595b64144ccf1df" language="*" /> |
| 41 | 41 | </dependentAssembly> |
| 42 | 42 | </dependency> |
| 43 | 43 | </assembly> |
| 44 | 44 |
| --- win/fossil.exe.manifest | |
| +++ win/fossil.exe.manifest | |
| @@ -1,9 +1,9 @@ | |
| 1 | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
| 2 | <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" |
| 3 | xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> |
| 4 | <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="fossil" |
| 5 | type="win32" /> |
| 6 | <description> |
| 7 | Simple, high-reliability, distributed software configuration management system. |
| 8 | </description> |
| 9 | <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> |
| @@ -34,10 +34,10 @@ | |
| 34 | </asmv3:windowsSettings> |
| 35 | </asmv3:application> |
| 36 | <dependency> |
| 37 | <dependentAssembly> |
| 38 | <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" |
| 39 | version="6.0.0.0" processorArchitecture="X86" |
| 40 | publicKeyToken="6595b64144ccf1df" language="*" /> |
| 41 | </dependentAssembly> |
| 42 | </dependency> |
| 43 | </assembly> |
| 44 |
| --- win/fossil.exe.manifest | |
| +++ win/fossil.exe.manifest | |
| @@ -1,9 +1,9 @@ | |
| 1 | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> |
| 2 | <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" |
| 3 | xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> |
| 4 | <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="fossil" |
| 5 | type="win32" /> |
| 6 | <description> |
| 7 | Simple, high-reliability, distributed software configuration management system. |
| 8 | </description> |
| 9 | <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> |
| @@ -34,10 +34,10 @@ | |
| 34 | </asmv3:windowsSettings> |
| 35 | </asmv3:application> |
| 36 | <dependency> |
| 37 | <dependentAssembly> |
| 38 | <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" |
| 39 | version="6.0.0.0" processorArchitecture="*" |
| 40 | publicKeyToken="6595b64144ccf1df" language="*" /> |
| 41 | </dependentAssembly> |
| 42 | </dependency> |
| 43 | </assembly> |
| 44 |
+1
-1
| --- www/alerts.md | ||
| +++ www/alerts.md | ||
| @@ -676,11 +676,11 @@ | ||
| 676 | 676 | Contrast a password which may be shared with other services, which |
| 677 | 677 | then compromises those other services. |
| 678 | 678 | |
| 679 | 679 | * No PII other than the subscriber's email address is available to an |
| 680 | 680 | attacker with the `subscriberCode`. Nor can knowledge of the |
| 681 | - `subscriberCode` lead to a email flood or other annoyance attack, as | |
| 681 | + `subscriberCode` lead to an email flood or other annoyance attack, as | |
| 682 | 682 | far as I can see. |
| 683 | 683 | |
| 684 | 684 | If the `subscriberCodes` for a Fossil repository are ever compromised, |
| 685 | 685 | new ones can be generated as follows: |
| 686 | 686 | |
| 687 | 687 |
| --- www/alerts.md | |
| +++ www/alerts.md | |
| @@ -676,11 +676,11 @@ | |
| 676 | Contrast a password which may be shared with other services, which |
| 677 | then compromises those other services. |
| 678 | |
| 679 | * No PII other than the subscriber's email address is available to an |
| 680 | attacker with the `subscriberCode`. Nor can knowledge of the |
| 681 | `subscriberCode` lead to a email flood or other annoyance attack, as |
| 682 | far as I can see. |
| 683 | |
| 684 | If the `subscriberCodes` for a Fossil repository are ever compromised, |
| 685 | new ones can be generated as follows: |
| 686 | |
| 687 |
| --- www/alerts.md | |
| +++ www/alerts.md | |
| @@ -676,11 +676,11 @@ | |
| 676 | Contrast a password which may be shared with other services, which |
| 677 | then compromises those other services. |
| 678 | |
| 679 | * No PII other than the subscriber's email address is available to an |
| 680 | attacker with the `subscriberCode`. Nor can knowledge of the |
| 681 | `subscriberCode` lead to an email flood or other annoyance attack, as |
| 682 | far as I can see. |
| 683 | |
| 684 | If the `subscriberCodes` for a Fossil repository are ever compromised, |
| 685 | new ones can be generated as follows: |
| 686 | |
| 687 |
+13
-77
| --- www/build.wiki | ||
| +++ www/build.wiki | ||
| @@ -79,11 +79,11 @@ | ||
| 79 | 79 | <p>Unpack the ZIP or tarball you downloaded then |
| 80 | 80 | <b>cd</b> into the directory created.</p></li> |
| 81 | 81 | |
| 82 | 82 | <li><i>(Optional, Debian-compatible Linux only)</i> |
| 83 | 83 | Make sure you have all the necessary tools and libraries at hand by running: |
| 84 | -<b>sudo apt install tcl-dev tk libssl-dev</b>. | |
| 84 | +<b>sudo apt install tcl-dev tk libssl-dev zlib1g-dev</b>. | |
| 85 | 85 | |
| 86 | 86 | <li><i>(Optional, Unix only)</i> |
| 87 | 87 | Run <b>./configure</b> to construct a makefile. |
| 88 | 88 | |
| 89 | 89 | <ol type="a"> |
| @@ -112,11 +112,12 @@ | ||
| 112 | 112 | <p>For more advanced use cases, see the [./ssl.wiki#openssl-bin|OpenSSL |
| 113 | 113 | discussion in the "TLS and Fossil" document].</p> |
| 114 | 114 | |
| 115 | 115 | <li><p> |
| 116 | 116 | To build a statically linked binary (suitable for use inside a chroot |
| 117 | -jail) add the <b>--static</b> option. | |
| 117 | +jail) add the <b>--static</b> option. (See the [#docker | Docker section | |
| 118 | +below].) | |
| 118 | 119 | |
| 119 | 120 | <li><p> |
| 120 | 121 | To enable the native [./th1.md#tclEval | Tcl integration feature] feature, |
| 121 | 122 | add the <b>--with-tcl=1</b> and <b>--with-tcl-private-stubs=1</b> options. |
| 122 | 123 | |
| @@ -248,85 +249,20 @@ | ||
| 248 | 249 | TCC += -Dsocketlen_t=int |
| 249 | 250 | TCC += -DSQLITE_MAX_MMAP_SIZE=0 |
| 250 | 251 | </pre></blockquote> |
| 251 | 252 | </ul> |
| 252 | 253 | |
| 253 | -<h2>5.0 Building a Static Binary on Linux using Docker</h2> | |
| 254 | - | |
| 255 | -Building a static binary on Linux is not as straightforward as it | |
| 256 | -could be because the GNU C library requires that certain components be | |
| 257 | -dynamically loadable. That can be worked around by building against a | |
| 258 | -different C library, which is simplest to do by way of a container | |
| 259 | -environment like [https://www.docker.com/ | Docker]. | |
| 260 | - | |
| 261 | -The following instructions for building fossil using Docker | |
| 262 | -were adapted from [https://fossil-scm.org/forum/forumpost/5dd2d61e5f | forumpost/5dd2d61e5f]. | |
| 263 | -These instructions assume that docker is installed and that the user running | |
| 264 | -these instructions has permission to do so (i.e., they are <tt>root</tt> or | |
| 265 | -are a member of the <tt>docker</tt> group). | |
| 266 | - | |
| 267 | -First, create a file named <tt>Dockerfile</tt> with the following contents: | |
| 268 | - | |
| 269 | -<pre><code> | |
| 270 | -FROM alpine:edge | |
| 271 | -RUN apk update \ | |
| 272 | - && apk upgrade \ | |
| 273 | - && apk add --no-cache \ | |
| 274 | - curl gcc make tcl \ | |
| 275 | - musl-dev \ | |
| 276 | - openssl-dev zlib-dev \ | |
| 277 | - openssl-libs-static zlib-static \ | |
| 278 | - && curl \ | |
| 279 | - "https://fossil-scm.org/home/tarball/fossil-src.tar.gz?name=fossil-src&uuid=trunk" \ | |
| 280 | - -o fossil-src.tar.gz \ | |
| 281 | - && tar xf fossil-src.tar.gz \ | |
| 282 | - && cd fossil-src \ | |
| 283 | - && ./configure \ | |
| 284 | - --static \ | |
| 285 | - --disable-fusefs \ | |
| 286 | - --with-th1-docs \ | |
| 287 | - --with-th1-hooks \ | |
| 288 | - && make | |
| 289 | -</code></pre> | |
| 290 | - | |
| 291 | -Be sure to modify the <tt>configure</tt> flags, if desired. e.g., add <tt>--json</tt> | |
| 292 | -for JSON support. | |
| 293 | - | |
| 294 | -From the directory containing that file, build it with docker: | |
| 295 | - | |
| 296 | -<pre><code># docker build -t fossil_static .</code></pre> | |
| 297 | - | |
| 298 | -If you get permissions errors when running that as a non-root user, | |
| 299 | -be sure to add the user to the <tt>docker</tt> group before trying | |
| 300 | -again. | |
| 301 | - | |
| 302 | -That creates a docker image and builds a static fossil binary inside | |
| 303 | -it. That step will take several minutes or more, depending on the | |
| 304 | -speed of the build environment. | |
| 305 | - | |
| 306 | -Next, create a docker container to host the image we just created: | |
| 307 | - | |
| 308 | -<pre><code># docker create --name fossil fossil_static</code></pre> | |
| 309 | - | |
| 310 | -Then copy the fossil binary from that container: | |
| 311 | - | |
| 312 | -<pre><code># docker cp fossil:/fossil-src/fossil fossil</code></pre> | |
| 313 | - | |
| 314 | -The resulting binary will be <em>huge</em> because it is built with | |
| 315 | -debug info. To strip that information, reducing the size greatly: | |
| 316 | - | |
| 317 | -<pre><code># strip fossil</code></pre> | |
| 318 | - | |
| 319 | -To delete the Docker container and image (if desired), run: | |
| 320 | - | |
| 321 | -<pre><code># docker container rm fossil | |
| 322 | -# docker image ls | |
| 323 | -</code></pre> | |
| 324 | - | |
| 325 | -Note the IDs of the images named <tt>fossil_static</tt> and <tt>alpine</tt>, then: | |
| 326 | - | |
| 327 | -<pre><code>docker image rm THE_FOSSIL_ID THE_ALPINE_ID</code></pre> | |
| 254 | + | |
| 255 | +<h2 id="docker" name="oci">5.0 Building a Docker Container</h2> | |
| 256 | + | |
| 257 | +The information on building Fossil inside an | |
| 258 | +[https://opencontainers.org/ | OCI container] is now in | |
| 259 | +[./containers.md | a separate document]. | |
| 260 | + | |
| 261 | +This includes the instructions on using the OCI container as an | |
| 262 | +expedient intermediary for building a statically-linked Fossil binary on | |
| 263 | +modern Linux platforms, which otherwise make this difficult. | |
| 328 | 264 | |
| 329 | 265 | |
| 330 | 266 | <h2>6.0 Building on/for Android</h2> |
| 331 | 267 | |
| 332 | 268 | <h3>6.1 Cross-compiling from Linux</h3> |
| 333 | 269 |
| --- www/build.wiki | |
| +++ www/build.wiki | |
| @@ -79,11 +79,11 @@ | |
| 79 | <p>Unpack the ZIP or tarball you downloaded then |
| 80 | <b>cd</b> into the directory created.</p></li> |
| 81 | |
| 82 | <li><i>(Optional, Debian-compatible Linux only)</i> |
| 83 | Make sure you have all the necessary tools and libraries at hand by running: |
| 84 | <b>sudo apt install tcl-dev tk libssl-dev</b>. |
| 85 | |
| 86 | <li><i>(Optional, Unix only)</i> |
| 87 | Run <b>./configure</b> to construct a makefile. |
| 88 | |
| 89 | <ol type="a"> |
| @@ -112,11 +112,12 @@ | |
| 112 | <p>For more advanced use cases, see the [./ssl.wiki#openssl-bin|OpenSSL |
| 113 | discussion in the "TLS and Fossil" document].</p> |
| 114 | |
| 115 | <li><p> |
| 116 | To build a statically linked binary (suitable for use inside a chroot |
| 117 | jail) add the <b>--static</b> option. |
| 118 | |
| 119 | <li><p> |
| 120 | To enable the native [./th1.md#tclEval | Tcl integration feature] feature, |
| 121 | add the <b>--with-tcl=1</b> and <b>--with-tcl-private-stubs=1</b> options. |
| 122 | |
| @@ -248,85 +249,20 @@ | |
| 248 | TCC += -Dsocketlen_t=int |
| 249 | TCC += -DSQLITE_MAX_MMAP_SIZE=0 |
| 250 | </pre></blockquote> |
| 251 | </ul> |
| 252 | |
| 253 | <h2>5.0 Building a Static Binary on Linux using Docker</h2> |
| 254 | |
| 255 | Building a static binary on Linux is not as straightforward as it |
| 256 | could be because the GNU C library requires that certain components be |
| 257 | dynamically loadable. That can be worked around by building against a |
| 258 | different C library, which is simplest to do by way of a container |
| 259 | environment like [https://www.docker.com/ | Docker]. |
| 260 | |
| 261 | The following instructions for building fossil using Docker |
| 262 | were adapted from [https://fossil-scm.org/forum/forumpost/5dd2d61e5f | forumpost/5dd2d61e5f]. |
| 263 | These instructions assume that docker is installed and that the user running |
| 264 | these instructions has permission to do so (i.e., they are <tt>root</tt> or |
| 265 | are a member of the <tt>docker</tt> group). |
| 266 | |
| 267 | First, create a file named <tt>Dockerfile</tt> with the following contents: |
| 268 | |
| 269 | <pre><code> |
| 270 | FROM alpine:edge |
| 271 | RUN apk update \ |
| 272 | && apk upgrade \ |
| 273 | && apk add --no-cache \ |
| 274 | curl gcc make tcl \ |
| 275 | musl-dev \ |
| 276 | openssl-dev zlib-dev \ |
| 277 | openssl-libs-static zlib-static \ |
| 278 | && curl \ |
| 279 | "https://fossil-scm.org/home/tarball/fossil-src.tar.gz?name=fossil-src&uuid=trunk" \ |
| 280 | -o fossil-src.tar.gz \ |
| 281 | && tar xf fossil-src.tar.gz \ |
| 282 | && cd fossil-src \ |
| 283 | && ./configure \ |
| 284 | --static \ |
| 285 | --disable-fusefs \ |
| 286 | --with-th1-docs \ |
| 287 | --with-th1-hooks \ |
| 288 | && make |
| 289 | </code></pre> |
| 290 | |
| 291 | Be sure to modify the <tt>configure</tt> flags, if desired. e.g., add <tt>--json</tt> |
| 292 | for JSON support. |
| 293 | |
| 294 | From the directory containing that file, build it with docker: |
| 295 | |
| 296 | <pre><code># docker build -t fossil_static .</code></pre> |
| 297 | |
| 298 | If you get permissions errors when running that as a non-root user, |
| 299 | be sure to add the user to the <tt>docker</tt> group before trying |
| 300 | again. |
| 301 | |
| 302 | That creates a docker image and builds a static fossil binary inside |
| 303 | it. That step will take several minutes or more, depending on the |
| 304 | speed of the build environment. |
| 305 | |
| 306 | Next, create a docker container to host the image we just created: |
| 307 | |
| 308 | <pre><code># docker create --name fossil fossil_static</code></pre> |
| 309 | |
| 310 | Then copy the fossil binary from that container: |
| 311 | |
| 312 | <pre><code># docker cp fossil:/fossil-src/fossil fossil</code></pre> |
| 313 | |
| 314 | The resulting binary will be <em>huge</em> because it is built with |
| 315 | debug info. To strip that information, reducing the size greatly: |
| 316 | |
| 317 | <pre><code># strip fossil</code></pre> |
| 318 | |
| 319 | To delete the Docker container and image (if desired), run: |
| 320 | |
| 321 | <pre><code># docker container rm fossil |
| 322 | # docker image ls |
| 323 | </code></pre> |
| 324 | |
| 325 | Note the IDs of the images named <tt>fossil_static</tt> and <tt>alpine</tt>, then: |
| 326 | |
| 327 | <pre><code>docker image rm THE_FOSSIL_ID THE_ALPINE_ID</code></pre> |
| 328 | |
| 329 | |
| 330 | <h2>6.0 Building on/for Android</h2> |
| 331 | |
| 332 | <h3>6.1 Cross-compiling from Linux</h3> |
| 333 |
| --- www/build.wiki | |
| +++ www/build.wiki | |
| @@ -79,11 +79,11 @@ | |
| 79 | <p>Unpack the ZIP or tarball you downloaded then |
| 80 | <b>cd</b> into the directory created.</p></li> |
| 81 | |
| 82 | <li><i>(Optional, Debian-compatible Linux only)</i> |
| 83 | Make sure you have all the necessary tools and libraries at hand by running: |
| 84 | <b>sudo apt install tcl-dev tk libssl-dev zlib1g-dev</b>. |
| 85 | |
| 86 | <li><i>(Optional, Unix only)</i> |
| 87 | Run <b>./configure</b> to construct a makefile. |
| 88 | |
| 89 | <ol type="a"> |
| @@ -112,11 +112,12 @@ | |
| 112 | <p>For more advanced use cases, see the [./ssl.wiki#openssl-bin|OpenSSL |
| 113 | discussion in the "TLS and Fossil" document].</p> |
| 114 | |
| 115 | <li><p> |
| 116 | To build a statically linked binary (suitable for use inside a chroot |
| 117 | jail) add the <b>--static</b> option. (See the [#docker | Docker section |
| 118 | below].) |
| 119 | |
| 120 | <li><p> |
| 121 | To enable the native [./th1.md#tclEval | Tcl integration feature] feature, |
| 122 | add the <b>--with-tcl=1</b> and <b>--with-tcl-private-stubs=1</b> options. |
| 123 | |
| @@ -248,85 +249,20 @@ | |
| 249 | TCC += -Dsocketlen_t=int |
| 250 | TCC += -DSQLITE_MAX_MMAP_SIZE=0 |
| 251 | </pre></blockquote> |
| 252 | </ul> |
| 253 | |
| 254 | |
| 255 | <h2 id="docker" name="oci">5.0 Building a Docker Container</h2> |
| 256 | |
| 257 | The information on building Fossil inside an |
| 258 | [https://opencontainers.org/ | OCI container] is now in |
| 259 | [./containers.md | a separate document]. |
| 260 | |
| 261 | This includes the instructions on using the OCI container as an |
| 262 | expedient intermediary for building a statically-linked Fossil binary on |
| 263 | modern Linux platforms, which otherwise make this difficult. |
| 264 | |
| 265 | |
| 266 | <h2>6.0 Building on/for Android</h2> |
| 267 | |
| 268 | <h3>6.1 Cross-compiling from Linux</h3> |
| 269 |
+24
-4
| --- www/cgi.wiki | ||
| +++ www/cgi.wiki | ||
| @@ -48,14 +48,16 @@ | ||
| 48 | 48 | |
| 49 | 49 | |
| 50 | 50 | <h2 id="directory">directory: <i>PATH</i></h2> |
| 51 | 51 | |
| 52 | 52 | The PATH is the name of a directory that contains one or more Fossil |
| 53 | -repository files having the suffix ".fossil". If this property is used | |
| 54 | -instead of [#repository|<b>repository:</b>], then the Fossil server is | |
| 55 | -able to serve all of the repositories in the directory. The specific | |
| 56 | -repository used is selected by a prefix on the PATH_INFO. | |
| 53 | +repository files having the suffix ".fossil". If this property is | |
| 54 | +used instead of [#repository|<b>repository:</b>], then the Fossil | |
| 55 | +server is able to serve all of the repositories in the directory. The | |
| 56 | +specific repository used is selected by a prefix on the PATH_INFO. See | |
| 57 | +the notes for the [#repolist|<b>repolist</b>] option regarding name | |
| 58 | +collisions between subdirectories and repository files. | |
| 57 | 59 | |
| 58 | 60 | |
| 59 | 61 | <h2 id="notfound">notfound: <i>URL</i></h2> |
| 60 | 62 | |
| 61 | 63 | If the [#directory|<b>directory:</b>] option is used and if the PATH_INFO |
| @@ -73,10 +75,28 @@ | ||
| 73 | 75 | The "skin" of the reply is determined by the first |
| 74 | 76 | repository in the list that has a non-zero |
| 75 | 77 | [/help?cmd=repolist-skin|repolist-skin] setting. |
| 76 | 78 | If no repository has such a non-zero repolist-skin setting, then |
| 77 | 79 | the repository list is generic HTML without any decoration. |
| 80 | + | |
| 81 | +The repolist-generated page recurses into subdirectories and will list | |
| 82 | +all <tt>*.fossil</tt> files found, with the following exceptions: | |
| 83 | + | |
| 84 | + * Filenames starting with a period are treated as "hidden" and skipped. | |
| 85 | + | |
| 86 | + * Subdirectory names which match the base name of a fossil file in | |
| 87 | + the same directory are listed in the resulting page but are not | |
| 88 | + hyperlinked because the links would be ambiguous and the | |
| 89 | + repositories in the subdirectories would be unreachable to | |
| 90 | + clients. For example, any repositories under subdirectory | |
| 91 | + <tt>XYZ</tt> are unreachable if <tt>XYZ.fossil</tt> exists in | |
| 92 | + the same directory as <tt>XYZ</tt>, noting that this particular | |
| 93 | + name check is case-insensitive. The entries for such | |
| 94 | + repositories are clearly marked in the repolist page's output to | |
| 95 | + make the user aware of the problem. To make them accessible, | |
| 96 | + move them into a directory which does not share a base name with | |
| 97 | + a repository file. | |
| 78 | 98 | |
| 79 | 99 | |
| 80 | 100 | <h2 id="localauth">localauth</h2> |
| 81 | 101 | |
| 82 | 102 | This is a Boolean property. |
| 83 | 103 |
| --- www/cgi.wiki | |
| +++ www/cgi.wiki | |
| @@ -48,14 +48,16 @@ | |
| 48 | |
| 49 | |
| 50 | <h2 id="directory">directory: <i>PATH</i></h2> |
| 51 | |
| 52 | The PATH is the name of a directory that contains one or more Fossil |
| 53 | repository files having the suffix ".fossil". If this property is used |
| 54 | instead of [#repository|<b>repository:</b>], then the Fossil server is |
| 55 | able to serve all of the repositories in the directory. The specific |
| 56 | repository used is selected by a prefix on the PATH_INFO. |
| 57 | |
| 58 | |
| 59 | <h2 id="notfound">notfound: <i>URL</i></h2> |
| 60 | |
| 61 | If the [#directory|<b>directory:</b>] option is used and if the PATH_INFO |
| @@ -73,10 +75,28 @@ | |
| 73 | The "skin" of the reply is determined by the first |
| 74 | repository in the list that has a non-zero |
| 75 | [/help?cmd=repolist-skin|repolist-skin] setting. |
| 76 | If no repository has such a non-zero repolist-skin setting, then |
| 77 | the repository list is generic HTML without any decoration. |
| 78 | |
| 79 | |
| 80 | <h2 id="localauth">localauth</h2> |
| 81 | |
| 82 | This is a Boolean property. |
| 83 |
| --- www/cgi.wiki | |
| +++ www/cgi.wiki | |
| @@ -48,14 +48,16 @@ | |
| 48 | |
| 49 | |
| 50 | <h2 id="directory">directory: <i>PATH</i></h2> |
| 51 | |
| 52 | The PATH is the name of a directory that contains one or more Fossil |
| 53 | repository files having the suffix ".fossil". If this property is |
| 54 | used instead of [#repository|<b>repository:</b>], then the Fossil |
| 55 | server is able to serve all of the repositories in the directory. The |
| 56 | specific repository used is selected by a prefix on the PATH_INFO. See |
| 57 | the notes for the [#repolist|<b>repolist</b>] option regarding name |
| 58 | collisions between subdirectories and repository files. |
| 59 | |
| 60 | |
| 61 | <h2 id="notfound">notfound: <i>URL</i></h2> |
| 62 | |
| 63 | If the [#directory|<b>directory:</b>] option is used and if the PATH_INFO |
| @@ -73,10 +75,28 @@ | |
| 75 | The "skin" of the reply is determined by the first |
| 76 | repository in the list that has a non-zero |
| 77 | [/help?cmd=repolist-skin|repolist-skin] setting. |
| 78 | If no repository has such a non-zero repolist-skin setting, then |
| 79 | the repository list is generic HTML without any decoration. |
| 80 | |
| 81 | The repolist-generated page recurses into subdirectories and will list |
| 82 | all <tt>*.fossil</tt> files found, with the following exceptions: |
| 83 | |
| 84 | * Filenames starting with a period are treated as "hidden" and skipped. |
| 85 | |
| 86 | * Subdirectory names which match the base name of a fossil file in |
| 87 | the same directory are listed in the resulting page but are not |
| 88 | hyperlinked because the links would be ambiguous and the |
| 89 | repositories in the subdirectories would be unreachable to |
| 90 | clients. For example, any repositories under subdirectory |
| 91 | <tt>XYZ</tt> are unreachable if <tt>XYZ.fossil</tt> exists in |
| 92 | the same directory as <tt>XYZ</tt>, noting that this particular |
| 93 | name check is case-insensitive. The entries for such |
| 94 | repositories are clearly marked in the repolist page's output to |
| 95 | make the user aware of the problem. To make them accessible, |
| 96 | move them into a directory which does not share a base name with |
| 97 | a repository file. |
| 98 | |
| 99 | |
| 100 | <h2 id="localauth">localauth</h2> |
| 101 | |
| 102 | This is a Boolean property. |
| 103 |
+17
-2
| --- www/changes.wiki | ||
| +++ www/changes.wiki | ||
| @@ -1,8 +1,18 @@ | ||
| 1 | 1 | <title>Change Log</title> |
| 2 | 2 | |
| 3 | -<h2 id='v2_19'>Changes for version 2.19 (pending)</h2> | |
| 3 | +<h2 id='v2_20'>Changes for version 2.20 (pending)</h2> | |
| 4 | + * Added the [/help?cmd=chat-timeline-user|chat-timeline-user setting]. If | |
| 5 | + it is not an empty string, then any changes that would appear on the timeline | |
| 6 | + are announced in [./chat.md|the chat room]. | |
| 7 | + * The /unsubscribe page now requests comformation. [./alerts.md|Email notifications] | |
| 8 | + now contain only an "Unsubscribe" link, and not a link to subscription management. | |
| 9 | + * More elements of the /info page are now inside of an accordion. | |
| 10 | + * Replace the <tt>--dryrun</tt> flag with <tt>--dry-run</tt> in all | |
| 11 | + commands which still used the former name, for consistency. | |
| 12 | + | |
| 13 | +<h2 id='v2_19'>Changes for version 2.19 (2022-07-21)</h2> | |
| 4 | 14 | * On file listing pages, sort filenames using the "uintnocase" collating |
| 5 | 15 | sequence, so that filenames that contains embedded integers sort in |
| 6 | 16 | numeric order even if they contain a different number of digits. |
| 7 | 17 | (Example: "fossil_80_..." comes before "fossil_100.png" in the |
| 8 | 18 | [/dir?ci=92fd091703a28c07&name=skins/blitz|/skins/blitz] directory listing.) |
| @@ -31,10 +41,15 @@ | ||
| 31 | 41 | * Reimplemented the [/pikchrshow] app to use a WebAssembly build of |
| 32 | 42 | pikchr so that it can render pikchrs on the client instead of requiring |
| 33 | 43 | a server round-trip. |
| 34 | 44 | * Add the [/help?cmd=email-listid|email-listid setting]. If set, it is |
| 35 | 45 | used as the List-ID header for all outbound notification emails. |
| 46 | + * Add the "--branch" option to the "[/help?cmd=timeline|timeline]" command | |
| 47 | + to restrict the displayed items to a specific branch. | |
| 48 | + * Add the "--versions" option to "[/help?cmd=diff|fossil diff]" | |
| 49 | + to display details about the compared versions into the patch header. | |
| 50 | + * Numerous other minor enhancements. | |
| 36 | 51 | |
| 37 | 52 | <h2 id='v2_18'>Changes for version 2.18 (2022-02-23)</h2> |
| 38 | 53 | * Added support for [./ssl-server.md|SSL/TLS server mode] for commands |
| 39 | 54 | like "[/help?cmd=server|fossil server]" and "[/help?cmd=http|fossil http]" |
| 40 | 55 | * The new [/help?cmd=cherry-pick|cherry-pick command] is an alias for |
| @@ -1725,11 +1740,11 @@ | ||
| 1725 | 1740 | * Fix the tarball generator to work with very log pathnames |
| 1726 | 1741 | |
| 1727 | 1742 | <h2>Changes For Version 1.18 (2011-07-14)</h2> |
| 1728 | 1743 | * Added this Change Log |
| 1729 | 1744 | * Added sequential version numbering |
| 1730 | - * Added a optional configure script - the Makefile still works for most | |
| 1745 | + * Added an optional configure script - the Makefile still works for most | |
| 1731 | 1746 | systems. |
| 1732 | 1747 | * Improvements to the "annotate" algorithm: only search primary |
| 1733 | 1748 | ancestors and ignore branches. |
| 1734 | 1749 | * Update the "scrub" command to remove traces of login-groups and |
| 1735 | 1750 | subrepositories. |
| 1736 | 1751 |
| --- www/changes.wiki | |
| +++ www/changes.wiki | |
| @@ -1,8 +1,18 @@ | |
| 1 | <title>Change Log</title> |
| 2 | |
| 3 | <h2 id='v2_19'>Changes for version 2.19 (pending)</h2> |
| 4 | * On file listing pages, sort filenames using the "uintnocase" collating |
| 5 | sequence, so that filenames that contains embedded integers sort in |
| 6 | numeric order even if they contain a different number of digits. |
| 7 | (Example: "fossil_80_..." comes before "fossil_100.png" in the |
| 8 | [/dir?ci=92fd091703a28c07&name=skins/blitz|/skins/blitz] directory listing.) |
| @@ -31,10 +41,15 @@ | |
| 31 | * Reimplemented the [/pikchrshow] app to use a WebAssembly build of |
| 32 | pikchr so that it can render pikchrs on the client instead of requiring |
| 33 | a server round-trip. |
| 34 | * Add the [/help?cmd=email-listid|email-listid setting]. If set, it is |
| 35 | used as the List-ID header for all outbound notification emails. |
| 36 | |
| 37 | <h2 id='v2_18'>Changes for version 2.18 (2022-02-23)</h2> |
| 38 | * Added support for [./ssl-server.md|SSL/TLS server mode] for commands |
| 39 | like "[/help?cmd=server|fossil server]" and "[/help?cmd=http|fossil http]" |
| 40 | * The new [/help?cmd=cherry-pick|cherry-pick command] is an alias for |
| @@ -1725,11 +1740,11 @@ | |
| 1725 | * Fix the tarball generator to work with very log pathnames |
| 1726 | |
| 1727 | <h2>Changes For Version 1.18 (2011-07-14)</h2> |
| 1728 | * Added this Change Log |
| 1729 | * Added sequential version numbering |
| 1730 | * Added a optional configure script - the Makefile still works for most |
| 1731 | systems. |
| 1732 | * Improvements to the "annotate" algorithm: only search primary |
| 1733 | ancestors and ignore branches. |
| 1734 | * Update the "scrub" command to remove traces of login-groups and |
| 1735 | subrepositories. |
| 1736 |
| --- www/changes.wiki | |
| +++ www/changes.wiki | |
| @@ -1,8 +1,18 @@ | |
| 1 | <title>Change Log</title> |
| 2 | |
| 3 | <h2 id='v2_20'>Changes for version 2.20 (pending)</h2> |
| 4 | * Added the [/help?cmd=chat-timeline-user|chat-timeline-user setting]. If |
| 5 | it is not an empty string, then any changes that would appear on the timeline |
| 6 | are announced in [./chat.md|the chat room]. |
| 7 | * The /unsubscribe page now requests comformation. [./alerts.md|Email notifications] |
| 8 | now contain only an "Unsubscribe" link, and not a link to subscription management. |
| 9 | * More elements of the /info page are now inside of an accordion. |
| 10 | * Replace the <tt>--dryrun</tt> flag with <tt>--dry-run</tt> in all |
| 11 | commands which still used the former name, for consistency. |
| 12 | |
| 13 | <h2 id='v2_19'>Changes for version 2.19 (2022-07-21)</h2> |
| 14 | * On file listing pages, sort filenames using the "uintnocase" collating |
| 15 | sequence, so that filenames that contains embedded integers sort in |
| 16 | numeric order even if they contain a different number of digits. |
| 17 | (Example: "fossil_80_..." comes before "fossil_100.png" in the |
| 18 | [/dir?ci=92fd091703a28c07&name=skins/blitz|/skins/blitz] directory listing.) |
| @@ -31,10 +41,15 @@ | |
| 41 | * Reimplemented the [/pikchrshow] app to use a WebAssembly build of |
| 42 | pikchr so that it can render pikchrs on the client instead of requiring |
| 43 | a server round-trip. |
| 44 | * Add the [/help?cmd=email-listid|email-listid setting]. If set, it is |
| 45 | used as the List-ID header for all outbound notification emails. |
| 46 | * Add the "--branch" option to the "[/help?cmd=timeline|timeline]" command |
| 47 | to restrict the displayed items to a specific branch. |
| 48 | * Add the "--versions" option to "[/help?cmd=diff|fossil diff]" |
| 49 | to display details about the compared versions into the patch header. |
| 50 | * Numerous other minor enhancements. |
| 51 | |
| 52 | <h2 id='v2_18'>Changes for version 2.18 (2022-02-23)</h2> |
| 53 | * Added support for [./ssl-server.md|SSL/TLS server mode] for commands |
| 54 | like "[/help?cmd=server|fossil server]" and "[/help?cmd=http|fossil http]" |
| 55 | * The new [/help?cmd=cherry-pick|cherry-pick command] is an alias for |
| @@ -1725,11 +1740,11 @@ | |
| 1740 | * Fix the tarball generator to work with very log pathnames |
| 1741 | |
| 1742 | <h2>Changes For Version 1.18 (2011-07-14)</h2> |
| 1743 | * Added this Change Log |
| 1744 | * Added sequential version numbering |
| 1745 | * Added an optional configure script - the Makefile still works for most |
| 1746 | systems. |
| 1747 | * Improvements to the "annotate" algorithm: only search primary |
| 1748 | ancestors and ignore branches. |
| 1749 | * Update the "scrub" command to remove traces of login-groups and |
| 1750 | subrepositories. |
| 1751 |
+12
| --- www/chat.md | ||
| +++ www/chat.md | ||
| @@ -153,10 +153,22 @@ | ||
| 153 | 153 | --message 'MESSAGE TEXT' --file file-to-attach.txt |
| 154 | 154 | ~~~~ |
| 155 | 155 | |
| 156 | 156 | Substitute the appropriate project URL, robot account |
| 157 | 157 | name and password, message text and file attachment, of course. |
| 158 | + | |
| 159 | +### <a id="chat-robot"></a> Chat Messages For Timeline Events | |
| 160 | + | |
| 161 | +If the [chat-timeline-user setting](/help?cmd=chat-timeline-user) is not a | |
| 162 | +empty string, then any change to the repository that would normally result | |
| 163 | +in a new timeline entry is announced in the chatroom. The announcement | |
| 164 | +appears to come from a user whose name is given by the chat-timeline-user | |
| 165 | +setting. | |
| 166 | + | |
| 167 | +This mechanism is similar to [email notification](./alerts.md) except that | |
| 168 | +the notification is sent via chat instead of via email. | |
| 169 | + | |
| 158 | 170 | |
| 159 | 171 | ## Implementation Details |
| 160 | 172 | |
| 161 | 173 | *You do not need to understand how Fossil chat works in order to use it. |
| 162 | 174 | But many developers prefer to know how their tools work. |
| 163 | 175 | |
| 164 | 176 | ADDED www/containers.md |
| --- www/chat.md | |
| +++ www/chat.md | |
| @@ -153,10 +153,22 @@ | |
| 153 | --message 'MESSAGE TEXT' --file file-to-attach.txt |
| 154 | ~~~~ |
| 155 | |
| 156 | Substitute the appropriate project URL, robot account |
| 157 | name and password, message text and file attachment, of course. |
| 158 | |
| 159 | ## Implementation Details |
| 160 | |
| 161 | *You do not need to understand how Fossil chat works in order to use it. |
| 162 | But many developers prefer to know how their tools work. |
| 163 | |
| 164 | DDED www/containers.md |
| --- www/chat.md | |
| +++ www/chat.md | |
| @@ -153,10 +153,22 @@ | |
| 153 | --message 'MESSAGE TEXT' --file file-to-attach.txt |
| 154 | ~~~~ |
| 155 | |
| 156 | Substitute the appropriate project URL, robot account |
| 157 | name and password, message text and file attachment, of course. |
| 158 | |
| 159 | ### <a id="chat-robot"></a> Chat Messages For Timeline Events |
| 160 | |
| 161 | If the [chat-timeline-user setting](/help?cmd=chat-timeline-user) is not a |
| 162 | empty string, then any change to the repository that would normally result |
| 163 | in a new timeline entry is announced in the chatroom. The announcement |
| 164 | appears to come from a user whose name is given by the chat-timeline-user |
| 165 | setting. |
| 166 | |
| 167 | This mechanism is similar to [email notification](./alerts.md) except that |
| 168 | the notification is sent via chat instead of via email. |
| 169 | |
| 170 | |
| 171 | ## Implementation Details |
| 172 | |
| 173 | *You do not need to understand how Fossil chat works in order to use it. |
| 174 | But many developers prefer to know how their tools work. |
| 175 | |
| 176 | DDED www/containers.md |
+795
| --- a/www/containers.md | ||
| +++ b/www/containers.md | ||
| @@ -0,0 +1,795 @@ | ||
| 1 | +surprisingly difficulte remains the same as in the distroless Python example | |
| 2 | +because even AlpineN@2yP,1R: way we set up core Linux | |
| 3 | +directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot? | |
| 4 | + | |
| 5 | +A potentially surprising feature of this container is that it runs | |
| 6 | +Fossil as root. Sin | |
| 7 | +to kick in, and a Docker container is a type of über-jail already, you | |
| 8 | +may be wondering why we bother. Instead, why not either: | |
| 9 | + | |
| 10 | +* run f][whatso it starts Fossil as | |
| 11 | + that user instead | |
| 12 | + | |
| 13 | +The reason is, although this container is quite stripped-down by today’s | |
| 14 | +standards, it’s based on the [surprising(This author made a | |
| 15 | + that were less | |
| 16 | +powerful than this container.) If someone ever figured out how to make a | |
| 17 | +Fossil binary execute arbitrary commands on the host or to open up a | |
| 18 | +remote shell, the power available to them at that point would make it | |
| 19 | +likely that they’d be able to island-hop from there into the rest of | |
| 20 | +your network. That power is there for you as the system administrator | |
| 21 | +alone, to let you inspectquire them. | |
| 22 | + Altour build | |
| 23 | + process leaves out all the BusyBox utilities that require them. | |
| 24 | + Although that set includes common tools like `ping`, we It also strips | |
| 25 | +out all but the default and darkmode skins to save executable space foresee no | |
| 26 | + use that or any of these other elided utilities | |
| 27 | + — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get | |
| 28 | +fetched in the build step. To get the latest-and-greatest of everything, | |
| 29 | +you could say\ | |
| 30 | + trunk \ | |
| 31 | + --build-arg BBXVER=master . | |
| 32 | +``` | |
| 33 | + | |
| 34 | +(But don’t, for reasons we will getwR ship was created with and | |
| 35 | +tested R | |
| 36 | +ific stable release, tharun`”.) ration | |
| 37 | +settings iput a line like this into the first stage: | |
| 38 | + | |
| 39 | +``` | |
| 40 | + COPY containers/os-releaseR/etc/os-release | |
| 41 | +``` | |
| 42 | + | |
| 43 | +That will let you produce a `systemd` “m” This is generally better for | |
| 44 | +security, but there’s something you need to be aware of: each user has | |
| 45 | +their own local. Let’s say you’re following, so even though it did build the image, you | |
| 46 | +can’t create the actual container from that image since that needs to be | |
| 47 | +done as root. | |
| 48 | + | |
| 49 | +The simple way to deal with this is to bounce the container through a | |
| 50 | +registry that both users can see, such as [Docker | |
| 51 | +Hub](https://hub.docker.tag fossil:latest mydockername/fossil:latest | |
| 52 | + $ podman image push mydockername/fossil:latest | |
| 53 | +``` | |
| 54 | + | |
| 55 | +That will push the image up to your accound | |
| 56 | + process leaves out all the BusyBox utilities that require them. | |
| 57 | + Although that set includes common tools like `ping`, we foresee no | |
| 58 | + use that or any of these other elided utilities | |
| 59 | + — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get | |
| 60 | +fetched in the build step. To get the latest-and-greatest of everything, | |
| 61 | +you could say\ | |
| 62 | + trunk \ | |
| 63 | + --build-arg BBXVER=master . | |
| 64 | +``` | |
| 65 | + | |
| 66 | +(But don’t, for reasons we will getwe ship was created with and | |
| 67 | +tested against a specific stable release, that’s the version we pull by | |
| 68 | +default. It does try to merge the defaults for any new configuration | |
| 69 | +settings into the stock set, but since it’s possible this will fail, we | |
| 70 | +don’t blindly update the BusyBox version merely because a new release | |
| 71 | +came out. Someone needs to get around to vetting it against our stock | |
| 72 | +configuration first. | |
| 73 | + | |
| 74 | +As for Fossil, it defaults to fetching the same version as the checkout | |
| 75 | +you’re running the build command from, based on checkin ID. You could | |
| 76 | +use this to get a release build, for instance\ | |
| 77 | + our build | |
| 78 | + process leaves out all the BusyBox utilities that require them. | |
| 79 | + Although that set includes common tools like `ping`, we foresee no | |
| 80 | + use that or any of these other elided utilities | |
| 81 | + — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get | |
| 82 | +fetched in the build step. To get the latest-and-greatest of everything, | |
| 83 | +you could say\ | |
| 84 | + trunk \ | |
| 85 | + it lets you build on a local system that might be a lot faster | |
| 86 | +than your remote one, as when the remote is a small VPS. Even with the | |
| 87 | +overhead of schlepping container images across the Internet, it can be a | |
| 88 | +net win in terms of build time. | |
| 89 | + | |
| 90 | +Another oddity compared to DockerY@760,6: same | |
| 91 | +h@76d,M:. The changes distill3WC@78M,3SS6XH;One way to can remove the installation of `busybox-static` in STAGE 1 since | |
| 92 | +Alpine is already based on BusyBox.(^We can’t do “`FROM busybox`” since | |
| 93 | +we need `apk` in this new second stage. Although this means we end up | |
| 94 | +with back-to-back Alpine stages, it isn’t redundant; the second one | |
| 95 | +starts fresh, allowing us to copy in only what we absolutely need from | |
| 96 | +AWKbecausewe haveRelative to, the change from “`alpmeans we have no BusyBox environment to execute | |
| 97 | +the `RUN` command with, so we have to copy the `busybox.static` binary | |
| 98 | +in from STAGE 1 and install | |
| 99 | +the stock does.(^This is the main reason we change `USER` | |
| 100 | +temporarily to `root` here.) There are a few other steps required to | |
| 101 | +avoid causing a conflict between our previously bare-bonerename | |
| 102 | +il binary executl popular, we have | |
| 103 | +that ijust a suitable | |
| 104 | +. Because this will conflict with the | |
| 105 | +bare-bones “`os`” layer we create, thePython the `RUN` | |
| 106 | + in from | |
| 107 | + the stock | |
| 108 | + temporarily to | |
| 109 | +`root` here.) The compensating bonus is huge: we don’t leave a package | |
| 110 | + image, waiting to be abusedhow much the über-jail nature of | |
| 111 | +c run yous can save you when | |
| 112 | +like this. For instance, you might have enabled Fossil’s [risky TH1 docs | |
| 113 | +feature][th1docrisk] along with the Tcl integration feature, which | |
| 114 | +effectively gives anyone with check-in rights on your repo the ability | |
| 115 | +to run arbitrary Tcl code on the host when that document is rendered. | |
| 116 | +The container layer should stop that script | |
| 117 | +on the host | |
| 118 | +namespace, but it *can* still make network connect, | |
| 119 | +so there is at least a *hope* that WAL will work properly across that | |
| 120 | +boundary. The success of the scheme depends on the `mmap()` and shared | |
| 121 | +memory system calls being coordinated properly by the OS kernel the two | |
| 122 | +worlde network cAt some point, someone should perform tests in the hopes of *failing* to | |
| 123 | +create database corruption in this scenario. | |
| 124 | + | |
| 125 | +Why the tortured grammar? Because you cannot prove a negative, being in | |
| 126 | +this case “SQLite will not corrupt the database in WAL mode if there’s a | |
| 127 | +container barrier in the way.” All you can prove is that a given test | |
| 128 | +didn’t cause corruption. With enough tests of sufficient power, you can | |
| 129 | +begin to make definitive statements, but even then, science is always | |
| 130 | +provisional, awaiting a single disproving with the Tcl ints give the sysadmin freedom to impose barriers between | |
| 131 | +the two worlds, so even if you convince yourself that WAL mode is safe | |
| 132 | +in a given setup, it’s possible to configure it to fail. As if that | |
| 133 | +weren’t enough, differentg with the Tcl ints have different defaults, | |
| 134 | +including details like whether shared memory is truly shared between | |
| 135 | +the host and its containers. | |
| 136 | + | |
| 137 | +Until someone gets around to establishing this ground truth and scoping | |
| 138 | +its applicable range` with: | |
| 139 | + | |
| 140 | + FROM grc.io/distroless/python3-debian11 | |
| 141 | + | |
| 142 | +Another case | |
| 143 | + | |
| 144 | + | |
| 145 | +Method 2to | |
| 146 | + bind-mounted | |
| 147 | + `netstat`, `tYou our build | |
| 148 | + process leaves out all the BusyBox utilities that require them. | |
| 149 | + Although that set includes common tools like `ping`, we | |
| 150 | + | |
| 151 | + R@2VU,5: RUNN@2bU,1Q: | |
| 152 | + | |
| 153 | +Everything else remains the same as in the distroless Python example | |
| 154 | +because even AlpineN@2yP,1R: way we set up core Linux | |
| 155 | +directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distroless7Xz@3Z4,qTTBs;exec -it -u fossil fossil sh | |
| 156 | +```s to get a release build, for instance\ | |
| 157 | + alternativeAlthough Podman [bills itself][whatis] as a drop-in replacement for the | |
| 158 | +`docker` command and everything that sits behind it, some of the tool’s | |
| 159 | +desis run, as compared to | |
| 160 | +using Docker. | |
| 161 | + | |
| 162 | +The most important of these is that, by default, Podman wants to build | |
| 163 | +and run your container “[rootless].” This is generally better for | |
| 164 | +security, but there’s something you need to be aware of: each user has | |
| 165 | +their own local. Let’s say you’re following, so even though it did build the image, you | |
| 166 | +can’t create the actual container from that image since that needs to be | |
| 167 | +done as root. | |
| 168 | + | |
| 169 | +The simple way to deal with this is to bounce the container through a | |
| 170 | +registry that both users can see, such as [Docker | |
| 171 | +Hub](https://hub.docker.tag fossil:latest mydockername/fossil:latest | |
| 172 | + $ podman image push mydockername/fossil:latest | |
| 173 | +``` | |
| 174 | + | |
| 175 | +That will push the image up to your accound | |
| 176 | + process leaves out all the BusyBox utilities that require them. | |
| 177 | + Although that set includes common tools like `ping`, we foresee no | |
| 178 | + use that or any of these other elided utilities | |
| 179 | + — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get | |
| 180 | +fetched in the build step. To get the latest-and-greatest of everything, | |
| 181 | +you could say\ | |
| 182 | + trunk \ | |
| 183 | + --build-arg BBXVER=master . | |
| 184 | +``` | |
| 185 | + | |
| 186 | +(But don’t, for reasons we will getwe ship was created with and | |
| 187 | +tested against a specific stable release, that’s the version we pull by | |
| 188 | +default. It does try to merge the defaults for any new configuration | |
| 189 | +settings into the stock set, but since it’s possible this will fail, we | |
| 190 | +don’t blindly update the BusyBox version merely because a new release | |
| 191 | +came out. Someone needs to get around to vetting it against our stock | |
| 192 | +configuration first. | |
| 193 | + | |
| 194 | +As for Fossil, it defaults to fetching the same version as the checkout | |
| 195 | +you’re running the build command from, based on checkin ID. You could | |
| 196 | +use this to get a release build, for instance\ | |
| 197 | + our build | |
| 198 | + process leaves out all the BusyBox utilities that require them. | |
| 199 | + Although that set includes common tools like `ping`, we foresee no | |
| 200 | + use that or any of these other elijail��s [risky TH1 docsh user has | |
| 201 | +their own local. Let’sjailthe image, you | |
| 202 | +can’t create the actual container from that image since that needs to be | |
| 203 | +done as root. | |
| 204 | + | |
| 205 | +The simple way to deal with this is to bounce the container through a | |
| 206 | +registry that both users can see, such as [Docker | |
| 207 | +Hub](https://hub.docker.tag fossil:latest mydockername/fossil:latest | |
| 208 | + $ podman image push mydockername/fossil:latest | |
| 209 | +``` | |
| 210 | + | |
| 211 | +That will push the image up to your accound | |
| 212 | + process leaves out all the BusyBox utilities that require them. | |
| 213 | + Although that set includes common tools like `ping`, we foresee no | |
| 214 | + use that or any of these other elided utilities | |
| 215 | + — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get | |
| 216 | +fetched in the build step. To get the latest-and-greatest of everything, | |
| 217 | +you could say\ | |
| 218 | + trunk \ | |
| 219 | + --build-arg BBXVER=master . | |
| 220 | +``` | |
| 221 | + | |
| 222 | +(But don’t, for reasons we will getwe ship was created with and | |
| 223 | +tested against a specific stable release, that’s the version we pull by | |
| 224 | +default. It does try to merge the defaults for any new configuration | |
| 225 | +settings into the stock set, but since it’s possible this will fail, we | |
| 226 | +don’t blindly update the BusyBox version merely because a new release | |
| 227 | +came out. Someone needs to get around to vetting it against our stock | |
| 228 | +configuration first. | |
| 229 | + | |
| 230 | +As for Fossil, it defaults to fetching the same version as the checkout | |
| 231 | +you’re running the build command from, based on checkin ID. You could | |
| 232 | +use this to get a release build, for instance\ | |
| 233 | + our build | |
| 234 | + process leaves out all the BusyBox utilities that require them. | |
| 235 | + Although that set includes common tools like `ping`, we foresee no | |
| 236 | + use that or any of these other elided utilities | |
| 237 | + — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get | |
| 238 | +fetched in the build step. To get the latest-and-greatest of everything, | |
| 239 | +you could say\ | |
| 240 | + trunk \ | |
| 241 | + it lets you build on a local system that might be a lot faster | |
| 242 | +than your remote one, as when the remote is a small VPjailAlthough that set includes common tools like `ping`, we foresee no | |
| 243 | + use that or any of these other elided utilities | |
| 244 | + — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get | |
| 245 | +fetched in the build step. To get the latest-and-greatest of everything, | |
| 246 | +you could say\ | |
| 247 | + trunk \ | |
| 248 | + --build-arg BBXVER=master . | |
| 249 | +``` | |
| 250 | + | |
| 251 | +(But don’t, for reasons we will getwe ship was created with and | |
| 252 | +tested against a specific stable release, that’s the version we pull by | |
| 253 | +default. It does try to merge the defaults for any new configuration | |
| 254 | +settings into the stock set, but since it’s possible this will fail, we | |
| 255 | +don’t blindly update the BusyBox version merely because a new release | |
| 256 | +came out. Someone needs to get around to vetting it against our stock | |
| 257 | +configuration first. | |
| 258 | + | |
| 259 | +As for Fossil, it defaults to fetching the same version as the checkout | |
| 260 | +you’re running the build command from, based on checkin ID. You could | |
| 261 | +use this to get a release build, for instance\ | |
| 262 | + alternativeAlthough Podman [bills itself][whatis] as a drop-in replacement for the | |
| 263 | +`docker` command and everything that sits behind it, some of the tool’s | |
| 264 | +desis run, as compared to | |
| 265 | +using Docker. | |
| 266 | + | |
| 267 | +The most important of thesour ��s [risky TH1 docs | |
| 268 | +feature][th1docrisk] along with the Tcl integration feature, which | |
| 269 | +effectively gives anyone with check-in rights on your repo the ability | |
| 270 | +to run arbitrary Tcl code on the host when that document is rendered. | |
| 271 | +The container layer should stop that script | |
| 272 | +on the host | |
| 273 | +namespace, but it *can* still make network connections, modify the repo | |
| 274 | +, and who knows what else//fossil-scm.org/forum/forumpost/42e0c165447Vw@3X~,25L~sx;adviceYou could inject that into | |
| 275 | +one of s. Because this will | |
| 276 | + | |
| 277 | +complicated. Essentially, you replace everything in STAGE 2 and 3 inside | |
| 278 | +the `Dockerfile` with: | |
| 279 | + | |
| 280 | + FROM grc.io/distroless/python3-debian11 | |
| 281 | + | |
| 282 | +Another case | |
| 283 | + | |
| 284 | + | |
| 285 | +Method 2to | |
| 286 | + bind-mounted | |
| 287 | + `netstat`, `tYou our build | |
| 288 | + process leaves out all the BusyBox utilities that require them. | |
| 289 | + Although that set includes common tools like `ping`, we | |
| 290 | + | |
| 291 | + R@2VU,5: RUNN@2bU,1Q: | |
| 292 | + | |
| 293 | +Everything else remains the same as in the distroless Python example | |
| 294 | +because even AlpineN@2yP,1R: way we set up core Linux | |
| 295 | +directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distroless7Xz@3Z4,qTTBs; bonus is huge: we don’t leave a package | |
| 296 | + image, waiting to be abusedhow much the über-jail nature of | |
| 297 | +c run yous can save you when | |
| 298 | +like this. For instance, you might have enabled Fossil’s [risky TH1 docs | |
| 299 | +feature][th1docrisk] along with the Tcl integration feature, which | |
| 300 | +effectively gives anyone with check-in rights on your repo the ability | |
| 301 | +to run arbitrary Tcl code on the hThe first configurationtainer is that it runs | |
| 302 | +Fossil as root. Sin | |
| 303 | +to kick in, and a Docker container is a type of über-jail already, you | |
| 304 | +may be wondering why we bother. Instead, why not either: | |
| 305 | + | |
| 306 | +* run nojail` to skip the internal chroot; or | |
| 307 | +* set “`USER fossil`” inbills itself][whatso it starts Fossil as | |
| 308 | + that user instead | |
| 309 | + | |
| 310 | +The reason is, although this container is quite stripped-down by today’s | |
| 311 | +standards, it’s based on the [surprising(This author made a | |
| 312 | + that were less | |
| 313 | +powerful than this container.) If someone ever figured out how to make a | |
| 314 | +Fossil binary execute arbitrary commands on the host or to open up a | |
| 315 | +remote shell, the power available to them at that point would make it | |
| 316 | +likely that they’d be able to island-hop from there into the rest of | |
| 317 | +your network. That power is there for you as the system administrator | |
| 318 | +alone, to let you inspectinto | |
| 319 | +a “machine,” as `systemd` calls it. The easiest method ishese other elided utilitiile/Dockerfile)we ship was created with and | |
| 320 | +tested against a specific stable release, that’s the version we pull by | |
| 321 | +default. It does try to merge theour build | |
| 322 | + process leave`tYou our build | |
| 323 | + process leaves out all the BusyBox utilities that require them. | |
| 324 | + Although that set includes common tools like `ping`, we | |
| 325 | + | |
| 326 | + R@2VU,5: RUNN@2bU,1Q: | |
| 327 | + | |
| 328 | +Everything else remains the same as in the distroless Python example | |
| 329 | +because even AlpineN@2yP,1R: way we set up core Linux | |
| 330 | +directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot? | |
| 331 | + | |
| 332 | +A potentially surprising feature of this container is that it runs | |
| 333 | +Fossil as root. Sin | |
| 334 | +to kick in, and a Docker container is a type of über-jail already, you | |
| 335 | +may be wondering why we bother. Instead, why not either: | |
| 336 | + | |
| 337 | +* run nojail` to skip the internal chroot; or | |
| 338 | +* set “`USER fossil`” inbills itself][whatso it starts Fossil as | |
| 339 | + that user instead | |
| 340 | + | |
| 341 | +The reason is, although this container is quite stripped-down by today’s | |
| 342 | +standards, it’s based on the [surprising(This author made a | |
| 343 | + that were less | |
| 344 | +powerful than this container.) If someone ever figured out how to make a | |
| 345 | +Fossil binary execute arbitrary commands on the host or to open up a | |
| 346 | +remote shell, the power available to them at that point would make it | |
| 347 | +likely that they’d be able to island-hop from there into the rest of | |
| 348 | +your network. That power is thercess leaves out alainst a specific stable release, that’s the version we pull by | |
| 349 | +default. It does try to merge the defaults for any new configuration | |
| 350 | +settiy new configuration | |
| 351 | +settings i:noja | |
| 352 | + | |
| 353 | +A potentially surprissurprisingly difficulte remains the same as in the distroless Python example | |
| 354 | +because even AlpineN@2yP,1R: way we set up core Linux | |
| 355 | +directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot? | |
| 356 | + | |
| 357 | +A potentially surprising feature of this container is that it runs | |
| 358 | +Fossil as root. Sin | |
| 359 | +to kick in, and a Docker container is a type of über-jail already, you | |
| 360 | +may be wondering why we bother. Instead, why not either: | |
| 361 | + | |
| 362 | +* run f][whatso it starts Fossil as | |
| 363 | + that user instead | |
| 364 | + | |
| 365 | +The reason is, although this container is quite stripped-down by today’s | |
| 366 | +standards, it’s base4 on the [surprising(This auth and packed with [UPX].) | |
| 367 | + | |
| 368 | +[U//upx.github.io/6gF@488,2Ne3im;ofetgly difficulte remains the same as in the distroless Python example | |
| 369 | +because even AlpineN@2yP,1R: way we set up core Linux | |
| 370 | +directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot? | |
| 371 | + | |
| 372 | +A potentially surprisinculte ripped-down by today’s | |
| 373 | +standards, it’s based on the [surprising(This author made a | |
| 374 | + that were less | |
| 375 | +powerful than this container.) If someone ever figured out how to make a | |
| 376 | +Fossil binary execute arbitrary commands on the host or to open up a | |
| 377 | +remote shell, the power available to them at that point would make it | |
| 378 | +likely that they’d be able to island-hop from there into the rest of | |
| 379 | +your network. That power is there for you as the system administrator | |
| 380 | +alone, to let you inspectquire them. | |
| 381 | + Altour build | |
| 382 | + process leaves out all the BusyBox utilities that require them. | |
| 383 | + Although that set includes common tools like `ping`, we foresee no | |
| 384 | + use that or any of these other elided utilities | |
| 385 | + — `ether-wake`, `netstat`, `tYou can override The most | |
| 386 | +common reason to override this is to get a release versionns of Fossil and Bstep. To get the latest-19 . | |
| 387 | +``` | |
| 388 | + | |
| 389 | +It’s bestguration | |
| 390 | +settings iput a line lik rather thanversion we pull by | |
| 391 | +default. It dobecauss into the first stage: | |
| 392 | + | |
| 393 | +``` | |
| 394 | + COPY containers/os-release /etc/os-release | |
| 395 | +``` | |
| 396 | + | |
| 397 | +That will let you pway to can remove the installation of `busybox-static` in STAGE 1 since | |
| 398 | +Alpine is already based on BusyBox.(^We can’t do “`FURL hasn’t changed, if you hav Alpine stages, it isn’t redundant; the second one | |
| 399 | +starts fresh, allowing us to copy in only what we absolutely need from | |
| 400 | +AWKbecausewe haveRelative to, the change from “`alpmeans we have no BusyBox environment to execute | |
| 401 | +the `RUN` command with, so we have to copy the `busybox.static` binary | |
| 402 | +in from STAGE 1 and install | |
| 403 | +the stock does.(^This is the main reason we change `USER` | |
| 404 | +temporarily to `root` here.) There are a few other steps required to | |
| 405 | +avoid causing a conflict between our previously bare-bones “OS” layer | |
| 406 | +and what the is hassleinTcl popular, we have | |
| 407 | +that intovia a suitable | |
| 408 | +. Because this will conflict with the | |
| 409 | +bare-bones “`os`” laye(./server/)create, thePython the `RUN` | |
| 410 | + in from | |
| 411 | + the stock | |
| 412 | + temporarily to | |
| 413 | +`root` here.) The compensating bonus is huge: we don’t leave a package | |
| 414 | + image, waiting to be abusedhow much the über-jail nature of | |
| 415 | +c run yous can save you when | |
| 416 | +like this. For instance, you might have enabled Fossil’s [risky TH1 docs | |
| 417 | +feature][th1docrisk] along with the Tcl integration feature, which | |
| 418 | +effectively gives anyone with check-in rights on your repo the ability | |
| 419 | +to run arbitrary Tcl code on the host when that document is rendered. | |
| 420 | +The container layer should stop that script | |
| 421 | +on the host | |
| 422 | +namespace, but it *can* still make network connections, modify the repo | |
| 423 | +, and who knows what else//fossil-scm.org/forum/forumpost/42e0c165447Vw@3X~,25L~sx;adviceYou could inject that into | |
| 424 | +one of s. Because this will | |
| 425 | + | |
| 426 | +complicated. Essentially, you replace everything in STAGE 2 and 3 inside | |
| 427 | +the `Dockerfile` with: | |
| 428 | + | |
| 429 | + FROM grc.io/distroless/python3-debian11 | |
| 430 | + | |
| 431 | +Another case | |
| 432 | + | |
| 433 | + | |
| 434 | +Method 2to | |
| 435 | + bind-mounted | |
| 436 | + `netstat`, `tYou our build | |
| 437 | + process leaves out all the BusyBox utilities that require them. | |
| 438 | + Although that set includes common tools like `ping`, we | |
| 439 | + | |
| 440 | + R@2VU,5: RUNN@2bU,1Q: | |
| 441 | + | |
| 442 | +Everything else remains the same as in the distroless Python example | |
| 443 | +because even AlpineN@2yP,1R: way we set up core Linux | |
| 444 | +directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distroless7Xz@3Z4,qTTBs;exec -it -u fossil fossil sh | |
| 445 | +```s to get a release build, for instance\ | |
| 446 | + alternativeAlthough Podman [bills itself][whatis] as a drop-in replachassleinTcl popular, we have | |
| 447 | +that intovia a suitable | |
| 448 | +. Because this will conflict with the | |
| 449 | +bare-bones “`os`” layer we create, thePython the `RUN` | |
| 450 | + in from | |
| 451 | + the stock | |
| 452 | + temporarily to | |
| 453 | +`root` here.) The compensating bonus is huge: we don’t leave a package | |
| 454 | + image, waiting to be abusedhow much the über-jail nature of | |
| 455 | +c run yous can save you when | |
| 456 | +like this. For instance, you might have enabled Fossil’s [risky TH1 docs | |
| 457 | +feature][th1docrisk] along with the Tcl integration feature, which | |
| 458 | +effectively gives anyone with check-in rights on your repo the ability | |
| 459 | +to run arbitrary Tcl code on the host when that document is rendered. | |
| 460 | +The container layer should stop that script | |
| 461 | +on the host | |
| 462 | +namespace, but it *can* still make network connections, modify the repo | |
| 463 | +, and who knows what else//fossil-scm.org/forum/forumpost/42e0c165447Vw@3X~,25L~sx;adviceYou could inject that into | |
| 464 | +one of s. Because this will | |
| 465 | + | |
| 466 | +complicated. Essentially, you replace everything in STAGE 2 and 3 inside | |
| 467 | +the `Dockerfile` with: | |
| 468 | + | |
| 469 | + FROM grc.io/distroless/python3-debian11 | |
| 470 | + | |
| 471 | +Another case | |
| 472 | + | |
| 473 | + | |
| 474 | +Method 2to | |
| 475 | + bind-mounted | |
| 476 | + `netstat`, `tYou our build | |
| 477 | + process leaves out all the BusyBox utilities that require them. | |
| 478 | + Although that set includes common tools like `ping`, we | |
| 479 | + | |
| 480 | + R@2VU,5: RUNN@2bU,1Q: | |
| 481 | + | |
| 482 | +Everything else remains the same as in the distroless Python example | |
| 483 | +because even AlpineN@2yP,1R: way we set up core Linux | |
| 484 | +directories like `/etc` and `/tmp` in the absence of any OS imageAs@3it’s about a quarterecause a new release | |
| 485 | +came , or half | |
| 486 | +that of the “full” distribution of `nerdctl` and all its dependenciesround to vetting it against our stock | |
| 487 | +configuration first. | |
| 488 | + | |
| 489 | +As for Fossil, it defaults to fetching the same version as the checkout | |
| 490 | +you’re running the build command from, based on checkin ID. You could | |
| 491 | +use this to get a release build, for instance\ | |
| 492 | + our build | |
| 493 | + process leaves out all the BusyBox utilities that require them. | |
| 494 | + Although that set includes common tools like `ping`, we foresee no | |
| 495 | + use that or any of these other elijail��s [risky TH1 docsh user has | |
| 496 | +their own local. Let’sjailthe image, you | |
| 497 | +can’t create the actual container from that image since that needs to be | |
| 498 | +done as root. | |
| 499 | + | |
| 500 | +The simple way to deal with this is to bounce the container through a | |
| 501 | +registry that both users can see, such as [Docker | |
| 502 | +Hub](https://hub.docker.tag fossil:latest mydockername/fossil:latest | |
| 503 | + $ podman image push mydockername/fossil:latest | |
| 504 | +``` | |
| 505 | + | |
| 506 | +That will push the image up to your accound | |
| 507 | + process leaves out all the BusyBox utilities that require them. | |
| 508 | + Although that set includes common tools like `ping`, we foresee no | |
| 509 | + use that or any of these other elided utilities | |
| 510 | + — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get | |
| 511 | +fetched in the build step. To get the latest-and-greatest of everything, | |
| 512 | +you could say\ | |
| 513 | + trunk \ | |
| 514 | + --build-arg BBXVER=master . | |
| 515 | +``` | |
| 516 | + | |
| 517 | +(But don’t, for reasons we will getwe ship was created with and | |
| 518 | +tested against a specific stable release, that’s the version we pull by | |
| 519 | +default. It does try to merge the defaults for any new configuration | |
| 520 | +settings into the stock set, but since it’s possible this will fail, we | |
| 521 | +don’t blindly update the BusyBox version merely because a new release | |
| 522 | +came out. Someone needs to get around to vetting it against our stock | |
| 523 | +configuration first. | |
| 524 | + | |
| 525 | +As for Fossil, it defaults to fetching the same version as the checkout | |
| 526 | +you’re running the build command from, based on checkin ID. You could | |
| 527 | +use this to get a release build, for instance\ | |
| 528 | + our build | |
| 529 | + process leaves out all the BusyBox utilities that require them. | |
| 530 | + Although that set includes common tools like `ping`, we foresee no | |
| 531 | + use that or any of these other elided utilities | |
| 532 | + — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get | |
| 533 | +fetched in the build step. To get the latest-and-greatest of everything, | |
| 534 | +you could say\ | |
| 535 | + trunk \ | |
| 536 | + it lets you build on a local system that might be a lot faster | |
| 537 | +than your remote one, as when the remote is a small VPjailAlthough that set includes common tools like `ping`, we foresee no | |
| 538 | + use that or any of these other elided utilities | |
| 539 | + — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get | |
| 540 | +fetched in the build step. To get the latest-and-greatest of everything, | |
| 541 | +you could say\ | |
| 542 | + trunk \ | |
| 543 | + --build-arg BBXVER=master . | |
| 544 | +``` | |
| 545 | + | |
| 546 | +(But don’t, for reasons we will getwe ship was created with and | |
| 547 | +tested against a specific stable release, that’s the version we pull by | |
| 548 | +default. It does try to merge the defaults for any new configuration | |
| 549 | +settings into the stock set, but since it’s possible this will fail, we | |
| 550 | +don’t blindly update the BusyBox version merely because a new release | |
| 551 | +came out. Someone needs to get around to vetting it against our stock | |
| 552 | +configuration first. | |
| 553 | + | |
| 554 | +As for Fossil, it defaults to fetching the same version as the checkout | |
| 555 | +you’re running the build command from, based on checkin ID. You could | |
| 556 | +use this to get a release build, for instance\ | |
| 557 | + alternativeAlthough Podman [bills itself][whatis] as a drop-in replacement for the | |
| 558 | +`docker` command and everything that sits behind it, some of the tool’s | |
| 559 | +desis run, as compared to | |
| 560 | +using Docker. | |
| 561 | + | |
| 562 | +The most important of thesour ��s [risky TH1 docs | |
| 563 | +feature][th1docrisk] along with the Tcl integration feature, which | |
| 564 | +effectively gives anyone with check-in rights on your repo the ability | |
| 565 | +to run arbitrary Tcl code on the host when that document is rendered. | |
| 566 | +The container layer should stop that script | |
| 567 | +on the host | |
| 568 | +namespace, but it *can* still make network connections, modify the repo | |
| 569 | +, and who knows what else//fossil-scm.org/forum/forumpost/42e0c165447Vw@3X~,25L~sx;adviceYou could inject that into | |
| 570 | +one of s. Because this will | |
| 571 | + | |
| 572 | +complicated. Essentially, you replace everything in STAGE 2 and 3 inside | |
| 573 | +the `Dockerfile` with: | |
| 574 | + | |
| 575 | + FROM grc.io/distroless/python3-debian11 | |
| 576 | + | |
| 577 | +Another case | |
| 578 | + | |
| 579 | + | |
| 580 | +Method 2to | |
| 581 | + bind-mounted | |
| 582 | + `netstat`, `tYou our build | |
| 583 | + process leaves out all the BusyBox utilities that require them. | |
| 584 | + Although that set includes common tools like `ping`, we | |
| 585 | + | |
| 586 | + R@2VU,5: RUNN@2bU,1Q: | |
| 587 | + | |
| 588 | +Everythin (g else remains the same as in the distroless Pytrhon example | |
| 589 | +because even AlpineN@2yP,1R: way we set up core Linux | |
| 590 | +directories like `/etc` and `/)”, as systemdIt’s important that the name of the machine you create —in this example — matches tason is, although tsand it will contain. For one[SCGI proxying via nginx][DNT]. For | |
| 591 | +other use cases, see our collection of [Fossil server configuration | |
| 592 | +guides][srv], then adjust the command to your local needs. | |
| 593 | +For another, you will likely have to adjust the ` | |
| 594 | +in the command. | |
| 595 | + | |
| 596 | +W. | |
| 597 | + | |
| 598 | +S,ngly diffiemains the same as incert /path/to/my/fullchainhas no option for installneeds for so, the | |
| 599 | +. Thus,-rune reason is, although this containesurprisingly Fossil server configuration | |
| 600 | +guides][srv], then adjust the command to your local needs. | |
| 601 | +For another, you will likely have to adjust the ` | |
| 602 | +in the command. | |
| 603 | + | |
| 604 | +W. | |
| 605 | + | |
| 606 | +S,ngly diffiemains the same as incert /path/to/my/fullchainhas no option for installneeds for so, the | |
| 607 | +. Thus,Copy the container name from the first step to the second. Yours will | |
| 608 | +almost certainly be named after a different Fossil commit ID.en adjust the command to your local needs. | |
| 609 | +For another, you will likely have to adjust the ` | |
| 610 | +in the command. | |
| 611 | + | |
| 612 | +W. | |
| 613 | + | |
| 614 | +S,ngly diffiemains the same barebones"></a>Bahas no option for installneeds for so, the | |
| 615 | +. Thus,virtual net | |
| 616 | + it wants to hide the service entirely. | |
| 617 | + | |
| 618 | + Another way to put this is thatthing* of what pped-down by today’s | |
| 619 | +s` does | |
| 620 | + despite their superficial similarities. | |
| 621 | + | |
| 622 | + For this container, it doesn’t much matter, since it exposes | |
| 623 | + only a single port, and we do want that one port exposed, one way | |
| 624 | + or another. Beyond that, weby today’s | |
| 625 | +standards, it’surprisingly difficulte remains the same as in the distroless Python example | |
| 626 | +because even AlpineN@2yP,1R: way we set up core Linux | |
| 627 | +directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot? | |
| 628 | + | |
| 629 | +A potentially surprising feature of this container is that it runs | |
| 630 | +Fossil as root. Sin | |
| 631 | +to kick in, and a Docker container is a type of über-jail already, you | |
| 632 | +may be wondering why we bother.I: | |
| 633 | + | |
| 634 | +1. `systemd-nspawn` works best with `machinectl`, but if you haven’t | |
| 635 | + got `btrfs` available, you run into [trouble](#nspawn-rhel). | |
| 636 | + | |
| 637 | +2. O@760,6: same | |
| 638 | +h@76d | |
| 639 | + a strip | |
| 640 | + image, causing ly difficulte remains the same as in the distroless Python exampleemains the same as in the distroless Python example | |
| 641 | +because even Al tutorial][medtut].) | |
| 642 | + | |
| 643 | +3. We disable the “private networking” feature since the whole | |
| 644 | + point of this container is to expose a network service to the | |
| 645 | + public, one way or another. If you do things the way the defaults | |
| 646 | + (and thus the official docs) expect, you must push through | |
| 647 | + [a whole lot of complexity][ndcmp] to re-expose this single | |
| 648 | + network port. That complexity is justified only if your service | |
| 649 | + is itself complex, having both privatyou still have options for | |
| 650 | +running containers that are considerably slimmer, at a high cost to | |
| 651 | +administration complexity and loss of features. | |
| 652 | + | |
| 653 | +Part of the OCI standard is the notion of a “bundle,” being a consistent | |
| 654 | +way to present a pre-built and configured container to the runtime. | |
| 655 | +Essentially, it consists of a directory containing a `config.json` file | |
| 656 | +and a `rootfs/` subdirectory containing the root filesystem image. Many | |
| 657 | +tools can produce these for you. We’ll show only one method in the first | |
| 658 | +section below, then reuse that in the following sections. | |
| 659 | + | |
| 660 | + | |
| 661 | +#### 6.3.1 <a id="runc"></a>`runc` | |
| 662 | + | |
| 663 | +We mentioned `runc` [above](#nerdctl), but it’s possible to use it | |
| 664 | +standalone, without `containerd` or its CLI frontend `nerdctl`. You also | |
| 665 | +lose the build engine, intelligent image layer sharing, image registry | |
| 666 | +connections, and much more. The plus side is that `runc` alone is | |
| 667 | +18 MiB. | |
| 668 | + | |
| 669 | +Using it without stable release, that’s the version we pull by | |
| 670 | +default. It does try to merge the defaults for any new configuration | |
| 671 | +settings into the stock set, but since it’s possible this will fail, we | |
| 672 | +don’t blindly update the BusyBox version merely because a new release | |
| 673 | +came out. Someone needs to get around to vetting it against our stock | |
| 674 | +configuration first. | |
| 675 | + | |
| 676 | +As for Fossil, it defaults to fetching the same version as the checkout | |
| 677 | +you’re running the build command from, based on checkin ID. You could | |
| 678 | +use this to get a release build, for instance\ | |
| 679 | + our build | |
| 680 | + process leaves out all the BusyBox utilities that require them. | |
| 681 | + Although that set includes common tools like `ping`, we foresee no | |
| 682 | + use that or any of these other elided utilities | |
| 683 | + — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get | |
| 684 | +fetched in the build step. To get the latest-and-greatest of everything, | |
| 685 | +you could say\ | |
| 686 | + trunk \ | |
| 687 | + it lets you build on a local system that might be a lot faster | |
| 688 | +than your remote one, as when the remote is a small VPjailAlthough that set includes common tools like `ping`, we foresee no | |
| 689 | + use that or any of these other elided utilities | |
| 690 | + — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get | |
| 691 | +fetched in the build step. To get the latest-and-greatest of everything, | |
| 692 | +you could say\ | |
| 693 | + trunk \ | |
| 694 | + --build-arg BBXVER=master . | |
| 695 | +``` | |
| 696 | + | |
| 697 | +(But don’t, for reasons we will getwe ship was created with and | |
| 698 | +tested against a specific stable release, that’s the version we pull by | |
| 699 | +default. It does try to merge the defaults for any new configuration | |
| 700 | +settings into the stock set, but since it’s possible this will fail, we | |
| 701 | +don’t blindly update the BusyBox version merely because a new release | |
| 702 | +came out. Someone needs to get around to vetting it against our stock | |
| 703 | +configuration first. | |
| 704 | + | |
| 705 | +As for Fossil, it defaults to fetching the same version as the checkout | |
| 706 | +you’re running the build command from, based on checkin ID. You could | |
| 707 | +use this to get a release build, for instance\ | |
| 708 | + alternativeAlthough Podman [bills itself][whatis] as a drop-in replacement for the | |
| 709 | +`docker` command and everything that sits behind it, some of the tool’s | |
| 710 | +desis run, as compared to | |
| 711 | +using Docker. | |
| 712 | + | |
| 713 | +The most important of thesour ��s [risky TH1 docs | |
| 714 | +feature][th1docrisk] along with the Tcl integration feature, which | |
| 715 | +effectively gives anyone with check-in rights on your repo the ability | |
| 716 | +to run arbitrary Tcl code on the host when that document is rendered. | |
| 717 | +The container layer should stop that script | |
| 718 | +on the host | |
| 719 | +namespace, but it *can* still make network connections, modify the repo | |
| 720 | +, and who knows what else//fossil-scm.org/forum/forumpost/42e0c165447Vw@3X~,25L~sx;adviceYou could inject that into | |
| 721 | +one of s. Because this will | |
| 722 | + | |
| 723 | +complicated. Essentially, you replace everything in STAGE 2 and 3 inside | |
| 724 | +the `Dockerfile` with: | |
| 725 | + | |
| 726 | + FROM grc.io/distroless/python3-debian11 | |
| 727 | + | |
| 728 | +Another case | |
| 729 | + | |
| 730 | + | |
| 731 | +Method 2to | |
| 732 | + bind-mounted | |
| 733 | + `netstat`, `tYou our build | |
| 734 | + process leaves out all the BusyBox utilities that require them. | |
| 735 | + Although that set includes common tools like `ping`, we | |
| 736 | + | |
| 737 | + R@2VU,5: RUNN@2bU,1Q: | |
| 738 | + | |
| 739 | +Everythin (g else remains the same as in the distroless Pytrhon example | |
| 740 | +because even AlpineN@2yP,1R: way we set up core Linux | |
| 741 | +directories like `/etc` and `/)”, as systemdIt’s important that the name of the machine you create —in this example — matches tason is, although tsand it will contain. For one[SCGI proxying via nginx][DNT]. For | |
| 742 | +other use cases, see our collection of [Fossil server configuration | |
| 743 | +guides][srv], then adjust the command to your local needs. | |
| 744 | +For another, you will likely have to adjust the ` | |
| 745 | +in the command. | |
| 746 | + | |
| 747 | +W. | |
| 748 | + | |
| 749 | +S,ngly diffiemains the same as incert /path/to/my/fullchainhas no option for installneeds for so, the | |
| 750 | +. Thus,-rune reason is, although this containesurprisingly Fossil server configuration | |
| 751 | +guides][srv], then adjust the command to your local needs. | |
| 752 | +For another, you will likely have to adjust the ` | |
| 753 | +in the command. | |
| 754 | + | |
| 755 | +W. | |
| 756 | + | |
| 757 | +S,ngly diffiemains the same as incert /path/to/my/fullchainhas no option for installneeds for so, the | |
| 758 | +. Thus,Copy the container name from the first step to the second. Yours will | |
| 759 | +almost certainly be named after a different Fossil commit ID.en adjust the command to your local needs. | |
| 760 | +For another, you will likely have to adjust the ` | |
| 761 | +in the command. | |
| 762 | + | |
| 763 | +W. | |
| 764 | + | |
| 765 | +S,ngly diffiemains the same as incert /path/to/my/fullchainhas no option for installneeds for so, the | |
| 766 | +. Thus,virtual net | |
| 767 | + it wants to hide the service entirely. | |
| 768 | + | |
| 769 | + Another way to put this is thatthing* of what pped-down by today’s | |
| 770 | +s` does | |
| 771 | + despite their superficial similarities. | |
| 772 | + | |
| 773 | + For this container, it doesn’t much matter, since it exposes | |
| 774 | + only a single port, and we do want that one port exposed, one way | |
| 775 | + or another. Beyond that, weby today’s | |
| 776 | +standards, it’surprisingly difficulte remains the same as in the distroless Python example | |
| 777 | +because even AlpineN@2yP,1R: way we set up core Linux | |
| 778 | +directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot? | |
| 779 | + | |
| 780 | +A potentially surprising feature of this container is that it runs | |
| 781 | +Fossil as root. Sin | |
| 782 | +to kick in, and a Docker container is a type of über-jail already, you | |
| 783 | +may be wondering why we bother.I: | |
| 784 | + | |
| 785 | +1. `systemd-nspawn` works best with `machinectl`, but if you haven’t | |
| 786 | + , you’ll get the old versionstages, it isn’t redundant; the second one | |
| 787 | +starts fresh, allowing us to copy in only what we absolutely need from | |
| 788 | +AWKbecausewe haveRelative to, the change from “`alpmeans we have no BusyBox environment to execute | |
| 789 | +the `RUN` command with, so we have to copy the `busybox.static` binary | |
| 790 | +in from STAGE 1 and install | |
| 791 | +the stock does.(^This is the main reason we change `USER` | |
| 792 | +temporarily to `root` here.) There are a few other steps required to | |
| 793 | +avoid causing a conflict between our previously bare-bones “OS” layer | |
| 794 | +and what the is hassleinTcl popular, we have | |
| 795 | +that int |
| --- a/www/containers.md | |
| +++ b/www/containers.md | |
| @@ -0,0 +1,795 @@ | |
| --- a/www/containers.md | |
| +++ b/www/containers.md | |
| @@ -0,0 +1,795 @@ | |
| 1 | surprisingly difficulte remains the same as in the distroless Python example |
| 2 | because even AlpineN@2yP,1R: way we set up core Linux |
| 3 | directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot? |
| 4 | |
| 5 | A potentially surprising feature of this container is that it runs |
| 6 | Fossil as root. Sin |
| 7 | to kick in, and a Docker container is a type of über-jail already, you |
| 8 | may be wondering why we bother. Instead, why not either: |
| 9 | |
| 10 | * run f][whatso it starts Fossil as |
| 11 | that user instead |
| 12 | |
| 13 | The reason is, although this container is quite stripped-down by today’s |
| 14 | standards, it’s based on the [surprising(This author made a |
| 15 | that were less |
| 16 | powerful than this container.) If someone ever figured out how to make a |
| 17 | Fossil binary execute arbitrary commands on the host or to open up a |
| 18 | remote shell, the power available to them at that point would make it |
| 19 | likely that they’d be able to island-hop from there into the rest of |
| 20 | your network. That power is there for you as the system administrator |
| 21 | alone, to let you inspectquire them. |
| 22 | Altour build |
| 23 | process leaves out all the BusyBox utilities that require them. |
| 24 | Although that set includes common tools like `ping`, we It also strips |
| 25 | out all but the default and darkmode skins to save executable space foresee no |
| 26 | use that or any of these other elided utilities |
| 27 | — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get |
| 28 | fetched in the build step. To get the latest-and-greatest of everything, |
| 29 | you could say\ |
| 30 | trunk \ |
| 31 | --build-arg BBXVER=master . |
| 32 | ``` |
| 33 | |
| 34 | (But don’t, for reasons we will getwR ship was created with and |
| 35 | tested R |
| 36 | ific stable release, tharun`”.) ration |
| 37 | settings iput a line like this into the first stage: |
| 38 | |
| 39 | ``` |
| 40 | COPY containers/os-releaseR/etc/os-release |
| 41 | ``` |
| 42 | |
| 43 | That will let you produce a `systemd` “m” This is generally better for |
| 44 | security, but there’s something you need to be aware of: each user has |
| 45 | their own local. Let’s say you’re following, so even though it did build the image, you |
| 46 | can’t create the actual container from that image since that needs to be |
| 47 | done as root. |
| 48 | |
| 49 | The simple way to deal with this is to bounce the container through a |
| 50 | registry that both users can see, such as [Docker |
| 51 | Hub](https://hub.docker.tag fossil:latest mydockername/fossil:latest |
| 52 | $ podman image push mydockername/fossil:latest |
| 53 | ``` |
| 54 | |
| 55 | That will push the image up to your accound |
| 56 | process leaves out all the BusyBox utilities that require them. |
| 57 | Although that set includes common tools like `ping`, we foresee no |
| 58 | use that or any of these other elided utilities |
| 59 | — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get |
| 60 | fetched in the build step. To get the latest-and-greatest of everything, |
| 61 | you could say\ |
| 62 | trunk \ |
| 63 | --build-arg BBXVER=master . |
| 64 | ``` |
| 65 | |
| 66 | (But don’t, for reasons we will getwe ship was created with and |
| 67 | tested against a specific stable release, that’s the version we pull by |
| 68 | default. It does try to merge the defaults for any new configuration |
| 69 | settings into the stock set, but since it’s possible this will fail, we |
| 70 | don’t blindly update the BusyBox version merely because a new release |
| 71 | came out. Someone needs to get around to vetting it against our stock |
| 72 | configuration first. |
| 73 | |
| 74 | As for Fossil, it defaults to fetching the same version as the checkout |
| 75 | you’re running the build command from, based on checkin ID. You could |
| 76 | use this to get a release build, for instance\ |
| 77 | our build |
| 78 | process leaves out all the BusyBox utilities that require them. |
| 79 | Although that set includes common tools like `ping`, we foresee no |
| 80 | use that or any of these other elided utilities |
| 81 | — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get |
| 82 | fetched in the build step. To get the latest-and-greatest of everything, |
| 83 | you could say\ |
| 84 | trunk \ |
| 85 | it lets you build on a local system that might be a lot faster |
| 86 | than your remote one, as when the remote is a small VPS. Even with the |
| 87 | overhead of schlepping container images across the Internet, it can be a |
| 88 | net win in terms of build time. |
| 89 | |
| 90 | Another oddity compared to DockerY@760,6: same |
| 91 | h@76d,M:. The changes distill3WC@78M,3SS6XH;One way to can remove the installation of `busybox-static` in STAGE 1 since |
| 92 | Alpine is already based on BusyBox.(^We can’t do “`FROM busybox`” since |
| 93 | we need `apk` in this new second stage. Although this means we end up |
| 94 | with back-to-back Alpine stages, it isn’t redundant; the second one |
| 95 | starts fresh, allowing us to copy in only what we absolutely need from |
| 96 | AWKbecausewe haveRelative to, the change from “`alpmeans we have no BusyBox environment to execute |
| 97 | the `RUN` command with, so we have to copy the `busybox.static` binary |
| 98 | in from STAGE 1 and install |
| 99 | the stock does.(^This is the main reason we change `USER` |
| 100 | temporarily to `root` here.) There are a few other steps required to |
| 101 | avoid causing a conflict between our previously bare-bonerename |
| 102 | il binary executl popular, we have |
| 103 | that ijust a suitable |
| 104 | . Because this will conflict with the |
| 105 | bare-bones “`os`” layer we create, thePython the `RUN` |
| 106 | in from |
| 107 | the stock |
| 108 | temporarily to |
| 109 | `root` here.) The compensating bonus is huge: we don’t leave a package |
| 110 | image, waiting to be abusedhow much the über-jail nature of |
| 111 | c run yous can save you when |
| 112 | like this. For instance, you might have enabled Fossil’s [risky TH1 docs |
| 113 | feature][th1docrisk] along with the Tcl integration feature, which |
| 114 | effectively gives anyone with check-in rights on your repo the ability |
| 115 | to run arbitrary Tcl code on the host when that document is rendered. |
| 116 | The container layer should stop that script |
| 117 | on the host |
| 118 | namespace, but it *can* still make network connect, |
| 119 | so there is at least a *hope* that WAL will work properly across that |
| 120 | boundary. The success of the scheme depends on the `mmap()` and shared |
| 121 | memory system calls being coordinated properly by the OS kernel the two |
| 122 | worlde network cAt some point, someone should perform tests in the hopes of *failing* to |
| 123 | create database corruption in this scenario. |
| 124 | |
| 125 | Why the tortured grammar? Because you cannot prove a negative, being in |
| 126 | this case “SQLite will not corrupt the database in WAL mode if there’s a |
| 127 | container barrier in the way.” All you can prove is that a given test |
| 128 | didn’t cause corruption. With enough tests of sufficient power, you can |
| 129 | begin to make definitive statements, but even then, science is always |
| 130 | provisional, awaiting a single disproving with the Tcl ints give the sysadmin freedom to impose barriers between |
| 131 | the two worlds, so even if you convince yourself that WAL mode is safe |
| 132 | in a given setup, it’s possible to configure it to fail. As if that |
| 133 | weren’t enough, differentg with the Tcl ints have different defaults, |
| 134 | including details like whether shared memory is truly shared between |
| 135 | the host and its containers. |
| 136 | |
| 137 | Until someone gets around to establishing this ground truth and scoping |
| 138 | its applicable range` with: |
| 139 | |
| 140 | FROM grc.io/distroless/python3-debian11 |
| 141 | |
| 142 | Another case |
| 143 | |
| 144 | |
| 145 | Method 2to |
| 146 | bind-mounted |
| 147 | `netstat`, `tYou our build |
| 148 | process leaves out all the BusyBox utilities that require them. |
| 149 | Although that set includes common tools like `ping`, we |
| 150 | |
| 151 | R@2VU,5: RUNN@2bU,1Q: |
| 152 | |
| 153 | Everything else remains the same as in the distroless Python example |
| 154 | because even AlpineN@2yP,1R: way we set up core Linux |
| 155 | directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distroless7Xz@3Z4,qTTBs;exec -it -u fossil fossil sh |
| 156 | ```s to get a release build, for instance\ |
| 157 | alternativeAlthough Podman [bills itself][whatis] as a drop-in replacement for the |
| 158 | `docker` command and everything that sits behind it, some of the tool’s |
| 159 | desis run, as compared to |
| 160 | using Docker. |
| 161 | |
| 162 | The most important of these is that, by default, Podman wants to build |
| 163 | and run your container “[rootless].” This is generally better for |
| 164 | security, but there’s something you need to be aware of: each user has |
| 165 | their own local. Let’s say you’re following, so even though it did build the image, you |
| 166 | can’t create the actual container from that image since that needs to be |
| 167 | done as root. |
| 168 | |
| 169 | The simple way to deal with this is to bounce the container through a |
| 170 | registry that both users can see, such as [Docker |
| 171 | Hub](https://hub.docker.tag fossil:latest mydockername/fossil:latest |
| 172 | $ podman image push mydockername/fossil:latest |
| 173 | ``` |
| 174 | |
| 175 | That will push the image up to your accound |
| 176 | process leaves out all the BusyBox utilities that require them. |
| 177 | Although that set includes common tools like `ping`, we foresee no |
| 178 | use that or any of these other elided utilities |
| 179 | — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get |
| 180 | fetched in the build step. To get the latest-and-greatest of everything, |
| 181 | you could say\ |
| 182 | trunk \ |
| 183 | --build-arg BBXVER=master . |
| 184 | ``` |
| 185 | |
| 186 | (But don’t, for reasons we will getwe ship was created with and |
| 187 | tested against a specific stable release, that’s the version we pull by |
| 188 | default. It does try to merge the defaults for any new configuration |
| 189 | settings into the stock set, but since it’s possible this will fail, we |
| 190 | don’t blindly update the BusyBox version merely because a new release |
| 191 | came out. Someone needs to get around to vetting it against our stock |
| 192 | configuration first. |
| 193 | |
| 194 | As for Fossil, it defaults to fetching the same version as the checkout |
| 195 | you’re running the build command from, based on checkin ID. You could |
| 196 | use this to get a release build, for instance\ |
| 197 | our build |
| 198 | process leaves out all the BusyBox utilities that require them. |
| 199 | Although that set includes common tools like `ping`, we foresee no |
| 200 | use that or any of these other elijail��s [risky TH1 docsh user has |
| 201 | their own local. Let’sjailthe image, you |
| 202 | can’t create the actual container from that image since that needs to be |
| 203 | done as root. |
| 204 | |
| 205 | The simple way to deal with this is to bounce the container through a |
| 206 | registry that both users can see, such as [Docker |
| 207 | Hub](https://hub.docker.tag fossil:latest mydockername/fossil:latest |
| 208 | $ podman image push mydockername/fossil:latest |
| 209 | ``` |
| 210 | |
| 211 | That will push the image up to your accound |
| 212 | process leaves out all the BusyBox utilities that require them. |
| 213 | Although that set includes common tools like `ping`, we foresee no |
| 214 | use that or any of these other elided utilities |
| 215 | — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get |
| 216 | fetched in the build step. To get the latest-and-greatest of everything, |
| 217 | you could say\ |
| 218 | trunk \ |
| 219 | --build-arg BBXVER=master . |
| 220 | ``` |
| 221 | |
| 222 | (But don’t, for reasons we will getwe ship was created with and |
| 223 | tested against a specific stable release, that’s the version we pull by |
| 224 | default. It does try to merge the defaults for any new configuration |
| 225 | settings into the stock set, but since it’s possible this will fail, we |
| 226 | don’t blindly update the BusyBox version merely because a new release |
| 227 | came out. Someone needs to get around to vetting it against our stock |
| 228 | configuration first. |
| 229 | |
| 230 | As for Fossil, it defaults to fetching the same version as the checkout |
| 231 | you’re running the build command from, based on checkin ID. You could |
| 232 | use this to get a release build, for instance\ |
| 233 | our build |
| 234 | process leaves out all the BusyBox utilities that require them. |
| 235 | Although that set includes common tools like `ping`, we foresee no |
| 236 | use that or any of these other elided utilities |
| 237 | — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get |
| 238 | fetched in the build step. To get the latest-and-greatest of everything, |
| 239 | you could say\ |
| 240 | trunk \ |
| 241 | it lets you build on a local system that might be a lot faster |
| 242 | than your remote one, as when the remote is a small VPjailAlthough that set includes common tools like `ping`, we foresee no |
| 243 | use that or any of these other elided utilities |
| 244 | — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get |
| 245 | fetched in the build step. To get the latest-and-greatest of everything, |
| 246 | you could say\ |
| 247 | trunk \ |
| 248 | --build-arg BBXVER=master . |
| 249 | ``` |
| 250 | |
| 251 | (But don’t, for reasons we will getwe ship was created with and |
| 252 | tested against a specific stable release, that’s the version we pull by |
| 253 | default. It does try to merge the defaults for any new configuration |
| 254 | settings into the stock set, but since it’s possible this will fail, we |
| 255 | don’t blindly update the BusyBox version merely because a new release |
| 256 | came out. Someone needs to get around to vetting it against our stock |
| 257 | configuration first. |
| 258 | |
| 259 | As for Fossil, it defaults to fetching the same version as the checkout |
| 260 | you’re running the build command from, based on checkin ID. You could |
| 261 | use this to get a release build, for instance\ |
| 262 | alternativeAlthough Podman [bills itself][whatis] as a drop-in replacement for the |
| 263 | `docker` command and everything that sits behind it, some of the tool’s |
| 264 | desis run, as compared to |
| 265 | using Docker. |
| 266 | |
| 267 | The most important of thesour ��s [risky TH1 docs |
| 268 | feature][th1docrisk] along with the Tcl integration feature, which |
| 269 | effectively gives anyone with check-in rights on your repo the ability |
| 270 | to run arbitrary Tcl code on the host when that document is rendered. |
| 271 | The container layer should stop that script |
| 272 | on the host |
| 273 | namespace, but it *can* still make network connections, modify the repo |
| 274 | , and who knows what else//fossil-scm.org/forum/forumpost/42e0c165447Vw@3X~,25L~sx;adviceYou could inject that into |
| 275 | one of s. Because this will |
| 276 | |
| 277 | complicated. Essentially, you replace everything in STAGE 2 and 3 inside |
| 278 | the `Dockerfile` with: |
| 279 | |
| 280 | FROM grc.io/distroless/python3-debian11 |
| 281 | |
| 282 | Another case |
| 283 | |
| 284 | |
| 285 | Method 2to |
| 286 | bind-mounted |
| 287 | `netstat`, `tYou our build |
| 288 | process leaves out all the BusyBox utilities that require them. |
| 289 | Although that set includes common tools like `ping`, we |
| 290 | |
| 291 | R@2VU,5: RUNN@2bU,1Q: |
| 292 | |
| 293 | Everything else remains the same as in the distroless Python example |
| 294 | because even AlpineN@2yP,1R: way we set up core Linux |
| 295 | directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distroless7Xz@3Z4,qTTBs; bonus is huge: we don’t leave a package |
| 296 | image, waiting to be abusedhow much the über-jail nature of |
| 297 | c run yous can save you when |
| 298 | like this. For instance, you might have enabled Fossil’s [risky TH1 docs |
| 299 | feature][th1docrisk] along with the Tcl integration feature, which |
| 300 | effectively gives anyone with check-in rights on your repo the ability |
| 301 | to run arbitrary Tcl code on the hThe first configurationtainer is that it runs |
| 302 | Fossil as root. Sin |
| 303 | to kick in, and a Docker container is a type of über-jail already, you |
| 304 | may be wondering why we bother. Instead, why not either: |
| 305 | |
| 306 | * run nojail` to skip the internal chroot; or |
| 307 | * set “`USER fossil`” inbills itself][whatso it starts Fossil as |
| 308 | that user instead |
| 309 | |
| 310 | The reason is, although this container is quite stripped-down by today’s |
| 311 | standards, it’s based on the [surprising(This author made a |
| 312 | that were less |
| 313 | powerful than this container.) If someone ever figured out how to make a |
| 314 | Fossil binary execute arbitrary commands on the host or to open up a |
| 315 | remote shell, the power available to them at that point would make it |
| 316 | likely that they’d be able to island-hop from there into the rest of |
| 317 | your network. That power is there for you as the system administrator |
| 318 | alone, to let you inspectinto |
| 319 | a “machine,” as `systemd` calls it. The easiest method ishese other elided utilitiile/Dockerfile)we ship was created with and |
| 320 | tested against a specific stable release, that’s the version we pull by |
| 321 | default. It does try to merge theour build |
| 322 | process leave`tYou our build |
| 323 | process leaves out all the BusyBox utilities that require them. |
| 324 | Although that set includes common tools like `ping`, we |
| 325 | |
| 326 | R@2VU,5: RUNN@2bU,1Q: |
| 327 | |
| 328 | Everything else remains the same as in the distroless Python example |
| 329 | because even AlpineN@2yP,1R: way we set up core Linux |
| 330 | directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot? |
| 331 | |
| 332 | A potentially surprising feature of this container is that it runs |
| 333 | Fossil as root. Sin |
| 334 | to kick in, and a Docker container is a type of über-jail already, you |
| 335 | may be wondering why we bother. Instead, why not either: |
| 336 | |
| 337 | * run nojail` to skip the internal chroot; or |
| 338 | * set “`USER fossil`” inbills itself][whatso it starts Fossil as |
| 339 | that user instead |
| 340 | |
| 341 | The reason is, although this container is quite stripped-down by today’s |
| 342 | standards, it’s based on the [surprising(This author made a |
| 343 | that were less |
| 344 | powerful than this container.) If someone ever figured out how to make a |
| 345 | Fossil binary execute arbitrary commands on the host or to open up a |
| 346 | remote shell, the power available to them at that point would make it |
| 347 | likely that they’d be able to island-hop from there into the rest of |
| 348 | your network. That power is thercess leaves out alainst a specific stable release, that’s the version we pull by |
| 349 | default. It does try to merge the defaults for any new configuration |
| 350 | settiy new configuration |
| 351 | settings i:noja |
| 352 | |
| 353 | A potentially surprissurprisingly difficulte remains the same as in the distroless Python example |
| 354 | because even AlpineN@2yP,1R: way we set up core Linux |
| 355 | directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot? |
| 356 | |
| 357 | A potentially surprising feature of this container is that it runs |
| 358 | Fossil as root. Sin |
| 359 | to kick in, and a Docker container is a type of über-jail already, you |
| 360 | may be wondering why we bother. Instead, why not either: |
| 361 | |
| 362 | * run f][whatso it starts Fossil as |
| 363 | that user instead |
| 364 | |
| 365 | The reason is, although this container is quite stripped-down by today’s |
| 366 | standards, it’s base4 on the [surprising(This auth and packed with [UPX].) |
| 367 | |
| 368 | [U//upx.github.io/6gF@488,2Ne3im;ofetgly difficulte remains the same as in the distroless Python example |
| 369 | because even AlpineN@2yP,1R: way we set up core Linux |
| 370 | directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot? |
| 371 | |
| 372 | A potentially surprisinculte ripped-down by today’s |
| 373 | standards, it’s based on the [surprising(This author made a |
| 374 | that were less |
| 375 | powerful than this container.) If someone ever figured out how to make a |
| 376 | Fossil binary execute arbitrary commands on the host or to open up a |
| 377 | remote shell, the power available to them at that point would make it |
| 378 | likely that they’d be able to island-hop from there into the rest of |
| 379 | your network. That power is there for you as the system administrator |
| 380 | alone, to let you inspectquire them. |
| 381 | Altour build |
| 382 | process leaves out all the BusyBox utilities that require them. |
| 383 | Although that set includes common tools like `ping`, we foresee no |
| 384 | use that or any of these other elided utilities |
| 385 | — `ether-wake`, `netstat`, `tYou can override The most |
| 386 | common reason to override this is to get a release versionns of Fossil and Bstep. To get the latest-19 . |
| 387 | ``` |
| 388 | |
| 389 | It’s bestguration |
| 390 | settings iput a line lik rather thanversion we pull by |
| 391 | default. It dobecauss into the first stage: |
| 392 | |
| 393 | ``` |
| 394 | COPY containers/os-release /etc/os-release |
| 395 | ``` |
| 396 | |
| 397 | That will let you pway to can remove the installation of `busybox-static` in STAGE 1 since |
| 398 | Alpine is already based on BusyBox.(^We can’t do “`FURL hasn’t changed, if you hav Alpine stages, it isn’t redundant; the second one |
| 399 | starts fresh, allowing us to copy in only what we absolutely need from |
| 400 | AWKbecausewe haveRelative to, the change from “`alpmeans we have no BusyBox environment to execute |
| 401 | the `RUN` command with, so we have to copy the `busybox.static` binary |
| 402 | in from STAGE 1 and install |
| 403 | the stock does.(^This is the main reason we change `USER` |
| 404 | temporarily to `root` here.) There are a few other steps required to |
| 405 | avoid causing a conflict between our previously bare-bones “OS” layer |
| 406 | and what the is hassleinTcl popular, we have |
| 407 | that intovia a suitable |
| 408 | . Because this will conflict with the |
| 409 | bare-bones “`os`” laye(./server/)create, thePython the `RUN` |
| 410 | in from |
| 411 | the stock |
| 412 | temporarily to |
| 413 | `root` here.) The compensating bonus is huge: we don’t leave a package |
| 414 | image, waiting to be abusedhow much the über-jail nature of |
| 415 | c run yous can save you when |
| 416 | like this. For instance, you might have enabled Fossil’s [risky TH1 docs |
| 417 | feature][th1docrisk] along with the Tcl integration feature, which |
| 418 | effectively gives anyone with check-in rights on your repo the ability |
| 419 | to run arbitrary Tcl code on the host when that document is rendered. |
| 420 | The container layer should stop that script |
| 421 | on the host |
| 422 | namespace, but it *can* still make network connections, modify the repo |
| 423 | , and who knows what else//fossil-scm.org/forum/forumpost/42e0c165447Vw@3X~,25L~sx;adviceYou could inject that into |
| 424 | one of s. Because this will |
| 425 | |
| 426 | complicated. Essentially, you replace everything in STAGE 2 and 3 inside |
| 427 | the `Dockerfile` with: |
| 428 | |
| 429 | FROM grc.io/distroless/python3-debian11 |
| 430 | |
| 431 | Another case |
| 432 | |
| 433 | |
| 434 | Method 2to |
| 435 | bind-mounted |
| 436 | `netstat`, `tYou our build |
| 437 | process leaves out all the BusyBox utilities that require them. |
| 438 | Although that set includes common tools like `ping`, we |
| 439 | |
| 440 | R@2VU,5: RUNN@2bU,1Q: |
| 441 | |
| 442 | Everything else remains the same as in the distroless Python example |
| 443 | because even AlpineN@2yP,1R: way we set up core Linux |
| 444 | directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distroless7Xz@3Z4,qTTBs;exec -it -u fossil fossil sh |
| 445 | ```s to get a release build, for instance\ |
| 446 | alternativeAlthough Podman [bills itself][whatis] as a drop-in replachassleinTcl popular, we have |
| 447 | that intovia a suitable |
| 448 | . Because this will conflict with the |
| 449 | bare-bones “`os`” layer we create, thePython the `RUN` |
| 450 | in from |
| 451 | the stock |
| 452 | temporarily to |
| 453 | `root` here.) The compensating bonus is huge: we don’t leave a package |
| 454 | image, waiting to be abusedhow much the über-jail nature of |
| 455 | c run yous can save you when |
| 456 | like this. For instance, you might have enabled Fossil’s [risky TH1 docs |
| 457 | feature][th1docrisk] along with the Tcl integration feature, which |
| 458 | effectively gives anyone with check-in rights on your repo the ability |
| 459 | to run arbitrary Tcl code on the host when that document is rendered. |
| 460 | The container layer should stop that script |
| 461 | on the host |
| 462 | namespace, but it *can* still make network connections, modify the repo |
| 463 | , and who knows what else//fossil-scm.org/forum/forumpost/42e0c165447Vw@3X~,25L~sx;adviceYou could inject that into |
| 464 | one of s. Because this will |
| 465 | |
| 466 | complicated. Essentially, you replace everything in STAGE 2 and 3 inside |
| 467 | the `Dockerfile` with: |
| 468 | |
| 469 | FROM grc.io/distroless/python3-debian11 |
| 470 | |
| 471 | Another case |
| 472 | |
| 473 | |
| 474 | Method 2to |
| 475 | bind-mounted |
| 476 | `netstat`, `tYou our build |
| 477 | process leaves out all the BusyBox utilities that require them. |
| 478 | Although that set includes common tools like `ping`, we |
| 479 | |
| 480 | R@2VU,5: RUNN@2bU,1Q: |
| 481 | |
| 482 | Everything else remains the same as in the distroless Python example |
| 483 | because even AlpineN@2yP,1R: way we set up core Linux |
| 484 | directories like `/etc` and `/tmp` in the absence of any OS imageAs@3it’s about a quarterecause a new release |
| 485 | came , or half |
| 486 | that of the “full” distribution of `nerdctl` and all its dependenciesround to vetting it against our stock |
| 487 | configuration first. |
| 488 | |
| 489 | As for Fossil, it defaults to fetching the same version as the checkout |
| 490 | you’re running the build command from, based on checkin ID. You could |
| 491 | use this to get a release build, for instance\ |
| 492 | our build |
| 493 | process leaves out all the BusyBox utilities that require them. |
| 494 | Although that set includes common tools like `ping`, we foresee no |
| 495 | use that or any of these other elijail��s [risky TH1 docsh user has |
| 496 | their own local. Let’sjailthe image, you |
| 497 | can’t create the actual container from that image since that needs to be |
| 498 | done as root. |
| 499 | |
| 500 | The simple way to deal with this is to bounce the container through a |
| 501 | registry that both users can see, such as [Docker |
| 502 | Hub](https://hub.docker.tag fossil:latest mydockername/fossil:latest |
| 503 | $ podman image push mydockername/fossil:latest |
| 504 | ``` |
| 505 | |
| 506 | That will push the image up to your accound |
| 507 | process leaves out all the BusyBox utilities that require them. |
| 508 | Although that set includes common tools like `ping`, we foresee no |
| 509 | use that or any of these other elided utilities |
| 510 | — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get |
| 511 | fetched in the build step. To get the latest-and-greatest of everything, |
| 512 | you could say\ |
| 513 | trunk \ |
| 514 | --build-arg BBXVER=master . |
| 515 | ``` |
| 516 | |
| 517 | (But don’t, for reasons we will getwe ship was created with and |
| 518 | tested against a specific stable release, that’s the version we pull by |
| 519 | default. It does try to merge the defaults for any new configuration |
| 520 | settings into the stock set, but since it’s possible this will fail, we |
| 521 | don’t blindly update the BusyBox version merely because a new release |
| 522 | came out. Someone needs to get around to vetting it against our stock |
| 523 | configuration first. |
| 524 | |
| 525 | As for Fossil, it defaults to fetching the same version as the checkout |
| 526 | you’re running the build command from, based on checkin ID. You could |
| 527 | use this to get a release build, for instance\ |
| 528 | our build |
| 529 | process leaves out all the BusyBox utilities that require them. |
| 530 | Although that set includes common tools like `ping`, we foresee no |
| 531 | use that or any of these other elided utilities |
| 532 | — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get |
| 533 | fetched in the build step. To get the latest-and-greatest of everything, |
| 534 | you could say\ |
| 535 | trunk \ |
| 536 | it lets you build on a local system that might be a lot faster |
| 537 | than your remote one, as when the remote is a small VPjailAlthough that set includes common tools like `ping`, we foresee no |
| 538 | use that or any of these other elided utilities |
| 539 | — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get |
| 540 | fetched in the build step. To get the latest-and-greatest of everything, |
| 541 | you could say\ |
| 542 | trunk \ |
| 543 | --build-arg BBXVER=master . |
| 544 | ``` |
| 545 | |
| 546 | (But don’t, for reasons we will getwe ship was created with and |
| 547 | tested against a specific stable release, that’s the version we pull by |
| 548 | default. It does try to merge the defaults for any new configuration |
| 549 | settings into the stock set, but since it’s possible this will fail, we |
| 550 | don’t blindly update the BusyBox version merely because a new release |
| 551 | came out. Someone needs to get around to vetting it against our stock |
| 552 | configuration first. |
| 553 | |
| 554 | As for Fossil, it defaults to fetching the same version as the checkout |
| 555 | you’re running the build command from, based on checkin ID. You could |
| 556 | use this to get a release build, for instance\ |
| 557 | alternativeAlthough Podman [bills itself][whatis] as a drop-in replacement for the |
| 558 | `docker` command and everything that sits behind it, some of the tool’s |
| 559 | desis run, as compared to |
| 560 | using Docker. |
| 561 | |
| 562 | The most important of thesour ��s [risky TH1 docs |
| 563 | feature][th1docrisk] along with the Tcl integration feature, which |
| 564 | effectively gives anyone with check-in rights on your repo the ability |
| 565 | to run arbitrary Tcl code on the host when that document is rendered. |
| 566 | The container layer should stop that script |
| 567 | on the host |
| 568 | namespace, but it *can* still make network connections, modify the repo |
| 569 | , and who knows what else//fossil-scm.org/forum/forumpost/42e0c165447Vw@3X~,25L~sx;adviceYou could inject that into |
| 570 | one of s. Because this will |
| 571 | |
| 572 | complicated. Essentially, you replace everything in STAGE 2 and 3 inside |
| 573 | the `Dockerfile` with: |
| 574 | |
| 575 | FROM grc.io/distroless/python3-debian11 |
| 576 | |
| 577 | Another case |
| 578 | |
| 579 | |
| 580 | Method 2to |
| 581 | bind-mounted |
| 582 | `netstat`, `tYou our build |
| 583 | process leaves out all the BusyBox utilities that require them. |
| 584 | Although that set includes common tools like `ping`, we |
| 585 | |
| 586 | R@2VU,5: RUNN@2bU,1Q: |
| 587 | |
| 588 | Everythin (g else remains the same as in the distroless Pytrhon example |
| 589 | because even AlpineN@2yP,1R: way we set up core Linux |
| 590 | directories like `/etc` and `/)”, as systemdIt’s important that the name of the machine you create —in this example — matches tason is, although tsand it will contain. For one[SCGI proxying via nginx][DNT]. For |
| 591 | other use cases, see our collection of [Fossil server configuration |
| 592 | guides][srv], then adjust the command to your local needs. |
| 593 | For another, you will likely have to adjust the ` |
| 594 | in the command. |
| 595 | |
| 596 | W. |
| 597 | |
| 598 | S,ngly diffiemains the same as incert /path/to/my/fullchainhas no option for installneeds for so, the |
| 599 | . Thus,-rune reason is, although this containesurprisingly Fossil server configuration |
| 600 | guides][srv], then adjust the command to your local needs. |
| 601 | For another, you will likely have to adjust the ` |
| 602 | in the command. |
| 603 | |
| 604 | W. |
| 605 | |
| 606 | S,ngly diffiemains the same as incert /path/to/my/fullchainhas no option for installneeds for so, the |
| 607 | . Thus,Copy the container name from the first step to the second. Yours will |
| 608 | almost certainly be named after a different Fossil commit ID.en adjust the command to your local needs. |
| 609 | For another, you will likely have to adjust the ` |
| 610 | in the command. |
| 611 | |
| 612 | W. |
| 613 | |
| 614 | S,ngly diffiemains the same barebones"></a>Bahas no option for installneeds for so, the |
| 615 | . Thus,virtual net |
| 616 | it wants to hide the service entirely. |
| 617 | |
| 618 | Another way to put this is thatthing* of what pped-down by today’s |
| 619 | s` does |
| 620 | despite their superficial similarities. |
| 621 | |
| 622 | For this container, it doesn’t much matter, since it exposes |
| 623 | only a single port, and we do want that one port exposed, one way |
| 624 | or another. Beyond that, weby today’s |
| 625 | standards, it’surprisingly difficulte remains the same as in the distroless Python example |
| 626 | because even AlpineN@2yP,1R: way we set up core Linux |
| 627 | directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot? |
| 628 | |
| 629 | A potentially surprising feature of this container is that it runs |
| 630 | Fossil as root. Sin |
| 631 | to kick in, and a Docker container is a type of über-jail already, you |
| 632 | may be wondering why we bother.I: |
| 633 | |
| 634 | 1. `systemd-nspawn` works best with `machinectl`, but if you haven’t |
| 635 | got `btrfs` available, you run into [trouble](#nspawn-rhel). |
| 636 | |
| 637 | 2. O@760,6: same |
| 638 | h@76d |
| 639 | a strip |
| 640 | image, causing ly difficulte remains the same as in the distroless Python exampleemains the same as in the distroless Python example |
| 641 | because even Al tutorial][medtut].) |
| 642 | |
| 643 | 3. We disable the “private networking” feature since the whole |
| 644 | point of this container is to expose a network service to the |
| 645 | public, one way or another. If you do things the way the defaults |
| 646 | (and thus the official docs) expect, you must push through |
| 647 | [a whole lot of complexity][ndcmp] to re-expose this single |
| 648 | network port. That complexity is justified only if your service |
| 649 | is itself complex, having both privatyou still have options for |
| 650 | running containers that are considerably slimmer, at a high cost to |
| 651 | administration complexity and loss of features. |
| 652 | |
| 653 | Part of the OCI standard is the notion of a “bundle,” being a consistent |
| 654 | way to present a pre-built and configured container to the runtime. |
| 655 | Essentially, it consists of a directory containing a `config.json` file |
| 656 | and a `rootfs/` subdirectory containing the root filesystem image. Many |
| 657 | tools can produce these for you. We’ll show only one method in the first |
| 658 | section below, then reuse that in the following sections. |
| 659 | |
| 660 | |
| 661 | #### 6.3.1 <a id="runc"></a>`runc` |
| 662 | |
| 663 | We mentioned `runc` [above](#nerdctl), but it’s possible to use it |
| 664 | standalone, without `containerd` or its CLI frontend `nerdctl`. You also |
| 665 | lose the build engine, intelligent image layer sharing, image registry |
| 666 | connections, and much more. The plus side is that `runc` alone is |
| 667 | 18 MiB. |
| 668 | |
| 669 | Using it without stable release, that’s the version we pull by |
| 670 | default. It does try to merge the defaults for any new configuration |
| 671 | settings into the stock set, but since it’s possible this will fail, we |
| 672 | don’t blindly update the BusyBox version merely because a new release |
| 673 | came out. Someone needs to get around to vetting it against our stock |
| 674 | configuration first. |
| 675 | |
| 676 | As for Fossil, it defaults to fetching the same version as the checkout |
| 677 | you’re running the build command from, based on checkin ID. You could |
| 678 | use this to get a release build, for instance\ |
| 679 | our build |
| 680 | process leaves out all the BusyBox utilities that require them. |
| 681 | Although that set includes common tools like `ping`, we foresee no |
| 682 | use that or any of these other elided utilities |
| 683 | — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get |
| 684 | fetched in the build step. To get the latest-and-greatest of everything, |
| 685 | you could say\ |
| 686 | trunk \ |
| 687 | it lets you build on a local system that might be a lot faster |
| 688 | than your remote one, as when the remote is a small VPjailAlthough that set includes common tools like `ping`, we foresee no |
| 689 | use that or any of these other elided utilities |
| 690 | — `ether-wake`, `netstat`, `tYou can override the default versions of Fossil and BusyBox that get |
| 691 | fetched in the build step. To get the latest-and-greatest of everything, |
| 692 | you could say\ |
| 693 | trunk \ |
| 694 | --build-arg BBXVER=master . |
| 695 | ``` |
| 696 | |
| 697 | (But don’t, for reasons we will getwe ship was created with and |
| 698 | tested against a specific stable release, that’s the version we pull by |
| 699 | default. It does try to merge the defaults for any new configuration |
| 700 | settings into the stock set, but since it’s possible this will fail, we |
| 701 | don’t blindly update the BusyBox version merely because a new release |
| 702 | came out. Someone needs to get around to vetting it against our stock |
| 703 | configuration first. |
| 704 | |
| 705 | As for Fossil, it defaults to fetching the same version as the checkout |
| 706 | you’re running the build command from, based on checkin ID. You could |
| 707 | use this to get a release build, for instance\ |
| 708 | alternativeAlthough Podman [bills itself][whatis] as a drop-in replacement for the |
| 709 | `docker` command and everything that sits behind it, some of the tool’s |
| 710 | desis run, as compared to |
| 711 | using Docker. |
| 712 | |
| 713 | The most important of thesour ��s [risky TH1 docs |
| 714 | feature][th1docrisk] along with the Tcl integration feature, which |
| 715 | effectively gives anyone with check-in rights on your repo the ability |
| 716 | to run arbitrary Tcl code on the host when that document is rendered. |
| 717 | The container layer should stop that script |
| 718 | on the host |
| 719 | namespace, but it *can* still make network connections, modify the repo |
| 720 | , and who knows what else//fossil-scm.org/forum/forumpost/42e0c165447Vw@3X~,25L~sx;adviceYou could inject that into |
| 721 | one of s. Because this will |
| 722 | |
| 723 | complicated. Essentially, you replace everything in STAGE 2 and 3 inside |
| 724 | the `Dockerfile` with: |
| 725 | |
| 726 | FROM grc.io/distroless/python3-debian11 |
| 727 | |
| 728 | Another case |
| 729 | |
| 730 | |
| 731 | Method 2to |
| 732 | bind-mounted |
| 733 | `netstat`, `tYou our build |
| 734 | process leaves out all the BusyBox utilities that require them. |
| 735 | Although that set includes common tools like `ping`, we |
| 736 | |
| 737 | R@2VU,5: RUNN@2bU,1Q: |
| 738 | |
| 739 | Everythin (g else remains the same as in the distroless Pytrhon example |
| 740 | because even AlpineN@2yP,1R: way we set up core Linux |
| 741 | directories like `/etc` and `/)”, as systemdIt’s important that the name of the machine you create —in this example — matches tason is, although tsand it will contain. For one[SCGI proxying via nginx][DNT]. For |
| 742 | other use cases, see our collection of [Fossil server configuration |
| 743 | guides][srv], then adjust the command to your local needs. |
| 744 | For another, you will likely have to adjust the ` |
| 745 | in the command. |
| 746 | |
| 747 | W. |
| 748 | |
| 749 | S,ngly diffiemains the same as incert /path/to/my/fullchainhas no option for installneeds for so, the |
| 750 | . Thus,-rune reason is, although this containesurprisingly Fossil server configuration |
| 751 | guides][srv], then adjust the command to your local needs. |
| 752 | For another, you will likely have to adjust the ` |
| 753 | in the command. |
| 754 | |
| 755 | W. |
| 756 | |
| 757 | S,ngly diffiemains the same as incert /path/to/my/fullchainhas no option for installneeds for so, the |
| 758 | . Thus,Copy the container name from the first step to the second. Yours will |
| 759 | almost certainly be named after a different Fossil commit ID.en adjust the command to your local needs. |
| 760 | For another, you will likely have to adjust the ` |
| 761 | in the command. |
| 762 | |
| 763 | W. |
| 764 | |
| 765 | S,ngly diffiemains the same as incert /path/to/my/fullchainhas no option for installneeds for so, the |
| 766 | . Thus,virtual net |
| 767 | it wants to hide the service entirely. |
| 768 | |
| 769 | Another way to put this is thatthing* of what pped-down by today’s |
| 770 | s` does |
| 771 | despite their superficial similarities. |
| 772 | |
| 773 | For this container, it doesn’t much matter, since it exposes |
| 774 | only a single port, and we do want that one port exposed, one way |
| 775 | or another. Beyond that, weby today’s |
| 776 | standards, it’surprisingly difficulte remains the same as in the distroless Python example |
| 777 | because even AlpineN@2yP,1R: way we set up core Linux |
| 778 | directories like `/etc` and `/tmp` in the absence of any OS imageAs@3LR,L@3XT,f:github.com/GoogleContainerTools/distrolesChroot? |
| 779 | |
| 780 | A potentially surprising feature of this container is that it runs |
| 781 | Fossil as root. Sin |
| 782 | to kick in, and a Docker container is a type of über-jail already, you |
| 783 | may be wondering why we bother.I: |
| 784 | |
| 785 | 1. `systemd-nspawn` works best with `machinectl`, but if you haven’t |
| 786 | , you’ll get the old versionstages, it isn’t redundant; the second one |
| 787 | starts fresh, allowing us to copy in only what we absolutely need from |
| 788 | AWKbecausewe haveRelative to, the change from “`alpmeans we have no BusyBox environment to execute |
| 789 | the `RUN` command with, so we have to copy the `busybox.static` binary |
| 790 | in from STAGE 1 and install |
| 791 | the stock does.(^This is the main reason we change `USER` |
| 792 | temporarily to `root` here.) There are a few other steps required to |
| 793 | avoid causing a conflict between our previously bare-bones “OS” layer |
| 794 | and what the is hassleinTcl popular, we have |
| 795 | that int |
+71
-50
| --- www/fossil-v-git.wiki | ||
| +++ www/fossil-v-git.wiki | ||
| @@ -113,36 +113,41 @@ | ||
| 113 | 113 | [/help?cmd=ui|UI], |
| 114 | 114 | protected by [./caps/ | a fine-grained role-based |
| 115 | 115 | access control system]. |
| 116 | 116 | These additional capabilities are available for Git as 3rd-party |
| 117 | 117 | add-ons, but with Fossil they are integrated into |
| 118 | -the design. One way to describe Fossil is that it is | |
| 118 | +the design, to the point that it approximates | |
| 119 | 119 | "[https://github.com/ | GitHub]-in-a-box." |
| 120 | 120 | |
| 121 | -Fossil can do operations over all local repo clones and check-out | |
| 122 | -directories with a single command. For example, Fossil lets you say | |
| 123 | -"<tt>fossil all sync</tt>" on a laptop prior to taking it off the network | |
| 124 | -hosting those repos. You can sync up to all of the private repos on your | |
| 125 | -company network plus those public Internet-hosted repos you use. Whether | |
| 126 | -going out for a working lunch or on a transoceanic airplane trip, one | |
| 127 | -command gets you in sync. This works with several other Fossil | |
| 128 | -sub-commands, such as "<tt>fossil all changes</tt>" to get a list of files | |
| 121 | +Even if you only want straight version control, Fossil has affordances | |
| 122 | +not available in Git. | |
| 123 | + | |
| 124 | +For instance, Fossil can do operations over all local repo clones and | |
| 125 | +check-out directories with a single command. You can say "<tt>fossil | |
| 126 | +all sync</tt>" on a laptop prior to taking it off the network hosting | |
| 127 | +those repos, as before going on a trip. It doesn't matter if those | |
| 128 | +repos are private and restricted to your company network or public | |
| 129 | +Internet-hosted repos, you get synced up with everything you need while | |
| 130 | +off-network. | |
| 131 | + | |
| 132 | +You get the same capability with several other Fossil | |
| 133 | +sub-commands as well, such as "<tt>fossil all changes</tt>" to get a list of files | |
| 129 | 134 | that you forgot to commit prior to the end of your working day, across |
| 130 | 135 | all repos. |
| 131 | 136 | |
| 132 | 137 | Whenever Fossil is told to modify the local checkout in some destructive |
| 133 | 138 | way ([/help?cmd=rm|fossil rm], [/help?cmd=update|fossil update], |
| 134 | 139 | [/help?cmd=revert|fossil revert], etc.) Fossil remembers the prior state |
| 135 | 140 | and is able to return the check-out directory to that state with a |
| 136 | -<tt>fossil undo</tt> command. You cannot undo a commit in Fossil | |
| 137 | -([#history | on purpose!]) but as long as the change remains confined to | |
| 141 | +<tt>fossil undo</tt> command. While you cannot undo a commit in Fossil | |
| 142 | +— [#history | on purpose!] — as long as the change remains confined to | |
| 138 | 143 | the local check-out directory only, Fossil makes undo |
| 139 | 144 | [https://git-scm.com/book/en/v2/Git-Basics-Undoing-Things|easier than in |
| 140 | 145 | Git]. |
| 141 | 146 | |
| 142 | -For developers who choose to self-host projects (rather than using a | |
| 143 | -3rd-party service such as GitHub) Fossil is much easier to set up, since | |
| 147 | +For developers who choose to self-host projects rather than rely on a | |
| 148 | +3rd-party service such as GitHub, Fossil is much easier to set up: | |
| 144 | 149 | the stand-alone Fossil executable together with a [./server/any/cgi.md|2-line CGI script] |
| 145 | 150 | suffice to instantiate a full-featured developer website. To accomplish |
| 146 | 151 | the same using Git requires locating, installing, configuring, integrating, |
| 147 | 152 | and managing a wide assortment of separate tools. Standing up a developer |
| 148 | 153 | website using Fossil can be done in minutes, whereas doing the same using |
| @@ -165,27 +170,39 @@ | ||
| 165 | 170 | so that most people end up installing it via some kind of package |
| 166 | 171 | manager, simply because the creation of complicated binary packages is |
| 167 | 172 | best delegated to people skilled in their creation. Normal Git users are |
| 168 | 173 | not expected to build Git from source and install it themselves. |
| 169 | 174 | |
| 170 | -Fossil is a single self-contained stand-alone executable which by default | |
| 171 | -depends only on common platform libraries. You can statically link | |
| 172 | -to get an executable with no external dependencies at all — a useful | |
| 173 | -feature for running inside a restrictive | |
| 174 | -[https://en.wikipedia.org/wiki/Chroot|chroot jail]. | |
| 175 | - | |
| 176 | -The precompiled Fossil binaries are delivered as just a single | |
| 177 | -executable. The precompiled Windows deliveries are just a ZIP archive | |
| 175 | +Fossil is a single self-contained stand-alone executable which | |
| 176 | +depends only on common platform libraries in its default configuration. | |
| 177 | +To install one of [https://fossil-scm.org/home/uv/download.html | our | |
| 178 | +precompiled binaries], unpack the executable from the archive and put it | |
| 179 | +somewhere in your <tt>PATH</tt>. To uninstall it, delete the executable. | |
| 180 | + | |
| 181 | +This policy is particularly useful when running Fossil inside a | |
| 182 | +restrictive container, anything from [./chroot.md | classic chroot | |
| 183 | +jails] to modern [https://en.wikipedia.org/wiki/OS-level_virtualization | |
| 184 | +| OS-level virtualization mechanisms] such as | |
| 185 | +[https://en.wikipedia.org/wiki/Docker_(software) | Docker]. By using | |
| 186 | +executable compression, our | |
| 187 | +[/file?name=Dockerfile.in&ci=trunk | stock <tt>Dockerfile</tt>] | |
| 188 | +creates a container that's under 4 MiB on 64-bit Linux, including | |
| 189 | +a capable [https://www.busybox.net/ | Busybox] environment for live | |
| 190 | +debugging of the container's innards. | |
| 191 | + | |
| 192 | +Modern Linux systems tend to make full static linking | |
| 193 | +[https://stackoverflow.com/questions/3430400/linux-static-linking-is-dead | |
| 194 | +| difficult], but our official executables do statically link to OpenSSL | |
| 195 | +to remove a version dependency, resulting in an executable that's around | |
| 196 | +6 MiB, depending on the platform. ([Release Build How-To | Details].) | |
| 197 | +The result is dependent only upon widespread platform libraries with | |
| 198 | +stable ABIs such as glibc, zlib, etc. | |
| 199 | + | |
| 200 | +Full static linking is easier on Windows, so our precompiled Windows | |
| 201 | +binaries are just a ZIP archive | |
| 178 | 202 | containing only "<tt>fossil.exe</tt>". There is no "<tt>setup.exe</tt>" |
| 179 | -to run. Linux and Mac precompiled binaries are a tarball containing | |
| 180 | -just the "<tt>fossil</tt>" executable. To install, just put the | |
| 181 | -executable on your PATH. To uninstall, just delete the executable. | |
| 182 | -To upgrade (or downgrade) simply replace the executable. | |
| 183 | - | |
| 184 | -A typical Fossil executable is between 5 and 7 megabytes uncompressed | |
| 185 | -(as of 2020-12-12), | |
| 186 | -assuming that the executable is statically linked against OpenSSL. | |
| 203 | +to run. | |
| 187 | 204 | |
| 188 | 205 | Fossil is easy to build from sources. Just run |
| 189 | 206 | "<tt>./configure && make</tt>" on POSIX systems and |
| 190 | 207 | "<tt>nmake /f Makefile.msc</tt>" on Windows. |
| 191 | 208 | |
| @@ -208,18 +225,20 @@ | ||
| 208 | 225 | matters is effectiveness and efficiency. We believe Fossil achieves |
| 209 | 226 | this. |
| 210 | 227 | |
| 211 | 228 | The above size comparisons aren't apples-to-apples anyway. We've |
| 212 | 229 | compared the size of Fossil with all of its [#features | many built-in |
| 213 | -features] to a fairly minimal Git installation. You must add a lot | |
| 214 | -of third-party | |
| 215 | -software to Git to give it a Fossil-equivalent feature set. Consider | |
| 216 | -[https://about.gitlab.com/|GitLab], a third-party extension to Git | |
| 217 | -wrapping it in many features, making it roughly Fossil-equivalent, | |
| 230 | +features] to a fairly minimal Git installation. You must add a lot of | |
| 231 | +third-party software to Git to give it a Fossil-equivalent feature set. | |
| 232 | +Consider [https://about.gitlab.com/|GitLab], a third-party extension to | |
| 233 | +Git wrapping it in many features, making it roughly Fossil-equivalent, | |
| 218 | 234 | though [https://docs.gitlab.com/ee/install/requirements.html|much more |
| 219 | -resource hungry] and hence more costly to run than the equivalent | |
| 220 | -Fossil setup. GitLab's basic requirements are easy to accept when you're dedicating | |
| 235 | +resource hungry] and hence more costly to run than the equivalent Fossil | |
| 236 | +setup. [https://hub.docker.com/r/gitlab/gitlab-ce/ | The official GitLab | |
| 237 | +Community Edition container] currently clocks in at 2.66 GiB! | |
| 238 | + | |
| 239 | +GitLab's requirements are easy to accept when you're dedicating | |
| 221 | 240 | a local rack server or blade to it, since its minimum requirements are |
| 222 | 241 | more or less a description of the smallest |
| 223 | 242 | thing you could call a "server" these days, but when you go to host that |
| 224 | 243 | in the cloud, you can expect to pay about 8 times as much to comfortably host |
| 225 | 244 | GitLab as for Fossil.³ This difference is largely due to basic |
| @@ -267,11 +286,11 @@ | ||
| 267 | 286 | Leaf check-ins in Git that lack a "ref" become "detached," making them |
| 268 | 287 | difficult to locate and subject to garbage collection. This |
| 269 | 288 | [http://gitfaq.org/articles/what-is-a-detached-head.html|detached head |
| 270 | 289 | state] problem has caused grief for |
| 271 | 290 | [https://www.google.com/search?q=git+detached+head+state | many |
| 272 | -of Git users]. With | |
| 291 | +Git users]. With | |
| 273 | 292 | Fossil, detached heads are simply impossible because we can always find |
| 274 | 293 | our way back into the Merkle tree using one or more of the relations |
| 275 | 294 | in the SQL database. |
| 276 | 295 | |
| 277 | 296 | The SQL query capabilities of Fossil make it easier to track the |
| @@ -287,16 +306,16 @@ | ||
| 287 | 306 | walk the data and compute the result. And since that is a lot more |
| 288 | 307 | work, the question is seldom asked. |
| 289 | 308 | |
| 290 | 309 | The ease of querying Fossil data using SQL means that status or |
| 291 | 310 | history information about the project under management is easier |
| 292 | -to obtain. And being easier means that it is more likely to happen. | |
| 311 | +to obtain. Being easier means that it is more likely to happen. | |
| 293 | 312 | Fossil reports tend to be more detailed and useful. |
| 294 | -Consider the [/timeline?c=6df7a853ec16865b|this Fossil timeline] | |
| 295 | -compared to its | |
| 296 | -[https://github.com/drhsqlite/fossil-mirror/commits/master?after=f720c106d297ca1f61bccb30c5c191b88a626d01+34|its | |
| 297 | -closest equivalent in GitHub]. Judge for yourself: Which of those | |
| 313 | +Compare [/timeline?c=6df7a853ec16865b|this Fossil timeline] | |
| 314 | +to | |
| 315 | +[https://github.com/drhsqlite/fossil-mirror/commits/master?after=f720c106d297ca1f61bccb30c5c191b88a626d01+34 | | |
| 316 | +its closest equivalent in GitHub]. Judge for yourself: which of those | |
| 298 | 317 | reports is more useful to a developer trying to understand what happened? |
| 299 | 318 | |
| 300 | 319 | The bottom line is that even though Fossil and Git are built around |
| 301 | 320 | the same low-level data structure, the use of SQL |
| 302 | 321 | to query this data makes the data more accessible in Fossil, resulting |
| @@ -513,21 +532,21 @@ | ||
| 513 | 532 | contexts, such as in the [https://en.wikipedia.org/wiki/OODA_loop | OODA |
| 514 | 533 | loop] concept. |
| 515 | 534 | Committing your changes to private branches in order to delay a public |
| 516 | 535 | push to the parent repo increases the size of your collaborators' |
| 517 | 536 | control loops, either causing them to slow their work in order to safely |
| 518 | -react to your work, or to overcorrect in response to each change. | |
| 537 | +react to your work, or to over-correct in response to each change. | |
| 519 | 538 | |
| 520 | 539 | Each DVCS can be used in the opposite style, but doing so works against |
| 521 | 540 | their low-friction paths. |
| 522 | 541 | |
| 523 | 542 | |
| 524 | 543 | <h4 id="scale">2.5.2 Scale</h4> |
| 525 | 544 | |
| 526 | 545 | The Linux kernel has a far bigger developer community than that of |
| 527 | 546 | SQLite: there are thousands and thousands of contributors to Linux, most |
| 528 | -of whom do not know each others names. These thousands are responsible | |
| 547 | +of whom do not know each other's names. These thousands are responsible | |
| 529 | 548 | for producing roughly 89× more code than is in SQLite. (10.7 |
| 530 | 549 | [https://en.wikipedia.org/wiki/Source_lines_of_code|MLOC] vs. 0.12 MLOC |
| 531 | 550 | according to [https://dwheeler.com/sloccount/|SLOCCount].) The Linux |
| 532 | 551 | kernel and its development process were already uncommonly large back in |
| 533 | 552 | 2005 when Git was designed, specifically to support the consequences of |
| @@ -570,13 +589,13 @@ | ||
| 570 | 589 | |
| 571 | 590 | This difference in emphasis arises from the different purposes of |
| 572 | 591 | the two systems. Git focuses on individual branches, because that |
| 573 | 592 | is exactly what you want for a highly-distributed bazaar-style project |
| 574 | 593 | such as Linux. Linus Torvalds does not want to see every check-in |
| 575 | -by every contributor to Linux, as such extreme visibility does not scale | |
| 576 | -well. But Fossil was written for the cathedral-style SQLite project | |
| 577 | -with just a handful of active committers. Seeing all | |
| 594 | +by every contributor to Linux: such extreme visibility does not scale | |
| 595 | +well. Contrast Fossil, which was written for the cathedral-style SQLite project | |
| 596 | +and its handful of active committers. Seeing all | |
| 578 | 597 | changes on all branches all at once helps keep the whole team |
| 579 | 598 | up-to-date with what everybody else is doing, resulting in a more |
| 580 | 599 | tightly focused and cohesive implementation. |
| 581 | 600 | |
| 582 | 601 | |
| @@ -639,12 +658,14 @@ | ||
| 639 | 658 | away in a working directory, then get a call from a customer requiring |
| 640 | 659 | that you switch to a stable branch to answer questions in terms of the |
| 641 | 660 | version that customer is running. You don't want to stop the test in |
| 642 | 661 | order to switch your lone working directory to the stable branch. |
| 643 | 662 | |
| 644 | -Disk space is cheap. Having several working directories, each with its | |
| 645 | -own local state, makes switching versions cheap and fast. Plus, | |
| 663 | +Disk space is cheap. Having several working directories — each with its | |
| 664 | +own local state — makes switching versions cheap and fast. | |
| 665 | + | |
| 666 | +Plus, | |
| 646 | 667 | <tt>cd</tt> is faster to type than <tt>git checkout</tt> or <tt>fossil |
| 647 | 668 | update</tt>. |
| 648 | 669 | |
| 649 | 670 | |
| 650 | 671 | <h3 id="history">2.7 What you should have done vs. What you actually did</h3> |
| @@ -663,11 +684,11 @@ | ||
| 663 | 684 | Fossil, in contrast, puts more emphasis on recording exactly what happened, |
| 664 | 685 | including all of the messy errors, dead-ends, experimental branches, and |
| 665 | 686 | so forth. One might argue that this |
| 666 | 687 | makes the history of a Fossil project "messy," but another point of view |
| 667 | 688 | is that this makes the history "accurate." In actual practice, the |
| 668 | -superior reporting tools available in Fossil mean that the added "mess" | |
| 689 | +superior reporting tools available in Fossil mean that this incidental mess | |
| 669 | 690 | is not a factor. |
| 670 | 691 | |
| 671 | 692 | Like Git, Fossil has an [/help?cmd=amend|amend command] for modifying |
| 672 | 693 | prior commits, but unlike in Git, this works not by replacing data in |
| 673 | 694 | the repository, but by adding a correction record to the repository that |
| 674 | 695 |
| --- www/fossil-v-git.wiki | |
| +++ www/fossil-v-git.wiki | |
| @@ -113,36 +113,41 @@ | |
| 113 | [/help?cmd=ui|UI], |
| 114 | protected by [./caps/ | a fine-grained role-based |
| 115 | access control system]. |
| 116 | These additional capabilities are available for Git as 3rd-party |
| 117 | add-ons, but with Fossil they are integrated into |
| 118 | the design. One way to describe Fossil is that it is |
| 119 | "[https://github.com/ | GitHub]-in-a-box." |
| 120 | |
| 121 | Fossil can do operations over all local repo clones and check-out |
| 122 | directories with a single command. For example, Fossil lets you say |
| 123 | "<tt>fossil all sync</tt>" on a laptop prior to taking it off the network |
| 124 | hosting those repos. You can sync up to all of the private repos on your |
| 125 | company network plus those public Internet-hosted repos you use. Whether |
| 126 | going out for a working lunch or on a transoceanic airplane trip, one |
| 127 | command gets you in sync. This works with several other Fossil |
| 128 | sub-commands, such as "<tt>fossil all changes</tt>" to get a list of files |
| 129 | that you forgot to commit prior to the end of your working day, across |
| 130 | all repos. |
| 131 | |
| 132 | Whenever Fossil is told to modify the local checkout in some destructive |
| 133 | way ([/help?cmd=rm|fossil rm], [/help?cmd=update|fossil update], |
| 134 | [/help?cmd=revert|fossil revert], etc.) Fossil remembers the prior state |
| 135 | and is able to return the check-out directory to that state with a |
| 136 | <tt>fossil undo</tt> command. You cannot undo a commit in Fossil |
| 137 | ([#history | on purpose!]) but as long as the change remains confined to |
| 138 | the local check-out directory only, Fossil makes undo |
| 139 | [https://git-scm.com/book/en/v2/Git-Basics-Undoing-Things|easier than in |
| 140 | Git]. |
| 141 | |
| 142 | For developers who choose to self-host projects (rather than using a |
| 143 | 3rd-party service such as GitHub) Fossil is much easier to set up, since |
| 144 | the stand-alone Fossil executable together with a [./server/any/cgi.md|2-line CGI script] |
| 145 | suffice to instantiate a full-featured developer website. To accomplish |
| 146 | the same using Git requires locating, installing, configuring, integrating, |
| 147 | and managing a wide assortment of separate tools. Standing up a developer |
| 148 | website using Fossil can be done in minutes, whereas doing the same using |
| @@ -165,27 +170,39 @@ | |
| 165 | so that most people end up installing it via some kind of package |
| 166 | manager, simply because the creation of complicated binary packages is |
| 167 | best delegated to people skilled in their creation. Normal Git users are |
| 168 | not expected to build Git from source and install it themselves. |
| 169 | |
| 170 | Fossil is a single self-contained stand-alone executable which by default |
| 171 | depends only on common platform libraries. You can statically link |
| 172 | to get an executable with no external dependencies at all — a useful |
| 173 | feature for running inside a restrictive |
| 174 | [https://en.wikipedia.org/wiki/Chroot|chroot jail]. |
| 175 | |
| 176 | The precompiled Fossil binaries are delivered as just a single |
| 177 | executable. The precompiled Windows deliveries are just a ZIP archive |
| 178 | containing only "<tt>fossil.exe</tt>". There is no "<tt>setup.exe</tt>" |
| 179 | to run. Linux and Mac precompiled binaries are a tarball containing |
| 180 | just the "<tt>fossil</tt>" executable. To install, just put the |
| 181 | executable on your PATH. To uninstall, just delete the executable. |
| 182 | To upgrade (or downgrade) simply replace the executable. |
| 183 | |
| 184 | A typical Fossil executable is between 5 and 7 megabytes uncompressed |
| 185 | (as of 2020-12-12), |
| 186 | assuming that the executable is statically linked against OpenSSL. |
| 187 | |
| 188 | Fossil is easy to build from sources. Just run |
| 189 | "<tt>./configure && make</tt>" on POSIX systems and |
| 190 | "<tt>nmake /f Makefile.msc</tt>" on Windows. |
| 191 | |
| @@ -208,18 +225,20 @@ | |
| 208 | matters is effectiveness and efficiency. We believe Fossil achieves |
| 209 | this. |
| 210 | |
| 211 | The above size comparisons aren't apples-to-apples anyway. We've |
| 212 | compared the size of Fossil with all of its [#features | many built-in |
| 213 | features] to a fairly minimal Git installation. You must add a lot |
| 214 | of third-party |
| 215 | software to Git to give it a Fossil-equivalent feature set. Consider |
| 216 | [https://about.gitlab.com/|GitLab], a third-party extension to Git |
| 217 | wrapping it in many features, making it roughly Fossil-equivalent, |
| 218 | though [https://docs.gitlab.com/ee/install/requirements.html|much more |
| 219 | resource hungry] and hence more costly to run than the equivalent |
| 220 | Fossil setup. GitLab's basic requirements are easy to accept when you're dedicating |
| 221 | a local rack server or blade to it, since its minimum requirements are |
| 222 | more or less a description of the smallest |
| 223 | thing you could call a "server" these days, but when you go to host that |
| 224 | in the cloud, you can expect to pay about 8 times as much to comfortably host |
| 225 | GitLab as for Fossil.³ This difference is largely due to basic |
| @@ -267,11 +286,11 @@ | |
| 267 | Leaf check-ins in Git that lack a "ref" become "detached," making them |
| 268 | difficult to locate and subject to garbage collection. This |
| 269 | [http://gitfaq.org/articles/what-is-a-detached-head.html|detached head |
| 270 | state] problem has caused grief for |
| 271 | [https://www.google.com/search?q=git+detached+head+state | many |
| 272 | of Git users]. With |
| 273 | Fossil, detached heads are simply impossible because we can always find |
| 274 | our way back into the Merkle tree using one or more of the relations |
| 275 | in the SQL database. |
| 276 | |
| 277 | The SQL query capabilities of Fossil make it easier to track the |
| @@ -287,16 +306,16 @@ | |
| 287 | walk the data and compute the result. And since that is a lot more |
| 288 | work, the question is seldom asked. |
| 289 | |
| 290 | The ease of querying Fossil data using SQL means that status or |
| 291 | history information about the project under management is easier |
| 292 | to obtain. And being easier means that it is more likely to happen. |
| 293 | Fossil reports tend to be more detailed and useful. |
| 294 | Consider the [/timeline?c=6df7a853ec16865b|this Fossil timeline] |
| 295 | compared to its |
| 296 | [https://github.com/drhsqlite/fossil-mirror/commits/master?after=f720c106d297ca1f61bccb30c5c191b88a626d01+34|its |
| 297 | closest equivalent in GitHub]. Judge for yourself: Which of those |
| 298 | reports is more useful to a developer trying to understand what happened? |
| 299 | |
| 300 | The bottom line is that even though Fossil and Git are built around |
| 301 | the same low-level data structure, the use of SQL |
| 302 | to query this data makes the data more accessible in Fossil, resulting |
| @@ -513,21 +532,21 @@ | |
| 513 | contexts, such as in the [https://en.wikipedia.org/wiki/OODA_loop | OODA |
| 514 | loop] concept. |
| 515 | Committing your changes to private branches in order to delay a public |
| 516 | push to the parent repo increases the size of your collaborators' |
| 517 | control loops, either causing them to slow their work in order to safely |
| 518 | react to your work, or to overcorrect in response to each change. |
| 519 | |
| 520 | Each DVCS can be used in the opposite style, but doing so works against |
| 521 | their low-friction paths. |
| 522 | |
| 523 | |
| 524 | <h4 id="scale">2.5.2 Scale</h4> |
| 525 | |
| 526 | The Linux kernel has a far bigger developer community than that of |
| 527 | SQLite: there are thousands and thousands of contributors to Linux, most |
| 528 | of whom do not know each others names. These thousands are responsible |
| 529 | for producing roughly 89× more code than is in SQLite. (10.7 |
| 530 | [https://en.wikipedia.org/wiki/Source_lines_of_code|MLOC] vs. 0.12 MLOC |
| 531 | according to [https://dwheeler.com/sloccount/|SLOCCount].) The Linux |
| 532 | kernel and its development process were already uncommonly large back in |
| 533 | 2005 when Git was designed, specifically to support the consequences of |
| @@ -570,13 +589,13 @@ | |
| 570 | |
| 571 | This difference in emphasis arises from the different purposes of |
| 572 | the two systems. Git focuses on individual branches, because that |
| 573 | is exactly what you want for a highly-distributed bazaar-style project |
| 574 | such as Linux. Linus Torvalds does not want to see every check-in |
| 575 | by every contributor to Linux, as such extreme visibility does not scale |
| 576 | well. But Fossil was written for the cathedral-style SQLite project |
| 577 | with just a handful of active committers. Seeing all |
| 578 | changes on all branches all at once helps keep the whole team |
| 579 | up-to-date with what everybody else is doing, resulting in a more |
| 580 | tightly focused and cohesive implementation. |
| 581 | |
| 582 | |
| @@ -639,12 +658,14 @@ | |
| 639 | away in a working directory, then get a call from a customer requiring |
| 640 | that you switch to a stable branch to answer questions in terms of the |
| 641 | version that customer is running. You don't want to stop the test in |
| 642 | order to switch your lone working directory to the stable branch. |
| 643 | |
| 644 | Disk space is cheap. Having several working directories, each with its |
| 645 | own local state, makes switching versions cheap and fast. Plus, |
| 646 | <tt>cd</tt> is faster to type than <tt>git checkout</tt> or <tt>fossil |
| 647 | update</tt>. |
| 648 | |
| 649 | |
| 650 | <h3 id="history">2.7 What you should have done vs. What you actually did</h3> |
| @@ -663,11 +684,11 @@ | |
| 663 | Fossil, in contrast, puts more emphasis on recording exactly what happened, |
| 664 | including all of the messy errors, dead-ends, experimental branches, and |
| 665 | so forth. One might argue that this |
| 666 | makes the history of a Fossil project "messy," but another point of view |
| 667 | is that this makes the history "accurate." In actual practice, the |
| 668 | superior reporting tools available in Fossil mean that the added "mess" |
| 669 | is not a factor. |
| 670 | |
| 671 | Like Git, Fossil has an [/help?cmd=amend|amend command] for modifying |
| 672 | prior commits, but unlike in Git, this works not by replacing data in |
| 673 | the repository, but by adding a correction record to the repository that |
| 674 |
| --- www/fossil-v-git.wiki | |
| +++ www/fossil-v-git.wiki | |
| @@ -113,36 +113,41 @@ | |
| 113 | [/help?cmd=ui|UI], |
| 114 | protected by [./caps/ | a fine-grained role-based |
| 115 | access control system]. |
| 116 | These additional capabilities are available for Git as 3rd-party |
| 117 | add-ons, but with Fossil they are integrated into |
| 118 | the design, to the point that it approximates |
| 119 | "[https://github.com/ | GitHub]-in-a-box." |
| 120 | |
| 121 | Even if you only want straight version control, Fossil has affordances |
| 122 | not available in Git. |
| 123 | |
| 124 | For instance, Fossil can do operations over all local repo clones and |
| 125 | check-out directories with a single command. You can say "<tt>fossil |
| 126 | all sync</tt>" on a laptop prior to taking it off the network hosting |
| 127 | those repos, as before going on a trip. It doesn't matter if those |
| 128 | repos are private and restricted to your company network or public |
| 129 | Internet-hosted repos, you get synced up with everything you need while |
| 130 | off-network. |
| 131 | |
| 132 | You get the same capability with several other Fossil |
| 133 | sub-commands as well, such as "<tt>fossil all changes</tt>" to get a list of files |
| 134 | that you forgot to commit prior to the end of your working day, across |
| 135 | all repos. |
| 136 | |
| 137 | Whenever Fossil is told to modify the local checkout in some destructive |
| 138 | way ([/help?cmd=rm|fossil rm], [/help?cmd=update|fossil update], |
| 139 | [/help?cmd=revert|fossil revert], etc.) Fossil remembers the prior state |
| 140 | and is able to return the check-out directory to that state with a |
| 141 | <tt>fossil undo</tt> command. While you cannot undo a commit in Fossil |
| 142 | — [#history | on purpose!] — as long as the change remains confined to |
| 143 | the local check-out directory only, Fossil makes undo |
| 144 | [https://git-scm.com/book/en/v2/Git-Basics-Undoing-Things|easier than in |
| 145 | Git]. |
| 146 | |
| 147 | For developers who choose to self-host projects rather than rely on a |
| 148 | 3rd-party service such as GitHub, Fossil is much easier to set up: |
| 149 | the stand-alone Fossil executable together with a [./server/any/cgi.md|2-line CGI script] |
| 150 | suffice to instantiate a full-featured developer website. To accomplish |
| 151 | the same using Git requires locating, installing, configuring, integrating, |
| 152 | and managing a wide assortment of separate tools. Standing up a developer |
| 153 | website using Fossil can be done in minutes, whereas doing the same using |
| @@ -165,27 +170,39 @@ | |
| 170 | so that most people end up installing it via some kind of package |
| 171 | manager, simply because the creation of complicated binary packages is |
| 172 | best delegated to people skilled in their creation. Normal Git users are |
| 173 | not expected to build Git from source and install it themselves. |
| 174 | |
| 175 | Fossil is a single self-contained stand-alone executable which |
| 176 | depends only on common platform libraries in its default configuration. |
| 177 | To install one of [https://fossil-scm.org/home/uv/download.html | our |
| 178 | precompiled binaries], unpack the executable from the archive and put it |
| 179 | somewhere in your <tt>PATH</tt>. To uninstall it, delete the executable. |
| 180 | |
| 181 | This policy is particularly useful when running Fossil inside a |
| 182 | restrictive container, anything from [./chroot.md | classic chroot |
| 183 | jails] to modern [https://en.wikipedia.org/wiki/OS-level_virtualization |
| 184 | | OS-level virtualization mechanisms] such as |
| 185 | [https://en.wikipedia.org/wiki/Docker_(software) | Docker]. By using |
| 186 | executable compression, our |
| 187 | [/file?name=Dockerfile.in&ci=trunk | stock <tt>Dockerfile</tt>] |
| 188 | creates a container that's under 4 MiB on 64-bit Linux, including |
| 189 | a capable [https://www.busybox.net/ | Busybox] environment for live |
| 190 | debugging of the container's innards. |
| 191 | |
| 192 | Modern Linux systems tend to make full static linking |
| 193 | [https://stackoverflow.com/questions/3430400/linux-static-linking-is-dead |
| 194 | | difficult], but our official executables do statically link to OpenSSL |
| 195 | to remove a version dependency, resulting in an executable that's around |
| 196 | 6 MiB, depending on the platform. ([Release Build How-To | Details].) |
| 197 | The result is dependent only upon widespread platform libraries with |
| 198 | stable ABIs such as glibc, zlib, etc. |
| 199 | |
| 200 | Full static linking is easier on Windows, so our precompiled Windows |
| 201 | binaries are just a ZIP archive |
| 202 | containing only "<tt>fossil.exe</tt>". There is no "<tt>setup.exe</tt>" |
| 203 | to run. |
| 204 | |
| 205 | Fossil is easy to build from sources. Just run |
| 206 | "<tt>./configure && make</tt>" on POSIX systems and |
| 207 | "<tt>nmake /f Makefile.msc</tt>" on Windows. |
| 208 | |
| @@ -208,18 +225,20 @@ | |
| 225 | matters is effectiveness and efficiency. We believe Fossil achieves |
| 226 | this. |
| 227 | |
| 228 | The above size comparisons aren't apples-to-apples anyway. We've |
| 229 | compared the size of Fossil with all of its [#features | many built-in |
| 230 | features] to a fairly minimal Git installation. You must add a lot of |
| 231 | third-party software to Git to give it a Fossil-equivalent feature set. |
| 232 | Consider [https://about.gitlab.com/|GitLab], a third-party extension to |
| 233 | Git wrapping it in many features, making it roughly Fossil-equivalent, |
| 234 | though [https://docs.gitlab.com/ee/install/requirements.html|much more |
| 235 | resource hungry] and hence more costly to run than the equivalent Fossil |
| 236 | setup. [https://hub.docker.com/r/gitlab/gitlab-ce/ | The official GitLab |
| 237 | Community Edition container] currently clocks in at 2.66 GiB! |
| 238 | |
| 239 | GitLab's requirements are easy to accept when you're dedicating |
| 240 | a local rack server or blade to it, since its minimum requirements are |
| 241 | more or less a description of the smallest |
| 242 | thing you could call a "server" these days, but when you go to host that |
| 243 | in the cloud, you can expect to pay about 8 times as much to comfortably host |
| 244 | GitLab as for Fossil.³ This difference is largely due to basic |
| @@ -267,11 +286,11 @@ | |
| 286 | Leaf check-ins in Git that lack a "ref" become "detached," making them |
| 287 | difficult to locate and subject to garbage collection. This |
| 288 | [http://gitfaq.org/articles/what-is-a-detached-head.html|detached head |
| 289 | state] problem has caused grief for |
| 290 | [https://www.google.com/search?q=git+detached+head+state | many |
| 291 | Git users]. With |
| 292 | Fossil, detached heads are simply impossible because we can always find |
| 293 | our way back into the Merkle tree using one or more of the relations |
| 294 | in the SQL database. |
| 295 | |
| 296 | The SQL query capabilities of Fossil make it easier to track the |
| @@ -287,16 +306,16 @@ | |
| 306 | walk the data and compute the result. And since that is a lot more |
| 307 | work, the question is seldom asked. |
| 308 | |
| 309 | The ease of querying Fossil data using SQL means that status or |
| 310 | history information about the project under management is easier |
| 311 | to obtain. Being easier means that it is more likely to happen. |
| 312 | Fossil reports tend to be more detailed and useful. |
| 313 | Compare [/timeline?c=6df7a853ec16865b|this Fossil timeline] |
| 314 | to |
| 315 | [https://github.com/drhsqlite/fossil-mirror/commits/master?after=f720c106d297ca1f61bccb30c5c191b88a626d01+34 | |
| 316 | its closest equivalent in GitHub]. Judge for yourself: which of those |
| 317 | reports is more useful to a developer trying to understand what happened? |
| 318 | |
| 319 | The bottom line is that even though Fossil and Git are built around |
| 320 | the same low-level data structure, the use of SQL |
| 321 | to query this data makes the data more accessible in Fossil, resulting |
| @@ -513,21 +532,21 @@ | |
| 532 | contexts, such as in the [https://en.wikipedia.org/wiki/OODA_loop | OODA |
| 533 | loop] concept. |
| 534 | Committing your changes to private branches in order to delay a public |
| 535 | push to the parent repo increases the size of your collaborators' |
| 536 | control loops, either causing them to slow their work in order to safely |
| 537 | react to your work, or to over-correct in response to each change. |
| 538 | |
| 539 | Each DVCS can be used in the opposite style, but doing so works against |
| 540 | their low-friction paths. |
| 541 | |
| 542 | |
| 543 | <h4 id="scale">2.5.2 Scale</h4> |
| 544 | |
| 545 | The Linux kernel has a far bigger developer community than that of |
| 546 | SQLite: there are thousands and thousands of contributors to Linux, most |
| 547 | of whom do not know each other's names. These thousands are responsible |
| 548 | for producing roughly 89× more code than is in SQLite. (10.7 |
| 549 | [https://en.wikipedia.org/wiki/Source_lines_of_code|MLOC] vs. 0.12 MLOC |
| 550 | according to [https://dwheeler.com/sloccount/|SLOCCount].) The Linux |
| 551 | kernel and its development process were already uncommonly large back in |
| 552 | 2005 when Git was designed, specifically to support the consequences of |
| @@ -570,13 +589,13 @@ | |
| 589 | |
| 590 | This difference in emphasis arises from the different purposes of |
| 591 | the two systems. Git focuses on individual branches, because that |
| 592 | is exactly what you want for a highly-distributed bazaar-style project |
| 593 | such as Linux. Linus Torvalds does not want to see every check-in |
| 594 | by every contributor to Linux: such extreme visibility does not scale |
| 595 | well. Contrast Fossil, which was written for the cathedral-style SQLite project |
| 596 | and its handful of active committers. Seeing all |
| 597 | changes on all branches all at once helps keep the whole team |
| 598 | up-to-date with what everybody else is doing, resulting in a more |
| 599 | tightly focused and cohesive implementation. |
| 600 | |
| 601 | |
| @@ -639,12 +658,14 @@ | |
| 658 | away in a working directory, then get a call from a customer requiring |
| 659 | that you switch to a stable branch to answer questions in terms of the |
| 660 | version that customer is running. You don't want to stop the test in |
| 661 | order to switch your lone working directory to the stable branch. |
| 662 | |
| 663 | Disk space is cheap. Having several working directories — each with its |
| 664 | own local state — makes switching versions cheap and fast. |
| 665 | |
| 666 | Plus, |
| 667 | <tt>cd</tt> is faster to type than <tt>git checkout</tt> or <tt>fossil |
| 668 | update</tt>. |
| 669 | |
| 670 | |
| 671 | <h3 id="history">2.7 What you should have done vs. What you actually did</h3> |
| @@ -663,11 +684,11 @@ | |
| 684 | Fossil, in contrast, puts more emphasis on recording exactly what happened, |
| 685 | including all of the messy errors, dead-ends, experimental branches, and |
| 686 | so forth. One might argue that this |
| 687 | makes the history of a Fossil project "messy," but another point of view |
| 688 | is that this makes the history "accurate." In actual practice, the |
| 689 | superior reporting tools available in Fossil mean that this incidental mess |
| 690 | is not a factor. |
| 691 | |
| 692 | Like Git, Fossil has an [/help?cmd=amend|amend command] for modifying |
| 693 | prior commits, but unlike in Git, this works not by replacing data in |
| 694 | the repository, but by adding a correction record to the repository that |
| 695 |
+80
-69
| --- www/gitusers.md | ||
| +++ www/gitusers.md | ||
| @@ -40,29 +40,30 @@ | ||
| 40 | 40 | [ffor]: https://fossil-scm.org/forum |
| 41 | 41 | [fvg]: ./fossil-v-git.wiki |
| 42 | 42 | |
| 43 | 43 | |
| 44 | 44 | <a id="mwd"></a> |
| 45 | -## Repositories And Checkouts Are Distinct | |
| 45 | +## Repositories and Checkouts Are Distinct | |
| 46 | 46 | |
| 47 | -A repository and a check-out are distinct concepts in Fossil, whereas | |
| 48 | -the two are collocated by default with Git. This difference shows up in | |
| 49 | -several separate places when it comes to moving from Git to Fossil. | |
| 47 | +A repository and a check-out are distinct in Fossil, allowing them to be | |
| 48 | +stored in separate directory trees, whereas the two are commingled by | |
| 49 | +default with Git, with the repository stored in a `.git` subdirectory | |
| 50 | +underneath your working directory. This difference shows up in several | |
| 51 | +separate places when it comes to moving from Git to Fossil. | |
| 50 | 52 | |
| 51 | 53 | |
| 52 | 54 | |
| 53 | 55 | #### <a id="cwork" name="scw"></a> Checkout Workflows |
| 54 | 56 | |
| 55 | 57 | A Fossil repository is a SQLite database storing the entire history of a |
| 56 | 58 | project. It is not normally stored inside the working tree. |
| 57 | -A Fossil working tree — also called a check-out — is a directory | |
| 59 | +A Fossil working tree — [also called a check-out](./glossary.md#check-out) — is a directory | |
| 58 | 60 | that contains a snapshot of your project that you are currently working |
| 59 | 61 | on, extracted for you from the repository database file by the `fossil` |
| 60 | 62 | program. |
| 61 | 63 | |
| 62 | -Git commingles these two by default, with the repository stored in a | |
| 63 | -`.git` subdirectory underneath your working directory. There are ways to | |
| 64 | +There are ways to | |
| 64 | 65 | [emulate the Fossil working style in Git](#worktree), but because they’re not |
| 65 | 66 | designed into the core concept of the tool, Git tutorials usually |
| 66 | 67 | advocate a switch-in-place working mode instead, so that is how most |
| 67 | 68 | users end up working with Git. Contrast [Fossil’s check-out workflow |
| 68 | 69 | document][ckwf] to see the practical differences. |
| @@ -113,11 +114,11 @@ | ||
| 113 | 114 | |
| 114 | 115 | Someone coming from the Git perspective may perceive that `fossil up` |
| 115 | 116 | has two purposes: |
| 116 | 117 | |
| 117 | 118 | * Without the optional `VERSION` argument, it updates the working |
| 118 | - checkout to the tip of the current branch, as `git pull` does. | |
| 119 | + check-out to the tip of the current branch, as `git pull` does. | |
| 119 | 120 | |
| 120 | 121 | * Given a `VERSION` argument, it updates to the named version. If that’s the |
| 121 | 122 | name of a branch, it updates to the *tip* of that branch, as |
| 122 | 123 | `git checkout BRANCH` does. |
| 123 | 124 | |
| @@ -182,13 +183,13 @@ | ||
| 182 | 183 | git checkout foo-branch |
| 183 | 184 | |
| 184 | 185 | The symlink trick has a number of problems, the largest being that |
| 185 | 186 | symlinks weren’t available on Windows until Vista, and until the Windows |
| 186 | 187 | 10 Creators Update was released in spring of 2017, you had to be an |
| 187 | -Administrator to use the feature besides. ([Source][wsyml]) Git solved | |
| 188 | +Administrator to use the feature besides. ([Source][wsyml]) Git 2.5 solved | |
| 188 | 189 | this problem back when Windows XP was Microsoft’s current offering |
| 189 | -with the `git-worktree` command, added in Git 2.5: | |
| 190 | +by adding the `git-worktree` command: | |
| 190 | 191 | |
| 191 | 192 | git worktree add ../foo-branch foo-branch |
| 192 | 193 | cd ../foo-branch |
| 193 | 194 | |
| 194 | 195 | That is approximately equivalent to this in Fossil: |
| @@ -195,15 +196,17 @@ | ||
| 195 | 196 | |
| 196 | 197 | mkdir ../foo-branch |
| 197 | 198 | cd ../foo-branch |
| 198 | 199 | fossil open /path/to/repo.fossil foo-branch |
| 199 | 200 | |
| 200 | -The Fossil alternative is wordier, but this tends to be one-time setup, | |
| 201 | -not something you do everyday. This author keeps a “scratch” checkout | |
| 202 | -for cases where is isn’t appropriate to reuse the “trunk” checkout. The | |
| 203 | -other peer checkouts therefore tend to track long-lived branches, so | |
| 204 | -they rarely change once a development machine is set up. | |
| 201 | +The Fossil alternative is wordier, but since this tends to be one-time setup, | |
| 202 | +not something you do everyday, the overhead is insignificant. This author keeps a “scratch” check-out | |
| 203 | +for cases where it’s inappropriate to reuse the “trunk” check-out, | |
| 204 | +isolating all of my expedient switch-in-place actions to that one | |
| 205 | +working directory. Since the other peer check-outs track long-lived | |
| 206 | +branches, and that set rarely changes once a development machine is set | |
| 207 | +up, I rarely pay the cost of these wordier commands. | |
| 205 | 208 | |
| 206 | 209 | That then leads us to the closest equivalent in Git to [closing a Fossil |
| 207 | 210 | check-out](#close): |
| 208 | 211 | |
| 209 | 212 | git worktree remove . |
| @@ -219,27 +222,15 @@ | ||
| 219 | 222 | |
| 220 | 223 | This allows you to have your Git repository directory entirely separate |
| 221 | 224 | from your working tree, with `.git` in the check-out directory being a |
| 222 | 225 | file that points to `../repo.git`, in this example. |
| 223 | 226 | |
| 224 | -As of Fossil 2.14, there is a direct equivalent: | |
| 225 | - | |
| 226 | - fossil clone https://example.com/repo | |
| 227 | - | |
| 228 | -It’s a shorter command because we deduce `repo.fossil` and the `repo/` | |
| 229 | -working directory from the last element of the path in the URI. If you | |
| 230 | -wanted to override both deductions, you’d say: | |
| 231 | - | |
| 232 | - fossil clone --workdir foo https://example.com/repo/bar | |
| 233 | - | |
| 234 | -That gets you `bar.fossil` with a `foo/` working directory alongside it. | |
| 235 | - | |
| 236 | 227 | [mcw]: ./ckout-workflows.md#mcw |
| 237 | 228 | [wsyml]: https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/ |
| 238 | 229 | |
| 239 | 230 | |
| 240 | -#### <a id="iip"></a> Init In Place | |
| 231 | +#### <a id="iip"></a> Init in Place | |
| 241 | 232 | |
| 242 | 233 | To illustrate the differences that Fossil’s separation of repository |
| 243 | 234 | from working directory creates in practice, consider this common Git “init in place” |
| 244 | 235 | method for creating a new repository from an existing tree of files, |
| 245 | 236 | perhaps because you are placing that project under version control for |
| @@ -271,11 +262,11 @@ | ||
| 271 | 262 | purposes of this example. |
| 272 | 263 | |
| 273 | 264 | We’ve drawn this example to create a tight parallel between Fossil and |
| 274 | 265 | Git, not to commend this `.fsl`-at-project-root trick to you. A better |
| 275 | 266 | choice would be `~/museum/home/long-established-project.fossil`, if |
| 276 | -you’re following [the directory scheme exemplified above](#rname). That said, it | |
| 267 | +you’re following [the directory scheme exemplified in the glossary](./glossary.md#repository). That said, it | |
| 277 | 268 | does emphasize an earlier point: Fossil doesn’t care where you put the |
| 278 | 269 | repo DB file or what you name it. |
| 279 | 270 | |
| 280 | 271 | |
| 281 | 272 | [clone]: /help?cmd=clone |
| @@ -298,11 +289,13 @@ | ||
| 298 | 289 | to produce its [timeline CLI][tlc] and [its `/timeline` web view][tlw] |
| 299 | 290 | using indexed SQL lookups, which generally have the info you would have |
| 300 | 291 | to manually extract from `git log`, produced much more quickly than Git |
| 301 | 292 | can, all else being equal: operations over [SQLite’s B-tree data structures][btree] |
| 302 | 293 | generally run in O(log n) time, faster than O(n) for equal *n* when the |
| 303 | -constants are equal. Yet the constants are *not* equal because Fossil | |
| 294 | +constants are equal. | |
| 295 | + | |
| 296 | +Yet the constants are *not* equal because Fossil | |
| 304 | 297 | reads from a single disk file rather than visit potentially many |
| 305 | 298 | files in sequence as Git must, so the OS’s buffer cache can result in |
| 306 | 299 | [still better performance][35pct]. |
| 307 | 300 | |
| 308 | 301 | Unlike Git’s log, Fossil’s timeline shows info across branches by |
| @@ -430,18 +423,18 @@ | ||
| 430 | 423 | [wdm]: ./fossil-v-git.wiki#durable |
| 431 | 424 | |
| 432 | 425 | |
| 433 | 426 | ## <a id="dhead"></a> Detached HEAD State |
| 434 | 427 | |
| 435 | -The SQL indexes in Fossil which we brought up above have a very useful | |
| 428 | +The SQL indexes in Fossil which we brought up above have a useful | |
| 436 | 429 | side benefit: you cannot have a [detached HEAD state][gdh] in Fossil, |
| 437 | 430 | the source of untold pain and data loss in Git. It simply cannot be done |
| 438 | 431 | in Fossil, because the indexes always let us find our way back into the |
| 439 | 432 | hash tree. |
| 440 | 433 | |
| 441 | 434 | |
| 442 | -## <a id="slcom"></a> Summary Line Convention In Commit Comments | |
| 435 | +## <a id="slcom"></a> Summary Line Convention in Commit Comments | |
| 443 | 436 | |
| 444 | 437 | The Git convention of a [length-limited summary line][lsl] at the start |
| 445 | 438 | of commit comments is not enforced or obeyed by default in Fossil. |
| 446 | 439 | However, there is a setting under Admin → Timeline → “Truncate comment |
| 447 | 440 | at first blank line (Git-style)” to change this for `/timeline` |
| @@ -506,18 +499,23 @@ | ||
| 506 | 499 | but we’d rather make changes only to the working directory, test the |
| 507 | 500 | changes there, and only commit once we’re sure it’s right. |
| 508 | 501 | |
| 509 | 502 | This also explains why we don’t have anything like `git rebase -i` |
| 510 | 503 | to split an existing commit: in Fossil, commits are *commitments,* not |
| 511 | -something you want to go back and rewrite later. | |
| 504 | +something you’re allowed to go back and rewrite later. | |
| 512 | 505 | |
| 513 | 506 | If someone does [contribute][ctrb] a commit splitting feature to Fossil, |
| 514 | 507 | we’d expect it to be an interactive form of |
| 515 | 508 | [`fossil stash apply`][stash], rather than follow Git’s ill-considered |
| 516 | 509 | design leads. |
| 510 | + | |
| 511 | +Until then, there’s the third-party tool [`fnc`][fnc] and | |
| 512 | +[its interactive `stash` command][fncsta]. | |
| 517 | 513 | |
| 518 | 514 | [ctrb]: https://fossil-scm.org/fossil/doc/trunk/www/contribute.wiki |
| 515 | +[fnc]: https://fnc.bsdbox.org/ | |
| 516 | +[fncsta]: https://fnc.bsdbox.org/uv/doc/fnc.1.html#stash | |
| 519 | 517 | [gcspl]: https://git-scm.com/docs/git-rebase#_splitting_commits |
| 520 | 518 | [Patchouli]: https://pypi.org/project/patchouli/ |
| 521 | 519 | |
| 522 | 520 | |
| 523 | 521 | <a id="bneed"></a> |
| @@ -603,22 +601,20 @@ | ||
| 603 | 601 | 2. It provides immediate off-machine backup of your commits. Unlike |
| 604 | 602 | centralized version control, though, you can still work while |
| 605 | 603 | disconnected; your changes will sync up with the remote once you get |
| 606 | 604 | back online. |
| 607 | 605 | |
| 608 | -3. Because there is little distinction between the clones in the Fossil | |
| 606 | +3. Because there is [little distinction][bu] between the clones in the Fossil | |
| 609 | 607 | model — unlike in Git, where clones often quickly diverge from each |
| 610 | 608 | other, quite possibly on purpose — the backup advantage applies in inverse |
| 611 | 609 | as well: if the remote server falls over dead, one of those with a |
| 612 | 610 | clone of that repository can stand it back up, and everyone can get |
| 613 | 611 | back to work simply by re-pointing their local repo at the new |
| 614 | 612 | remote. If the failed remote comes back later, it can sync with the |
| 615 | 613 | new central version, then perhaps take over as the primary source of |
| 616 | 614 | truth once again. |
| 617 | 615 | |
| 618 | - (There are caveats to this, [covered elsewhere][bu].) | |
| 619 | - | |
| 620 | 616 | [bu]: ./backup.md |
| 621 | 617 | [setup]: ./caps/admin-v-setup.md#apsu |
| 622 | 618 | [wflow]: ./concepts.wiki#workflow |
| 623 | 619 | |
| 624 | 620 | |
| @@ -667,11 +663,11 @@ | ||
| 667 | 663 | [mbgh]: https://github.com/github/renaming |
| 668 | 664 | [mirgh]: ./mirrortogithub.md |
| 669 | 665 | |
| 670 | 666 | |
| 671 | 667 | <a id="unmanaged"></a> |
| 672 | -## The "`fossil status`" Command Does Not Show Unmanaged Files | |
| 668 | +## Status Does Not Show Unmanaged Files | |
| 673 | 669 | |
| 674 | 670 | The "`fossil status`" command shows you what files in your check-out have |
| 675 | 671 | been edited and scheduled for adding or removing at the next commit. |
| 676 | 672 | But unlike "`git status`", the "`fossil status`" command does not warn |
| 677 | 673 | you about unmanaged files in your local check-out. There is a separate |
| @@ -700,38 +696,52 @@ | ||
| 700 | 696 | [3]: ./rebaseharm.md |
| 701 | 697 | |
| 702 | 698 | |
| 703 | 699 | ## <a id="cdiff"></a> Colorized Diffs |
| 704 | 700 | |
| 705 | -The graphical diffs in the Fossil web UI and `fossil diff --tk` use | |
| 706 | -color to distinguish insertions, deletions, and replacements, but unlike | |
| 707 | -with `git diff` when the output is to an ANSI X3.64 capable terminal, | |
| 708 | -`fossil diff` does not. | |
| 709 | - | |
| 710 | -There are a few easy ways to add this feature to Fossil, though. | |
| 711 | - | |
| 712 | -One is to install | |
| 713 | -[`colordiff`][cdiff], which is included in [many package systems][cdpkg], | |
| 714 | -then say: | |
| 715 | - | |
| 716 | - fossil set --global diff-command 'colordiff -wu' | |
| 717 | - | |
| 718 | -Because this is unconditional, unlike `git diff --color=auto`, you will | |
| 719 | -then have to remember to add the `-i` option to `fossil diff` commands | |
| 720 | -when you want color disabled, such as when producing `patch(1)` files | |
| 721 | -or piping diff output to another | |
| 722 | -command that doesn’t understand ANSI escape sequences. There’s an | |
| 723 | -example of this [below](#dstat). | |
| 724 | - | |
| 725 | -Another way, which avoids this problem, is to say instead: | |
| 726 | - | |
| 727 | - fossil set --global diff-command 'git diff --no-index' | |
| 728 | - | |
| 729 | -This delegates `fossil diff` to `git diff` by using the latter’s | |
| 730 | -ability to run on files not inside any repository. | |
| 701 | +When you run `git diff` on an ANSI X3.64 capable terminal, it uses color | |
| 702 | +to distinguish insertions, deletions, and replacements, but as of this | |
| 703 | +writing, `fossil diff` produces traditional uncolored [unified diff | |
| 704 | +format][udiff] output, suitable for producing a [patch file][pfile]. | |
| 705 | + | |
| 706 | +Nevertheless, there are multiple ways to get colorized diff output from | |
| 707 | +Fossil: | |
| 708 | + | |
| 709 | +* The most direct method is to delegate diff behavior back to Git: | |
| 710 | + | |
| 711 | + fossil set --global diff-command 'git diff --no-index' | |
| 712 | + | |
| 713 | + The flag permits it to diff files that aren’t inside a Git repository. | |
| 714 | + | |
| 715 | +* Another method is to install [`colordiff`][cdiff] — included in | |
| 716 | + [many package systems][cdpkg] — then say: | |
| 717 | + | |
| 718 | + fossil set --global diff-command 'colordiff -wu' | |
| 719 | + | |
| 720 | + Because this is unconditional, unlike `git diff --color=auto`, you | |
| 721 | + will then have to remember to add the `-i` option to `fossil diff` | |
| 722 | + commands when you want color disabled, such as when producing | |
| 723 | + `patch(1)` files or piping diff output to another command that | |
| 724 | + doesn’t understand ANSI escape sequences. There’s an example of this | |
| 725 | + [below](#dstat). | |
| 726 | + | |
| 727 | +* Use the Fossil web UI to diff existing commits. | |
| 728 | + | |
| 729 | +* To diff the current working directory contents against some parent | |
| 730 | + instead, Fossil 2.17 expanded the diff command so it can produce | |
| 731 | + colorized HTML output and open it in the OS’s default web browser. | |
| 732 | + For example, `fossil diff -by` will show side-by-side diffs. | |
| 733 | + | |
| 734 | +* Use the older `fossil diff --tk` option to do much the same using | |
| 735 | + Tcl/Tk instead of a browser. | |
| 736 | + | |
| 737 | +Viewed this way, Fossil doesn’t lack colorized diffs, it simply has | |
| 738 | +*one* method where they *aren’t* colorized. | |
| 731 | 739 | |
| 732 | 740 | [cdpkg]: https://repology.org/project/colordiff/versions |
| 741 | +[pfile]: https://en.wikipedia.org/wiki/Patch_(Unix) | |
| 742 | +[udiff]: https://en.wikipedia.org/wiki/Diff#Unified_format | |
| 733 | 743 | |
| 734 | 744 | |
| 735 | 745 | ## <a id="show"></a> Showing Information About Commits |
| 736 | 746 | |
| 737 | 747 | While there is no direct equivalent to Git’s “`show`” command, similar |
| @@ -746,11 +756,11 @@ | ||
| 746 | 756 | |
| 747 | 757 | fossil diff --checkin COMMIT_ID |
| 748 | 758 | |
| 749 | 759 | …only without the patch email header. Git comes out of the [LKML] world, |
| 750 | 760 | where emailing a patch is a normal thing to do. Fossil is [designed for |
| 751 | -cohesive teams][devorg] where such drive-by patches are rarer. | |
| 761 | +cohesive teams][devorg] where drive-by patches are rarer. | |
| 752 | 762 | |
| 753 | 763 | You can use any of [Fossil’s special check-in names][scin] in place of |
| 754 | 764 | the `COMMIT_ID` in this and later examples. Fossil docs usually say |
| 755 | 765 | “`VERSION`” or “`NAME`” where this is allowed, since the version string |
| 756 | 766 | or name might not refer to a commit ID, but instead to a forum post, a |
| @@ -812,18 +822,18 @@ | ||
| 812 | 822 | [dcset]: https://fossil-scm.org/home/help?cmd=diff-command |
| 813 | 823 | [dst]: https://invisible-island.net/diffstat/diffstat.html |
| 814 | 824 | |
| 815 | 825 | |
| 816 | 826 | <a id="btnames"></a> |
| 817 | -## Branch And Tag Names | |
| 827 | +## Branch and Tag Names | |
| 818 | 828 | |
| 819 | 829 | Fossil has no special restrictions on the names of tags and branches, |
| 820 | 830 | though you might want to keep [Git's tag and branch name restrictions][gcrf] |
| 821 | 831 | in mind if you plan on [mirroring your Fossil repository to GitHub][mirgh]. |
| 822 | 832 | |
| 823 | 833 | Fossil does not require tag and branch names to be unique. It is |
| 824 | -common, for example, to put a "`release`" tag on every release for a | |
| 834 | +common, for example, to put a “`release`” tag on every release for a | |
| 825 | 835 | Fossil-hosted project. This does not create a conflict in Fossil, since |
| 826 | 836 | Fossil resolves the ambiguity in a predictable way: the newest match |
| 827 | 837 | wins. Therefore, “`fossil up release`” always gets you the current |
| 828 | 838 | release in a project that uses this tagging convention. |
| 829 | 839 | |
| @@ -837,25 +847,26 @@ | ||
| 837 | 847 | |
| 838 | 848 | |
| 839 | 849 | |
| 840 | 850 | |
| 841 | 851 | <a id="cpickrev"></a> |
| 842 | -## Cherry-Picking And Reverting Commits | |
| 852 | +## Cherry-Picking and Reverting Commits | |
| 843 | 853 | |
| 844 | 854 | Git’s separate "`git cherry-pick`" and “`git revert`” commands are |
| 845 | 855 | options to the [`fossil merge` command][merge]: `--cherrypick` and |
| 846 | -`--backout`, respectively. | |
| 856 | +`--backout`, respectively. We view this as sensible, since these are | |
| 857 | +both merge operations, and the two actions differ only in direction. | |
| 847 | 858 | |
| 848 | 859 | Unlike in Git, the Fossil file format remembers cherrypicks and backouts |
| 849 | 860 | and can later show them as dashed lines on the graphical timeline. |
| 850 | 861 | |
| 851 | 862 | [merge]: /help?cmd=merge |
| 852 | 863 | |
| 853 | 864 | |
| 854 | 865 | |
| 855 | 866 | <a id="mvrm"></a> |
| 856 | -## File Moves And Renames Are Soft By Default | |
| 867 | +## File Moves and Renames Are Soft by Default | |
| 857 | 868 | |
| 858 | 869 | The "[`fossil mv`][mv]" and "[`fossil rm`][rm]" commands work like they |
| 859 | 870 | do in CVS in that they schedule the changes for the next commit by |
| 860 | 871 | default: they do not actually rename or delete the files in your |
| 861 | 872 | check-out. |
| 862 | 873 |
| --- www/gitusers.md | |
| +++ www/gitusers.md | |
| @@ -40,29 +40,30 @@ | |
| 40 | [ffor]: https://fossil-scm.org/forum |
| 41 | [fvg]: ./fossil-v-git.wiki |
| 42 | |
| 43 | |
| 44 | <a id="mwd"></a> |
| 45 | ## Repositories And Checkouts Are Distinct |
| 46 | |
| 47 | A repository and a check-out are distinct concepts in Fossil, whereas |
| 48 | the two are collocated by default with Git. This difference shows up in |
| 49 | several separate places when it comes to moving from Git to Fossil. |
| 50 | |
| 51 | |
| 52 | |
| 53 | #### <a id="cwork" name="scw"></a> Checkout Workflows |
| 54 | |
| 55 | A Fossil repository is a SQLite database storing the entire history of a |
| 56 | project. It is not normally stored inside the working tree. |
| 57 | A Fossil working tree — also called a check-out — is a directory |
| 58 | that contains a snapshot of your project that you are currently working |
| 59 | on, extracted for you from the repository database file by the `fossil` |
| 60 | program. |
| 61 | |
| 62 | Git commingles these two by default, with the repository stored in a |
| 63 | `.git` subdirectory underneath your working directory. There are ways to |
| 64 | [emulate the Fossil working style in Git](#worktree), but because they’re not |
| 65 | designed into the core concept of the tool, Git tutorials usually |
| 66 | advocate a switch-in-place working mode instead, so that is how most |
| 67 | users end up working with Git. Contrast [Fossil’s check-out workflow |
| 68 | document][ckwf] to see the practical differences. |
| @@ -113,11 +114,11 @@ | |
| 113 | |
| 114 | Someone coming from the Git perspective may perceive that `fossil up` |
| 115 | has two purposes: |
| 116 | |
| 117 | * Without the optional `VERSION` argument, it updates the working |
| 118 | checkout to the tip of the current branch, as `git pull` does. |
| 119 | |
| 120 | * Given a `VERSION` argument, it updates to the named version. If that’s the |
| 121 | name of a branch, it updates to the *tip* of that branch, as |
| 122 | `git checkout BRANCH` does. |
| 123 | |
| @@ -182,13 +183,13 @@ | |
| 182 | git checkout foo-branch |
| 183 | |
| 184 | The symlink trick has a number of problems, the largest being that |
| 185 | symlinks weren’t available on Windows until Vista, and until the Windows |
| 186 | 10 Creators Update was released in spring of 2017, you had to be an |
| 187 | Administrator to use the feature besides. ([Source][wsyml]) Git solved |
| 188 | this problem back when Windows XP was Microsoft’s current offering |
| 189 | with the `git-worktree` command, added in Git 2.5: |
| 190 | |
| 191 | git worktree add ../foo-branch foo-branch |
| 192 | cd ../foo-branch |
| 193 | |
| 194 | That is approximately equivalent to this in Fossil: |
| @@ -195,15 +196,17 @@ | |
| 195 | |
| 196 | mkdir ../foo-branch |
| 197 | cd ../foo-branch |
| 198 | fossil open /path/to/repo.fossil foo-branch |
| 199 | |
| 200 | The Fossil alternative is wordier, but this tends to be one-time setup, |
| 201 | not something you do everyday. This author keeps a “scratch” checkout |
| 202 | for cases where is isn’t appropriate to reuse the “trunk” checkout. The |
| 203 | other peer checkouts therefore tend to track long-lived branches, so |
| 204 | they rarely change once a development machine is set up. |
| 205 | |
| 206 | That then leads us to the closest equivalent in Git to [closing a Fossil |
| 207 | check-out](#close): |
| 208 | |
| 209 | git worktree remove . |
| @@ -219,27 +222,15 @@ | |
| 219 | |
| 220 | This allows you to have your Git repository directory entirely separate |
| 221 | from your working tree, with `.git` in the check-out directory being a |
| 222 | file that points to `../repo.git`, in this example. |
| 223 | |
| 224 | As of Fossil 2.14, there is a direct equivalent: |
| 225 | |
| 226 | fossil clone https://example.com/repo |
| 227 | |
| 228 | It’s a shorter command because we deduce `repo.fossil` and the `repo/` |
| 229 | working directory from the last element of the path in the URI. If you |
| 230 | wanted to override both deductions, you’d say: |
| 231 | |
| 232 | fossil clone --workdir foo https://example.com/repo/bar |
| 233 | |
| 234 | That gets you `bar.fossil` with a `foo/` working directory alongside it. |
| 235 | |
| 236 | [mcw]: ./ckout-workflows.md#mcw |
| 237 | [wsyml]: https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/ |
| 238 | |
| 239 | |
| 240 | #### <a id="iip"></a> Init In Place |
| 241 | |
| 242 | To illustrate the differences that Fossil’s separation of repository |
| 243 | from working directory creates in practice, consider this common Git “init in place” |
| 244 | method for creating a new repository from an existing tree of files, |
| 245 | perhaps because you are placing that project under version control for |
| @@ -271,11 +262,11 @@ | |
| 271 | purposes of this example. |
| 272 | |
| 273 | We’ve drawn this example to create a tight parallel between Fossil and |
| 274 | Git, not to commend this `.fsl`-at-project-root trick to you. A better |
| 275 | choice would be `~/museum/home/long-established-project.fossil`, if |
| 276 | you’re following [the directory scheme exemplified above](#rname). That said, it |
| 277 | does emphasize an earlier point: Fossil doesn’t care where you put the |
| 278 | repo DB file or what you name it. |
| 279 | |
| 280 | |
| 281 | [clone]: /help?cmd=clone |
| @@ -298,11 +289,13 @@ | |
| 298 | to produce its [timeline CLI][tlc] and [its `/timeline` web view][tlw] |
| 299 | using indexed SQL lookups, which generally have the info you would have |
| 300 | to manually extract from `git log`, produced much more quickly than Git |
| 301 | can, all else being equal: operations over [SQLite’s B-tree data structures][btree] |
| 302 | generally run in O(log n) time, faster than O(n) for equal *n* when the |
| 303 | constants are equal. Yet the constants are *not* equal because Fossil |
| 304 | reads from a single disk file rather than visit potentially many |
| 305 | files in sequence as Git must, so the OS’s buffer cache can result in |
| 306 | [still better performance][35pct]. |
| 307 | |
| 308 | Unlike Git’s log, Fossil’s timeline shows info across branches by |
| @@ -430,18 +423,18 @@ | |
| 430 | [wdm]: ./fossil-v-git.wiki#durable |
| 431 | |
| 432 | |
| 433 | ## <a id="dhead"></a> Detached HEAD State |
| 434 | |
| 435 | The SQL indexes in Fossil which we brought up above have a very useful |
| 436 | side benefit: you cannot have a [detached HEAD state][gdh] in Fossil, |
| 437 | the source of untold pain and data loss in Git. It simply cannot be done |
| 438 | in Fossil, because the indexes always let us find our way back into the |
| 439 | hash tree. |
| 440 | |
| 441 | |
| 442 | ## <a id="slcom"></a> Summary Line Convention In Commit Comments |
| 443 | |
| 444 | The Git convention of a [length-limited summary line][lsl] at the start |
| 445 | of commit comments is not enforced or obeyed by default in Fossil. |
| 446 | However, there is a setting under Admin → Timeline → “Truncate comment |
| 447 | at first blank line (Git-style)” to change this for `/timeline` |
| @@ -506,18 +499,23 @@ | |
| 506 | but we’d rather make changes only to the working directory, test the |
| 507 | changes there, and only commit once we’re sure it’s right. |
| 508 | |
| 509 | This also explains why we don’t have anything like `git rebase -i` |
| 510 | to split an existing commit: in Fossil, commits are *commitments,* not |
| 511 | something you want to go back and rewrite later. |
| 512 | |
| 513 | If someone does [contribute][ctrb] a commit splitting feature to Fossil, |
| 514 | we’d expect it to be an interactive form of |
| 515 | [`fossil stash apply`][stash], rather than follow Git’s ill-considered |
| 516 | design leads. |
| 517 | |
| 518 | [ctrb]: https://fossil-scm.org/fossil/doc/trunk/www/contribute.wiki |
| 519 | [gcspl]: https://git-scm.com/docs/git-rebase#_splitting_commits |
| 520 | [Patchouli]: https://pypi.org/project/patchouli/ |
| 521 | |
| 522 | |
| 523 | <a id="bneed"></a> |
| @@ -603,22 +601,20 @@ | |
| 603 | 2. It provides immediate off-machine backup of your commits. Unlike |
| 604 | centralized version control, though, you can still work while |
| 605 | disconnected; your changes will sync up with the remote once you get |
| 606 | back online. |
| 607 | |
| 608 | 3. Because there is little distinction between the clones in the Fossil |
| 609 | model — unlike in Git, where clones often quickly diverge from each |
| 610 | other, quite possibly on purpose — the backup advantage applies in inverse |
| 611 | as well: if the remote server falls over dead, one of those with a |
| 612 | clone of that repository can stand it back up, and everyone can get |
| 613 | back to work simply by re-pointing their local repo at the new |
| 614 | remote. If the failed remote comes back later, it can sync with the |
| 615 | new central version, then perhaps take over as the primary source of |
| 616 | truth once again. |
| 617 | |
| 618 | (There are caveats to this, [covered elsewhere][bu].) |
| 619 | |
| 620 | [bu]: ./backup.md |
| 621 | [setup]: ./caps/admin-v-setup.md#apsu |
| 622 | [wflow]: ./concepts.wiki#workflow |
| 623 | |
| 624 | |
| @@ -667,11 +663,11 @@ | |
| 667 | [mbgh]: https://github.com/github/renaming |
| 668 | [mirgh]: ./mirrortogithub.md |
| 669 | |
| 670 | |
| 671 | <a id="unmanaged"></a> |
| 672 | ## The "`fossil status`" Command Does Not Show Unmanaged Files |
| 673 | |
| 674 | The "`fossil status`" command shows you what files in your check-out have |
| 675 | been edited and scheduled for adding or removing at the next commit. |
| 676 | But unlike "`git status`", the "`fossil status`" command does not warn |
| 677 | you about unmanaged files in your local check-out. There is a separate |
| @@ -700,38 +696,52 @@ | |
| 700 | [3]: ./rebaseharm.md |
| 701 | |
| 702 | |
| 703 | ## <a id="cdiff"></a> Colorized Diffs |
| 704 | |
| 705 | The graphical diffs in the Fossil web UI and `fossil diff --tk` use |
| 706 | color to distinguish insertions, deletions, and replacements, but unlike |
| 707 | with `git diff` when the output is to an ANSI X3.64 capable terminal, |
| 708 | `fossil diff` does not. |
| 709 | |
| 710 | There are a few easy ways to add this feature to Fossil, though. |
| 711 | |
| 712 | One is to install |
| 713 | [`colordiff`][cdiff], which is included in [many package systems][cdpkg], |
| 714 | then say: |
| 715 | |
| 716 | fossil set --global diff-command 'colordiff -wu' |
| 717 | |
| 718 | Because this is unconditional, unlike `git diff --color=auto`, you will |
| 719 | then have to remember to add the `-i` option to `fossil diff` commands |
| 720 | when you want color disabled, such as when producing `patch(1)` files |
| 721 | or piping diff output to another |
| 722 | command that doesn’t understand ANSI escape sequences. There’s an |
| 723 | example of this [below](#dstat). |
| 724 | |
| 725 | Another way, which avoids this problem, is to say instead: |
| 726 | |
| 727 | fossil set --global diff-command 'git diff --no-index' |
| 728 | |
| 729 | This delegates `fossil diff` to `git diff` by using the latter’s |
| 730 | ability to run on files not inside any repository. |
| 731 | |
| 732 | [cdpkg]: https://repology.org/project/colordiff/versions |
| 733 | |
| 734 | |
| 735 | ## <a id="show"></a> Showing Information About Commits |
| 736 | |
| 737 | While there is no direct equivalent to Git’s “`show`” command, similar |
| @@ -746,11 +756,11 @@ | |
| 746 | |
| 747 | fossil diff --checkin COMMIT_ID |
| 748 | |
| 749 | …only without the patch email header. Git comes out of the [LKML] world, |
| 750 | where emailing a patch is a normal thing to do. Fossil is [designed for |
| 751 | cohesive teams][devorg] where such drive-by patches are rarer. |
| 752 | |
| 753 | You can use any of [Fossil’s special check-in names][scin] in place of |
| 754 | the `COMMIT_ID` in this and later examples. Fossil docs usually say |
| 755 | “`VERSION`” or “`NAME`” where this is allowed, since the version string |
| 756 | or name might not refer to a commit ID, but instead to a forum post, a |
| @@ -812,18 +822,18 @@ | |
| 812 | [dcset]: https://fossil-scm.org/home/help?cmd=diff-command |
| 813 | [dst]: https://invisible-island.net/diffstat/diffstat.html |
| 814 | |
| 815 | |
| 816 | <a id="btnames"></a> |
| 817 | ## Branch And Tag Names |
| 818 | |
| 819 | Fossil has no special restrictions on the names of tags and branches, |
| 820 | though you might want to keep [Git's tag and branch name restrictions][gcrf] |
| 821 | in mind if you plan on [mirroring your Fossil repository to GitHub][mirgh]. |
| 822 | |
| 823 | Fossil does not require tag and branch names to be unique. It is |
| 824 | common, for example, to put a "`release`" tag on every release for a |
| 825 | Fossil-hosted project. This does not create a conflict in Fossil, since |
| 826 | Fossil resolves the ambiguity in a predictable way: the newest match |
| 827 | wins. Therefore, “`fossil up release`” always gets you the current |
| 828 | release in a project that uses this tagging convention. |
| 829 | |
| @@ -837,25 +847,26 @@ | |
| 837 | |
| 838 | |
| 839 | |
| 840 | |
| 841 | <a id="cpickrev"></a> |
| 842 | ## Cherry-Picking And Reverting Commits |
| 843 | |
| 844 | Git’s separate "`git cherry-pick`" and “`git revert`” commands are |
| 845 | options to the [`fossil merge` command][merge]: `--cherrypick` and |
| 846 | `--backout`, respectively. |
| 847 | |
| 848 | Unlike in Git, the Fossil file format remembers cherrypicks and backouts |
| 849 | and can later show them as dashed lines on the graphical timeline. |
| 850 | |
| 851 | [merge]: /help?cmd=merge |
| 852 | |
| 853 | |
| 854 | |
| 855 | <a id="mvrm"></a> |
| 856 | ## File Moves And Renames Are Soft By Default |
| 857 | |
| 858 | The "[`fossil mv`][mv]" and "[`fossil rm`][rm]" commands work like they |
| 859 | do in CVS in that they schedule the changes for the next commit by |
| 860 | default: they do not actually rename or delete the files in your |
| 861 | check-out. |
| 862 |
| --- www/gitusers.md | |
| +++ www/gitusers.md | |
| @@ -40,29 +40,30 @@ | |
| 40 | [ffor]: https://fossil-scm.org/forum |
| 41 | [fvg]: ./fossil-v-git.wiki |
| 42 | |
| 43 | |
| 44 | <a id="mwd"></a> |
| 45 | ## Repositories and Checkouts Are Distinct |
| 46 | |
| 47 | A repository and a check-out are distinct in Fossil, allowing them to be |
| 48 | stored in separate directory trees, whereas the two are commingled by |
| 49 | default with Git, with the repository stored in a `.git` subdirectory |
| 50 | underneath your working directory. This difference shows up in several |
| 51 | separate places when it comes to moving from Git to Fossil. |
| 52 | |
| 53 | |
| 54 | |
| 55 | #### <a id="cwork" name="scw"></a> Checkout Workflows |
| 56 | |
| 57 | A Fossil repository is a SQLite database storing the entire history of a |
| 58 | project. It is not normally stored inside the working tree. |
| 59 | A Fossil working tree — [also called a check-out](./glossary.md#check-out) — is a directory |
| 60 | that contains a snapshot of your project that you are currently working |
| 61 | on, extracted for you from the repository database file by the `fossil` |
| 62 | program. |
| 63 | |
| 64 | There are ways to |
| 65 | [emulate the Fossil working style in Git](#worktree), but because they’re not |
| 66 | designed into the core concept of the tool, Git tutorials usually |
| 67 | advocate a switch-in-place working mode instead, so that is how most |
| 68 | users end up working with Git. Contrast [Fossil’s check-out workflow |
| 69 | document][ckwf] to see the practical differences. |
| @@ -113,11 +114,11 @@ | |
| 114 | |
| 115 | Someone coming from the Git perspective may perceive that `fossil up` |
| 116 | has two purposes: |
| 117 | |
| 118 | * Without the optional `VERSION` argument, it updates the working |
| 119 | check-out to the tip of the current branch, as `git pull` does. |
| 120 | |
| 121 | * Given a `VERSION` argument, it updates to the named version. If that’s the |
| 122 | name of a branch, it updates to the *tip* of that branch, as |
| 123 | `git checkout BRANCH` does. |
| 124 | |
| @@ -182,13 +183,13 @@ | |
| 183 | git checkout foo-branch |
| 184 | |
| 185 | The symlink trick has a number of problems, the largest being that |
| 186 | symlinks weren’t available on Windows until Vista, and until the Windows |
| 187 | 10 Creators Update was released in spring of 2017, you had to be an |
| 188 | Administrator to use the feature besides. ([Source][wsyml]) Git 2.5 solved |
| 189 | this problem back when Windows XP was Microsoft’s current offering |
| 190 | by adding the `git-worktree` command: |
| 191 | |
| 192 | git worktree add ../foo-branch foo-branch |
| 193 | cd ../foo-branch |
| 194 | |
| 195 | That is approximately equivalent to this in Fossil: |
| @@ -195,15 +196,17 @@ | |
| 196 | |
| 197 | mkdir ../foo-branch |
| 198 | cd ../foo-branch |
| 199 | fossil open /path/to/repo.fossil foo-branch |
| 200 | |
| 201 | The Fossil alternative is wordier, but since this tends to be one-time setup, |
| 202 | not something you do everyday, the overhead is insignificant. This author keeps a “scratch” check-out |
| 203 | for cases where it’s inappropriate to reuse the “trunk” check-out, |
| 204 | isolating all of my expedient switch-in-place actions to that one |
| 205 | working directory. Since the other peer check-outs track long-lived |
| 206 | branches, and that set rarely changes once a development machine is set |
| 207 | up, I rarely pay the cost of these wordier commands. |
| 208 | |
| 209 | That then leads us to the closest equivalent in Git to [closing a Fossil |
| 210 | check-out](#close): |
| 211 | |
| 212 | git worktree remove . |
| @@ -219,27 +222,15 @@ | |
| 222 | |
| 223 | This allows you to have your Git repository directory entirely separate |
| 224 | from your working tree, with `.git` in the check-out directory being a |
| 225 | file that points to `../repo.git`, in this example. |
| 226 | |
| 227 | [mcw]: ./ckout-workflows.md#mcw |
| 228 | [wsyml]: https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/ |
| 229 | |
| 230 | |
| 231 | #### <a id="iip"></a> Init in Place |
| 232 | |
| 233 | To illustrate the differences that Fossil’s separation of repository |
| 234 | from working directory creates in practice, consider this common Git “init in place” |
| 235 | method for creating a new repository from an existing tree of files, |
| 236 | perhaps because you are placing that project under version control for |
| @@ -271,11 +262,11 @@ | |
| 262 | purposes of this example. |
| 263 | |
| 264 | We’ve drawn this example to create a tight parallel between Fossil and |
| 265 | Git, not to commend this `.fsl`-at-project-root trick to you. A better |
| 266 | choice would be `~/museum/home/long-established-project.fossil`, if |
| 267 | you’re following [the directory scheme exemplified in the glossary](./glossary.md#repository). That said, it |
| 268 | does emphasize an earlier point: Fossil doesn’t care where you put the |
| 269 | repo DB file or what you name it. |
| 270 | |
| 271 | |
| 272 | [clone]: /help?cmd=clone |
| @@ -298,11 +289,13 @@ | |
| 289 | to produce its [timeline CLI][tlc] and [its `/timeline` web view][tlw] |
| 290 | using indexed SQL lookups, which generally have the info you would have |
| 291 | to manually extract from `git log`, produced much more quickly than Git |
| 292 | can, all else being equal: operations over [SQLite’s B-tree data structures][btree] |
| 293 | generally run in O(log n) time, faster than O(n) for equal *n* when the |
| 294 | constants are equal. |
| 295 | |
| 296 | Yet the constants are *not* equal because Fossil |
| 297 | reads from a single disk file rather than visit potentially many |
| 298 | files in sequence as Git must, so the OS’s buffer cache can result in |
| 299 | [still better performance][35pct]. |
| 300 | |
| 301 | Unlike Git’s log, Fossil’s timeline shows info across branches by |
| @@ -430,18 +423,18 @@ | |
| 423 | [wdm]: ./fossil-v-git.wiki#durable |
| 424 | |
| 425 | |
| 426 | ## <a id="dhead"></a> Detached HEAD State |
| 427 | |
| 428 | The SQL indexes in Fossil which we brought up above have a useful |
| 429 | side benefit: you cannot have a [detached HEAD state][gdh] in Fossil, |
| 430 | the source of untold pain and data loss in Git. It simply cannot be done |
| 431 | in Fossil, because the indexes always let us find our way back into the |
| 432 | hash tree. |
| 433 | |
| 434 | |
| 435 | ## <a id="slcom"></a> Summary Line Convention in Commit Comments |
| 436 | |
| 437 | The Git convention of a [length-limited summary line][lsl] at the start |
| 438 | of commit comments is not enforced or obeyed by default in Fossil. |
| 439 | However, there is a setting under Admin → Timeline → “Truncate comment |
| 440 | at first blank line (Git-style)” to change this for `/timeline` |
| @@ -506,18 +499,23 @@ | |
| 499 | but we’d rather make changes only to the working directory, test the |
| 500 | changes there, and only commit once we’re sure it’s right. |
| 501 | |
| 502 | This also explains why we don’t have anything like `git rebase -i` |
| 503 | to split an existing commit: in Fossil, commits are *commitments,* not |
| 504 | something you’re allowed to go back and rewrite later. |
| 505 | |
| 506 | If someone does [contribute][ctrb] a commit splitting feature to Fossil, |
| 507 | we’d expect it to be an interactive form of |
| 508 | [`fossil stash apply`][stash], rather than follow Git’s ill-considered |
| 509 | design leads. |
| 510 | |
| 511 | Until then, there’s the third-party tool [`fnc`][fnc] and |
| 512 | [its interactive `stash` command][fncsta]. |
| 513 | |
| 514 | [ctrb]: https://fossil-scm.org/fossil/doc/trunk/www/contribute.wiki |
| 515 | [fnc]: https://fnc.bsdbox.org/ |
| 516 | [fncsta]: https://fnc.bsdbox.org/uv/doc/fnc.1.html#stash |
| 517 | [gcspl]: https://git-scm.com/docs/git-rebase#_splitting_commits |
| 518 | [Patchouli]: https://pypi.org/project/patchouli/ |
| 519 | |
| 520 | |
| 521 | <a id="bneed"></a> |
| @@ -603,22 +601,20 @@ | |
| 601 | 2. It provides immediate off-machine backup of your commits. Unlike |
| 602 | centralized version control, though, you can still work while |
| 603 | disconnected; your changes will sync up with the remote once you get |
| 604 | back online. |
| 605 | |
| 606 | 3. Because there is [little distinction][bu] between the clones in the Fossil |
| 607 | model — unlike in Git, where clones often quickly diverge from each |
| 608 | other, quite possibly on purpose — the backup advantage applies in inverse |
| 609 | as well: if the remote server falls over dead, one of those with a |
| 610 | clone of that repository can stand it back up, and everyone can get |
| 611 | back to work simply by re-pointing their local repo at the new |
| 612 | remote. If the failed remote comes back later, it can sync with the |
| 613 | new central version, then perhaps take over as the primary source of |
| 614 | truth once again. |
| 615 | |
| 616 | [bu]: ./backup.md |
| 617 | [setup]: ./caps/admin-v-setup.md#apsu |
| 618 | [wflow]: ./concepts.wiki#workflow |
| 619 | |
| 620 | |
| @@ -667,11 +663,11 @@ | |
| 663 | [mbgh]: https://github.com/github/renaming |
| 664 | [mirgh]: ./mirrortogithub.md |
| 665 | |
| 666 | |
| 667 | <a id="unmanaged"></a> |
| 668 | ## Status Does Not Show Unmanaged Files |
| 669 | |
| 670 | The "`fossil status`" command shows you what files in your check-out have |
| 671 | been edited and scheduled for adding or removing at the next commit. |
| 672 | But unlike "`git status`", the "`fossil status`" command does not warn |
| 673 | you about unmanaged files in your local check-out. There is a separate |
| @@ -700,38 +696,52 @@ | |
| 696 | [3]: ./rebaseharm.md |
| 697 | |
| 698 | |
| 699 | ## <a id="cdiff"></a> Colorized Diffs |
| 700 | |
| 701 | When you run `git diff` on an ANSI X3.64 capable terminal, it uses color |
| 702 | to distinguish insertions, deletions, and replacements, but as of this |
| 703 | writing, `fossil diff` produces traditional uncolored [unified diff |
| 704 | format][udiff] output, suitable for producing a [patch file][pfile]. |
| 705 | |
| 706 | Nevertheless, there are multiple ways to get colorized diff output from |
| 707 | Fossil: |
| 708 | |
| 709 | * The most direct method is to delegate diff behavior back to Git: |
| 710 | |
| 711 | fossil set --global diff-command 'git diff --no-index' |
| 712 | |
| 713 | The flag permits it to diff files that aren’t inside a Git repository. |
| 714 | |
| 715 | * Another method is to install [`colordiff`][cdiff] — included in |
| 716 | [many package systems][cdpkg] — then say: |
| 717 | |
| 718 | fossil set --global diff-command 'colordiff -wu' |
| 719 | |
| 720 | Because this is unconditional, unlike `git diff --color=auto`, you |
| 721 | will then have to remember to add the `-i` option to `fossil diff` |
| 722 | commands when you want color disabled, such as when producing |
| 723 | `patch(1)` files or piping diff output to another command that |
| 724 | doesn’t understand ANSI escape sequences. There’s an example of this |
| 725 | [below](#dstat). |
| 726 | |
| 727 | * Use the Fossil web UI to diff existing commits. |
| 728 | |
| 729 | * To diff the current working directory contents against some parent |
| 730 | instead, Fossil 2.17 expanded the diff command so it can produce |
| 731 | colorized HTML output and open it in the OS’s default web browser. |
| 732 | For example, `fossil diff -by` will show side-by-side diffs. |
| 733 | |
| 734 | * Use the older `fossil diff --tk` option to do much the same using |
| 735 | Tcl/Tk instead of a browser. |
| 736 | |
| 737 | Viewed this way, Fossil doesn’t lack colorized diffs, it simply has |
| 738 | *one* method where they *aren’t* colorized. |
| 739 | |
| 740 | [cdpkg]: https://repology.org/project/colordiff/versions |
| 741 | [pfile]: https://en.wikipedia.org/wiki/Patch_(Unix) |
| 742 | [udiff]: https://en.wikipedia.org/wiki/Diff#Unified_format |
| 743 | |
| 744 | |
| 745 | ## <a id="show"></a> Showing Information About Commits |
| 746 | |
| 747 | While there is no direct equivalent to Git’s “`show`” command, similar |
| @@ -746,11 +756,11 @@ | |
| 756 | |
| 757 | fossil diff --checkin COMMIT_ID |
| 758 | |
| 759 | …only without the patch email header. Git comes out of the [LKML] world, |
| 760 | where emailing a patch is a normal thing to do. Fossil is [designed for |
| 761 | cohesive teams][devorg] where drive-by patches are rarer. |
| 762 | |
| 763 | You can use any of [Fossil’s special check-in names][scin] in place of |
| 764 | the `COMMIT_ID` in this and later examples. Fossil docs usually say |
| 765 | “`VERSION`” or “`NAME`” where this is allowed, since the version string |
| 766 | or name might not refer to a commit ID, but instead to a forum post, a |
| @@ -812,18 +822,18 @@ | |
| 822 | [dcset]: https://fossil-scm.org/home/help?cmd=diff-command |
| 823 | [dst]: https://invisible-island.net/diffstat/diffstat.html |
| 824 | |
| 825 | |
| 826 | <a id="btnames"></a> |
| 827 | ## Branch and Tag Names |
| 828 | |
| 829 | Fossil has no special restrictions on the names of tags and branches, |
| 830 | though you might want to keep [Git's tag and branch name restrictions][gcrf] |
| 831 | in mind if you plan on [mirroring your Fossil repository to GitHub][mirgh]. |
| 832 | |
| 833 | Fossil does not require tag and branch names to be unique. It is |
| 834 | common, for example, to put a “`release`” tag on every release for a |
| 835 | Fossil-hosted project. This does not create a conflict in Fossil, since |
| 836 | Fossil resolves the ambiguity in a predictable way: the newest match |
| 837 | wins. Therefore, “`fossil up release`” always gets you the current |
| 838 | release in a project that uses this tagging convention. |
| 839 | |
| @@ -837,25 +847,26 @@ | |
| 847 | |
| 848 | |
| 849 | |
| 850 | |
| 851 | <a id="cpickrev"></a> |
| 852 | ## Cherry-Picking and Reverting Commits |
| 853 | |
| 854 | Git’s separate "`git cherry-pick`" and “`git revert`” commands are |
| 855 | options to the [`fossil merge` command][merge]: `--cherrypick` and |
| 856 | `--backout`, respectively. We view this as sensible, since these are |
| 857 | both merge operations, and the two actions differ only in direction. |
| 858 | |
| 859 | Unlike in Git, the Fossil file format remembers cherrypicks and backouts |
| 860 | and can later show them as dashed lines on the graphical timeline. |
| 861 | |
| 862 | [merge]: /help?cmd=merge |
| 863 | |
| 864 | |
| 865 | |
| 866 | <a id="mvrm"></a> |
| 867 | ## File Moves and Renames Are Soft by Default |
| 868 | |
| 869 | The "[`fossil mv`][mv]" and "[`fossil rm`][rm]" commands work like they |
| 870 | do in CVS in that they schedule the changes for the next commit by |
| 871 | default: they do not actually rename or delete the files in your |
| 872 | check-out. |
| 873 |
+4
-4
| --- www/index.wiki | ||
| +++ www/index.wiki | ||
| @@ -83,16 +83,16 @@ | ||
| 83 | 83 | the repository are consistent prior to each commit. |
| 84 | 84 | |
| 85 | 85 | 8. <b>Free and Open-Source</b> - [../COPYRIGHT-BSD2.txt|2-clause BSD license]. |
| 86 | 86 | |
| 87 | 87 | <hr> |
| 88 | -<h3>Latest Release: 2.18 ([/timeline?c=version-2.18|2022-02-23])</h3> | |
| 88 | +<h3>Latest Release: 2.19 ([/timeline?c=version-2.19|2022-07-21])</h3> | |
| 89 | 89 | |
| 90 | 90 | * [/uv/download.html|Download] |
| 91 | - * [./changes.wiki#v2_18|Change Summary] | |
| 92 | - * [/timeline?p=version-2.18&bt=version-2.17&y=ci|Check-ins in version 2.18] | |
| 93 | - * [/timeline?df=version-2.18&y=ci|Check-ins derived from the 2.18 release] | |
| 91 | + * [./changes.wiki#v2_19|Change Summary] | |
| 92 | + * [/timeline?p=version-2.19&bt=version-2.18&y=ci|Check-ins in version 2.19] | |
| 93 | + * [/timeline?df=version-2.19&y=ci|Check-ins derived from the 2.19 release] | |
| 94 | 94 | * [/timeline?t=release|Timeline of all past releases] |
| 95 | 95 | |
| 96 | 96 | <hr> |
| 97 | 97 | <h3>Quick Start</h3> |
| 98 | 98 | |
| 99 | 99 |
| --- www/index.wiki | |
| +++ www/index.wiki | |
| @@ -83,16 +83,16 @@ | |
| 83 | the repository are consistent prior to each commit. |
| 84 | |
| 85 | 8. <b>Free and Open-Source</b> - [../COPYRIGHT-BSD2.txt|2-clause BSD license]. |
| 86 | |
| 87 | <hr> |
| 88 | <h3>Latest Release: 2.18 ([/timeline?c=version-2.18|2022-02-23])</h3> |
| 89 | |
| 90 | * [/uv/download.html|Download] |
| 91 | * [./changes.wiki#v2_18|Change Summary] |
| 92 | * [/timeline?p=version-2.18&bt=version-2.17&y=ci|Check-ins in version 2.18] |
| 93 | * [/timeline?df=version-2.18&y=ci|Check-ins derived from the 2.18 release] |
| 94 | * [/timeline?t=release|Timeline of all past releases] |
| 95 | |
| 96 | <hr> |
| 97 | <h3>Quick Start</h3> |
| 98 | |
| 99 |
| --- www/index.wiki | |
| +++ www/index.wiki | |
| @@ -83,16 +83,16 @@ | |
| 83 | the repository are consistent prior to each commit. |
| 84 | |
| 85 | 8. <b>Free and Open-Source</b> - [../COPYRIGHT-BSD2.txt|2-clause BSD license]. |
| 86 | |
| 87 | <hr> |
| 88 | <h3>Latest Release: 2.19 ([/timeline?c=version-2.19|2022-07-21])</h3> |
| 89 | |
| 90 | * [/uv/download.html|Download] |
| 91 | * [./changes.wiki#v2_19|Change Summary] |
| 92 | * [/timeline?p=version-2.19&bt=version-2.18&y=ci|Check-ins in version 2.19] |
| 93 | * [/timeline?df=version-2.19&y=ci|Check-ins derived from the 2.19 release] |
| 94 | * [/timeline?t=release|Timeline of all past releases] |
| 95 | |
| 96 | <hr> |
| 97 | <h3>Quick Start</h3> |
| 98 | |
| 99 |
+3
| --- www/mkindex.tcl | ||
| +++ www/mkindex.tcl | ||
| @@ -167,10 +167,13 @@ | ||
| 167 | 167 | <li> <a href='history.md'>Purpose and History of Fossil</a> |
| 168 | 168 | <li> <a href='build.wiki'>Compiling and installing Fossil</a> |
| 169 | 169 | <li> <a href='../COPYRIGHT-BSD2.txt'>License</a> |
| 170 | 170 | <li> <a href='userlinks.wiki'>Miscellaneous Docs for Fossil Users</a> |
| 171 | 171 | <li> <a href='hacker-howto.wiki'>Fossil Developer's Guide</a> |
| 172 | + <ul><li><a href='$ROOT/wiki?name=Release Build How-To'>Release Build How-To</a>, a.k.a. | |
| 173 | + how deliverables are built</li></ul> | |
| 174 | +</li> | |
| 172 | 175 | <li> <a href='$ROOT/wiki?name=To+Do+List'>To Do List (Wiki)</a> |
| 173 | 176 | <li> <a href='http://fossil-scm.org/fossil-book/home'>Fossil book</a> |
| 174 | 177 | </ul> |
| 175 | 178 | <h2 id="pindex">Other Documents:</h2> |
| 176 | 179 | <ul>} |
| 177 | 180 |
| --- www/mkindex.tcl | |
| +++ www/mkindex.tcl | |
| @@ -167,10 +167,13 @@ | |
| 167 | <li> <a href='history.md'>Purpose and History of Fossil</a> |
| 168 | <li> <a href='build.wiki'>Compiling and installing Fossil</a> |
| 169 | <li> <a href='../COPYRIGHT-BSD2.txt'>License</a> |
| 170 | <li> <a href='userlinks.wiki'>Miscellaneous Docs for Fossil Users</a> |
| 171 | <li> <a href='hacker-howto.wiki'>Fossil Developer's Guide</a> |
| 172 | <li> <a href='$ROOT/wiki?name=To+Do+List'>To Do List (Wiki)</a> |
| 173 | <li> <a href='http://fossil-scm.org/fossil-book/home'>Fossil book</a> |
| 174 | </ul> |
| 175 | <h2 id="pindex">Other Documents:</h2> |
| 176 | <ul>} |
| 177 |
| --- www/mkindex.tcl | |
| +++ www/mkindex.tcl | |
| @@ -167,10 +167,13 @@ | |
| 167 | <li> <a href='history.md'>Purpose and History of Fossil</a> |
| 168 | <li> <a href='build.wiki'>Compiling and installing Fossil</a> |
| 169 | <li> <a href='../COPYRIGHT-BSD2.txt'>License</a> |
| 170 | <li> <a href='userlinks.wiki'>Miscellaneous Docs for Fossil Users</a> |
| 171 | <li> <a href='hacker-howto.wiki'>Fossil Developer's Guide</a> |
| 172 | <ul><li><a href='$ROOT/wiki?name=Release Build How-To'>Release Build How-To</a>, a.k.a. |
| 173 | how deliverables are built</li></ul> |
| 174 | </li> |
| 175 | <li> <a href='$ROOT/wiki?name=To+Do+List'>To Do List (Wiki)</a> |
| 176 | <li> <a href='http://fossil-scm.org/fossil-book/home'>Fossil book</a> |
| 177 | </ul> |
| 178 | <h2 id="pindex">Other Documents:</h2> |
| 179 | <ul>} |
| 180 |
| --- www/permutedindex.html | ||
| +++ www/permutedindex.html | ||
| @@ -13,10 +13,13 @@ | ||
| 13 | 13 | <li> <a href='history.md'>Purpose and History of Fossil</a> |
| 14 | 14 | <li> <a href='build.wiki'>Compiling and installing Fossil</a> |
| 15 | 15 | <li> <a href='../COPYRIGHT-BSD2.txt'>License</a> |
| 16 | 16 | <li> <a href='userlinks.wiki'>Miscellaneous Docs for Fossil Users</a> |
| 17 | 17 | <li> <a href='hacker-howto.wiki'>Fossil Developer's Guide</a> |
| 18 | + <ul><li><a href='$ROOT/wiki?name=Release Build How-To'>Release Build How-To</a>, a.k.a. | |
| 19 | + how deliverables are built</li></ul> | |
| 20 | +</li> | |
| 18 | 21 | <li> <a href='$ROOT/wiki?name=To+Do+List'>To Do List (Wiki)</a> |
| 19 | 22 | <li> <a href='http://fossil-scm.org/fossil-book/home'>Fossil book</a> |
| 20 | 23 | </ul> |
| 21 | 24 | <h2 id="pindex">Other Documents:</h2> |
| 22 | 25 | <ul> |
| 23 | 26 |
| --- www/permutedindex.html | |
| +++ www/permutedindex.html | |
| @@ -13,10 +13,13 @@ | |
| 13 | <li> <a href='history.md'>Purpose and History of Fossil</a> |
| 14 | <li> <a href='build.wiki'>Compiling and installing Fossil</a> |
| 15 | <li> <a href='../COPYRIGHT-BSD2.txt'>License</a> |
| 16 | <li> <a href='userlinks.wiki'>Miscellaneous Docs for Fossil Users</a> |
| 17 | <li> <a href='hacker-howto.wiki'>Fossil Developer's Guide</a> |
| 18 | <li> <a href='$ROOT/wiki?name=To+Do+List'>To Do List (Wiki)</a> |
| 19 | <li> <a href='http://fossil-scm.org/fossil-book/home'>Fossil book</a> |
| 20 | </ul> |
| 21 | <h2 id="pindex">Other Documents:</h2> |
| 22 | <ul> |
| 23 |
| --- www/permutedindex.html | |
| +++ www/permutedindex.html | |
| @@ -13,10 +13,13 @@ | |
| 13 | <li> <a href='history.md'>Purpose and History of Fossil</a> |
| 14 | <li> <a href='build.wiki'>Compiling and installing Fossil</a> |
| 15 | <li> <a href='../COPYRIGHT-BSD2.txt'>License</a> |
| 16 | <li> <a href='userlinks.wiki'>Miscellaneous Docs for Fossil Users</a> |
| 17 | <li> <a href='hacker-howto.wiki'>Fossil Developer's Guide</a> |
| 18 | <ul><li><a href='$ROOT/wiki?name=Release Build How-To'>Release Build How-To</a>, a.k.a. |
| 19 | how deliverables are built</li></ul> |
| 20 | </li> |
| 21 | <li> <a href='$ROOT/wiki?name=To+Do+List'>To Do List (Wiki)</a> |
| 22 | <li> <a href='http://fossil-scm.org/fossil-book/home'>Fossil book</a> |
| 23 | </ul> |
| 24 | <h2 id="pindex">Other Documents:</h2> |
| 25 | <ul> |
| 26 |
+6
| --- www/quotes.wiki | ||
| +++ www/quotes.wiki | ||
| @@ -160,6 +160,12 @@ | ||
| 160 | 160 | <li>github is such a pale shadow of what fossil does. |
| 161 | 161 | |
| 162 | 162 | <blockquote> |
| 163 | 163 | <i>dkf on the Tcl chatroom, 2013-12-06</i> |
| 164 | 164 | </blockquote> |
| 165 | + | |
| 166 | +<li>[With fossil] I actually enjoy keeping track of source files again. | |
| 167 | + | |
| 168 | +<blockquote> | |
| 169 | +<a href="https://wholesomedonut.prose.sh/using-fossil-not-git">https://wholesomedonut.prose.sh/using-fossil-not-git</a> | |
| 170 | +</blockquote> | |
| 165 | 171 | </ol> |
| 166 | 172 |
| --- www/quotes.wiki | |
| +++ www/quotes.wiki | |
| @@ -160,6 +160,12 @@ | |
| 160 | <li>github is such a pale shadow of what fossil does. |
| 161 | |
| 162 | <blockquote> |
| 163 | <i>dkf on the Tcl chatroom, 2013-12-06</i> |
| 164 | </blockquote> |
| 165 | </ol> |
| 166 |
| --- www/quotes.wiki | |
| +++ www/quotes.wiki | |
| @@ -160,6 +160,12 @@ | |
| 160 | <li>github is such a pale shadow of what fossil does. |
| 161 | |
| 162 | <blockquote> |
| 163 | <i>dkf on the Tcl chatroom, 2013-12-06</i> |
| 164 | </blockquote> |
| 165 | |
| 166 | <li>[With fossil] I actually enjoy keeping track of source files again. |
| 167 | |
| 168 | <blockquote> |
| 169 | <a href="https://wholesomedonut.prose.sh/using-fossil-not-git">https://wholesomedonut.prose.sh/using-fossil-not-git</a> |
| 170 | </blockquote> |
| 171 | </ol> |
| 172 |
+1
-1
| --- www/sync.wiki | ||
| +++ www/sync.wiki | ||
| @@ -1042,11 +1042,11 @@ | ||
| 1042 | 1042 | <ul> |
| 1043 | 1043 | <li> <tt>http-request-</tt><i>N</i><tt>.txt</tt> |
| 1044 | 1044 | <li> <tt>http-reply-</tt><i>N</i><tt>.txt</tt> |
| 1045 | 1045 | </ul> |
| 1046 | 1046 | |
| 1047 | -<p>In the above, <i>N</i> is a integer that increments with each | |
| 1047 | +<p>In the above, <i>N</i> is an integer that increments with each | |
| 1048 | 1048 | round-trip. If you are having trouble on the server side, |
| 1049 | 1049 | you can run the "[/help?cmd=test-http|fossil test-http]" command in a |
| 1050 | 1050 | debugger using one the "http-request-N.txt" files as input and |
| 1051 | 1051 | single step through the processing performed by the server. |
| 1052 | 1052 | |
| 1053 | 1053 |
| --- www/sync.wiki | |
| +++ www/sync.wiki | |
| @@ -1042,11 +1042,11 @@ | |
| 1042 | <ul> |
| 1043 | <li> <tt>http-request-</tt><i>N</i><tt>.txt</tt> |
| 1044 | <li> <tt>http-reply-</tt><i>N</i><tt>.txt</tt> |
| 1045 | </ul> |
| 1046 | |
| 1047 | <p>In the above, <i>N</i> is a integer that increments with each |
| 1048 | round-trip. If you are having trouble on the server side, |
| 1049 | you can run the "[/help?cmd=test-http|fossil test-http]" command in a |
| 1050 | debugger using one the "http-request-N.txt" files as input and |
| 1051 | single step through the processing performed by the server. |
| 1052 | |
| 1053 |
| --- www/sync.wiki | |
| +++ www/sync.wiki | |
| @@ -1042,11 +1042,11 @@ | |
| 1042 | <ul> |
| 1043 | <li> <tt>http-request-</tt><i>N</i><tt>.txt</tt> |
| 1044 | <li> <tt>http-reply-</tt><i>N</i><tt>.txt</tt> |
| 1045 | </ul> |
| 1046 | |
| 1047 | <p>In the above, <i>N</i> is an integer that increments with each |
| 1048 | round-trip. If you are having trouble on the server side, |
| 1049 | you can run the "[/help?cmd=test-http|fossil test-http]" command in a |
| 1050 | debugger using one the "http-request-N.txt" files as input and |
| 1051 | single step through the processing performed by the server. |
| 1052 | |
| 1053 |