summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-09-27 08:42:39 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-09-27 08:42:39 +0000
commit74f0fc5311d2d8dfa2c559215e2b099a34923469 (patch)
treedc9858b8784b61022d2bdae82116ab44087666c5
parentAdding upstream version 1:9.8p1. (diff)
downloadopenssh-74f0fc5311d2d8dfa2c559215e2b099a34923469.tar.xz
openssh-74f0fc5311d2d8dfa2c559215e2b099a34923469.zip
Adding upstream version 1:9.9p1.upstream/1%9.9p1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--.depend3
-rw-r--r--.github/ci-status.md4
-rwxr-xr-x.github/configs8
-rwxr-xr-x.github/setup_ci.sh2
-rw-r--r--.github/workflows/c-cpp.yml1
-rw-r--r--.github/workflows/selfhosted.yml3
-rw-r--r--ChangeLog2140
-rw-r--r--LICENCE41
-rw-r--r--Makefile.in2
-rw-r--r--README2
-rw-r--r--auth.c21
-rw-r--r--channels.c8
-rw-r--r--channels.h4
-rw-r--r--cipher.c8
-rw-r--r--config.h.in12
-rwxr-xr-xconfigure29
-rw-r--r--configure.ac13
-rw-r--r--contrib/redhat/openssh.spec6
-rw-r--r--contrib/ssh-copy-id62
-rw-r--r--contrib/ssh-copy-id.121
-rw-r--r--contrib/suse/openssh.spec2
-rw-r--r--crypto_api.h7
-rw-r--r--defines.h4
-rw-r--r--kex-names.c8
-rw-r--r--kex.c4
-rw-r--r--kex.h16
-rw-r--r--kexc25519.c4
-rw-r--r--kexgen.c15
-rw-r--r--kexmlkem768x25519.c280
-rw-r--r--kexsntrup761x25519.c6
-rw-r--r--libcrux_mlkem768_sha3.h12332
-rw-r--r--loginrec.c89
-rw-r--r--match.c8
-rw-r--r--mlkem768.sh148
-rw-r--r--moduli879
-rw-r--r--monitor.c15
-rw-r--r--mux.c28
-rw-r--r--myproposal.h4
-rw-r--r--nchan.c6
-rw-r--r--openbsd-compat/arc4random.h2
-rw-r--r--openbsd-compat/openssl-compat.c26
-rw-r--r--openbsd-compat/openssl-compat.h10
-rw-r--r--openbsd-compat/port-linux.c2
-rw-r--r--packet.c26
-rw-r--r--packet.h6
-rw-r--r--readconf.c164
-rw-r--r--regress/cfginclude.sh26
-rw-r--r--regress/misc/fuzz-harness/Makefile44
-rw-r--r--regress/misc/fuzz-harness/mkcorpus_sntrup761.c82
-rw-r--r--regress/misc/fuzz-harness/sntrup761_dec_fuzz.cc74
-rw-r--r--regress/misc/fuzz-harness/sntrup761_enc_fuzz.cc57
-rwxr-xr-xregress/misc/fuzz-harness/watch-sntrup761.sh20
-rw-r--r--regress/multiplex.sh29
-rw-r--r--regress/rekey.sh118
-rw-r--r--regress/unittests/kex/Makefile3
-rw-r--r--regress/unittests/kex/test_kex.c6
-rw-r--r--regress/unittests/sshkey/common.c18
-rw-r--r--regress/unittests/sshkey/test_file.c11
-rw-r--r--regress/unittests/sshkey/test_sshkey.c26
-rw-r--r--regress/unittests/test_helper/fuzz.c2
-rw-r--r--servconf.c79
-rw-r--r--servconf.h6
-rw-r--r--sntrup761.c2884
-rw-r--r--sntrup761.sh62
-rw-r--r--srclimit.c4
-rw-r--r--srclimit.h12
-rw-r--r--ssh-add.c4
-rw-r--r--ssh-ecdsa-sk.c49
-rw-r--r--ssh-ecdsa.c258
-rw-r--r--ssh-keygen.08
-rw-r--r--ssh-keygen.18
-rw-r--r--ssh-keygen.c93
-rw-r--r--ssh-keyscan.c5
-rw-r--r--ssh-pkcs11-client.c83
-rw-r--r--ssh-pkcs11-helper.c89
-rw-r--r--ssh-pkcs11.c42
-rw-r--r--ssh-rsa.c385
-rw-r--r--ssh-sk.c29
-rw-r--r--ssh.05
-rw-r--r--ssh.16
-rw-r--r--ssh_api.c4
-rw-r--r--ssh_config.038
-rw-r--r--ssh_config.522
-rw-r--r--sshbuf-getput-crypto.c12
-rw-r--r--sshbuf.c18
-rw-r--r--sshbuf.h4
-rw-r--r--sshconnect2.c3
-rw-r--r--sshd-session.c31
-rw-r--r--sshd.06
-rw-r--r--sshd.88
-rw-r--r--sshd.c13
-rw-r--r--sshd_config.052
-rw-r--r--sshd_config.547
-rw-r--r--sshkey.c290
-rw-r--r--sshkey.h27
-rw-r--r--version.h4
96 files changed, 18138 insertions, 3549 deletions
diff --git a/.depend b/.depend
index 1d7d060..45fc6b9 100644
--- a/.depend
+++ b/.depend
@@ -71,6 +71,7 @@ kexgen.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat
kexgex.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
kexgexc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
kexgexs.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
+kexmlkem768x25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshkey.h kex.h mac.h crypto_api.h sshbuf.h digest.h ssherr.h log.h
kexsntrup761x25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h
krl.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h sshbuf.h ssherr.h sshkey.h authfile.h misc.h log.h digest.h bitmap.h utf8.h krl.h
log.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ssherr.h match.h
@@ -80,7 +81,7 @@ mac.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h
match.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h match.h misc.h
misc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h misc.h log.h ssherr.h ssh.h sshbuf.h
moduli.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
-monitor.o: chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h crypto_api.h dh.h packet.h dispatch.h auth-options.h sshpty.h channels.h session.h sshlogin.h canohost.h log.h ssherr.h misc.h servconf.h monitor.h monitor_wrap.h monitor_fdpass.h compat.h ssh2.h authfd.h match.h sk-api.h
+monitor.o: chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h crypto_api.h dh.h packet.h dispatch.h auth-options.h sshpty.h channels.h session.h sshlogin.h canohost.h log.h ssherr.h misc.h servconf.h monitor.h monitor_wrap.h monitor_fdpass.h compat.h ssh2.h authfd.h match.h sk-api.h srclimit.h
monitor.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h openbsd-compat/openssl-compat.h atomicio.h xmalloc.h ssh.h sshkey.h sshbuf.h hostfile.h auth.h auth-pam.h audit.h loginrec.h cipher.h cipher-chachapoly.h
monitor_fdpass.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h ssherr.h monitor_fdpass.h
monitor_wrap.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/fnmatch.h openbsd-compat/getopt.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h sshbuf.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h crypto_api.h hostfile.h auth.h auth-pam.h audit.h
diff --git a/.github/ci-status.md b/.github/ci-status.md
index fbf7c5f..4fa7389 100644
--- a/.github/ci-status.md
+++ b/.github/ci-status.md
@@ -6,6 +6,10 @@ master :
[![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/openssh.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:openssh)
[![Coverity Status](https://scan.coverity.com/projects/21341/badge.svg)](https://scan.coverity.com/projects/openssh-portable)
+9.8 :
+[![C/C++ CI](https://github.com/openssh/openssh-portable/actions/workflows/c-cpp.yml/badge.svg?branch=V_9_8)](https://github.com/openssh/openssh-portable/actions/workflows/c-cpp.yml?query=branch:V_9_8)
+[![C/C++ CI self-hosted](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml/badge.svg?branch=V_9_8)](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml?query=branch:V_9_8)
+
9.7 :
[![C/C++ CI](https://github.com/openssh/openssh-portable/actions/workflows/c-cpp.yml/badge.svg?branch=V_9_7)](https://github.com/openssh/openssh-portable/actions/workflows/c-cpp.yml?query=branch:V_9_7)
[![C/C++ CI self-hosted](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml/badge.svg?branch=V_9_7)](https://github.com/openssh/openssh-portable-selfhosted/actions/workflows/selfhosted.yml?query=branch:V_9_7)
diff --git a/.github/configs b/.github/configs
index 6134cb6..4f47f82 100755
--- a/.github/configs
+++ b/.github/configs
@@ -187,7 +187,7 @@ case "$config" in
LIBCRYPTOFLAGS="--without-openssl"
TEST_TARGET=t-exec
;;
- valgrind-[1-5]|valgrind-unit)
+ valgrind-[1-4]|valgrind-unit)
# rlimit sandbox and FORTIFY_SOURCE confuse Valgrind.
CONFIGFLAGS="--without-sandbox --without-hardening"
CONFIGFLAGS="$CONFIGFLAGS --with-cppflags=-D_FORTIFY_SOURCE=0"
@@ -197,10 +197,9 @@ case "$config" in
# Valgrind slows things down enough that the agent timeout test
# won't reliably pass, and the unit tests run longer than allowed
# by github so split into separate tests.
- tests2="integrity try-ciphers"
+ tests2="integrity try-ciphers rekey"
tests3="krl forward-control sshsig agent-restrict kextype sftp"
tests4="cert-userkey cert-hostkey kextype sftp-perm keygen-comment percent"
- tests5="rekey"
case "$config" in
valgrind-1)
# All tests except agent-timeout (which is flaky under valgrind),
@@ -220,9 +219,6 @@ case "$config" in
valgrind-4)
LTESTS="${tests4}"
;;
- valgrind-5)
- LTESTS="${tests5}"
- ;;
valgrind-unit)
TEST_TARGET="unit USE_VALGRIND=1"
;;
diff --git a/.github/setup_ci.sh b/.github/setup_ci.sh
index f0f2761..7e1beca 100755
--- a/.github/setup_ci.sh
+++ b/.github/setup_ci.sh
@@ -14,7 +14,7 @@ case "$host" in
echo Removing extended ACLs so umask works as expected.
setfacl -b . regress
PACKAGES="$PACKAGES,autoconf,automake,cygwin-devel,gcc-core"
- PACKAGES="$PACKAGES,make,openssl-devel,zlib-devel"
+ PACKAGES="$PACKAGES,make,openssl,libssl-devel,zlib-devel"
;;
*-darwin*)
PACKAGER=brew
diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml
index 6090287..c179f73 100644
--- a/.github/workflows/c-cpp.yml
+++ b/.github/workflows/c-cpp.yml
@@ -32,7 +32,6 @@ jobs:
- { target: ubuntu-20.04, config: valgrind-2 }
- { target: ubuntu-20.04, config: valgrind-3 }
- { target: ubuntu-20.04, config: valgrind-4 }
- - { target: ubuntu-20.04, config: valgrind-5 }
- { target: ubuntu-20.04, config: valgrind-unit }
- { target: ubuntu-20.04, config: c89 }
- { target: ubuntu-20.04, config: clang-6.0 }
diff --git a/.github/workflows/selfhosted.yml b/.github/workflows/selfhosted.yml
index 1672973..755bb0c 100644
--- a/.github/workflows/selfhosted.yml
+++ b/.github/workflows/selfhosted.yml
@@ -52,6 +52,7 @@ jobs:
- obsd74
- obsdsnap
- obsdsnap-i386
+ - omnios
- openindiana
- ubuntu-2204
config:
@@ -75,6 +76,7 @@ jobs:
- { target: dfly58, config: pam, host: libvirt }
- { target: dfly60, config: pam, host: libvirt }
- { target: dfly62, config: pam, host: libvirt }
+ - { target: dfly64, config: pam, host: libvirt }
- { target: fbsd10, config: pam, host: libvirt }
- { target: fbsd12, config: pam, host: libvirt }
- { target: fbsd13, config: pam, host: libvirt }
@@ -82,6 +84,7 @@ jobs:
- { target: nbsd8, config: pam, host: libvirt }
- { target: nbsd9, config: pam, host: libvirt }
- { target: nbsd10, config: pam, host: libvirt }
+ - { target: omnios, config: pam, host: libvirt }
# ARM64 VMs
- { target: obsd-arm64, config: default, host: libvirt-arm64 }
# VMs with persistent disks that have their own runner.
diff --git a/ChangeLog b/ChangeLog
index a1a5265..c085866 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,1078 @@
+commit 46d1fb16b20e971b9ac15e86a3d3e350b49c9ad6
+Author: Damien Miller <djm@mindrot.org>
+Date: Fri Sep 20 08:20:13 2024 +1000
+
+ update version numbers
+
+commit 0bdca1f218971b38728a0a129f482476baff0968
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Thu Sep 19 22:17:44 2024 +0000
+
+ upstream: openssh-9.9
+
+ OpenBSD-Commit-ID: 303417285f1a73b9cb7a2ae78d3f493bbbe31f98
+
+commit ef2d7f2d3e1b4c9ae71bacf963e76a92ab8be543
+Author: Damien Miller <djm@mindrot.org>
+Date: Wed Sep 18 16:03:23 2024 +1000
+
+ include openbsd-compat/base64.c license in LICENSE
+
+commit 7ef362b989c8d1f7596f557f22e5924b9c08f0ea
+Author: Damien Miller <djm@mindrot.org>
+Date: Wed Sep 18 09:01:23 2024 +1000
+
+ conditionally include mman.h in arc4random code
+
+commit 5fb2b5ad0e748732a27fd8cc16a7ca3c21770806
+Author: Damien Miller <djm@mindrot.org>
+Date: Tue Sep 17 11:53:24 2024 +1000
+
+ fix bug in recently-added sntrup761 fuzzer
+
+ key values need to be static to persist across invocations;
+ spotted by the Qualys Security Advisory team.
+
+commit 0ca128c9ee894f1b0067abd473bfb33171df67f8
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Mon Sep 16 05:37:05 2024 +0000
+
+ upstream: use 64 bit math to avoid signed underflow. upstream code
+
+ relies on using -fwrapv to provide defined over/underflow behaviour, but we
+ use -ftrapv to catch integer errors and abort the program. ok dtucker@
+
+ OpenBSD-Commit-ID: 8933369b33c17b5f02479503d0a92d87bc3a574b
+
+commit f82e5e22cad88c81d8a117de74241328c7b101c3
+Author: jmc@openbsd.org <jmc@openbsd.org>
+Date: Sun Sep 15 08:27:38 2024 +0000
+
+ upstream: minor grammar/sort fixes for refuseconnection; ok djm
+
+ OpenBSD-Commit-ID: 1c81f37b138b8b66abba811fec836388a0f3e6da
+
+commit 0c1165fc78e8fe69b5df71f81a8f944554a68b53
+Author: Damien Miller <djm@mindrot.org>
+Date: Sun Sep 15 13:30:13 2024 +1000
+
+ avoid gcc warning in fuzz test
+
+commit ce171d0718104b643854b53443ff72f7283d33f2
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Sun Sep 15 03:09:44 2024 +0000
+
+ upstream: bad whitespace in config dump output
+
+ OpenBSD-Commit-ID: d899c13b0e8061d209298eaf58fe53e3643e967c
+
+commit 671c440786a5a66216922f15d0007b60f1e6733f
+Author: Damien Miller <djm@mindrot.org>
+Date: Sun Sep 15 12:53:59 2024 +1000
+
+ use construct_utmp to construct btmp records
+
+ Simpler and removes some code with the old-style BSD license.
+
+commit 930cb02b6113df72fbc732b9feb8e4f490952a81
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Sun Sep 15 02:20:51 2024 +0000
+
+ upstream: update the Streamlined NTRU Prime code from the "ref"
+
+ implementation in SUPERCOP 20201130 to the "compact" implementation in
+ SUPERCOP 20240808. The new version is substantially faster. Thanks to Daniel
+ J Bernstein for pointing out the new implementation (and of course for
+ writing it).
+
+ tested in snaps/ok deraadt@
+
+ OpenBSD-Commit-ID: bf1a77924c125ecdbf03e2f3df8ad13bd3dafdcb
+
+commit 9306d6017e0ce5dea6824c29ca5ba5673c2923ad
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Sun Sep 15 01:19:56 2024 +0000
+
+ upstream: document Match invalid-user
+
+ OpenBSD-Commit-ID: 2c84a9b517283e9711e2812c1f268081dcb02081
+
+commit 0118a4da21147a88a56dc8b90bbc2849fefd5c1e
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Sun Sep 15 01:18:26 2024 +0000
+
+ upstream: add a "Match invalid-user" predicate to sshd_config Match
+
+ options.
+
+ This allows writing Match conditions that trigger for invalid username.
+ E.g.
+
+ PerSourcePenalties refuseconnection:90s
+ Match invalid-user
+ RefuseConnection yes
+
+ Will effectively penalise bots try to guess passwords for bogus accounts,
+ at the cost of implicitly revealing which accounts are invalid.
+
+ feedback markus@
+
+ OpenBSD-Commit-ID: 93d3a46ca04bbd9d84a94d1e1d9d3a21073fbb07
+
+commit 7875975136f275619427604900cb0ffd7020e845
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Sun Sep 15 01:11:26 2024 +0000
+
+ upstream: Add a "refuseconnection" penalty class to sshd_config
+
+ PerSourcePenalties
+
+ This allows penalising connection sources that have had connections
+ dropped by the RefuseConnection option. ok markus@
+
+ OpenBSD-Commit-ID: 3c8443c427470bb3eac1880aa075cb4864463cb6
+
+commit 8d21713b669b8516ca6d43424a356fccc37212bb
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Sun Sep 15 01:09:40 2024 +0000
+
+ upstream: Add a sshd_config "RefuseConnection" option
+
+ If set, this will terminate the connection at the first authentication
+ request (this is the earliest we can evaluate sshd_config Match blocks)
+
+ ok markus@
+
+ OpenBSD-Commit-ID: 43cc2533984074c44d0d2f92eb93f661e7a0b09c
+
+commit acad117e66018fe1fa5caf41b36e6dfbd61f76a1
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Sun Sep 15 00:58:01 2024 +0000
+
+ upstream: switch sshd_config Match processing to the argv tokeniser
+
+ too; ok markus@
+
+ OpenBSD-Commit-ID: b74b5b0385f2e0379670e2b869318a65b0bc3923
+
+commit baec3f7f4c60cd5aa1bb9adbeb6dfa4a172502a8
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Sun Sep 15 00:57:36 2024 +0000
+
+ upstream: switch "Match" directive processing over to the argv
+
+ string tokeniser, making it possible to use shell-like quoting in Match
+ directives, particularly "Match exec". ok markus@
+
+ OpenBSD-Commit-ID: 0877309650b76f624b2194c35dbacaf065e769a5
+
+commit dd424d7c382c2074ab70f1b8ad4f169a10f60ee7
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Sun Sep 15 00:47:01 2024 +0000
+
+ upstream: include pathname in some of the ssh-keygen passphrase
+
+ prompts. Helps the user know what's going on when ssh-keygen is invoked via
+ other tools. Requested in GHPR503
+
+ OpenBSD-Commit-ID: 613b0bb6cf845b7e787d69a5b314057ceda6a8b6
+
+commit 62bbf8f825cc390ecb0523752ddac1435006f206
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Sun Sep 15 00:41:18 2024 +0000
+
+ upstream: Do not apply authorized_keys options when signature
+
+ verification fails. Prevents restrictive key options being incorrectly
+ applied to subsequent keys in authorized_keys. bz3733, ok markus@
+
+ OpenBSD-Commit-ID: ba3776d9da4642443c19dbc015a1333622eb5a4e
+
+commit 49f325fd47af4e53fcd7aafdbcc280e53f5aa5ce
+Author: Wu Weixin <wuweixin@gmail.com>
+Date: Fri Aug 2 22:16:40 2024 +0800
+
+ Fix without_openssl always being set to 1
+
+ In Fedora systems, %{?rhel} is empty. In RHEL systems, %{?fedora} is
+ empty. Therefore, the original code always sets without_openssl to 1.
+
+commit c21c3a2419bbc1c59cb1a16ea356e703e99a90d9
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Thu Sep 12 00:36:27 2024 +0000
+
+ upstream: Relax absolute path requirement back to what it was prior to
+
+ OpenSSH 9.8, which incorrectly required that sshd was started with an
+ absolute path in inetd mode. bz3717, patch from Colin Wilson
+
+ OpenBSD-Commit-ID: 25c57f22764897242d942853f8cccc5e991ea058
+
+commit 1bc426f51b0a5cfdcfbd205218f0b6839ffe91e9
+Author: naddy@openbsd.org <naddy@openbsd.org>
+Date: Mon Sep 9 14:41:21 2024 +0000
+
+ upstream: document the mlkem768x25519-sha256 key exchange algorithm
+
+ OpenBSD-Commit-ID: fa18dccdd9753dd287e62ecab189b3de45672521
+
+commit 0a2db61a5ffc64d2e2961c52964f933879952fc7
+Author: Darren Tucker <dtucker@dtucker.net>
+Date: Tue Sep 10 21:11:14 2024 +1000
+
+ Spell omnios test host correctly.
+
+commit 059ed698a47c9af541a49cf754fd09f984ac5a21
+Author: Darren Tucker <dtucker@dtucker.net>
+Date: Tue Sep 10 18:52:02 2024 +1000
+
+ Add omnios test target.
+
+commit f4ff91575a448b19176ceaa8fd6843a25f39d572
+Author: Darren Tucker <dtucker@dtucker.net>
+Date: Tue Sep 10 18:45:55 2024 +1000
+
+ Wrap stdint.h in ifdef.
+
+commit ff714f001d20a9c843ee1fd9d92a16d40567d264
+Author: Darren Tucker <dtucker@dtucker.net>
+Date: Mon Sep 9 19:31:54 2024 +1000
+
+ Also test PAM on dfly64.
+
+commit 509b757c052ea969b3a41fc36818b44801caf1cf
+Author: Damien Miller <djm@mindrot.org>
+Date: Mon Sep 9 21:50:14 2024 +1000
+
+ stubs for ML-KEM KEX functions
+
+ used for C89 compilers
+
+commit 273581210c99ce7275b8efdefbb9f89e1c22e341
+Author: Damien Miller <djm@mindrot.org>
+Date: Mon Sep 9 17:30:38 2024 +1000
+
+ declare defeat trying to detect C89 compilers
+
+ I can't find a reliable way to detect the features the ML-KEM code
+ requires in configure. Give up for now and use VLA support (that we
+ can detect) as a proxy for "old compiler" and turn off ML-KEM if
+ it isn't supported.
+
+commit e8a0f19b56dfa20f98ea9876d7171ec315fb338a
+Author: Damien Miller <djm@mindrot.org>
+Date: Mon Sep 9 16:46:40 2024 +1000
+
+ fix previous; check for C99 compound literals
+
+ The previous commit was incorrect (or at least insufficient), the
+ ML-KEM code is actually using compound literals, so test for them.
+
+commit 7c07bec1446978bebe0780ed822c8fedfb377ae8
+Author: Damien Miller <djm@mindrot.org>
+Date: Mon Sep 9 16:06:21 2024 +1000
+
+ test for compiler feature needed for ML-KEM
+
+ The ML-KEM implementation we uses need the compiler to support
+ C99-style named struct initialisers (e.g foo = {.bar = 1}). We
+ still support (barely) building OpenSSH with older compilers, so
+ add a configure test for this.
+
+commit d469d5f348772058789d35332d1ccb0b109c28ef
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Mon Sep 9 03:13:39 2024 +0000
+
+ upstream: test mlkem768x25519-sha256
+
+ OpenBSD-Regress-ID: 7baf6bc39ae55648db1a2bfdc55a624954847611
+
+commit 62fb2b51bb7f6863c3ab697f397b2068da1c993f
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Mon Sep 9 02:39:57 2024 +0000
+
+ upstream: pull post-quantum ML-KEM/x25519 key exchange out from
+
+ compile-time flag now than an IANA codepoint has been assigned for the
+ algorithm.
+
+ Add mlkem768x25519-sha256 in 2nd KexAlgorithms preference slot.
+
+ ok markus@
+
+ OpenBSD-Commit-ID: 9f50a0fae7d7ae8b27fcca11f8dc6f979207451a
+
+commit a8ad7a2952111c6ce32949a775df94286550af6b
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Fri Sep 6 02:30:44 2024 +0000
+
+ upstream: make parsing user@host consistently look for the last '@' in
+
+ the string rather than the first. This makes it possible to use usernames
+ that contain '@' characters.
+ MIME-Version: 1.0
+ Content-Type: text/plain; charset=UTF-8
+ Content-Transfer-Encoding: 8bit
+
+ Prompted by Max Zettlmeißl; feedback/ok millert@
+
+ OpenBSD-Commit-ID: 0b16eec246cda15469ebdcf3b1e2479810e394c5
+
+commit 13cc78d016b67a74a67f1c97c7c348084cd9212c
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Wed Sep 4 05:33:34 2024 +0000
+
+ upstream: be more strict in parsing key type names. Only allow
+
+ shortnames (e.g "rsa") in user-interface code and require full SSH protocol
+ names (e.g. "ssh-rsa") everywhere else.
+
+ Prompted by bz3725; ok markus@
+
+ OpenBSD-Commit-ID: b3d8de9dac37992eab78adbf84fab2fe0d84b187
+
+commit ef8472309a68e319018def6f8ea47aeb40d806f5
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Wed Sep 4 05:11:33 2024 +0000
+
+ upstream: fix RCSID in output
+
+ OpenBSD-Commit-ID: 889ae07f2d2193ddc4351711919134664951dd76
+
+commit ba2ef20c75c5268d4d1257adfc2ac11c930d31e1
+Author: jmc@openbsd.org <jmc@openbsd.org>
+Date: Tue Sep 3 06:17:48 2024 +0000
+
+ upstream: envrionment -> environment;
+
+ OpenBSD-Commit-ID: b719f39c20e8c671ec6135c832d6cc67a595af9c
+
+commit e66c0c5673a4304a3a9fbf8305c6a19f8653740f
+Author: Damien Miller <djm@mindrot.org>
+Date: Wed Sep 4 15:35:29 2024 +1000
+
+ add basic fuzzers for our import of sntrup761
+
+commit d19dea6330ecd4eb403fef2423bd7e127f4c9828
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Tue Sep 3 05:58:56 2024 +0000
+
+ upstream: regression test for Include variable expansion
+
+ OpenBSD-Regress-ID: 35477da3ba1abd9ca64bc49080c50a9c1350c6ca
+
+commit 8c4d6a628051e318bae2f283e8dc38b896400862
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Tue Sep 3 05:29:55 2024 +0000
+
+ upstream: allow the "Include" directive to expand the same set of
+
+ %-tokens that "Match Exec" and environment variables.
+
+ ok dtucker@
+
+ OpenBSD-Commit-ID: 12ef521eaa966a9241e684258564f52f1f3c5d37
+
+commit 51b82648b6827675fc0cde21175fd1ed8e89aab2
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Mon Sep 2 12:18:35 2024 +0000
+
+ upstream: missing ifdef
+
+ OpenBSD-Commit-ID: 85f09da957dd39fd0abe08fe5ee19393f25c2021
+
+commit f68312eb593943127b39ba79a4d7fa438c34c153
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Mon Sep 2 12:13:56 2024 +0000
+
+ upstream: Add experimental support for hybrid post-quantum key exchange
+
+ ML-KEM768 with ECDH/X25519 from the Internet-draft:
+ https://datatracker.ietf.org/doc/html/draft-kampanakis-curdle-ssh-pq-ke-03
+
+ This is based on previous patches from markus@ but adapted to use the
+ final FIPS203 standard ML-KEM using a formally-verified implementation
+ from libcrux.
+
+ Note this key exchange method is still a draft and thus subject to
+ change. It is therefore disabled by default; set MLKEM=yes to build it.
+ We're making it available now to make it easy for other SSH
+ implementations to test against it.
+
+ ok markus@ deraadt@
+
+ OpenBSD-Commit-ID: 02a8730a570b63fa8acd9913ec66353735dea42c
+
+commit 05f2b141cfcc60c7cdedf9450d2b9d390c19eaad
+Author: Antonio Larrosa <alarrosa@suse.com>
+Date: Fri Aug 23 12:21:06 2024 +0200
+
+ Don't skip audit before exitting cleanup_exit
+
+ This fixes an issue where the SSH_CONNECTION_ABANDON event is not
+ audited because cleanup_exit overrides the regular _exit too soon and
+ as a result, failed auth attempts are not logged correctly.
+
+ The problem was introduced in 81c1099d22b81ebfd20a334ce986c4f753b0db29
+ where the code from upstream was merged before the audit_event call when
+ it should have been merged right before the _exit call in order to honor
+ the comment that just mentions an override of the exit value.
+
+commit 16eaf9d401e70996f89f3f417738a8db421aa959
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Wed Aug 28 12:08:26 2024 +0000
+
+ upstream: fix test: -F is the argument to specify a non-default
+
+ ssh_config, not -f (this is sadly not a new bug)
+
+ OpenBSD-Regress-ID: 45a7bda4cf33f2cea218507d8b6a55cddbcfb322
+
+commit 10ccf611ab8ecba9ce6b0548c5ccd8c1220baf92
+Author: deraadt@openbsd.org <deraadt@openbsd.org>
+Date: Fri Aug 23 04:51:00 2024 +0000
+
+ upstream: As defined in the RFC, the SSH protocol has negotiable
+
+ compression support (which is requested as the name "zlib"). Compression
+ starts very early in the session. Relative early in OpenSSH lifetime, privsep
+ was added to sshd, and this required a shared-memory hack so the two
+ processes could see what was going on in the dataflow. This shared-memory
+ hack was soon recognized as a tremendous complexity risk, because it put libz
+ (which very much trusts it's memory) in a dangerous place, and a new option
+ ("zlib@openssh.com") was added begins compression after authentication (aka
+ delayed-compression). That change also permitted removal of the
+ shared-memory hack. Despite removal from the server, the old "zlib" support
+ remained in the client, to allow negotiation with non-OpenSSH daemons which
+ lack the delayed-compression option. This commit deletes support for the
+ older "zlib" option in the client. It reduces our featureset in a small way,
+ and encourages other servers to move to a better design. The SSH protocol is
+ different enough that compressed-key-material attacks like BEAST are
+ unlikely, but who wants to take the chance? We encourage other ssh servers
+ who care about optional compression support to add delayed-zlib support.
+ (Some already do "zlib@openssh.com") ok djm markus
+
+ OpenBSD-Commit-ID: 6df986f38e4ab389f795a6e39e7c6857a763ba72
+
+commit aee54878255d71bf93aa6e91bbd4eb1825c0d1b9
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Thu Aug 22 23:11:30 2024 +0000
+
+ upstream: sntrup761x25519-sha512 now has an IANA codepoint assigned, so
+
+ we can make the algorithm available without the @openssh.com suffix too. ok
+ markus@ deraadt@
+
+ OpenBSD-Commit-ID: eeed8fcde688143a737729d3d56d20ab4353770f
+
+commit a76a6b85108e3032c8175611ecc5746e7131f876
+Author: Darren Tucker <dtucker@dtucker.net>
+Date: Thu Aug 22 20:36:12 2024 +1000
+
+ Move rekey test into valgrind-2.
+
+ Now that the rekey test has been optimized it's fast enough to not be in
+ its own valgrind test, so move it into valgrind-2, which is currently
+ the quickest of the others, bringing all of them to roughly the same
+ runtime of ~1.1 hours.
+
+commit 7e75e3f57c41b9a6e6401e7674d7c2ff5c33975b
+Author: dtucker@openbsd.org <dtucker@openbsd.org>
+Date: Thu Aug 22 10:21:02 2024 +0000
+
+ upstream: Use aes128-ctr for MAC tests since default has implicit MAC.
+
+ Also verify that the Cipher or MAC we intended to use is actually the one
+ selected during the test.
+
+ OpenBSD-Regress-ID: ff43fed30552afe23d1364526fe8cf88cbfafe1d
+
+commit ebc890b8b4ba08c84cd1066b7b94b2b11f6c4cb4
+Author: Damien Miller <djm@mindrot.org>
+Date: Thu Aug 22 09:45:49 2024 +1000
+
+ fix incorrect default for PasswordAuthentication
+
+ merge botch spotted by gsgleason
+
+commit 15ace435ea1c2fab2a1cc7d9c3157fe20c776b80
+Author: dtucker@openbsd.org <dtucker@openbsd.org>
+Date: Wed Aug 21 10:33:27 2024 +0000
+
+ upstream: Some awks won't match on the \r so delete it instead. Fixes
+
+ regress in portable on, eg Solaris.
+
+ OpenBSD-Regress-ID: 44a96d6d2f8341d89b7d5fff777502b92ac9e9ba
+
+commit 51c96b6ed627779a04493a8fe25747996a37f3c2
+Author: dtucker@openbsd.org <dtucker@openbsd.org>
+Date: Wed Aug 21 07:06:27 2024 +0000
+
+ upstream: Import regenerated moduli.
+
+ OpenBSD-Commit-ID: 5db7049ad5558dee5b2079d3422e8ddab187c1cc
+
+commit 25c52f37a82c4da48ec537de37d7c168982b8d6d
+Author: dtucker@openbsd.org <dtucker@openbsd.org>
+Date: Wed Aug 21 06:59:08 2024 +0000
+
+ upstream: Use curve25519-sha256 kex where possible.
+
+ Except where we're explicitly testing a different kex, use
+ curve25519-sha256 since it's faster than the default and supported even
+ when configured without OpenSSL. Add a check to ensure that the kex we
+ intended to test is the one we actually tested. Speeds test up by ~5%.
+
+ OpenBSD-Regress-ID: 3b27fcc2ae953cb08fd82a0d3155c498b226d6e0
+
+commit 3eb62b7ba49483c309b483eb9002a679014f3887
+Author: dtucker@openbsd.org <dtucker@openbsd.org>
+Date: Tue Aug 20 12:36:59 2024 +0000
+
+ upstream: Send only as much data as needed to trigger rekeying. Speeds
+
+ up tests by about 10% in the common case, hopefully more when instrumented
+ with something like valgrind.
+
+ OpenBSD-Regress-ID: 7bf9292b4803357efcf0baf7cfbdc8521f212da1
+
+commit cbd3f034bbf7853618fac99d7d868a2250154ea7
+Author: Damien Miller <djm@mindrot.org>
+Date: Wed Aug 21 09:18:29 2024 +1000
+
+ simplify sshkey_prekey_alloc(); always use mmap
+
+commit 4442bbc2fc661277a6dabfedb756a7e15ee8b8b8
+Author: dtucker@openbsd.org <dtucker@openbsd.org>
+Date: Tue Aug 20 09:15:49 2024 +0000
+
+ upstream: Merge AEAD test into main test loop.
+
+ Removes 3 duplicate tests and speeds overall test up by about 1%.
+
+ OpenBSD-Regress-ID: 5e5c9ff3f7588091ed369e34ac28520490ad2619
+
+commit 829976a63fd1efae3a4c3e7c16fded59d92edb67
+Author: dtucker@openbsd.org <dtucker@openbsd.org>
+Date: Tue Aug 20 09:02:45 2024 +0000
+
+ upstream: Set a default RekeyLimit of 256k.
+
+ Used unless overridden by a command-line flag, which simplifies some of
+ the ssh command lines.
+
+ OpenBSD-Regress-ID: e7cffa57027088e10336e412b34113969f88cb87
+
+commit 57d02c9ea36aebad4e7146d46e041b6b2e582f7f
+Author: dtucker@openbsd.org <dtucker@openbsd.org>
+Date: Tue Aug 20 07:52:43 2024 +0000
+
+ upstream: Add Compression=no to default ssh_config.
+
+ All of the rekey tests use it (otherwise the encrypted byte counts would
+ not match) so this lets us simplify the command lines.
+
+ OpenBSD-Regress-ID: dab7ce10f4cf6c68827eb8658141272aab3ea262
+
+commit 7254eb26f7c0772c4b47c3b32f6d1b15855cdd8c
+Author: dtucker@openbsd.org <dtucker@openbsd.org>
+Date: Tue Aug 20 07:41:35 2024 +0000
+
+ upstream: Remove duplicate curve25519-sha256 kex.
+
+ curve25519-sha256@libssh.org is the pre-standardization name for the same
+ thing, so remove it as a duplicate. Speeds up test by a tiny amount.
+
+ OpenBSD-Regress-ID: 5a5ee5fa1595a6e140b1cc16040bedf5996a5715
+
+commit 749896b874928c2785256cae4d75161dc3bfcc7d
+Author: dtucker@openbsd.org <dtucker@openbsd.org>
+Date: Tue Aug 20 07:27:25 2024 +0000
+
+ upstream: Unnest rekey param parsing test and use ssh not sshd.
+
+ ssh uses the same parsing code, now has "-G" to dump its config and is
+ slightly faster to start up. This speeds up the test slightly (~5%) in the
+ common case but should help more during instrumented tests, eg under
+ valgrind, where startup costs are magnified.
+
+ OpenBSD-Regress-ID: 07c3acaf4c728e641033071f4441afc88141b0d0
+
+commit 2b1762115481ff2b7a60fd4db2ae69b725437462
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Tue Aug 20 11:10:04 2024 +0000
+
+ upstream: actually use the length parameter that was passed in rather
+
+ than a constant (this makes no difference in practice because the length is
+ always the same); reported by martin AT nmkd.net
+
+ OpenBSD-Commit-ID: 4aecce232c2fe9b16e9217ff6bcb3c848d853e7e
+
+commit d922762ca16a7381131b242f49d7376c41fabcb5
+Author: Damien Miller <djm@mindrot.org>
+Date: Tue Aug 20 13:55:30 2024 +1000
+
+ private key coredump protection for Linux/FreeBSD
+
+ platforms not supporting coredump exclusion using mmap/madvise flags
+ fall back to plain old malloc(3).
+
+commit cc048ca536d6bed6f2285b07040b0d57cd559ba5
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Tue Aug 20 03:48:30 2024 +0000
+
+ upstream: place shielded keys (i.e. keys at rest in RAM) into memory
+
+ allocated using mmap(3) with MAP_CONCEAL set. This prevents exposure of the
+ key material in coredumps, etc (this is in addition to other measures we take
+ in this area).
+
+ ok deraadt@
+
+ OpenBSD-Commit-ID: cbbae59f337a00c9858d6358bc65f74e62261369
+
+commit a0b35c791cad1f85481b23ba46373060292e1c80
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Sat Aug 17 08:35:04 2024 +0000
+
+ upstream: mention that ed25519 is the default key type generated and
+
+ clarify that rsa-sha2-512 is the default signature scheme when RSA is in use.
+ Based on GHPR505 from SebastianRzk
+
+ OpenBSD-Commit-ID: 1d90df71636a04601685d2a10a8233bcc8d4f4c5
+
+commit 127a50f2c80572ed1a021feb11ecf941e92cbbef
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Sat Aug 17 08:23:04 2024 +0000
+
+ upstream: fix minor memory leak in Subsystem option parsing; from
+
+ Antonio Larrosa via GHPR515
+
+ OpenBSD-Commit-ID: fff3bbefd1b2c45c98cbe45c6b857b15d8a2d364
+
+commit 171427261d2079941eb1041079dbae875da37cbc
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Sat Aug 17 08:09:50 2024 +0000
+
+ upstream: fix swapping of source and destination addresses in some sshd
+
+ log messages
+
+ OpenBSD-Commit-ID: 24d4cbb86325275df1f037545aa3b91456e52d25
+
+commit 2a50a8f1fa57857a5e124a2280bcf61cc63c77f7
+Author: Darren Tucker <dtucker@dtucker.net>
+Date: Sat Aug 17 11:10:19 2024 +1000
+
+ Add compat functions for EVP_Digest{Sign,Verify}.
+
+ This should make LibreSSL 3.1.x through 3.3.x work again. Code from
+ tb@, ok djm@. Restore the test configs covering those.
+
+commit 1c3a7145260e03037cc18715b883880836fd122d
+Author: Philip Hands <phil@hands.com>
+Date: Thu Aug 8 13:03:51 2024 +0200
+
+ make sure that usage & man page match
+
+ SSH-Copy-ID-Upstream: da5b1abe55b72a16e0430e7598e1573da01779c0
+
+commit cd0d681645b9adcf2467e7838bfd9d5142de4c4e
+Author: Philip Hands <phil@hands.com>
+Date: Thu Aug 8 13:01:47 2024 +0200
+
+ update copyright notices
+
+ Bump the year to 2024, but also reflect the fact that hands.com Ltd. has
+ been wound up in the UK, and its assets (including this copyright) have
+ now reverted to its owner, Philip Hands.
+
+ SSH-Copy-ID-Upstream: 0e4c4d072747a6568b11a790c29dd1b4ce663d7f
+
+commit 7fc9ccdce18841ebd0a97e31e43258512ab32a32
+Author: Philip Hands <phil@hands.com>
+Date: Sun Aug 4 20:45:00 2024 +0200
+
+ restore optionality of -i's argument
+
+ SSH-Copy-ID-Upstream: f70e3abb510e4eeb040b47894e41828246c1b720
+
+commit c37aa7012b1a3c2c322fd19e71310aadc90fc674
+Author: Philip Hands <phil@hands.com>
+Date: Fri Aug 2 15:52:07 2024 +0200
+
+ avoid exploring .ssh/id*.pub subdirectories
+
+ SSH-Copy-ID-Upstream: 0b9e08b7707ad16de3c8e6a0410d9f42fbd56997
+
+commit 777dce9e2e0d12f7e81e162f77749f30899869fe
+Author: Philip Hands <phil@hands.com>
+Date: Fri Aug 2 10:07:11 2024 +0200
+
+ ensure that we're always told the source of keys
+
+ SSH-Copy-ID-Upstream: 1bee96f4793e8ec3fab9f9361204ae58f5cc7cae
+
+commit fb94fd2339848e40cad6c9bb42b822244cc1a7bc
+Author: Philip Hands <phil@hands.com>
+Date: Wed Jul 31 23:19:51 2024 +0200
+
+ add $HOME to ERROR if one cannot write to ~/.ssh
+
+ SSH-Copy-ID-Upstream: ebef3e9c06e0447bff06e9d84b33023cf592e0ba
+
+commit eb5aafa1ffaeee75799141ec5ded406a65ec7d18
+Author: Philip Hands <phil@hands.com>
+Date: Wed Jul 31 23:19:03 2024 +0200
+
+ assert that SCRATCH_DIR is a writable directory
+
+ SSH-Copy-ID-Upstream: ecb2b9d10883b9a16df56c83896c9bb47a80cde2
+
+commit abcc460a2af46f0d812f8433d97a8eae1d80724c
+Author: Philip Hands <phil@hands.com>
+Date: Wed Jul 31 23:17:54 2024 +0200
+
+ quote to avoid potential for word splitting
+
+ SSH-Copy-ID-Upstream: f379adbe06ac2ef1daf0f130752234c7f8b97e3c
+
+commit b3f91411fd1473605f74c40c1a91a024c7171e27
+Author: Philip Hands <phil@hands.com>
+Date: Wed Jul 31 23:15:11 2024 +0200
+
+ ensure ERROR output goes to STDERR
+
+ SSH-Copy-ID-Upstream: ac394b05eead3b91feb7c2ae4129a3e9b892f1e2
+
+commit 674b8f30f0dbacd787eb1e4e7e1ece34b5543d8f
+Author: Philip Hands <phil@hands.com>
+Date: Thu Aug 1 14:03:06 2024 +0200
+
+ avoid extra space when no arg given to -i option
+
+ SSH-Copy-ID-Upstream: feca9e67e6e37c5653445d1c733569d7abb1770e
+
+commit 0efa0e1c41427c0c6ba839a18c72c1afcd7b7cc0
+Author: Philip Hands <phil@hands.com>
+Date: Wed Jul 31 23:28:36 2024 +0200
+
+ put the -i before -[pP] (matching man pages)
+
+ The man pages (ssh, sftp & ssh-copy-id) all list -i before the port
+ setting, so make the output match that order, which also seems more
+ natural with the port being next to the server.
+
+ SSH-Copy-ID-Upstream: 34d5d614172c78f9a42249466c4b81975b8883a1
+
+commit 87831345e9745f2d13bd7a4a7972809f6788f331
+Author: Shreyas Mahangade <smahanga@redhat.com>
+Date: Mon Jul 29 15:26:05 2024 +0000
+
+ Minor space issue fixed
+
+ SSH-Copy-ID-Upstream: 335e44d7be78b03962a54c3a5c99a2ff45294a54
+
+commit 2f3010f4736b4b3f5c10a4be97a24e90ff04c5e7
+Author: Shreyas Mahangade <smahanga@redhat.com>
+Date: Mon Jul 29 16:55:28 2024 +0530
+
+ Show identity file in 'ssh' command
+
+ - Previously no identity file is shown in "ssh" command output on the line "Now try logging into the..."
+ - This commit makes sure whenever "ssh-copy-id" with "-i" is invoked, it also reflects in "ssh" command
+
+ SSH-Copy-ID-Upstream: 58e022ec26cb2315eb3be581d01e0ba787082428
+
+commit a13856374b894397a7682b32257ed0bf67cfede9
+Author: Damien Miller <djm@mindrot.org>
+Date: Fri Aug 16 08:30:20 2024 +1000
+
+ more OPENSSL_HAS_ECC
+
+commit 4da2a1a7f648979bea6eaf3b17f5f250faed4afc
+Author: Damien Miller <djm@mindrot.org>
+Date: Thu Aug 15 23:35:54 2024 +1000
+
+ fix merge botch that broke !OPENSSL_HAS_ECC
+
+commit 2c53d2f32b8e3992b61682c909ae5bc5122b6e5d
+Author: Damien Miller <djm@mindrot.org>
+Date: Thu Aug 15 15:09:45 2024 +1000
+
+ missed OPENSSL_HAS_ECC case
+
+commit 342dd7a219f39119b8b686b5aaa99c8e15ede368
+Author: Damien Miller <djm@mindrot.org>
+Date: Thu Aug 15 15:06:55 2024 +1000
+
+ retire testing aginst older LibreSSL versions
+
+ libressl prior to 3.4.x lack support for the EVP_DigestSign and
+ EVP_DigestVerify APIs that we need now that sshkey is converted
+ to EVP_PKEY.
+
+ If someone makes a good case for why we should support these versions
+ then we could bring back support with wrappers.
+
+commit a7c6ea8eebe0f179141ec5dbf0c9e5354417930f
+Author: Damien Miller <djm@mindrot.org>
+Date: Thu Aug 15 12:44:17 2024 +1000
+
+ sync TEST_MALLOC_OPTIONS for OpenBSD
+
+commit 60c2cf22e8f64f35d8b1175e4671257313f2e4d3
+Author: Damien Miller <djm@mindrot.org>
+Date: Thu Aug 15 12:43:47 2024 +1000
+
+ remove gratuitious difference from OpenBSD
+
+commit 339c4fc60a6250429d41fa8713f783d82aad4551
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Thu Aug 15 00:52:23 2024 +0000
+
+ upstream: adapt to EVP_PKEY conversion
+
+ OpenBSD-Regress-ID: 0e2d4efb0ed0e392e23cd8fda183fe56531ac446
+
+commit 63a94f99b9d7c8a48182a40192e45879d1ba8791
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Fri Jul 19 04:33:36 2024 +0000
+
+ upstream: test transfers in mux proxy mode too
+
+ OpenBSD-Regress-ID: 2edfc980628cfef3550649cab8d69fa23b5cd6c4
+
+commit 7bdfc20516e288b58c8c847958059c7b141eeff9
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Thu Aug 15 00:51:51 2024 +0000
+
+ upstream: Convert RSA and ECDSA key to the libcrypto EVP_PKEY API.
+
+ DSA remains unconverted as it will be removed within six months.
+
+ Based on patches originally from Dmitry Belyavskiy, but significantly
+ reworked based on feedback from Bob Beck, Joel Sing and especially
+ Theo Buehler (apologies to anyone I've missed).
+
+ ok tb@
+
+ OpenBSD-Commit-ID: d098744e89f1dc7e5952a6817bef234eced648b5
+
+commit 0af06e2c5b898992a18c74333e75a0136506acc6
+Author: tobias@openbsd.org <tobias@openbsd.org>
+Date: Wed Aug 14 15:42:18 2024 +0000
+
+ upstream: Reorder calloc arguments
+
+ The first argument should be the amount, the second argument should be the
+ element size. Fixing this also silences some gcc compiler warnings for
+ portable.
+
+ Spotted with Benny Baumann (BenBE at geshi dot org).
+
+ ok djm@
+
+ OpenBSD-Commit-ID: 711ad6f7bd7fb48bf52208f2cf9f108cddb6d41a
+
+commit 56ce0aa3c6cf28d9fcbce3207457abeac91b5050
+Author: tobias@openbsd.org <tobias@openbsd.org>
+Date: Wed Aug 14 15:40:30 2024 +0000
+
+ upstream: Extend sshbuf validation
+
+ Multiple sshbuf structs can be linked through a parent/child relationship.
+ Make sure that a single sshbuf cannot be its own parent. If this would ever
+ happen, it would result in reference counting issues.
+
+ This is a cheap way of testing this with very little overhead. It does not
+ detect A->B->A linkages though for performance reason and the fact that it
+ takes a programming error for this to occur anyway.
+
+ Authored with Benny Baumann (BenBE at geshi dot org).
+
+ ok djm@
+
+ OpenBSD-Commit-ID: fb3fa9ee2cad3c7e842ebadfd7f5db220c4aaf16
+
+commit fc48ddf6998188517af42dce807e2088b6a0c0be
+Author: tobias@openbsd.org <tobias@openbsd.org>
+Date: Wed Aug 14 15:37:11 2024 +0000
+
+ upstream: Use freezero for better readability
+
+ It has the same meaning as the current pair of calling explicit_bzero
+ and free. Spotted with Benny Baumann (BenBE at geshi dot org).
+
+ ok djm@
+
+ OpenBSD-Commit-ID: 939fbe9ccf52d0d48c5fa53694d6f3bb9927970c
+
+commit 1ff6907ec26dac6ac59fe9fe232899a63b4c14d8
+Author: tobias@openbsd.org <tobias@openbsd.org>
+Date: Wed Aug 14 15:35:23 2024 +0000
+
+ upstream: Fix typo in comment
+
+ Spotted with Benny Baumann (BenBE at geshi dot org).
+
+ ok djm@
+
+ OpenBSD-Commit-ID: 829160ac8ef3ad3409695ce3a3ade835061cae57
+
+commit 487faaed8f3bb9ffb19e8f807a3da72895b16421
+Author: dlg@openbsd.org <dlg@openbsd.org>
+Date: Wed Jul 31 12:00:18 2024 +0000
+
+ upstream: add a random amount of time (up to 4 seconds) to the
+
+ grace login time.
+
+ ok deraadt@ djm@
+
+ OpenBSD-Commit-ID: abd3c57aaa5861517529b322df79b6be35ee67f4
+
+commit 2865f5b7520bed3e74fbbb5f8d7a44193d7a4314
+Author: naddy@openbsd.org <naddy@openbsd.org>
+Date: Fri Jul 26 15:24:49 2024 +0000
+
+ upstream: document the reduced logingrace penalty
+
+ OpenBSD-Commit-ID: 9b63e0e3599d524ddc10edc4f978081382c3548b
+
+commit 1ec0a64c5dc57b8a2053a93b5ef0d02ff8598e5c
+Author: Darren Tucker <dtucker@dtucker.net>
+Date: Sun Jul 28 21:26:51 2024 +1000
+
+ Explicitly install libssl-devel cygwin.
+
+ Should fix CI tests for cygwin default config.
+
+commit 0bf6e5bb750b66b25c20a1c5a471f91850de3748
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Thu Jul 25 23:44:01 2024 +0000
+
+ upstream: reduce logingrace penalty.
+
+ A single forgotton login that times out should be below the penalty
+ threshold.
+
+ ok deraadt/claudio
+
+ OpenBSD-Commit-ID: cee1f7d17597c97bff8e5092af5d136fdb08f81d
+
+commit 29fb6f6d46b67770084b4f12bcf8a01bd535041b
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Thu Jul 25 22:40:08 2024 +0000
+
+ upstream: Fix proxy multiplexing (-O proxy) bug
+
+ If a mux started with ControlPersist then later has a forwarding added using
+ mux proxy connection and the forwarding was used, then when the mux proxy
+ session terminates, the mux master process will send a channel close to the
+ server with a bad channel ID and crash the connection.
+
+ This was caused by my stupidly reusing c->remote_id for mux channel
+ associations when I should have just added another member to struct channel.
+
+ ok markus@
+
+ OpenBSD-Commit-ID: c9f474e0124e3fe456c5e43749b97d75e65b82b2
+
+commit 53d1d307438517805989c7d5616d752739a97e03
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Thu Jul 18 01:47:27 2024 +0000
+
+ upstream: mention mux proxy mode
+
+ OpenBSD-Commit-ID: fd77a77779f06d316a314e4540dc57c93fc3369a
+
+commit a9b90859d252c2f5a24142f985d38610ac74685f
+Author: jsg@openbsd.org <jsg@openbsd.org>
+Date: Sun Jul 14 10:19:23 2024 +0000
+
+ upstream: fix double word; ok dtucker@
+
+ OpenBSD-Commit-ID: e6aff005914fa350b896d2be030be3d3b56ec0e8
+
+commit b05fda224bbcd2f641254534ed2175c42487f3c8
+Author: Darren Tucker <dtucker@dtucker.net>
+Date: Thu Jul 25 17:59:35 2024 +1000
+
+ Check for SA_RESTART before using it.
+
+ ok djm@
+
+commit c276672fc0e99f0c4389988d54a84c203ce325b6
+Author: Yuichiro Naito <naito.yuichiro@gmail.com>
+Date: Wed Sep 1 10:19:32 2021 +0900
+
+ Class-imposed login restrictions
+
+ If the following functions are available,
+ add an additional check if users are allowed to login imposed by login class.
+
+ * auth_hostok(3)
+ * auth_timeok(3)
+
+ These functions are implemented on FreeBSD.
+
+commit 7717b9e9155209916cc6b4b4b54f4e8fa578e889
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Wed Jul 10 21:58:34 2024 +0000
+
+ upstream: correct keyword; from Yatao Su via GHPR509
+
+ OpenBSD-Commit-ID: 81c778c76dea7ef407603caa157eb0c381c52ad2
+
+commit f2b78bb8f149d6b4d1f62c21aa1f06995dccf4ce
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Mon Jul 8 03:04:34 2024 +0000
+
+ upstream: don't need return at end of void function
+
+ OpenBSD-Commit-ID: 42d322d37f13aa075ae7b1ad9eef591e20b89717
+
+commit a395d37a813c0177cb5bfc4bebf5a52badb73cf0
+Author: djm@openbsd.org <djm@openbsd.org>
+Date: Thu Jul 4 22:53:59 2024 +0000
+
+ upstream: fix grammar: "a pattern lists" -> "one or more pattern
+
+ lists"
+
+ OpenBSD-Commit-ID: f3c844763398faa9800687e8ff6621225498202a
+
+commit 8b664df75966e5aed8dabea00b8838303d3488b8
+Author: Darren Tucker <dtucker@dtucker.net>
+Date: Sun Jul 7 18:46:19 2024 +1000
+
+ Cast to sockaddr * in systemd interface.
+
+ Fixes build with musl libx. bz#3707.
+
+commit 30c8c81da2169e78357d08dbb0ddd823b60e93bc
+Author: Darren Tucker <dtucker@dtucker.net>
+Date: Thu Jul 4 20:12:26 2024 +1000
+
+ Add 9.8 branch to ci-status page.
+
+commit ee6b9e661633fcefd29dba0c811cecbc4d027f6f
+Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
+Date: Tue Mar 26 22:15:08 2024 +0100
+
+ Fix detection of setres*id on GNU/Hurd
+
+ Like Linux, proper _SOURCE macros need to be set to get declarations of
+ various standard functions, notably setres*id. Now that Debian is using
+ -Werror=implicit-function-declaration this is really required. While at
+ it, define other _SOURCE macros like on GNU/Linux, since GNU/Hurd uses
+ the same glibc.
+
commit fa41f6592ff1b6ead4a652ac75af31eabb05b912
Author: Damien Miller <djm@mindrot.org>
Date: Mon Jul 1 14:33:26 2024 +1000
@@ -7599,1068 +8674,3 @@ Date: Mon Sep 19 21:39:16 2022 +0000
-o; spotted by jmc@
OpenBSD-Commit-ID: fe871408cf6f9d3699afeda876f8adbac86a035e
-
-commit 5f954929e9f173dd1e279e07d0e8b14fa845814d
-Author: Damien Miller <djm@mindrot.org>
-Date: Mon Sep 19 20:59:34 2022 +1000
-
- no need for glob.h here
-
- it also causes portability problems
-
-commit 03d94a47207d58b3db37eba4f87eb6ae5a63168a
-Author: Damien Miller <djm@mindrot.org>
-Date: Mon Sep 19 20:59:04 2022 +1000
-
- avoid Wuninitialized false positive in gcc-12ish
-
-commit 9d952529113831fb3071ab6e408d2726fd72e771
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Mon Sep 19 10:46:00 2022 +0000
-
- upstream: use users-groups-by-id@openssh.com sftp-server extension
-
- (when available) to fill in user/group names for directory listings.
- Implement a client-side cache of see uid/gid=>user/group names. ok markus@
-
- OpenBSD-Commit-ID: f239aeeadfa925a37ceee36ee8b256b8ccf4466e
-
-commit 8ff680368b0bccf88ae85d4c99de69387fbad7a6
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Mon Sep 19 10:43:12 2022 +0000
-
- upstream: sftp client library support for
-
- users-groups-by-id@openssh.com; ok markus@
-
- OpenBSD-Commit-ID: ddb2f33a2da6349a9a89a8b5bcb9ca7c999394de
-
-commit 488f6e1c582212c2374a4bf8cd1b703d2e70fb8b
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Mon Sep 19 10:41:58 2022 +0000
-
- upstream: extend sftp-common.c:extend ls_file() to support supplied
-
- user/group names; ok markus@
-
- OpenBSD-Commit-ID: c70c70498b1fdcf158531117e405b6245863bfb0
-
-commit 74b77f7497dba3a58315c8f308883de448078057
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Mon Sep 19 10:40:52 2022 +0000
-
- upstream: sftp-server(8): add a "users-groups-by-id@openssh.com"
-
- extension request that allows the client to obtain user/group names that
- correspond to a set of uids/gids.
-
- Will be used to make directory listings more useful and consistent
- in sftp(1).
-
- ok markus@
-
- OpenBSD-Commit-ID: 7ebabde0bcb95ef949c4840fe89e697e30df47d3
-
-commit 231a346c0c67cc7ca098360f9a554fa7d4f1eddb
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Mon Sep 19 08:49:50 2022 +0000
-
- upstream: better debugging for connect_next()
-
- OpenBSD-Commit-ID: d16a307a0711499c971807f324484ed3a6036640
-
-commit 1875042c52a3b950ae5963c9ca3774a4cc7f0380
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Sat Sep 17 10:34:29 2022 +0000
-
- upstream: Add RequiredRSASize for sshd(8); RSA keys that fall
-
- beneath this limit will be ignored for user and host-based authentication.
-
- Feedback deraadt@ ok markus@
-
- OpenBSD-Commit-ID: 187931dfc19d51873df5930a04f2d972adf1f7f1
-
-commit 54b333d12e55e6560b328c737d514ff3511f1afd
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Sat Sep 17 10:33:18 2022 +0000
-
- upstream: add a RequiredRSASize for checking RSA key length in
-
- ssh(1). User authentication keys that fall beneath this limit will be
- ignored. If a host presents a host key beneath this limit then the connection
- will be terminated (unfortunately there are no fallbacks in the protocol for
- host authentication).
-
- feedback deraadt, Dmitry Belyavskiy; ok markus@
-
- OpenBSD-Commit-ID: 430e339b2a79fa9ecc63f2837b06fdd88a7da13a
-
-commit 07d8771bacfefbcfb37fa8a6dc6103bcc097e0ab
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Sat Sep 17 10:30:45 2022 +0000
-
- upstream: Add a sshkey_check_rsa_length() call for checking the
-
- length of an RSA key; ok markus@
-
- OpenBSD-Commit-ID: de77cd5b11594297eda82edc594b0d32b8535134
-
-commit 3991a0cf947cf3ae0f0373bcec5a90e86a7152f5
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Sat Sep 17 10:11:29 2022 +0000
-
- upstream: actually hook up restrict_websafe; the command-line flag
-
- was never actually used. Spotted by Matthew Garrett
-
- OpenBSD-Commit-ID: 0b363518ac4c2819dbaa3dfad4028633ab9cdff1
-
-commit 30b2a7e4291fb9e357f80a237931ff008d686d3b
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Fri Sep 16 06:55:37 2022 +0000
-
- upstream: correct error value
-
- OpenBSD-Commit-ID: 780efcbad76281f11f14b2a5ff04eb6db3dfdad4
-
-commit ac1ec9545947d9f9657259f55d04cb49d3a94c8a
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Fri Sep 16 03:33:14 2022 +0000
-
- upstream: sftp: Be a bit more clever about completions
-
- There are commands (e.g. "get" or "put") that accept two
- arguments, a local path and a remote path. However, the way
- current completion is written doesn't take this distinction into
- account and always completes remote or local paths.
-
- By expanding CMD struct and "cmds" array this distinction can be
- reflected and with small adjustment to completer code the correct
- path can be completed.
-
- By Michal Privoznik, ok dtucker@
-
- OpenBSD-Commit-ID: 1396d921c4eb1befd531f5c4a8ab47e7a74b610b
-
-commit 590db83384f9d99fc51c84505792d26d1ef60df9
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Fri Sep 16 03:13:34 2022 +0000
-
- upstream: sftp: Don't attempt to complete arguments for
-
- non-existent commands
-
- If user entered a non-existent command (e.g. because they made a
- typo) there is no point in trying to complete its arguments. Skip
- calling complete_match() if that's the case.
-
- From Michal Privoznik
-
- OpenBSD-Commit-ID: cf39c811a68cde2aeb98fc85addea4000ef6b07a
-
-commit ff9809fdfd1d9a91067bb14a77d176002edb153c
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Wed Sep 14 00:14:37 2022 +0000
-
- upstream: sk_enroll: never drop SSH_SK_USER_VERIFICATION_REQD flag
-
- from response
-
- Now that all FIDO signing calls attempt first without PIN and then
- fall back to trying PIN only if that attempt fails, we can remove the
- hack^wtrick that removed the UV flag from the keys returned during
- enroll.
-
- By Corinna Vinschen
-
- OpenBSD-Commit-ID: 684517608c8491503bf80cd175425f0178d91d7f
-
-commit 940dc10729cb5a95b7ee82c10184e2b9621c8a1d
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Wed Sep 14 00:13:13 2022 +0000
-
- upstream: a little extra debugging
-
- OpenBSD-Commit-ID: edf1601c1d0905f6da4c713f4d9cecc7d1c0295a
-
-commit 4b5f91cb959358141181b934156513fcb8a6c1e3
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Wed Sep 14 00:02:03 2022 +0000
-
- upstream: ssh-agent: attempt FIDO key signing without PIN and use
-
- the error to determine whether a PIN is required and prompt only if
- necessary. from Corinna Vinschen
-
- OpenBSD-Commit-ID: dd6be6a0b7148608e834ee737c3479b3270b00dd
-
-commit 113523bf0bc33600b07ebb083572c8c346b6fdf4
-Author: jmc@openbsd.org <jmc@openbsd.org>
-Date: Sun Sep 11 06:38:11 2022 +0000
-
- upstream: .Li -> .Vt where appropriate; from josiah frentsos,
-
- tweaked by schwarze
-
- ok schwarze
-
- OpenBSD-Commit-ID: 565046e3ce68b46c2f440a93d67c2a92726de8ed
-
-commit 86af013b56cecb5ee58ae0bd9d495cd586fc5918
-Author: jsg@openbsd.org <jsg@openbsd.org>
-Date: Sat Sep 10 08:50:53 2022 +0000
-
- upstream: fix repeated words ok miod@ jmc@
-
- OpenBSD-Commit-ID: 6765daefe26a6b648cc15cadbbe337596af709b7
-
-commit 0ba39b93b326a7d5dfab776cc9b9d326161a9b16
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Fri Sep 9 03:31:42 2022 +0000
-
- upstream: notifier_complete(NULL, ...) is a noop, so no need to test
-
- that ctx!=NULL; from Corinna Vinschen
-
- OpenBSD-Commit-ID: ade2f2e9cc519d01a586800c25621d910bce384a
-
-commit be197635329feb839865fdc738e34e24afd1fca8
-Author: Sam James <sam@gentoo.org>
-Date: Thu Sep 8 02:49:29 2022 +0100
-
- openbsd-compat/bsd-asprintf: add <stdio.h> include for vsnprintf
-
- Fixes the following build failure with Clang 15 on musl:
- ```
- bsd-asprintf.c:51:8: error: call to undeclared library function 'vsnprintf' with type 'int (char *, unsigned long, const char *, struct __va_list_tag *)'; ISO C99 and laterclang -O2 -pipe -fdiagnostics-color=always -frecord-gcc-switches -pipe -Wunknown-warning-option -Qunused-arguments -Wall -Wpointer-arith -Wuninitialized -Wsign-compare -Wformat-security -Wsizeof-pointer-memaccess -Wno-pointer-sign -Wno-unused-result -Wmisleading-indentation -Wbitwise-instead-of-logical -fno-strict-aliasing -mretpoline -ftrapv -fzero-call-used-regs=all -fno-builtin-memset -fstack-protector-strong -fPIE -I. -I. -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -D_DEFAULT_SOURCE -DSSHDIR=\"/etc/ssh\" -D_PATH_SSH_PROGRAM=\"/usr/bin/ssh\" -D_PATH_SSH_ASKPASS_DEFAULT=\"/usr/lib/misc/ssh-askpass\" -D_PATH_SFTP_SERVER=\"/usr/lib/misc/sftp-server\" -D_PATH_SSH_KEY_SIGN=\"/usr/lib/misc/ssh-keysign\" -D_PATH_SSH_PKCS11_HELPER=\"/usr/lib/misc/ssh-pkcs11-helper\" -D_PATH_SSH_SK_HELPER=\"/usr/lib/misc/ssh-sk-helper\" -D_PATH_SSH_PIDDIR=\"/run\" -D_PATH_PRIVSEP_CHROOT_DIR=\"/var/empty\" -DHAVE_CONFIG_H -c cipher-aes.c -o cipher-aes.o
- do not support
- implicit function declarations [-Wimplicit-function-declaration]
- ret = vsnprintf(string, INIT_SZ, fmt, ap2);
- ^
- bsd-asprintf.c:51:8: note: include the header <stdio.h> or explicitly provide a declaration for 'vsnprintf'
- 1 error generated.
- ```
-
-commit 6cb6f660bb35f77a0456dd2581ddf39c29398a5e
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Fri Sep 2 16:43:27 2022 +1000
-
- Remove DEF_WEAK, it's already in defines.h.
-
-commit ce39e7d8b70c4726defde5d3bc4cb7d40d131153
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Fri Sep 2 14:28:14 2022 +1000
-
- Resync arc4random with OpenBSD.
-
- This brings us up to current, including djm's random-reseeding change,
- as prompted by logan at cyberstorm.mu in bz#3467. It brings the
- platform-specific hooks from LibreSSL Portable, simplified to match our
- use case. ok djm@.
-
-commit beaddde26f30e2195b8aa4f3193970e140e17305
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Fri Sep 2 14:20:04 2022 +1000
-
- Move OPENBSD ORIGINAL marker.
-
- Putting this after the copyright statement (which doesn't change)
- instead of before the version identifier (which does) prevents merge
- conflicts when resyncing changes.
-
-commit c83e467ead67a8cb48ef4bec8085d6fb880a2ff4
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Fri Sep 2 14:17:28 2022 +1000
-
- Remove arc4random_uniform from arc4random.c
-
- This was previously moved into its own file (matching OpenBSD) which
- prematurely committed in commit 73541f2.
-
-commit 5f45c2395c60865e59fa44152ff1d003a128c5bc
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Fri Sep 2 04:20:02 2022 +0000
-
- upstream: sk-usbhid: fix key_lookup() on tokens with built-in UV
-
- explicitly test whether the token performs built-in UV (e.g. biometric
- tokens) and enable UV in that case. From Pedro Martelletto via GHPR#388
-
- OpenBSD-Commit-ID: 007eb7e387d27cf3029ab06b88224e03eca62ccd
-
-commit 03277a4aa49b80af541a3e691f264c0c0d8f9cec
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Wed Aug 31 20:26:30 2022 +1000
-
- Move sftp from valgrind-2 to 3 to rebalance.
-
-commit fcf5365da69c516817321ba89c3a91df98d098df
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Wed Aug 31 02:56:40 2022 +0000
-
- upstream: whitespace
-
- OpenBSD-Commit-ID: c2bcbf93610d3d62ed206cdf9bf9ff98c6aaf232
-
-commit e60136a3d7a223dd8e84ba8a6895bc3142360993
-Author: Damien Miller <djm@mindrot.org>
-Date: Mon Aug 29 13:27:45 2022 +1000
-
- additional keys
-
-commit 2b02dcb505288c462d1b5dd1ac04e603d01340eb
-Author: Damien Miller <djm@mindrot.org>
-Date: Mon Aug 29 13:23:43 2022 +1000
-
- cross-sign allowed_signers with PGP key
-
- Provides continuity of trust from legacy PGP release key to
- the SSHSIG signing keys that we will use henceforth for git
- signing.
-
-commit 51b345f177ae981b8755f6bdf8358b1cc5e83d67
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Sat Aug 27 21:49:27 2022 +1000
-
- Add libcrypt-devel to cygwin-release deps.
-
- Based on feedback from vinschen at redhat.com.
-
-commit 9f81736cf16dd8dda1c8942f1973a5f80b8cd78c
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Sat Aug 27 09:37:40 2022 +1000
-
- Add Windows 2022 test targets.
-
-commit 85e1a69243f12be8520438ad6a3cfdc0b7fcbb2d
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Fri Aug 26 16:26:06 2022 +1000
-
- Add cygwin-release test target.
-
- This also moves the cygwin package install from the workflow file to
- setup_ci.sh so that we can install different sets of Cygwin packages
- for different test configs.
-
-commit 92382dbe8bf9ea1225b16858f9b9b208c15c7e8d
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Fri Aug 26 08:16:27 2022 +0000
-
- upstream: whitespace
-
- OpenBSD-Commit-ID: a5d015efbfd228dc598ffdef612d2da3a579e5d8
-
-commit 70a5de0a50e84d7250eb4e4537f765599f64c4af
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Fri Aug 26 08:12:56 2022 +0000
-
- upstream: whitespace
-
- OpenBSD-Commit-ID: d297e4387935d4aef091c5e9432578c2e513f538
-
-commit 3a683a19fd116ea15ebf8aa13d02646cceb302a9
-Author: Damien Miller <djm@mindrot.org>
-Date: Fri Aug 26 14:23:55 2022 +1000
-
- initial list of allowed signers
-
-commit 6851f4b8c3fc1b3e1114c56106e4dc31369c8513
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Fri Aug 19 17:22:18 2022 +1000
-
- Install Cygwin packages based on OS not config.
-
-commit f96480906893ed93665df8cdf9065865c51c1475
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Fri Aug 19 06:07:47 2022 +0000
-
- upstream: attemp FIDO key signing without PIN and use the error
-
- code returned to fall back only if necessary. Avoids PIN prompts for FIDO
- tokens that don't require them; part of GHPR#302
-
- OpenBSD-Commit-ID: 4f752aaf9f2e7c28bcaaf3d4f8fc290131bd038e
-
-commit 5453333b5d28e313284cb9aae82899704103f98d
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Fri Aug 19 05:53:28 2022 +0000
-
- upstream: remove incorrect check that can break enrolling a
-
- resident key (introduced in r1.40)
-
- OpenBSD-Commit-ID: 4cab364d518470e29e624af3d3f9ffa9c92b6f01
-
-commit ff89b1bed80721295555bd083b173247a9c0484e
-Author: dtucker@openbsd.org <dtucker@openbsd.org>
-Date: Fri Aug 19 04:02:46 2022 +0000
-
- upstream: Strictly enforce the maximum allowed SSH2 banner size in
-
- ssh-keyscan and prevent a one-byte buffer overflow. Patch from Qualys, ok
- djm@
-
- OpenBSD-Commit-ID: 6ae664f9f4db6e8a0589425f74cd0bbf3aeef4e4
-
-commit 1b470b9036639cef4f32fb303bb35ea0b711178d
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Fri Aug 19 15:18:09 2022 +1000
-
- Fix cygwin conditional steps.
-
-commit fd6ee741ab16714b7035d60aca924123ba28135a
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Fri Aug 19 15:12:57 2022 +1000
-
- Add a bit more debug output.
-
-commit a9305c4c739f4d91a3d3a92c0b6d4949404a36c5
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Fri Aug 12 15:08:47 2022 +1000
-
- Add Cygwin (on windows-2019) test target.
-
- In addition to installing the requisite Cygwin packages, we also need to
- explicitly invoke "sh" for steps that run other scripts since the runner
- environment doesn't understand #! paths.
-
-commit 5062ad48814b06162511c4f5924a33d97b6b2566
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Fri Aug 19 03:06:30 2022 +0000
-
- upstream: double free() in error path; from Eusgor via GHPR333
-
- OpenBSD-Commit-ID: 39f35e16ba878c8d02b4d01d8826d9b321be26d4
-
-commit 5a5c580b48fc6006bdfa731fc2f6d4945c2c0e4e
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Thu Aug 18 21:36:39 2022 +1000
-
- Check for perms to run agent-getpeereid test.
-
- Ubuntu 22.04 defaults to private home dirs which prevents "nobody"
- running ssh-add during the agent-getpeereid test. Check for this and
- add the necessary permissions.
-
-commit cd06a76b7ccc706e2bb4f1cc4aa9e9796a28a812
-Author: Damien Miller <djm@mindrot.org>
-Date: Wed Aug 17 16:04:16 2022 +1000
-
- on Cygwin, prefer WinHello FIDO device
-
- If no FIDO device was explictly specified, then prefer the
- windows://hello FIDO device. An exception to this is when
- probing resident FIDO keys, in which case hardware FIDO
- devices are preferred.
-
-commit 47f72f534ac5cc2cd3027675a3df7b00a8f77575
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Wed Aug 17 06:01:57 2022 +0000
-
- upstream: add an extra flag to sk_probe() to indicate whether we're
-
- probing for a FIDO resident key or not. Unused here, but will make like
- easier for portable
-
- OpenBSD-Commit-ID: 432c8ff70e270378df9dbceb9bdeaa5b43b5a832
-
-commit edb0bcb3c79b16031dc87a8e57aecc3c4a3414f0
-Author: jmc@openbsd.org <jmc@openbsd.org>
-Date: Tue Aug 16 20:24:08 2022 +0000
-
- upstream: use .Cm for "sign"; from josiah frentsos
-
- OpenBSD-Commit-ID: 7f80a53d54857ac6ae49ea6ad93c5bd12231d1e4
-
-commit cccb011e130cbbac538b1689d10e4a067298df8b
-Author: Corinna Vinschen <vinschen@redhat.com>
-Date: Thu Aug 11 20:19:35 2022 +0200
-
- Revert "check_sk_options: add temporary WinHello workaround"
-
- Cygwin now comes with libfido2 1.11.0, so this workaround
- isn't required anymore.
-
- This reverts commit 242c044ab111a37aad3b0775727c36a4c5f0102c.
-
- Signed-off-by: Corinna Vinschen <vinschen@redhat.com>
-
-commit 9468cd7cf9d989dfa2ac20e2a0268ba6e93bfa5a
-Author: Corinna Vinschen <vinschen@redhat.com>
-Date: Thu Aug 11 20:18:17 2022 +0200
-
- fido_dev_is_winhello: return 0, not "false"
-
- "false" is not used anywhere in OpenSSH, so return 0 like
- everywhere else.
-
- Signed-off-by: Corinna Vinschen <vinschen@redhat.com>
-
-commit 730a80609472ee0451c99482d75c9c41f3ebc42d
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Fri Aug 12 05:20:28 2022 +0000
-
- upstream: sftp-server: support home-directory request
-
- Add support to the sftp-server for the home-directory extension defined
- in draft-ietf-secsh-filexfer-extensions-00. This overlaps a bit with the
- existing expand-path@openssh.com, but uses a more official protocol name,
- and so is a bit more likely to be implemented by non-OpenSSH clients.
-
- From Mike Frysinger, ok dtucker@
-
- OpenBSD-Commit-ID: bfc580d05cc0c817831ae7ecbac4a481c23566ab
-
-commit 5e820bf79ce3ce99ef7e98b0ab642b0a0a4f396c
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Fri Aug 12 14:56:55 2022 +1000
-
- Replace deprecated ubuntu-18.04 runners with 22.04
-
-commit 87b0d9c1b789d3ff958ec45df2ac912e24461bae
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Thu Aug 11 22:48:23 2022 +1000
-
- Add a timegm implementation from Heimdal via Samba.
-
- Fixes build on (at least Solaris 10).
-
-commit d0c4fa58594577994921b593f10037c5282597ca
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Thu Aug 11 14:23:58 2022 +1000
-
- Rerun tests if any .github config file changes.
-
-commit 113fe6c77ab43769fc61e953d07cb619fd7ea54b
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Thu Aug 11 13:33:51 2022 +1000
-
- Skip hostbased during Valgrind tests.
-
- Valgrind doesn't let ssh exec ssh-keysign (because it's setuid) so skip
- it during the Valgrind based tests.
-
- See https://bugs.kde.org/show_bug.cgi?id=119404 for a discussion of this
- (ironically there the problematic binary was ssh(1) back when it could
- still be setuid).
-
-commit b98a42afb69d60891eb0488935990df6ee571c4d
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Thu Aug 11 01:57:50 2022 +0000
-
- upstream: add some tests for parse_absolute_time(), including cases
-
- where it is forced to the UTC timezone. bz3468 ok dtucker
-
- OpenBSD-Regress-ID: ea07ca31c2f3847a38df028ca632763ae44e8759
-
-commit ec1ddb72a146fd66d18df9cd423517453a5d8044
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Thu Aug 11 01:56:51 2022 +0000
-
- upstream: allow certificate validity intervals, sshsig verification
-
- times and authorized_keys expiry-time options to accept dates in the UTC time
- zone in addition to the default of interpreting them in the system time zone.
- YYYYMMDD and YYMMDDHHMM[SS] dates/times will be interpreted as UTC if
- suffixed with a 'Z' character.
-
- Also allow certificate validity intervals to be specified in raw
- seconds-since-epoch as hex value, e.g. -V 0x1234:0x4567890. This
- is intended for use by regress tests and other tools that call
- ssh-keygen as part of a CA workflow.
-
- bz3468 ok dtucker
-
- OpenBSD-Commit-ID: 454db1cdffa9fa346aea5211223a2ce0588dfe13
-
-commit 4df246ec75751da7eb925e1880498300d8bda187
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Thu Aug 11 10:23:55 2022 +1000
-
- Fix conditional for running hostbased tests.
-
-commit 2580916e48721802220c61ce9e0df1297c00bc07
-Author: Damien Miller <djm@mindrot.org>
-Date: Thu Aug 11 08:58:28 2022 +1000
-
- fix SANDBOX_SECCOMP_FILTER_DEBUG
-
-commit fdbd5bf507fc271ff813714fab8a72ff2c6cb5ca
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Wed Aug 10 17:35:52 2022 +1000
-
- Test hostbased auth on github runners.
-
-commit 7e2f51940ba48a1c0fae1107801ea643fa83c971
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Wed Aug 10 17:25:24 2022 +1000
-
- Rename our getentropy to prevent possible loops.
-
- Since arc4random seeds from getentropy, and we use OpenSSL for that
- if enabled, there's the possibility that if we build on a system that
- does not have getentropy then run on a system that does have it, then
- OpenSSL could end up calling our getentropy and getting stuck in a loop.
- Pointed out by deraadt@, ok djm@
-
-commit 7a01f61be8d0aca0e975e7417f26371495fe7674
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Mon Aug 8 12:17:04 2022 +1000
-
- Actually put HAVE_STDINT_H around the stdint.h.
-
-commit 73541f29f0b50480da6c20dceb7a7191bd8ea7d3
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Mon Aug 8 10:30:34 2022 +1000
-
- Give unused param a name.
-
- Fixes builds on platforms that do have fido2 but don't have
- fido_dev_is_winhello.
-
-commit 2a108c0ea960381bd9b14ee0d84e818a23df4482
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Fri Aug 5 05:01:40 2022 +0000
-
- upstream: don't prompt for FIDO passphrase before attempting to enroll
-
- the credential, just let the enroll operating fail and we'll attempt to get a
- PIN anyway. Might avoid some unneccessary PIN prompts.
-
- Part of GHPR#302 from Corinna Vinschen; ok dtucker@
-
- OpenBSD-Commit-ID: bd5342ffc353ee37d39617906867c305564d1ce2
-
-commit 2886975c0ad9244e60dc5e4be34fde3aa573a4b5
-Author: Corinna Vinschen <vinschen@redhat.com>
-Date: Fri Feb 11 14:33:41 2022 +0100
-
- sk_sign: set FIDO2 uv attribute explicitely for WinHello
-
- WinHello via libfido2 performs user verification by default.
- However, if we stick to that, there's no way to differentiate
- between keys created with or without "-O verify-required".
- Set FIDO2 uv attribute explicitely to FIDO_OPT_FALSE, then check
- if user verification has been requested.
-
- Signed-off-by: Corinna Vinschen <vinschen@redhat.com>
-
-commit 242c044ab111a37aad3b0775727c36a4c5f0102c
-Author: Corinna Vinschen <vinschen@redhat.com>
-Date: Tue Feb 15 11:28:08 2022 +0100
-
- check_sk_options: add temporary WinHello workaround
-
- Up to libfido 1.10.0, WinHello advertises "clientPin" rather
- than "uv" capability. This is fixed in 1.11.0. For the time
- being, workaround it here.
-
- Signed-off-by: Corinna Vinschen <vinschen@redhat.com>
-
-commit 78774c08cc4b4997382975b0f414a86e06b6780c
-Author: Corinna Vinschen <vinschen@redhat.com>
-Date: Thu Feb 10 18:19:29 2022 +0100
-
- compat code for fido_dev_is_winhello()
-
- Signed-off-by: Corinna Vinschen <vinschen@redhat.com>
-
-commit 3d3a932a019aedfb891e0779bb4990cd5008a390
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Fri Aug 5 13:12:27 2022 +1000
-
- Factor out getrnd() and rename to getentropy().
-
- Factor out the arc4random seeding into its own file and change the
- interface to match getentropy. Use native getentropy if available.
- This will make it easier to resync OpenBSD changes to arc4random.
- Prompted by bz#3467, ok djm@.
-
-commit 9385d277b787403be9dfcb229cf372202496d2f3
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Thu Aug 4 18:55:48 2022 +1000
-
- Include CHANNEL and FIDO2 libs in configure output
-
-commit 141535b904b6fba01724444f38193a8599201f82
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Mon Aug 1 11:09:26 2022 +0000
-
- upstream: avoid double-free in error path introduced in r1.70; report
-
- and fix based on GHPR#332 by v-rzh ok dtucker@
-
- OpenBSD-Commit-ID: 3d21aa127b1f37cfc5bdc21461db369a663a951f
-
-commit dba7099ffcba3ca07b3946f017ba6a4c3158d9b1
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Wed Jul 27 18:40:12 2022 +1000
-
- Remove deprecated MacOS 10.15 runners.
-
-commit 722a56439aa5972c830e4a9a724cf52aff4a950a
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Wed Jul 27 18:31:14 2022 +1000
-
- Move stale-configure check as early as possible.
-
- We added a check in Makefile to catch the case where configure needs to
- be rebuilt, however this did not happen until a build was attempted in
- which case all of the work done by configure was wasted. Move this check
- to the start of configure to catch it as early as possible. ok djm@
-
-commit 099d6b56288b421ba38531d26dc1bd6bb685e311
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Fri Jul 22 10:47:19 2022 +1000
-
- Move libcrypto into CHANNELLIBS.
-
- This will result in sftp, sftp-server and scp no longer being linked
- against libcrypto. ok djm@
-
-commit 1bdf86725b77733bb5f17c54888b88a10b2f6538
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Fri Jul 22 10:45:47 2022 +1000
-
- Remove seed_rng calls from scp, sftp, sftp-server.
-
- These binaries don't use OpenSSL's random functions. The next step
- will be to stop linking them against libcrypto. ok djm@
-
-commit d73f77b8cb9b422f1ac4facee7890aa10ff2bc21
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Fri Jul 22 09:51:51 2022 +1000
-
- Group libcrypto and PRNGD checks together.
-
- They're related more than the libcrypt or libiaf checks which are
- currently between them. ok djm@
-
-commit f117e372b3f42f2fbdb0a578d063b2609ab58e1f
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Fri Jul 22 09:24:45 2022 +1000
-
- Do not link scp, sftp and sftp-server w/ zlib.
-
- Some of our binaries (eg sftp, sftp-server, scp) do not interact with
- the channels code and thus do use libraries such as zlib and libcrypto
- although they are linked with them. This adds a CHANNELLIBS and starts
- by moving zlib into it, which means the aformentioned binaries are no
- longer linked against zlib. ok djm@
-
-commit 800c2483e68db38bd1566ff69677124be974aceb
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Mon Jul 25 21:49:04 2022 +1000
-
- Remove workarounds for OpenSSL missing AES-CTR.
-
- We have some compatibility hacks that were added to support OpenSSL
- versions that do not support AES CTR mode. Since that time, however,
- the minimum OpenSSL version that we support has moved to 1.0.1 which
- *does* have CTR, so this is no longer needed. ok djm@
-
-commit b7c56b65c12f51fe0dbae798d19c8f58224a5d95
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Mon Jul 25 21:43:00 2022 +1000
-
- Remove workarounds for OpenSSL missing AES-GCM.
-
- We have some compatibility hacks that were added to support OpenSSL
- versions that do not support AES GCM mode. Since that time, however,
- the minimum OpenSSL version that we support has moved to 1.0.1 which
- *does* have GCM, so this is no longer needed. ok djm@
-
-commit 5a4a9f7a968fbf92cc1eac519c65638e79ae9f1f
-Author: dtucker@openbsd.org <dtucker@openbsd.org>
-Date: Mon Jul 25 07:12:45 2022 +0000
-
- upstream: Restore missing "!" in TEST_SSH_ELAPSED_TIMES test.
-
- OpenBSD-Regress-ID: 38783f9676ec348c5a792caecee9a16e354b37b0
-
-commit 0ff886be132299386cc29d87c2aa16ff68a1aa08
-Author: dtucker@openbsd.org <dtucker@openbsd.org>
-Date: Sun Jul 24 23:29:10 2022 +0000
-
- upstream: Test TEST_SSH_ELAPSED_TIMES for empty string not
-
- executable. No-op on most platforms but should prevent warnings in -portable
- on systems that don't have 'date %s'.
-
- OpenBSD-Regress-ID: e39d79867b8065e33d0c5926fa1a31f85659d2a4
-
-commit f69319ad8ad1dd50f90bbcf5912e11cc8ed3e037
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Sat Jul 23 14:38:22 2022 +1000
-
- Convert "have_prog" function into "which".
-
- "which" and its behaviour is not standardized, so convert the existing
- have_prog function into "which" so we can rely on it being available
- and what its semantics are. Add a have_prog wrapper that maintains the
- existing behaviour.
-
-commit ea7ecc2c3ae39fdf5c6ad97b7bc0b47a98847f43
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Sat Jul 23 14:36:38 2022 +1000
-
- Skip scp3 test if there's no scp on remote path.
-
- scp -3 ends up using the scp that's in the remote path and will fail if
- one is not available. Based on a patch from rapier at psc.edu.
-
-commit c46f6fed419167c1671e4227459e108036c760f8
-Author: Damien Miller <djm@mindrot.org>
-Date: Wed Jul 20 13:39:14 2022 +1000
-
- crank SSH_SK_VERSION_MAJOR in sk-dummy.so
-
-commit f208e3b9ffb5ee76cf9c95df7ff967adc7f51c7d
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Wed Jul 20 03:33:22 2022 +0000
-
- upstream: ssh-keygen: fix touch prompt, pin retries;
-
- part of GHPR329 from Pedro Martelletto
-
- OpenBSD-Commit-ID: 75d1005bd2ef8f29fa834c90d2684e73556fffe8
-
-commit 8638a2ce7e90c8a51d9af3143404282126c524f8
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Wed Jul 20 03:31:42 2022 +0000
-
- upstream: sk-usbhid: preserve error code returned by key_lookup()
-
- it conveys useful information, such as the supplied pin being wrong.
-
- Part of GHPR329 from Pedro Martelletto
-
- OpenBSD-Commit-ID: c0647eb9290f793add363d81378439b273756c1b
-
-commit 9ab929ca2d820520327b41929372bcb9e261534c
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Wed Jul 20 03:29:14 2022 +0000
-
- upstream: when enrolling a resident key on a security token, check
-
- if a credential with matching application and user ID strings already exists.
- if so, prompt the user for confirmation before overwriting the credential.
-
- patch from Pedro Martelletto via GHPR329
-
- NB. cranks SSH_SK_VERSION_MAJOR, so any third-party FIDO middleware
- implementations will need to adjust
-
- OpenBSD-Commit-ID: e45e9f1bf2b2f32d9850669e7a8dbd64acc5fca4
-
-commit 5bcfc788b38d5b64e4c347bdc04bd9a01bbc36da
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Wed Jul 20 03:13:04 2022 +0000
-
- upstream: pull passphrase reading and confirmation into a separate
-
- function so it can be used for FIDO2 PINs; no functional change
-
- OpenBSD-Commit-ID: bf34f76b8283cc1d3f54633e0d4f13613d87bb2f
-
-commit eb679e2959bdb15454eb94751930eb4c9110da94
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Fri Jul 15 21:31:48 2022 +1000
-
- Move vmshutdown to first step.
-
- If a previous run on a physical runner has failed to clean up, the next
- run will fail because it'll try to check out the code to a broken
- directory mount. Make cleanup the first step.
-
-commit 46b91b70ff3cb9c147e2875ef5dc609fd64c0c96
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Fri Jul 15 20:25:27 2022 +1000
-
- Rename bbone test target to ARM.
-
-commit 751d22cdeffed9fe921db78eedc32a29f9e80510
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Fri Jul 15 13:37:29 2022 +1000
-
- Add AUDIT_ARCH_PPC to supported seccomp arches.
-
- Patch from dries.deschout at dodeco.eu.
-
-commit a061792a6e8d235fc40a9b5d4c22a1762bb75a7b
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Thu Jul 14 19:20:24 2022 +1000
-
- Remove unintended changes.
-
- I inadvertently included a couple of local changes with the OpenSSL
- 3.0.4 change. Revert, anything that should be there will be committed
- separately.
-
-commit 527cb43fa1b4e55df661feabbac51b8e608b6519
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Thu Jul 14 11:22:08 2022 +1000
-
- Return ERANGE from getcwd() if buffer size is 1.
-
- If getcwd() is supplied a buffer size of exactly 1 and a path of "/", it
- could result in a nul byte being written out of array bounds. POSIX says
- it should return ERANGE if the path will not fit in the available buffer
- (with terminating nul). 1 byte cannot fit any possible path with its nul,
- so immediately return ERANGE in that case.
-
- OpenSSH never uses getcwd() with this buffer size, and all current
- (and even quite old) platforms that we are currently known to work
- on have a native getcwd() so this code is not used on those anyway.
- Reported by Qualys, ok djm@
-
-commit 36857fefd8849c4b0e877cfd9d1eb22f79b76650
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Thu Jul 14 10:02:35 2022 +1000
-
- Split README.platform into its own line.
-
- README.platform has general platform-specific information, having it
- following text about FIDO2 on the same line could imply that it only
- has information about FIDO2.
-
-commit 00a496c6c14f2d41f2a9365714d494dd5f3aac9f
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Thu Jul 14 09:56:01 2022 +1000
-
- Clarify README.md text.
-
- Clarify the text about the implications of building without OpenSSL, and
- prefix the "configure --help" example command with a "./" so it's likely
- to work as-is in more shells. From bz#3461.
-
-commit f40b52f21fbc52eb513279168a49d3285c65256c
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Tue Jul 12 19:48:44 2022 +1000
-
- Remove special casing of crypt().
-
- Configure goes to some lengths to pick crypt() from either libcrypt
- or OpenSSL's libcrypto because they can more or less featureful (eg
- supporting md5-style passwords).
-
- OpenSSL removed its crypt() interface in 2002:
- https://github.com/openssl/openssl/commit/69deec58 so these hijinks
- should no longer be necessary. This also only links sshd with libcrypt
- which is the only thing that needs it. ok djm@
-
-commit 76f4e48631d7b09fb243b47d7b393d100d3741b7
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Wed Jul 13 13:17:47 2022 +1000
-
- Only refuse to use OpenSSL 3.0.4 on x86_64.
-
- The potential RCE only impacts x86_64, so only refuse to use it if we're
- targetting a potentially impacted architecture. ok djm@
-
-commit e75bbc1d88491fa85e61b2cc8783d4bbd00cd131
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Tue Jul 12 14:37:15 2022 +1000
-
- Capture stderr output from configure.
-
-commit d9eaea4bea6271bcee6a2b9428f1271faf2d033b
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Tue Jul 12 12:54:49 2022 +1000
-
- Refuse to use OpenSSL 3.0.4 due to potential RCE.
-
- OpenSSL has a potential RCE in its RSA implementation (CVE-2022-2274)
- so refuse to use that specific version.
-
-commit fb2f3a61bf3d28fff285524535f7ffcd177c9235
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Tue Jul 12 12:54:24 2022 +1000
-
- Move unset to before we set anything.
-
-commit c483a5c0fb8e8b8915fad85c5f6113386a4341ca
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Wed Jul 6 11:52:54 2022 +1000
-
- Test against openssl-3.0.5.
-
-commit 669a56bcfe73f8b985f2bba476ba834d55253acf
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Tue Jul 5 18:35:53 2022 +1000
-
- Update sanitizer test targets:
-
- - remove clang-sanitize-memory for now. It takes so long that the test
- times out.
- - add gcc sanitize-address and sanitize-undefined test targets.
-
-commit 48cc68b69118b3ce8d07fd4f82e00d58667d5379
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Tue Jul 5 16:23:28 2022 +1000
-
- Add GCC address sanitizer build/test.
-
-commit 55c60bdd39b82457e92efa77da8d16cfa6a49391
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Tue Jul 5 12:02:33 2022 +1000
-
- Move sanitizer logs into regress for collection.
-
-commit 35ef2b3b6ef198f8574904a45780487ec2f17858
-Author: dtucker@openbsd.org <dtucker@openbsd.org>
-Date: Mon Jul 4 09:10:31 2022 +0000
-
- upstream: Add TEST_REGRESS_CACHE_DIR.
-
- If set, it is used to cache regress test names that have succeeded and
- skip those on a re-run.
-
- OpenBSD-Regress-ID: a7570dd29a58df59f2cca647c3c2ec989b49f247
-
-commit 7394ed80c4de8b228a43c8956cf2fa1b9c6b2622
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Sun Jul 3 21:46:44 2022 +1000
-
- Add clang sanitizer tests.
-
-commit bfce0e66b6017a9bfab450b9dc7d4b16f90de817
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Sun Jul 3 18:14:09 2022 +1000
-
- Skip all rlimit tests when sandboxing disabled.
-
- The rlimit tests can hang when being run with some compiler sanitizers
- so skip all of them if sandbox=no.
-
-commit 6208d611520f9ea94d5369f9da404b709930029d
-Author: Darren Tucker <dtucker@dtucker.net>
-Date: Sun Jul 3 17:54:49 2022 +1000
-
- Move checks for pollfd.fd and nfds_t.
-
- Move the checks for struct pollfd.fd and nfds_t to before the sandboxing
- checks. This groups all the sandbox checks together so we can skip them
- all when sandboxing is disabled.
-
-commit 322964f8f2e9c321e77ebae1e4d2cd0ccc5c5a0b
-Author: dtucker@openbsd.org <dtucker@openbsd.org>
-Date: Fri Jul 1 05:08:23 2022 +0000
-
- upstream: Remove leftover line.
-
- Remove extra line leftover from merge conflict. ok djm@
-
- OpenBSD-Commit-ID: 460e2290875d7ae64971a7e669c244b1d1c0ae2e
-
-commit 7ec81daad0e03a64e8d91c5590960c48c1a899a3
-Author: djm@openbsd.org <djm@openbsd.org>
-Date: Fri Jul 1 04:45:50 2022 +0000
-
- upstream: use consistent field names (s/char/byte)
-
- in format description
-
- OpenBSD-Commit-ID: 3de33572733ee7fcfd7db33d37db23d2280254f0
diff --git a/LICENCE b/LICENCE
index 4b0db54..aeb3017 100644
--- a/LICENCE
+++ b/LICENCE
@@ -367,5 +367,46 @@ OpenSSH contains no GPL code.
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
+ The replacement base64 implementation has the following MIT-style
+ licenses:
+
+ * Copyright (c) 1996 by Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
+ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
+ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+
+ * Portions Copyright (c) 1995 by International Business Machines, Inc.
+ *
+ * International Business Machines, Inc. (hereinafter called IBM) grants
+ * permission under its copyrights to use, copy, modify, and distribute this
+ * Software with or without fee, provided that the above copyright notice and
+ * all paragraphs of this notice appear in all copies, and that the name of IBM
+ * not be used in connection with the marketing of any product incorporating
+ * the Software or modifications thereof, without specific, written prior
+ * permission.
+ *
+ * To the extent it has a right to do so, IBM grants an immunity from suit
+ * under its patents, if any, for the use, sale or manufacture of products to
+ * the extent that such products are used for performing Domain Name System
+ * dynamic updates in TCP/IP networks by means of the Software. No immunity is
+ * granted for any product per se or for any other function of any product.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL,
+ * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING
+ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN
+ * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
------
$OpenBSD: LICENCE,v 1.20 2017/04/30 23:26:16 djm Exp $
diff --git a/Makefile.in b/Makefile.in
index e1b77eb..4243006 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -111,7 +111,7 @@ LIBSSH_OBJS=${LIBOPENSSH_OBJS} \
hmac.o ed25519.o hash.o \
kex.o kex-names.o kexdh.o kexgex.o kexecdh.o kexc25519.o \
kexgexc.o kexgexs.o \
- kexsntrup761x25519.o sntrup761.o kexgen.o \
+ kexsntrup761x25519.o kexmlkem768x25519.o sntrup761.o kexgen.o \
sftp-realpath.o platform-pledge.o platform-tracing.o platform-misc.o \
sshbuf-io.o
diff --git a/README b/README
index 2388ebb..3e494c6 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-See https://www.openssh.com/releasenotes.html#9.8p1 for the release
+See https://www.openssh.com/releasenotes.html#9.9p1 for the release
notes.
Please read https://www.openssh.com/report.html for bug reporting
diff --git a/auth.c b/auth.c
index 2e4cbef..9a6e5a3 100644
--- a/auth.c
+++ b/auth.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: auth.c,v 1.161 2024/05/17 00:30:23 djm Exp $ */
+/* $OpenBSD: auth.c,v 1.162 2024/09/15 01:18:26 djm Exp $ */
/*
* Copyright (c) 2000 Markus Friedl. All rights reserved.
*
@@ -463,6 +463,9 @@ getpwnamallow(struct ssh *ssh, const char *user)
{
#ifdef HAVE_LOGIN_CAP
extern login_cap_t *lc;
+#ifdef HAVE_AUTH_HOSTOK
+ const char *from_host, *from_ip;
+#endif
#ifdef BSD_AUTH
auth_session_t *as;
#endif
@@ -473,6 +476,7 @@ getpwnamallow(struct ssh *ssh, const char *user)
ci = server_get_connection_info(ssh, 1, options.use_dns);
ci->user = user;
+ ci->user_invalid = getpwnam(user) == NULL;
parse_server_match_config(&options, &includes, ci);
log_change_level(options.log_level);
log_verbose_reset();
@@ -508,6 +512,21 @@ getpwnamallow(struct ssh *ssh, const char *user)
debug("unable to get login class: %s", user);
return (NULL);
}
+#ifdef HAVE_AUTH_HOSTOK
+ from_host = auth_get_canonical_hostname(ssh, options.use_dns);
+ from_ip = ssh_remote_ipaddr(ssh);
+ if (!auth_hostok(lc, from_host, from_ip)) {
+ debug("Denied connection for %.200s from %.200s [%.200s].",
+ pw->pw_name, from_host, from_ip);
+ return (NULL);
+ }
+#endif /* HAVE_AUTH_HOSTOK */
+#ifdef HAVE_AUTH_TIMEOK
+ if (!auth_timeok(lc, time(NULL))) {
+ debug("LOGIN %.200s REFUSED (TIME)", pw->pw_name);
+ return (NULL);
+ }
+#endif /* HAVE_AUTH_TIMEOK */
#ifdef BSD_AUTH
if ((as = auth_open()) == NULL || auth_setpwd(as, pw) != 0 ||
auth_approval(as, lc, pw->pw_name, "ssh") <= 0) {
diff --git a/channels.c b/channels.c
index 3ee6947..a23fde4 100644
--- a/channels.c
+++ b/channels.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: channels.c,v 1.438 2024/05/17 00:30:23 djm Exp $ */
+/* $OpenBSD: channels.c,v 1.439 2024/07/25 22:40:08 djm Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -1016,14 +1016,16 @@ channel_format_status(const Channel *c)
{
char *ret = NULL;
- xasprintf(&ret, "t%d [%s] %s%u i%u/%zu o%u/%zu e[%s]/%zu "
- "fd %d/%d/%d sock %d cc %d io 0x%02x/0x%02x",
+ xasprintf(&ret, "t%d [%s] %s%u %s%u i%u/%zu o%u/%zu e[%s]/%zu "
+ "fd %d/%d/%d sock %d cc %d %s%u io 0x%02x/0x%02x",
c->type, c->xctype != NULL ? c->xctype : c->ctype,
c->have_remote_id ? "r" : "nr", c->remote_id,
+ c->mux_ctx != NULL ? "m" : "nm", c->mux_downstream_id,
c->istate, sshbuf_len(c->input),
c->ostate, sshbuf_len(c->output),
channel_format_extended_usage(c), sshbuf_len(c->extended),
c->rfd, c->wfd, c->efd, c->sock, c->ctl_chan,
+ c->have_ctl_child_id ? "c" : "nc", c->ctl_child_id,
c->io_want, c->io_ready);
return ret;
}
diff --git a/channels.h b/channels.h
index fdea9f5..3ac5e83 100644
--- a/channels.h
+++ b/channels.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: channels.h,v 1.156 2024/05/23 23:47:16 jsg Exp $ */
+/* $OpenBSD: channels.h,v 1.157 2024/07/25 22:40:08 djm Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -139,6 +139,8 @@ struct Channel {
u_int io_ready; /* bitmask of SSH_CHAN_IO_* */
int pfds[4]; /* pollfd entries for rfd/wfd/efd/sock */
int ctl_chan; /* control channel (multiplexed connections) */
+ uint32_t ctl_child_id; /* child session for mux controllers */
+ int have_ctl_child_id;/* non-zero if ctl_child_id is valid */
int isatty; /* rfd is a tty */
#ifdef _AIX
int wfd_isatty; /* wfd is a tty */
diff --git a/cipher.c b/cipher.c
index f12daa1..7d6e7d8 100644
--- a/cipher.c
+++ b/cipher.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cipher.c,v 1.121 2024/05/17 02:39:11 jsg Exp $ */
+/* $OpenBSD: cipher.c,v 1.123 2024/08/23 04:51:00 deraadt Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -143,8 +143,8 @@ const char *
compression_alg_list(int compression)
{
#ifdef WITH_ZLIB
- return compression ? "zlib@openssh.com,zlib,none" :
- "none,zlib@openssh.com,zlib";
+ return compression ? "zlib@openssh.com,none" :
+ "none,zlib@openssh.com";
#else
return "none";
#endif
@@ -255,7 +255,7 @@ cipher_init(struct sshcipher_ctx **ccp, const struct sshcipher *cipher,
#endif
*ccp = NULL;
- if ((cc = calloc(sizeof(*cc), 1)) == NULL)
+ if ((cc = calloc(1, sizeof(*cc))) == NULL)
return SSH_ERR_ALLOC_FAIL;
cc->plaintext = (cipher->flags & CFLAG_NONE) != 0;
diff --git a/config.h.in b/config.h.in
index ca9f7d8..d4dbb13 100644
--- a/config.h.in
+++ b/config.h.in
@@ -222,6 +222,12 @@
/* Define to 1 if you have the `aug_get_machine' function. */
#undef HAVE_AUG_GET_MACHINE
+/* Define to 1 if you have the `auth_hostok' function. */
+#undef HAVE_AUTH_HOSTOK
+
+/* Define to 1 if you have the `auth_timeok' function. */
+#undef HAVE_AUTH_TIMEOK
+
/* Define to 1 if you have the `b64_ntop' function. */
#undef HAVE_B64_NTOP
@@ -511,6 +517,12 @@
/* Define to 1 if you have the `EVP_DigestInit_ex' function. */
#undef HAVE_EVP_DIGESTINIT_EX
+/* Define to 1 if you have the `EVP_DigestSign' function. */
+#undef HAVE_EVP_DIGESTSIGN
+
+/* Define to 1 if you have the `EVP_DigestVerify' function. */
+#undef HAVE_EVP_DIGESTVERIFY
+
/* Define to 1 if you have the `EVP_MD_CTX_cleanup' function. */
#undef HAVE_EVP_MD_CTX_CLEANUP
diff --git a/configure b/configure
index 07d19fd..f68e94a 100755
--- a/configure
+++ b/configure
@@ -12706,7 +12706,7 @@ printf "%s\n" "#define SSH_TUN_OPENBSD 1" >>confdefs.h
printf "%s\n" "#define SYSLOG_R_SAFE_IN_SIGHAND 1" >>confdefs.h
- TEST_MALLOC_OPTIONS="AFGJPRX"
+ TEST_MALLOC_OPTIONS="SJRU"
;;
*-*-solaris*)
if test "x$withval" != "xno" ; then
@@ -13317,6 +13317,9 @@ EOD
printf "%s\n" "#define BROKEN_SETVBUF 1" >>confdefs.h
;;
+*-*-gnu*)
+ CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_GNU_SOURCE"
+ ;;
esac
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking compiler and flags for sanity" >&5
@@ -15875,6 +15878,18 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS="$SAVED_CFLAGS"
+ac_fn_c_check_func "$LINENO" "auth_hostok" "ac_cv_func_auth_hostok"
+if test "x$ac_cv_func_auth_hostok" = xyes
+then :
+ printf "%s\n" "#define HAVE_AUTH_HOSTOK 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "auth_timeok" "ac_cv_func_auth_timeok"
+if test "x$ac_cv_func_auth_timeok" = xyes
+then :
+ printf "%s\n" "#define HAVE_AUTH_TIMEOK 1" >>confdefs.h
+
+fi
ac_fn_c_check_func "$LINENO" "Blowfish_initstate" "ac_cv_func_Blowfish_initstate"
if test "x$ac_cv_func_Blowfish_initstate" = xyes
then :
@@ -18945,6 +18960,18 @@ then :
printf "%s\n" "#define HAVE_DSA_GENERATE_PARAMETERS_EX 1" >>confdefs.h
fi
+ac_fn_c_check_func "$LINENO" "EVP_DigestSign" "ac_cv_func_EVP_DigestSign"
+if test "x$ac_cv_func_EVP_DigestSign" = xyes
+then :
+ printf "%s\n" "#define HAVE_EVP_DIGESTSIGN 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "EVP_DigestVerify" "ac_cv_func_EVP_DigestVerify"
+if test "x$ac_cv_func_EVP_DigestVerify" = xyes
+then :
+ printf "%s\n" "#define HAVE_EVP_DIGESTVERIFY 1" >>confdefs.h
+
+fi
ac_fn_c_check_func "$LINENO" "EVP_DigestFinal_ex" "ac_cv_func_EVP_DigestFinal_ex"
if test "x$ac_cv_func_EVP_DigestFinal_ex" = xyes
then :
diff --git a/configure.ac b/configure.ac
index 5a865f8..591d5a3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1093,7 +1093,7 @@ mips-sony-bsd|mips-sony-newsos4)
AC_DEFINE([SSH_TUN_OPENBSD], [1], [Open tunnel devices the OpenBSD way])
AC_DEFINE([SYSLOG_R_SAFE_IN_SIGHAND], [1],
[syslog_r function is safe to use in in a signal handler])
- TEST_MALLOC_OPTIONS="AFGJPRX"
+ TEST_MALLOC_OPTIONS="SJRU"
;;
*-*-solaris*)
if test "x$withval" != "xno" ; then
@@ -1348,6 +1348,13 @@ EOD
AC_DEFINE([BROKEN_SETVBUF], [1],
[LynxOS has broken setvbuf() implementation])
;;
+*-*-gnu*)
+ dnl GNU Hurd. Needs to be after the linux and the other *-gnu entries.
+ dnl Target SUSv3/POSIX.1-2001 plus BSD specifics.
+ dnl _DEFAULT_SOURCE is the new name for _BSD_SOURCE
+ dnl _GNU_SOURCE is needed for setres*id prototypes.
+ CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_GNU_SOURCE"
+ ;;
esac
AC_MSG_CHECKING([compiler and flags for sanity])
@@ -1879,6 +1886,8 @@ AC_SUBST([PICFLAG])
dnl Checks for library functions. Please keep in alphabetical order
AC_CHECK_FUNCS([ \
+ auth_hostok \
+ auth_timeok \
Blowfish_initstate \
Blowfish_expandstate \
Blowfish_expand0state \
@@ -2974,6 +2983,8 @@ if test "x$openssl" = "xyes" ; then
BN_is_prime_ex \
DES_crypt \
DSA_generate_parameters_ex \
+ EVP_DigestSign \
+ EVP_DigestVerify \
EVP_DigestFinal_ex \
EVP_DigestInit_ex \
EVP_MD_CTX_cleanup \
diff --git a/contrib/redhat/openssh.spec b/contrib/redhat/openssh.spec
index 8893f3a..802d64d 100644
--- a/contrib/redhat/openssh.spec
+++ b/contrib/redhat/openssh.spec
@@ -1,4 +1,4 @@
-%global ver 9.8p1
+%global ver 9.9p1
%global rel 1%{?dist}
# OpenSSH privilege separation requires a user & group ID
@@ -33,10 +33,10 @@
%global without_openssl 0
# build without openssl where 1.1.1 is not available
-%if 0%{?fedora} <= 28
+%if %{defined fedora} && 0%{?fedora} <= 28
%global without_openssl 1
%endif
-%if 0%{?rhel} <= 7
+%if %{defined rhel} && 0%{?rhel} <= 7
%global without_openssl 1
%endif
diff --git a/contrib/ssh-copy-id b/contrib/ssh-copy-id
index da6bd18..dcf5798 100644
--- a/contrib/ssh-copy-id
+++ b/contrib/ssh-copy-id
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright (c) 1999-2023 Philip Hands <phil@hands.com>
+# Copyright (c) 1999-2024 Philip Hands <phil@hands.com>
# 2021 Carlos Rodríguez Gili <carlos.rodriguez-gili@upc.edu>
# 2020 Matthias Blümel <blaimi@blaimi.de>
# 2017 Sebastien Boyron <seb@boyron.eu>
@@ -56,19 +56,19 @@ then
a bug describing your setup, and the shell you used to make it work.
EOF
- printf '%s: ERROR: Less dimwitted shell required.\n' "$0"
+ printf '%s: ERROR: Less dimwitted shell required.\n' "$0" >&2
exit 1
fi
fi
# shellcheck disable=SC2010
-DEFAULT_PUB_ID_FILE=$(ls -t "${HOME}"/.ssh/id*.pub 2>/dev/null | grep -v -- '-cert.pub$' | head -n 1)
+DEFAULT_PUB_ID_FILE=$(ls -dt "${HOME}"/.ssh/id*.pub 2>/dev/null | grep -v -- '-cert.pub$' | head -n 1)
SSH="ssh -a -x"
TARGET_PATH=".ssh/authorized_keys"
umask 0177
usage () {
- printf 'Usage: %s [-h|-?|-f|-n|-s|-x] [-i [identity_file]] [-p port] [-F alternative ssh_config file] [-t target_path] [[-o <ssh -o options>] ...] [user@]hostname\n' "$0" >&2
+ printf 'Usage: %s [-h|-?|-f|-n|-s|-x] [-i [identity_file]] [-t target_path] [-F ssh_config] [[-o ssh_option] ...] [-p port] [user@]hostname\n' "$0" >&2
printf '\t-f: force mode -- copy keys without trying to check if they are already installed\n' >&2
printf '\t-n: dry run -- no keys are actually copied\n' >&2
printf '\t-s: use sftp -- use sftp instead of executing remote-commands. Can be useful if the remote only allows sftp\n' >&2
@@ -86,7 +86,7 @@ use_id_file() {
L_ID_FILE="$1"
if [ -z "$L_ID_FILE" ] ; then
- printf '%s: ERROR: no ID file found\n' "$0"
+ printf '%s: ERROR: no ID file found\n' "$0" >&2
exit 1
fi
@@ -103,11 +103,10 @@ use_id_file() {
ErrMSG=$( { : < "$f" ; } 2>&1 ) || {
L_PRIVMSG=""
[ "$f" = "$PRIV_ID_FILE" ] && L_PRIVMSG=" (to install the contents of '$PUB_ID_FILE' anyway, look at the -f option)"
- printf "\\n%s: ERROR: failed to open ID file '%s': %s\\n" "$0" "$f" "$(printf '%s\n%s\n' "$ErrMSG" "$L_PRIVMSG" | sed -e 's/.*: *//')"
+ printf "\\n%s: ERROR: failed to open ID file '%s': %s\\n" "$0" "$f" "$(printf '%s\n%s\n' "$ErrMSG" "$L_PRIVMSG" | sed -e 's/.*: *//')" >&2
exit 1
}
done
- printf '%s: INFO: Source of key(s) to be installed: "%s"\n' "$0" "$PUB_ID_FILE" >&2
GET_ID="cat \"$PUB_ID_FILE\""
}
@@ -115,15 +114,31 @@ if [ -n "$SSH_AUTH_SOCK" ] && ssh-add -L >/dev/null 2>&1 ; then
GET_ID="ssh-add -L"
fi
-while getopts "i:o:p:F:t:fnsxh?" OPT
+OPTS="io:p:F:t:fnsxh?"
+
+while getopts "$OPTS" OPT
do
case "$OPT" in
i)
[ "${SEEN_OPT_I}" ] && {
- printf '\n%s: ERROR: -i option must not be specified more than once\n\n' "$0"
+ printf '\n%s: ERROR: -i option must not be specified more than once\n\n' "$0" >&2
usage
}
SEEN_OPT_I="yes"
+
+ # Check for -i's optional parameter
+ eval "nextarg=\${$OPTIND}"
+ # shellcheck disable=SC2154
+ if [ $OPTIND = $# ]; then
+ if [ -r "$nextarg" ] && grep -iq ssh "$nextarg"; then
+ printf '\n%s: ERROR: Missing hostname. Use "-i -- %s" if you really mean to use this as the hostname\n\n' "$0" "$nextarg" >&2
+ usage
+ fi
+ elif ! expr -- "$nextarg" : "-[$(echo "$OPTS" | tr -d :)-]" >/dev/null ; then
+ # when not at the last arg, and not followed by an option, -i has an argument
+ OPTARG="$nextarg"
+ OPTIND=$((OPTIND + 1))
+ fi
use_id_file "${OPTARG:-$DEFAULT_PUB_ID_FILE}"
;;
o|F)
@@ -176,16 +191,28 @@ if [ -z "$(eval $GET_ID)" ] && [ -r "${PUB_ID_FILE:=$DEFAULT_PUB_ID_FILE}" ] ; t
use_id_file "$PUB_ID_FILE"
fi
+printf '%s: INFO: Source of key(s) to be installed: %s\n' "$0" "${GET_ID#cat }" >&2
+
# shellcheck disable=SC2086
if [ -z "$(eval $GET_ID)" ] ; then
printf '%s: ERROR: No identities found\n' "$0" >&2
exit 1
fi
+# assert_scratch_ok()
+# ensures that $SCRATCH_DIR is setup.
+assert_scratch_ok() {
+ [ "$SCRATCH_DIR" ] && [ -d "$SCRATCH_DIR" ] && [ -w "$SCRATCH_DIR" ] && return 0
+
+ printf 'ERROR: Assertion failure: in %s(): scratch_dir was not correctly set up (SCRATCH_DIR = "%s")\n' "$1" "$SCRATCH_DIR" >&2
+ return 1
+}
+
# filter_ids()
# tries to log in using the keys piped to it, and filters out any that work
filter_ids() {
L_SUCCESS="$1"
+ assert_scratch_ok filter_ids || return
L_TMP_ID_FILE="$SCRATCH_DIR"/popids_tmp_id
L_OUTPUT_FILE="$SCRATCH_DIR"/popids_output
@@ -288,23 +315,24 @@ installkeys_via_sftp() {
# repopulate "$@" inside this function
eval set -- "$SSH_OPTS"
- L_KEYS=$SCRATCH_DIR/authorized_keys
- L_SHARED_CON=$SCRATCH_DIR/master-conn
+ assert_scratch_ok installkeys_via_sftp || return 1
+ L_KEYS="$SCRATCH_DIR"/authorized_keys
+ L_SHARED_CON="$SCRATCH_DIR"/master-conn
$SSH -f -N -M -S "$L_SHARED_CON" "$@"
- L_CLEANUP="$SSH -S $L_SHARED_CON -O exit 'ignored' >/dev/null 2>&1 ; $SCRATCH_CLEANUP"
+ L_CLEANUP="$SSH -S '$L_SHARED_CON' -O exit 'ignored' >/dev/null 2>&1 ; $SCRATCH_CLEANUP"
#shellcheck disable=SC2064
trap "$L_CLEANUP" EXIT TERM INT QUIT
- sftp -b - -o "ControlPath=$L_SHARED_CON" "ignored" <<-EOF || return 1
+ sftp -b - -o "ControlPath='$L_SHARED_CON'" "ignored" <<-EOF || return 1
-get "$AUTH_KEY_FILE" "$L_KEYS"
EOF
# add a newline or create file if it's missing, same like above
[ -z "$(tail -1c "$L_KEYS" 2>/dev/null)" ] || echo >> "$L_KEYS"
# append the keys being piped in here
cat >> "$L_KEYS"
- sftp -b - -o "ControlPath=$L_SHARED_CON" "ignored" <<-EOF || return 1
+ sftp -b - -o "ControlPath='$L_SHARED_CON'" "ignored" <<-EOF || return 1
-mkdir "$AUTH_KEY_DIR"
chmod 700 "$AUTH_KEY_DIR"
- put $L_KEYS "$AUTH_KEY_FILE"
+ put "$L_KEYS" "$AUTH_KEY_FILE"
chmod 600 "$AUTH_KEY_FILE"
EOF
#shellcheck disable=SC2064
@@ -321,7 +349,7 @@ then
#shellcheck disable=SC2064
trap "$SCRATCH_CLEANUP" EXIT TERM INT QUIT
else
- printf '%s: ERROR: failed to create required temporary directory under ~/.ssh\n' "$0" >&2
+ printf '%s: ERROR: failed to create required temporary directory under ~/.ssh (HOME="%s")\n' "$0" "$HOME" >&2
exit 1
fi
@@ -379,7 +407,7 @@ else
Number of key(s) added: $ADDED
- Now try logging into the machine, with: "${SFTP:-ssh}${SSH_PORT:+ -${PORT_OPT:-p} $SSH_PORT} ${OPTS_USER_HOST}"
+ Now try logging into the machine, with: "${SFTP:-ssh} ${SEEN_OPT_I:+-i${PRIV_ID_FILE:+ $PRIV_ID_FILE} }${SSH_PORT:+-${PORT_OPT:-p} $SSH_PORT }${OPTS_USER_HOST}"
and check to make sure that only the key(s) you wanted were added.
EOF
diff --git a/contrib/ssh-copy-id.1 b/contrib/ssh-copy-id.1
index 74eec2f..dbdb45a 100644
--- a/contrib/ssh-copy-id.1
+++ b/contrib/ssh-copy-id.1
@@ -1,5 +1,5 @@
.ig \" -*- nroff -*-
-Copyright (c) 1999-2023 hands.com Ltd. <http://hands.com/>
+Copyright (c) 1999-2024 Philip Hands <phil@hands.com>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -34,9 +34,10 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.Op Fl s
.Op Fl x
.Op Fl i Op Ar identity_file
-.Op Fl p Ar port
-.Op Fl o Ar ssh_option
.Op Fl t Ar target_path
+.Op Fl F Ar ssh_config
+.Op Bo Fl o Ar ssh_option Bc ...
+.Op Fl p Ar port
.Op Ar user Ns @ Ns
.Ar hostname
.Nm
@@ -67,7 +68,7 @@ command instead.
.Pp
The options are as follows:
.Bl -tag -width Ds
-.It Fl i Ar identity_file
+.It Fl i Op Ar identity_file
Use only the key(s) contained in
.Ar identity_file
(rather than looking for identities via
@@ -104,11 +105,13 @@ on commands which can be used on the remote side.
.It Fl t Ar target_path
the path on the target system where the keys should be added
(defaults to ".ssh/authorized_keys")
-.It Fl p Ar port , Fl o Ar ssh_option
-These two options are simply passed through untouched, along with their
-argument, to allow one to set the port or other
-.Xr ssh 1
-options, respectively.
+.It Fl p Ar port
+Specifies the port to connect to on the remote host.
+.It Fl F Ar ssh_config , Fl o Ar ssh_option
+These options are simply passed through untouched (with their argument)
+to ssh/sftp,
+allowing one to set an alternative config file,
+or other options, respectively.
.Pp
Rather than specifying these as command line options,
it is often better to use (per-host) settings in
diff --git a/contrib/suse/openssh.spec b/contrib/suse/openssh.spec
index 45815c9..0755833 100644
--- a/contrib/suse/openssh.spec
+++ b/contrib/suse/openssh.spec
@@ -13,7 +13,7 @@
Summary: OpenSSH, a free Secure Shell (SSH) protocol implementation
Name: openssh
-Version: 9.8p1
+Version: 9.9p1
URL: https://www.openssh.com/
Release: 1
Source0: openssh-%{version}.tar.gz
diff --git a/crypto_api.h b/crypto_api.h
index 5d552ef..8bbc3a0 100644
--- a/crypto_api.h
+++ b/crypto_api.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: crypto_api.h,v 1.8 2023/01/15 23:05:32 djm Exp $ */
+/* $OpenBSD: crypto_api.h,v 1.9 2024/09/02 12:13:56 djm Exp $ */
/*
* Assembled from generated headers and source files by Markus Friedl.
@@ -53,4 +53,9 @@ int crypto_kem_sntrup761_dec(unsigned char *k,
const unsigned char *cstr, const unsigned char *sk);
int crypto_kem_sntrup761_keypair(unsigned char *pk, unsigned char *sk);
+#define crypto_kem_mlkem768_PUBLICKEYBYTES 1184
+#define crypto_kem_mlkem768_SECRETKEYBYTES 2400
+#define crypto_kem_mlkem768_CIPHERTEXTBYTES 1088
+#define crypto_kem_mlkem768_BYTES 32
+
#endif /* crypto_api_h */
diff --git a/defines.h b/defines.h
index 279e509..ed860e7 100644
--- a/defines.h
+++ b/defines.h
@@ -940,6 +940,8 @@ struct winsize {
* so only enable if the compiler supports them.
*/
#if defined(VARIABLE_LENGTH_ARRAYS) && defined(VARIABLE_DECLARATION_AFTER_CODE)
-# define USE_SNTRUP761X25519 1
+# define USE_SNTRUP761X25519 1
+/* The ML-KEM768 implementation also uses C89 features */
+# define USE_MLKEM768X25519 1
#endif
#endif /* _DEFINES_H */
diff --git a/kex-names.c b/kex-names.c
index 339eb1c..ec840c1 100644
--- a/kex-names.c
+++ b/kex-names.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kex-names.c,v 1.1 2024/05/17 00:32:32 djm Exp $ */
+/* $OpenBSD: kex-names.c,v 1.4 2024/09/09 02:39:57 djm Exp $ */
/*
* Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
*
@@ -79,6 +79,12 @@ static const struct kexalg kexalgs[] = {
#ifdef USE_SNTRUP761X25519
{ KEX_SNTRUP761X25519_SHA512, KEX_KEM_SNTRUP761X25519_SHA512, 0,
SSH_DIGEST_SHA512 },
+ { KEX_SNTRUP761X25519_SHA512_OLD, KEX_KEM_SNTRUP761X25519_SHA512, 0,
+ SSH_DIGEST_SHA512 },
+#endif
+#ifdef USE_MLKEM768X25519
+ { KEX_MLKEM768X25519_SHA256, KEX_KEM_MLKEM768X25519_SHA256, 0,
+ SSH_DIGEST_SHA256 },
#endif
#endif /* HAVE_EVP_SHA256 || !WITH_OPENSSL */
{ NULL, 0, -1, -1},
diff --git a/kex.c b/kex.c
index 63aae5d..6b957e5 100644
--- a/kex.c
+++ b/kex.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kex.c,v 1.186 2024/05/17 00:30:23 djm Exp $ */
+/* $OpenBSD: kex.c,v 1.187 2024/08/23 04:51:00 deraadt Exp $ */
/*
* Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
*
@@ -842,8 +842,6 @@ choose_comp(struct sshcomp *comp, char *client, char *server)
#ifdef WITH_ZLIB
if (strcmp(name, "zlib@openssh.com") == 0) {
comp->type = COMP_DELAYED;
- } else if (strcmp(name, "zlib") == 0) {
- comp->type = COMP_ZLIB;
} else
#endif /* WITH_ZLIB */
if (strcmp(name, "none") == 0) {
diff --git a/kex.h b/kex.h
index 34665eb..d08988b 100644
--- a/kex.h
+++ b/kex.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: kex.h,v 1.123 2024/05/17 00:30:23 djm Exp $ */
+/* $OpenBSD: kex.h,v 1.126 2024/09/02 12:13:56 djm Exp $ */
/*
* Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
@@ -62,11 +62,11 @@
#define KEX_ECDH_SHA2_NISTP521 "ecdh-sha2-nistp521"
#define KEX_CURVE25519_SHA256 "curve25519-sha256"
#define KEX_CURVE25519_SHA256_OLD "curve25519-sha256@libssh.org"
-#define KEX_SNTRUP761X25519_SHA512 "sntrup761x25519-sha512@openssh.com"
+#define KEX_SNTRUP761X25519_SHA512 "sntrup761x25519-sha512"
+#define KEX_SNTRUP761X25519_SHA512_OLD "sntrup761x25519-sha512@openssh.com"
+#define KEX_MLKEM768X25519_SHA256 "mlkem768x25519-sha256"
#define COMP_NONE 0
-/* pre-auth compression (COMP_ZLIB) is only supported in the client */
-#define COMP_ZLIB 1
#define COMP_DELAYED 2
#define CURVE25519_SIZE 32
@@ -102,6 +102,7 @@ enum kex_exchange {
KEX_ECDH_SHA2,
KEX_C25519_SHA256,
KEX_KEM_SNTRUP761X25519_SHA512,
+ KEX_KEM_MLKEM768X25519_SHA256,
KEX_MAX
};
@@ -180,6 +181,7 @@ struct kex {
u_char c25519_client_key[CURVE25519_SIZE]; /* 25519 + KEM */
u_char c25519_client_pubkey[CURVE25519_SIZE]; /* 25519 */
u_char sntrup761_client_key[crypto_kem_sntrup761_SECRETKEYBYTES]; /* KEM */
+ u_char mlkem768_client_key[crypto_kem_mlkem768_SECRETKEYBYTES]; /* KEM */
struct sshbuf *client_pub;
};
@@ -246,6 +248,12 @@ int kex_kem_sntrup761x25519_enc(struct kex *, const struct sshbuf *,
int kex_kem_sntrup761x25519_dec(struct kex *, const struct sshbuf *,
struct sshbuf **);
+int kex_kem_mlkem768x25519_keypair(struct kex *);
+int kex_kem_mlkem768x25519_enc(struct kex *, const struct sshbuf *,
+ struct sshbuf **, struct sshbuf **);
+int kex_kem_mlkem768x25519_dec(struct kex *, const struct sshbuf *,
+ struct sshbuf **);
+
int kex_dh_keygen(struct kex *);
int kex_dh_compute_key(struct kex *, BIGNUM *, struct sshbuf *);
diff --git a/kexc25519.c b/kexc25519.c
index f13d766..e106521 100644
--- a/kexc25519.c
+++ b/kexc25519.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kexc25519.c,v 1.17 2019/01/21 10:40:11 djm Exp $ */
+/* $OpenBSD: kexc25519.c,v 1.18 2024/09/02 12:13:56 djm Exp $ */
/*
* Copyright (c) 2019 Markus Friedl. All rights reserved.
* Copyright (c) 2010 Damien Miller. All rights reserved.
@@ -71,7 +71,7 @@ kexc25519_shared_key_ext(const u_char key[CURVE25519_SIZE],
return SSH_ERR_KEY_INVALID_EC_VALUE;
#ifdef DEBUG_KEXECDH
- dump_digest("shared secret", shared_key, CURVE25519_SIZE);
+ dump_digest("shared secret 25519", shared_key, CURVE25519_SIZE);
#endif
if (raw)
r = sshbuf_put(out, shared_key, CURVE25519_SIZE);
diff --git a/kexgen.c b/kexgen.c
index 20f3c57..40d688d 100644
--- a/kexgen.c
+++ b/kexgen.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kexgen.c,v 1.8 2021/12/19 22:08:06 djm Exp $ */
+/* $OpenBSD: kexgen.c,v 1.10 2024/09/09 02:39:57 djm Exp $ */
/*
* Copyright (c) 2019 Markus Friedl. All rights reserved.
*
@@ -120,6 +120,9 @@ kex_gen_client(struct ssh *ssh)
case KEX_KEM_SNTRUP761X25519_SHA512:
r = kex_kem_sntrup761x25519_keypair(kex);
break;
+ case KEX_KEM_MLKEM768X25519_SHA256:
+ r = kex_kem_mlkem768x25519_keypair(kex);
+ break;
default:
r = SSH_ERR_INVALID_ARGUMENT;
break;
@@ -192,6 +195,10 @@ input_kex_gen_reply(int type, u_int32_t seq, struct ssh *ssh)
r = kex_kem_sntrup761x25519_dec(kex, server_blob,
&shared_secret);
break;
+ case KEX_KEM_MLKEM768X25519_SHA256:
+ r = kex_kem_mlkem768x25519_dec(kex, server_blob,
+ &shared_secret);
+ break;
default:
r = SSH_ERR_INVALID_ARGUMENT;
break;
@@ -243,6 +250,8 @@ out:
explicit_bzero(kex->c25519_client_key, sizeof(kex->c25519_client_key));
explicit_bzero(kex->sntrup761_client_key,
sizeof(kex->sntrup761_client_key));
+ explicit_bzero(kex->mlkem768_client_key,
+ sizeof(kex->mlkem768_client_key));
sshbuf_free(server_host_key_blob);
free(signature);
sshbuf_free(tmp);
@@ -310,6 +319,10 @@ input_kex_gen_init(int type, u_int32_t seq, struct ssh *ssh)
r = kex_kem_sntrup761x25519_enc(kex, client_pubkey,
&server_pubkey, &shared_secret);
break;
+ case KEX_KEM_MLKEM768X25519_SHA256:
+ r = kex_kem_mlkem768x25519_enc(kex, client_pubkey,
+ &server_pubkey, &shared_secret);
+ break;
default:
r = SSH_ERR_INVALID_ARGUMENT;
break;
diff --git a/kexmlkem768x25519.c b/kexmlkem768x25519.c
new file mode 100644
index 0000000..679446e
--- /dev/null
+++ b/kexmlkem768x25519.c
@@ -0,0 +1,280 @@
+/* $OpenBSD: kexmlkem768x25519.c,v 1.1 2024/09/02 12:13:56 djm Exp $ */
+/*
+ * Copyright (c) 2023 Markus Friedl. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "includes.h"
+
+#include <sys/types.h>
+
+#include <stdio.h>
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#include <stdbool.h>
+#include <string.h>
+#include <signal.h>
+
+#include "sshkey.h"
+#include "kex.h"
+#include "sshbuf.h"
+#include "digest.h"
+#include "ssherr.h"
+#include "log.h"
+
+#ifdef USE_MLKEM768X25519
+
+#include "libcrux_mlkem768_sha3.h"
+
+int
+kex_kem_mlkem768x25519_keypair(struct kex *kex)
+{
+ struct sshbuf *buf = NULL;
+ u_char rnd[LIBCRUX_ML_KEM_KEY_PAIR_PRNG_LEN], *cp = NULL;
+ size_t need;
+ int r = SSH_ERR_INTERNAL_ERROR;
+ struct libcrux_mlkem768_keypair keypair;
+
+ if ((buf = sshbuf_new()) == NULL)
+ return SSH_ERR_ALLOC_FAIL;
+ need = crypto_kem_mlkem768_PUBLICKEYBYTES + CURVE25519_SIZE;
+ if ((r = sshbuf_reserve(buf, need, &cp)) != 0)
+ goto out;
+ arc4random_buf(rnd, sizeof(rnd));
+ keypair = libcrux_ml_kem_mlkem768_portable_generate_key_pair(rnd);
+ memcpy(cp, keypair.pk.value, crypto_kem_mlkem768_PUBLICKEYBYTES);
+ memcpy(kex->mlkem768_client_key, keypair.sk.value,
+ sizeof(kex->mlkem768_client_key));
+#ifdef DEBUG_KEXECDH
+ dump_digest("client public key mlkem768:", cp,
+ crypto_kem_mlkem768_PUBLICKEYBYTES);
+#endif
+ cp += crypto_kem_mlkem768_PUBLICKEYBYTES;
+ kexc25519_keygen(kex->c25519_client_key, cp);
+#ifdef DEBUG_KEXECDH
+ dump_digest("client public key c25519:", cp, CURVE25519_SIZE);
+#endif
+ /* success */
+ r = 0;
+ kex->client_pub = buf;
+ buf = NULL;
+ out:
+ explicit_bzero(&keypair, sizeof(keypair));
+ explicit_bzero(rnd, sizeof(rnd));
+ sshbuf_free(buf);
+ return r;
+}
+
+int
+kex_kem_mlkem768x25519_enc(struct kex *kex,
+ const struct sshbuf *client_blob, struct sshbuf **server_blobp,
+ struct sshbuf **shared_secretp)
+{
+ struct sshbuf *server_blob = NULL;
+ struct sshbuf *buf = NULL;
+ const u_char *client_pub;
+ u_char rnd[LIBCRUX_ML_KEM_ENC_PRNG_LEN];
+ u_char server_pub[CURVE25519_SIZE], server_key[CURVE25519_SIZE];
+ u_char hash[SSH_DIGEST_MAX_LENGTH];
+ size_t need;
+ int r = SSH_ERR_INTERNAL_ERROR;
+ struct libcrux_mlkem768_enc_result enc;
+ struct libcrux_mlkem768_pk mlkem_pub;
+
+ *server_blobp = NULL;
+ *shared_secretp = NULL;
+ memset(&mlkem_pub, 0, sizeof(mlkem_pub));
+
+ /* client_blob contains both KEM and ECDH client pubkeys */
+ need = crypto_kem_mlkem768_PUBLICKEYBYTES + CURVE25519_SIZE;
+ if (sshbuf_len(client_blob) != need) {
+ r = SSH_ERR_SIGNATURE_INVALID;
+ goto out;
+ }
+ client_pub = sshbuf_ptr(client_blob);
+#ifdef DEBUG_KEXECDH
+ dump_digest("client public key mlkem768:", client_pub,
+ crypto_kem_mlkem768_PUBLICKEYBYTES);
+ dump_digest("client public key 25519:",
+ client_pub + crypto_kem_mlkem768_PUBLICKEYBYTES,
+ CURVE25519_SIZE);
+#endif
+ /* check public key validity */
+ memcpy(mlkem_pub.value, client_pub, crypto_kem_mlkem768_PUBLICKEYBYTES);
+ if (!libcrux_ml_kem_mlkem768_portable_validate_public_key(&mlkem_pub)) {
+ r = SSH_ERR_SIGNATURE_INVALID;
+ goto out;
+ }
+
+ /* allocate buffer for concatenation of KEM key and ECDH shared key */
+ /* the buffer will be hashed and the result is the shared secret */
+ if ((buf = sshbuf_new()) == NULL) {
+ r = SSH_ERR_ALLOC_FAIL;
+ goto out;
+ }
+ /* allocate space for encrypted KEM key and ECDH pub key */
+ if ((server_blob = sshbuf_new()) == NULL) {
+ r = SSH_ERR_ALLOC_FAIL;
+ goto out;
+ }
+ /* generate and encrypt KEM key with client key */
+ arc4random_buf(rnd, sizeof(rnd));
+ enc = libcrux_ml_kem_mlkem768_portable_encapsulate(&mlkem_pub, rnd);
+ /* generate ECDH key pair, store server pubkey after ciphertext */
+ kexc25519_keygen(server_key, server_pub);
+ if ((r = sshbuf_put(buf, enc.snd, sizeof(enc.snd))) != 0 ||
+ (r = sshbuf_put(server_blob, enc.fst.value, sizeof(enc.fst.value))) != 0 ||
+ (r = sshbuf_put(server_blob, server_pub, sizeof(server_pub))) != 0)
+ goto out;
+ /* append ECDH shared key */
+ client_pub += crypto_kem_mlkem768_PUBLICKEYBYTES;
+ if ((r = kexc25519_shared_key_ext(server_key, client_pub, buf, 1)) < 0)
+ goto out;
+ if ((r = ssh_digest_buffer(kex->hash_alg, buf, hash, sizeof(hash))) != 0)
+ goto out;
+#ifdef DEBUG_KEXECDH
+ dump_digest("server public key 25519:", server_pub, CURVE25519_SIZE);
+ dump_digest("server cipher text:",
+ enc.fst.value, sizeof(enc.fst.value));
+ dump_digest("server kem key:", enc.snd, sizeof(enc.snd));
+ dump_digest("concatenation of KEM key and ECDH shared key:",
+ sshbuf_ptr(buf), sshbuf_len(buf));
+#endif
+ /* string-encoded hash is resulting shared secret */
+ sshbuf_reset(buf);
+ if ((r = sshbuf_put_string(buf, hash,
+ ssh_digest_bytes(kex->hash_alg))) != 0)
+ goto out;
+#ifdef DEBUG_KEXECDH
+ dump_digest("encoded shared secret:", sshbuf_ptr(buf), sshbuf_len(buf));
+#endif
+ /* success */
+ r = 0;
+ *server_blobp = server_blob;
+ *shared_secretp = buf;
+ server_blob = NULL;
+ buf = NULL;
+ out:
+ explicit_bzero(hash, sizeof(hash));
+ explicit_bzero(server_key, sizeof(server_key));
+ explicit_bzero(rnd, sizeof(rnd));
+ explicit_bzero(&enc, sizeof(enc));
+ sshbuf_free(server_blob);
+ sshbuf_free(buf);
+ return r;
+}
+
+int
+kex_kem_mlkem768x25519_dec(struct kex *kex,
+ const struct sshbuf *server_blob, struct sshbuf **shared_secretp)
+{
+ struct sshbuf *buf = NULL;
+ u_char mlkem_key[crypto_kem_mlkem768_BYTES];
+ const u_char *ciphertext, *server_pub;
+ u_char hash[SSH_DIGEST_MAX_LENGTH];
+ size_t need;
+ int r;
+ struct libcrux_mlkem768_sk mlkem_priv;
+ struct libcrux_mlkem768_ciphertext mlkem_ciphertext;
+
+ *shared_secretp = NULL;
+ memset(&mlkem_priv, 0, sizeof(mlkem_priv));
+ memset(&mlkem_ciphertext, 0, sizeof(mlkem_ciphertext));
+
+ need = crypto_kem_mlkem768_CIPHERTEXTBYTES + CURVE25519_SIZE;
+ if (sshbuf_len(server_blob) != need) {
+ r = SSH_ERR_SIGNATURE_INVALID;
+ goto out;
+ }
+ ciphertext = sshbuf_ptr(server_blob);
+ server_pub = ciphertext + crypto_kem_mlkem768_CIPHERTEXTBYTES;
+ /* hash concatenation of KEM key and ECDH shared key */
+ if ((buf = sshbuf_new()) == NULL) {
+ r = SSH_ERR_ALLOC_FAIL;
+ goto out;
+ }
+ memcpy(mlkem_priv.value, kex->mlkem768_client_key,
+ sizeof(kex->mlkem768_client_key));
+ memcpy(mlkem_ciphertext.value, ciphertext,
+ sizeof(mlkem_ciphertext.value));
+#ifdef DEBUG_KEXECDH
+ dump_digest("server cipher text:", mlkem_ciphertext.value,
+ sizeof(mlkem_ciphertext.value));
+ dump_digest("server public key c25519:", server_pub, CURVE25519_SIZE);
+#endif
+ libcrux_ml_kem_mlkem768_portable_decapsulate(&mlkem_priv,
+ &mlkem_ciphertext, mlkem_key);
+ if ((r = sshbuf_put(buf, mlkem_key, sizeof(mlkem_key))) != 0)
+ goto out;
+ if ((r = kexc25519_shared_key_ext(kex->c25519_client_key, server_pub,
+ buf, 1)) < 0)
+ goto out;
+ if ((r = ssh_digest_buffer(kex->hash_alg, buf,
+ hash, sizeof(hash))) != 0)
+ goto out;
+#ifdef DEBUG_KEXECDH
+ dump_digest("client kem key:", mlkem_key, sizeof(mlkem_key));
+ dump_digest("concatenation of KEM key and ECDH shared key:",
+ sshbuf_ptr(buf), sshbuf_len(buf));
+#endif
+ sshbuf_reset(buf);
+ if ((r = sshbuf_put_string(buf, hash,
+ ssh_digest_bytes(kex->hash_alg))) != 0)
+ goto out;
+#ifdef DEBUG_KEXECDH
+ dump_digest("encoded shared secret:", sshbuf_ptr(buf), sshbuf_len(buf));
+#endif
+ /* success */
+ r = 0;
+ *shared_secretp = buf;
+ buf = NULL;
+ out:
+ explicit_bzero(hash, sizeof(hash));
+ explicit_bzero(&mlkem_priv, sizeof(mlkem_priv));
+ explicit_bzero(&mlkem_ciphertext, sizeof(mlkem_ciphertext));
+ explicit_bzero(mlkem_key, sizeof(mlkem_key));
+ sshbuf_free(buf);
+ return r;
+}
+#else /* USE_MLKEM768X25519 */
+int
+kex_kem_mlkem768x25519_keypair(struct kex *kex)
+{
+ return SSH_ERR_SIGN_ALG_UNSUPPORTED;
+}
+
+int
+kex_kem_mlkem768x25519_enc(struct kex *kex,
+ const struct sshbuf *client_blob, struct sshbuf **server_blobp,
+ struct sshbuf **shared_secretp)
+{
+ return SSH_ERR_SIGN_ALG_UNSUPPORTED;
+}
+
+int
+kex_kem_mlkem768x25519_dec(struct kex *kex,
+ const struct sshbuf *server_blob, struct sshbuf **shared_secretp)
+{
+ return SSH_ERR_SIGN_ALG_UNSUPPORTED;
+}
+#endif /* USE_MLKEM768X25519 */
diff --git a/kexsntrup761x25519.c b/kexsntrup761x25519.c
index 6afb1ba..6bbca71 100644
--- a/kexsntrup761x25519.c
+++ b/kexsntrup761x25519.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kexsntrup761x25519.c,v 1.2 2021/12/05 12:28:27 jsg Exp $ */
+/* $OpenBSD: kexsntrup761x25519.c,v 1.3 2024/09/15 02:20:51 djm Exp $ */
/*
* Copyright (c) 2019 Markus Friedl. All rights reserved.
*
@@ -39,6 +39,10 @@
#include "digest.h"
#include "ssherr.h"
+volatile crypto_int16 crypto_int16_optblocker = 0;
+volatile crypto_int32 crypto_int32_optblocker = 0;
+volatile crypto_int64 crypto_int64_optblocker = 0;
+
int
kex_kem_sntrup761x25519_keypair(struct kex *kex)
{
diff --git a/libcrux_mlkem768_sha3.h b/libcrux_mlkem768_sha3.h
new file mode 100644
index 0000000..a82d60e
--- /dev/null
+++ b/libcrux_mlkem768_sha3.h
@@ -0,0 +1,12332 @@
+/* $OpenBSD: libcrux_mlkem768_sha3.h,v 1.1 2024/09/02 12:13:56 djm Exp $ */
+/* Extracted from libcrux revision 84c5d87b3092c59294345aa269ceefe0eb97cc35 */
+
+/*
+ * MIT License
+ *
+ * Copyright (c) 2024 Cryspen
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#if !defined(__GNUC__) || (__GNUC__ < 2)
+# define __attribute__(x)
+#endif
+#define KRML_MUSTINLINE inline
+#define KRML_NOINLINE __attribute__((noinline, unused))
+#define KRML_HOST_EPRINTF(...)
+#define KRML_HOST_EXIT(x) fatal_f("internal error")
+
+/* from libcrux/libcrux-ml-kem/cg/eurydice_glue.h */
+/*
+ * SPDX-FileCopyrightText: 2024 Eurydice Contributors
+ * SPDX-FileCopyrightText: 2024 Cryspen Sarl <info@cryspen.com>
+ *
+ * SPDX-License-Identifier: MIT or Apache-2.0
+ */
+
+#pragma once
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+
+
+// SLICES, ARRAYS, ETC.
+
+// The MSVC C++ compiler does not support compound literals.
+// This CLITERAL is used to turn `(type){...}` into `type{...}` when using a C++
+// compiler.
+#if defined(__cplusplus)
+#define CLITERAL(type) type
+#else
+#define CLITERAL(type) (type)
+#endif
+
+// We represent a slice as a pair of an (untyped) pointer, along with the length
+// of the slice, i.e. the number of elements in the slice (this is NOT the
+// number of bytes). This design choice has two important consequences.
+// - if you need to use `ptr`, you MUST cast it to a proper type *before*
+// performing pointer
+// arithmetic on it (remember that C desugars pointer arithmetic based on the
+// type of the address)
+// - if you need to use `len` for a C style function (e.g. memcpy, memcmp), you
+// need to multiply it
+// by sizeof t, where t is the type of the elements.
+//
+// Empty slices have `len == 0` and `ptr` always needs to be valid pointer that
+// is not NULL (otherwise the construction in EURYDICE_SLICE computes `NULL +
+// start`).
+typedef struct {
+ void *ptr;
+ size_t len;
+} Eurydice_slice;
+
+// Helper macro to create a slice out of a pointer x, a start index in x
+// (included), and an end index in x (excluded). The argument x must be suitably
+// cast to something that can decay (see remark above about how pointer
+// arithmetic works in C), meaning either pointer or array type.
+#define EURYDICE_SLICE(x, start, end) \
+ (CLITERAL(Eurydice_slice){.ptr = (void *)(x + start), .len = end - start})
+#define EURYDICE_SLICE_LEN(s, _) s.len
+// This macro is a pain because in case the dereferenced element type is an
+// array, you cannot simply write `t x` as it would yield `int[4] x` instead,
+// which is NOT correct C syntax, so we add a dedicated phase in Eurydice that
+// adds an extra argument to this macro at the last minute so that we have the
+// correct type of *pointers* to elements.
+#define Eurydice_slice_index(s, i, t, t_ptr_t) (((t_ptr_t)s.ptr)[i])
+#define Eurydice_slice_subslice(s, r, t, _) \
+ EURYDICE_SLICE((t *)s.ptr, r.start, r.end)
+// Variant for when the start and end indices are statically known (i.e., the
+// range argument `r` is a literal).
+#define Eurydice_slice_subslice2(s, start, end, t) \
+ EURYDICE_SLICE((t *)s.ptr, start, end)
+#define Eurydice_slice_subslice_to(s, subslice_end_pos, t, _) \
+ EURYDICE_SLICE((t *)s.ptr, 0, subslice_end_pos)
+#define Eurydice_slice_subslice_from(s, subslice_start_pos, t, _) \
+ EURYDICE_SLICE((t *)s.ptr, subslice_start_pos, s.len)
+#define Eurydice_array_to_slice(end, x, t) \
+ EURYDICE_SLICE(x, 0, \
+ end) /* x is already at an array type, no need for cast */
+#define Eurydice_array_to_subslice(_arraylen, x, r, t, _) \
+ EURYDICE_SLICE((t *)x, r.start, r.end)
+// Same as above, variant for when start and end are statically known
+#define Eurydice_array_to_subslice2(x, start, end, t) \
+ EURYDICE_SLICE((t *)x, start, end)
+#define Eurydice_array_to_subslice_to(_size, x, r, t, _range_t) \
+ EURYDICE_SLICE((t *)x, 0, r)
+#define Eurydice_array_to_subslice_from(size, x, r, t, _range_t) \
+ EURYDICE_SLICE((t *)x, r, size)
+#define Eurydice_slice_len(s, t) EURYDICE_SLICE_LEN(s, t)
+#define Eurydice_slice_copy(dst, src, t) \
+ memcpy(dst.ptr, src.ptr, dst.len * sizeof(t))
+#define core_array___Array_T__N__23__as_slice(len_, ptr_, t, _ret_t) \
+ ((Eurydice_slice){.ptr = ptr_, .len = len_})
+
+#define core_array___core__clone__Clone_for__Array_T__N___20__clone( \
+ len, src, dst, elem_type, _ret_t) \
+ (memcpy(dst, src, len * sizeof(elem_type)))
+#define TryFromSliceError uint8_t
+
+#define Eurydice_array_eq(sz, a1, a2, t, _) \
+ (memcmp(a1, a2, sz * sizeof(t)) == 0)
+#define core_array_equality___core__cmp__PartialEq__Array_U__N___for__Array_T__N____eq( \
+ sz, a1, a2, t, _, _ret_t) \
+ Eurydice_array_eq(sz, a1, a2, t, _)
+#define core_array_equality___core__cmp__PartialEq__0___Slice_U____for__Array_T__N___3__eq( \
+ sz, a1, a2, t, _, _ret_t) \
+ Eurydice_array_eq(sz, a1, ((a2)->ptr), t, _)
+
+#define Eurydice_slice_split_at(slice, mid, element_type, ret_t) \
+ (CLITERAL(ret_t){ \
+ .fst = EURYDICE_SLICE((element_type *)slice.ptr, 0, mid), \
+ .snd = EURYDICE_SLICE((element_type *)slice.ptr, mid, slice.len)})
+#define Eurydice_slice_split_at_mut(slice, mid, element_type, ret_t) \
+ (CLITERAL(ret_t){ \
+ .fst = {.ptr = slice.ptr, .len = mid}, \
+ .snd = {.ptr = (char *)slice.ptr + mid * sizeof(element_type), \
+ .len = slice.len - mid}})
+
+// Conversion of slice to an array, rewritten (by Eurydice) to name the
+// destination array, since arrays are not values in C.
+// N.B.: see note in karamel/lib/Inlining.ml if you change this.
+#define Eurydice_slice_to_array2(dst, src, _, t_arr) \
+ Eurydice_slice_to_array3(&(dst)->tag, (char *)&(dst)->val.case_Ok, src, \
+ sizeof(t_arr))
+
+static inline void Eurydice_slice_to_array3(uint8_t *dst_tag, char *dst_ok,
+ Eurydice_slice src, size_t sz) {
+ *dst_tag = 0;
+ memcpy(dst_ok, src.ptr, sz);
+}
+
+// CORE STUFF (conversions, endianness, ...)
+
+static inline void core_num__u64_9__to_le_bytes(uint64_t v, uint8_t buf[8]) {
+ memcpy(buf, &v, sizeof(v));
+}
+static inline uint64_t core_num__u64_9__from_le_bytes(uint8_t buf[8]) {
+ uint64_t v;
+ memcpy(&v, buf, sizeof(v));
+ return v;
+}
+
+static inline uint32_t core_num__u32_8__from_le_bytes(uint8_t buf[4]) {
+ uint32_t v;
+ memcpy(&v, buf, sizeof(v));
+ return v;
+}
+
+static inline uint32_t core_num__u8_6__count_ones(uint8_t x0) {
+#ifdef _MSC_VER
+ return __popcnt(x0);
+#else
+ return __builtin_popcount(x0);
+#endif
+}
+
+// unsigned overflow wraparound semantics in C
+static inline uint16_t core_num__u16_7__wrapping_add(uint16_t x, uint16_t y) {
+ return x + y;
+}
+static inline uint8_t core_num__u8_6__wrapping_sub(uint8_t x, uint8_t y) {
+ return x - y;
+}
+
+// ITERATORS
+
+#define Eurydice_range_iter_next(iter_ptr, t, ret_t) \
+ (((iter_ptr)->start == (iter_ptr)->end) \
+ ? (CLITERAL(ret_t){.tag = None}) \
+ : (CLITERAL(ret_t){.tag = Some, .f0 = (iter_ptr)->start++}))
+
+#define core_iter_range___core__iter__traits__iterator__Iterator_for_core__ops__range__Range_A___6__next \
+ Eurydice_range_iter_next
+
+// See note in karamel/lib/Inlining.ml if you change this
+#define Eurydice_into_iter(x, t, _ret_t) (x)
+#define core_iter_traits_collect___core__iter__traits__collect__IntoIterator_for_I__1__into_iter \
+ Eurydice_into_iter
+
+#if defined(__cplusplus)
+}
+#endif
+
+/* from libcrux/libcrux-ml-kem/cg/libcrux_core.h */
+/*
+ * SPDX-FileCopyrightText: 2024 Cryspen Sarl <info@cryspen.com>
+ *
+ * SPDX-License-Identifier: MIT or Apache-2.0
+ *
+ * This code was generated with the following revisions:
+ * Charon: 6b5e110342a771a3e1c739b10294b1778e4be8b4
+ * Eurydice: 31be7d65ca5d6acdacfb33652e478d24dd85c1cb
+ * Karamel: 3205d3365ea2790b02368f79fcee38e38d0b5908
+ * F*: a32b316e521fa4f239b610ec8f1d15e78d62cbe8-dirty
+ * Libcrux: 4ad532b206174114dd4140b718e7794a28fc59ee
+ */
+
+#ifndef __libcrux_core_H
+#define __libcrux_core_H
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+
+/**
+A monomorphic instance of core.ops.range.Range
+with types size_t
+
+*/
+typedef struct core_ops_range_Range_b3_s {
+ size_t start;
+ size_t end;
+} core_ops_range_Range_b3;
+
+#define Ok 0
+#define Err 1
+
+typedef uint8_t Result_86_tags;
+
+#define None 0
+#define Some 1
+
+typedef uint8_t Option_ef_tags;
+
+/**
+A monomorphic instance of core.option.Option
+with types size_t
+
+*/
+typedef struct Option_b3_s {
+ Option_ef_tags tag;
+ size_t f0;
+} Option_b3;
+
+static inline uint16_t core_num__u16_7__wrapping_add(uint16_t x0, uint16_t x1);
+
+#define CORE_NUM__U32_8__BITS (32U)
+
+static inline uint64_t core_num__u64_9__from_le_bytes(uint8_t x0[8U]);
+
+static inline void core_num__u64_9__to_le_bytes(uint64_t x0, uint8_t x1[8U]);
+
+static inline uint32_t core_num__u8_6__count_ones(uint8_t x0);
+
+static inline uint8_t core_num__u8_6__wrapping_sub(uint8_t x0, uint8_t x1);
+
+#define LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE ((size_t)32U)
+
+#define LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT ((size_t)12U)
+
+#define LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT ((size_t)256U)
+
+#define LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_RING_ELEMENT \
+ (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * (size_t)12U)
+
+#define LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT \
+ (LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_RING_ELEMENT / (size_t)8U)
+
+#define LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE ((size_t)32U)
+
+#define LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE ((size_t)32U)
+
+typedef struct libcrux_ml_kem_utils_extraction_helper_Keypair768_s {
+ uint8_t fst[1152U];
+ uint8_t snd[1184U];
+} libcrux_ml_kem_utils_extraction_helper_Keypair768;
+
+/**
+A monomorphic instance of core.result.Result
+with types uint8_t[24size_t], core_array_TryFromSliceError
+
+*/
+typedef struct Result_6f_s {
+ Result_86_tags tag;
+ union {
+ uint8_t case_Ok[24U];
+ TryFromSliceError case_Err;
+ } val;
+} Result_6f;
+
+/**
+This function found in impl {core::result::Result<T, E>}
+*/
+/**
+A monomorphic instance of core.result.unwrap_41
+with types uint8_t[24size_t], core_array_TryFromSliceError
+
+*/
+static inline void unwrap_41_1c(Result_6f self, uint8_t ret[24U]) {
+ if (self.tag == Ok) {
+ uint8_t f0[24U];
+ memcpy(f0, self.val.case_Ok, (size_t)24U * sizeof(uint8_t));
+ memcpy(ret, f0, (size_t)24U * sizeof(uint8_t));
+ } else {
+ KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__,
+ "unwrap not Ok");
+ KRML_HOST_EXIT(255U);
+ }
+}
+
+/**
+A monomorphic instance of core.result.Result
+with types uint8_t[20size_t], core_array_TryFromSliceError
+
+*/
+typedef struct Result_7a_s {
+ Result_86_tags tag;
+ union {
+ uint8_t case_Ok[20U];
+ TryFromSliceError case_Err;
+ } val;
+} Result_7a;
+
+/**
+This function found in impl {core::result::Result<T, E>}
+*/
+/**
+A monomorphic instance of core.result.unwrap_41
+with types uint8_t[20size_t], core_array_TryFromSliceError
+
+*/
+static inline void unwrap_41_34(Result_7a self, uint8_t ret[20U]) {
+ if (self.tag == Ok) {
+ uint8_t f0[20U];
+ memcpy(f0, self.val.case_Ok, (size_t)20U * sizeof(uint8_t));
+ memcpy(ret, f0, (size_t)20U * sizeof(uint8_t));
+ } else {
+ KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__,
+ "unwrap not Ok");
+ KRML_HOST_EXIT(255U);
+ }
+}
+
+/**
+A monomorphic instance of core.result.Result
+with types uint8_t[10size_t], core_array_TryFromSliceError
+
+*/
+typedef struct Result_cd_s {
+ Result_86_tags tag;
+ union {
+ uint8_t case_Ok[10U];
+ TryFromSliceError case_Err;
+ } val;
+} Result_cd;
+
+/**
+This function found in impl {core::result::Result<T, E>}
+*/
+/**
+A monomorphic instance of core.result.unwrap_41
+with types uint8_t[10size_t], core_array_TryFromSliceError
+
+*/
+static inline void unwrap_41_e8(Result_cd self, uint8_t ret[10U]) {
+ if (self.tag == Ok) {
+ uint8_t f0[10U];
+ memcpy(f0, self.val.case_Ok, (size_t)10U * sizeof(uint8_t));
+ memcpy(ret, f0, (size_t)10U * sizeof(uint8_t));
+ } else {
+ KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__,
+ "unwrap not Ok");
+ KRML_HOST_EXIT(255U);
+ }
+}
+
+typedef struct Eurydice_slice_uint8_t_4size_t__x2_s {
+ Eurydice_slice fst[4U];
+ Eurydice_slice snd[4U];
+} Eurydice_slice_uint8_t_4size_t__x2;
+
+typedef struct libcrux_ml_kem_mlkem768_MlKem768Ciphertext_s {
+ uint8_t value[1088U];
+} libcrux_ml_kem_mlkem768_MlKem768Ciphertext;
+
+/**
+ A reference to the raw byte slice.
+*/
+/**
+This function found in impl {libcrux_ml_kem::types::MlKemCiphertext<SIZE>#6}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.types.as_slice_d4
+with const generics
+- SIZE= 1088
+*/
+static inline uint8_t *libcrux_ml_kem_types_as_slice_d4_1d(
+ libcrux_ml_kem_mlkem768_MlKem768Ciphertext *self) {
+ return self->value;
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.types.MlKemPublicKey
+with const generics
+- $1184size_t
+*/
+typedef struct libcrux_ml_kem_types_MlKemPublicKey_15_s {
+ uint8_t value[1184U];
+} libcrux_ml_kem_types_MlKemPublicKey_15;
+
+/**
+This function found in impl {(core::convert::From<@Array<u8, SIZE>> for
+libcrux_ml_kem::types::MlKemPublicKey<SIZE>)#14}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.types.from_b6
+with const generics
+- SIZE= 1184
+*/
+static inline libcrux_ml_kem_types_MlKemPublicKey_15
+libcrux_ml_kem_types_from_b6_da(uint8_t value[1184U]) {
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_value[1184U];
+ memcpy(copy_of_value, value, (size_t)1184U * sizeof(uint8_t));
+ libcrux_ml_kem_types_MlKemPublicKey_15 lit;
+ memcpy(lit.value, copy_of_value, (size_t)1184U * sizeof(uint8_t));
+ return lit;
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.types.MlKemPrivateKey
+with const generics
+- $2400size_t
+*/
+typedef struct libcrux_ml_kem_types_MlKemPrivateKey_55_s {
+ uint8_t value[2400U];
+} libcrux_ml_kem_types_MlKemPrivateKey_55;
+
+typedef struct libcrux_ml_kem_mlkem768_MlKem768KeyPair_s {
+ libcrux_ml_kem_types_MlKemPrivateKey_55 sk;
+ libcrux_ml_kem_types_MlKemPublicKey_15 pk;
+} libcrux_ml_kem_mlkem768_MlKem768KeyPair;
+
+/**
+ Create a new [`MlKemKeyPair`] from the secret and public key.
+*/
+/**
+This function found in impl
+{libcrux_ml_kem::types::MlKemKeyPair<PRIVATE_KEY_SIZE, PUBLIC_KEY_SIZE>}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.types.from_17
+with const generics
+- PRIVATE_KEY_SIZE= 2400
+- PUBLIC_KEY_SIZE= 1184
+*/
+static inline libcrux_ml_kem_mlkem768_MlKem768KeyPair
+libcrux_ml_kem_types_from_17_35(libcrux_ml_kem_types_MlKemPrivateKey_55 sk,
+ libcrux_ml_kem_types_MlKemPublicKey_15 pk) {
+ return (
+ CLITERAL(libcrux_ml_kem_mlkem768_MlKem768KeyPair){.sk = sk, .pk = pk});
+}
+
+/**
+This function found in impl {(core::convert::From<@Array<u8, SIZE>> for
+libcrux_ml_kem::types::MlKemPrivateKey<SIZE>)#8}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.types.from_05
+with const generics
+- SIZE= 2400
+*/
+static inline libcrux_ml_kem_types_MlKemPrivateKey_55
+libcrux_ml_kem_types_from_05_f2(uint8_t value[2400U]) {
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_value[2400U];
+ memcpy(copy_of_value, value, (size_t)2400U * sizeof(uint8_t));
+ libcrux_ml_kem_types_MlKemPrivateKey_55 lit;
+ memcpy(lit.value, copy_of_value, (size_t)2400U * sizeof(uint8_t));
+ return lit;
+}
+
+/**
+A monomorphic instance of core.result.Result
+with types uint8_t[32size_t], core_array_TryFromSliceError
+
+*/
+typedef struct Result_00_s {
+ Result_86_tags tag;
+ union {
+ uint8_t case_Ok[32U];
+ TryFromSliceError case_Err;
+ } val;
+} Result_00;
+
+/**
+This function found in impl {core::result::Result<T, E>}
+*/
+/**
+A monomorphic instance of core.result.unwrap_41
+with types uint8_t[32size_t], core_array_TryFromSliceError
+
+*/
+static inline void unwrap_41_83(Result_00 self, uint8_t ret[32U]) {
+ if (self.tag == Ok) {
+ uint8_t f0[32U];
+ memcpy(f0, self.val.case_Ok, (size_t)32U * sizeof(uint8_t));
+ memcpy(ret, f0, (size_t)32U * sizeof(uint8_t));
+ } else {
+ KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__,
+ "unwrap not Ok");
+ KRML_HOST_EXIT(255U);
+ }
+}
+
+/**
+A monomorphic instance of K.
+with types libcrux_ml_kem_types_MlKemCiphertext[[$1088size_t]],
+uint8_t[32size_t]
+
+*/
+typedef struct tuple_3c_s {
+ libcrux_ml_kem_mlkem768_MlKem768Ciphertext fst;
+ uint8_t snd[32U];
+} tuple_3c;
+
+/**
+This function found in impl {(core::convert::From<@Array<u8, SIZE>> for
+libcrux_ml_kem::types::MlKemCiphertext<SIZE>)#2}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.types.from_01
+with const generics
+- SIZE= 1088
+*/
+static inline libcrux_ml_kem_mlkem768_MlKem768Ciphertext
+libcrux_ml_kem_types_from_01_9f(uint8_t value[1088U]) {
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_value[1088U];
+ memcpy(copy_of_value, value, (size_t)1088U * sizeof(uint8_t));
+ libcrux_ml_kem_mlkem768_MlKem768Ciphertext lit;
+ memcpy(lit.value, copy_of_value, (size_t)1088U * sizeof(uint8_t));
+ return lit;
+}
+
+/**
+ A reference to the raw byte slice.
+*/
+/**
+This function found in impl {libcrux_ml_kem::types::MlKemPublicKey<SIZE>#18}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.types.as_slice_cb
+with const generics
+- SIZE= 1184
+*/
+static inline uint8_t *libcrux_ml_kem_types_as_slice_cb_50(
+ libcrux_ml_kem_types_MlKemPublicKey_15 *self) {
+ return self->value;
+}
+
+/**
+ Pad the `slice` with `0`s at the end.
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.utils.into_padded_array
+with const generics
+- LEN= 33
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_utils_into_padded_array_ea2(
+ Eurydice_slice slice, uint8_t ret[33U]) {
+ uint8_t out[33U] = {0U};
+ uint8_t *uu____0 = out;
+ Eurydice_slice_copy(
+ Eurydice_array_to_subslice2(uu____0, (size_t)0U,
+ Eurydice_slice_len(slice, uint8_t), uint8_t),
+ slice, uint8_t);
+ memcpy(ret, out, (size_t)33U * sizeof(uint8_t));
+}
+
+/**
+ Pad the `slice` with `0`s at the end.
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.utils.into_padded_array
+with const generics
+- LEN= 34
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_utils_into_padded_array_ea1(
+ Eurydice_slice slice, uint8_t ret[34U]) {
+ uint8_t out[34U] = {0U};
+ uint8_t *uu____0 = out;
+ Eurydice_slice_copy(
+ Eurydice_array_to_subslice2(uu____0, (size_t)0U,
+ Eurydice_slice_len(slice, uint8_t), uint8_t),
+ slice, uint8_t);
+ memcpy(ret, out, (size_t)34U * sizeof(uint8_t));
+}
+
+/**
+This function found in impl {(core::convert::AsRef<@Slice<u8>> for
+libcrux_ml_kem::types::MlKemCiphertext<SIZE>)#1}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.types.as_ref_00
+with const generics
+- SIZE= 1088
+*/
+static inline Eurydice_slice libcrux_ml_kem_types_as_ref_00_24(
+ libcrux_ml_kem_mlkem768_MlKem768Ciphertext *self) {
+ return Eurydice_array_to_slice((size_t)1088U, self->value, uint8_t);
+}
+
+/**
+ Pad the `slice` with `0`s at the end.
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.utils.into_padded_array
+with const generics
+- LEN= 1120
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_utils_into_padded_array_ea0(
+ Eurydice_slice slice, uint8_t ret[1120U]) {
+ uint8_t out[1120U] = {0U};
+ uint8_t *uu____0 = out;
+ Eurydice_slice_copy(
+ Eurydice_array_to_subslice2(uu____0, (size_t)0U,
+ Eurydice_slice_len(slice, uint8_t), uint8_t),
+ slice, uint8_t);
+ memcpy(ret, out, (size_t)1120U * sizeof(uint8_t));
+}
+
+/**
+ Pad the `slice` with `0`s at the end.
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.utils.into_padded_array
+with const generics
+- LEN= 64
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_utils_into_padded_array_ea(
+ Eurydice_slice slice, uint8_t ret[64U]) {
+ uint8_t out[64U] = {0U};
+ uint8_t *uu____0 = out;
+ Eurydice_slice_copy(
+ Eurydice_array_to_subslice2(uu____0, (size_t)0U,
+ Eurydice_slice_len(slice, uint8_t), uint8_t),
+ slice, uint8_t);
+ memcpy(ret, out, (size_t)64U * sizeof(uint8_t));
+}
+
+/**
+A monomorphic instance of core.result.Result
+with types int16_t[16size_t], core_array_TryFromSliceError
+
+*/
+typedef struct Result_c0_s {
+ Result_86_tags tag;
+ union {
+ int16_t case_Ok[16U];
+ TryFromSliceError case_Err;
+ } val;
+} Result_c0;
+
+/**
+This function found in impl {core::result::Result<T, E>}
+*/
+/**
+A monomorphic instance of core.result.unwrap_41
+with types int16_t[16size_t], core_array_TryFromSliceError
+
+*/
+static inline void unwrap_41_f9(Result_c0 self, int16_t ret[16U]) {
+ if (self.tag == Ok) {
+ int16_t f0[16U];
+ memcpy(f0, self.val.case_Ok, (size_t)16U * sizeof(int16_t));
+ memcpy(ret, f0, (size_t)16U * sizeof(int16_t));
+ } else {
+ KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__,
+ "unwrap not Ok");
+ KRML_HOST_EXIT(255U);
+ }
+}
+
+/**
+A monomorphic instance of core.result.Result
+with types uint8_t[8size_t], core_array_TryFromSliceError
+
+*/
+typedef struct Result_56_s {
+ Result_86_tags tag;
+ union {
+ uint8_t case_Ok[8U];
+ TryFromSliceError case_Err;
+ } val;
+} Result_56;
+
+/**
+This function found in impl {core::result::Result<T, E>}
+*/
+/**
+A monomorphic instance of core.result.unwrap_41
+with types uint8_t[8size_t], core_array_TryFromSliceError
+
+*/
+static inline void unwrap_41_ac(Result_56 self, uint8_t ret[8U]) {
+ if (self.tag == Ok) {
+ uint8_t f0[8U];
+ memcpy(f0, self.val.case_Ok, (size_t)8U * sizeof(uint8_t));
+ memcpy(ret, f0, (size_t)8U * sizeof(uint8_t));
+ } else {
+ KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__,
+ "unwrap not Ok");
+ KRML_HOST_EXIT(255U);
+ }
+}
+
+typedef struct Eurydice_slice_uint8_t_x2_s {
+ Eurydice_slice fst;
+ Eurydice_slice snd;
+} Eurydice_slice_uint8_t_x2;
+
+typedef struct Eurydice_slice_uint8_t_1size_t__x2_s {
+ Eurydice_slice fst[1U];
+ Eurydice_slice snd[1U];
+} Eurydice_slice_uint8_t_1size_t__x2;
+
+#if defined(__cplusplus)
+}
+#endif
+
+#define __libcrux_core_H_DEFINED
+#endif
+
+/* from libcrux/libcrux-ml-kem/cg/libcrux_ct_ops.h */
+/*
+ * SPDX-FileCopyrightText: 2024 Cryspen Sarl <info@cryspen.com>
+ *
+ * SPDX-License-Identifier: MIT or Apache-2.0
+ *
+ * This code was generated with the following revisions:
+ * Charon: 6b5e110342a771a3e1c739b10294b1778e4be8b4
+ * Eurydice: 31be7d65ca5d6acdacfb33652e478d24dd85c1cb
+ * Karamel: 3205d3365ea2790b02368f79fcee38e38d0b5908
+ * F*: a32b316e521fa4f239b610ec8f1d15e78d62cbe8-dirty
+ * Libcrux: 4ad532b206174114dd4140b718e7794a28fc59ee
+ */
+
+#ifndef __libcrux_ct_ops_H
+#define __libcrux_ct_ops_H
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+
+/**
+ Return 1 if `value` is not zero and 0 otherwise.
+*/
+static inline uint8_t libcrux_ml_kem_constant_time_ops_inz(uint8_t value) {
+ uint16_t value0 = (uint16_t)value;
+ uint16_t result = (((uint32_t)value0 |
+ (uint32_t)core_num__u16_7__wrapping_add(~value0, 1U)) &
+ 0xFFFFU) >>
+ 8U &
+ 1U;
+ return (uint8_t)result;
+}
+
+static KRML_NOINLINE uint8_t
+libcrux_ml_kem_constant_time_ops_is_non_zero(uint8_t value) {
+ return libcrux_ml_kem_constant_time_ops_inz(value);
+}
+
+/**
+ Return 1 if the bytes of `lhs` and `rhs` do not exactly
+ match and 0 otherwise.
+*/
+static inline uint8_t libcrux_ml_kem_constant_time_ops_compare(
+ Eurydice_slice lhs, Eurydice_slice rhs) {
+ uint8_t r = 0U;
+ for (size_t i = (size_t)0U; i < Eurydice_slice_len(lhs, uint8_t); i++) {
+ size_t i0 = i;
+ r = (uint32_t)r |
+ ((uint32_t)Eurydice_slice_index(lhs, i0, uint8_t, uint8_t *) ^
+ (uint32_t)Eurydice_slice_index(rhs, i0, uint8_t, uint8_t *));
+ }
+ return libcrux_ml_kem_constant_time_ops_is_non_zero(r);
+}
+
+static KRML_NOINLINE uint8_t
+libcrux_ml_kem_constant_time_ops_compare_ciphertexts_in_constant_time(
+ Eurydice_slice lhs, Eurydice_slice rhs) {
+ return libcrux_ml_kem_constant_time_ops_compare(lhs, rhs);
+}
+
+/**
+ If `selector` is not zero, return the bytes in `rhs`; return the bytes in
+ `lhs` otherwise.
+*/
+static inline void libcrux_ml_kem_constant_time_ops_select_ct(
+ Eurydice_slice lhs, Eurydice_slice rhs, uint8_t selector,
+ uint8_t ret[32U]) {
+ uint8_t mask = core_num__u8_6__wrapping_sub(
+ libcrux_ml_kem_constant_time_ops_is_non_zero(selector), 1U);
+ uint8_t out[32U] = {0U};
+ for (size_t i = (size_t)0U; i < LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE;
+ i++) {
+ size_t i0 = i;
+ out[i0] = ((uint32_t)Eurydice_slice_index(lhs, i0, uint8_t, uint8_t *) &
+ (uint32_t)mask) |
+ ((uint32_t)Eurydice_slice_index(rhs, i0, uint8_t, uint8_t *) &
+ (uint32_t)~mask);
+ }
+ memcpy(ret, out, (size_t)32U * sizeof(uint8_t));
+}
+
+static KRML_NOINLINE void
+libcrux_ml_kem_constant_time_ops_select_shared_secret_in_constant_time(
+ Eurydice_slice lhs, Eurydice_slice rhs, uint8_t selector,
+ uint8_t ret[32U]) {
+ libcrux_ml_kem_constant_time_ops_select_ct(lhs, rhs, selector, ret);
+}
+
+static inline void
+libcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time(
+ Eurydice_slice lhs_c, Eurydice_slice rhs_c, Eurydice_slice lhs_s,
+ Eurydice_slice rhs_s, uint8_t ret[32U]) {
+ uint8_t selector =
+ libcrux_ml_kem_constant_time_ops_compare_ciphertexts_in_constant_time(
+ lhs_c, rhs_c);
+ uint8_t ret0[32U];
+ libcrux_ml_kem_constant_time_ops_select_shared_secret_in_constant_time(
+ lhs_s, rhs_s, selector, ret0);
+ memcpy(ret, ret0, (size_t)32U * sizeof(uint8_t));
+}
+
+#if defined(__cplusplus)
+}
+#endif
+
+#define __libcrux_ct_ops_H_DEFINED
+#endif
+
+/* from libcrux/libcrux-ml-kem/cg/libcrux_sha3_portable.h */
+/*
+ * SPDX-FileCopyrightText: 2024 Cryspen Sarl <info@cryspen.com>
+ *
+ * SPDX-License-Identifier: MIT or Apache-2.0
+ *
+ * This code was generated with the following revisions:
+ * Charon: 6b5e110342a771a3e1c739b10294b1778e4be8b4
+ * Eurydice: 31be7d65ca5d6acdacfb33652e478d24dd85c1cb
+ * Karamel: 3205d3365ea2790b02368f79fcee38e38d0b5908
+ * F*: a32b316e521fa4f239b610ec8f1d15e78d62cbe8-dirty
+ * Libcrux: 4ad532b206174114dd4140b718e7794a28fc59ee
+ */
+
+#ifndef __libcrux_sha3_portable_H
+#define __libcrux_sha3_portable_H
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+
+static const uint64_t libcrux_sha3_generic_keccak_ROUNDCONSTANTS[24U] = {
+ 1ULL,
+ 32898ULL,
+ 9223372036854808714ULL,
+ 9223372039002292224ULL,
+ 32907ULL,
+ 2147483649ULL,
+ 9223372039002292353ULL,
+ 9223372036854808585ULL,
+ 138ULL,
+ 136ULL,
+ 2147516425ULL,
+ 2147483658ULL,
+ 2147516555ULL,
+ 9223372036854775947ULL,
+ 9223372036854808713ULL,
+ 9223372036854808579ULL,
+ 9223372036854808578ULL,
+ 9223372036854775936ULL,
+ 32778ULL,
+ 9223372039002259466ULL,
+ 9223372039002292353ULL,
+ 9223372036854808704ULL,
+ 2147483649ULL,
+ 9223372039002292232ULL};
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+static KRML_MUSTINLINE uint64_t libcrux_sha3_portable_keccak_zero_5a(void) {
+ return 0ULL;
+}
+
+static KRML_MUSTINLINE uint64_t libcrux_sha3_portable_keccak__veor5q_u64(
+ uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e) {
+ uint64_t ab = a ^ b;
+ uint64_t cd = c ^ d;
+ uint64_t abcd = ab ^ cd;
+ return abcd ^ e;
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+static KRML_MUSTINLINE uint64_t libcrux_sha3_portable_keccak_xor5_5a(
+ uint64_t a, uint64_t b, uint64_t c, uint64_t d, uint64_t e) {
+ return libcrux_sha3_portable_keccak__veor5q_u64(a, b, c, d, e);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 1
+- RIGHT= 63
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb(uint64_t x) {
+ return x << (uint32_t)(int32_t)1 | x >> (uint32_t)(int32_t)63;
+}
+
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vrax1q_u64(uint64_t a, uint64_t b) {
+ uint64_t uu____0 = a;
+ return uu____0 ^ libcrux_sha3_portable_keccak_rotate_left_cb(b);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left1_and_xor_5a(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vrax1q_u64(a, b);
+}
+
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vbcaxq_u64(uint64_t a, uint64_t b, uint64_t c) {
+ return a ^ (b & ~c);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+static KRML_MUSTINLINE uint64_t libcrux_sha3_portable_keccak_and_not_xor_5a(
+ uint64_t a, uint64_t b, uint64_t c) {
+ return libcrux_sha3_portable_keccak__vbcaxq_u64(a, b, c);
+}
+
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__veorq_n_u64(uint64_t a, uint64_t c) {
+ return a ^ c;
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_constant_5a(uint64_t a, uint64_t c) {
+ return libcrux_sha3_portable_keccak__veorq_n_u64(a, c);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_5a(uint64_t a, uint64_t b) {
+ return a ^ b;
+}
+
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_slice_1(
+ Eurydice_slice a[1U], size_t start, size_t len, Eurydice_slice ret[1U]) {
+ ret[0U] = Eurydice_slice_subslice2(a[0U], start, start + len, uint8_t);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_slice_n_5a(
+ Eurydice_slice a[1U], size_t start, size_t len, Eurydice_slice ret[1U]) {
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_a[1U];
+ memcpy(copy_of_a, a, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice ret0[1U];
+ libcrux_sha3_portable_keccak_slice_1(copy_of_a, start, len, ret0);
+ memcpy(ret, ret0, (size_t)1U * sizeof(Eurydice_slice));
+}
+
+static KRML_MUSTINLINE Eurydice_slice_uint8_t_1size_t__x2
+libcrux_sha3_portable_keccak_split_at_mut_1(Eurydice_slice out[1U],
+ size_t mid) {
+ Eurydice_slice_uint8_t_x2 uu____0 = Eurydice_slice_split_at_mut(
+ out[0U], mid, uint8_t, Eurydice_slice_uint8_t_x2);
+ Eurydice_slice out00 = uu____0.fst;
+ Eurydice_slice out01 = uu____0.snd;
+ Eurydice_slice_uint8_t_1size_t__x2 lit;
+ lit.fst[0U] = out00;
+ lit.snd[0U] = out01;
+ return lit;
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+static KRML_MUSTINLINE Eurydice_slice_uint8_t_1size_t__x2
+libcrux_sha3_portable_keccak_split_at_mut_n_5a(Eurydice_slice a[1U],
+ size_t mid) {
+ return libcrux_sha3_portable_keccak_split_at_mut_1(a, mid);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.KeccakState
+with types uint64_t
+with const generics
+- $1size_t
+*/
+typedef struct libcrux_sha3_generic_keccak_KeccakState_48_s {
+ uint64_t st[5U][5U];
+} libcrux_sha3_generic_keccak_KeccakState_48;
+
+/**
+ Create a new Shake128 x4 state.
+*/
+/**
+This function found in impl {libcrux_sha3::generic_keccak::KeccakState<T,
+N>[TraitClause@0]#1}
+*/
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.new_1e
+with types uint64_t
+with const generics
+- N= 1
+*/
+static KRML_MUSTINLINE libcrux_sha3_generic_keccak_KeccakState_48
+libcrux_sha3_generic_keccak_new_1e_f4(void) {
+ libcrux_sha3_generic_keccak_KeccakState_48 lit;
+ lit.st[0U][0U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[0U][1U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[0U][2U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[0U][3U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[0U][4U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[1U][0U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[1U][1U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[1U][2U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[1U][3U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[1U][4U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[2U][0U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[2U][1U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[2U][2U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[2U][3U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[2U][4U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[3U][0U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[3U][1U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[3U][2U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[3U][3U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[3U][4U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[4U][0U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[4U][1U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[4U][2U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[4U][3U] = libcrux_sha3_portable_keccak_zero_5a();
+ lit.st[4U][4U] = libcrux_sha3_portable_keccak_zero_5a();
+ return lit;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.load_block
+with const generics
+- RATE= 72
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_load_block_2c(
+ uint64_t (*s)[5U], Eurydice_slice blocks[1U]) {
+ for (size_t i = (size_t)0U; i < (size_t)72U / (size_t)8U; i++) {
+ size_t i0 = i;
+ uint8_t uu____0[8U];
+ Result_56 dst;
+ Eurydice_slice_to_array2(
+ &dst,
+ Eurydice_slice_subslice2(blocks[0U], (size_t)8U * i0,
+ (size_t)8U * i0 + (size_t)8U, uint8_t),
+ Eurydice_slice, uint8_t[8U]);
+ unwrap_41_ac(dst, uu____0);
+ size_t uu____1 = i0 / (size_t)5U;
+ size_t uu____2 = i0 % (size_t)5U;
+ s[uu____1][uu____2] =
+ s[uu____1][uu____2] ^ core_num__u64_9__from_le_bytes(uu____0);
+ }
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.load_block_5a
+with const generics
+- RATE= 72
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_load_block_5a_b8(
+ uint64_t (*a)[5U], Eurydice_slice b[1U]) {
+ uint64_t(*uu____0)[5U] = a;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_b[1U];
+ memcpy(copy_of_b, b, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_portable_keccak_load_block_2c(uu____0, copy_of_b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 36
+- RIGHT= 28
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb0(uint64_t x) {
+ return x << (uint32_t)(int32_t)36 | x >> (uint32_t)(int32_t)28;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 36
+- RIGHT= 28
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_42(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb0(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 36
+- RIGHT= 28
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_42(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 3
+- RIGHT= 61
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb1(uint64_t x) {
+ return x << (uint32_t)(int32_t)3 | x >> (uint32_t)(int32_t)61;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 3
+- RIGHT= 61
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_420(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb1(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 3
+- RIGHT= 61
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb0(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_420(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 41
+- RIGHT= 23
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb2(uint64_t x) {
+ return x << (uint32_t)(int32_t)41 | x >> (uint32_t)(int32_t)23;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 41
+- RIGHT= 23
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_421(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb2(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 41
+- RIGHT= 23
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb1(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_421(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 18
+- RIGHT= 46
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb3(uint64_t x) {
+ return x << (uint32_t)(int32_t)18 | x >> (uint32_t)(int32_t)46;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 18
+- RIGHT= 46
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_422(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb3(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 18
+- RIGHT= 46
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb2(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_422(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 1
+- RIGHT= 63
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_423(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 1
+- RIGHT= 63
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb3(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_423(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 44
+- RIGHT= 20
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb4(uint64_t x) {
+ return x << (uint32_t)(int32_t)44 | x >> (uint32_t)(int32_t)20;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 44
+- RIGHT= 20
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_424(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb4(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 44
+- RIGHT= 20
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb4(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_424(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 10
+- RIGHT= 54
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb5(uint64_t x) {
+ return x << (uint32_t)(int32_t)10 | x >> (uint32_t)(int32_t)54;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 10
+- RIGHT= 54
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_425(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb5(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 10
+- RIGHT= 54
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb5(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_425(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 45
+- RIGHT= 19
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb6(uint64_t x) {
+ return x << (uint32_t)(int32_t)45 | x >> (uint32_t)(int32_t)19;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 45
+- RIGHT= 19
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_426(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb6(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 45
+- RIGHT= 19
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb6(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_426(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 2
+- RIGHT= 62
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb7(uint64_t x) {
+ return x << (uint32_t)(int32_t)2 | x >> (uint32_t)(int32_t)62;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 2
+- RIGHT= 62
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_427(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb7(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 2
+- RIGHT= 62
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb7(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_427(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 62
+- RIGHT= 2
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb8(uint64_t x) {
+ return x << (uint32_t)(int32_t)62 | x >> (uint32_t)(int32_t)2;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 62
+- RIGHT= 2
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_428(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb8(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 62
+- RIGHT= 2
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb8(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_428(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 6
+- RIGHT= 58
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb9(uint64_t x) {
+ return x << (uint32_t)(int32_t)6 | x >> (uint32_t)(int32_t)58;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 6
+- RIGHT= 58
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_429(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb9(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 6
+- RIGHT= 58
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb9(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_429(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 43
+- RIGHT= 21
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb10(uint64_t x) {
+ return x << (uint32_t)(int32_t)43 | x >> (uint32_t)(int32_t)21;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 43
+- RIGHT= 21
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_4210(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb10(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 43
+- RIGHT= 21
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb10(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_4210(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 15
+- RIGHT= 49
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb11(uint64_t x) {
+ return x << (uint32_t)(int32_t)15 | x >> (uint32_t)(int32_t)49;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 15
+- RIGHT= 49
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_4211(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb11(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 15
+- RIGHT= 49
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb11(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_4211(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 61
+- RIGHT= 3
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb12(uint64_t x) {
+ return x << (uint32_t)(int32_t)61 | x >> (uint32_t)(int32_t)3;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 61
+- RIGHT= 3
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_4212(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb12(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 61
+- RIGHT= 3
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb12(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_4212(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 28
+- RIGHT= 36
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb13(uint64_t x) {
+ return x << (uint32_t)(int32_t)28 | x >> (uint32_t)(int32_t)36;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 28
+- RIGHT= 36
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_4213(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb13(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 28
+- RIGHT= 36
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb13(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_4213(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 55
+- RIGHT= 9
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb14(uint64_t x) {
+ return x << (uint32_t)(int32_t)55 | x >> (uint32_t)(int32_t)9;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 55
+- RIGHT= 9
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_4214(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb14(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 55
+- RIGHT= 9
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb14(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_4214(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 25
+- RIGHT= 39
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb15(uint64_t x) {
+ return x << (uint32_t)(int32_t)25 | x >> (uint32_t)(int32_t)39;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 25
+- RIGHT= 39
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_4215(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb15(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 25
+- RIGHT= 39
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb15(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_4215(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 21
+- RIGHT= 43
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb16(uint64_t x) {
+ return x << (uint32_t)(int32_t)21 | x >> (uint32_t)(int32_t)43;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 21
+- RIGHT= 43
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_4216(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb16(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 21
+- RIGHT= 43
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb16(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_4216(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 56
+- RIGHT= 8
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb17(uint64_t x) {
+ return x << (uint32_t)(int32_t)56 | x >> (uint32_t)(int32_t)8;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 56
+- RIGHT= 8
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_4217(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb17(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 56
+- RIGHT= 8
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb17(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_4217(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 27
+- RIGHT= 37
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb18(uint64_t x) {
+ return x << (uint32_t)(int32_t)27 | x >> (uint32_t)(int32_t)37;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 27
+- RIGHT= 37
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_4218(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb18(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 27
+- RIGHT= 37
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb18(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_4218(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 20
+- RIGHT= 44
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb19(uint64_t x) {
+ return x << (uint32_t)(int32_t)20 | x >> (uint32_t)(int32_t)44;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 20
+- RIGHT= 44
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_4219(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb19(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 20
+- RIGHT= 44
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb19(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_4219(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 39
+- RIGHT= 25
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb20(uint64_t x) {
+ return x << (uint32_t)(int32_t)39 | x >> (uint32_t)(int32_t)25;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 39
+- RIGHT= 25
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_4220(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb20(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 39
+- RIGHT= 25
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb20(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_4220(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 8
+- RIGHT= 56
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb21(uint64_t x) {
+ return x << (uint32_t)(int32_t)8 | x >> (uint32_t)(int32_t)56;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 8
+- RIGHT= 56
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_4221(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb21(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 8
+- RIGHT= 56
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb21(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_4221(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.rotate_left
+with const generics
+- LEFT= 14
+- RIGHT= 50
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_rotate_left_cb22(uint64_t x) {
+ return x << (uint32_t)(int32_t)14 | x >> (uint32_t)(int32_t)50;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak._vxarq_u64
+with const generics
+- LEFT= 14
+- RIGHT= 50
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak__vxarq_u64_4222(uint64_t a, uint64_t b) {
+ uint64_t ab = a ^ b;
+ return libcrux_sha3_portable_keccak_rotate_left_cb22(ab);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.xor_and_rotate_5a
+with const generics
+- LEFT= 14
+- RIGHT= 50
+*/
+static KRML_MUSTINLINE uint64_t
+libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb22(uint64_t a, uint64_t b) {
+ return libcrux_sha3_portable_keccak__vxarq_u64_4222(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.theta_rho
+with types uint64_t
+with const generics
+- N= 1
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_theta_rho_16(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s) {
+ uint64_t c[5U] = {
+ libcrux_sha3_portable_keccak_xor5_5a(s->st[0U][0U], s->st[1U][0U],
+ s->st[2U][0U], s->st[3U][0U],
+ s->st[4U][0U]),
+ libcrux_sha3_portable_keccak_xor5_5a(s->st[0U][1U], s->st[1U][1U],
+ s->st[2U][1U], s->st[3U][1U],
+ s->st[4U][1U]),
+ libcrux_sha3_portable_keccak_xor5_5a(s->st[0U][2U], s->st[1U][2U],
+ s->st[2U][2U], s->st[3U][2U],
+ s->st[4U][2U]),
+ libcrux_sha3_portable_keccak_xor5_5a(s->st[0U][3U], s->st[1U][3U],
+ s->st[2U][3U], s->st[3U][3U],
+ s->st[4U][3U]),
+ libcrux_sha3_portable_keccak_xor5_5a(s->st[0U][4U], s->st[1U][4U],
+ s->st[2U][4U], s->st[3U][4U],
+ s->st[4U][4U])};
+ uint64_t uu____0 = libcrux_sha3_portable_keccak_rotate_left1_and_xor_5a(
+ c[((size_t)0U + (size_t)4U) % (size_t)5U],
+ c[((size_t)0U + (size_t)1U) % (size_t)5U]);
+ uint64_t uu____1 = libcrux_sha3_portable_keccak_rotate_left1_and_xor_5a(
+ c[((size_t)1U + (size_t)4U) % (size_t)5U],
+ c[((size_t)1U + (size_t)1U) % (size_t)5U]);
+ uint64_t uu____2 = libcrux_sha3_portable_keccak_rotate_left1_and_xor_5a(
+ c[((size_t)2U + (size_t)4U) % (size_t)5U],
+ c[((size_t)2U + (size_t)1U) % (size_t)5U]);
+ uint64_t uu____3 = libcrux_sha3_portable_keccak_rotate_left1_and_xor_5a(
+ c[((size_t)3U + (size_t)4U) % (size_t)5U],
+ c[((size_t)3U + (size_t)1U) % (size_t)5U]);
+ uint64_t t[5U] = {uu____0, uu____1, uu____2, uu____3,
+ libcrux_sha3_portable_keccak_rotate_left1_and_xor_5a(
+ c[((size_t)4U + (size_t)4U) % (size_t)5U],
+ c[((size_t)4U + (size_t)1U) % (size_t)5U])};
+ s->st[0U][0U] = libcrux_sha3_portable_keccak_xor_5a(s->st[0U][0U], t[0U]);
+ s->st[1U][0U] =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb(s->st[1U][0U], t[0U]);
+ s->st[2U][0U] =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb0(s->st[2U][0U], t[0U]);
+ s->st[3U][0U] =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb1(s->st[3U][0U], t[0U]);
+ s->st[4U][0U] =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb2(s->st[4U][0U], t[0U]);
+ s->st[0U][1U] =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb3(s->st[0U][1U], t[1U]);
+ s->st[1U][1U] =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb4(s->st[1U][1U], t[1U]);
+ s->st[2U][1U] =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb5(s->st[2U][1U], t[1U]);
+ s->st[3U][1U] =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb6(s->st[3U][1U], t[1U]);
+ s->st[4U][1U] =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb7(s->st[4U][1U], t[1U]);
+ s->st[0U][2U] =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb8(s->st[0U][2U], t[2U]);
+ s->st[1U][2U] =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb9(s->st[1U][2U], t[2U]);
+ s->st[2U][2U] =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb10(s->st[2U][2U], t[2U]);
+ s->st[3U][2U] =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb11(s->st[3U][2U], t[2U]);
+ s->st[4U][2U] =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb12(s->st[4U][2U], t[2U]);
+ s->st[0U][3U] =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb13(s->st[0U][3U], t[3U]);
+ s->st[1U][3U] =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb14(s->st[1U][3U], t[3U]);
+ s->st[2U][3U] =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb15(s->st[2U][3U], t[3U]);
+ s->st[3U][3U] =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb16(s->st[3U][3U], t[3U]);
+ s->st[4U][3U] =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb17(s->st[4U][3U], t[3U]);
+ s->st[0U][4U] =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb18(s->st[0U][4U], t[4U]);
+ s->st[1U][4U] =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb19(s->st[1U][4U], t[4U]);
+ s->st[2U][4U] =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb20(s->st[2U][4U], t[4U]);
+ s->st[3U][4U] =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb21(s->st[3U][4U], t[4U]);
+ uint64_t uu____27 =
+ libcrux_sha3_portable_keccak_xor_and_rotate_5a_bb22(s->st[4U][4U], t[4U]);
+ s->st[4U][4U] = uu____27;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.pi
+with types uint64_t
+with const generics
+- N= 1
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_pi_1d(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s) {
+ uint64_t old[5U][5U];
+ memcpy(old, s->st, (size_t)5U * sizeof(uint64_t[5U]));
+ s->st[0U][1U] = old[1U][1U];
+ s->st[0U][2U] = old[2U][2U];
+ s->st[0U][3U] = old[3U][3U];
+ s->st[0U][4U] = old[4U][4U];
+ s->st[1U][0U] = old[0U][3U];
+ s->st[1U][1U] = old[1U][4U];
+ s->st[1U][2U] = old[2U][0U];
+ s->st[1U][3U] = old[3U][1U];
+ s->st[1U][4U] = old[4U][2U];
+ s->st[2U][0U] = old[0U][1U];
+ s->st[2U][1U] = old[1U][2U];
+ s->st[2U][2U] = old[2U][3U];
+ s->st[2U][3U] = old[3U][4U];
+ s->st[2U][4U] = old[4U][0U];
+ s->st[3U][0U] = old[0U][4U];
+ s->st[3U][1U] = old[1U][0U];
+ s->st[3U][2U] = old[2U][1U];
+ s->st[3U][3U] = old[3U][2U];
+ s->st[3U][4U] = old[4U][3U];
+ s->st[4U][0U] = old[0U][2U];
+ s->st[4U][1U] = old[1U][3U];
+ s->st[4U][2U] = old[2U][4U];
+ s->st[4U][3U] = old[3U][0U];
+ s->st[4U][4U] = old[4U][1U];
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.chi
+with types uint64_t
+with const generics
+- N= 1
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_chi_12(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s) {
+ uint64_t old[5U][5U];
+ memcpy(old, s->st, (size_t)5U * sizeof(uint64_t[5U]));
+ for (size_t i0 = (size_t)0U; i0 < (size_t)5U; i0++) {
+ size_t i1 = i0;
+ for (size_t i = (size_t)0U; i < (size_t)5U; i++) {
+ size_t j = i;
+ s->st[i1][j] = libcrux_sha3_portable_keccak_and_not_xor_5a(
+ s->st[i1][j], old[i1][(j + (size_t)2U) % (size_t)5U],
+ old[i1][(j + (size_t)1U) % (size_t)5U]);
+ }
+ }
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.iota
+with types uint64_t
+with const generics
+- N= 1
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_iota_62(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, size_t i) {
+ s->st[0U][0U] = libcrux_sha3_portable_keccak_xor_constant_5a(
+ s->st[0U][0U], libcrux_sha3_generic_keccak_ROUNDCONSTANTS[i]);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.keccakf1600
+with types uint64_t
+with const generics
+- N= 1
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_keccakf1600_21(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s) {
+ for (size_t i = (size_t)0U; i < (size_t)24U; i++) {
+ size_t i0 = i;
+ libcrux_sha3_generic_keccak_theta_rho_16(s);
+ libcrux_sha3_generic_keccak_pi_1d(s);
+ libcrux_sha3_generic_keccak_chi_12(s);
+ libcrux_sha3_generic_keccak_iota_62(s, i0);
+ }
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 72
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_absorb_block_df(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice blocks[1U]) {
+ uint64_t(*uu____0)[5U] = s->st;
+ Eurydice_slice uu____1[1U];
+ memcpy(uu____1, blocks, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_portable_keccak_load_block_5a_b8(uu____0, uu____1);
+ libcrux_sha3_generic_keccak_keccakf1600_21(s);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.load_block_full
+with const generics
+- RATE= 72
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_load_block_full_df(
+ uint64_t (*s)[5U], uint8_t blocks[1U][200U]) {
+ Eurydice_slice buf[1U] = {
+ Eurydice_array_to_slice((size_t)200U, blocks[0U], uint8_t)};
+ libcrux_sha3_portable_keccak_load_block_2c(s, buf);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.load_block_full_5a
+with const generics
+- RATE= 72
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_load_block_full_5a_d2(
+ uint64_t (*a)[5U], uint8_t b[1U][200U]) {
+ uint64_t(*uu____0)[5U] = a;
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_b[1U][200U];
+ memcpy(copy_of_b, b, (size_t)1U * sizeof(uint8_t[200U]));
+ libcrux_sha3_portable_keccak_load_block_full_df(uu____0, copy_of_b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 72
+- DELIM= 6
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_absorb_final_c7(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice last[1U]) {
+ size_t last_len = Eurydice_slice_len(last[0U], uint8_t);
+ uint8_t blocks[1U][200U] = {{0U}};
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ if (last_len > (size_t)0U) {
+ Eurydice_slice uu____0 = Eurydice_array_to_subslice2(
+ blocks[i0], (size_t)0U, last_len, uint8_t);
+ Eurydice_slice_copy(uu____0, last[i0], uint8_t);
+ }
+ blocks[i0][last_len] = 6U;
+ size_t uu____1 = i0;
+ size_t uu____2 = (size_t)72U - (size_t)1U;
+ blocks[uu____1][uu____2] = (uint32_t)blocks[uu____1][uu____2] | 128U;
+ }
+ uint64_t(*uu____3)[5U] = s->st;
+ uint8_t uu____4[1U][200U];
+ memcpy(uu____4, blocks, (size_t)1U * sizeof(uint8_t[200U]));
+ libcrux_sha3_portable_keccak_load_block_full_5a_d2(uu____3, uu____4);
+ libcrux_sha3_generic_keccak_keccakf1600_21(s);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.store_block
+with const generics
+- RATE= 72
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_store_block_58(
+ uint64_t (*s)[5U], Eurydice_slice out[1U]) {
+ for (size_t i = (size_t)0U; i < (size_t)72U / (size_t)8U; i++) {
+ size_t i0 = i;
+ Eurydice_slice uu____0 = Eurydice_slice_subslice2(
+ out[0U], (size_t)8U * i0, (size_t)8U * i0 + (size_t)8U, uint8_t);
+ uint8_t ret[8U];
+ core_num__u64_9__to_le_bytes(s[i0 / (size_t)5U][i0 % (size_t)5U], ret);
+ Eurydice_slice_copy(
+ uu____0, Eurydice_array_to_slice((size_t)8U, ret, uint8_t), uint8_t);
+ }
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.store_block_full
+with const generics
+- RATE= 72
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_store_block_full_2d(
+ uint64_t (*s)[5U], uint8_t ret[1U][200U]) {
+ uint8_t out[200U] = {0U};
+ Eurydice_slice buf[1U] = {
+ Eurydice_array_to_slice((size_t)200U, out, uint8_t)};
+ libcrux_sha3_portable_keccak_store_block_58(s, buf);
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_out[200U];
+ memcpy(copy_of_out, out, (size_t)200U * sizeof(uint8_t));
+ memcpy(ret[0U], copy_of_out, (size_t)200U * sizeof(uint8_t));
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.store_block_full_5a
+with const generics
+- RATE= 72
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_store_block_full_5a_29(
+ uint64_t (*a)[5U], uint8_t ret[1U][200U]) {
+ libcrux_sha3_portable_keccak_store_block_full_2d(a, ret);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_and_last
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 72
+*/
+static KRML_MUSTINLINE void
+libcrux_sha3_generic_keccak_squeeze_first_and_last_c5(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) {
+ uint8_t b[1U][200U];
+ libcrux_sha3_portable_keccak_store_block_full_5a_29(s->st, b);
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ Eurydice_slice uu____0 = out[i0];
+ uint8_t *uu____1 = b[i0];
+ core_ops_range_Range_b3 lit;
+ lit.start = (size_t)0U;
+ lit.end = Eurydice_slice_len(out[i0], uint8_t);
+ Eurydice_slice_copy(
+ uu____0,
+ Eurydice_array_to_subslice((size_t)200U, uu____1, lit, uint8_t,
+ core_ops_range_Range_b3),
+ uint8_t);
+ }
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.store_block_5a
+with const generics
+- RATE= 72
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_store_block_5a_59(
+ uint64_t (*a)[5U], Eurydice_slice b[1U]) {
+ libcrux_sha3_portable_keccak_store_block_58(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_block
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 72
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_squeeze_first_block_84(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) {
+ libcrux_sha3_portable_keccak_store_block_5a_59(s->st, out);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_next_block
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 72
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_squeeze_next_block_fc(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) {
+ libcrux_sha3_generic_keccak_keccakf1600_21(s);
+ libcrux_sha3_portable_keccak_store_block_5a_59(s->st, out);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_last
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 72
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_squeeze_last_cf(
+ libcrux_sha3_generic_keccak_KeccakState_48 s, Eurydice_slice out[1U]) {
+ libcrux_sha3_generic_keccak_keccakf1600_21(&s);
+ uint8_t b[1U][200U];
+ libcrux_sha3_portable_keccak_store_block_full_5a_29(s.st, b);
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ Eurydice_slice uu____0 = out[i0];
+ uint8_t *uu____1 = b[i0];
+ core_ops_range_Range_b3 lit;
+ lit.start = (size_t)0U;
+ lit.end = Eurydice_slice_len(out[i0], uint8_t);
+ Eurydice_slice_copy(
+ uu____0,
+ Eurydice_array_to_subslice((size_t)200U, uu____1, lit, uint8_t,
+ core_ops_range_Range_b3),
+ uint8_t);
+ }
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.keccak
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 72
+- DELIM= 6
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_keccak_e9(
+ Eurydice_slice data[1U], Eurydice_slice out[1U]) {
+ libcrux_sha3_generic_keccak_KeccakState_48 s =
+ libcrux_sha3_generic_keccak_new_1e_f4();
+ for (size_t i = (size_t)0U;
+ i < Eurydice_slice_len(data[0U], uint8_t) / (size_t)72U; i++) {
+ size_t i0 = i;
+ libcrux_sha3_generic_keccak_KeccakState_48 *uu____0 = &s;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_data[1U];
+ memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice ret[1U];
+ libcrux_sha3_portable_keccak_slice_n_5a(copy_of_data, i0 * (size_t)72U,
+ (size_t)72U, ret);
+ libcrux_sha3_generic_keccak_absorb_block_df(uu____0, ret);
+ }
+ size_t rem = Eurydice_slice_len(data[0U], uint8_t) % (size_t)72U;
+ libcrux_sha3_generic_keccak_KeccakState_48 *uu____2 = &s;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_data[1U];
+ memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice ret[1U];
+ libcrux_sha3_portable_keccak_slice_n_5a(
+ copy_of_data, Eurydice_slice_len(data[0U], uint8_t) - rem, rem, ret);
+ libcrux_sha3_generic_keccak_absorb_final_c7(uu____2, ret);
+ size_t outlen = Eurydice_slice_len(out[0U], uint8_t);
+ size_t blocks = outlen / (size_t)72U;
+ size_t last = outlen - outlen % (size_t)72U;
+ if (blocks == (size_t)0U) {
+ libcrux_sha3_generic_keccak_squeeze_first_and_last_c5(&s, out);
+ } else {
+ Eurydice_slice_uint8_t_1size_t__x2 uu____4 =
+ libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, (size_t)72U);
+ Eurydice_slice o0[1U];
+ memcpy(o0, uu____4.fst, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice o1[1U];
+ memcpy(o1, uu____4.snd, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_squeeze_first_block_84(&s, o0);
+ core_ops_range_Range_b3 iter =
+ core_iter_traits_collect___core__iter__traits__collect__IntoIterator_for_I__1__into_iter(
+ (CLITERAL(core_ops_range_Range_b3){.start = (size_t)1U,
+ .end = blocks}),
+ core_ops_range_Range_b3, core_ops_range_Range_b3);
+ while (true) {
+ if (core_iter_range___core__iter__traits__iterator__Iterator_for_core__ops__range__Range_A___6__next(
+ &iter, size_t, Option_b3)
+ .tag == None) {
+ break;
+ } else {
+ Eurydice_slice_uint8_t_1size_t__x2 uu____5 =
+ libcrux_sha3_portable_keccak_split_at_mut_n_5a(o1, (size_t)72U);
+ Eurydice_slice o[1U];
+ memcpy(o, uu____5.fst, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice orest[1U];
+ memcpy(orest, uu____5.snd, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_squeeze_next_block_fc(&s, o);
+ memcpy(o1, orest, (size_t)1U * sizeof(Eurydice_slice));
+ }
+ }
+ if (last < outlen) {
+ libcrux_sha3_generic_keccak_squeeze_last_cf(s, o1);
+ }
+ }
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable.keccakx1
+with const generics
+- RATE= 72
+- DELIM= 6
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccakx1_ce(
+ Eurydice_slice data[1U], Eurydice_slice out[1U]) {
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_data[1U];
+ memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_keccak_e9(copy_of_data, out);
+}
+
+/**
+ A portable SHA3 512 implementation.
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_sha512(Eurydice_slice digest,
+ Eurydice_slice data) {
+ Eurydice_slice buf0[1U] = {data};
+ Eurydice_slice buf[1U] = {digest};
+ libcrux_sha3_portable_keccakx1_ce(buf0, buf);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.load_block
+with const generics
+- RATE= 136
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_load_block_2c0(
+ uint64_t (*s)[5U], Eurydice_slice blocks[1U]) {
+ for (size_t i = (size_t)0U; i < (size_t)136U / (size_t)8U; i++) {
+ size_t i0 = i;
+ uint8_t uu____0[8U];
+ Result_56 dst;
+ Eurydice_slice_to_array2(
+ &dst,
+ Eurydice_slice_subslice2(blocks[0U], (size_t)8U * i0,
+ (size_t)8U * i0 + (size_t)8U, uint8_t),
+ Eurydice_slice, uint8_t[8U]);
+ unwrap_41_ac(dst, uu____0);
+ size_t uu____1 = i0 / (size_t)5U;
+ size_t uu____2 = i0 % (size_t)5U;
+ s[uu____1][uu____2] =
+ s[uu____1][uu____2] ^ core_num__u64_9__from_le_bytes(uu____0);
+ }
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.load_block_5a
+with const generics
+- RATE= 136
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_load_block_5a_b80(
+ uint64_t (*a)[5U], Eurydice_slice b[1U]) {
+ uint64_t(*uu____0)[5U] = a;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_b[1U];
+ memcpy(copy_of_b, b, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_portable_keccak_load_block_2c0(uu____0, copy_of_b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 136
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_absorb_block_df0(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice blocks[1U]) {
+ uint64_t(*uu____0)[5U] = s->st;
+ Eurydice_slice uu____1[1U];
+ memcpy(uu____1, blocks, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_portable_keccak_load_block_5a_b80(uu____0, uu____1);
+ libcrux_sha3_generic_keccak_keccakf1600_21(s);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.load_block_full
+with const generics
+- RATE= 136
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_load_block_full_df0(
+ uint64_t (*s)[5U], uint8_t blocks[1U][200U]) {
+ Eurydice_slice buf[1U] = {
+ Eurydice_array_to_slice((size_t)200U, blocks[0U], uint8_t)};
+ libcrux_sha3_portable_keccak_load_block_2c0(s, buf);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.load_block_full_5a
+with const generics
+- RATE= 136
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_load_block_full_5a_d20(
+ uint64_t (*a)[5U], uint8_t b[1U][200U]) {
+ uint64_t(*uu____0)[5U] = a;
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_b[1U][200U];
+ memcpy(copy_of_b, b, (size_t)1U * sizeof(uint8_t[200U]));
+ libcrux_sha3_portable_keccak_load_block_full_df0(uu____0, copy_of_b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 136
+- DELIM= 6
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_absorb_final_c70(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice last[1U]) {
+ size_t last_len = Eurydice_slice_len(last[0U], uint8_t);
+ uint8_t blocks[1U][200U] = {{0U}};
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ if (last_len > (size_t)0U) {
+ Eurydice_slice uu____0 = Eurydice_array_to_subslice2(
+ blocks[i0], (size_t)0U, last_len, uint8_t);
+ Eurydice_slice_copy(uu____0, last[i0], uint8_t);
+ }
+ blocks[i0][last_len] = 6U;
+ size_t uu____1 = i0;
+ size_t uu____2 = (size_t)136U - (size_t)1U;
+ blocks[uu____1][uu____2] = (uint32_t)blocks[uu____1][uu____2] | 128U;
+ }
+ uint64_t(*uu____3)[5U] = s->st;
+ uint8_t uu____4[1U][200U];
+ memcpy(uu____4, blocks, (size_t)1U * sizeof(uint8_t[200U]));
+ libcrux_sha3_portable_keccak_load_block_full_5a_d20(uu____3, uu____4);
+ libcrux_sha3_generic_keccak_keccakf1600_21(s);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.store_block
+with const generics
+- RATE= 136
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_store_block_580(
+ uint64_t (*s)[5U], Eurydice_slice out[1U]) {
+ for (size_t i = (size_t)0U; i < (size_t)136U / (size_t)8U; i++) {
+ size_t i0 = i;
+ Eurydice_slice uu____0 = Eurydice_slice_subslice2(
+ out[0U], (size_t)8U * i0, (size_t)8U * i0 + (size_t)8U, uint8_t);
+ uint8_t ret[8U];
+ core_num__u64_9__to_le_bytes(s[i0 / (size_t)5U][i0 % (size_t)5U], ret);
+ Eurydice_slice_copy(
+ uu____0, Eurydice_array_to_slice((size_t)8U, ret, uint8_t), uint8_t);
+ }
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.store_block_full
+with const generics
+- RATE= 136
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_store_block_full_2d0(
+ uint64_t (*s)[5U], uint8_t ret[1U][200U]) {
+ uint8_t out[200U] = {0U};
+ Eurydice_slice buf[1U] = {
+ Eurydice_array_to_slice((size_t)200U, out, uint8_t)};
+ libcrux_sha3_portable_keccak_store_block_580(s, buf);
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_out[200U];
+ memcpy(copy_of_out, out, (size_t)200U * sizeof(uint8_t));
+ memcpy(ret[0U], copy_of_out, (size_t)200U * sizeof(uint8_t));
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.store_block_full_5a
+with const generics
+- RATE= 136
+*/
+static KRML_MUSTINLINE void
+libcrux_sha3_portable_keccak_store_block_full_5a_290(uint64_t (*a)[5U],
+ uint8_t ret[1U][200U]) {
+ libcrux_sha3_portable_keccak_store_block_full_2d0(a, ret);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_and_last
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 136
+*/
+static KRML_MUSTINLINE void
+libcrux_sha3_generic_keccak_squeeze_first_and_last_c50(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) {
+ uint8_t b[1U][200U];
+ libcrux_sha3_portable_keccak_store_block_full_5a_290(s->st, b);
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ Eurydice_slice uu____0 = out[i0];
+ uint8_t *uu____1 = b[i0];
+ core_ops_range_Range_b3 lit;
+ lit.start = (size_t)0U;
+ lit.end = Eurydice_slice_len(out[i0], uint8_t);
+ Eurydice_slice_copy(
+ uu____0,
+ Eurydice_array_to_subslice((size_t)200U, uu____1, lit, uint8_t,
+ core_ops_range_Range_b3),
+ uint8_t);
+ }
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.store_block_5a
+with const generics
+- RATE= 136
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_store_block_5a_590(
+ uint64_t (*a)[5U], Eurydice_slice b[1U]) {
+ libcrux_sha3_portable_keccak_store_block_580(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_block
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 136
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_squeeze_first_block_840(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) {
+ libcrux_sha3_portable_keccak_store_block_5a_590(s->st, out);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_next_block
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 136
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_squeeze_next_block_fc0(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) {
+ libcrux_sha3_generic_keccak_keccakf1600_21(s);
+ libcrux_sha3_portable_keccak_store_block_5a_590(s->st, out);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_last
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 136
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_squeeze_last_cf0(
+ libcrux_sha3_generic_keccak_KeccakState_48 s, Eurydice_slice out[1U]) {
+ libcrux_sha3_generic_keccak_keccakf1600_21(&s);
+ uint8_t b[1U][200U];
+ libcrux_sha3_portable_keccak_store_block_full_5a_290(s.st, b);
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ Eurydice_slice uu____0 = out[i0];
+ uint8_t *uu____1 = b[i0];
+ core_ops_range_Range_b3 lit;
+ lit.start = (size_t)0U;
+ lit.end = Eurydice_slice_len(out[i0], uint8_t);
+ Eurydice_slice_copy(
+ uu____0,
+ Eurydice_array_to_subslice((size_t)200U, uu____1, lit, uint8_t,
+ core_ops_range_Range_b3),
+ uint8_t);
+ }
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.keccak
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 136
+- DELIM= 6
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_keccak_e90(
+ Eurydice_slice data[1U], Eurydice_slice out[1U]) {
+ libcrux_sha3_generic_keccak_KeccakState_48 s =
+ libcrux_sha3_generic_keccak_new_1e_f4();
+ for (size_t i = (size_t)0U;
+ i < Eurydice_slice_len(data[0U], uint8_t) / (size_t)136U; i++) {
+ size_t i0 = i;
+ libcrux_sha3_generic_keccak_KeccakState_48 *uu____0 = &s;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_data[1U];
+ memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice ret[1U];
+ libcrux_sha3_portable_keccak_slice_n_5a(copy_of_data, i0 * (size_t)136U,
+ (size_t)136U, ret);
+ libcrux_sha3_generic_keccak_absorb_block_df0(uu____0, ret);
+ }
+ size_t rem = Eurydice_slice_len(data[0U], uint8_t) % (size_t)136U;
+ libcrux_sha3_generic_keccak_KeccakState_48 *uu____2 = &s;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_data[1U];
+ memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice ret[1U];
+ libcrux_sha3_portable_keccak_slice_n_5a(
+ copy_of_data, Eurydice_slice_len(data[0U], uint8_t) - rem, rem, ret);
+ libcrux_sha3_generic_keccak_absorb_final_c70(uu____2, ret);
+ size_t outlen = Eurydice_slice_len(out[0U], uint8_t);
+ size_t blocks = outlen / (size_t)136U;
+ size_t last = outlen - outlen % (size_t)136U;
+ if (blocks == (size_t)0U) {
+ libcrux_sha3_generic_keccak_squeeze_first_and_last_c50(&s, out);
+ } else {
+ Eurydice_slice_uint8_t_1size_t__x2 uu____4 =
+ libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, (size_t)136U);
+ Eurydice_slice o0[1U];
+ memcpy(o0, uu____4.fst, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice o1[1U];
+ memcpy(o1, uu____4.snd, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_squeeze_first_block_840(&s, o0);
+ core_ops_range_Range_b3 iter =
+ core_iter_traits_collect___core__iter__traits__collect__IntoIterator_for_I__1__into_iter(
+ (CLITERAL(core_ops_range_Range_b3){.start = (size_t)1U,
+ .end = blocks}),
+ core_ops_range_Range_b3, core_ops_range_Range_b3);
+ while (true) {
+ if (core_iter_range___core__iter__traits__iterator__Iterator_for_core__ops__range__Range_A___6__next(
+ &iter, size_t, Option_b3)
+ .tag == None) {
+ break;
+ } else {
+ Eurydice_slice_uint8_t_1size_t__x2 uu____5 =
+ libcrux_sha3_portable_keccak_split_at_mut_n_5a(o1, (size_t)136U);
+ Eurydice_slice o[1U];
+ memcpy(o, uu____5.fst, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice orest[1U];
+ memcpy(orest, uu____5.snd, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_squeeze_next_block_fc0(&s, o);
+ memcpy(o1, orest, (size_t)1U * sizeof(Eurydice_slice));
+ }
+ }
+ if (last < outlen) {
+ libcrux_sha3_generic_keccak_squeeze_last_cf0(s, o1);
+ }
+ }
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable.keccakx1
+with const generics
+- RATE= 136
+- DELIM= 6
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccakx1_ce0(
+ Eurydice_slice data[1U], Eurydice_slice out[1U]) {
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_data[1U];
+ memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_keccak_e90(copy_of_data, out);
+}
+
+/**
+ A portable SHA3 256 implementation.
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_sha256(Eurydice_slice digest,
+ Eurydice_slice data) {
+ Eurydice_slice buf0[1U] = {data};
+ Eurydice_slice buf[1U] = {digest};
+ libcrux_sha3_portable_keccakx1_ce0(buf0, buf);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 136
+- DELIM= 31
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_absorb_final_c71(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice last[1U]) {
+ size_t last_len = Eurydice_slice_len(last[0U], uint8_t);
+ uint8_t blocks[1U][200U] = {{0U}};
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ if (last_len > (size_t)0U) {
+ Eurydice_slice uu____0 = Eurydice_array_to_subslice2(
+ blocks[i0], (size_t)0U, last_len, uint8_t);
+ Eurydice_slice_copy(uu____0, last[i0], uint8_t);
+ }
+ blocks[i0][last_len] = 31U;
+ size_t uu____1 = i0;
+ size_t uu____2 = (size_t)136U - (size_t)1U;
+ blocks[uu____1][uu____2] = (uint32_t)blocks[uu____1][uu____2] | 128U;
+ }
+ uint64_t(*uu____3)[5U] = s->st;
+ uint8_t uu____4[1U][200U];
+ memcpy(uu____4, blocks, (size_t)1U * sizeof(uint8_t[200U]));
+ libcrux_sha3_portable_keccak_load_block_full_5a_d20(uu____3, uu____4);
+ libcrux_sha3_generic_keccak_keccakf1600_21(s);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.keccak
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 136
+- DELIM= 31
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_keccak_e91(
+ Eurydice_slice data[1U], Eurydice_slice out[1U]) {
+ libcrux_sha3_generic_keccak_KeccakState_48 s =
+ libcrux_sha3_generic_keccak_new_1e_f4();
+ for (size_t i = (size_t)0U;
+ i < Eurydice_slice_len(data[0U], uint8_t) / (size_t)136U; i++) {
+ size_t i0 = i;
+ libcrux_sha3_generic_keccak_KeccakState_48 *uu____0 = &s;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_data[1U];
+ memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice ret[1U];
+ libcrux_sha3_portable_keccak_slice_n_5a(copy_of_data, i0 * (size_t)136U,
+ (size_t)136U, ret);
+ libcrux_sha3_generic_keccak_absorb_block_df0(uu____0, ret);
+ }
+ size_t rem = Eurydice_slice_len(data[0U], uint8_t) % (size_t)136U;
+ libcrux_sha3_generic_keccak_KeccakState_48 *uu____2 = &s;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_data[1U];
+ memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice ret[1U];
+ libcrux_sha3_portable_keccak_slice_n_5a(
+ copy_of_data, Eurydice_slice_len(data[0U], uint8_t) - rem, rem, ret);
+ libcrux_sha3_generic_keccak_absorb_final_c71(uu____2, ret);
+ size_t outlen = Eurydice_slice_len(out[0U], uint8_t);
+ size_t blocks = outlen / (size_t)136U;
+ size_t last = outlen - outlen % (size_t)136U;
+ if (blocks == (size_t)0U) {
+ libcrux_sha3_generic_keccak_squeeze_first_and_last_c50(&s, out);
+ } else {
+ Eurydice_slice_uint8_t_1size_t__x2 uu____4 =
+ libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, (size_t)136U);
+ Eurydice_slice o0[1U];
+ memcpy(o0, uu____4.fst, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice o1[1U];
+ memcpy(o1, uu____4.snd, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_squeeze_first_block_840(&s, o0);
+ core_ops_range_Range_b3 iter =
+ core_iter_traits_collect___core__iter__traits__collect__IntoIterator_for_I__1__into_iter(
+ (CLITERAL(core_ops_range_Range_b3){.start = (size_t)1U,
+ .end = blocks}),
+ core_ops_range_Range_b3, core_ops_range_Range_b3);
+ while (true) {
+ if (core_iter_range___core__iter__traits__iterator__Iterator_for_core__ops__range__Range_A___6__next(
+ &iter, size_t, Option_b3)
+ .tag == None) {
+ break;
+ } else {
+ Eurydice_slice_uint8_t_1size_t__x2 uu____5 =
+ libcrux_sha3_portable_keccak_split_at_mut_n_5a(o1, (size_t)136U);
+ Eurydice_slice o[1U];
+ memcpy(o, uu____5.fst, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice orest[1U];
+ memcpy(orest, uu____5.snd, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_squeeze_next_block_fc0(&s, o);
+ memcpy(o1, orest, (size_t)1U * sizeof(Eurydice_slice));
+ }
+ }
+ if (last < outlen) {
+ libcrux_sha3_generic_keccak_squeeze_last_cf0(s, o1);
+ }
+ }
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable.keccakx1
+with const generics
+- RATE= 136
+- DELIM= 31
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccakx1_ce1(
+ Eurydice_slice data[1U], Eurydice_slice out[1U]) {
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_data[1U];
+ memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_keccak_e91(copy_of_data, out);
+}
+
+/**
+ A portable SHAKE256 implementation.
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_shake256(
+ Eurydice_slice digest, Eurydice_slice data) {
+ Eurydice_slice buf0[1U] = {data};
+ Eurydice_slice buf[1U] = {digest};
+ libcrux_sha3_portable_keccakx1_ce1(buf0, buf);
+}
+
+typedef libcrux_sha3_generic_keccak_KeccakState_48
+ libcrux_sha3_portable_KeccakState;
+
+/**
+ Create a new SHAKE-128 state object.
+*/
+static KRML_MUSTINLINE libcrux_sha3_generic_keccak_KeccakState_48
+libcrux_sha3_portable_incremental_shake128_init(void) {
+ return libcrux_sha3_generic_keccak_new_1e_f4();
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.load_block
+with const generics
+- RATE= 168
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_load_block_2c1(
+ uint64_t (*s)[5U], Eurydice_slice blocks[1U]) {
+ for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)8U; i++) {
+ size_t i0 = i;
+ uint8_t uu____0[8U];
+ Result_56 dst;
+ Eurydice_slice_to_array2(
+ &dst,
+ Eurydice_slice_subslice2(blocks[0U], (size_t)8U * i0,
+ (size_t)8U * i0 + (size_t)8U, uint8_t),
+ Eurydice_slice, uint8_t[8U]);
+ unwrap_41_ac(dst, uu____0);
+ size_t uu____1 = i0 / (size_t)5U;
+ size_t uu____2 = i0 % (size_t)5U;
+ s[uu____1][uu____2] =
+ s[uu____1][uu____2] ^ core_num__u64_9__from_le_bytes(uu____0);
+ }
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.load_block_full
+with const generics
+- RATE= 168
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_load_block_full_df1(
+ uint64_t (*s)[5U], uint8_t blocks[1U][200U]) {
+ Eurydice_slice buf[1U] = {
+ Eurydice_array_to_slice((size_t)200U, blocks[0U], uint8_t)};
+ libcrux_sha3_portable_keccak_load_block_2c1(s, buf);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.load_block_full_5a
+with const generics
+- RATE= 168
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_load_block_full_5a_d21(
+ uint64_t (*a)[5U], uint8_t b[1U][200U]) {
+ uint64_t(*uu____0)[5U] = a;
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_b[1U][200U];
+ memcpy(copy_of_b, b, (size_t)1U * sizeof(uint8_t[200U]));
+ libcrux_sha3_portable_keccak_load_block_full_df1(uu____0, copy_of_b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 168
+- DELIM= 31
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_absorb_final_c72(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice last[1U]) {
+ size_t last_len = Eurydice_slice_len(last[0U], uint8_t);
+ uint8_t blocks[1U][200U] = {{0U}};
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ if (last_len > (size_t)0U) {
+ Eurydice_slice uu____0 = Eurydice_array_to_subslice2(
+ blocks[i0], (size_t)0U, last_len, uint8_t);
+ Eurydice_slice_copy(uu____0, last[i0], uint8_t);
+ }
+ blocks[i0][last_len] = 31U;
+ size_t uu____1 = i0;
+ size_t uu____2 = (size_t)168U - (size_t)1U;
+ blocks[uu____1][uu____2] = (uint32_t)blocks[uu____1][uu____2] | 128U;
+ }
+ uint64_t(*uu____3)[5U] = s->st;
+ uint8_t uu____4[1U][200U];
+ memcpy(uu____4, blocks, (size_t)1U * sizeof(uint8_t[200U]));
+ libcrux_sha3_portable_keccak_load_block_full_5a_d21(uu____3, uu____4);
+ libcrux_sha3_generic_keccak_keccakf1600_21(s);
+}
+
+/**
+ Absorb
+*/
+static KRML_MUSTINLINE void
+libcrux_sha3_portable_incremental_shake128_absorb_final(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice data0) {
+ Eurydice_slice buf[1U] = {data0};
+ libcrux_sha3_generic_keccak_absorb_final_c72(s, buf);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.store_block
+with const generics
+- RATE= 168
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_store_block_581(
+ uint64_t (*s)[5U], Eurydice_slice out[1U]) {
+ for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)8U; i++) {
+ size_t i0 = i;
+ Eurydice_slice uu____0 = Eurydice_slice_subslice2(
+ out[0U], (size_t)8U * i0, (size_t)8U * i0 + (size_t)8U, uint8_t);
+ uint8_t ret[8U];
+ core_num__u64_9__to_le_bytes(s[i0 / (size_t)5U][i0 % (size_t)5U], ret);
+ Eurydice_slice_copy(
+ uu____0, Eurydice_array_to_slice((size_t)8U, ret, uint8_t), uint8_t);
+ }
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.store_block_5a
+with const generics
+- RATE= 168
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_store_block_5a_591(
+ uint64_t (*a)[5U], Eurydice_slice b[1U]) {
+ libcrux_sha3_portable_keccak_store_block_581(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_next_block
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 168
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_squeeze_next_block_fc1(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) {
+ libcrux_sha3_generic_keccak_keccakf1600_21(s);
+ libcrux_sha3_portable_keccak_store_block_5a_591(s->st, out);
+}
+
+/**
+ Squeeze another block
+*/
+static KRML_MUSTINLINE void
+libcrux_sha3_portable_incremental_shake128_squeeze_next_block(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out0) {
+ Eurydice_slice buf[1U] = {out0};
+ libcrux_sha3_generic_keccak_squeeze_next_block_fc1(s, buf);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_block
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 168
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_squeeze_first_block_841(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) {
+ libcrux_sha3_portable_keccak_store_block_5a_591(s->st, out);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_three_blocks
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 168
+*/
+static KRML_MUSTINLINE void
+libcrux_sha3_generic_keccak_squeeze_first_three_blocks_cc(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) {
+ Eurydice_slice_uint8_t_1size_t__x2 uu____0 =
+ libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, (size_t)168U);
+ Eurydice_slice o0[1U];
+ memcpy(o0, uu____0.fst, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice o10[1U];
+ memcpy(o10, uu____0.snd, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_squeeze_first_block_841(s, o0);
+ Eurydice_slice_uint8_t_1size_t__x2 uu____1 =
+ libcrux_sha3_portable_keccak_split_at_mut_n_5a(o10, (size_t)168U);
+ Eurydice_slice o1[1U];
+ memcpy(o1, uu____1.fst, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice o2[1U];
+ memcpy(o2, uu____1.snd, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_squeeze_next_block_fc1(s, o1);
+ libcrux_sha3_generic_keccak_squeeze_next_block_fc1(s, o2);
+}
+
+/**
+ Squeeze three blocks
+*/
+static KRML_MUSTINLINE void
+libcrux_sha3_portable_incremental_shake128_squeeze_first_three_blocks(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out0) {
+ Eurydice_slice buf[1U] = {out0};
+ libcrux_sha3_generic_keccak_squeeze_first_three_blocks_cc(s, buf);
+}
+
+#define libcrux_sha3_Sha224 0
+#define libcrux_sha3_Sha256 1
+#define libcrux_sha3_Sha384 2
+#define libcrux_sha3_Sha512 3
+
+typedef uint8_t libcrux_sha3_Algorithm;
+
+/**
+ Returns the output size of a digest.
+*/
+static inline size_t libcrux_sha3_digest_size(libcrux_sha3_Algorithm mode) {
+ size_t uu____0;
+ switch (mode) {
+ case libcrux_sha3_Sha224: {
+ uu____0 = (size_t)28U;
+ break;
+ }
+ case libcrux_sha3_Sha256: {
+ uu____0 = (size_t)32U;
+ break;
+ }
+ case libcrux_sha3_Sha384: {
+ uu____0 = (size_t)48U;
+ break;
+ }
+ case libcrux_sha3_Sha512: {
+ uu____0 = (size_t)64U;
+ break;
+ }
+ default: {
+ KRML_HOST_EPRINTF("KaRaMeL incomplete match at %s:%d\n", __FILE__,
+ __LINE__);
+ KRML_HOST_EXIT(253U);
+ }
+ }
+ return uu____0;
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.load_block
+with const generics
+- RATE= 144
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_load_block_2c2(
+ uint64_t (*s)[5U], Eurydice_slice blocks[1U]) {
+ for (size_t i = (size_t)0U; i < (size_t)144U / (size_t)8U; i++) {
+ size_t i0 = i;
+ uint8_t uu____0[8U];
+ Result_56 dst;
+ Eurydice_slice_to_array2(
+ &dst,
+ Eurydice_slice_subslice2(blocks[0U], (size_t)8U * i0,
+ (size_t)8U * i0 + (size_t)8U, uint8_t),
+ Eurydice_slice, uint8_t[8U]);
+ unwrap_41_ac(dst, uu____0);
+ size_t uu____1 = i0 / (size_t)5U;
+ size_t uu____2 = i0 % (size_t)5U;
+ s[uu____1][uu____2] =
+ s[uu____1][uu____2] ^ core_num__u64_9__from_le_bytes(uu____0);
+ }
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.load_block_5a
+with const generics
+- RATE= 144
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_load_block_5a_b81(
+ uint64_t (*a)[5U], Eurydice_slice b[1U]) {
+ uint64_t(*uu____0)[5U] = a;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_b[1U];
+ memcpy(copy_of_b, b, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_portable_keccak_load_block_2c2(uu____0, copy_of_b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 144
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_absorb_block_df1(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice blocks[1U]) {
+ uint64_t(*uu____0)[5U] = s->st;
+ Eurydice_slice uu____1[1U];
+ memcpy(uu____1, blocks, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_portable_keccak_load_block_5a_b81(uu____0, uu____1);
+ libcrux_sha3_generic_keccak_keccakf1600_21(s);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.load_block_full
+with const generics
+- RATE= 144
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_load_block_full_df2(
+ uint64_t (*s)[5U], uint8_t blocks[1U][200U]) {
+ Eurydice_slice buf[1U] = {
+ Eurydice_array_to_slice((size_t)200U, blocks[0U], uint8_t)};
+ libcrux_sha3_portable_keccak_load_block_2c2(s, buf);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.load_block_full_5a
+with const generics
+- RATE= 144
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_load_block_full_5a_d22(
+ uint64_t (*a)[5U], uint8_t b[1U][200U]) {
+ uint64_t(*uu____0)[5U] = a;
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_b[1U][200U];
+ memcpy(copy_of_b, b, (size_t)1U * sizeof(uint8_t[200U]));
+ libcrux_sha3_portable_keccak_load_block_full_df2(uu____0, copy_of_b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 144
+- DELIM= 6
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_absorb_final_c73(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice last[1U]) {
+ size_t last_len = Eurydice_slice_len(last[0U], uint8_t);
+ uint8_t blocks[1U][200U] = {{0U}};
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ if (last_len > (size_t)0U) {
+ Eurydice_slice uu____0 = Eurydice_array_to_subslice2(
+ blocks[i0], (size_t)0U, last_len, uint8_t);
+ Eurydice_slice_copy(uu____0, last[i0], uint8_t);
+ }
+ blocks[i0][last_len] = 6U;
+ size_t uu____1 = i0;
+ size_t uu____2 = (size_t)144U - (size_t)1U;
+ blocks[uu____1][uu____2] = (uint32_t)blocks[uu____1][uu____2] | 128U;
+ }
+ uint64_t(*uu____3)[5U] = s->st;
+ uint8_t uu____4[1U][200U];
+ memcpy(uu____4, blocks, (size_t)1U * sizeof(uint8_t[200U]));
+ libcrux_sha3_portable_keccak_load_block_full_5a_d22(uu____3, uu____4);
+ libcrux_sha3_generic_keccak_keccakf1600_21(s);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.store_block
+with const generics
+- RATE= 144
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_store_block_582(
+ uint64_t (*s)[5U], Eurydice_slice out[1U]) {
+ for (size_t i = (size_t)0U; i < (size_t)144U / (size_t)8U; i++) {
+ size_t i0 = i;
+ Eurydice_slice uu____0 = Eurydice_slice_subslice2(
+ out[0U], (size_t)8U * i0, (size_t)8U * i0 + (size_t)8U, uint8_t);
+ uint8_t ret[8U];
+ core_num__u64_9__to_le_bytes(s[i0 / (size_t)5U][i0 % (size_t)5U], ret);
+ Eurydice_slice_copy(
+ uu____0, Eurydice_array_to_slice((size_t)8U, ret, uint8_t), uint8_t);
+ }
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.store_block_full
+with const generics
+- RATE= 144
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_store_block_full_2d1(
+ uint64_t (*s)[5U], uint8_t ret[1U][200U]) {
+ uint8_t out[200U] = {0U};
+ Eurydice_slice buf[1U] = {
+ Eurydice_array_to_slice((size_t)200U, out, uint8_t)};
+ libcrux_sha3_portable_keccak_store_block_582(s, buf);
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_out[200U];
+ memcpy(copy_of_out, out, (size_t)200U * sizeof(uint8_t));
+ memcpy(ret[0U], copy_of_out, (size_t)200U * sizeof(uint8_t));
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.store_block_full_5a
+with const generics
+- RATE= 144
+*/
+static KRML_MUSTINLINE void
+libcrux_sha3_portable_keccak_store_block_full_5a_291(uint64_t (*a)[5U],
+ uint8_t ret[1U][200U]) {
+ libcrux_sha3_portable_keccak_store_block_full_2d1(a, ret);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_and_last
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 144
+*/
+static KRML_MUSTINLINE void
+libcrux_sha3_generic_keccak_squeeze_first_and_last_c51(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) {
+ uint8_t b[1U][200U];
+ libcrux_sha3_portable_keccak_store_block_full_5a_291(s->st, b);
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ Eurydice_slice uu____0 = out[i0];
+ uint8_t *uu____1 = b[i0];
+ core_ops_range_Range_b3 lit;
+ lit.start = (size_t)0U;
+ lit.end = Eurydice_slice_len(out[i0], uint8_t);
+ Eurydice_slice_copy(
+ uu____0,
+ Eurydice_array_to_subslice((size_t)200U, uu____1, lit, uint8_t,
+ core_ops_range_Range_b3),
+ uint8_t);
+ }
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.store_block_5a
+with const generics
+- RATE= 144
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_store_block_5a_592(
+ uint64_t (*a)[5U], Eurydice_slice b[1U]) {
+ libcrux_sha3_portable_keccak_store_block_582(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_block
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 144
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_squeeze_first_block_842(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) {
+ libcrux_sha3_portable_keccak_store_block_5a_592(s->st, out);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_next_block
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 144
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_squeeze_next_block_fc2(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) {
+ libcrux_sha3_generic_keccak_keccakf1600_21(s);
+ libcrux_sha3_portable_keccak_store_block_5a_592(s->st, out);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_last
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 144
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_squeeze_last_cf1(
+ libcrux_sha3_generic_keccak_KeccakState_48 s, Eurydice_slice out[1U]) {
+ libcrux_sha3_generic_keccak_keccakf1600_21(&s);
+ uint8_t b[1U][200U];
+ libcrux_sha3_portable_keccak_store_block_full_5a_291(s.st, b);
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ Eurydice_slice uu____0 = out[i0];
+ uint8_t *uu____1 = b[i0];
+ core_ops_range_Range_b3 lit;
+ lit.start = (size_t)0U;
+ lit.end = Eurydice_slice_len(out[i0], uint8_t);
+ Eurydice_slice_copy(
+ uu____0,
+ Eurydice_array_to_subslice((size_t)200U, uu____1, lit, uint8_t,
+ core_ops_range_Range_b3),
+ uint8_t);
+ }
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.keccak
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 144
+- DELIM= 6
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_keccak_e92(
+ Eurydice_slice data[1U], Eurydice_slice out[1U]) {
+ libcrux_sha3_generic_keccak_KeccakState_48 s =
+ libcrux_sha3_generic_keccak_new_1e_f4();
+ for (size_t i = (size_t)0U;
+ i < Eurydice_slice_len(data[0U], uint8_t) / (size_t)144U; i++) {
+ size_t i0 = i;
+ libcrux_sha3_generic_keccak_KeccakState_48 *uu____0 = &s;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_data[1U];
+ memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice ret[1U];
+ libcrux_sha3_portable_keccak_slice_n_5a(copy_of_data, i0 * (size_t)144U,
+ (size_t)144U, ret);
+ libcrux_sha3_generic_keccak_absorb_block_df1(uu____0, ret);
+ }
+ size_t rem = Eurydice_slice_len(data[0U], uint8_t) % (size_t)144U;
+ libcrux_sha3_generic_keccak_KeccakState_48 *uu____2 = &s;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_data[1U];
+ memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice ret[1U];
+ libcrux_sha3_portable_keccak_slice_n_5a(
+ copy_of_data, Eurydice_slice_len(data[0U], uint8_t) - rem, rem, ret);
+ libcrux_sha3_generic_keccak_absorb_final_c73(uu____2, ret);
+ size_t outlen = Eurydice_slice_len(out[0U], uint8_t);
+ size_t blocks = outlen / (size_t)144U;
+ size_t last = outlen - outlen % (size_t)144U;
+ if (blocks == (size_t)0U) {
+ libcrux_sha3_generic_keccak_squeeze_first_and_last_c51(&s, out);
+ } else {
+ Eurydice_slice_uint8_t_1size_t__x2 uu____4 =
+ libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, (size_t)144U);
+ Eurydice_slice o0[1U];
+ memcpy(o0, uu____4.fst, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice o1[1U];
+ memcpy(o1, uu____4.snd, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_squeeze_first_block_842(&s, o0);
+ core_ops_range_Range_b3 iter =
+ core_iter_traits_collect___core__iter__traits__collect__IntoIterator_for_I__1__into_iter(
+ (CLITERAL(core_ops_range_Range_b3){.start = (size_t)1U,
+ .end = blocks}),
+ core_ops_range_Range_b3, core_ops_range_Range_b3);
+ while (true) {
+ if (core_iter_range___core__iter__traits__iterator__Iterator_for_core__ops__range__Range_A___6__next(
+ &iter, size_t, Option_b3)
+ .tag == None) {
+ break;
+ } else {
+ Eurydice_slice_uint8_t_1size_t__x2 uu____5 =
+ libcrux_sha3_portable_keccak_split_at_mut_n_5a(o1, (size_t)144U);
+ Eurydice_slice o[1U];
+ memcpy(o, uu____5.fst, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice orest[1U];
+ memcpy(orest, uu____5.snd, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_squeeze_next_block_fc2(&s, o);
+ memcpy(o1, orest, (size_t)1U * sizeof(Eurydice_slice));
+ }
+ }
+ if (last < outlen) {
+ libcrux_sha3_generic_keccak_squeeze_last_cf1(s, o1);
+ }
+ }
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable.keccakx1
+with const generics
+- RATE= 144
+- DELIM= 6
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccakx1_ce2(
+ Eurydice_slice data[1U], Eurydice_slice out[1U]) {
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_data[1U];
+ memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_keccak_e92(copy_of_data, out);
+}
+
+/**
+ A portable SHA3 224 implementation.
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_sha224(Eurydice_slice digest,
+ Eurydice_slice data) {
+ Eurydice_slice buf0[1U] = {data};
+ Eurydice_slice buf[1U] = {digest};
+ libcrux_sha3_portable_keccakx1_ce2(buf0, buf);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.load_block
+with const generics
+- RATE= 104
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_load_block_2c3(
+ uint64_t (*s)[5U], Eurydice_slice blocks[1U]) {
+ for (size_t i = (size_t)0U; i < (size_t)104U / (size_t)8U; i++) {
+ size_t i0 = i;
+ uint8_t uu____0[8U];
+ Result_56 dst;
+ Eurydice_slice_to_array2(
+ &dst,
+ Eurydice_slice_subslice2(blocks[0U], (size_t)8U * i0,
+ (size_t)8U * i0 + (size_t)8U, uint8_t),
+ Eurydice_slice, uint8_t[8U]);
+ unwrap_41_ac(dst, uu____0);
+ size_t uu____1 = i0 / (size_t)5U;
+ size_t uu____2 = i0 % (size_t)5U;
+ s[uu____1][uu____2] =
+ s[uu____1][uu____2] ^ core_num__u64_9__from_le_bytes(uu____0);
+ }
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.load_block_5a
+with const generics
+- RATE= 104
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_load_block_5a_b82(
+ uint64_t (*a)[5U], Eurydice_slice b[1U]) {
+ uint64_t(*uu____0)[5U] = a;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_b[1U];
+ memcpy(copy_of_b, b, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_portable_keccak_load_block_2c3(uu____0, copy_of_b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 104
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_absorb_block_df2(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice blocks[1U]) {
+ uint64_t(*uu____0)[5U] = s->st;
+ Eurydice_slice uu____1[1U];
+ memcpy(uu____1, blocks, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_portable_keccak_load_block_5a_b82(uu____0, uu____1);
+ libcrux_sha3_generic_keccak_keccakf1600_21(s);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.load_block_full
+with const generics
+- RATE= 104
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_load_block_full_df3(
+ uint64_t (*s)[5U], uint8_t blocks[1U][200U]) {
+ Eurydice_slice buf[1U] = {
+ Eurydice_array_to_slice((size_t)200U, blocks[0U], uint8_t)};
+ libcrux_sha3_portable_keccak_load_block_2c3(s, buf);
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.load_block_full_5a
+with const generics
+- RATE= 104
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_load_block_full_5a_d23(
+ uint64_t (*a)[5U], uint8_t b[1U][200U]) {
+ uint64_t(*uu____0)[5U] = a;
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_b[1U][200U];
+ memcpy(copy_of_b, b, (size_t)1U * sizeof(uint8_t[200U]));
+ libcrux_sha3_portable_keccak_load_block_full_df3(uu____0, copy_of_b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 104
+- DELIM= 6
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_absorb_final_c74(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice last[1U]) {
+ size_t last_len = Eurydice_slice_len(last[0U], uint8_t);
+ uint8_t blocks[1U][200U] = {{0U}};
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ if (last_len > (size_t)0U) {
+ Eurydice_slice uu____0 = Eurydice_array_to_subslice2(
+ blocks[i0], (size_t)0U, last_len, uint8_t);
+ Eurydice_slice_copy(uu____0, last[i0], uint8_t);
+ }
+ blocks[i0][last_len] = 6U;
+ size_t uu____1 = i0;
+ size_t uu____2 = (size_t)104U - (size_t)1U;
+ blocks[uu____1][uu____2] = (uint32_t)blocks[uu____1][uu____2] | 128U;
+ }
+ uint64_t(*uu____3)[5U] = s->st;
+ uint8_t uu____4[1U][200U];
+ memcpy(uu____4, blocks, (size_t)1U * sizeof(uint8_t[200U]));
+ libcrux_sha3_portable_keccak_load_block_full_5a_d23(uu____3, uu____4);
+ libcrux_sha3_generic_keccak_keccakf1600_21(s);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.store_block
+with const generics
+- RATE= 104
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_store_block_583(
+ uint64_t (*s)[5U], Eurydice_slice out[1U]) {
+ for (size_t i = (size_t)0U; i < (size_t)104U / (size_t)8U; i++) {
+ size_t i0 = i;
+ Eurydice_slice uu____0 = Eurydice_slice_subslice2(
+ out[0U], (size_t)8U * i0, (size_t)8U * i0 + (size_t)8U, uint8_t);
+ uint8_t ret[8U];
+ core_num__u64_9__to_le_bytes(s[i0 / (size_t)5U][i0 % (size_t)5U], ret);
+ Eurydice_slice_copy(
+ uu____0, Eurydice_array_to_slice((size_t)8U, ret, uint8_t), uint8_t);
+ }
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.store_block_full
+with const generics
+- RATE= 104
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_store_block_full_2d2(
+ uint64_t (*s)[5U], uint8_t ret[1U][200U]) {
+ uint8_t out[200U] = {0U};
+ Eurydice_slice buf[1U] = {
+ Eurydice_array_to_slice((size_t)200U, out, uint8_t)};
+ libcrux_sha3_portable_keccak_store_block_583(s, buf);
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_out[200U];
+ memcpy(copy_of_out, out, (size_t)200U * sizeof(uint8_t));
+ memcpy(ret[0U], copy_of_out, (size_t)200U * sizeof(uint8_t));
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.store_block_full_5a
+with const generics
+- RATE= 104
+*/
+static KRML_MUSTINLINE void
+libcrux_sha3_portable_keccak_store_block_full_5a_292(uint64_t (*a)[5U],
+ uint8_t ret[1U][200U]) {
+ libcrux_sha3_portable_keccak_store_block_full_2d2(a, ret);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_and_last
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 104
+*/
+static KRML_MUSTINLINE void
+libcrux_sha3_generic_keccak_squeeze_first_and_last_c52(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) {
+ uint8_t b[1U][200U];
+ libcrux_sha3_portable_keccak_store_block_full_5a_292(s->st, b);
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ Eurydice_slice uu____0 = out[i0];
+ uint8_t *uu____1 = b[i0];
+ core_ops_range_Range_b3 lit;
+ lit.start = (size_t)0U;
+ lit.end = Eurydice_slice_len(out[i0], uint8_t);
+ Eurydice_slice_copy(
+ uu____0,
+ Eurydice_array_to_subslice((size_t)200U, uu____1, lit, uint8_t,
+ core_ops_range_Range_b3),
+ uint8_t);
+ }
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.store_block_5a
+with const generics
+- RATE= 104
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_store_block_5a_593(
+ uint64_t (*a)[5U], Eurydice_slice b[1U]) {
+ libcrux_sha3_portable_keccak_store_block_583(a, b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_block
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 104
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_squeeze_first_block_843(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) {
+ libcrux_sha3_portable_keccak_store_block_5a_593(s->st, out);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_next_block
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 104
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_squeeze_next_block_fc3(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) {
+ libcrux_sha3_generic_keccak_keccakf1600_21(s);
+ libcrux_sha3_portable_keccak_store_block_5a_593(s->st, out);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_last
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 104
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_squeeze_last_cf2(
+ libcrux_sha3_generic_keccak_KeccakState_48 s, Eurydice_slice out[1U]) {
+ libcrux_sha3_generic_keccak_keccakf1600_21(&s);
+ uint8_t b[1U][200U];
+ libcrux_sha3_portable_keccak_store_block_full_5a_292(s.st, b);
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ Eurydice_slice uu____0 = out[i0];
+ uint8_t *uu____1 = b[i0];
+ core_ops_range_Range_b3 lit;
+ lit.start = (size_t)0U;
+ lit.end = Eurydice_slice_len(out[i0], uint8_t);
+ Eurydice_slice_copy(
+ uu____0,
+ Eurydice_array_to_subslice((size_t)200U, uu____1, lit, uint8_t,
+ core_ops_range_Range_b3),
+ uint8_t);
+ }
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.keccak
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 104
+- DELIM= 6
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_keccak_e93(
+ Eurydice_slice data[1U], Eurydice_slice out[1U]) {
+ libcrux_sha3_generic_keccak_KeccakState_48 s =
+ libcrux_sha3_generic_keccak_new_1e_f4();
+ for (size_t i = (size_t)0U;
+ i < Eurydice_slice_len(data[0U], uint8_t) / (size_t)104U; i++) {
+ size_t i0 = i;
+ libcrux_sha3_generic_keccak_KeccakState_48 *uu____0 = &s;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_data[1U];
+ memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice ret[1U];
+ libcrux_sha3_portable_keccak_slice_n_5a(copy_of_data, i0 * (size_t)104U,
+ (size_t)104U, ret);
+ libcrux_sha3_generic_keccak_absorb_block_df2(uu____0, ret);
+ }
+ size_t rem = Eurydice_slice_len(data[0U], uint8_t) % (size_t)104U;
+ libcrux_sha3_generic_keccak_KeccakState_48 *uu____2 = &s;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_data[1U];
+ memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice ret[1U];
+ libcrux_sha3_portable_keccak_slice_n_5a(
+ copy_of_data, Eurydice_slice_len(data[0U], uint8_t) - rem, rem, ret);
+ libcrux_sha3_generic_keccak_absorb_final_c74(uu____2, ret);
+ size_t outlen = Eurydice_slice_len(out[0U], uint8_t);
+ size_t blocks = outlen / (size_t)104U;
+ size_t last = outlen - outlen % (size_t)104U;
+ if (blocks == (size_t)0U) {
+ libcrux_sha3_generic_keccak_squeeze_first_and_last_c52(&s, out);
+ } else {
+ Eurydice_slice_uint8_t_1size_t__x2 uu____4 =
+ libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, (size_t)104U);
+ Eurydice_slice o0[1U];
+ memcpy(o0, uu____4.fst, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice o1[1U];
+ memcpy(o1, uu____4.snd, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_squeeze_first_block_843(&s, o0);
+ core_ops_range_Range_b3 iter =
+ core_iter_traits_collect___core__iter__traits__collect__IntoIterator_for_I__1__into_iter(
+ (CLITERAL(core_ops_range_Range_b3){.start = (size_t)1U,
+ .end = blocks}),
+ core_ops_range_Range_b3, core_ops_range_Range_b3);
+ while (true) {
+ if (core_iter_range___core__iter__traits__iterator__Iterator_for_core__ops__range__Range_A___6__next(
+ &iter, size_t, Option_b3)
+ .tag == None) {
+ break;
+ } else {
+ Eurydice_slice_uint8_t_1size_t__x2 uu____5 =
+ libcrux_sha3_portable_keccak_split_at_mut_n_5a(o1, (size_t)104U);
+ Eurydice_slice o[1U];
+ memcpy(o, uu____5.fst, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice orest[1U];
+ memcpy(orest, uu____5.snd, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_squeeze_next_block_fc3(&s, o);
+ memcpy(o1, orest, (size_t)1U * sizeof(Eurydice_slice));
+ }
+ }
+ if (last < outlen) {
+ libcrux_sha3_generic_keccak_squeeze_last_cf2(s, o1);
+ }
+ }
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable.keccakx1
+with const generics
+- RATE= 104
+- DELIM= 6
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccakx1_ce3(
+ Eurydice_slice data[1U], Eurydice_slice out[1U]) {
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_data[1U];
+ memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_keccak_e93(copy_of_data, out);
+}
+
+/**
+ A portable SHA3 384 implementation.
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_sha384(Eurydice_slice digest,
+ Eurydice_slice data) {
+ Eurydice_slice buf0[1U] = {data};
+ Eurydice_slice buf[1U] = {digest};
+ libcrux_sha3_portable_keccakx1_ce3(buf0, buf);
+}
+
+/**
+ SHA3 224
+
+ Preconditions:
+ - `digest.len() == 28`
+*/
+static KRML_MUSTINLINE void libcrux_sha3_sha224_ema(Eurydice_slice digest,
+ Eurydice_slice payload) {
+ libcrux_sha3_portable_sha224(digest, payload);
+}
+
+/**
+ SHA3 224
+*/
+static KRML_MUSTINLINE void libcrux_sha3_sha224(Eurydice_slice data,
+ uint8_t ret[28U]) {
+ uint8_t out[28U] = {0U};
+ libcrux_sha3_sha224_ema(Eurydice_array_to_slice((size_t)28U, out, uint8_t),
+ data);
+ memcpy(ret, out, (size_t)28U * sizeof(uint8_t));
+}
+
+/**
+ SHA3 256
+*/
+static KRML_MUSTINLINE void libcrux_sha3_sha256_ema(Eurydice_slice digest,
+ Eurydice_slice payload) {
+ libcrux_sha3_portable_sha256(digest, payload);
+}
+
+/**
+ SHA3 256
+*/
+static KRML_MUSTINLINE void libcrux_sha3_sha256(Eurydice_slice data,
+ uint8_t ret[32U]) {
+ uint8_t out[32U] = {0U};
+ libcrux_sha3_sha256_ema(Eurydice_array_to_slice((size_t)32U, out, uint8_t),
+ data);
+ memcpy(ret, out, (size_t)32U * sizeof(uint8_t));
+}
+
+/**
+ SHA3 384
+*/
+static KRML_MUSTINLINE void libcrux_sha3_sha384_ema(Eurydice_slice digest,
+ Eurydice_slice payload) {
+ libcrux_sha3_portable_sha384(digest, payload);
+}
+
+/**
+ SHA3 384
+*/
+static KRML_MUSTINLINE void libcrux_sha3_sha384(Eurydice_slice data,
+ uint8_t ret[48U]) {
+ uint8_t out[48U] = {0U};
+ libcrux_sha3_sha384_ema(Eurydice_array_to_slice((size_t)48U, out, uint8_t),
+ data);
+ memcpy(ret, out, (size_t)48U * sizeof(uint8_t));
+}
+
+/**
+ SHA3 512
+*/
+static KRML_MUSTINLINE void libcrux_sha3_sha512_ema(Eurydice_slice digest,
+ Eurydice_slice payload) {
+ libcrux_sha3_portable_sha512(digest, payload);
+}
+
+/**
+ SHA3 512
+*/
+static KRML_MUSTINLINE void libcrux_sha3_sha512(Eurydice_slice data,
+ uint8_t ret[64U]) {
+ uint8_t out[64U] = {0U};
+ libcrux_sha3_sha512_ema(Eurydice_array_to_slice((size_t)64U, out, uint8_t),
+ data);
+ memcpy(ret, out, (size_t)64U * sizeof(uint8_t));
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.load_block_5a
+with const generics
+- RATE= 168
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_load_block_5a_b83(
+ uint64_t (*a)[5U], Eurydice_slice b[1U]) {
+ uint64_t(*uu____0)[5U] = a;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_b[1U];
+ memcpy(copy_of_b, b, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_portable_keccak_load_block_2c1(uu____0, copy_of_b);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.absorb_block
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 168
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_absorb_block_df3(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice blocks[1U]) {
+ uint64_t(*uu____0)[5U] = s->st;
+ Eurydice_slice uu____1[1U];
+ memcpy(uu____1, blocks, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_portable_keccak_load_block_5a_b83(uu____0, uu____1);
+ libcrux_sha3_generic_keccak_keccakf1600_21(s);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.store_block_full
+with const generics
+- RATE= 168
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_store_block_full_2d3(
+ uint64_t (*s)[5U], uint8_t ret[1U][200U]) {
+ uint8_t out[200U] = {0U};
+ Eurydice_slice buf[1U] = {
+ Eurydice_array_to_slice((size_t)200U, out, uint8_t)};
+ libcrux_sha3_portable_keccak_store_block_581(s, buf);
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_out[200U];
+ memcpy(copy_of_out, out, (size_t)200U * sizeof(uint8_t));
+ memcpy(ret[0U], copy_of_out, (size_t)200U * sizeof(uint8_t));
+}
+
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.store_block_full_5a
+with const generics
+- RATE= 168
+*/
+static KRML_MUSTINLINE void
+libcrux_sha3_portable_keccak_store_block_full_5a_293(uint64_t (*a)[5U],
+ uint8_t ret[1U][200U]) {
+ libcrux_sha3_portable_keccak_store_block_full_2d3(a, ret);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_and_last
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 168
+*/
+static KRML_MUSTINLINE void
+libcrux_sha3_generic_keccak_squeeze_first_and_last_c53(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) {
+ uint8_t b[1U][200U];
+ libcrux_sha3_portable_keccak_store_block_full_5a_293(s->st, b);
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ Eurydice_slice uu____0 = out[i0];
+ uint8_t *uu____1 = b[i0];
+ core_ops_range_Range_b3 lit;
+ lit.start = (size_t)0U;
+ lit.end = Eurydice_slice_len(out[i0], uint8_t);
+ Eurydice_slice_copy(
+ uu____0,
+ Eurydice_array_to_subslice((size_t)200U, uu____1, lit, uint8_t,
+ core_ops_range_Range_b3),
+ uint8_t);
+ }
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_last
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 168
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_squeeze_last_cf3(
+ libcrux_sha3_generic_keccak_KeccakState_48 s, Eurydice_slice out[1U]) {
+ libcrux_sha3_generic_keccak_keccakf1600_21(&s);
+ uint8_t b[1U][200U];
+ libcrux_sha3_portable_keccak_store_block_full_5a_293(s.st, b);
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ Eurydice_slice uu____0 = out[i0];
+ uint8_t *uu____1 = b[i0];
+ core_ops_range_Range_b3 lit;
+ lit.start = (size_t)0U;
+ lit.end = Eurydice_slice_len(out[i0], uint8_t);
+ Eurydice_slice_copy(
+ uu____0,
+ Eurydice_array_to_subslice((size_t)200U, uu____1, lit, uint8_t,
+ core_ops_range_Range_b3),
+ uint8_t);
+ }
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.keccak
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 168
+- DELIM= 31
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_keccak_e94(
+ Eurydice_slice data[1U], Eurydice_slice out[1U]) {
+ libcrux_sha3_generic_keccak_KeccakState_48 s =
+ libcrux_sha3_generic_keccak_new_1e_f4();
+ for (size_t i = (size_t)0U;
+ i < Eurydice_slice_len(data[0U], uint8_t) / (size_t)168U; i++) {
+ size_t i0 = i;
+ libcrux_sha3_generic_keccak_KeccakState_48 *uu____0 = &s;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_data[1U];
+ memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice ret[1U];
+ libcrux_sha3_portable_keccak_slice_n_5a(copy_of_data, i0 * (size_t)168U,
+ (size_t)168U, ret);
+ libcrux_sha3_generic_keccak_absorb_block_df3(uu____0, ret);
+ }
+ size_t rem = Eurydice_slice_len(data[0U], uint8_t) % (size_t)168U;
+ libcrux_sha3_generic_keccak_KeccakState_48 *uu____2 = &s;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_data[1U];
+ memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice ret[1U];
+ libcrux_sha3_portable_keccak_slice_n_5a(
+ copy_of_data, Eurydice_slice_len(data[0U], uint8_t) - rem, rem, ret);
+ libcrux_sha3_generic_keccak_absorb_final_c72(uu____2, ret);
+ size_t outlen = Eurydice_slice_len(out[0U], uint8_t);
+ size_t blocks = outlen / (size_t)168U;
+ size_t last = outlen - outlen % (size_t)168U;
+ if (blocks == (size_t)0U) {
+ libcrux_sha3_generic_keccak_squeeze_first_and_last_c53(&s, out);
+ } else {
+ Eurydice_slice_uint8_t_1size_t__x2 uu____4 =
+ libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, (size_t)168U);
+ Eurydice_slice o0[1U];
+ memcpy(o0, uu____4.fst, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice o1[1U];
+ memcpy(o1, uu____4.snd, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_squeeze_first_block_841(&s, o0);
+ core_ops_range_Range_b3 iter =
+ core_iter_traits_collect___core__iter__traits__collect__IntoIterator_for_I__1__into_iter(
+ (CLITERAL(core_ops_range_Range_b3){.start = (size_t)1U,
+ .end = blocks}),
+ core_ops_range_Range_b3, core_ops_range_Range_b3);
+ while (true) {
+ if (core_iter_range___core__iter__traits__iterator__Iterator_for_core__ops__range__Range_A___6__next(
+ &iter, size_t, Option_b3)
+ .tag == None) {
+ break;
+ } else {
+ Eurydice_slice_uint8_t_1size_t__x2 uu____5 =
+ libcrux_sha3_portable_keccak_split_at_mut_n_5a(o1, (size_t)168U);
+ Eurydice_slice o[1U];
+ memcpy(o, uu____5.fst, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice orest[1U];
+ memcpy(orest, uu____5.snd, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_squeeze_next_block_fc1(&s, o);
+ memcpy(o1, orest, (size_t)1U * sizeof(Eurydice_slice));
+ }
+ }
+ if (last < outlen) {
+ libcrux_sha3_generic_keccak_squeeze_last_cf3(s, o1);
+ }
+ }
+}
+
+/**
+A monomorphic instance of libcrux_sha3.portable.keccakx1
+with const generics
+- RATE= 168
+- DELIM= 31
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccakx1_ce4(
+ Eurydice_slice data[1U], Eurydice_slice out[1U]) {
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_data[1U];
+ memcpy(copy_of_data, data, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_keccak_e94(copy_of_data, out);
+}
+
+/**
+ A portable SHAKE128 implementation.
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_shake128(
+ Eurydice_slice digest, Eurydice_slice data) {
+ Eurydice_slice buf0[1U] = {data};
+ Eurydice_slice buf[1U] = {digest};
+ libcrux_sha3_portable_keccakx1_ce4(buf0, buf);
+}
+
+/**
+ SHAKE 128
+
+ Writes `out.len()` bytes.
+*/
+static KRML_MUSTINLINE void libcrux_sha3_shake128_ema(Eurydice_slice out,
+ Eurydice_slice data) {
+ libcrux_sha3_portable_shake128(out, data);
+}
+
+/**
+ SHAKE 256
+
+ Writes `out.len()` bytes.
+*/
+static KRML_MUSTINLINE void libcrux_sha3_shake256_ema(Eurydice_slice out,
+ Eurydice_slice data) {
+ libcrux_sha3_portable_shake256(out, data);
+}
+
+static const size_t libcrux_sha3_generic_keccak__PI[24U] = {
+ (size_t)6U, (size_t)12U, (size_t)18U, (size_t)24U, (size_t)3U,
+ (size_t)9U, (size_t)10U, (size_t)16U, (size_t)22U, (size_t)1U,
+ (size_t)7U, (size_t)13U, (size_t)19U, (size_t)20U, (size_t)4U,
+ (size_t)5U, (size_t)11U, (size_t)17U, (size_t)23U, (size_t)2U,
+ (size_t)8U, (size_t)14U, (size_t)15U, (size_t)21U};
+
+static const size_t libcrux_sha3_generic_keccak__ROTC[24U] = {
+ (size_t)1U, (size_t)62U, (size_t)28U, (size_t)27U, (size_t)36U,
+ (size_t)44U, (size_t)6U, (size_t)55U, (size_t)20U, (size_t)3U,
+ (size_t)10U, (size_t)43U, (size_t)25U, (size_t)39U, (size_t)41U,
+ (size_t)45U, (size_t)15U, (size_t)21U, (size_t)8U, (size_t)18U,
+ (size_t)2U, (size_t)61U, (size_t)56U, (size_t)14U};
+
+/**
+ A portable SHA3 224 implementation.
+*/
+static KRML_MUSTINLINE void libcrux_sha3_neon_sha224(Eurydice_slice digest,
+ Eurydice_slice data) {
+ KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__,
+ "panic!");
+ KRML_HOST_EXIT(255U);
+}
+
+/**
+ A portable SHA3 256 implementation.
+*/
+static KRML_MUSTINLINE void libcrux_sha3_neon_sha256(Eurydice_slice digest,
+ Eurydice_slice data) {
+ KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__,
+ "panic!");
+ KRML_HOST_EXIT(255U);
+}
+
+/**
+ A portable SHA3 384 implementation.
+*/
+static KRML_MUSTINLINE void libcrux_sha3_neon_sha384(Eurydice_slice digest,
+ Eurydice_slice data) {
+ KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__,
+ "panic!");
+ KRML_HOST_EXIT(255U);
+}
+
+/**
+ A portable SHA3 512 implementation.
+*/
+static KRML_MUSTINLINE void libcrux_sha3_neon_sha512(Eurydice_slice digest,
+ Eurydice_slice data) {
+ KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__,
+ "panic!");
+ KRML_HOST_EXIT(255U);
+}
+
+/**
+ Run SHAKE256 on both inputs in parallel.
+
+ Writes the two results into `out0` and `out1`
+*/
+static KRML_MUSTINLINE void libcrux_sha3_neon_x2_shake256(Eurydice_slice input0,
+ Eurydice_slice input1,
+ Eurydice_slice out0,
+ Eurydice_slice out1) {
+ KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__,
+ "panic!");
+ KRML_HOST_EXIT(255U);
+}
+
+typedef struct libcrux_sha3_neon_x2_incremental_KeccakState_s {
+ libcrux_sha3_generic_keccak_KeccakState_48 state[2U];
+} libcrux_sha3_neon_x2_incremental_KeccakState;
+
+/**
+ Initialise the `KeccakState2`.
+*/
+static KRML_MUSTINLINE libcrux_sha3_neon_x2_incremental_KeccakState
+libcrux_sha3_neon_x2_incremental_shake128_init(void) {
+ KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__,
+ "panic!");
+ KRML_HOST_EXIT(255U);
+}
+
+/**
+ Shake128 absorb `data0` and `data1` in the [`KeccakState`] `s`.
+*/
+static KRML_MUSTINLINE void
+libcrux_sha3_neon_x2_incremental_shake128_absorb_final(
+ libcrux_sha3_neon_x2_incremental_KeccakState *s, Eurydice_slice data0,
+ Eurydice_slice data1) {
+ KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__,
+ "panic!");
+ KRML_HOST_EXIT(255U);
+}
+
+/**
+ Squeeze 2 times the first three blocks in parallel in the
+ [`KeccakState`] and return the output in `out0` and `out1`.
+*/
+static KRML_MUSTINLINE void
+libcrux_sha3_neon_x2_incremental_shake128_squeeze_first_three_blocks(
+ libcrux_sha3_neon_x2_incremental_KeccakState *s, Eurydice_slice out0,
+ Eurydice_slice out1) {
+ KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__,
+ "panic!");
+ KRML_HOST_EXIT(255U);
+}
+
+/**
+ Squeeze 2 times the next block in parallel in the
+ [`KeccakState`] and return the output in `out0` and `out1`.
+*/
+static KRML_MUSTINLINE void
+libcrux_sha3_neon_x2_incremental_shake128_squeeze_next_block(
+ libcrux_sha3_neon_x2_incremental_KeccakState *s, Eurydice_slice out0,
+ Eurydice_slice out1) {
+ KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__,
+ "panic!");
+ KRML_HOST_EXIT(255U);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_first_five_blocks
+with types uint64_t
+with const generics
+- N= 1
+- RATE= 168
+*/
+static KRML_MUSTINLINE void
+libcrux_sha3_generic_keccak_squeeze_first_five_blocks_4f(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out[1U]) {
+ Eurydice_slice_uint8_t_1size_t__x2 uu____0 =
+ libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, (size_t)168U);
+ Eurydice_slice o0[1U];
+ memcpy(o0, uu____0.fst, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice o10[1U];
+ memcpy(o10, uu____0.snd, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_squeeze_first_block_841(s, o0);
+ Eurydice_slice_uint8_t_1size_t__x2 uu____1 =
+ libcrux_sha3_portable_keccak_split_at_mut_n_5a(o10, (size_t)168U);
+ Eurydice_slice o1[1U];
+ memcpy(o1, uu____1.fst, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice o20[1U];
+ memcpy(o20, uu____1.snd, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_squeeze_next_block_fc1(s, o1);
+ Eurydice_slice_uint8_t_1size_t__x2 uu____2 =
+ libcrux_sha3_portable_keccak_split_at_mut_n_5a(o20, (size_t)168U);
+ Eurydice_slice o2[1U];
+ memcpy(o2, uu____2.fst, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice o30[1U];
+ memcpy(o30, uu____2.snd, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_squeeze_next_block_fc1(s, o2);
+ Eurydice_slice_uint8_t_1size_t__x2 uu____3 =
+ libcrux_sha3_portable_keccak_split_at_mut_n_5a(o30, (size_t)168U);
+ Eurydice_slice o3[1U];
+ memcpy(o3, uu____3.fst, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice o4[1U];
+ memcpy(o4, uu____3.snd, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_squeeze_next_block_fc1(s, o3);
+ libcrux_sha3_generic_keccak_squeeze_next_block_fc1(s, o4);
+}
+
+/**
+ Squeeze five blocks
+*/
+static KRML_MUSTINLINE void
+libcrux_sha3_portable_incremental_shake128_squeeze_first_five_blocks(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out0) {
+ Eurydice_slice buf[1U] = {out0};
+ libcrux_sha3_generic_keccak_squeeze_first_five_blocks_4f(s, buf);
+}
+
+/**
+ Absorb some data for SHAKE-256 for the last time
+*/
+static KRML_MUSTINLINE void
+libcrux_sha3_portable_incremental_shake256_absorb_final(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice data) {
+ Eurydice_slice buf[1U] = {data};
+ libcrux_sha3_generic_keccak_absorb_final_c71(s, buf);
+}
+
+/**
+ Create a new SHAKE-256 state object.
+*/
+static KRML_MUSTINLINE libcrux_sha3_generic_keccak_KeccakState_48
+libcrux_sha3_portable_incremental_shake256_init(void) {
+ return libcrux_sha3_generic_keccak_new_1e_f4();
+}
+
+/**
+ Squeeze the first SHAKE-256 block
+*/
+static KRML_MUSTINLINE void
+libcrux_sha3_portable_incremental_shake256_squeeze_first_block(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out) {
+ Eurydice_slice buf[1U] = {out};
+ libcrux_sha3_generic_keccak_squeeze_first_block_840(s, buf);
+}
+
+/**
+ Squeeze the next SHAKE-256 block
+*/
+static KRML_MUSTINLINE void
+libcrux_sha3_portable_incremental_shake256_squeeze_next_block(
+ libcrux_sha3_generic_keccak_KeccakState_48 *s, Eurydice_slice out) {
+ Eurydice_slice buf[1U] = {out};
+ libcrux_sha3_generic_keccak_squeeze_next_block_fc0(s, buf);
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.KeccakXofState
+with types uint64_t
+with const generics
+- $1size_t
+- $136size_t
+*/
+typedef struct libcrux_sha3_generic_keccak_KeccakXofState_4f_s {
+ libcrux_sha3_generic_keccak_KeccakState_48 inner;
+ uint8_t buf[1U][136U];
+ size_t buf_len;
+ bool sponge;
+} libcrux_sha3_generic_keccak_KeccakXofState_4f;
+
+typedef libcrux_sha3_generic_keccak_KeccakXofState_4f
+ libcrux_sha3_portable_incremental_Shake256Absorb;
+
+/**
+ Consume the internal buffer and the required amount of the input to pad to
+ `RATE`.
+
+ Returns the `consumed` bytes from `inputs` if there's enough buffered
+ content to consume, and `0` otherwise.
+ If `consumed > 0` is returned, `self.buf` contains a full block to be
+ loaded.
+*/
+/**
+This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE,
+PARALLEL_LANES, RATE>[TraitClause@0]#2}
+*/
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.fill_buffer_9d
+with types uint64_t
+with const generics
+- PARALLEL_LANES= 1
+- RATE= 136
+*/
+static inline size_t libcrux_sha3_generic_keccak_fill_buffer_9d_b0(
+ libcrux_sha3_generic_keccak_KeccakXofState_4f *self,
+ Eurydice_slice inputs[1U]) {
+ size_t input_len = Eurydice_slice_len(inputs[0U], uint8_t);
+ size_t consumed = (size_t)0U;
+ if (self->buf_len > (size_t)0U) {
+ if (self->buf_len + input_len >= (size_t)136U) {
+ consumed = (size_t)136U - self->buf_len;
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ Eurydice_slice uu____0 = Eurydice_array_to_subslice_from(
+ (size_t)136U, self->buf[i0], self->buf_len, uint8_t, size_t);
+ Eurydice_slice_copy(
+ uu____0,
+ Eurydice_slice_subslice_to(inputs[i0], consumed, uint8_t, size_t),
+ uint8_t);
+ }
+ self->buf_len = self->buf_len + consumed;
+ }
+ }
+ return consumed;
+}
+
+/**
+This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE,
+PARALLEL_LANES, RATE>[TraitClause@0]#2}
+*/
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.absorb_full_9d
+with types uint64_t
+with const generics
+- PARALLEL_LANES= 1
+- RATE= 136
+*/
+static inline size_t libcrux_sha3_generic_keccak_absorb_full_9d_f8(
+ libcrux_sha3_generic_keccak_KeccakXofState_4f *self,
+ Eurydice_slice inputs[1U]) {
+ libcrux_sha3_generic_keccak_KeccakXofState_4f *uu____0 = self;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_inputs0[1U];
+ memcpy(copy_of_inputs0, inputs, (size_t)1U * sizeof(Eurydice_slice));
+ size_t input_consumed =
+ libcrux_sha3_generic_keccak_fill_buffer_9d_b0(uu____0, copy_of_inputs0);
+ if (input_consumed > (size_t)0U) {
+ Eurydice_slice borrowed[1U];
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ uint8_t buf[136U] = {0U};
+ borrowed[i] = core_array___Array_T__N__23__as_slice(
+ (size_t)136U, buf, uint8_t, Eurydice_slice);
+ }
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ borrowed[i0] =
+ Eurydice_array_to_slice((size_t)136U, self->buf[i0], uint8_t);
+ }
+ uint64_t(*uu____2)[5U] = self->inner.st;
+ Eurydice_slice uu____3[1U];
+ memcpy(uu____3, borrowed, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_portable_keccak_load_block_5a_b80(uu____2, uu____3);
+ libcrux_sha3_generic_keccak_keccakf1600_21(&self->inner);
+ self->buf_len = (size_t)0U;
+ }
+ size_t input_to_consume =
+ Eurydice_slice_len(inputs[0U], uint8_t) - input_consumed;
+ size_t num_blocks = input_to_consume / (size_t)136U;
+ size_t remainder = input_to_consume % (size_t)136U;
+ for (size_t i = (size_t)0U; i < num_blocks; i++) {
+ size_t i0 = i;
+ uint64_t(*uu____4)[5U] = self->inner.st;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_inputs[1U];
+ memcpy(copy_of_inputs, inputs, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice ret[1U];
+ libcrux_sha3_portable_keccak_slice_n_5a(
+ copy_of_inputs, input_consumed + i0 * (size_t)136U, (size_t)136U, ret);
+ libcrux_sha3_portable_keccak_load_block_5a_b80(uu____4, ret);
+ libcrux_sha3_generic_keccak_keccakf1600_21(&self->inner);
+ }
+ return remainder;
+}
+
+/**
+ Absorb
+
+ This function takes any number of bytes to absorb and buffers if it's not
+ enough. The function assumes that all input slices in `blocks` have the same
+ length.
+
+ Only a multiple of `RATE` blocks are absorbed.
+ For the remaining bytes [`absorb_final`] needs to be called.
+
+ This works best with relatively small `inputs`.
+*/
+/**
+This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE,
+PARALLEL_LANES, RATE>[TraitClause@0]#2}
+*/
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.absorb_9d
+with types uint64_t
+with const generics
+- PARALLEL_LANES= 1
+- RATE= 136
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_absorb_9d_7b(
+ libcrux_sha3_generic_keccak_KeccakXofState_4f *self,
+ Eurydice_slice inputs[1U]) {
+ libcrux_sha3_generic_keccak_KeccakXofState_4f *uu____0 = self;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_inputs[1U];
+ memcpy(copy_of_inputs, inputs, (size_t)1U * sizeof(Eurydice_slice));
+ size_t input_remainder_len =
+ libcrux_sha3_generic_keccak_absorb_full_9d_f8(uu____0, copy_of_inputs);
+ if (input_remainder_len > (size_t)0U) {
+ size_t input_len = Eurydice_slice_len(inputs[0U], uint8_t);
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ Eurydice_slice uu____2 = Eurydice_array_to_subslice2(
+ self->buf[i0], self->buf_len, self->buf_len + input_remainder_len,
+ uint8_t);
+ Eurydice_slice_copy(
+ uu____2,
+ Eurydice_slice_subslice_from(
+ inputs[i0], input_len - input_remainder_len, uint8_t, size_t),
+ uint8_t);
+ }
+ self->buf_len = self->buf_len + input_remainder_len;
+ }
+}
+
+/**
+ Shake256 absorb
+*/
+/**
+This function found in impl
+{(libcrux_sha3::portable::incremental::XofAbsorb<136: usize> for
+libcrux_sha3::portable::incremental::Shake256Absorb)#2}
+*/
+static inline void libcrux_sha3_portable_incremental_absorb_7d(
+ libcrux_sha3_generic_keccak_KeccakXofState_4f *self, Eurydice_slice input) {
+ Eurydice_slice buf[1U] = {input};
+ libcrux_sha3_generic_keccak_absorb_9d_7b(self, buf);
+}
+
+typedef libcrux_sha3_generic_keccak_KeccakXofState_4f
+ libcrux_sha3_portable_incremental_Shake256Squeeze;
+
+/**
+ Absorb a final block.
+
+ The `inputs` block may be empty. Everything in the `inputs` block beyond
+ `RATE` bytes is ignored.
+*/
+/**
+This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE,
+PARALLEL_LANES, RATE>[TraitClause@0]#2}
+*/
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_9d
+with types uint64_t
+with const generics
+- PARALLEL_LANES= 1
+- RATE= 136
+- DELIMITER= 31
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_absorb_final_9d_25(
+ libcrux_sha3_generic_keccak_KeccakXofState_4f *self,
+ Eurydice_slice inputs[1U]) {
+ libcrux_sha3_generic_keccak_KeccakXofState_4f *uu____0 = self;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_inputs[1U];
+ memcpy(copy_of_inputs, inputs, (size_t)1U * sizeof(Eurydice_slice));
+ size_t input_remainder_len =
+ libcrux_sha3_generic_keccak_absorb_full_9d_f8(uu____0, copy_of_inputs);
+ size_t input_len = Eurydice_slice_len(inputs[0U], uint8_t);
+ uint8_t blocks[1U][200U] = {{0U}};
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ if (self->buf_len > (size_t)0U) {
+ Eurydice_slice uu____2 = Eurydice_array_to_subslice2(
+ blocks[i0], (size_t)0U, self->buf_len, uint8_t);
+ Eurydice_slice_copy(uu____2,
+ Eurydice_array_to_subslice2(self->buf[i0], (size_t)0U,
+ self->buf_len, uint8_t),
+ uint8_t);
+ }
+ if (input_remainder_len > (size_t)0U) {
+ Eurydice_slice uu____3 = Eurydice_array_to_subslice2(
+ blocks[i0], self->buf_len, self->buf_len + input_remainder_len,
+ uint8_t);
+ Eurydice_slice_copy(
+ uu____3,
+ Eurydice_slice_subslice_from(
+ inputs[i0], input_len - input_remainder_len, uint8_t, size_t),
+ uint8_t);
+ }
+ blocks[i0][self->buf_len + input_remainder_len] = 31U;
+ size_t uu____4 = i0;
+ size_t uu____5 = (size_t)136U - (size_t)1U;
+ blocks[uu____4][uu____5] = (uint32_t)blocks[uu____4][uu____5] | 128U;
+ }
+ uint64_t(*uu____6)[5U] = self->inner.st;
+ uint8_t uu____7[1U][200U];
+ memcpy(uu____7, blocks, (size_t)1U * sizeof(uint8_t[200U]));
+ libcrux_sha3_portable_keccak_load_block_full_5a_d20(uu____6, uu____7);
+ libcrux_sha3_generic_keccak_keccakf1600_21(&self->inner);
+}
+
+/**
+ Shake256 absorb final
+*/
+/**
+This function found in impl
+{(libcrux_sha3::portable::incremental::XofAbsorb<136: usize> for
+libcrux_sha3::portable::incremental::Shake256Absorb)#2}
+*/
+static inline libcrux_sha3_generic_keccak_KeccakXofState_4f
+libcrux_sha3_portable_incremental_absorb_final_7d(
+ libcrux_sha3_generic_keccak_KeccakXofState_4f self, Eurydice_slice input) {
+ Eurydice_slice buf[1U] = {input};
+ libcrux_sha3_generic_keccak_absorb_final_9d_25(&self, buf);
+ return self;
+}
+
+/**
+ An all zero block
+*/
+/**
+This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE,
+PARALLEL_LANES, RATE>[TraitClause@0]#2}
+*/
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.zero_block_9d
+with types uint64_t
+with const generics
+- PARALLEL_LANES= 1
+- RATE= 136
+*/
+static inline void libcrux_sha3_generic_keccak_zero_block_9d_e6(
+ uint8_t ret[136U]) {
+ ret[0U] = 0U;
+ ret[1U] = 0U;
+ ret[2U] = 0U;
+ ret[3U] = 0U;
+ ret[4U] = 0U;
+ ret[5U] = 0U;
+ ret[6U] = 0U;
+ ret[7U] = 0U;
+ ret[8U] = 0U;
+ ret[9U] = 0U;
+ ret[10U] = 0U;
+ ret[11U] = 0U;
+ ret[12U] = 0U;
+ ret[13U] = 0U;
+ ret[14U] = 0U;
+ ret[15U] = 0U;
+ ret[16U] = 0U;
+ ret[17U] = 0U;
+ ret[18U] = 0U;
+ ret[19U] = 0U;
+ ret[20U] = 0U;
+ ret[21U] = 0U;
+ ret[22U] = 0U;
+ ret[23U] = 0U;
+ ret[24U] = 0U;
+ ret[25U] = 0U;
+ ret[26U] = 0U;
+ ret[27U] = 0U;
+ ret[28U] = 0U;
+ ret[29U] = 0U;
+ ret[30U] = 0U;
+ ret[31U] = 0U;
+ ret[32U] = 0U;
+ ret[33U] = 0U;
+ ret[34U] = 0U;
+ ret[35U] = 0U;
+ ret[36U] = 0U;
+ ret[37U] = 0U;
+ ret[38U] = 0U;
+ ret[39U] = 0U;
+ ret[40U] = 0U;
+ ret[41U] = 0U;
+ ret[42U] = 0U;
+ ret[43U] = 0U;
+ ret[44U] = 0U;
+ ret[45U] = 0U;
+ ret[46U] = 0U;
+ ret[47U] = 0U;
+ ret[48U] = 0U;
+ ret[49U] = 0U;
+ ret[50U] = 0U;
+ ret[51U] = 0U;
+ ret[52U] = 0U;
+ ret[53U] = 0U;
+ ret[54U] = 0U;
+ ret[55U] = 0U;
+ ret[56U] = 0U;
+ ret[57U] = 0U;
+ ret[58U] = 0U;
+ ret[59U] = 0U;
+ ret[60U] = 0U;
+ ret[61U] = 0U;
+ ret[62U] = 0U;
+ ret[63U] = 0U;
+ ret[64U] = 0U;
+ ret[65U] = 0U;
+ ret[66U] = 0U;
+ ret[67U] = 0U;
+ ret[68U] = 0U;
+ ret[69U] = 0U;
+ ret[70U] = 0U;
+ ret[71U] = 0U;
+ ret[72U] = 0U;
+ ret[73U] = 0U;
+ ret[74U] = 0U;
+ ret[75U] = 0U;
+ ret[76U] = 0U;
+ ret[77U] = 0U;
+ ret[78U] = 0U;
+ ret[79U] = 0U;
+ ret[80U] = 0U;
+ ret[81U] = 0U;
+ ret[82U] = 0U;
+ ret[83U] = 0U;
+ ret[84U] = 0U;
+ ret[85U] = 0U;
+ ret[86U] = 0U;
+ ret[87U] = 0U;
+ ret[88U] = 0U;
+ ret[89U] = 0U;
+ ret[90U] = 0U;
+ ret[91U] = 0U;
+ ret[92U] = 0U;
+ ret[93U] = 0U;
+ ret[94U] = 0U;
+ ret[95U] = 0U;
+ ret[96U] = 0U;
+ ret[97U] = 0U;
+ ret[98U] = 0U;
+ ret[99U] = 0U;
+ ret[100U] = 0U;
+ ret[101U] = 0U;
+ ret[102U] = 0U;
+ ret[103U] = 0U;
+ ret[104U] = 0U;
+ ret[105U] = 0U;
+ ret[106U] = 0U;
+ ret[107U] = 0U;
+ ret[108U] = 0U;
+ ret[109U] = 0U;
+ ret[110U] = 0U;
+ ret[111U] = 0U;
+ ret[112U] = 0U;
+ ret[113U] = 0U;
+ ret[114U] = 0U;
+ ret[115U] = 0U;
+ ret[116U] = 0U;
+ ret[117U] = 0U;
+ ret[118U] = 0U;
+ ret[119U] = 0U;
+ ret[120U] = 0U;
+ ret[121U] = 0U;
+ ret[122U] = 0U;
+ ret[123U] = 0U;
+ ret[124U] = 0U;
+ ret[125U] = 0U;
+ ret[126U] = 0U;
+ ret[127U] = 0U;
+ ret[128U] = 0U;
+ ret[129U] = 0U;
+ ret[130U] = 0U;
+ ret[131U] = 0U;
+ ret[132U] = 0U;
+ ret[133U] = 0U;
+ ret[134U] = 0U;
+ ret[135U] = 0U;
+}
+
+/**
+ Generate a new keccak xof state.
+*/
+/**
+This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE,
+PARALLEL_LANES, RATE>[TraitClause@0]#2}
+*/
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.new_9d
+with types uint64_t
+with const generics
+- PARALLEL_LANES= 1
+- RATE= 136
+*/
+static inline libcrux_sha3_generic_keccak_KeccakXofState_4f
+libcrux_sha3_generic_keccak_new_9d_7e(void) {
+ libcrux_sha3_generic_keccak_KeccakXofState_4f lit;
+ lit.inner = libcrux_sha3_generic_keccak_new_1e_f4();
+ uint8_t ret[136U];
+ libcrux_sha3_generic_keccak_zero_block_9d_e6(ret);
+ memcpy(lit.buf[0U], ret, (size_t)136U * sizeof(uint8_t));
+ lit.buf_len = (size_t)0U;
+ lit.sponge = false;
+ return lit;
+}
+
+/**
+ Shake256 new state
+*/
+/**
+This function found in impl
+{(libcrux_sha3::portable::incremental::XofAbsorb<136: usize> for
+libcrux_sha3::portable::incremental::Shake256Absorb)#2}
+*/
+static inline libcrux_sha3_generic_keccak_KeccakXofState_4f
+libcrux_sha3_portable_incremental_new_7d(void) {
+ return libcrux_sha3_generic_keccak_new_9d_7e();
+}
+
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.KeccakXofState
+with types uint64_t
+with const generics
+- $1size_t
+- $168size_t
+*/
+typedef struct libcrux_sha3_generic_keccak_KeccakXofState_78_s {
+ libcrux_sha3_generic_keccak_KeccakState_48 inner;
+ uint8_t buf[1U][168U];
+ size_t buf_len;
+ bool sponge;
+} libcrux_sha3_generic_keccak_KeccakXofState_78;
+
+typedef libcrux_sha3_generic_keccak_KeccakXofState_78
+ libcrux_sha3_portable_incremental_Shake128Absorb;
+
+/**
+ Consume the internal buffer and the required amount of the input to pad to
+ `RATE`.
+
+ Returns the `consumed` bytes from `inputs` if there's enough buffered
+ content to consume, and `0` otherwise.
+ If `consumed > 0` is returned, `self.buf` contains a full block to be
+ loaded.
+*/
+/**
+This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE,
+PARALLEL_LANES, RATE>[TraitClause@0]#2}
+*/
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.fill_buffer_9d
+with types uint64_t
+with const generics
+- PARALLEL_LANES= 1
+- RATE= 168
+*/
+static inline size_t libcrux_sha3_generic_keccak_fill_buffer_9d_b00(
+ libcrux_sha3_generic_keccak_KeccakXofState_78 *self,
+ Eurydice_slice inputs[1U]) {
+ size_t input_len = Eurydice_slice_len(inputs[0U], uint8_t);
+ size_t consumed = (size_t)0U;
+ if (self->buf_len > (size_t)0U) {
+ if (self->buf_len + input_len >= (size_t)168U) {
+ consumed = (size_t)168U - self->buf_len;
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ Eurydice_slice uu____0 = Eurydice_array_to_subslice_from(
+ (size_t)168U, self->buf[i0], self->buf_len, uint8_t, size_t);
+ Eurydice_slice_copy(
+ uu____0,
+ Eurydice_slice_subslice_to(inputs[i0], consumed, uint8_t, size_t),
+ uint8_t);
+ }
+ self->buf_len = self->buf_len + consumed;
+ }
+ }
+ return consumed;
+}
+
+/**
+This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE,
+PARALLEL_LANES, RATE>[TraitClause@0]#2}
+*/
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.absorb_full_9d
+with types uint64_t
+with const generics
+- PARALLEL_LANES= 1
+- RATE= 168
+*/
+static inline size_t libcrux_sha3_generic_keccak_absorb_full_9d_f80(
+ libcrux_sha3_generic_keccak_KeccakXofState_78 *self,
+ Eurydice_slice inputs[1U]) {
+ libcrux_sha3_generic_keccak_KeccakXofState_78 *uu____0 = self;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_inputs0[1U];
+ memcpy(copy_of_inputs0, inputs, (size_t)1U * sizeof(Eurydice_slice));
+ size_t input_consumed =
+ libcrux_sha3_generic_keccak_fill_buffer_9d_b00(uu____0, copy_of_inputs0);
+ if (input_consumed > (size_t)0U) {
+ Eurydice_slice borrowed[1U];
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ uint8_t buf[168U] = {0U};
+ borrowed[i] = core_array___Array_T__N__23__as_slice(
+ (size_t)168U, buf, uint8_t, Eurydice_slice);
+ }
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ borrowed[i0] =
+ Eurydice_array_to_slice((size_t)168U, self->buf[i0], uint8_t);
+ }
+ uint64_t(*uu____2)[5U] = self->inner.st;
+ Eurydice_slice uu____3[1U];
+ memcpy(uu____3, borrowed, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_portable_keccak_load_block_5a_b83(uu____2, uu____3);
+ libcrux_sha3_generic_keccak_keccakf1600_21(&self->inner);
+ self->buf_len = (size_t)0U;
+ }
+ size_t input_to_consume =
+ Eurydice_slice_len(inputs[0U], uint8_t) - input_consumed;
+ size_t num_blocks = input_to_consume / (size_t)168U;
+ size_t remainder = input_to_consume % (size_t)168U;
+ for (size_t i = (size_t)0U; i < num_blocks; i++) {
+ size_t i0 = i;
+ uint64_t(*uu____4)[5U] = self->inner.st;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_inputs[1U];
+ memcpy(copy_of_inputs, inputs, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice ret[1U];
+ libcrux_sha3_portable_keccak_slice_n_5a(
+ copy_of_inputs, input_consumed + i0 * (size_t)168U, (size_t)168U, ret);
+ libcrux_sha3_portable_keccak_load_block_5a_b83(uu____4, ret);
+ libcrux_sha3_generic_keccak_keccakf1600_21(&self->inner);
+ }
+ return remainder;
+}
+
+/**
+ Absorb
+
+ This function takes any number of bytes to absorb and buffers if it's not
+ enough. The function assumes that all input slices in `blocks` have the same
+ length.
+
+ Only a multiple of `RATE` blocks are absorbed.
+ For the remaining bytes [`absorb_final`] needs to be called.
+
+ This works best with relatively small `inputs`.
+*/
+/**
+This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE,
+PARALLEL_LANES, RATE>[TraitClause@0]#2}
+*/
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.absorb_9d
+with types uint64_t
+with const generics
+- PARALLEL_LANES= 1
+- RATE= 168
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_absorb_9d_7b0(
+ libcrux_sha3_generic_keccak_KeccakXofState_78 *self,
+ Eurydice_slice inputs[1U]) {
+ libcrux_sha3_generic_keccak_KeccakXofState_78 *uu____0 = self;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_inputs[1U];
+ memcpy(copy_of_inputs, inputs, (size_t)1U * sizeof(Eurydice_slice));
+ size_t input_remainder_len =
+ libcrux_sha3_generic_keccak_absorb_full_9d_f80(uu____0, copy_of_inputs);
+ if (input_remainder_len > (size_t)0U) {
+ size_t input_len = Eurydice_slice_len(inputs[0U], uint8_t);
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ Eurydice_slice uu____2 = Eurydice_array_to_subslice2(
+ self->buf[i0], self->buf_len, self->buf_len + input_remainder_len,
+ uint8_t);
+ Eurydice_slice_copy(
+ uu____2,
+ Eurydice_slice_subslice_from(
+ inputs[i0], input_len - input_remainder_len, uint8_t, size_t),
+ uint8_t);
+ }
+ self->buf_len = self->buf_len + input_remainder_len;
+ }
+}
+
+/**
+This function found in impl
+{(libcrux_sha3::portable::incremental::XofAbsorb<168: usize> for
+libcrux_sha3::portable::incremental::Shake128Absorb)}
+*/
+static inline void libcrux_sha3_portable_incremental_absorb_1c(
+ libcrux_sha3_generic_keccak_KeccakXofState_78 *self, Eurydice_slice input) {
+ Eurydice_slice buf[1U] = {input};
+ libcrux_sha3_generic_keccak_absorb_9d_7b0(self, buf);
+}
+
+typedef libcrux_sha3_generic_keccak_KeccakXofState_78
+ libcrux_sha3_portable_incremental_Shake128Squeeze;
+
+/**
+ Absorb a final block.
+
+ The `inputs` block may be empty. Everything in the `inputs` block beyond
+ `RATE` bytes is ignored.
+*/
+/**
+This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE,
+PARALLEL_LANES, RATE>[TraitClause@0]#2}
+*/
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.absorb_final_9d
+with types uint64_t
+with const generics
+- PARALLEL_LANES= 1
+- RATE= 168
+- DELIMITER= 31
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_absorb_final_9d_250(
+ libcrux_sha3_generic_keccak_KeccakXofState_78 *self,
+ Eurydice_slice inputs[1U]) {
+ libcrux_sha3_generic_keccak_KeccakXofState_78 *uu____0 = self;
+ /* Passing arrays by value in Rust generates a copy in C */
+ Eurydice_slice copy_of_inputs[1U];
+ memcpy(copy_of_inputs, inputs, (size_t)1U * sizeof(Eurydice_slice));
+ size_t input_remainder_len =
+ libcrux_sha3_generic_keccak_absorb_full_9d_f80(uu____0, copy_of_inputs);
+ size_t input_len = Eurydice_slice_len(inputs[0U], uint8_t);
+ uint8_t blocks[1U][200U] = {{0U}};
+ for (size_t i = (size_t)0U; i < (size_t)1U; i++) {
+ size_t i0 = i;
+ if (self->buf_len > (size_t)0U) {
+ Eurydice_slice uu____2 = Eurydice_array_to_subslice2(
+ blocks[i0], (size_t)0U, self->buf_len, uint8_t);
+ Eurydice_slice_copy(uu____2,
+ Eurydice_array_to_subslice2(self->buf[i0], (size_t)0U,
+ self->buf_len, uint8_t),
+ uint8_t);
+ }
+ if (input_remainder_len > (size_t)0U) {
+ Eurydice_slice uu____3 = Eurydice_array_to_subslice2(
+ blocks[i0], self->buf_len, self->buf_len + input_remainder_len,
+ uint8_t);
+ Eurydice_slice_copy(
+ uu____3,
+ Eurydice_slice_subslice_from(
+ inputs[i0], input_len - input_remainder_len, uint8_t, size_t),
+ uint8_t);
+ }
+ blocks[i0][self->buf_len + input_remainder_len] = 31U;
+ size_t uu____4 = i0;
+ size_t uu____5 = (size_t)168U - (size_t)1U;
+ blocks[uu____4][uu____5] = (uint32_t)blocks[uu____4][uu____5] | 128U;
+ }
+ uint64_t(*uu____6)[5U] = self->inner.st;
+ uint8_t uu____7[1U][200U];
+ memcpy(uu____7, blocks, (size_t)1U * sizeof(uint8_t[200U]));
+ libcrux_sha3_portable_keccak_load_block_full_5a_d21(uu____6, uu____7);
+ libcrux_sha3_generic_keccak_keccakf1600_21(&self->inner);
+}
+
+/**
+This function found in impl
+{(libcrux_sha3::portable::incremental::XofAbsorb<168: usize> for
+libcrux_sha3::portable::incremental::Shake128Absorb)}
+*/
+static inline libcrux_sha3_generic_keccak_KeccakXofState_78
+libcrux_sha3_portable_incremental_absorb_final_1c(
+ libcrux_sha3_generic_keccak_KeccakXofState_78 self, Eurydice_slice input) {
+ Eurydice_slice buf[1U] = {input};
+ libcrux_sha3_generic_keccak_absorb_final_9d_250(&self, buf);
+ return self;
+}
+
+/**
+ An all zero block
+*/
+/**
+This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE,
+PARALLEL_LANES, RATE>[TraitClause@0]#2}
+*/
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.zero_block_9d
+with types uint64_t
+with const generics
+- PARALLEL_LANES= 1
+- RATE= 168
+*/
+static inline void libcrux_sha3_generic_keccak_zero_block_9d_e60(
+ uint8_t ret[168U]) {
+ ret[0U] = 0U;
+ ret[1U] = 0U;
+ ret[2U] = 0U;
+ ret[3U] = 0U;
+ ret[4U] = 0U;
+ ret[5U] = 0U;
+ ret[6U] = 0U;
+ ret[7U] = 0U;
+ ret[8U] = 0U;
+ ret[9U] = 0U;
+ ret[10U] = 0U;
+ ret[11U] = 0U;
+ ret[12U] = 0U;
+ ret[13U] = 0U;
+ ret[14U] = 0U;
+ ret[15U] = 0U;
+ ret[16U] = 0U;
+ ret[17U] = 0U;
+ ret[18U] = 0U;
+ ret[19U] = 0U;
+ ret[20U] = 0U;
+ ret[21U] = 0U;
+ ret[22U] = 0U;
+ ret[23U] = 0U;
+ ret[24U] = 0U;
+ ret[25U] = 0U;
+ ret[26U] = 0U;
+ ret[27U] = 0U;
+ ret[28U] = 0U;
+ ret[29U] = 0U;
+ ret[30U] = 0U;
+ ret[31U] = 0U;
+ ret[32U] = 0U;
+ ret[33U] = 0U;
+ ret[34U] = 0U;
+ ret[35U] = 0U;
+ ret[36U] = 0U;
+ ret[37U] = 0U;
+ ret[38U] = 0U;
+ ret[39U] = 0U;
+ ret[40U] = 0U;
+ ret[41U] = 0U;
+ ret[42U] = 0U;
+ ret[43U] = 0U;
+ ret[44U] = 0U;
+ ret[45U] = 0U;
+ ret[46U] = 0U;
+ ret[47U] = 0U;
+ ret[48U] = 0U;
+ ret[49U] = 0U;
+ ret[50U] = 0U;
+ ret[51U] = 0U;
+ ret[52U] = 0U;
+ ret[53U] = 0U;
+ ret[54U] = 0U;
+ ret[55U] = 0U;
+ ret[56U] = 0U;
+ ret[57U] = 0U;
+ ret[58U] = 0U;
+ ret[59U] = 0U;
+ ret[60U] = 0U;
+ ret[61U] = 0U;
+ ret[62U] = 0U;
+ ret[63U] = 0U;
+ ret[64U] = 0U;
+ ret[65U] = 0U;
+ ret[66U] = 0U;
+ ret[67U] = 0U;
+ ret[68U] = 0U;
+ ret[69U] = 0U;
+ ret[70U] = 0U;
+ ret[71U] = 0U;
+ ret[72U] = 0U;
+ ret[73U] = 0U;
+ ret[74U] = 0U;
+ ret[75U] = 0U;
+ ret[76U] = 0U;
+ ret[77U] = 0U;
+ ret[78U] = 0U;
+ ret[79U] = 0U;
+ ret[80U] = 0U;
+ ret[81U] = 0U;
+ ret[82U] = 0U;
+ ret[83U] = 0U;
+ ret[84U] = 0U;
+ ret[85U] = 0U;
+ ret[86U] = 0U;
+ ret[87U] = 0U;
+ ret[88U] = 0U;
+ ret[89U] = 0U;
+ ret[90U] = 0U;
+ ret[91U] = 0U;
+ ret[92U] = 0U;
+ ret[93U] = 0U;
+ ret[94U] = 0U;
+ ret[95U] = 0U;
+ ret[96U] = 0U;
+ ret[97U] = 0U;
+ ret[98U] = 0U;
+ ret[99U] = 0U;
+ ret[100U] = 0U;
+ ret[101U] = 0U;
+ ret[102U] = 0U;
+ ret[103U] = 0U;
+ ret[104U] = 0U;
+ ret[105U] = 0U;
+ ret[106U] = 0U;
+ ret[107U] = 0U;
+ ret[108U] = 0U;
+ ret[109U] = 0U;
+ ret[110U] = 0U;
+ ret[111U] = 0U;
+ ret[112U] = 0U;
+ ret[113U] = 0U;
+ ret[114U] = 0U;
+ ret[115U] = 0U;
+ ret[116U] = 0U;
+ ret[117U] = 0U;
+ ret[118U] = 0U;
+ ret[119U] = 0U;
+ ret[120U] = 0U;
+ ret[121U] = 0U;
+ ret[122U] = 0U;
+ ret[123U] = 0U;
+ ret[124U] = 0U;
+ ret[125U] = 0U;
+ ret[126U] = 0U;
+ ret[127U] = 0U;
+ ret[128U] = 0U;
+ ret[129U] = 0U;
+ ret[130U] = 0U;
+ ret[131U] = 0U;
+ ret[132U] = 0U;
+ ret[133U] = 0U;
+ ret[134U] = 0U;
+ ret[135U] = 0U;
+ ret[136U] = 0U;
+ ret[137U] = 0U;
+ ret[138U] = 0U;
+ ret[139U] = 0U;
+ ret[140U] = 0U;
+ ret[141U] = 0U;
+ ret[142U] = 0U;
+ ret[143U] = 0U;
+ ret[144U] = 0U;
+ ret[145U] = 0U;
+ ret[146U] = 0U;
+ ret[147U] = 0U;
+ ret[148U] = 0U;
+ ret[149U] = 0U;
+ ret[150U] = 0U;
+ ret[151U] = 0U;
+ ret[152U] = 0U;
+ ret[153U] = 0U;
+ ret[154U] = 0U;
+ ret[155U] = 0U;
+ ret[156U] = 0U;
+ ret[157U] = 0U;
+ ret[158U] = 0U;
+ ret[159U] = 0U;
+ ret[160U] = 0U;
+ ret[161U] = 0U;
+ ret[162U] = 0U;
+ ret[163U] = 0U;
+ ret[164U] = 0U;
+ ret[165U] = 0U;
+ ret[166U] = 0U;
+ ret[167U] = 0U;
+}
+
+/**
+ Generate a new keccak xof state.
+*/
+/**
+This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE,
+PARALLEL_LANES, RATE>[TraitClause@0]#2}
+*/
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.new_9d
+with types uint64_t
+with const generics
+- PARALLEL_LANES= 1
+- RATE= 168
+*/
+static inline libcrux_sha3_generic_keccak_KeccakXofState_78
+libcrux_sha3_generic_keccak_new_9d_7e0(void) {
+ libcrux_sha3_generic_keccak_KeccakXofState_78 lit;
+ lit.inner = libcrux_sha3_generic_keccak_new_1e_f4();
+ uint8_t ret[168U];
+ libcrux_sha3_generic_keccak_zero_block_9d_e60(ret);
+ memcpy(lit.buf[0U], ret, (size_t)168U * sizeof(uint8_t));
+ lit.buf_len = (size_t)0U;
+ lit.sponge = false;
+ return lit;
+}
+
+/**
+This function found in impl
+{(libcrux_sha3::portable::incremental::XofAbsorb<168: usize> for
+libcrux_sha3::portable::incremental::Shake128Absorb)}
+*/
+static inline libcrux_sha3_generic_keccak_KeccakXofState_78
+libcrux_sha3_portable_incremental_new_1c(void) {
+ return libcrux_sha3_generic_keccak_new_9d_7e0();
+}
+
+/**
+ `out` has the exact size we want here. It must be less than or equal to `RATE`.
+*/
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.store_5a
+with const generics
+- RATE= 136
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_store_5a_1c(
+ uint64_t (*state)[5U], Eurydice_slice out[1U]) {
+ size_t num_full_blocks = Eurydice_slice_len(out[0U], uint8_t) / (size_t)8U;
+ size_t last_block_len = Eurydice_slice_len(out[0U], uint8_t) % (size_t)8U;
+ for (size_t i = (size_t)0U; i < num_full_blocks; i++) {
+ size_t i0 = i;
+ Eurydice_slice uu____0 = Eurydice_slice_subslice2(
+ out[0U], i0 * (size_t)8U, i0 * (size_t)8U + (size_t)8U, uint8_t);
+ uint8_t ret[8U];
+ core_num__u64_9__to_le_bytes(state[i0 / (size_t)5U][i0 % (size_t)5U], ret);
+ Eurydice_slice_copy(
+ uu____0, Eurydice_array_to_slice((size_t)8U, ret, uint8_t), uint8_t);
+ }
+ if (last_block_len != (size_t)0U) {
+ Eurydice_slice uu____1 = Eurydice_slice_subslice2(
+ out[0U], num_full_blocks * (size_t)8U,
+ num_full_blocks * (size_t)8U + last_block_len, uint8_t);
+ uint8_t ret[8U];
+ core_num__u64_9__to_le_bytes(
+ state[num_full_blocks / (size_t)5U][num_full_blocks % (size_t)5U], ret);
+ Eurydice_slice_copy(
+ uu____1,
+ Eurydice_array_to_subslice2(ret, (size_t)0U, last_block_len, uint8_t),
+ uint8_t);
+ }
+}
+
+/**
+ Squeeze `N` x `LEN` bytes.
+*/
+/**
+This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE,
+PARALLEL_LANES, RATE>[TraitClause@0]#2}
+*/
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_9d
+with types uint64_t
+with const generics
+- PARALLEL_LANES= 1
+- RATE= 136
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_squeeze_9d_96(
+ libcrux_sha3_generic_keccak_KeccakXofState_4f *self,
+ Eurydice_slice out[1U]) {
+ if (self->sponge) {
+ libcrux_sha3_generic_keccak_keccakf1600_21(&self->inner);
+ }
+ size_t out_len = Eurydice_slice_len(out[0U], uint8_t);
+ size_t blocks = out_len / (size_t)136U;
+ size_t last = out_len - out_len % (size_t)136U;
+ size_t mid;
+ if ((size_t)136U >= out_len) {
+ mid = out_len;
+ } else {
+ mid = (size_t)136U;
+ }
+ Eurydice_slice_uint8_t_1size_t__x2 uu____0 =
+ libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, mid);
+ Eurydice_slice out00[1U];
+ memcpy(out00, uu____0.fst, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice out_rest[1U];
+ memcpy(out_rest, uu____0.snd, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_portable_keccak_store_5a_1c(self->inner.st, out00);
+ core_ops_range_Range_b3 iter =
+ core_iter_traits_collect___core__iter__traits__collect__IntoIterator_for_I__1__into_iter(
+ (CLITERAL(core_ops_range_Range_b3){.start = (size_t)1U,
+ .end = blocks}),
+ core_ops_range_Range_b3, core_ops_range_Range_b3);
+ while (true) {
+ if (core_iter_range___core__iter__traits__iterator__Iterator_for_core__ops__range__Range_A___6__next(
+ &iter, size_t, Option_b3)
+ .tag == None) {
+ break;
+ } else {
+ Eurydice_slice_uint8_t_1size_t__x2 uu____1 =
+ libcrux_sha3_portable_keccak_split_at_mut_n_5a(out_rest,
+ (size_t)136U);
+ Eurydice_slice out0[1U];
+ memcpy(out0, uu____1.fst, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice tmp[1U];
+ memcpy(tmp, uu____1.snd, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_keccakf1600_21(&self->inner);
+ libcrux_sha3_portable_keccak_store_5a_1c(self->inner.st, out0);
+ memcpy(out_rest, tmp, (size_t)1U * sizeof(Eurydice_slice));
+ }
+ }
+ if (last < out_len) {
+ libcrux_sha3_generic_keccak_keccakf1600_21(&self->inner);
+ libcrux_sha3_portable_keccak_store_5a_1c(self->inner.st, out_rest);
+ }
+ self->sponge = true;
+}
+
+/**
+ Shake256 squeeze
+*/
+/**
+This function found in impl
+{(libcrux_sha3::portable::incremental::XofSqueeze<136: usize> for
+libcrux_sha3::portable::incremental::Shake256Squeeze)#3}
+*/
+static inline void libcrux_sha3_portable_incremental_squeeze_8a(
+ libcrux_sha3_generic_keccak_KeccakXofState_4f *self, Eurydice_slice out) {
+ Eurydice_slice buf[1U] = {out};
+ libcrux_sha3_generic_keccak_squeeze_9d_96(self, buf);
+}
+
+/**
+ `out` has the exact size we want here. It must be less than or equal to `RATE`.
+*/
+/**
+This function found in impl {(libcrux_sha3::traits::internal::KeccakItem<1:
+usize> for u64)}
+*/
+/**
+A monomorphic instance of libcrux_sha3.portable_keccak.store_5a
+with const generics
+- RATE= 168
+*/
+static KRML_MUSTINLINE void libcrux_sha3_portable_keccak_store_5a_1c0(
+ uint64_t (*state)[5U], Eurydice_slice out[1U]) {
+ size_t num_full_blocks = Eurydice_slice_len(out[0U], uint8_t) / (size_t)8U;
+ size_t last_block_len = Eurydice_slice_len(out[0U], uint8_t) % (size_t)8U;
+ for (size_t i = (size_t)0U; i < num_full_blocks; i++) {
+ size_t i0 = i;
+ Eurydice_slice uu____0 = Eurydice_slice_subslice2(
+ out[0U], i0 * (size_t)8U, i0 * (size_t)8U + (size_t)8U, uint8_t);
+ uint8_t ret[8U];
+ core_num__u64_9__to_le_bytes(state[i0 / (size_t)5U][i0 % (size_t)5U], ret);
+ Eurydice_slice_copy(
+ uu____0, Eurydice_array_to_slice((size_t)8U, ret, uint8_t), uint8_t);
+ }
+ if (last_block_len != (size_t)0U) {
+ Eurydice_slice uu____1 = Eurydice_slice_subslice2(
+ out[0U], num_full_blocks * (size_t)8U,
+ num_full_blocks * (size_t)8U + last_block_len, uint8_t);
+ uint8_t ret[8U];
+ core_num__u64_9__to_le_bytes(
+ state[num_full_blocks / (size_t)5U][num_full_blocks % (size_t)5U], ret);
+ Eurydice_slice_copy(
+ uu____1,
+ Eurydice_array_to_subslice2(ret, (size_t)0U, last_block_len, uint8_t),
+ uint8_t);
+ }
+}
+
+/**
+ Squeeze `N` x `LEN` bytes.
+*/
+/**
+This function found in impl {libcrux_sha3::generic_keccak::KeccakXofState<STATE,
+PARALLEL_LANES, RATE>[TraitClause@0]#2}
+*/
+/**
+A monomorphic instance of libcrux_sha3.generic_keccak.squeeze_9d
+with types uint64_t
+with const generics
+- PARALLEL_LANES= 1
+- RATE= 168
+*/
+static KRML_MUSTINLINE void libcrux_sha3_generic_keccak_squeeze_9d_960(
+ libcrux_sha3_generic_keccak_KeccakXofState_78 *self,
+ Eurydice_slice out[1U]) {
+ if (self->sponge) {
+ libcrux_sha3_generic_keccak_keccakf1600_21(&self->inner);
+ }
+ size_t out_len = Eurydice_slice_len(out[0U], uint8_t);
+ size_t blocks = out_len / (size_t)168U;
+ size_t last = out_len - out_len % (size_t)168U;
+ size_t mid;
+ if ((size_t)168U >= out_len) {
+ mid = out_len;
+ } else {
+ mid = (size_t)168U;
+ }
+ Eurydice_slice_uint8_t_1size_t__x2 uu____0 =
+ libcrux_sha3_portable_keccak_split_at_mut_n_5a(out, mid);
+ Eurydice_slice out00[1U];
+ memcpy(out00, uu____0.fst, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice out_rest[1U];
+ memcpy(out_rest, uu____0.snd, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_portable_keccak_store_5a_1c0(self->inner.st, out00);
+ core_ops_range_Range_b3 iter =
+ core_iter_traits_collect___core__iter__traits__collect__IntoIterator_for_I__1__into_iter(
+ (CLITERAL(core_ops_range_Range_b3){.start = (size_t)1U,
+ .end = blocks}),
+ core_ops_range_Range_b3, core_ops_range_Range_b3);
+ while (true) {
+ if (core_iter_range___core__iter__traits__iterator__Iterator_for_core__ops__range__Range_A___6__next(
+ &iter, size_t, Option_b3)
+ .tag == None) {
+ break;
+ } else {
+ Eurydice_slice_uint8_t_1size_t__x2 uu____1 =
+ libcrux_sha3_portable_keccak_split_at_mut_n_5a(out_rest,
+ (size_t)168U);
+ Eurydice_slice out0[1U];
+ memcpy(out0, uu____1.fst, (size_t)1U * sizeof(Eurydice_slice));
+ Eurydice_slice tmp[1U];
+ memcpy(tmp, uu____1.snd, (size_t)1U * sizeof(Eurydice_slice));
+ libcrux_sha3_generic_keccak_keccakf1600_21(&self->inner);
+ libcrux_sha3_portable_keccak_store_5a_1c0(self->inner.st, out0);
+ memcpy(out_rest, tmp, (size_t)1U * sizeof(Eurydice_slice));
+ }
+ }
+ if (last < out_len) {
+ libcrux_sha3_generic_keccak_keccakf1600_21(&self->inner);
+ libcrux_sha3_portable_keccak_store_5a_1c0(self->inner.st, out_rest);
+ }
+ self->sponge = true;
+}
+
+/**
+ Shake128 squeeze
+*/
+/**
+This function found in impl
+{(libcrux_sha3::portable::incremental::XofSqueeze<168: usize> for
+libcrux_sha3::portable::incremental::Shake128Squeeze)#1}
+*/
+static inline void libcrux_sha3_portable_incremental_squeeze_10(
+ libcrux_sha3_generic_keccak_KeccakXofState_78 *self, Eurydice_slice out) {
+ Eurydice_slice buf[1U] = {out};
+ libcrux_sha3_generic_keccak_squeeze_9d_960(self, buf);
+}
+
+/**
+This function found in impl {(core::clone::Clone for
+libcrux_sha3::portable::KeccakState)}
+*/
+static inline libcrux_sha3_generic_keccak_KeccakState_48
+libcrux_sha3_portable_clone_3d(
+ libcrux_sha3_generic_keccak_KeccakState_48 *self) {
+ return self[0U];
+}
+
+/**
+This function found in impl {(core::convert::From<libcrux_sha3::Algorithm> for
+u32)#1}
+*/
+static inline uint32_t libcrux_sha3_from_eb(libcrux_sha3_Algorithm v) {
+ uint32_t uu____0;
+ switch (v) {
+ case libcrux_sha3_Sha224: {
+ uu____0 = 1U;
+ break;
+ }
+ case libcrux_sha3_Sha256: {
+ uu____0 = 2U;
+ break;
+ }
+ case libcrux_sha3_Sha384: {
+ uu____0 = 3U;
+ break;
+ }
+ case libcrux_sha3_Sha512: {
+ uu____0 = 4U;
+ break;
+ }
+ default: {
+ KRML_HOST_EPRINTF("KaRaMeL incomplete match at %s:%d\n", __FILE__,
+ __LINE__);
+ KRML_HOST_EXIT(253U);
+ }
+ }
+ return uu____0;
+}
+
+/**
+This function found in impl {(core::convert::From<u32> for
+libcrux_sha3::Algorithm)}
+*/
+static inline libcrux_sha3_Algorithm libcrux_sha3_from_2d(uint32_t v) {
+ libcrux_sha3_Algorithm uu____0;
+ switch (v) {
+ case 1U: {
+ uu____0 = libcrux_sha3_Sha224;
+ break;
+ }
+ case 2U: {
+ uu____0 = libcrux_sha3_Sha256;
+ break;
+ }
+ case 3U: {
+ uu____0 = libcrux_sha3_Sha384;
+ break;
+ }
+ case 4U: {
+ uu____0 = libcrux_sha3_Sha512;
+ break;
+ }
+ default: {
+ KRML_HOST_EPRINTF("KaRaMeL abort at %s:%d\n%s\n", __FILE__, __LINE__,
+ "panic!");
+ KRML_HOST_EXIT(255U);
+ }
+ }
+ return uu____0;
+}
+
+typedef uint8_t libcrux_sha3_Sha3_512Digest[64U];
+
+typedef uint8_t libcrux_sha3_Sha3_384Digest[48U];
+
+typedef uint8_t libcrux_sha3_Sha3_256Digest[32U];
+
+typedef uint8_t libcrux_sha3_Sha3_224Digest[28U];
+
+#if defined(__cplusplus)
+}
+#endif
+
+#define __libcrux_sha3_portable_H_DEFINED
+#endif
+
+/* from libcrux/libcrux-ml-kem/cg/libcrux_mlkem768_portable.h */
+/*
+ * SPDX-FileCopyrightText: 2024 Cryspen Sarl <info@cryspen.com>
+ *
+ * SPDX-License-Identifier: MIT or Apache-2.0
+ *
+ * This code was generated with the following revisions:
+ * Charon: 6b5e110342a771a3e1c739b10294b1778e4be8b4
+ * Eurydice: 31be7d65ca5d6acdacfb33652e478d24dd85c1cb
+ * Karamel: 3205d3365ea2790b02368f79fcee38e38d0b5908
+ * F*: a32b316e521fa4f239b610ec8f1d15e78d62cbe8-dirty
+ * Libcrux: 4ad532b206174114dd4140b718e7794a28fc59ee
+ */
+
+#ifndef __libcrux_mlkem768_portable_H
+#define __libcrux_mlkem768_portable_H
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+
+#define LIBCRUX_ML_KEM_HASH_FUNCTIONS_BLOCK_SIZE ((size_t)168U)
+
+#define LIBCRUX_ML_KEM_HASH_FUNCTIONS_THREE_BLOCKS \
+ (LIBCRUX_ML_KEM_HASH_FUNCTIONS_BLOCK_SIZE * (size_t)3U)
+
+static KRML_MUSTINLINE void libcrux_ml_kem_hash_functions_portable_G(
+ Eurydice_slice input, uint8_t ret[64U]) {
+ uint8_t digest[64U] = {0U};
+ libcrux_sha3_portable_sha512(
+ Eurydice_array_to_slice((size_t)64U, digest, uint8_t), input);
+ memcpy(ret, digest, (size_t)64U * sizeof(uint8_t));
+}
+
+static KRML_MUSTINLINE void libcrux_ml_kem_hash_functions_portable_H(
+ Eurydice_slice input, uint8_t ret[32U]) {
+ uint8_t digest[32U] = {0U};
+ libcrux_sha3_portable_sha256(
+ Eurydice_array_to_slice((size_t)32U, digest, uint8_t), input);
+ memcpy(ret, digest, (size_t)32U * sizeof(uint8_t));
+}
+
+#define LIBCRUX_ML_KEM_IND_CCA_ENCAPS_SEED_SIZE \
+ (LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE)
+
+#define LIBCRUX_ML_KEM_IND_CCA_KEY_GENERATION_SEED_SIZE \
+ (LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE + \
+ LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE)
+
+typedef uint8_t libcrux_ml_kem_ind_cca_MlKemSharedSecret[32U];
+
+static const int16_t libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[128U] =
+ {(int16_t)-1044, (int16_t)-758, (int16_t)-359, (int16_t)-1517,
+ (int16_t)1493, (int16_t)1422, (int16_t)287, (int16_t)202,
+ (int16_t)-171, (int16_t)622, (int16_t)1577, (int16_t)182,
+ (int16_t)962, (int16_t)-1202, (int16_t)-1474, (int16_t)1468,
+ (int16_t)573, (int16_t)-1325, (int16_t)264, (int16_t)383,
+ (int16_t)-829, (int16_t)1458, (int16_t)-1602, (int16_t)-130,
+ (int16_t)-681, (int16_t)1017, (int16_t)732, (int16_t)608,
+ (int16_t)-1542, (int16_t)411, (int16_t)-205, (int16_t)-1571,
+ (int16_t)1223, (int16_t)652, (int16_t)-552, (int16_t)1015,
+ (int16_t)-1293, (int16_t)1491, (int16_t)-282, (int16_t)-1544,
+ (int16_t)516, (int16_t)-8, (int16_t)-320, (int16_t)-666,
+ (int16_t)-1618, (int16_t)-1162, (int16_t)126, (int16_t)1469,
+ (int16_t)-853, (int16_t)-90, (int16_t)-271, (int16_t)830,
+ (int16_t)107, (int16_t)-1421, (int16_t)-247, (int16_t)-951,
+ (int16_t)-398, (int16_t)961, (int16_t)-1508, (int16_t)-725,
+ (int16_t)448, (int16_t)-1065, (int16_t)677, (int16_t)-1275,
+ (int16_t)-1103, (int16_t)430, (int16_t)555, (int16_t)843,
+ (int16_t)-1251, (int16_t)871, (int16_t)1550, (int16_t)105,
+ (int16_t)422, (int16_t)587, (int16_t)177, (int16_t)-235,
+ (int16_t)-291, (int16_t)-460, (int16_t)1574, (int16_t)1653,
+ (int16_t)-246, (int16_t)778, (int16_t)1159, (int16_t)-147,
+ (int16_t)-777, (int16_t)1483, (int16_t)-602, (int16_t)1119,
+ (int16_t)-1590, (int16_t)644, (int16_t)-872, (int16_t)349,
+ (int16_t)418, (int16_t)329, (int16_t)-156, (int16_t)-75,
+ (int16_t)817, (int16_t)1097, (int16_t)603, (int16_t)610,
+ (int16_t)1322, (int16_t)-1285, (int16_t)-1465, (int16_t)384,
+ (int16_t)-1215, (int16_t)-136, (int16_t)1218, (int16_t)-1335,
+ (int16_t)-874, (int16_t)220, (int16_t)-1187, (int16_t)-1659,
+ (int16_t)-1185, (int16_t)-1530, (int16_t)-1278, (int16_t)794,
+ (int16_t)-1510, (int16_t)-854, (int16_t)-870, (int16_t)478,
+ (int16_t)-108, (int16_t)-308, (int16_t)996, (int16_t)991,
+ (int16_t)958, (int16_t)-1460, (int16_t)1522, (int16_t)1628};
+
+#define LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR ((size_t)16U)
+
+#define LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT \
+ (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / \
+ LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR)
+
+#define LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS ((int16_t)3329)
+
+#define LIBCRUX_ML_KEM_VECTOR_TRAITS_MONTGOMERY_R_SQUARED_MOD_FIELD_MODULUS \
+ ((int16_t)1353)
+
+#define LIBCRUX_ML_KEM_VECTOR_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R \
+ (62209U)
+
+typedef struct libcrux_ml_kem_vector_portable_vector_type_PortableVector_s {
+ int16_t elements[16U];
+} libcrux_ml_kem_vector_portable_vector_type_PortableVector;
+
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_vector_type_from_i16_array(
+ Eurydice_slice array) {
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector lit;
+ int16_t ret[16U];
+ Result_c0 dst;
+ Eurydice_slice_to_array2(
+ &dst, Eurydice_slice_subslice2(array, (size_t)0U, (size_t)16U, int16_t),
+ Eurydice_slice, int16_t[16U]);
+ unwrap_41_f9(dst, ret);
+ memcpy(lit.elements, ret, (size_t)16U * sizeof(int16_t));
+ return lit;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_from_i16_array_0d(Eurydice_slice array) {
+ return libcrux_ml_kem_vector_portable_vector_type_from_i16_array(array);
+}
+
+typedef struct uint8_t_x11_s {
+ uint8_t fst;
+ uint8_t snd;
+ uint8_t thd;
+ uint8_t f3;
+ uint8_t f4;
+ uint8_t f5;
+ uint8_t f6;
+ uint8_t f7;
+ uint8_t f8;
+ uint8_t f9;
+ uint8_t f10;
+} uint8_t_x11;
+
+static KRML_MUSTINLINE uint8_t_x11
+libcrux_ml_kem_vector_portable_serialize_serialize_11_int(Eurydice_slice v) {
+ uint8_t r0 = (uint8_t)Eurydice_slice_index(v, (size_t)0U, int16_t, int16_t *);
+ uint8_t r1 = (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)1U, int16_t,
+ int16_t *) &
+ (int16_t)31)
+ << 3U |
+ (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)0U, int16_t,
+ int16_t *) >>
+ 8U);
+ uint8_t r2 = (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)2U, int16_t,
+ int16_t *) &
+ (int16_t)3)
+ << 6U |
+ (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)1U, int16_t,
+ int16_t *) >>
+ 5U);
+ uint8_t r3 =
+ (uint8_t)(Eurydice_slice_index(v, (size_t)2U, int16_t, int16_t *) >> 2U &
+ (int16_t)255);
+ uint8_t r4 = (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)3U, int16_t,
+ int16_t *) &
+ (int16_t)127)
+ << 1U |
+ (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)2U, int16_t,
+ int16_t *) >>
+ 10U);
+ uint8_t r5 = (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)4U, int16_t,
+ int16_t *) &
+ (int16_t)15)
+ << 4U |
+ (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)3U, int16_t,
+ int16_t *) >>
+ 7U);
+ uint8_t r6 = (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)5U, int16_t,
+ int16_t *) &
+ (int16_t)1)
+ << 7U |
+ (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)4U, int16_t,
+ int16_t *) >>
+ 4U);
+ uint8_t r7 =
+ (uint8_t)(Eurydice_slice_index(v, (size_t)5U, int16_t, int16_t *) >> 1U &
+ (int16_t)255);
+ uint8_t r8 = (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)6U, int16_t,
+ int16_t *) &
+ (int16_t)63)
+ << 2U |
+ (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)5U, int16_t,
+ int16_t *) >>
+ 9U);
+ uint8_t r9 = (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)7U, int16_t,
+ int16_t *) &
+ (int16_t)7)
+ << 5U |
+ (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)6U, int16_t,
+ int16_t *) >>
+ 6U);
+ uint8_t r10 =
+ (uint8_t)(Eurydice_slice_index(v, (size_t)7U, int16_t, int16_t *) >> 3U);
+ return (CLITERAL(uint8_t_x11){.fst = r0,
+ .snd = r1,
+ .thd = r2,
+ .f3 = r3,
+ .f4 = r4,
+ .f5 = r5,
+ .f6 = r6,
+ .f7 = r7,
+ .f8 = r8,
+ .f9 = r9,
+ .f10 = r10});
+}
+
+static KRML_MUSTINLINE void
+libcrux_ml_kem_vector_portable_serialize_serialize_11(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v,
+ uint8_t ret[22U]) {
+ uint8_t_x11 r0_10 = libcrux_ml_kem_vector_portable_serialize_serialize_11_int(
+ Eurydice_array_to_subslice2(v.elements, (size_t)0U, (size_t)8U, int16_t));
+ uint8_t_x11 r11_21 =
+ libcrux_ml_kem_vector_portable_serialize_serialize_11_int(
+ Eurydice_array_to_subslice2(v.elements, (size_t)8U, (size_t)16U,
+ int16_t));
+ uint8_t result[22U] = {0U};
+ result[0U] = r0_10.fst;
+ result[1U] = r0_10.snd;
+ result[2U] = r0_10.thd;
+ result[3U] = r0_10.f3;
+ result[4U] = r0_10.f4;
+ result[5U] = r0_10.f5;
+ result[6U] = r0_10.f6;
+ result[7U] = r0_10.f7;
+ result[8U] = r0_10.f8;
+ result[9U] = r0_10.f9;
+ result[10U] = r0_10.f10;
+ result[11U] = r11_21.fst;
+ result[12U] = r11_21.snd;
+ result[13U] = r11_21.thd;
+ result[14U] = r11_21.f3;
+ result[15U] = r11_21.f4;
+ result[16U] = r11_21.f5;
+ result[17U] = r11_21.f6;
+ result[18U] = r11_21.f7;
+ result[19U] = r11_21.f8;
+ result[20U] = r11_21.f9;
+ result[21U] = r11_21.f10;
+ memcpy(ret, result, (size_t)22U * sizeof(uint8_t));
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline void libcrux_ml_kem_vector_portable_serialize_11_0d(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector a,
+ uint8_t ret[22U]) {
+ libcrux_ml_kem_vector_portable_serialize_serialize_11(a, ret);
+}
+
+typedef struct int16_t_x8_s {
+ int16_t fst;
+ int16_t snd;
+ int16_t thd;
+ int16_t f3;
+ int16_t f4;
+ int16_t f5;
+ int16_t f6;
+ int16_t f7;
+} int16_t_x8;
+
+static KRML_MUSTINLINE int16_t_x8
+libcrux_ml_kem_vector_portable_serialize_deserialize_11_int(
+ Eurydice_slice bytes) {
+ int16_t r0 =
+ ((int16_t)Eurydice_slice_index(bytes, (size_t)1U, uint8_t, uint8_t *) &
+ (int16_t)7)
+ << 8U |
+ (int16_t)Eurydice_slice_index(bytes, (size_t)0U, uint8_t, uint8_t *);
+ int16_t r1 =
+ ((int16_t)Eurydice_slice_index(bytes, (size_t)2U, uint8_t, uint8_t *) &
+ (int16_t)63)
+ << 5U |
+ (int16_t)Eurydice_slice_index(bytes, (size_t)1U, uint8_t, uint8_t *) >>
+ 3U;
+ int16_t r2 =
+ (((int16_t)Eurydice_slice_index(bytes, (size_t)4U, uint8_t, uint8_t *) &
+ (int16_t)1)
+ << 10U |
+ (int16_t)Eurydice_slice_index(bytes, (size_t)3U, uint8_t, uint8_t *)
+ << 2U) |
+ (int16_t)Eurydice_slice_index(bytes, (size_t)2U, uint8_t, uint8_t *) >>
+ 6U;
+ int16_t r3 =
+ ((int16_t)Eurydice_slice_index(bytes, (size_t)5U, uint8_t, uint8_t *) &
+ (int16_t)15)
+ << 7U |
+ (int16_t)Eurydice_slice_index(bytes, (size_t)4U, uint8_t, uint8_t *) >>
+ 1U;
+ int16_t r4 =
+ ((int16_t)Eurydice_slice_index(bytes, (size_t)6U, uint8_t, uint8_t *) &
+ (int16_t)127)
+ << 4U |
+ (int16_t)Eurydice_slice_index(bytes, (size_t)5U, uint8_t, uint8_t *) >>
+ 4U;
+ int16_t r5 =
+ (((int16_t)Eurydice_slice_index(bytes, (size_t)8U, uint8_t, uint8_t *) &
+ (int16_t)3)
+ << 9U |
+ (int16_t)Eurydice_slice_index(bytes, (size_t)7U, uint8_t, uint8_t *)
+ << 1U) |
+ (int16_t)Eurydice_slice_index(bytes, (size_t)6U, uint8_t, uint8_t *) >>
+ 7U;
+ int16_t r6 =
+ ((int16_t)Eurydice_slice_index(bytes, (size_t)9U, uint8_t, uint8_t *) &
+ (int16_t)31)
+ << 6U |
+ (int16_t)Eurydice_slice_index(bytes, (size_t)8U, uint8_t, uint8_t *) >>
+ 2U;
+ int16_t r7 =
+ (int16_t)Eurydice_slice_index(bytes, (size_t)10U, uint8_t, uint8_t *)
+ << 3U |
+ (int16_t)Eurydice_slice_index(bytes, (size_t)9U, uint8_t, uint8_t *) >>
+ 5U;
+ return (CLITERAL(int16_t_x8){.fst = r0,
+ .snd = r1,
+ .thd = r2,
+ .f3 = r3,
+ .f4 = r4,
+ .f5 = r5,
+ .f6 = r6,
+ .f7 = r7});
+}
+
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_vector_type_zero(void) {
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector lit;
+ lit.elements[0U] = (int16_t)0;
+ lit.elements[1U] = (int16_t)0;
+ lit.elements[2U] = (int16_t)0;
+ lit.elements[3U] = (int16_t)0;
+ lit.elements[4U] = (int16_t)0;
+ lit.elements[5U] = (int16_t)0;
+ lit.elements[6U] = (int16_t)0;
+ lit.elements[7U] = (int16_t)0;
+ lit.elements[8U] = (int16_t)0;
+ lit.elements[9U] = (int16_t)0;
+ lit.elements[10U] = (int16_t)0;
+ lit.elements[11U] = (int16_t)0;
+ lit.elements[12U] = (int16_t)0;
+ lit.elements[13U] = (int16_t)0;
+ lit.elements[14U] = (int16_t)0;
+ lit.elements[15U] = (int16_t)0;
+ return lit;
+}
+
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_serialize_deserialize_11(Eurydice_slice bytes) {
+ int16_t_x8 v0_7 = libcrux_ml_kem_vector_portable_serialize_deserialize_11_int(
+ Eurydice_slice_subslice2(bytes, (size_t)0U, (size_t)11U, uint8_t));
+ int16_t_x8 v8_15 =
+ libcrux_ml_kem_vector_portable_serialize_deserialize_11_int(
+ Eurydice_slice_subslice2(bytes, (size_t)11U, (size_t)22U, uint8_t));
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v =
+ libcrux_ml_kem_vector_portable_vector_type_zero();
+ v.elements[0U] = v0_7.fst;
+ v.elements[1U] = v0_7.snd;
+ v.elements[2U] = v0_7.thd;
+ v.elements[3U] = v0_7.f3;
+ v.elements[4U] = v0_7.f4;
+ v.elements[5U] = v0_7.f5;
+ v.elements[6U] = v0_7.f6;
+ v.elements[7U] = v0_7.f7;
+ v.elements[8U] = v8_15.fst;
+ v.elements[9U] = v8_15.snd;
+ v.elements[10U] = v8_15.thd;
+ v.elements[11U] = v8_15.f3;
+ v.elements[12U] = v8_15.f4;
+ v.elements[13U] = v8_15.f5;
+ v.elements[14U] = v8_15.f6;
+ v.elements[15U] = v8_15.f7;
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_deserialize_11_0d(Eurydice_slice a) {
+ return libcrux_ml_kem_vector_portable_serialize_deserialize_11(a);
+}
+
+static KRML_MUSTINLINE void
+libcrux_ml_kem_vector_portable_vector_type_to_i16_array(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector x,
+ int16_t ret[16U]) {
+ memcpy(ret, x.elements, (size_t)16U * sizeof(int16_t));
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline void libcrux_ml_kem_vector_portable_to_i16_array_0d(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector x,
+ int16_t ret[16U]) {
+ libcrux_ml_kem_vector_portable_vector_type_to_i16_array(x, ret);
+}
+
+static const uint8_t
+ libcrux_ml_kem_vector_rej_sample_table_REJECTION_SAMPLE_SHUFFLE_TABLE
+ [256U][16U] = {{255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {4U, 5U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 6U, 7U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {4U, 5U, 6U, 7U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 6U, 7U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 6U, 7U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 8U, 9U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {4U, 5U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 8U, 9U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 8U, 9U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {4U, 5U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 10U, 11U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {4U, 5U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 10U, 11U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 10U, 11U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 10U, 11U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 6U, 7U, 10U, 11U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {4U, 5U, 6U, 7U, 10U, 11U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 6U, 7U, 10U, 11U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 8U, 9U, 10U, 11U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {4U, 5U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 8U, 9U, 10U, 11U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 255U,
+ 255U, 255U, 255U},
+ {12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 12U, 13U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {4U, 5U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 12U, 13U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 12U, 13U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 12U, 13U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 6U, 7U, 12U, 13U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {4U, 5U, 6U, 7U, 12U, 13U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 6U, 7U, 12U, 13U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 6U, 7U, 12U, 13U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 12U, 13U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 8U, 9U, 12U, 13U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {4U, 5U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 8U, 9U, 12U, 13U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 8U, 9U, 12U, 13U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 12U, 13U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 255U,
+ 255U, 255U, 255U},
+ {10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 10U, 11U, 12U, 13U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {4U, 5U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 10U, 11U, 12U, 13U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 10U, 11U, 12U, 13U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 10U, 11U, 12U, 13U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U,
+ 255U, 255U, 255U, 255U},
+ {8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U,
+ 255U, 255U, 255U, 255U},
+ {6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U,
+ 255U, 255U, 255U, 255U},
+ {4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U,
+ 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U,
+ 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U,
+ 13U, 255U, 255U},
+ {14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 14U, 15U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {4U, 5U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 14U, 15U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 14U, 15U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 6U, 7U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {4U, 5U, 6U, 7U, 14U, 15U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 6U, 7U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 6U, 7U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 8U, 9U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {4U, 5U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 8U, 9U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 8U, 9U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {4U, 5U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 14U, 15U, 255U,
+ 255U, 255U, 255U},
+ {10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 10U, 11U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {4U, 5U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 10U, 11U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 10U, 11U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 10U, 11U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {4U, 5U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 14U, 15U,
+ 255U, 255U, 255U, 255U},
+ {8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {4U, 5U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 14U, 15U,
+ 255U, 255U, 255U, 255U},
+ {6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U,
+ 255U, 255U, 255U, 255U},
+ {4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U,
+ 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 14U, 15U,
+ 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 14U,
+ 15U, 255U, 255U},
+ {12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 12U, 13U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {4U, 5U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 12U, 13U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 12U, 13U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 12U, 13U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {4U, 5U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 6U, 7U, 12U, 13U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 12U, 13U, 14U, 15U,
+ 255U, 255U, 255U, 255U},
+ {8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {4U, 5U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 12U, 13U, 14U, 15U,
+ 255U, 255U, 255U, 255U},
+ {6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {2U, 3U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U,
+ 255U, 255U, 255U, 255U},
+ {4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U, 255U, 255U,
+ 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U,
+ 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 14U, 15U,
+ 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 12U, 13U, 14U,
+ 15U, 255U, 255U},
+ {10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 10U, 11U, 12U, 13U, 14U, 15U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {4U, 5U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 10U, 11U, 12U, 13U, 14U, 15U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 10U, 11U, 12U, 13U, 14U, 15U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 10U, 11U, 12U, 13U, 14U, 15U,
+ 255U, 255U, 255U, 255U},
+ {6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U,
+ 255U, 255U, 255U, 255U},
+ {4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U,
+ 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 14U, 15U,
+ 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 10U, 11U, 12U, 13U, 14U,
+ 15U, 255U, 255U},
+ {8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U, 255U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {2U, 3U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U,
+ 255U, 255U, 255U, 255U},
+ {4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U,
+ 255U, 255U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U,
+ 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 8U, 9U, 10U, 11U, 12U, 13U, 14U,
+ 15U, 255U, 255U},
+ {6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U, 255U,
+ 255U, 255U, 255U, 255U, 255U},
+ {0U, 1U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U,
+ 255U, 255U, 255U, 255U},
+ {2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U,
+ 255U, 255U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U,
+ 15U, 255U, 255U},
+ {4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U, 15U,
+ 255U, 255U, 255U, 255U},
+ {0U, 1U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U,
+ 15U, 255U, 255U},
+ {2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U, 13U, 14U,
+ 15U, 255U, 255U},
+ {0U, 1U, 2U, 3U, 4U, 5U, 6U, 7U, 8U, 9U, 10U, 11U, 12U,
+ 13U, 14U, 15U}};
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_ZERO_0d(void) {
+ return libcrux_ml_kem_vector_portable_vector_type_zero();
+}
+
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_arithmetic_add(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector lhs,
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector *rhs) {
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) {
+ size_t i0 = i;
+ size_t uu____0 = i0;
+ lhs.elements[uu____0] = lhs.elements[uu____0] + rhs->elements[i0];
+ }
+ return lhs;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_add_0d(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector lhs,
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector *rhs) {
+ return libcrux_ml_kem_vector_portable_arithmetic_add(lhs, rhs);
+}
+
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_arithmetic_sub(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector lhs,
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector *rhs) {
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) {
+ size_t i0 = i;
+ size_t uu____0 = i0;
+ lhs.elements[uu____0] = lhs.elements[uu____0] - rhs->elements[i0];
+ }
+ return lhs;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_sub_0d(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector lhs,
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector *rhs) {
+ return libcrux_ml_kem_vector_portable_arithmetic_sub(lhs, rhs);
+}
+
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_arithmetic_multiply_by_constant(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t c) {
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) {
+ size_t i0 = i;
+ size_t uu____0 = i0;
+ v.elements[uu____0] = v.elements[uu____0] * c;
+ }
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_multiply_by_constant_0d(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t c) {
+ return libcrux_ml_kem_vector_portable_arithmetic_multiply_by_constant(v, c);
+}
+
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_arithmetic_bitwise_and_with_constant(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t c) {
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) {
+ size_t i0 = i;
+ size_t uu____0 = i0;
+ v.elements[uu____0] = v.elements[uu____0] & c;
+ }
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_bitwise_and_with_constant_0d(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t c) {
+ return libcrux_ml_kem_vector_portable_arithmetic_bitwise_and_with_constant(v,
+ c);
+}
+
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_arithmetic_cond_subtract_3329(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ core_ops_range_Range_b3 iter =
+ core_iter_traits_collect___core__iter__traits__collect__IntoIterator_for_I__1__into_iter(
+ (CLITERAL(core_ops_range_Range_b3){
+ .start = (size_t)0U,
+ .end = LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR}),
+ core_ops_range_Range_b3, core_ops_range_Range_b3);
+ while (true) {
+ Option_b3 uu____0 =
+ core_iter_range___core__iter__traits__iterator__Iterator_for_core__ops__range__Range_A___6__next(
+ &iter, size_t, Option_b3);
+ if (!(uu____0.tag == None)) {
+ size_t i = uu____0.f0;
+ if (v.elements[i] >= (int16_t)3329) {
+ size_t uu____1 = i;
+ v.elements[uu____1] = v.elements[uu____1] - (int16_t)3329;
+ }
+ continue;
+ }
+ return v;
+ }
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_cond_subtract_3329_0d(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ return libcrux_ml_kem_vector_portable_arithmetic_cond_subtract_3329(v);
+}
+
+#define LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_BARRETT_MULTIPLIER \
+ ((int32_t)20159)
+
+#define LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_BARRETT_SHIFT ((int32_t)26)
+
+#define LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_BARRETT_R \
+ ((int32_t)1 << (uint32_t) \
+ LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_BARRETT_SHIFT)
+
+/**
+ Signed Barrett Reduction
+
+ Given an input `value`, `barrett_reduce` outputs a representative `result`
+ such that:
+
+ - result ≡ value (mod FIELD_MODULUS)
+ - the absolute value of `result` is bound as follows:
+
+ `|result| ≤ FIELD_MODULUS / 2 · (|value|/BARRETT_R + 1)
+
+ In particular, if `|value| < BARRETT_R`, then `|result| < FIELD_MODULUS`.
+*/
+static inline int16_t
+libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce_element(
+ int16_t value) {
+ int32_t t = (int32_t)value *
+ LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_BARRETT_MULTIPLIER +
+ (LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_BARRETT_R >> 1U);
+ int16_t quotient =
+ (int16_t)(t >>
+ (uint32_t)
+ LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_BARRETT_SHIFT);
+ return value - quotient * LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS;
+}
+
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) {
+ size_t i0 = i;
+ v.elements[i0] =
+ libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce_element(
+ v.elements[i0]);
+ }
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_barrett_reduce_0d(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ return libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce(v);
+}
+
+#define LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT (16U)
+
+#define LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_MONTGOMERY_R \
+ ((int32_t)1 << (uint32_t) \
+ LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT)
+
+/**
+ Signed Montgomery Reduction
+
+ Given an input `value`, `montgomery_reduce` outputs a representative `o`
+ such that:
+
+ - o ≡ value · MONTGOMERY_R^(-1) (mod FIELD_MODULUS)
+ - the absolute value of `o` is bound as follows:
+
+ `|result| ≤ (|value| / MONTGOMERY_R) + (FIELD_MODULUS / 2)
+
+ In particular, if `|value| ≤ FIELD_MODULUS * MONTGOMERY_R`, then `|o| < (3 ·
+ FIELD_MODULUS) / 2`.
+*/
+static inline int16_t
+libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element(
+ int32_t value) {
+ int32_t k =
+ (int32_t)(int16_t)value *
+ (int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_INVERSE_OF_MODULUS_MOD_MONTGOMERY_R;
+ int32_t k_times_modulus =
+ (int32_t)(int16_t)k * (int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS;
+ int16_t c =
+ (int16_t)(k_times_modulus >>
+ (uint32_t)
+ LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT);
+ int16_t value_high =
+ (int16_t)(value >>
+ (uint32_t)
+ LIBCRUX_ML_KEM_VECTOR_PORTABLE_ARITHMETIC_MONTGOMERY_SHIFT);
+ return value_high - c;
+}
+
+/**
+ If `fe` is some field element 'x' of the Kyber field and `fer` is congruent to
+ `y · MONTGOMERY_R`, this procedure outputs a value that is congruent to
+ `x · y`, as follows:
+
+ `fe · fer ≡ x · y · MONTGOMERY_R (mod FIELD_MODULUS)`
+
+ `montgomery_reduce` takes the value `x · y · MONTGOMERY_R` and outputs a
+ representative `x · y · MONTGOMERY_R * MONTGOMERY_R^{-1} ≡ x · y (mod
+ FIELD_MODULUS)`.
+*/
+static KRML_MUSTINLINE int16_t
+libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_fe_by_fer(
+ int16_t fe, int16_t fer) {
+ return libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element(
+ (int32_t)fe * (int32_t)fer);
+}
+
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_by_constant(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t c) {
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) {
+ size_t i0 = i;
+ v.elements[i0] =
+ libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_fe_by_fer(
+ v.elements[i0], c);
+ }
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_0d(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t r) {
+ return libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_by_constant(
+ v, r);
+}
+
+/**
+ The `compress_*` functions implement the `Compress` function specified in the
+ NIST FIPS 203 standard (Page 18, Expression 4.5), which is defined as:
+
+ ```plaintext
+ Compress_d: ℤq -> ℤ_{2ᵈ}
+ Compress_d(x) = ⌈(2ᵈ/q)·x⌋
+ ```
+
+ Since `⌈x⌋ = ⌊x + 1/2⌋` we have:
+
+ ```plaintext
+ Compress_d(x) = ⌊(2ᵈ/q)·x + 1/2⌋
+ = ⌊(2^{d+1}·x + q) / 2q⌋
+ ```
+
+ For further information about the function implementations, consult the
+ `implementation_notes.pdf` document in this directory.
+
+ The NIST FIPS 203 standard can be found at
+ <https://csrc.nist.gov/pubs/fips/203/ipd>.
+*/
+static inline uint8_t
+libcrux_ml_kem_vector_portable_compress_compress_message_coefficient(
+ uint16_t fe) {
+ int16_t shifted = (int16_t)1664 - (int16_t)fe;
+ int16_t mask = shifted >> 15U;
+ int16_t shifted_to_positive = mask ^ shifted;
+ int16_t shifted_positive_in_range = shifted_to_positive - (int16_t)832;
+ return (uint8_t)(shifted_positive_in_range >> 15U & (int16_t)1);
+}
+
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_compress_compress_1(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) {
+ size_t i0 = i;
+ v.elements[i0] = (int16_t)
+ libcrux_ml_kem_vector_portable_compress_compress_message_coefficient(
+ (uint16_t)v.elements[i0]);
+ }
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_compress_1_0d(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ return libcrux_ml_kem_vector_portable_compress_compress_1(v);
+}
+
+static KRML_MUSTINLINE uint32_t
+libcrux_ml_kem_vector_portable_arithmetic_get_n_least_significant_bits(
+ uint8_t n, uint32_t value) {
+ return value & ((1U << (uint32_t)n) - 1U);
+}
+
+static inline int16_t
+libcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient(
+ uint8_t coefficient_bits, uint16_t fe) {
+ uint64_t compressed = (uint64_t)fe << (uint32_t)coefficient_bits;
+ compressed = compressed + 1664ULL;
+ compressed = compressed * 10321340ULL;
+ compressed = compressed >> 35U;
+ return (int16_t)
+ libcrux_ml_kem_vector_portable_arithmetic_get_n_least_significant_bits(
+ coefficient_bits, (uint32_t)compressed);
+}
+
+static KRML_MUSTINLINE void libcrux_ml_kem_vector_portable_ntt_ntt_step(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector *v, int16_t zeta,
+ size_t i, size_t j) {
+ int16_t t =
+ libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_fe_by_fer(
+ v->elements[j], zeta);
+ v->elements[j] = v->elements[i] - t;
+ v->elements[i] = v->elements[i] + t;
+}
+
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_ntt_ntt_layer_1_step(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t zeta0,
+ int16_t zeta1, int16_t zeta2, int16_t zeta3) {
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta0, (size_t)0U,
+ (size_t)2U);
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta0, (size_t)1U,
+ (size_t)3U);
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta1, (size_t)4U,
+ (size_t)6U);
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta1, (size_t)5U,
+ (size_t)7U);
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta2, (size_t)8U,
+ (size_t)10U);
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta2, (size_t)9U,
+ (size_t)11U);
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta3, (size_t)12U,
+ (size_t)14U);
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta3, (size_t)13U,
+ (size_t)15U);
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_ntt_layer_1_step_0d(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector a, int16_t zeta0,
+ int16_t zeta1, int16_t zeta2, int16_t zeta3) {
+ return libcrux_ml_kem_vector_portable_ntt_ntt_layer_1_step(a, zeta0, zeta1,
+ zeta2, zeta3);
+}
+
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_ntt_ntt_layer_2_step(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t zeta0,
+ int16_t zeta1) {
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta0, (size_t)0U,
+ (size_t)4U);
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta0, (size_t)1U,
+ (size_t)5U);
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta0, (size_t)2U,
+ (size_t)6U);
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta0, (size_t)3U,
+ (size_t)7U);
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta1, (size_t)8U,
+ (size_t)12U);
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta1, (size_t)9U,
+ (size_t)13U);
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta1, (size_t)10U,
+ (size_t)14U);
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta1, (size_t)11U,
+ (size_t)15U);
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_ntt_layer_2_step_0d(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector a, int16_t zeta0,
+ int16_t zeta1) {
+ return libcrux_ml_kem_vector_portable_ntt_ntt_layer_2_step(a, zeta0, zeta1);
+}
+
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_ntt_ntt_layer_3_step(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t zeta) {
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta, (size_t)0U, (size_t)8U);
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta, (size_t)1U, (size_t)9U);
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta, (size_t)2U,
+ (size_t)10U);
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta, (size_t)3U,
+ (size_t)11U);
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta, (size_t)4U,
+ (size_t)12U);
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta, (size_t)5U,
+ (size_t)13U);
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta, (size_t)6U,
+ (size_t)14U);
+ libcrux_ml_kem_vector_portable_ntt_ntt_step(&v, zeta, (size_t)7U,
+ (size_t)15U);
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_ntt_layer_3_step_0d(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector a, int16_t zeta) {
+ return libcrux_ml_kem_vector_portable_ntt_ntt_layer_3_step(a, zeta);
+}
+
+static KRML_MUSTINLINE void libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector *v, int16_t zeta,
+ size_t i, size_t j) {
+ int16_t a_minus_b = v->elements[j] - v->elements[i];
+ v->elements[i] =
+ libcrux_ml_kem_vector_portable_arithmetic_barrett_reduce_element(
+ v->elements[i] + v->elements[j]);
+ v->elements[j] =
+ libcrux_ml_kem_vector_portable_arithmetic_montgomery_multiply_fe_by_fer(
+ a_minus_b, zeta);
+}
+
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_1_step(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t zeta0,
+ int16_t zeta1, int16_t zeta2, int16_t zeta3) {
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta0, (size_t)0U,
+ (size_t)2U);
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta0, (size_t)1U,
+ (size_t)3U);
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta1, (size_t)4U,
+ (size_t)6U);
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta1, (size_t)5U,
+ (size_t)7U);
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta2, (size_t)8U,
+ (size_t)10U);
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta2, (size_t)9U,
+ (size_t)11U);
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta3, (size_t)12U,
+ (size_t)14U);
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta3, (size_t)13U,
+ (size_t)15U);
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_inv_ntt_layer_1_step_0d(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector a, int16_t zeta0,
+ int16_t zeta1, int16_t zeta2, int16_t zeta3) {
+ return libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_1_step(
+ a, zeta0, zeta1, zeta2, zeta3);
+}
+
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_2_step(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t zeta0,
+ int16_t zeta1) {
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta0, (size_t)0U,
+ (size_t)4U);
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta0, (size_t)1U,
+ (size_t)5U);
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta0, (size_t)2U,
+ (size_t)6U);
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta0, (size_t)3U,
+ (size_t)7U);
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta1, (size_t)8U,
+ (size_t)12U);
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta1, (size_t)9U,
+ (size_t)13U);
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta1, (size_t)10U,
+ (size_t)14U);
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta1, (size_t)11U,
+ (size_t)15U);
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_inv_ntt_layer_2_step_0d(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector a, int16_t zeta0,
+ int16_t zeta1) {
+ return libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_2_step(a, zeta0,
+ zeta1);
+}
+
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_3_step(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t zeta) {
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta, (size_t)0U,
+ (size_t)8U);
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta, (size_t)1U,
+ (size_t)9U);
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta, (size_t)2U,
+ (size_t)10U);
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta, (size_t)3U,
+ (size_t)11U);
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta, (size_t)4U,
+ (size_t)12U);
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta, (size_t)5U,
+ (size_t)13U);
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta, (size_t)6U,
+ (size_t)14U);
+ libcrux_ml_kem_vector_portable_ntt_inv_ntt_step(&v, zeta, (size_t)7U,
+ (size_t)15U);
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_inv_ntt_layer_3_step_0d(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector a, int16_t zeta) {
+ return libcrux_ml_kem_vector_portable_ntt_inv_ntt_layer_3_step(a, zeta);
+}
+
+/**
+ Compute the product of two Kyber binomials with respect to the
+ modulus `X² - zeta`.
+
+ This function almost implements <strong>Algorithm 11</strong> of the
+ NIST FIPS 203 standard, which is reproduced below:
+
+ ```plaintext
+ Input: a₀, a₁, b₀, b₁ ∈ ℤq.
+ Input: γ ∈ ℤq.
+ Output: c₀, c₁ ∈ ℤq.
+
+ c₀ ← a₀·b₀ + a₁·b₁·γ
+ c₁ ← a₀·b₁ + a₁·b₀
+ return c₀, c₁
+ ```
+ We say "almost" because the coefficients output by this function are in
+ the Montgomery domain (unlike in the specification).
+
+ The NIST FIPS 203 standard can be found at
+ <https://csrc.nist.gov/pubs/fips/203/ipd>.
+*/
+static KRML_MUSTINLINE void
+libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector *a,
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector *b, int16_t zeta,
+ size_t i, size_t j,
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector *out) {
+ int16_t o0 = libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element(
+ (int32_t)a->elements[i] * (int32_t)b->elements[i] +
+ (int32_t)
+ libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element(
+ (int32_t)a->elements[j] * (int32_t)b->elements[j]) *
+ (int32_t)zeta);
+ int16_t o1 =
+ libcrux_ml_kem_vector_portable_arithmetic_montgomery_reduce_element(
+ (int32_t)a->elements[i] * (int32_t)b->elements[j] +
+ (int32_t)a->elements[j] * (int32_t)b->elements[i]);
+ out->elements[i] = o0;
+ out->elements[j] = o1;
+}
+
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_ntt_ntt_multiply(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector *lhs,
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector *rhs,
+ int16_t zeta0, int16_t zeta1, int16_t zeta2, int16_t zeta3) {
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector out =
+ libcrux_ml_kem_vector_portable_vector_type_zero();
+ libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(
+ lhs, rhs, zeta0, (size_t)0U, (size_t)1U, &out);
+ libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(
+ lhs, rhs, -zeta0, (size_t)2U, (size_t)3U, &out);
+ libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(
+ lhs, rhs, zeta1, (size_t)4U, (size_t)5U, &out);
+ libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(
+ lhs, rhs, -zeta1, (size_t)6U, (size_t)7U, &out);
+ libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(
+ lhs, rhs, zeta2, (size_t)8U, (size_t)9U, &out);
+ libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(
+ lhs, rhs, -zeta2, (size_t)10U, (size_t)11U, &out);
+ libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(
+ lhs, rhs, zeta3, (size_t)12U, (size_t)13U, &out);
+ libcrux_ml_kem_vector_portable_ntt_ntt_multiply_binomials(
+ lhs, rhs, -zeta3, (size_t)14U, (size_t)15U, &out);
+ return out;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_ntt_multiply_0d(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector *lhs,
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector *rhs,
+ int16_t zeta0, int16_t zeta1, int16_t zeta2, int16_t zeta3) {
+ return libcrux_ml_kem_vector_portable_ntt_ntt_multiply(lhs, rhs, zeta0, zeta1,
+ zeta2, zeta3);
+}
+
+static KRML_MUSTINLINE void
+libcrux_ml_kem_vector_portable_serialize_serialize_1(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v,
+ uint8_t ret[2U]) {
+ uint8_t result[2U] = {0U};
+ for (size_t i = (size_t)0U; i < (size_t)8U; i++) {
+ size_t i0 = i;
+ size_t uu____0 = (size_t)0U;
+ result[uu____0] = (uint32_t)result[uu____0] |
+ (uint32_t)(uint8_t)v.elements[i0] << (uint32_t)i0;
+ }
+ for (size_t i = (size_t)8U; i < (size_t)16U; i++) {
+ size_t i0 = i;
+ size_t uu____1 = (size_t)1U;
+ result[uu____1] =
+ (uint32_t)result[uu____1] | (uint32_t)(uint8_t)v.elements[i0]
+ << (uint32_t)(i0 - (size_t)8U);
+ }
+ memcpy(ret, result, (size_t)2U * sizeof(uint8_t));
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline void libcrux_ml_kem_vector_portable_serialize_1_0d(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector a,
+ uint8_t ret[2U]) {
+ libcrux_ml_kem_vector_portable_serialize_serialize_1(a, ret);
+}
+
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_serialize_deserialize_1(Eurydice_slice v) {
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector result =
+ libcrux_ml_kem_vector_portable_vector_type_zero();
+ for (size_t i = (size_t)0U; i < (size_t)8U; i++) {
+ size_t i0 = i;
+ result.elements[i0] = (int16_t)((uint32_t)Eurydice_slice_index(
+ v, (size_t)0U, uint8_t, uint8_t *) >>
+ (uint32_t)i0 &
+ 1U);
+ }
+ for (size_t i = (size_t)8U;
+ i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) {
+ size_t i0 = i;
+ result.elements[i0] = (int16_t)((uint32_t)Eurydice_slice_index(
+ v, (size_t)1U, uint8_t, uint8_t *) >>
+ (uint32_t)(i0 - (size_t)8U) &
+ 1U);
+ }
+ return result;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_deserialize_1_0d(Eurydice_slice a) {
+ return libcrux_ml_kem_vector_portable_serialize_deserialize_1(a);
+}
+
+typedef struct uint8_t_x4_s {
+ uint8_t fst;
+ uint8_t snd;
+ uint8_t thd;
+ uint8_t f3;
+} uint8_t_x4;
+
+static KRML_MUSTINLINE uint8_t_x4
+libcrux_ml_kem_vector_portable_serialize_serialize_4_int(Eurydice_slice v) {
+ uint8_t result0 =
+ (uint32_t)(uint8_t)Eurydice_slice_index(v, (size_t)1U, int16_t, int16_t *)
+ << 4U |
+ (uint32_t)(uint8_t)Eurydice_slice_index(v, (size_t)0U, int16_t,
+ int16_t *);
+ uint8_t result1 =
+ (uint32_t)(uint8_t)Eurydice_slice_index(v, (size_t)3U, int16_t, int16_t *)
+ << 4U |
+ (uint32_t)(uint8_t)Eurydice_slice_index(v, (size_t)2U, int16_t,
+ int16_t *);
+ uint8_t result2 =
+ (uint32_t)(uint8_t)Eurydice_slice_index(v, (size_t)5U, int16_t, int16_t *)
+ << 4U |
+ (uint32_t)(uint8_t)Eurydice_slice_index(v, (size_t)4U, int16_t,
+ int16_t *);
+ uint8_t result3 =
+ (uint32_t)(uint8_t)Eurydice_slice_index(v, (size_t)7U, int16_t, int16_t *)
+ << 4U |
+ (uint32_t)(uint8_t)Eurydice_slice_index(v, (size_t)6U, int16_t,
+ int16_t *);
+ return (CLITERAL(uint8_t_x4){
+ .fst = result0, .snd = result1, .thd = result2, .f3 = result3});
+}
+
+static KRML_MUSTINLINE void
+libcrux_ml_kem_vector_portable_serialize_serialize_4(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v,
+ uint8_t ret[8U]) {
+ uint8_t_x4 result0_3 =
+ libcrux_ml_kem_vector_portable_serialize_serialize_4_int(
+ Eurydice_array_to_subslice2(v.elements, (size_t)0U, (size_t)8U,
+ int16_t));
+ uint8_t_x4 result4_7 =
+ libcrux_ml_kem_vector_portable_serialize_serialize_4_int(
+ Eurydice_array_to_subslice2(v.elements, (size_t)8U, (size_t)16U,
+ int16_t));
+ uint8_t result[8U] = {0U};
+ result[0U] = result0_3.fst;
+ result[1U] = result0_3.snd;
+ result[2U] = result0_3.thd;
+ result[3U] = result0_3.f3;
+ result[4U] = result4_7.fst;
+ result[5U] = result4_7.snd;
+ result[6U] = result4_7.thd;
+ result[7U] = result4_7.f3;
+ memcpy(ret, result, (size_t)8U * sizeof(uint8_t));
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline void libcrux_ml_kem_vector_portable_serialize_4_0d(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector a,
+ uint8_t ret[8U]) {
+ libcrux_ml_kem_vector_portable_serialize_serialize_4(a, ret);
+}
+
+static KRML_MUSTINLINE int16_t_x8
+libcrux_ml_kem_vector_portable_serialize_deserialize_4_int(
+ Eurydice_slice bytes) {
+ int16_t v0 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)0U,
+ uint8_t, uint8_t *) &
+ 15U);
+ int16_t v1 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)0U,
+ uint8_t, uint8_t *) >>
+ 4U &
+ 15U);
+ int16_t v2 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)1U,
+ uint8_t, uint8_t *) &
+ 15U);
+ int16_t v3 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)1U,
+ uint8_t, uint8_t *) >>
+ 4U &
+ 15U);
+ int16_t v4 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)2U,
+ uint8_t, uint8_t *) &
+ 15U);
+ int16_t v5 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)2U,
+ uint8_t, uint8_t *) >>
+ 4U &
+ 15U);
+ int16_t v6 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)3U,
+ uint8_t, uint8_t *) &
+ 15U);
+ int16_t v7 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)3U,
+ uint8_t, uint8_t *) >>
+ 4U &
+ 15U);
+ return (CLITERAL(int16_t_x8){.fst = v0,
+ .snd = v1,
+ .thd = v2,
+ .f3 = v3,
+ .f4 = v4,
+ .f5 = v5,
+ .f6 = v6,
+ .f7 = v7});
+}
+
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_serialize_deserialize_4(Eurydice_slice bytes) {
+ int16_t_x8 v0_7 = libcrux_ml_kem_vector_portable_serialize_deserialize_4_int(
+ Eurydice_slice_subslice2(bytes, (size_t)0U, (size_t)4U, uint8_t));
+ int16_t_x8 v8_15 = libcrux_ml_kem_vector_portable_serialize_deserialize_4_int(
+ Eurydice_slice_subslice2(bytes, (size_t)4U, (size_t)8U, uint8_t));
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v =
+ libcrux_ml_kem_vector_portable_vector_type_zero();
+ v.elements[0U] = v0_7.fst;
+ v.elements[1U] = v0_7.snd;
+ v.elements[2U] = v0_7.thd;
+ v.elements[3U] = v0_7.f3;
+ v.elements[4U] = v0_7.f4;
+ v.elements[5U] = v0_7.f5;
+ v.elements[6U] = v0_7.f6;
+ v.elements[7U] = v0_7.f7;
+ v.elements[8U] = v8_15.fst;
+ v.elements[9U] = v8_15.snd;
+ v.elements[10U] = v8_15.thd;
+ v.elements[11U] = v8_15.f3;
+ v.elements[12U] = v8_15.f4;
+ v.elements[13U] = v8_15.f5;
+ v.elements[14U] = v8_15.f6;
+ v.elements[15U] = v8_15.f7;
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_deserialize_4_0d(Eurydice_slice a) {
+ return libcrux_ml_kem_vector_portable_serialize_deserialize_4(a);
+}
+
+typedef struct uint8_t_x5_s {
+ uint8_t fst;
+ uint8_t snd;
+ uint8_t thd;
+ uint8_t f3;
+ uint8_t f4;
+} uint8_t_x5;
+
+static KRML_MUSTINLINE uint8_t_x5
+libcrux_ml_kem_vector_portable_serialize_serialize_5_int(Eurydice_slice v) {
+ uint8_t r0 =
+ (uint8_t)(Eurydice_slice_index(v, (size_t)0U, int16_t, int16_t *) |
+ Eurydice_slice_index(v, (size_t)1U, int16_t, int16_t *) << 5U);
+ uint8_t r1 =
+ (uint8_t)((Eurydice_slice_index(v, (size_t)1U, int16_t, int16_t *) >> 3U |
+ Eurydice_slice_index(v, (size_t)2U, int16_t, int16_t *)
+ << 2U) |
+ Eurydice_slice_index(v, (size_t)3U, int16_t, int16_t *) << 7U);
+ uint8_t r2 =
+ (uint8_t)(Eurydice_slice_index(v, (size_t)3U, int16_t, int16_t *) >> 1U |
+ Eurydice_slice_index(v, (size_t)4U, int16_t, int16_t *) << 4U);
+ uint8_t r3 =
+ (uint8_t)((Eurydice_slice_index(v, (size_t)4U, int16_t, int16_t *) >> 4U |
+ Eurydice_slice_index(v, (size_t)5U, int16_t, int16_t *)
+ << 1U) |
+ Eurydice_slice_index(v, (size_t)6U, int16_t, int16_t *) << 6U);
+ uint8_t r4 =
+ (uint8_t)(Eurydice_slice_index(v, (size_t)6U, int16_t, int16_t *) >> 2U |
+ Eurydice_slice_index(v, (size_t)7U, int16_t, int16_t *) << 3U);
+ return (CLITERAL(uint8_t_x5){
+ .fst = r0, .snd = r1, .thd = r2, .f3 = r3, .f4 = r4});
+}
+
+static KRML_MUSTINLINE void
+libcrux_ml_kem_vector_portable_serialize_serialize_5(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v,
+ uint8_t ret[10U]) {
+ uint8_t_x5 r0_4 = libcrux_ml_kem_vector_portable_serialize_serialize_5_int(
+ Eurydice_array_to_subslice2(v.elements, (size_t)0U, (size_t)8U, int16_t));
+ uint8_t_x5 r5_9 = libcrux_ml_kem_vector_portable_serialize_serialize_5_int(
+ Eurydice_array_to_subslice2(v.elements, (size_t)8U, (size_t)16U,
+ int16_t));
+ uint8_t result[10U] = {0U};
+ result[0U] = r0_4.fst;
+ result[1U] = r0_4.snd;
+ result[2U] = r0_4.thd;
+ result[3U] = r0_4.f3;
+ result[4U] = r0_4.f4;
+ result[5U] = r5_9.fst;
+ result[6U] = r5_9.snd;
+ result[7U] = r5_9.thd;
+ result[8U] = r5_9.f3;
+ result[9U] = r5_9.f4;
+ memcpy(ret, result, (size_t)10U * sizeof(uint8_t));
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline void libcrux_ml_kem_vector_portable_serialize_5_0d(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector a,
+ uint8_t ret[10U]) {
+ libcrux_ml_kem_vector_portable_serialize_serialize_5(a, ret);
+}
+
+static KRML_MUSTINLINE int16_t_x8
+libcrux_ml_kem_vector_portable_serialize_deserialize_5_int(
+ Eurydice_slice bytes) {
+ int16_t v0 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)0U,
+ uint8_t, uint8_t *) &
+ 31U);
+ int16_t v1 = (int16_t)(((uint32_t)Eurydice_slice_index(bytes, (size_t)1U,
+ uint8_t, uint8_t *) &
+ 3U) << 3U |
+ (uint32_t)Eurydice_slice_index(bytes, (size_t)0U,
+ uint8_t, uint8_t *) >>
+ 5U);
+ int16_t v2 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)1U,
+ uint8_t, uint8_t *) >>
+ 2U &
+ 31U);
+ int16_t v3 = (int16_t)(((uint32_t)Eurydice_slice_index(bytes, (size_t)2U,
+ uint8_t, uint8_t *) &
+ 15U)
+ << 1U |
+ (uint32_t)Eurydice_slice_index(bytes, (size_t)1U,
+ uint8_t, uint8_t *) >>
+ 7U);
+ int16_t v4 = (int16_t)(((uint32_t)Eurydice_slice_index(bytes, (size_t)3U,
+ uint8_t, uint8_t *) &
+ 1U) << 4U |
+ (uint32_t)Eurydice_slice_index(bytes, (size_t)2U,
+ uint8_t, uint8_t *) >>
+ 4U);
+ int16_t v5 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)3U,
+ uint8_t, uint8_t *) >>
+ 1U &
+ 31U);
+ int16_t v6 = (int16_t)(((uint32_t)Eurydice_slice_index(bytes, (size_t)4U,
+ uint8_t, uint8_t *) &
+ 7U) << 2U |
+ (uint32_t)Eurydice_slice_index(bytes, (size_t)3U,
+ uint8_t, uint8_t *) >>
+ 6U);
+ int16_t v7 = (int16_t)((uint32_t)Eurydice_slice_index(bytes, (size_t)4U,
+ uint8_t, uint8_t *) >>
+ 3U);
+ return (CLITERAL(int16_t_x8){.fst = v0,
+ .snd = v1,
+ .thd = v2,
+ .f3 = v3,
+ .f4 = v4,
+ .f5 = v5,
+ .f6 = v6,
+ .f7 = v7});
+}
+
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_serialize_deserialize_5(Eurydice_slice bytes) {
+ int16_t_x8 v0_7 = libcrux_ml_kem_vector_portable_serialize_deserialize_5_int(
+ Eurydice_slice_subslice2(bytes, (size_t)0U, (size_t)5U, uint8_t));
+ int16_t_x8 v8_15 = libcrux_ml_kem_vector_portable_serialize_deserialize_5_int(
+ Eurydice_slice_subslice2(bytes, (size_t)5U, (size_t)10U, uint8_t));
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v =
+ libcrux_ml_kem_vector_portable_vector_type_zero();
+ v.elements[0U] = v0_7.fst;
+ v.elements[1U] = v0_7.snd;
+ v.elements[2U] = v0_7.thd;
+ v.elements[3U] = v0_7.f3;
+ v.elements[4U] = v0_7.f4;
+ v.elements[5U] = v0_7.f5;
+ v.elements[6U] = v0_7.f6;
+ v.elements[7U] = v0_7.f7;
+ v.elements[8U] = v8_15.fst;
+ v.elements[9U] = v8_15.snd;
+ v.elements[10U] = v8_15.thd;
+ v.elements[11U] = v8_15.f3;
+ v.elements[12U] = v8_15.f4;
+ v.elements[13U] = v8_15.f5;
+ v.elements[14U] = v8_15.f6;
+ v.elements[15U] = v8_15.f7;
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_deserialize_5_0d(Eurydice_slice a) {
+ return libcrux_ml_kem_vector_portable_serialize_deserialize_5(a);
+}
+
+static KRML_MUSTINLINE uint8_t_x5
+libcrux_ml_kem_vector_portable_serialize_serialize_10_int(Eurydice_slice v) {
+ uint8_t r0 =
+ (uint8_t)(Eurydice_slice_index(v, (size_t)0U, int16_t, int16_t *) &
+ (int16_t)255);
+ uint8_t r1 = (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)1U, int16_t,
+ int16_t *) &
+ (int16_t)63)
+ << 2U |
+ (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)0U, int16_t,
+ int16_t *) >>
+ 8U &
+ (int16_t)3);
+ uint8_t r2 = (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)2U, int16_t,
+ int16_t *) &
+ (int16_t)15)
+ << 4U |
+ (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)1U, int16_t,
+ int16_t *) >>
+ 6U &
+ (int16_t)15);
+ uint8_t r3 = (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)3U, int16_t,
+ int16_t *) &
+ (int16_t)3)
+ << 6U |
+ (uint32_t)(uint8_t)(Eurydice_slice_index(v, (size_t)2U, int16_t,
+ int16_t *) >>
+ 4U &
+ (int16_t)63);
+ uint8_t r4 =
+ (uint8_t)(Eurydice_slice_index(v, (size_t)3U, int16_t, int16_t *) >> 2U &
+ (int16_t)255);
+ return (CLITERAL(uint8_t_x5){
+ .fst = r0, .snd = r1, .thd = r2, .f3 = r3, .f4 = r4});
+}
+
+static KRML_MUSTINLINE void
+libcrux_ml_kem_vector_portable_serialize_serialize_10(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v,
+ uint8_t ret[20U]) {
+ uint8_t_x5 r0_4 = libcrux_ml_kem_vector_portable_serialize_serialize_10_int(
+ Eurydice_array_to_subslice2(v.elements, (size_t)0U, (size_t)4U, int16_t));
+ uint8_t_x5 r5_9 = libcrux_ml_kem_vector_portable_serialize_serialize_10_int(
+ Eurydice_array_to_subslice2(v.elements, (size_t)4U, (size_t)8U, int16_t));
+ uint8_t_x5 r10_14 = libcrux_ml_kem_vector_portable_serialize_serialize_10_int(
+ Eurydice_array_to_subslice2(v.elements, (size_t)8U, (size_t)12U,
+ int16_t));
+ uint8_t_x5 r15_19 = libcrux_ml_kem_vector_portable_serialize_serialize_10_int(
+ Eurydice_array_to_subslice2(v.elements, (size_t)12U, (size_t)16U,
+ int16_t));
+ uint8_t result[20U] = {0U};
+ result[0U] = r0_4.fst;
+ result[1U] = r0_4.snd;
+ result[2U] = r0_4.thd;
+ result[3U] = r0_4.f3;
+ result[4U] = r0_4.f4;
+ result[5U] = r5_9.fst;
+ result[6U] = r5_9.snd;
+ result[7U] = r5_9.thd;
+ result[8U] = r5_9.f3;
+ result[9U] = r5_9.f4;
+ result[10U] = r10_14.fst;
+ result[11U] = r10_14.snd;
+ result[12U] = r10_14.thd;
+ result[13U] = r10_14.f3;
+ result[14U] = r10_14.f4;
+ result[15U] = r15_19.fst;
+ result[16U] = r15_19.snd;
+ result[17U] = r15_19.thd;
+ result[18U] = r15_19.f3;
+ result[19U] = r15_19.f4;
+ memcpy(ret, result, (size_t)20U * sizeof(uint8_t));
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline void libcrux_ml_kem_vector_portable_serialize_10_0d(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector a,
+ uint8_t ret[20U]) {
+ libcrux_ml_kem_vector_portable_serialize_serialize_10(a, ret);
+}
+
+static KRML_MUSTINLINE int16_t_x8
+libcrux_ml_kem_vector_portable_serialize_deserialize_10_int(
+ Eurydice_slice bytes) {
+ int16_t r0 =
+ ((int16_t)Eurydice_slice_index(bytes, (size_t)1U, uint8_t, uint8_t *) &
+ (int16_t)3)
+ << 8U |
+ ((int16_t)Eurydice_slice_index(bytes, (size_t)0U, uint8_t, uint8_t *) &
+ (int16_t)255);
+ int16_t r1 =
+ ((int16_t)Eurydice_slice_index(bytes, (size_t)2U, uint8_t, uint8_t *) &
+ (int16_t)15)
+ << 6U |
+ (int16_t)Eurydice_slice_index(bytes, (size_t)1U, uint8_t, uint8_t *) >>
+ 2U;
+ int16_t r2 =
+ ((int16_t)Eurydice_slice_index(bytes, (size_t)3U, uint8_t, uint8_t *) &
+ (int16_t)63)
+ << 4U |
+ (int16_t)Eurydice_slice_index(bytes, (size_t)2U, uint8_t, uint8_t *) >>
+ 4U;
+ int16_t r3 =
+ (int16_t)Eurydice_slice_index(bytes, (size_t)4U, uint8_t, uint8_t *)
+ << 2U |
+ (int16_t)Eurydice_slice_index(bytes, (size_t)3U, uint8_t, uint8_t *) >>
+ 6U;
+ int16_t r4 =
+ ((int16_t)Eurydice_slice_index(bytes, (size_t)6U, uint8_t, uint8_t *) &
+ (int16_t)3)
+ << 8U |
+ ((int16_t)Eurydice_slice_index(bytes, (size_t)5U, uint8_t, uint8_t *) &
+ (int16_t)255);
+ int16_t r5 =
+ ((int16_t)Eurydice_slice_index(bytes, (size_t)7U, uint8_t, uint8_t *) &
+ (int16_t)15)
+ << 6U |
+ (int16_t)Eurydice_slice_index(bytes, (size_t)6U, uint8_t, uint8_t *) >>
+ 2U;
+ int16_t r6 =
+ ((int16_t)Eurydice_slice_index(bytes, (size_t)8U, uint8_t, uint8_t *) &
+ (int16_t)63)
+ << 4U |
+ (int16_t)Eurydice_slice_index(bytes, (size_t)7U, uint8_t, uint8_t *) >>
+ 4U;
+ int16_t r7 =
+ (int16_t)Eurydice_slice_index(bytes, (size_t)9U, uint8_t, uint8_t *)
+ << 2U |
+ (int16_t)Eurydice_slice_index(bytes, (size_t)8U, uint8_t, uint8_t *) >>
+ 6U;
+ return (CLITERAL(int16_t_x8){.fst = r0,
+ .snd = r1,
+ .thd = r2,
+ .f3 = r3,
+ .f4 = r4,
+ .f5 = r5,
+ .f6 = r6,
+ .f7 = r7});
+}
+
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_serialize_deserialize_10(Eurydice_slice bytes) {
+ int16_t_x8 v0_7 = libcrux_ml_kem_vector_portable_serialize_deserialize_10_int(
+ Eurydice_slice_subslice2(bytes, (size_t)0U, (size_t)10U, uint8_t));
+ int16_t_x8 v8_15 =
+ libcrux_ml_kem_vector_portable_serialize_deserialize_10_int(
+ Eurydice_slice_subslice2(bytes, (size_t)10U, (size_t)20U, uint8_t));
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v =
+ libcrux_ml_kem_vector_portable_vector_type_zero();
+ v.elements[0U] = v0_7.fst;
+ v.elements[1U] = v0_7.snd;
+ v.elements[2U] = v0_7.thd;
+ v.elements[3U] = v0_7.f3;
+ v.elements[4U] = v0_7.f4;
+ v.elements[5U] = v0_7.f5;
+ v.elements[6U] = v0_7.f6;
+ v.elements[7U] = v0_7.f7;
+ v.elements[8U] = v8_15.fst;
+ v.elements[9U] = v8_15.snd;
+ v.elements[10U] = v8_15.thd;
+ v.elements[11U] = v8_15.f3;
+ v.elements[12U] = v8_15.f4;
+ v.elements[13U] = v8_15.f5;
+ v.elements[14U] = v8_15.f6;
+ v.elements[15U] = v8_15.f7;
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_deserialize_10_0d(Eurydice_slice a) {
+ return libcrux_ml_kem_vector_portable_serialize_deserialize_10(a);
+}
+
+typedef struct uint8_t_x3_s {
+ uint8_t fst;
+ uint8_t snd;
+ uint8_t thd;
+} uint8_t_x3;
+
+static KRML_MUSTINLINE uint8_t_x3
+libcrux_ml_kem_vector_portable_serialize_serialize_12_int(Eurydice_slice v) {
+ uint8_t r0 =
+ (uint8_t)(Eurydice_slice_index(v, (size_t)0U, int16_t, int16_t *) &
+ (int16_t)255);
+ uint8_t r1 =
+ (uint8_t)(Eurydice_slice_index(v, (size_t)0U, int16_t, int16_t *) >> 8U |
+ (Eurydice_slice_index(v, (size_t)1U, int16_t, int16_t *) &
+ (int16_t)15)
+ << 4U);
+ uint8_t r2 =
+ (uint8_t)(Eurydice_slice_index(v, (size_t)1U, int16_t, int16_t *) >> 4U &
+ (int16_t)255);
+ return (CLITERAL(uint8_t_x3){.fst = r0, .snd = r1, .thd = r2});
+}
+
+static KRML_MUSTINLINE void
+libcrux_ml_kem_vector_portable_serialize_serialize_12(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v,
+ uint8_t ret[24U]) {
+ uint8_t_x3 r0_2 = libcrux_ml_kem_vector_portable_serialize_serialize_12_int(
+ Eurydice_array_to_subslice2(v.elements, (size_t)0U, (size_t)2U, int16_t));
+ uint8_t_x3 r3_5 = libcrux_ml_kem_vector_portable_serialize_serialize_12_int(
+ Eurydice_array_to_subslice2(v.elements, (size_t)2U, (size_t)4U, int16_t));
+ uint8_t_x3 r6_8 = libcrux_ml_kem_vector_portable_serialize_serialize_12_int(
+ Eurydice_array_to_subslice2(v.elements, (size_t)4U, (size_t)6U, int16_t));
+ uint8_t_x3 r9_11 = libcrux_ml_kem_vector_portable_serialize_serialize_12_int(
+ Eurydice_array_to_subslice2(v.elements, (size_t)6U, (size_t)8U, int16_t));
+ uint8_t_x3 r12_14 = libcrux_ml_kem_vector_portable_serialize_serialize_12_int(
+ Eurydice_array_to_subslice2(v.elements, (size_t)8U, (size_t)10U,
+ int16_t));
+ uint8_t_x3 r15_17 = libcrux_ml_kem_vector_portable_serialize_serialize_12_int(
+ Eurydice_array_to_subslice2(v.elements, (size_t)10U, (size_t)12U,
+ int16_t));
+ uint8_t_x3 r18_20 = libcrux_ml_kem_vector_portable_serialize_serialize_12_int(
+ Eurydice_array_to_subslice2(v.elements, (size_t)12U, (size_t)14U,
+ int16_t));
+ uint8_t_x3 r21_23 = libcrux_ml_kem_vector_portable_serialize_serialize_12_int(
+ Eurydice_array_to_subslice2(v.elements, (size_t)14U, (size_t)16U,
+ int16_t));
+ uint8_t result[24U] = {0U};
+ result[0U] = r0_2.fst;
+ result[1U] = r0_2.snd;
+ result[2U] = r0_2.thd;
+ result[3U] = r3_5.fst;
+ result[4U] = r3_5.snd;
+ result[5U] = r3_5.thd;
+ result[6U] = r6_8.fst;
+ result[7U] = r6_8.snd;
+ result[8U] = r6_8.thd;
+ result[9U] = r9_11.fst;
+ result[10U] = r9_11.snd;
+ result[11U] = r9_11.thd;
+ result[12U] = r12_14.fst;
+ result[13U] = r12_14.snd;
+ result[14U] = r12_14.thd;
+ result[15U] = r15_17.fst;
+ result[16U] = r15_17.snd;
+ result[17U] = r15_17.thd;
+ result[18U] = r18_20.fst;
+ result[19U] = r18_20.snd;
+ result[20U] = r18_20.thd;
+ result[21U] = r21_23.fst;
+ result[22U] = r21_23.snd;
+ result[23U] = r21_23.thd;
+ memcpy(ret, result, (size_t)24U * sizeof(uint8_t));
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline void libcrux_ml_kem_vector_portable_serialize_12_0d(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector a,
+ uint8_t ret[24U]) {
+ libcrux_ml_kem_vector_portable_serialize_serialize_12(a, ret);
+}
+
+typedef struct int16_t_x2_s {
+ int16_t fst;
+ int16_t snd;
+} int16_t_x2;
+
+static KRML_MUSTINLINE int16_t_x2
+libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(
+ Eurydice_slice bytes) {
+ int16_t byte0 =
+ (int16_t)Eurydice_slice_index(bytes, (size_t)0U, uint8_t, uint8_t *);
+ int16_t byte1 =
+ (int16_t)Eurydice_slice_index(bytes, (size_t)1U, uint8_t, uint8_t *);
+ int16_t byte2 =
+ (int16_t)Eurydice_slice_index(bytes, (size_t)2U, uint8_t, uint8_t *);
+ int16_t r0 = (byte1 & (int16_t)15) << 8U | (byte0 & (int16_t)255);
+ int16_t r1 = byte2 << 4U | (byte1 >> 4U & (int16_t)15);
+ return (CLITERAL(int16_t_x2){.fst = r0, .snd = r1});
+}
+
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_serialize_deserialize_12(Eurydice_slice bytes) {
+ int16_t_x2 v0_1 = libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(
+ Eurydice_slice_subslice2(bytes, (size_t)0U, (size_t)3U, uint8_t));
+ int16_t_x2 v2_3 = libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(
+ Eurydice_slice_subslice2(bytes, (size_t)3U, (size_t)6U, uint8_t));
+ int16_t_x2 v4_5 = libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(
+ Eurydice_slice_subslice2(bytes, (size_t)6U, (size_t)9U, uint8_t));
+ int16_t_x2 v6_7 = libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(
+ Eurydice_slice_subslice2(bytes, (size_t)9U, (size_t)12U, uint8_t));
+ int16_t_x2 v8_9 = libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(
+ Eurydice_slice_subslice2(bytes, (size_t)12U, (size_t)15U, uint8_t));
+ int16_t_x2 v10_11 =
+ libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(
+ Eurydice_slice_subslice2(bytes, (size_t)15U, (size_t)18U, uint8_t));
+ int16_t_x2 v12_13 =
+ libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(
+ Eurydice_slice_subslice2(bytes, (size_t)18U, (size_t)21U, uint8_t));
+ int16_t_x2 v14_15 =
+ libcrux_ml_kem_vector_portable_serialize_deserialize_12_int(
+ Eurydice_slice_subslice2(bytes, (size_t)21U, (size_t)24U, uint8_t));
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector re =
+ libcrux_ml_kem_vector_portable_vector_type_zero();
+ re.elements[0U] = v0_1.fst;
+ re.elements[1U] = v0_1.snd;
+ re.elements[2U] = v2_3.fst;
+ re.elements[3U] = v2_3.snd;
+ re.elements[4U] = v4_5.fst;
+ re.elements[5U] = v4_5.snd;
+ re.elements[6U] = v6_7.fst;
+ re.elements[7U] = v6_7.snd;
+ re.elements[8U] = v8_9.fst;
+ re.elements[9U] = v8_9.snd;
+ re.elements[10U] = v10_11.fst;
+ re.elements[11U] = v10_11.snd;
+ re.elements[12U] = v12_13.fst;
+ re.elements[13U] = v12_13.snd;
+ re.elements[14U] = v14_15.fst;
+ re.elements[15U] = v14_15.snd;
+ return re;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_deserialize_12_0d(Eurydice_slice a) {
+ return libcrux_ml_kem_vector_portable_serialize_deserialize_12(a);
+}
+
+static KRML_MUSTINLINE size_t
+libcrux_ml_kem_vector_portable_sampling_rej_sample(Eurydice_slice a,
+ Eurydice_slice result) {
+ size_t sampled = (size_t)0U;
+ for (size_t i = (size_t)0U; i < Eurydice_slice_len(a, uint8_t) / (size_t)3U;
+ i++) {
+ size_t i0 = i;
+ int16_t b1 = (int16_t)Eurydice_slice_index(a, i0 * (size_t)3U + (size_t)0U,
+ uint8_t, uint8_t *);
+ int16_t b2 = (int16_t)Eurydice_slice_index(a, i0 * (size_t)3U + (size_t)1U,
+ uint8_t, uint8_t *);
+ int16_t b3 = (int16_t)Eurydice_slice_index(a, i0 * (size_t)3U + (size_t)2U,
+ uint8_t, uint8_t *);
+ int16_t d1 = (b2 & (int16_t)15) << 8U | b1;
+ int16_t d2 = b3 << 4U | b2 >> 4U;
+ bool uu____0;
+ int16_t uu____1;
+ bool uu____2;
+ size_t uu____3;
+ int16_t uu____4;
+ size_t uu____5;
+ int16_t uu____6;
+ if (d1 < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS) {
+ if (sampled < (size_t)16U) {
+ Eurydice_slice_index(result, sampled, int16_t, int16_t *) = d1;
+ sampled++;
+ uu____1 = d2;
+ uu____6 = LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS;
+ uu____0 = uu____1 < uu____6;
+ if (uu____0) {
+ uu____3 = sampled;
+ uu____2 = uu____3 < (size_t)16U;
+ if (uu____2) {
+ uu____4 = d2;
+ uu____5 = sampled;
+ Eurydice_slice_index(result, uu____5, int16_t, int16_t *) = uu____4;
+ sampled++;
+ continue;
+ }
+ }
+ continue;
+ }
+ }
+ uu____1 = d2;
+ uu____6 = LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS;
+ uu____0 = uu____1 < uu____6;
+ if (uu____0) {
+ uu____3 = sampled;
+ uu____2 = uu____3 < (size_t)16U;
+ if (uu____2) {
+ uu____4 = d2;
+ uu____5 = sampled;
+ Eurydice_slice_index(result, uu____5, int16_t, int16_t *) = uu____4;
+ sampled++;
+ continue;
+ }
+ }
+ }
+ return sampled;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline size_t libcrux_ml_kem_vector_portable_rej_sample_0d(
+ Eurydice_slice a, Eurydice_slice out) {
+ return libcrux_ml_kem_vector_portable_sampling_rej_sample(a, out);
+}
+
+#define LIBCRUX_ML_KEM_MLKEM768_VECTOR_U_COMPRESSION_FACTOR_768 ((size_t)10U)
+
+#define LIBCRUX_ML_KEM_MLKEM768_C1_BLOCK_SIZE_768 \
+ (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * \
+ LIBCRUX_ML_KEM_MLKEM768_VECTOR_U_COMPRESSION_FACTOR_768 / (size_t)8U)
+
+#define LIBCRUX_ML_KEM_MLKEM768_RANK_768 ((size_t)3U)
+
+#define LIBCRUX_ML_KEM_MLKEM768_C1_SIZE_768 \
+ (LIBCRUX_ML_KEM_MLKEM768_C1_BLOCK_SIZE_768 * LIBCRUX_ML_KEM_MLKEM768_RANK_768)
+
+#define LIBCRUX_ML_KEM_MLKEM768_VECTOR_V_COMPRESSION_FACTOR_768 ((size_t)4U)
+
+#define LIBCRUX_ML_KEM_MLKEM768_C2_SIZE_768 \
+ (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * \
+ LIBCRUX_ML_KEM_MLKEM768_VECTOR_V_COMPRESSION_FACTOR_768 / (size_t)8U)
+
+#define LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE_768 \
+ (LIBCRUX_ML_KEM_MLKEM768_C1_SIZE_768 + LIBCRUX_ML_KEM_MLKEM768_C2_SIZE_768)
+
+#define LIBCRUX_ML_KEM_MLKEM768_T_AS_NTT_ENCODED_SIZE_768 \
+ (LIBCRUX_ML_KEM_MLKEM768_RANK_768 * \
+ LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * \
+ LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT / (size_t)8U)
+
+#define LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_PUBLIC_KEY_SIZE_768 \
+ (LIBCRUX_ML_KEM_MLKEM768_T_AS_NTT_ENCODED_SIZE_768 + (size_t)32U)
+
+#define LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_SECRET_KEY_SIZE_768 \
+ (LIBCRUX_ML_KEM_MLKEM768_RANK_768 * \
+ LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT * \
+ LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_COEFFICIENT / (size_t)8U)
+
+#define LIBCRUX_ML_KEM_MLKEM768_ETA1 ((size_t)2U)
+
+#define LIBCRUX_ML_KEM_MLKEM768_ETA1_RANDOMNESS_SIZE \
+ (LIBCRUX_ML_KEM_MLKEM768_ETA1 * (size_t)64U)
+
+#define LIBCRUX_ML_KEM_MLKEM768_ETA2 ((size_t)2U)
+
+#define LIBCRUX_ML_KEM_MLKEM768_ETA2_RANDOMNESS_SIZE \
+ (LIBCRUX_ML_KEM_MLKEM768_ETA2 * (size_t)64U)
+
+#define LIBCRUX_ML_KEM_MLKEM768_IMPLICIT_REJECTION_HASH_INPUT_SIZE \
+ (LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE + \
+ LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_CIPHERTEXT_SIZE_768)
+
+typedef libcrux_ml_kem_types_MlKemPrivateKey_55
+ libcrux_ml_kem_mlkem768_MlKem768PrivateKey;
+
+typedef libcrux_ml_kem_types_MlKemPublicKey_15
+ libcrux_ml_kem_mlkem768_MlKem768PublicKey;
+
+#define LIBCRUX_ML_KEM_MLKEM768_RANKED_BYTES_PER_RING_ELEMENT_768 \
+ (LIBCRUX_ML_KEM_MLKEM768_RANK_768 * \
+ LIBCRUX_ML_KEM_CONSTANTS_BITS_PER_RING_ELEMENT / (size_t)8U)
+
+#define LIBCRUX_ML_KEM_MLKEM768_SECRET_KEY_SIZE_768 \
+ (LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_SECRET_KEY_SIZE_768 + \
+ LIBCRUX_ML_KEM_MLKEM768_CPA_PKE_PUBLIC_KEY_SIZE_768 + \
+ LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE + \
+ LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE)
+
+/**
+A monomorphic instance of libcrux_ml_kem.polynomial.PolynomialRingElement
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+
+*/
+typedef struct libcrux_ml_kem_polynomial_PolynomialRingElement_f0_s {
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficients[16U];
+} libcrux_ml_kem_polynomial_PolynomialRingElement_f0;
+
+/**
+This function found in impl
+{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0]}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.polynomial.ZERO_89
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static inline libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_polynomial_ZERO_89_ea(void) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 lit;
+ lit.coefficients[0U] = libcrux_ml_kem_vector_portable_ZERO_0d();
+ lit.coefficients[1U] = libcrux_ml_kem_vector_portable_ZERO_0d();
+ lit.coefficients[2U] = libcrux_ml_kem_vector_portable_ZERO_0d();
+ lit.coefficients[3U] = libcrux_ml_kem_vector_portable_ZERO_0d();
+ lit.coefficients[4U] = libcrux_ml_kem_vector_portable_ZERO_0d();
+ lit.coefficients[5U] = libcrux_ml_kem_vector_portable_ZERO_0d();
+ lit.coefficients[6U] = libcrux_ml_kem_vector_portable_ZERO_0d();
+ lit.coefficients[7U] = libcrux_ml_kem_vector_portable_ZERO_0d();
+ lit.coefficients[8U] = libcrux_ml_kem_vector_portable_ZERO_0d();
+ lit.coefficients[9U] = libcrux_ml_kem_vector_portable_ZERO_0d();
+ lit.coefficients[10U] = libcrux_ml_kem_vector_portable_ZERO_0d();
+ lit.coefficients[11U] = libcrux_ml_kem_vector_portable_ZERO_0d();
+ lit.coefficients[12U] = libcrux_ml_kem_vector_portable_ZERO_0d();
+ lit.coefficients[13U] = libcrux_ml_kem_vector_portable_ZERO_0d();
+ lit.coefficients[14U] = libcrux_ml_kem_vector_portable_ZERO_0d();
+ lit.coefficients[15U] = libcrux_ml_kem_vector_portable_ZERO_0d();
+ return lit;
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_secret_key.closure
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+- K= 3
+*/
+static inline libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_ind_cpa_deserialize_secret_key_closure_6b(size_t _) {
+ return libcrux_ml_kem_polynomial_ZERO_89_ea();
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.serialize.deserialize_to_uncompressed_ring_element with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_serialize_deserialize_to_uncompressed_ring_element_af(
+ Eurydice_slice serialized) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re =
+ libcrux_ml_kem_polynomial_ZERO_89_ea();
+ for (size_t i = (size_t)0U;
+ i < Eurydice_slice_len(serialized, uint8_t) / (size_t)24U; i++) {
+ size_t i0 = i;
+ Eurydice_slice bytes = Eurydice_slice_subslice2(
+ serialized, i0 * (size_t)24U, i0 * (size_t)24U + (size_t)24U, uint8_t);
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 =
+ libcrux_ml_kem_vector_portable_deserialize_12_0d(bytes);
+ re.coefficients[i0] = uu____0;
+ }
+ return re;
+}
+
+/**
+ Call [`deserialize_to_uncompressed_ring_element`] for each ring element.
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_secret_key
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+- K= 3
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_ind_cpa_deserialize_secret_key_24(
+ Eurydice_slice secret_key,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[3U]) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 secret_as_ntt[3U];
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ secret_as_ntt[i] = libcrux_ml_kem_polynomial_ZERO_89_ea();
+ }
+ for (size_t i = (size_t)0U;
+ i < Eurydice_slice_len(secret_key, uint8_t) /
+ LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT;
+ i++) {
+ size_t i0 = i;
+ Eurydice_slice secret_bytes = Eurydice_slice_subslice2(
+ secret_key, i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,
+ i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT +
+ LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,
+ uint8_t);
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____0 =
+ libcrux_ml_kem_serialize_deserialize_to_uncompressed_ring_element_af(
+ secret_bytes);
+ secret_as_ntt[i0] = uu____0;
+ }
+ memcpy(
+ ret, secret_as_ntt,
+ (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0));
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.ind_cpa.unpacked.IndCpaPrivateKeyUnpacked with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+- $3size_t
+*/
+typedef struct libcrux_ml_kem_ind_cpa_unpacked_IndCpaPrivateKeyUnpacked_f8_s {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 secret_as_ntt[3U];
+} libcrux_ml_kem_ind_cpa_unpacked_IndCpaPrivateKeyUnpacked_f8;
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u.closure with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+- K= 3
+- CIPHERTEXT_SIZE= 1088
+- U_COMPRESSION_FACTOR= 10
+*/
+static inline libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_ind_cpa_deserialize_then_decompress_u_closure_7c(size_t _) {
+ return libcrux_ml_kem_polynomial_ZERO_89_ea();
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.vector.portable.compress.decompress_ciphertext_coefficient with
+const generics
+- COEFFICIENT_BITS= 10
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_compress_decompress_ciphertext_coefficient_6b(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) {
+ size_t i0 = i;
+ int32_t decompressed = (int32_t)v.elements[i0] *
+ (int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS;
+ decompressed = (decompressed << 1U) + ((int32_t)1 << (uint32_t)(int32_t)10);
+ decompressed = decompressed >> (uint32_t)((int32_t)10 + (int32_t)1);
+ v.elements[i0] = (int16_t)decompressed;
+ }
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+/**
+A monomorphic instance of
+libcrux_ml_kem.vector.portable.decompress_ciphertext_coefficient_0d with const
+generics
+- COEFFICIENT_BITS= 10
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_decompress_ciphertext_coefficient_0d_5a(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ return libcrux_ml_kem_vector_portable_compress_decompress_ciphertext_coefficient_6b(
+ v);
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.serialize.deserialize_then_decompress_10 with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_serialize_deserialize_then_decompress_10_2c(
+ Eurydice_slice serialized) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re =
+ libcrux_ml_kem_polynomial_ZERO_89_ea();
+ for (size_t i = (size_t)0U;
+ i < Eurydice_slice_len(serialized, uint8_t) / (size_t)20U; i++) {
+ size_t i0 = i;
+ Eurydice_slice bytes = Eurydice_slice_subslice2(
+ serialized, i0 * (size_t)20U, i0 * (size_t)20U + (size_t)20U, uint8_t);
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficient =
+ libcrux_ml_kem_vector_portable_deserialize_10_0d(bytes);
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 =
+ libcrux_ml_kem_vector_portable_decompress_ciphertext_coefficient_0d_5a(
+ coefficient);
+ re.coefficients[i0] = uu____0;
+ }
+ return re;
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.vector.portable.compress.decompress_ciphertext_coefficient with
+const generics
+- COEFFICIENT_BITS= 11
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_compress_decompress_ciphertext_coefficient_6b0(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) {
+ size_t i0 = i;
+ int32_t decompressed = (int32_t)v.elements[i0] *
+ (int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS;
+ decompressed = (decompressed << 1U) + ((int32_t)1 << (uint32_t)(int32_t)11);
+ decompressed = decompressed >> (uint32_t)((int32_t)11 + (int32_t)1);
+ v.elements[i0] = (int16_t)decompressed;
+ }
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+/**
+A monomorphic instance of
+libcrux_ml_kem.vector.portable.decompress_ciphertext_coefficient_0d with const
+generics
+- COEFFICIENT_BITS= 11
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_decompress_ciphertext_coefficient_0d_5a0(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ return libcrux_ml_kem_vector_portable_compress_decompress_ciphertext_coefficient_6b0(
+ v);
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.serialize.deserialize_then_decompress_11 with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_serialize_deserialize_then_decompress_11_8d(
+ Eurydice_slice serialized) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re =
+ libcrux_ml_kem_polynomial_ZERO_89_ea();
+ for (size_t i = (size_t)0U;
+ i < Eurydice_slice_len(serialized, uint8_t) / (size_t)22U; i++) {
+ size_t i0 = i;
+ Eurydice_slice bytes = Eurydice_slice_subslice2(
+ serialized, i0 * (size_t)22U, i0 * (size_t)22U + (size_t)22U, uint8_t);
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficient =
+ libcrux_ml_kem_vector_portable_deserialize_11_0d(bytes);
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 =
+ libcrux_ml_kem_vector_portable_decompress_ciphertext_coefficient_0d_5a0(
+ coefficient);
+ re.coefficients[i0] = uu____0;
+ }
+ return re;
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_u with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+- COMPRESSION_FACTOR= 10
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_serialize_deserialize_then_decompress_ring_element_u_34(
+ Eurydice_slice serialized) {
+ return libcrux_ml_kem_serialize_deserialize_then_decompress_10_2c(serialized);
+}
+
+typedef struct libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2_s {
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector fst;
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector snd;
+} libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2;
+
+/**
+A monomorphic instance of libcrux_ml_kem.vector.traits.montgomery_multiply_fe
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_traits_montgomery_multiply_fe_67(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v, int16_t fer) {
+ return libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_0d(v,
+ fer);
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.ntt.ntt_layer_int_vec_step
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static KRML_MUSTINLINE
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2
+ libcrux_ml_kem_ntt_ntt_layer_int_vec_step_0c(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector a,
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector b,
+ int16_t zeta_r) {
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector t =
+ libcrux_ml_kem_vector_traits_montgomery_multiply_fe_67(b, zeta_r);
+ b = libcrux_ml_kem_vector_portable_sub_0d(a, &t);
+ a = libcrux_ml_kem_vector_portable_add_0d(a, &t);
+ return (
+ CLITERAL(libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2){
+ .fst = a, .snd = b});
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_4_plus
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_ntt_ntt_at_layer_4_plus_51(
+ size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re,
+ size_t layer, size_t _initial_coefficient_bound) {
+ size_t step = (size_t)1U << (uint32_t)layer;
+ for (size_t i0 = (size_t)0U; i0 < (size_t)128U >> (uint32_t)layer; i0++) {
+ size_t round = i0;
+ zeta_i[0U] = zeta_i[0U] + (size_t)1U;
+ size_t offset = round * step * (size_t)2U;
+ size_t offset_vec = offset / (size_t)16U;
+ size_t step_vec = step / (size_t)16U;
+ for (size_t i = offset_vec; i < offset_vec + step_vec; i++) {
+ size_t j = i;
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2 uu____0 =
+ libcrux_ml_kem_ntt_ntt_layer_int_vec_step_0c(
+ re->coefficients[j], re->coefficients[j + step_vec],
+ libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U]]);
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector x = uu____0.fst;
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector y = uu____0.snd;
+ re->coefficients[j] = x;
+ re->coefficients[j + step_vec] = y;
+ }
+ }
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_3
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_ntt_ntt_at_layer_3_fd(
+ size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re,
+ size_t _layer, size_t _initial_coefficient_bound) {
+ for (size_t i = (size_t)0U; i < (size_t)16U; i++) {
+ size_t round = i;
+ zeta_i[0U] = zeta_i[0U] + (size_t)1U;
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 =
+ libcrux_ml_kem_vector_portable_ntt_layer_3_step_0d(
+ re->coefficients[round],
+ libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U]]);
+ re->coefficients[round] = uu____0;
+ }
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_2
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_ntt_ntt_at_layer_2_ad(
+ size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re,
+ size_t _layer, size_t _initial_coefficient_bound) {
+ for (size_t i = (size_t)0U; i < (size_t)16U; i++) {
+ size_t round = i;
+ zeta_i[0U] = zeta_i[0U] + (size_t)1U;
+ re->coefficients[round] =
+ libcrux_ml_kem_vector_portable_ntt_layer_2_step_0d(
+ re->coefficients[round],
+ libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U]],
+ libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U] +
+ (size_t)1U]);
+ zeta_i[0U] = zeta_i[0U] + (size_t)1U;
+ }
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_1
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_ntt_ntt_at_layer_1_a2(
+ size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re,
+ size_t _layer, size_t _initial_coefficient_bound) {
+ for (size_t i = (size_t)0U; i < (size_t)16U; i++) {
+ size_t round = i;
+ zeta_i[0U] = zeta_i[0U] + (size_t)1U;
+ re->coefficients[round] =
+ libcrux_ml_kem_vector_portable_ntt_layer_1_step_0d(
+ re->coefficients[round],
+ libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U]],
+ libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U] +
+ (size_t)1U],
+ libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U] +
+ (size_t)2U],
+ libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U] +
+ (size_t)3U]);
+ zeta_i[0U] = zeta_i[0U] + (size_t)3U;
+ }
+}
+
+/**
+This function found in impl
+{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0]}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.polynomial.poly_barrett_reduce_89
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_polynomial_poly_barrett_reduce_89_8b(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *self) {
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) {
+ size_t i0 = i;
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 =
+ libcrux_ml_kem_vector_portable_barrett_reduce_0d(
+ self->coefficients[i0]);
+ self->coefficients[i0] = uu____0;
+ }
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.ntt.ntt_vector_u
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+- VECTOR_U_COMPRESSION_FACTOR= 10
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_ntt_ntt_vector_u_9f(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re) {
+ size_t zeta_i = (size_t)0U;
+ libcrux_ml_kem_ntt_ntt_at_layer_4_plus_51(&zeta_i, re, (size_t)7U,
+ (size_t)3328U);
+ libcrux_ml_kem_ntt_ntt_at_layer_4_plus_51(&zeta_i, re, (size_t)6U,
+ (size_t)3328U);
+ libcrux_ml_kem_ntt_ntt_at_layer_4_plus_51(&zeta_i, re, (size_t)5U,
+ (size_t)3328U);
+ libcrux_ml_kem_ntt_ntt_at_layer_4_plus_51(&zeta_i, re, (size_t)4U,
+ (size_t)3328U);
+ libcrux_ml_kem_ntt_ntt_at_layer_3_fd(&zeta_i, re, (size_t)3U, (size_t)3328U);
+ libcrux_ml_kem_ntt_ntt_at_layer_2_ad(&zeta_i, re, (size_t)2U, (size_t)3328U);
+ libcrux_ml_kem_ntt_ntt_at_layer_1_a2(&zeta_i, re, (size_t)1U, (size_t)3328U);
+ libcrux_ml_kem_polynomial_poly_barrett_reduce_89_8b(re);
+}
+
+/**
+ Call [`deserialize_then_decompress_ring_element_u`] on each ring element
+ in the `ciphertext`.
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.ind_cpa.deserialize_then_decompress_u
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+- K= 3
+- CIPHERTEXT_SIZE= 1088
+- U_COMPRESSION_FACTOR= 10
+*/
+static KRML_MUSTINLINE void
+libcrux_ml_kem_ind_cpa_deserialize_then_decompress_u_f4(
+ uint8_t *ciphertext,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[3U]) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 u_as_ntt[3U];
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ u_as_ntt[i] = libcrux_ml_kem_polynomial_ZERO_89_ea();
+ }
+ for (size_t i = (size_t)0U;
+ i < Eurydice_slice_len(
+ Eurydice_array_to_slice((size_t)1088U, ciphertext, uint8_t),
+ uint8_t) /
+ (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT *
+ (size_t)10U / (size_t)8U);
+ i++) {
+ size_t i0 = i;
+ Eurydice_slice u_bytes = Eurydice_array_to_subslice2(
+ ciphertext,
+ i0 * (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT *
+ (size_t)10U / (size_t)8U),
+ i0 * (LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT *
+ (size_t)10U / (size_t)8U) +
+ LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT *
+ (size_t)10U / (size_t)8U,
+ uint8_t);
+ u_as_ntt[i0] =
+ libcrux_ml_kem_serialize_deserialize_then_decompress_ring_element_u_34(
+ u_bytes);
+ libcrux_ml_kem_ntt_ntt_vector_u_9f(&u_as_ntt[i0]);
+ }
+ memcpy(
+ ret, u_as_ntt,
+ (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0));
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.vector.portable.compress.decompress_ciphertext_coefficient with
+const generics
+- COEFFICIENT_BITS= 4
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_compress_decompress_ciphertext_coefficient_6b1(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) {
+ size_t i0 = i;
+ int32_t decompressed = (int32_t)v.elements[i0] *
+ (int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS;
+ decompressed = (decompressed << 1U) + ((int32_t)1 << (uint32_t)(int32_t)4);
+ decompressed = decompressed >> (uint32_t)((int32_t)4 + (int32_t)1);
+ v.elements[i0] = (int16_t)decompressed;
+ }
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+/**
+A monomorphic instance of
+libcrux_ml_kem.vector.portable.decompress_ciphertext_coefficient_0d with const
+generics
+- COEFFICIENT_BITS= 4
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_decompress_ciphertext_coefficient_0d_5a1(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ return libcrux_ml_kem_vector_portable_compress_decompress_ciphertext_coefficient_6b1(
+ v);
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_4
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_serialize_deserialize_then_decompress_4_41(
+ Eurydice_slice serialized) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re =
+ libcrux_ml_kem_polynomial_ZERO_89_ea();
+ for (size_t i = (size_t)0U;
+ i < Eurydice_slice_len(serialized, uint8_t) / (size_t)8U; i++) {
+ size_t i0 = i;
+ Eurydice_slice bytes = Eurydice_slice_subslice2(
+ serialized, i0 * (size_t)8U, i0 * (size_t)8U + (size_t)8U, uint8_t);
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficient =
+ libcrux_ml_kem_vector_portable_deserialize_4_0d(bytes);
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 =
+ libcrux_ml_kem_vector_portable_decompress_ciphertext_coefficient_0d_5a1(
+ coefficient);
+ re.coefficients[i0] = uu____0;
+ }
+ return re;
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.vector.portable.compress.decompress_ciphertext_coefficient with
+const generics
+- COEFFICIENT_BITS= 5
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_compress_decompress_ciphertext_coefficient_6b2(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) {
+ size_t i0 = i;
+ int32_t decompressed = (int32_t)v.elements[i0] *
+ (int32_t)LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS;
+ decompressed = (decompressed << 1U) + ((int32_t)1 << (uint32_t)(int32_t)5);
+ decompressed = decompressed >> (uint32_t)((int32_t)5 + (int32_t)1);
+ v.elements[i0] = (int16_t)decompressed;
+ }
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+/**
+A monomorphic instance of
+libcrux_ml_kem.vector.portable.decompress_ciphertext_coefficient_0d with const
+generics
+- COEFFICIENT_BITS= 5
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_decompress_ciphertext_coefficient_0d_5a2(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ return libcrux_ml_kem_vector_portable_compress_decompress_ciphertext_coefficient_6b2(
+ v);
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.serialize.deserialize_then_decompress_5
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_serialize_deserialize_then_decompress_5_4e(
+ Eurydice_slice serialized) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re =
+ libcrux_ml_kem_polynomial_ZERO_89_ea();
+ for (size_t i = (size_t)0U;
+ i < Eurydice_slice_len(serialized, uint8_t) / (size_t)10U; i++) {
+ size_t i0 = i;
+ Eurydice_slice bytes = Eurydice_slice_subslice2(
+ serialized, i0 * (size_t)10U, i0 * (size_t)10U + (size_t)10U, uint8_t);
+ re.coefficients[i0] =
+ libcrux_ml_kem_vector_portable_deserialize_5_0d(bytes);
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____1 =
+ libcrux_ml_kem_vector_portable_decompress_ciphertext_coefficient_0d_5a2(
+ re.coefficients[i0]);
+ re.coefficients[i0] = uu____1;
+ }
+ return re;
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.serialize.deserialize_then_decompress_ring_element_v with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+- COMPRESSION_FACTOR= 4
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_serialize_deserialize_then_decompress_ring_element_v_56(
+ Eurydice_slice serialized) {
+ return libcrux_ml_kem_serialize_deserialize_then_decompress_4_41(serialized);
+}
+
+/**
+ Given two `KyberPolynomialRingElement`s in their NTT representations,
+ compute their product. Given two polynomials in the NTT domain `f^` and `ĵ`,
+ the `iᵗʰ` coefficient of the product `k̂` is determined by the calculation:
+
+ ```plaintext
+ ĥ[2·i] + ĥ[2·i + 1]X = (f^[2·i] + f^[2·i + 1]X)·(ĝ[2·i] + ĝ[2·i + 1]X) mod (X²
+ - ζ^(2·BitRev₇(i) + 1))
+ ```
+
+ This function almost implements <strong>Algorithm 10</strong> of the
+ NIST FIPS 203 standard, which is reproduced below:
+
+ ```plaintext
+ Input: Two arrays fˆ ∈ ℤ₂₅₆ and ĝ ∈ ℤ₂₅₆.
+ Output: An array ĥ ∈ ℤq.
+
+ for(i ← 0; i < 128; i++)
+ (ĥ[2i], ĥ[2i+1]) ← BaseCaseMultiply(fˆ[2i], fˆ[2i+1], ĝ[2i], ĝ[2i+1],
+ ζ^(2·BitRev₇(i) + 1)) end for return ĥ
+ ```
+ We say "almost" because the coefficients of the ring element output by
+ this function are in the Montgomery domain.
+
+ The NIST FIPS 203 standard can be found at
+ <https://csrc.nist.gov/pubs/fips/203/ipd>.
+*/
+/**
+This function found in impl
+{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0]}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.polynomial.ntt_multiply_89
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_polynomial_ntt_multiply_89_2a(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *self,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *rhs) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 out =
+ libcrux_ml_kem_polynomial_ZERO_89_ea();
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) {
+ size_t i0 = i;
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 =
+ libcrux_ml_kem_vector_portable_ntt_multiply_0d(
+ &self->coefficients[i0], &rhs->coefficients[i0],
+ libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[(size_t)64U +
+ (size_t)4U * i0],
+ libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[(size_t)64U +
+ (size_t)4U * i0 +
+ (size_t)1U],
+ libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[(size_t)64U +
+ (size_t)4U * i0 +
+ (size_t)2U],
+ libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[(size_t)64U +
+ (size_t)4U * i0 +
+ (size_t)3U]);
+ out.coefficients[i0] = uu____0;
+ }
+ return out;
+}
+
+/**
+ Given two polynomial ring elements `lhs` and `rhs`, compute the pointwise
+ sum of their constituent coefficients.
+*/
+/**
+This function found in impl
+{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0]}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.polynomial.add_to_ring_element_89
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+- K= 3
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_polynomial_add_to_ring_element_89_84(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *self,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *rhs) {
+ for (size_t i = (size_t)0U;
+ i < Eurydice_slice_len(
+ Eurydice_array_to_slice(
+ (size_t)16U, self->coefficients,
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector),
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector);
+ i++) {
+ size_t i0 = i;
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 =
+ libcrux_ml_kem_vector_portable_add_0d(self->coefficients[i0],
+ &rhs->coefficients[i0]);
+ self->coefficients[i0] = uu____0;
+ }
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_1
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_invert_ntt_invert_ntt_at_layer_1_83(
+ size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re,
+ size_t _layer) {
+ for (size_t i = (size_t)0U; i < (size_t)16U; i++) {
+ size_t round = i;
+ zeta_i[0U] = zeta_i[0U] - (size_t)1U;
+ re->coefficients[round] =
+ libcrux_ml_kem_vector_portable_inv_ntt_layer_1_step_0d(
+ re->coefficients[round],
+ libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U]],
+ libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U] -
+ (size_t)1U],
+ libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U] -
+ (size_t)2U],
+ libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U] -
+ (size_t)3U]);
+ zeta_i[0U] = zeta_i[0U] - (size_t)3U;
+ }
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_2
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_invert_ntt_invert_ntt_at_layer_2_c3(
+ size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re,
+ size_t _layer) {
+ for (size_t i = (size_t)0U; i < (size_t)16U; i++) {
+ size_t round = i;
+ zeta_i[0U] = zeta_i[0U] - (size_t)1U;
+ re->coefficients[round] =
+ libcrux_ml_kem_vector_portable_inv_ntt_layer_2_step_0d(
+ re->coefficients[round],
+ libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U]],
+ libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U] -
+ (size_t)1U]);
+ zeta_i[0U] = zeta_i[0U] - (size_t)1U;
+ }
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_3
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_invert_ntt_invert_ntt_at_layer_3_68(
+ size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re,
+ size_t _layer) {
+ for (size_t i = (size_t)0U; i < (size_t)16U; i++) {
+ size_t round = i;
+ zeta_i[0U] = zeta_i[0U] - (size_t)1U;
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 =
+ libcrux_ml_kem_vector_portable_inv_ntt_layer_3_step_0d(
+ re->coefficients[round],
+ libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U]]);
+ re->coefficients[round] = uu____0;
+ }
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.invert_ntt.inv_ntt_layer_int_vec_step_reduce with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+
+*/
+static KRML_MUSTINLINE
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2
+ libcrux_ml_kem_invert_ntt_inv_ntt_layer_int_vec_step_reduce_65(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector a,
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector b,
+ int16_t zeta_r) {
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector a_minus_b =
+ libcrux_ml_kem_vector_portable_sub_0d(b, &a);
+ a = libcrux_ml_kem_vector_portable_barrett_reduce_0d(
+ libcrux_ml_kem_vector_portable_add_0d(a, &b));
+ b = libcrux_ml_kem_vector_traits_montgomery_multiply_fe_67(a_minus_b, zeta_r);
+ return (
+ CLITERAL(libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2){
+ .fst = a, .snd = b});
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_at_layer_4_plus
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static KRML_MUSTINLINE void
+libcrux_ml_kem_invert_ntt_invert_ntt_at_layer_4_plus_6e(
+ size_t *zeta_i, libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re,
+ size_t layer) {
+ size_t step = (size_t)1U << (uint32_t)layer;
+ for (size_t i0 = (size_t)0U; i0 < (size_t)128U >> (uint32_t)layer; i0++) {
+ size_t round = i0;
+ zeta_i[0U] = zeta_i[0U] - (size_t)1U;
+ size_t offset = round * step * (size_t)2U;
+ size_t offset_vec =
+ offset / LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR;
+ size_t step_vec =
+ step / LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR;
+ for (size_t i = offset_vec; i < offset_vec + step_vec; i++) {
+ size_t j = i;
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector_x2 uu____0 =
+ libcrux_ml_kem_invert_ntt_inv_ntt_layer_int_vec_step_reduce_65(
+ re->coefficients[j], re->coefficients[j + step_vec],
+ libcrux_ml_kem_polynomial_ZETAS_TIMES_MONTGOMERY_R[zeta_i[0U]]);
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector x = uu____0.fst;
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector y = uu____0.snd;
+ re->coefficients[j] = x;
+ re->coefficients[j + step_vec] = y;
+ }
+ }
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.invert_ntt.invert_ntt_montgomery
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+- K= 3
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_invert_ntt_invert_ntt_montgomery_f6(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re) {
+ size_t zeta_i =
+ LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT / (size_t)2U;
+ libcrux_ml_kem_invert_ntt_invert_ntt_at_layer_1_83(&zeta_i, re, (size_t)1U);
+ libcrux_ml_kem_invert_ntt_invert_ntt_at_layer_2_c3(&zeta_i, re, (size_t)2U);
+ libcrux_ml_kem_invert_ntt_invert_ntt_at_layer_3_68(&zeta_i, re, (size_t)3U);
+ libcrux_ml_kem_invert_ntt_invert_ntt_at_layer_4_plus_6e(&zeta_i, re,
+ (size_t)4U);
+ libcrux_ml_kem_invert_ntt_invert_ntt_at_layer_4_plus_6e(&zeta_i, re,
+ (size_t)5U);
+ libcrux_ml_kem_invert_ntt_invert_ntt_at_layer_4_plus_6e(&zeta_i, re,
+ (size_t)6U);
+ libcrux_ml_kem_invert_ntt_invert_ntt_at_layer_4_plus_6e(&zeta_i, re,
+ (size_t)7U);
+ libcrux_ml_kem_polynomial_poly_barrett_reduce_89_8b(re);
+}
+
+/**
+This function found in impl
+{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0]}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.polynomial.subtract_reduce_89
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_polynomial_subtract_reduce_89_d4(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *self,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 b) {
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) {
+ size_t i0 = i;
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector
+ coefficient_normal_form =
+ libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_0d(
+ b.coefficients[i0], (int16_t)1441);
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 =
+ libcrux_ml_kem_vector_portable_barrett_reduce_0d(
+ libcrux_ml_kem_vector_portable_sub_0d(self->coefficients[i0],
+ &coefficient_normal_form));
+ b.coefficients[i0] = uu____0;
+ }
+ return b;
+}
+
+/**
+ The following functions compute various expressions involving
+ vectors and matrices. The computation of these expressions has been
+ abstracted away into these functions in order to save on loop iterations.
+ Compute v − InverseNTT(sᵀ ◦ NTT(u))
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.matrix.compute_message
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+- K= 3
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_matrix_compute_message_b3(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *v,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *secret_as_ntt,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *u_as_ntt) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 result =
+ libcrux_ml_kem_polynomial_ZERO_89_ea();
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ size_t i0 = i;
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 product =
+ libcrux_ml_kem_polynomial_ntt_multiply_89_2a(&secret_as_ntt[i0],
+ &u_as_ntt[i0]);
+ libcrux_ml_kem_polynomial_add_to_ring_element_89_84(&result, &product);
+ }
+ libcrux_ml_kem_invert_ntt_invert_ntt_montgomery_f6(&result);
+ result = libcrux_ml_kem_polynomial_subtract_reduce_89_d4(v, result);
+ return result;
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.vector.portable.arithmetic.shift_right
+with const generics
+- SHIFT_BY= 15
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_arithmetic_shift_right_94(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) {
+ size_t i0 = i;
+ v.elements[i0] = v.elements[i0] >> (uint32_t)(int32_t)15;
+ }
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.vector.portable.shift_right_0d
+with const generics
+- SHIFT_BY= 15
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_shift_right_0d_19(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ return libcrux_ml_kem_vector_portable_arithmetic_shift_right_94(v);
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.vector.traits.to_unsigned_representative with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_traits_to_unsigned_representative_db(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector a) {
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector t =
+ libcrux_ml_kem_vector_portable_shift_right_0d_19(a);
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector fm =
+ libcrux_ml_kem_vector_portable_bitwise_and_with_constant_0d(
+ t, LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_MODULUS);
+ return libcrux_ml_kem_vector_portable_add_0d(a, &fm);
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.serialize.compress_then_serialize_message with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+
+*/
+static KRML_MUSTINLINE void
+libcrux_ml_kem_serialize_compress_then_serialize_message_aa(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re, uint8_t ret[32U]) {
+ uint8_t serialized[32U] = {0U};
+ for (size_t i = (size_t)0U; i < (size_t)16U; i++) {
+ size_t i0 = i;
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficient =
+ libcrux_ml_kem_vector_traits_to_unsigned_representative_db(
+ re.coefficients[i0]);
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector
+ coefficient_compressed =
+ libcrux_ml_kem_vector_portable_compress_1_0d(coefficient);
+ uint8_t bytes[2U];
+ libcrux_ml_kem_vector_portable_serialize_1_0d(coefficient_compressed,
+ bytes);
+ Eurydice_slice uu____0 = Eurydice_array_to_subslice2(
+ serialized, (size_t)2U * i0, (size_t)2U * i0 + (size_t)2U, uint8_t);
+ Eurydice_slice_copy(
+ uu____0, Eurydice_array_to_slice((size_t)2U, bytes, uint8_t), uint8_t);
+ }
+ memcpy(ret, serialized, (size_t)32U * sizeof(uint8_t));
+}
+
+/**
+ This function implements <strong>Algorithm 14</strong> of the
+ NIST FIPS 203 specification; this is the Kyber CPA-PKE decryption algorithm.
+
+ Algorithm 14 is reproduced below:
+
+ ```plaintext
+ Input: decryption key dkₚₖₑ ∈ 𝔹^{384k}.
+ Input: ciphertext c ∈ 𝔹^{32(dᵤk + dᵥ)}.
+ Output: message m ∈ 𝔹^{32}.
+
+ c₁ ← c[0 : 32dᵤk]
+ c₂ ← c[32dᵤk : 32(dᵤk + dᵥ)]
+ u ← Decompress_{dᵤ}(ByteDecode_{dᵤ}(c₁))
+ v ← Decompress_{dᵥ}(ByteDecode_{dᵥ}(c₂))
+ ŝ ← ByteDecode₁₂(dkₚₖₑ)
+ w ← v - NTT-¹(ŝᵀ ◦ NTT(u))
+ m ← ByteEncode₁(Compress₁(w))
+ return m
+ ```
+
+ The NIST FIPS 203 standard can be found at
+ <https://csrc.nist.gov/pubs/fips/203/ipd>.
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt_unpacked
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+- K= 3
+- CIPHERTEXT_SIZE= 1088
+- VECTOR_U_ENCODED_SIZE= 960
+- U_COMPRESSION_FACTOR= 10
+- V_COMPRESSION_FACTOR= 4
+*/
+static inline void libcrux_ml_kem_ind_cpa_decrypt_unpacked_6d(
+ libcrux_ml_kem_ind_cpa_unpacked_IndCpaPrivateKeyUnpacked_f8 *secret_key,
+ uint8_t *ciphertext, uint8_t ret[32U]) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 u_as_ntt[3U];
+ libcrux_ml_kem_ind_cpa_deserialize_then_decompress_u_f4(ciphertext, u_as_ntt);
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 v =
+ libcrux_ml_kem_serialize_deserialize_then_decompress_ring_element_v_56(
+ Eurydice_array_to_subslice_from((size_t)1088U, ciphertext,
+ (size_t)960U, uint8_t, size_t));
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 message =
+ libcrux_ml_kem_matrix_compute_message_b3(&v, secret_key->secret_as_ntt,
+ u_as_ntt);
+ uint8_t ret0[32U];
+ libcrux_ml_kem_serialize_compress_then_serialize_message_aa(message, ret0);
+ memcpy(ret, ret0, (size_t)32U * sizeof(uint8_t));
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.ind_cpa.decrypt
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+- K= 3
+- CIPHERTEXT_SIZE= 1088
+- VECTOR_U_ENCODED_SIZE= 960
+- U_COMPRESSION_FACTOR= 10
+- V_COMPRESSION_FACTOR= 4
+*/
+static inline void libcrux_ml_kem_ind_cpa_decrypt_43(Eurydice_slice secret_key,
+ uint8_t *ciphertext,
+ uint8_t ret[32U]) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 secret_as_ntt[3U];
+ libcrux_ml_kem_ind_cpa_deserialize_secret_key_24(secret_key, secret_as_ntt);
+ /* Passing arrays by value in Rust generates a copy in C */
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 copy_of_secret_as_ntt[3U];
+ memcpy(
+ copy_of_secret_as_ntt, secret_as_ntt,
+ (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0));
+ libcrux_ml_kem_ind_cpa_unpacked_IndCpaPrivateKeyUnpacked_f8
+ secret_key_unpacked;
+ memcpy(
+ secret_key_unpacked.secret_as_ntt, copy_of_secret_as_ntt,
+ (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0));
+ uint8_t ret0[32U];
+ libcrux_ml_kem_ind_cpa_decrypt_unpacked_6d(&secret_key_unpacked, ciphertext,
+ ret0);
+ memcpy(ret, ret0, (size_t)32U * sizeof(uint8_t));
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for
+libcrux_ml_kem::hash_functions::portable::PortableHash<K>)}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.hash_functions.portable.G_f1
+with const generics
+- K= 3
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_hash_functions_portable_G_f1_e4(
+ Eurydice_slice input, uint8_t ret[64U]) {
+ libcrux_ml_kem_hash_functions_portable_G(input, ret);
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF
+with const generics
+- LEN= 32
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_hash_functions_portable_PRF_2b(
+ Eurydice_slice input, uint8_t ret[32U]) {
+ uint8_t digest[32U] = {0U};
+ libcrux_sha3_portable_shake256(
+ Eurydice_array_to_slice((size_t)32U, digest, uint8_t), input);
+ memcpy(ret, digest, (size_t)32U * sizeof(uint8_t));
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for
+libcrux_ml_kem::hash_functions::portable::PortableHash<K>)}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_f1
+with const generics
+- K= 3
+- LEN= 32
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_hash_functions_portable_PRF_f1_ee(
+ Eurydice_slice input, uint8_t ret[32U]) {
+ libcrux_ml_kem_hash_functions_portable_PRF_2b(input, ret);
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.serialize.deserialize_ring_elements_reduced.closure with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+- PUBLIC_KEY_SIZE= 1152
+- K= 3
+*/
+static inline libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_serialize_deserialize_ring_elements_reduced_closure_cd(
+ size_t _i) {
+ return libcrux_ml_kem_polynomial_ZERO_89_ea();
+}
+
+/**
+ Only use with public values.
+
+ This MUST NOT be used with secret inputs, like its caller
+ `deserialize_ring_elements_reduced`.
+*/
+/**
+A monomorphic instance of
+libcrux_ml_kem.serialize.deserialize_to_reduced_ring_element with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_serialize_deserialize_to_reduced_ring_element_4c(
+ Eurydice_slice serialized) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re =
+ libcrux_ml_kem_polynomial_ZERO_89_ea();
+ for (size_t i = (size_t)0U;
+ i < Eurydice_slice_len(serialized, uint8_t) / (size_t)24U; i++) {
+ size_t i0 = i;
+ Eurydice_slice bytes = Eurydice_slice_subslice2(
+ serialized, i0 * (size_t)24U, i0 * (size_t)24U + (size_t)24U, uint8_t);
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficient =
+ libcrux_ml_kem_vector_portable_deserialize_12_0d(bytes);
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 =
+ libcrux_ml_kem_vector_portable_cond_subtract_3329_0d(coefficient);
+ re.coefficients[i0] = uu____0;
+ }
+ return re;
+}
+
+/**
+ This function deserializes ring elements and reduces the result by the field
+ modulus.
+
+ This function MUST NOT be used on secret inputs.
+*/
+/**
+A monomorphic instance of
+libcrux_ml_kem.serialize.deserialize_ring_elements_reduced with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+- PUBLIC_KEY_SIZE= 1152
+- K= 3
+*/
+static KRML_MUSTINLINE void
+libcrux_ml_kem_serialize_deserialize_ring_elements_reduced_33(
+ Eurydice_slice public_key,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[3U]) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 deserialized_pk[3U];
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ deserialized_pk[i] = libcrux_ml_kem_polynomial_ZERO_89_ea();
+ }
+ for (size_t i = (size_t)0U;
+ i < Eurydice_slice_len(public_key, uint8_t) /
+ LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT;
+ i++) {
+ size_t i0 = i;
+ Eurydice_slice ring_element = Eurydice_slice_subslice2(
+ public_key, i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,
+ i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT +
+ LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,
+ uint8_t);
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____0 =
+ libcrux_ml_kem_serialize_deserialize_to_reduced_ring_element_4c(
+ ring_element);
+ deserialized_pk[i0] = uu____0;
+ }
+ memcpy(
+ ret, deserialized_pk,
+ (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0));
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A.closure.closure
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector,
+libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const
+generics
+- K= 3
+*/
+static inline libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_matrix_sample_matrix_A_closure_closure_78(size_t _j) {
+ return libcrux_ml_kem_polynomial_ZERO_89_ea();
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A.closure
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector,
+libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const
+generics
+- K= 3
+*/
+static inline void libcrux_ml_kem_matrix_sample_matrix_A_closure_4b(
+ size_t _i, libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[3U]) {
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ ret[i] = libcrux_ml_kem_polynomial_ZERO_89_ea();
+ }
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PortableHash
+with const generics
+- $3size_t
+*/
+typedef struct libcrux_ml_kem_hash_functions_portable_PortableHash_58_s {
+ libcrux_sha3_generic_keccak_KeccakState_48 shake128_state[3U];
+} libcrux_ml_kem_hash_functions_portable_PortableHash_58;
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.hash_functions.portable.shake128_init_absorb with const generics
+- K= 3
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_hash_functions_portable_PortableHash_58
+libcrux_ml_kem_hash_functions_portable_shake128_init_absorb_b7(
+ uint8_t input[3U][34U]) {
+ libcrux_sha3_generic_keccak_KeccakState_48 shake128_state[3U];
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ shake128_state[i] = libcrux_sha3_portable_incremental_shake128_init();
+ }
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ size_t i0 = i;
+ libcrux_sha3_portable_incremental_shake128_absorb_final(
+ &shake128_state[i0],
+ Eurydice_array_to_slice((size_t)34U, input[i0], uint8_t));
+ }
+ /* Passing arrays by value in Rust generates a copy in C */
+ libcrux_sha3_generic_keccak_KeccakState_48 copy_of_shake128_state[3U];
+ memcpy(copy_of_shake128_state, shake128_state,
+ (size_t)3U * sizeof(libcrux_sha3_generic_keccak_KeccakState_48));
+ libcrux_ml_kem_hash_functions_portable_PortableHash_58 lit;
+ memcpy(lit.shake128_state, copy_of_shake128_state,
+ (size_t)3U * sizeof(libcrux_sha3_generic_keccak_KeccakState_48));
+ return lit;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for
+libcrux_ml_kem::hash_functions::portable::PortableHash<K>)}
+*/
+/**
+A monomorphic instance of
+libcrux_ml_kem.hash_functions.portable.shake128_init_absorb_f1 with const
+generics
+- K= 3
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_hash_functions_portable_PortableHash_58
+libcrux_ml_kem_hash_functions_portable_shake128_init_absorb_f1_8c(
+ uint8_t input[3U][34U]) {
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_input[3U][34U];
+ memcpy(copy_of_input, input, (size_t)3U * sizeof(uint8_t[34U]));
+ return libcrux_ml_kem_hash_functions_portable_shake128_init_absorb_b7(
+ copy_of_input);
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.hash_functions.portable.shake128_squeeze_three_blocks with const
+generics
+- K= 3
+*/
+static KRML_MUSTINLINE void
+libcrux_ml_kem_hash_functions_portable_shake128_squeeze_three_blocks_ca(
+ libcrux_ml_kem_hash_functions_portable_PortableHash_58 *st,
+ uint8_t ret[3U][504U]) {
+ uint8_t out[3U][504U] = {{0U}};
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ size_t i0 = i;
+ libcrux_sha3_portable_incremental_shake128_squeeze_first_three_blocks(
+ &st->shake128_state[i0],
+ Eurydice_array_to_slice((size_t)504U, out[i0], uint8_t));
+ }
+ memcpy(ret, out, (size_t)3U * sizeof(uint8_t[504U]));
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for
+libcrux_ml_kem::hash_functions::portable::PortableHash<K>)}
+*/
+/**
+A monomorphic instance of
+libcrux_ml_kem.hash_functions.portable.shake128_squeeze_three_blocks_f1 with
+const generics
+- K= 3
+*/
+static KRML_MUSTINLINE void
+libcrux_ml_kem_hash_functions_portable_shake128_squeeze_three_blocks_f1_69(
+ libcrux_ml_kem_hash_functions_portable_PortableHash_58 *self,
+ uint8_t ret[3U][504U]) {
+ libcrux_ml_kem_hash_functions_portable_shake128_squeeze_three_blocks_ca(self,
+ ret);
+}
+
+/**
+ If `bytes` contains a set of uniformly random bytes, this function
+ uniformly samples a ring element `â` that is treated as being the NTT
+ representation of the corresponding polynomial `a`.
+
+ Since rejection sampling is used, it is possible the supplied bytes are
+ not enough to sample the element, in which case an `Err` is returned and the
+ caller must try again with a fresh set of bytes.
+
+ This function <strong>partially</strong> implements <strong>Algorithm
+ 6</strong> of the NIST FIPS 203 standard, We say "partially" because this
+ implementation only accepts a finite set of bytes as input and returns an error
+ if the set is not enough; Algorithm 6 of the FIPS 203 standard on the other
+ hand samples from an infinite stream of bytes until the ring element is filled.
+ Algorithm 6 is reproduced below:
+
+ ```plaintext
+ Input: byte stream B ∈ 𝔹*.
+ Output: array â ∈ ℤ₂₅₆.
+
+ i ← 0
+ j ← 0
+ while j < 256 do
+ d₁ ← B[i] + 256·(B[i+1] mod 16)
+ d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]
+ if d₁ < q then
+ â[j] ← d₁
+ j ← j + 1
+ end if
+ if d₂ < q and j < 256 then
+ â[j] ← d₂
+ j ← j + 1
+ end if
+ i ← i + 3
+ end while
+ return â
+ ```
+
+ The NIST FIPS 203 standard can be found at
+ <https://csrc.nist.gov/pubs/fips/203/ipd>.
+*/
+/**
+A monomorphic instance of
+libcrux_ml_kem.sampling.sample_from_uniform_distribution_next with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+- K= 3
+- N= 504
+*/
+static KRML_MUSTINLINE bool
+libcrux_ml_kem_sampling_sample_from_uniform_distribution_next_db(
+ uint8_t randomness[3U][504U], size_t *sampled_coefficients,
+ int16_t (*out)[272U]) {
+ for (size_t i0 = (size_t)0U; i0 < (size_t)3U; i0++) {
+ size_t i1 = i0;
+ for (size_t i = (size_t)0U; i < (size_t)504U / (size_t)24U; i++) {
+ size_t r = i;
+ if (sampled_coefficients[i1] <
+ LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT) {
+ Eurydice_slice uu____0 =
+ Eurydice_array_to_subslice2(randomness[i1], r * (size_t)24U,
+ r * (size_t)24U + (size_t)24U, uint8_t);
+ size_t sampled = libcrux_ml_kem_vector_portable_rej_sample_0d(
+ uu____0, Eurydice_array_to_subslice2(
+ out[i1], sampled_coefficients[i1],
+ sampled_coefficients[i1] + (size_t)16U, int16_t));
+ size_t uu____1 = i1;
+ sampled_coefficients[uu____1] = sampled_coefficients[uu____1] + sampled;
+ }
+ }
+ }
+ bool done = true;
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ size_t i0 = i;
+ if (sampled_coefficients[i0] >=
+ LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT) {
+ sampled_coefficients[i0] =
+ LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;
+ } else {
+ done = false;
+ }
+ }
+ return done;
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.hash_functions.portable.shake128_squeeze_block with const
+generics
+- K= 3
+*/
+static KRML_MUSTINLINE void
+libcrux_ml_kem_hash_functions_portable_shake128_squeeze_block_dd(
+ libcrux_ml_kem_hash_functions_portable_PortableHash_58 *st,
+ uint8_t ret[3U][168U]) {
+ uint8_t out[3U][168U] = {{0U}};
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ size_t i0 = i;
+ libcrux_sha3_portable_incremental_shake128_squeeze_next_block(
+ &st->shake128_state[i0],
+ Eurydice_array_to_slice((size_t)168U, out[i0], uint8_t));
+ }
+ memcpy(ret, out, (size_t)3U * sizeof(uint8_t[168U]));
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for
+libcrux_ml_kem::hash_functions::portable::PortableHash<K>)}
+*/
+/**
+A monomorphic instance of
+libcrux_ml_kem.hash_functions.portable.shake128_squeeze_block_f1 with const
+generics
+- K= 3
+*/
+static KRML_MUSTINLINE void
+libcrux_ml_kem_hash_functions_portable_shake128_squeeze_block_f1_60(
+ libcrux_ml_kem_hash_functions_portable_PortableHash_58 *self,
+ uint8_t ret[3U][168U]) {
+ libcrux_ml_kem_hash_functions_portable_shake128_squeeze_block_dd(self, ret);
+}
+
+/**
+ If `bytes` contains a set of uniformly random bytes, this function
+ uniformly samples a ring element `â` that is treated as being the NTT
+ representation of the corresponding polynomial `a`.
+
+ Since rejection sampling is used, it is possible the supplied bytes are
+ not enough to sample the element, in which case an `Err` is returned and the
+ caller must try again with a fresh set of bytes.
+
+ This function <strong>partially</strong> implements <strong>Algorithm
+ 6</strong> of the NIST FIPS 203 standard, We say "partially" because this
+ implementation only accepts a finite set of bytes as input and returns an error
+ if the set is not enough; Algorithm 6 of the FIPS 203 standard on the other
+ hand samples from an infinite stream of bytes until the ring element is filled.
+ Algorithm 6 is reproduced below:
+
+ ```plaintext
+ Input: byte stream B ∈ 𝔹*.
+ Output: array â ∈ ℤ₂₅₆.
+
+ i ← 0
+ j ← 0
+ while j < 256 do
+ d₁ ← B[i] + 256·(B[i+1] mod 16)
+ d₂ ← ⌊B[i+1]/16⌋ + 16·B[i+2]
+ if d₁ < q then
+ â[j] ← d₁
+ j ← j + 1
+ end if
+ if d₂ < q and j < 256 then
+ â[j] ← d₂
+ j ← j + 1
+ end if
+ i ← i + 3
+ end while
+ return â
+ ```
+
+ The NIST FIPS 203 standard can be found at
+ <https://csrc.nist.gov/pubs/fips/203/ipd>.
+*/
+/**
+A monomorphic instance of
+libcrux_ml_kem.sampling.sample_from_uniform_distribution_next with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+- K= 3
+- N= 168
+*/
+static KRML_MUSTINLINE bool
+libcrux_ml_kem_sampling_sample_from_uniform_distribution_next_db0(
+ uint8_t randomness[3U][168U], size_t *sampled_coefficients,
+ int16_t (*out)[272U]) {
+ for (size_t i0 = (size_t)0U; i0 < (size_t)3U; i0++) {
+ size_t i1 = i0;
+ for (size_t i = (size_t)0U; i < (size_t)168U / (size_t)24U; i++) {
+ size_t r = i;
+ if (sampled_coefficients[i1] <
+ LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT) {
+ Eurydice_slice uu____0 =
+ Eurydice_array_to_subslice2(randomness[i1], r * (size_t)24U,
+ r * (size_t)24U + (size_t)24U, uint8_t);
+ size_t sampled = libcrux_ml_kem_vector_portable_rej_sample_0d(
+ uu____0, Eurydice_array_to_subslice2(
+ out[i1], sampled_coefficients[i1],
+ sampled_coefficients[i1] + (size_t)16U, int16_t));
+ size_t uu____1 = i1;
+ sampled_coefficients[uu____1] = sampled_coefficients[uu____1] + sampled;
+ }
+ }
+ }
+ bool done = true;
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ size_t i0 = i;
+ if (sampled_coefficients[i0] >=
+ LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT) {
+ sampled_coefficients[i0] =
+ LIBCRUX_ML_KEM_CONSTANTS_COEFFICIENTS_IN_RING_ELEMENT;
+ } else {
+ done = false;
+ }
+ }
+ return done;
+}
+
+/**
+This function found in impl
+{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0]}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.polynomial.from_i16_array_89
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_polynomial_from_i16_array_89_c1(Eurydice_slice a) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 result =
+ libcrux_ml_kem_polynomial_ZERO_89_ea();
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) {
+ size_t i0 = i;
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 =
+ libcrux_ml_kem_vector_portable_from_i16_array_0d(
+ Eurydice_slice_subslice2(a, i0 * (size_t)16U,
+ (i0 + (size_t)1U) * (size_t)16U, int16_t));
+ result.coefficients[i0] = uu____0;
+ }
+ return result;
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof.closure
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector,
+libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const
+generics
+- K= 3
+*/
+static inline libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_sampling_sample_from_xof_closure_04(int16_t s[272U]) {
+ return libcrux_ml_kem_polynomial_from_i16_array_89_c1(
+ Eurydice_array_to_subslice2(s, (size_t)0U, (size_t)256U, int16_t));
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.sampling.sample_from_xof
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector,
+libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const
+generics
+- K= 3
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_sampling_sample_from_xof_3f(
+ uint8_t seeds[3U][34U],
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[3U]) {
+ size_t sampled_coefficients[3U] = {0U};
+ int16_t out[3U][272U] = {{0U}};
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_seeds[3U][34U];
+ memcpy(copy_of_seeds, seeds, (size_t)3U * sizeof(uint8_t[34U]));
+ libcrux_ml_kem_hash_functions_portable_PortableHash_58 xof_state =
+ libcrux_ml_kem_hash_functions_portable_shake128_init_absorb_f1_8c(
+ copy_of_seeds);
+ uint8_t randomness0[3U][504U];
+ libcrux_ml_kem_hash_functions_portable_shake128_squeeze_three_blocks_f1_69(
+ &xof_state, randomness0);
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_randomness0[3U][504U];
+ memcpy(copy_of_randomness0, randomness0, (size_t)3U * sizeof(uint8_t[504U]));
+ bool done = libcrux_ml_kem_sampling_sample_from_uniform_distribution_next_db(
+ copy_of_randomness0, sampled_coefficients, out);
+ while (true) {
+ if (done) {
+ break;
+ } else {
+ uint8_t randomness[3U][168U];
+ libcrux_ml_kem_hash_functions_portable_shake128_squeeze_block_f1_60(
+ &xof_state, randomness);
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_randomness[3U][168U];
+ memcpy(copy_of_randomness, randomness,
+ (size_t)3U * sizeof(uint8_t[168U]));
+ done = libcrux_ml_kem_sampling_sample_from_uniform_distribution_next_db0(
+ copy_of_randomness, sampled_coefficients, out);
+ }
+ }
+ /* Passing arrays by value in Rust generates a copy in C */
+ int16_t copy_of_out[3U][272U];
+ memcpy(copy_of_out, out, (size_t)3U * sizeof(int16_t[272U]));
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret0[3U];
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ ret0[i] =
+ libcrux_ml_kem_sampling_sample_from_xof_closure_04(copy_of_out[i]);
+ }
+ memcpy(
+ ret, ret0,
+ (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0));
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.matrix.sample_matrix_A
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector,
+libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const
+generics
+- K= 3
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_matrix_sample_matrix_A_38(
+ uint8_t seed[34U], bool transpose,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[3U][3U]) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 A_transpose[3U][3U];
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ libcrux_ml_kem_matrix_sample_matrix_A_closure_4b(i, A_transpose[i]);
+ }
+ for (size_t i0 = (size_t)0U; i0 < (size_t)3U; i0++) {
+ size_t i1 = i0;
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_seed[34U];
+ memcpy(copy_of_seed, seed, (size_t)34U * sizeof(uint8_t));
+ uint8_t seeds[3U][34U];
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ memcpy(seeds[i], copy_of_seed, (size_t)34U * sizeof(uint8_t));
+ }
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ size_t j = i;
+ seeds[j][32U] = (uint8_t)i1;
+ seeds[j][33U] = (uint8_t)j;
+ }
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_seeds[3U][34U];
+ memcpy(copy_of_seeds, seeds, (size_t)3U * sizeof(uint8_t[34U]));
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 sampled[3U];
+ libcrux_ml_kem_sampling_sample_from_xof_3f(copy_of_seeds, sampled);
+ for (size_t i = (size_t)0U;
+ i < Eurydice_slice_len(
+ Eurydice_array_to_slice(
+ (size_t)3U, sampled,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0),
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0);
+ i++) {
+ size_t j = i;
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 sample = sampled[j];
+ if (transpose) {
+ A_transpose[j][i1] = sample;
+ } else {
+ A_transpose[i1][j] = sample;
+ }
+ }
+ }
+ memcpy(ret, A_transpose,
+ (size_t)3U *
+ sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0[3U]));
+}
+
+/**
+A monomorphic instance of K.
+with types libcrux_ml_kem_polynomial_PolynomialRingElement
+libcrux_ml_kem_vector_portable_vector_type_PortableVector[3size_t], uint8_t
+
+*/
+typedef struct tuple_b0_s {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 fst[3U];
+ uint8_t snd;
+} tuple_b0;
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.ind_cpa.sample_vector_cbd_then_ntt.closure with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector,
+libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const
+generics
+- K= 3
+- ETA= 2
+- ETA_RANDOMNESS_SIZE= 128
+*/
+static inline libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_ind_cpa_sample_vector_cbd_then_ntt_closure_f7(size_t _i) {
+ return libcrux_ml_kem_polynomial_ZERO_89_ea();
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN
+with const generics
+- K= 3
+- LEN= 128
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_hash_functions_portable_PRFxN_c5(
+ uint8_t (*input)[33U], uint8_t ret[3U][128U]) {
+ uint8_t out[3U][128U] = {{0U}};
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ size_t i0 = i;
+ libcrux_sha3_portable_shake256(
+ Eurydice_array_to_slice((size_t)128U, out[i0], uint8_t),
+ Eurydice_array_to_slice((size_t)33U, input[i0], uint8_t));
+ }
+ memcpy(ret, out, (size_t)3U * sizeof(uint8_t[128U]));
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for
+libcrux_ml_kem::hash_functions::portable::PortableHash<K>)}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRFxN_f1
+with const generics
+- K= 3
+- LEN= 128
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_hash_functions_portable_PRFxN_f1_93(
+ uint8_t (*input)[33U], uint8_t ret[3U][128U]) {
+ libcrux_ml_kem_hash_functions_portable_PRFxN_c5(input, ret);
+}
+
+/**
+ Given a series of uniformly random bytes in `randomness`, for some number
+ `eta`, the `sample_from_binomial_distribution_{eta}` functions sample a ring
+ element from a binomial distribution centered at 0 that uses two sets of `eta`
+ coin flips. If, for example, `eta = ETA`, each ring coefficient is a value `v`
+ such such that `v ∈ {-ETA, -ETA + 1, ..., 0, ..., ETA + 1, ETA}` and:
+
+ ```plaintext
+ - If v < 0, Pr[v] = Pr[-v]
+ - If v >= 0, Pr[v] = BINOMIAL_COEFFICIENT(2 * ETA; ETA - v) / 2 ^ (2 * ETA)
+ ```
+
+ The values `v < 0` are mapped to the appropriate `KyberFieldElement`.
+
+ The expected value is:
+
+ ```plaintext
+ E[X] = (-ETA)Pr[-ETA] + (-(ETA - 1))Pr[-(ETA - 1)] + ... + (ETA - 1)Pr[ETA - 1]
+ + (ETA)Pr[ETA] = 0 since Pr[-v] = Pr[v] when v < 0.
+ ```
+
+ And the variance is:
+
+ ```plaintext
+ Var(X) = E[(X - E[X])^2]
+ = E[X^2]
+ = sum_(v=-ETA to ETA)v^2 * (BINOMIAL_COEFFICIENT(2 * ETA; ETA - v) /
+ 2^(2 * ETA)) = ETA / 2
+ ```
+
+ This function implements <strong>Algorithm 7</strong> of the NIST FIPS 203
+ standard, which is reproduced below:
+
+ ```plaintext
+ Input: byte array B ∈ 𝔹^{64η}.
+ Output: array f ∈ ℤ₂₅₆.
+
+ b ← BytesToBits(B)
+ for (i ← 0; i < 256; i++)
+ x ← ∑(j=0 to η - 1) b[2iη + j]
+ y ← ∑(j=0 to η - 1) b[2iη + η + j]
+ f[i] ← x−y mod q
+ end for
+ return f
+ ```
+
+ The NIST FIPS 203 standard can be found at
+ <https://csrc.nist.gov/pubs/fips/203/ipd>.
+*/
+/**
+A monomorphic instance of
+libcrux_ml_kem.sampling.sample_from_binomial_distribution_2 with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_sampling_sample_from_binomial_distribution_2_85(
+ Eurydice_slice randomness) {
+ int16_t sampled_i16s[256U] = {0U};
+ for (size_t i0 = (size_t)0U;
+ i0 < Eurydice_slice_len(randomness, uint8_t) / (size_t)4U; i0++) {
+ size_t chunk_number = i0;
+ Eurydice_slice byte_chunk = Eurydice_slice_subslice2(
+ randomness, chunk_number * (size_t)4U,
+ chunk_number * (size_t)4U + (size_t)4U, uint8_t);
+ uint32_t random_bits_as_u32 =
+ (((uint32_t)Eurydice_slice_index(byte_chunk, (size_t)0U, uint8_t,
+ uint8_t *) |
+ (uint32_t)Eurydice_slice_index(byte_chunk, (size_t)1U, uint8_t,
+ uint8_t *)
+ << 8U) |
+ (uint32_t)Eurydice_slice_index(byte_chunk, (size_t)2U, uint8_t,
+ uint8_t *)
+ << 16U) |
+ (uint32_t)Eurydice_slice_index(byte_chunk, (size_t)3U, uint8_t,
+ uint8_t *)
+ << 24U;
+ uint32_t even_bits = random_bits_as_u32 & 1431655765U;
+ uint32_t odd_bits = random_bits_as_u32 >> 1U & 1431655765U;
+ uint32_t coin_toss_outcomes = even_bits + odd_bits;
+ for (uint32_t i = 0U; i < CORE_NUM__U32_8__BITS / 4U; i++) {
+ uint32_t outcome_set = i;
+ uint32_t outcome_set0 = outcome_set * 4U;
+ int16_t outcome_1 =
+ (int16_t)(coin_toss_outcomes >> (uint32_t)outcome_set0 & 3U);
+ int16_t outcome_2 =
+ (int16_t)(coin_toss_outcomes >> (uint32_t)(outcome_set0 + 2U) & 3U);
+ size_t offset = (size_t)(outcome_set0 >> 2U);
+ sampled_i16s[(size_t)8U * chunk_number + offset] = outcome_1 - outcome_2;
+ }
+ }
+ return libcrux_ml_kem_polynomial_from_i16_array_89_c1(
+ Eurydice_array_to_slice((size_t)256U, sampled_i16s, int16_t));
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.sampling.sample_from_binomial_distribution_3 with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_sampling_sample_from_binomial_distribution_3_eb(
+ Eurydice_slice randomness) {
+ int16_t sampled_i16s[256U] = {0U};
+ for (size_t i0 = (size_t)0U;
+ i0 < Eurydice_slice_len(randomness, uint8_t) / (size_t)3U; i0++) {
+ size_t chunk_number = i0;
+ Eurydice_slice byte_chunk = Eurydice_slice_subslice2(
+ randomness, chunk_number * (size_t)3U,
+ chunk_number * (size_t)3U + (size_t)3U, uint8_t);
+ uint32_t random_bits_as_u24 =
+ ((uint32_t)Eurydice_slice_index(byte_chunk, (size_t)0U, uint8_t,
+ uint8_t *) |
+ (uint32_t)Eurydice_slice_index(byte_chunk, (size_t)1U, uint8_t,
+ uint8_t *)
+ << 8U) |
+ (uint32_t)Eurydice_slice_index(byte_chunk, (size_t)2U, uint8_t,
+ uint8_t *)
+ << 16U;
+ uint32_t first_bits = random_bits_as_u24 & 2396745U;
+ uint32_t second_bits = random_bits_as_u24 >> 1U & 2396745U;
+ uint32_t third_bits = random_bits_as_u24 >> 2U & 2396745U;
+ uint32_t coin_toss_outcomes = first_bits + second_bits + third_bits;
+ for (int32_t i = (int32_t)0; i < (int32_t)24 / (int32_t)6; i++) {
+ int32_t outcome_set = i;
+ int32_t outcome_set0 = outcome_set * (int32_t)6;
+ int16_t outcome_1 =
+ (int16_t)(coin_toss_outcomes >> (uint32_t)outcome_set0 & 7U);
+ int16_t outcome_2 = (int16_t)(coin_toss_outcomes >>
+ (uint32_t)(outcome_set0 + (int32_t)3) &
+ 7U);
+ size_t offset = (size_t)(outcome_set0 / (int32_t)6);
+ sampled_i16s[(size_t)4U * chunk_number + offset] = outcome_1 - outcome_2;
+ }
+ }
+ return libcrux_ml_kem_polynomial_from_i16_array_89_c1(
+ Eurydice_array_to_slice((size_t)256U, sampled_i16s, int16_t));
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.sampling.sample_from_binomial_distribution with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+- ETA= 2
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_sampling_sample_from_binomial_distribution_c6(
+ Eurydice_slice randomness) {
+ return libcrux_ml_kem_sampling_sample_from_binomial_distribution_2_85(
+ randomness);
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.ntt.ntt_at_layer_7
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_ntt_ntt_at_layer_7_f4(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re) {
+ size_t step = LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT / (size_t)2U;
+ for (size_t i = (size_t)0U; i < step; i++) {
+ size_t j = i;
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector t =
+ libcrux_ml_kem_vector_portable_multiply_by_constant_0d(
+ re->coefficients[j + step], (int16_t)-1600);
+ re->coefficients[j + step] =
+ libcrux_ml_kem_vector_portable_sub_0d(re->coefficients[j], &t);
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____1 =
+ libcrux_ml_kem_vector_portable_add_0d(re->coefficients[j], &t);
+ re->coefficients[j] = uu____1;
+ }
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.ntt.ntt_binomially_sampled_ring_element
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static KRML_MUSTINLINE void
+libcrux_ml_kem_ntt_ntt_binomially_sampled_ring_element_0f(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re) {
+ libcrux_ml_kem_ntt_ntt_at_layer_7_f4(re);
+ size_t zeta_i = (size_t)1U;
+ libcrux_ml_kem_ntt_ntt_at_layer_4_plus_51(&zeta_i, re, (size_t)6U,
+ (size_t)3U);
+ libcrux_ml_kem_ntt_ntt_at_layer_4_plus_51(&zeta_i, re, (size_t)5U,
+ (size_t)3U);
+ libcrux_ml_kem_ntt_ntt_at_layer_4_plus_51(&zeta_i, re, (size_t)4U,
+ (size_t)3U);
+ libcrux_ml_kem_ntt_ntt_at_layer_3_fd(&zeta_i, re, (size_t)3U, (size_t)3U);
+ libcrux_ml_kem_ntt_ntt_at_layer_2_ad(&zeta_i, re, (size_t)2U, (size_t)3U);
+ libcrux_ml_kem_ntt_ntt_at_layer_1_a2(&zeta_i, re, (size_t)1U, (size_t)3U);
+ libcrux_ml_kem_polynomial_poly_barrett_reduce_89_8b(re);
+}
+
+/**
+ Sample a vector of ring elements from a centered binomial distribution and
+ convert them into their NTT representations.
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.ind_cpa.sample_vector_cbd_then_ntt
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector,
+libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const
+generics
+- K= 3
+- ETA= 2
+- ETA_RANDOMNESS_SIZE= 128
+*/
+static KRML_MUSTINLINE tuple_b0
+libcrux_ml_kem_ind_cpa_sample_vector_cbd_then_ntt_fc(uint8_t prf_input[33U],
+ uint8_t domain_separator) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re_as_ntt[3U];
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ re_as_ntt[i] = libcrux_ml_kem_polynomial_ZERO_89_ea();
+ }
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_prf_input[33U];
+ memcpy(copy_of_prf_input, prf_input, (size_t)33U * sizeof(uint8_t));
+ uint8_t prf_inputs[3U][33U];
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ memcpy(prf_inputs[i], copy_of_prf_input, (size_t)33U * sizeof(uint8_t));
+ }
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ size_t i0 = i;
+ prf_inputs[i0][32U] = domain_separator;
+ domain_separator = (uint32_t)domain_separator + 1U;
+ }
+ uint8_t prf_outputs[3U][128U];
+ libcrux_ml_kem_hash_functions_portable_PRFxN_f1_93(prf_inputs, prf_outputs);
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ size_t i0 = i;
+ re_as_ntt[i0] =
+ libcrux_ml_kem_sampling_sample_from_binomial_distribution_c6(
+ Eurydice_array_to_slice((size_t)128U, prf_outputs[i0], uint8_t));
+ libcrux_ml_kem_ntt_ntt_binomially_sampled_ring_element_0f(&re_as_ntt[i0]);
+ }
+ /* Passing arrays by value in Rust generates a copy in C */
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 copy_of_re_as_ntt[3U];
+ memcpy(
+ copy_of_re_as_ntt, re_as_ntt,
+ (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0));
+ tuple_b0 lit;
+ memcpy(
+ lit.fst, copy_of_re_as_ntt,
+ (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0));
+ lit.snd = domain_separator;
+ return lit;
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.ind_cpa.sample_ring_element_cbd.closure
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector,
+libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const
+generics
+- K= 3
+- ETA2_RANDOMNESS_SIZE= 128
+- ETA2= 2
+*/
+static inline libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_ind_cpa_sample_ring_element_cbd_closure_77(size_t _i) {
+ return libcrux_ml_kem_polynomial_ZERO_89_ea();
+}
+
+/**
+ Sample a vector of ring elements from a centered binomial distribution.
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.ind_cpa.sample_ring_element_cbd
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector,
+libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const
+generics
+- K= 3
+- ETA2_RANDOMNESS_SIZE= 128
+- ETA2= 2
+*/
+static KRML_MUSTINLINE tuple_b0
+libcrux_ml_kem_ind_cpa_sample_ring_element_cbd_ac(uint8_t prf_input[33U],
+ uint8_t domain_separator) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 error_1[3U];
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ error_1[i] = libcrux_ml_kem_polynomial_ZERO_89_ea();
+ }
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_prf_input[33U];
+ memcpy(copy_of_prf_input, prf_input, (size_t)33U * sizeof(uint8_t));
+ uint8_t prf_inputs[3U][33U];
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ memcpy(prf_inputs[i], copy_of_prf_input, (size_t)33U * sizeof(uint8_t));
+ }
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ size_t i0 = i;
+ prf_inputs[i0][32U] = domain_separator;
+ domain_separator = (uint32_t)domain_separator + 1U;
+ }
+ uint8_t prf_outputs[3U][128U];
+ libcrux_ml_kem_hash_functions_portable_PRFxN_f1_93(prf_inputs, prf_outputs);
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ size_t i0 = i;
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____1 =
+ libcrux_ml_kem_sampling_sample_from_binomial_distribution_c6(
+ Eurydice_array_to_slice((size_t)128U, prf_outputs[i0], uint8_t));
+ error_1[i0] = uu____1;
+ }
+ /* Passing arrays by value in Rust generates a copy in C */
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 copy_of_error_1[3U];
+ memcpy(
+ copy_of_error_1, error_1,
+ (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0));
+ tuple_b0 lit;
+ memcpy(
+ lit.fst, copy_of_error_1,
+ (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0));
+ lit.snd = domain_separator;
+ return lit;
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF
+with const generics
+- LEN= 128
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_hash_functions_portable_PRF_2b0(
+ Eurydice_slice input, uint8_t ret[128U]) {
+ uint8_t digest[128U] = {0U};
+ libcrux_sha3_portable_shake256(
+ Eurydice_array_to_slice((size_t)128U, digest, uint8_t), input);
+ memcpy(ret, digest, (size_t)128U * sizeof(uint8_t));
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for
+libcrux_ml_kem::hash_functions::portable::PortableHash<K>)}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.hash_functions.portable.PRF_f1
+with const generics
+- K= 3
+- LEN= 128
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_hash_functions_portable_PRF_f1_ee0(
+ Eurydice_slice input, uint8_t ret[128U]) {
+ libcrux_ml_kem_hash_functions_portable_PRF_2b0(input, ret);
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u.closure
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+- K= 3
+*/
+static inline libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_matrix_compute_vector_u_closure_d6(size_t _i) {
+ return libcrux_ml_kem_polynomial_ZERO_89_ea();
+}
+
+/**
+This function found in impl
+{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0]}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.polynomial.add_error_reduce_89
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_polynomial_add_error_reduce_89_38(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *self,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *error) {
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) {
+ size_t j = i;
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector
+ coefficient_normal_form =
+ libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_0d(
+ self->coefficients[j], (int16_t)1441);
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 =
+ libcrux_ml_kem_vector_portable_barrett_reduce_0d(
+ libcrux_ml_kem_vector_portable_add_0d(coefficient_normal_form,
+ &error->coefficients[j]));
+ self->coefficients[j] = uu____0;
+ }
+}
+
+/**
+ Compute u := InvertNTT(Aᵀ ◦ r̂) + e₁
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.matrix.compute_vector_u
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+- K= 3
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_matrix_compute_vector_u_59(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 (*a_as_ntt)[3U],
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *r_as_ntt,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *error_1,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[3U]) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 result[3U];
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ result[i] = libcrux_ml_kem_polynomial_ZERO_89_ea();
+ }
+ for (size_t i0 = (size_t)0U;
+ i0 < Eurydice_slice_len(
+ Eurydice_array_to_slice(
+ (size_t)3U, a_as_ntt,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0[3U]),
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0[3U]);
+ i0++) {
+ size_t i1 = i0;
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *row = a_as_ntt[i1];
+ for (size_t i = (size_t)0U;
+ i < Eurydice_slice_len(
+ Eurydice_array_to_slice(
+ (size_t)3U, row,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0),
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0);
+ i++) {
+ size_t j = i;
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *a_element = &row[j];
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 product =
+ libcrux_ml_kem_polynomial_ntt_multiply_89_2a(a_element, &r_as_ntt[j]);
+ libcrux_ml_kem_polynomial_add_to_ring_element_89_84(&result[i1],
+ &product);
+ }
+ libcrux_ml_kem_invert_ntt_invert_ntt_montgomery_f6(&result[i1]);
+ libcrux_ml_kem_polynomial_add_error_reduce_89_38(&result[i1], &error_1[i1]);
+ }
+ memcpy(
+ ret, result,
+ (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0));
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.vector.traits.decompress_1
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_traits_decompress_1_63(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 =
+ libcrux_ml_kem_vector_portable_ZERO_0d();
+ return libcrux_ml_kem_vector_portable_bitwise_and_with_constant_0d(
+ libcrux_ml_kem_vector_portable_sub_0d(uu____0, &v), (int16_t)1665);
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.serialize.deserialize_then_decompress_message with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_serialize_deserialize_then_decompress_message_0d(
+ uint8_t serialized[32U]) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re =
+ libcrux_ml_kem_polynomial_ZERO_89_ea();
+ for (size_t i = (size_t)0U; i < (size_t)16U; i++) {
+ size_t i0 = i;
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector
+ coefficient_compressed =
+ libcrux_ml_kem_vector_portable_deserialize_1_0d(
+ Eurydice_array_to_subslice2(serialized, (size_t)2U * i0,
+ (size_t)2U * i0 + (size_t)2U,
+ uint8_t));
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 =
+ libcrux_ml_kem_vector_traits_decompress_1_63(coefficient_compressed);
+ re.coefficients[i0] = uu____0;
+ }
+ return re;
+}
+
+/**
+This function found in impl
+{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0]}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.polynomial.add_message_error_reduce_89
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_polynomial_add_message_error_reduce_89_ea(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *self,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *message,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 result) {
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) {
+ size_t i0 = i;
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector
+ coefficient_normal_form =
+ libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_0d(
+ result.coefficients[i0], (int16_t)1441);
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector tmp =
+ libcrux_ml_kem_vector_portable_add_0d(self->coefficients[i0],
+ &message->coefficients[i0]);
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector tmp0 =
+ libcrux_ml_kem_vector_portable_add_0d(coefficient_normal_form, &tmp);
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 =
+ libcrux_ml_kem_vector_portable_barrett_reduce_0d(tmp0);
+ result.coefficients[i0] = uu____0;
+ }
+ return result;
+}
+
+/**
+ Compute InverseNTT(tᵀ ◦ r̂) + e₂ + message
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.matrix.compute_ring_element_v
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+- K= 3
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_matrix_compute_ring_element_v_54(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *t_as_ntt,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *r_as_ntt,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *error_2,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *message) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 result =
+ libcrux_ml_kem_polynomial_ZERO_89_ea();
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ size_t i0 = i;
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 product =
+ libcrux_ml_kem_polynomial_ntt_multiply_89_2a(&t_as_ntt[i0],
+ &r_as_ntt[i0]);
+ libcrux_ml_kem_polynomial_add_to_ring_element_89_84(&result, &product);
+ }
+ libcrux_ml_kem_invert_ntt_invert_ntt_montgomery_f6(&result);
+ result = libcrux_ml_kem_polynomial_add_message_error_reduce_89_ea(
+ error_2, message, result);
+ return result;
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.vector.portable.compress.compress
+with const generics
+- COEFFICIENT_BITS= 10
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_compress_compress_02(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) {
+ size_t i0 = i;
+ int16_t uu____0 =
+ libcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient(
+ (uint8_t)(int32_t)10, (uint16_t)v.elements[i0]);
+ v.elements[i0] = uu____0;
+ }
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.vector.portable.compress_0d
+with const generics
+- COEFFICIENT_BITS= 10
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_compress_0d_28(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ return libcrux_ml_kem_vector_portable_compress_compress_02(v);
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_10
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+- OUT_LEN= 320
+*/
+static KRML_MUSTINLINE void
+libcrux_ml_kem_serialize_compress_then_serialize_10_fc(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re, uint8_t ret[320U]) {
+ uint8_t serialized[320U] = {0U};
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) {
+ size_t i0 = i;
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficient =
+ libcrux_ml_kem_vector_portable_compress_0d_28(
+ libcrux_ml_kem_vector_traits_to_unsigned_representative_db(
+ re->coefficients[i0]));
+ uint8_t bytes[20U];
+ libcrux_ml_kem_vector_portable_serialize_10_0d(coefficient, bytes);
+ Eurydice_slice uu____0 = Eurydice_array_to_subslice2(
+ serialized, (size_t)20U * i0, (size_t)20U * i0 + (size_t)20U, uint8_t);
+ Eurydice_slice_copy(
+ uu____0, Eurydice_array_to_slice((size_t)20U, bytes, uint8_t), uint8_t);
+ }
+ memcpy(ret, serialized, (size_t)320U * sizeof(uint8_t));
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.vector.portable.compress.compress
+with const generics
+- COEFFICIENT_BITS= 11
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_compress_compress_020(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) {
+ size_t i0 = i;
+ int16_t uu____0 =
+ libcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient(
+ (uint8_t)(int32_t)11, (uint16_t)v.elements[i0]);
+ v.elements[i0] = uu____0;
+ }
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.vector.portable.compress_0d
+with const generics
+- COEFFICIENT_BITS= 11
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_compress_0d_280(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ return libcrux_ml_kem_vector_portable_compress_compress_020(v);
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_11
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+- OUT_LEN= 320
+*/
+static KRML_MUSTINLINE void
+libcrux_ml_kem_serialize_compress_then_serialize_11_e1(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re, uint8_t ret[320U]) {
+ uint8_t serialized[320U] = {0U};
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) {
+ size_t i0 = i;
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficient =
+ libcrux_ml_kem_vector_portable_compress_0d_280(
+ libcrux_ml_kem_vector_traits_to_unsigned_representative_db(
+ re->coefficients[i0]));
+ uint8_t bytes[22U];
+ libcrux_ml_kem_vector_portable_serialize_11_0d(coefficient, bytes);
+ Eurydice_slice uu____0 = Eurydice_array_to_subslice2(
+ serialized, (size_t)22U * i0, (size_t)22U * i0 + (size_t)22U, uint8_t);
+ Eurydice_slice_copy(
+ uu____0, Eurydice_array_to_slice((size_t)22U, bytes, uint8_t), uint8_t);
+ }
+ memcpy(ret, serialized, (size_t)320U * sizeof(uint8_t));
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.serialize.compress_then_serialize_ring_element_u with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+- COMPRESSION_FACTOR= 10
+- OUT_LEN= 320
+*/
+static KRML_MUSTINLINE void
+libcrux_ml_kem_serialize_compress_then_serialize_ring_element_u_5f(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re, uint8_t ret[320U]) {
+ uint8_t uu____0[320U];
+ libcrux_ml_kem_serialize_compress_then_serialize_10_fc(re, uu____0);
+ memcpy(ret, uu____0, (size_t)320U * sizeof(uint8_t));
+}
+
+/**
+ Call [`compress_then_serialize_ring_element_u`] on each ring element.
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.ind_cpa.compress_then_serialize_u
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+- K= 3
+- OUT_LEN= 960
+- COMPRESSION_FACTOR= 10
+- BLOCK_LEN= 320
+*/
+static inline void libcrux_ml_kem_ind_cpa_compress_then_serialize_u_a7(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 input[3U],
+ Eurydice_slice out) {
+ for (size_t i = (size_t)0U;
+ i < Eurydice_slice_len(
+ Eurydice_array_to_slice(
+ (size_t)3U, input,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0),
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0);
+ i++) {
+ size_t i0 = i;
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re = input[i0];
+ Eurydice_slice uu____0 = Eurydice_slice_subslice2(
+ out, i0 * ((size_t)960U / (size_t)3U),
+ (i0 + (size_t)1U) * ((size_t)960U / (size_t)3U), uint8_t);
+ uint8_t ret[320U];
+ libcrux_ml_kem_serialize_compress_then_serialize_ring_element_u_5f(&re,
+ ret);
+ Eurydice_slice_copy(
+ uu____0, Eurydice_array_to_slice((size_t)320U, ret, uint8_t), uint8_t);
+ }
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.vector.portable.compress.compress
+with const generics
+- COEFFICIENT_BITS= 4
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_compress_compress_021(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) {
+ size_t i0 = i;
+ int16_t uu____0 =
+ libcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient(
+ (uint8_t)(int32_t)4, (uint16_t)v.elements[i0]);
+ v.elements[i0] = uu____0;
+ }
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.vector.portable.compress_0d
+with const generics
+- COEFFICIENT_BITS= 4
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_compress_0d_281(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ return libcrux_ml_kem_vector_portable_compress_compress_021(v);
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_4
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static KRML_MUSTINLINE void
+libcrux_ml_kem_serialize_compress_then_serialize_4_9a(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re,
+ Eurydice_slice serialized) {
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) {
+ size_t i0 = i;
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficient =
+ libcrux_ml_kem_vector_portable_compress_0d_281(
+ libcrux_ml_kem_vector_traits_to_unsigned_representative_db(
+ re.coefficients[i0]));
+ uint8_t bytes[8U];
+ libcrux_ml_kem_vector_portable_serialize_4_0d(coefficient, bytes);
+ Eurydice_slice_copy(
+ Eurydice_slice_subslice2(serialized, (size_t)8U * i0,
+ (size_t)8U * i0 + (size_t)8U, uint8_t),
+ Eurydice_array_to_slice((size_t)8U, bytes, uint8_t), uint8_t);
+ }
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.vector.portable.compress.compress
+with const generics
+- COEFFICIENT_BITS= 5
+*/
+static KRML_MUSTINLINE libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_compress_compress_022(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_VECTOR_TRAITS_FIELD_ELEMENTS_IN_VECTOR; i++) {
+ size_t i0 = i;
+ int16_t uu____0 =
+ libcrux_ml_kem_vector_portable_compress_compress_ciphertext_coefficient(
+ (uint8_t)(int32_t)5, (uint16_t)v.elements[i0]);
+ v.elements[i0] = uu____0;
+ }
+ return v;
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::vector::traits::Operations for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.vector.portable.compress_0d
+with const generics
+- COEFFICIENT_BITS= 5
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_compress_0d_282(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ return libcrux_ml_kem_vector_portable_compress_compress_022(v);
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.serialize.compress_then_serialize_5
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static KRML_MUSTINLINE void
+libcrux_ml_kem_serialize_compress_then_serialize_5_1f(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re,
+ Eurydice_slice serialized) {
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) {
+ size_t i0 = i;
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficients =
+ libcrux_ml_kem_vector_portable_compress_0d_282(
+ libcrux_ml_kem_vector_traits_to_unsigned_representative_db(
+ re.coefficients[i0]));
+ uint8_t bytes[10U];
+ libcrux_ml_kem_vector_portable_serialize_5_0d(coefficients, bytes);
+ Eurydice_slice_copy(
+ Eurydice_slice_subslice2(serialized, (size_t)10U * i0,
+ (size_t)10U * i0 + (size_t)10U, uint8_t),
+ Eurydice_array_to_slice((size_t)10U, bytes, uint8_t), uint8_t);
+ }
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.serialize.compress_then_serialize_ring_element_v with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+- COMPRESSION_FACTOR= 4
+- OUT_LEN= 128
+*/
+static KRML_MUSTINLINE void
+libcrux_ml_kem_serialize_compress_then_serialize_ring_element_v_4e(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re, Eurydice_slice out) {
+ libcrux_ml_kem_serialize_compress_then_serialize_4_9a(re, out);
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.ind_cpa.encrypt
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector,
+libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]] with const
+generics
+- K= 3
+- CIPHERTEXT_SIZE= 1088
+- T_AS_NTT_ENCODED_SIZE= 1152
+- C1_LEN= 960
+- C2_LEN= 128
+- U_COMPRESSION_FACTOR= 10
+- V_COMPRESSION_FACTOR= 4
+- BLOCK_LEN= 320
+- ETA1= 2
+- ETA1_RANDOMNESS_SIZE= 128
+- ETA2= 2
+- ETA2_RANDOMNESS_SIZE= 128
+*/
+static inline void libcrux_ml_kem_ind_cpa_encrypt_60(Eurydice_slice public_key,
+ uint8_t message[32U],
+ Eurydice_slice randomness,
+ uint8_t ret[1088U]) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 t_as_ntt[3U];
+ libcrux_ml_kem_serialize_deserialize_ring_elements_reduced_33(
+ Eurydice_slice_subslice_to(public_key, (size_t)1152U, uint8_t, size_t),
+ t_as_ntt);
+ Eurydice_slice seed =
+ Eurydice_slice_subslice_from(public_key, (size_t)1152U, uint8_t, size_t);
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 A[3U][3U];
+ uint8_t ret0[34U];
+ libcrux_ml_kem_utils_into_padded_array_ea1(seed, ret0);
+ libcrux_ml_kem_matrix_sample_matrix_A_38(ret0, false, A);
+ uint8_t prf_input[33U];
+ libcrux_ml_kem_utils_into_padded_array_ea2(randomness, prf_input);
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_prf_input0[33U];
+ memcpy(copy_of_prf_input0, prf_input, (size_t)33U * sizeof(uint8_t));
+ tuple_b0 uu____1 = libcrux_ml_kem_ind_cpa_sample_vector_cbd_then_ntt_fc(
+ copy_of_prf_input0, 0U);
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 r_as_ntt[3U];
+ memcpy(
+ r_as_ntt, uu____1.fst,
+ (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0));
+ uint8_t domain_separator0 = uu____1.snd;
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_prf_input[33U];
+ memcpy(copy_of_prf_input, prf_input, (size_t)33U * sizeof(uint8_t));
+ tuple_b0 uu____3 = libcrux_ml_kem_ind_cpa_sample_ring_element_cbd_ac(
+ copy_of_prf_input, domain_separator0);
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 error_1[3U];
+ memcpy(
+ error_1, uu____3.fst,
+ (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0));
+ uint8_t domain_separator = uu____3.snd;
+ prf_input[32U] = domain_separator;
+ uint8_t prf_output[128U];
+ libcrux_ml_kem_hash_functions_portable_PRF_f1_ee0(
+ Eurydice_array_to_slice((size_t)33U, prf_input, uint8_t), prf_output);
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 error_2 =
+ libcrux_ml_kem_sampling_sample_from_binomial_distribution_c6(
+ Eurydice_array_to_slice((size_t)128U, prf_output, uint8_t));
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 u[3U];
+ libcrux_ml_kem_matrix_compute_vector_u_59(A, r_as_ntt, error_1, u);
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_message[32U];
+ memcpy(copy_of_message, message, (size_t)32U * sizeof(uint8_t));
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 message_as_ring_element =
+ libcrux_ml_kem_serialize_deserialize_then_decompress_message_0d(
+ copy_of_message);
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 v =
+ libcrux_ml_kem_matrix_compute_ring_element_v_54(
+ t_as_ntt, r_as_ntt, &error_2, &message_as_ring_element);
+ uint8_t ciphertext[1088U] = {0U};
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____5[3U];
+ memcpy(
+ uu____5, u,
+ (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0));
+ libcrux_ml_kem_ind_cpa_compress_then_serialize_u_a7(
+ uu____5, Eurydice_array_to_subslice2(ciphertext, (size_t)0U, (size_t)960U,
+ uint8_t));
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____6 = v;
+ libcrux_ml_kem_serialize_compress_then_serialize_ring_element_v_4e(
+ uu____6, Eurydice_array_to_subslice_from((size_t)1088U, ciphertext,
+ (size_t)960U, uint8_t, size_t));
+ memcpy(ret, ciphertext, (size_t)1088U * sizeof(uint8_t));
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::variant::Variant for
+libcrux_ml_kem::variant::MlKem)#1}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.variant.kdf_d8
+with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
+with const generics
+- K= 3
+- CIPHERTEXT_SIZE= 1088
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_variant_kdf_d8_41(
+ Eurydice_slice shared_secret, libcrux_ml_kem_mlkem768_MlKem768Ciphertext *_,
+ uint8_t ret[32U]) {
+ uint8_t out[32U] = {0U};
+ Eurydice_slice_copy(Eurydice_array_to_slice((size_t)32U, out, uint8_t),
+ shared_secret, uint8_t);
+ memcpy(ret, out, (size_t)32U * sizeof(uint8_t));
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector,
+libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]],
+libcrux_ml_kem_variant_MlKem with const generics
+- K= 3
+- SECRET_KEY_SIZE= 2400
+- CPA_SECRET_KEY_SIZE= 1152
+- PUBLIC_KEY_SIZE= 1184
+- CIPHERTEXT_SIZE= 1088
+- T_AS_NTT_ENCODED_SIZE= 1152
+- C1_SIZE= 960
+- C2_SIZE= 128
+- VECTOR_U_COMPRESSION_FACTOR= 10
+- VECTOR_V_COMPRESSION_FACTOR= 4
+- C1_BLOCK_SIZE= 320
+- ETA1= 2
+- ETA1_RANDOMNESS_SIZE= 128
+- ETA2= 2
+- ETA2_RANDOMNESS_SIZE= 128
+- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120
+*/
+static inline void libcrux_ml_kem_ind_cca_decapsulate_70(
+ libcrux_ml_kem_types_MlKemPrivateKey_55 *private_key,
+ libcrux_ml_kem_mlkem768_MlKem768Ciphertext *ciphertext, uint8_t ret[32U]) {
+ Eurydice_slice_uint8_t_x2 uu____0 = Eurydice_slice_split_at(
+ Eurydice_array_to_slice((size_t)2400U, private_key->value, uint8_t),
+ (size_t)1152U, uint8_t, Eurydice_slice_uint8_t_x2);
+ Eurydice_slice ind_cpa_secret_key = uu____0.fst;
+ Eurydice_slice secret_key0 = uu____0.snd;
+ Eurydice_slice_uint8_t_x2 uu____1 = Eurydice_slice_split_at(
+ secret_key0, (size_t)1184U, uint8_t, Eurydice_slice_uint8_t_x2);
+ Eurydice_slice ind_cpa_public_key = uu____1.fst;
+ Eurydice_slice secret_key = uu____1.snd;
+ Eurydice_slice_uint8_t_x2 uu____2 = Eurydice_slice_split_at(
+ secret_key, LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE, uint8_t,
+ Eurydice_slice_uint8_t_x2);
+ Eurydice_slice ind_cpa_public_key_hash = uu____2.fst;
+ Eurydice_slice implicit_rejection_value = uu____2.snd;
+ uint8_t decrypted[32U];
+ libcrux_ml_kem_ind_cpa_decrypt_43(ind_cpa_secret_key, ciphertext->value,
+ decrypted);
+ uint8_t to_hash0[64U];
+ libcrux_ml_kem_utils_into_padded_array_ea(
+ Eurydice_array_to_slice((size_t)32U, decrypted, uint8_t), to_hash0);
+ Eurydice_slice_copy(
+ Eurydice_array_to_subslice_from(
+ (size_t)64U, to_hash0, LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,
+ uint8_t, size_t),
+ ind_cpa_public_key_hash, uint8_t);
+ uint8_t hashed[64U];
+ libcrux_ml_kem_hash_functions_portable_G_f1_e4(
+ Eurydice_array_to_slice((size_t)64U, to_hash0, uint8_t), hashed);
+ Eurydice_slice_uint8_t_x2 uu____3 = Eurydice_slice_split_at(
+ Eurydice_array_to_slice((size_t)64U, hashed, uint8_t),
+ LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE, uint8_t,
+ Eurydice_slice_uint8_t_x2);
+ Eurydice_slice shared_secret0 = uu____3.fst;
+ Eurydice_slice pseudorandomness = uu____3.snd;
+ uint8_t to_hash[1120U];
+ libcrux_ml_kem_utils_into_padded_array_ea0(implicit_rejection_value, to_hash);
+ Eurydice_slice uu____4 = Eurydice_array_to_subslice_from(
+ (size_t)1120U, to_hash, LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,
+ uint8_t, size_t);
+ Eurydice_slice_copy(uu____4, libcrux_ml_kem_types_as_ref_00_24(ciphertext),
+ uint8_t);
+ uint8_t implicit_rejection_shared_secret0[32U];
+ libcrux_ml_kem_hash_functions_portable_PRF_f1_ee(
+ Eurydice_array_to_slice((size_t)1120U, to_hash, uint8_t),
+ implicit_rejection_shared_secret0);
+ Eurydice_slice uu____5 = ind_cpa_public_key;
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_decrypted[32U];
+ memcpy(copy_of_decrypted, decrypted, (size_t)32U * sizeof(uint8_t));
+ uint8_t expected_ciphertext[1088U];
+ libcrux_ml_kem_ind_cpa_encrypt_60(uu____5, copy_of_decrypted,
+ pseudorandomness, expected_ciphertext);
+ uint8_t implicit_rejection_shared_secret[32U];
+ libcrux_ml_kem_variant_kdf_d8_41(
+ Eurydice_array_to_slice((size_t)32U, implicit_rejection_shared_secret0,
+ uint8_t),
+ ciphertext, implicit_rejection_shared_secret);
+ uint8_t shared_secret[32U];
+ libcrux_ml_kem_variant_kdf_d8_41(shared_secret0, ciphertext, shared_secret);
+ uint8_t ret0[32U];
+ libcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time(
+ libcrux_ml_kem_types_as_ref_00_24(ciphertext),
+ Eurydice_array_to_slice((size_t)1088U, expected_ciphertext, uint8_t),
+ Eurydice_array_to_slice((size_t)32U, shared_secret, uint8_t),
+ Eurydice_array_to_slice((size_t)32U, implicit_rejection_shared_secret,
+ uint8_t),
+ ret0);
+ memcpy(ret, ret0, (size_t)32U * sizeof(uint8_t));
+}
+
+/**
+ Portable decapsulate
+*/
+/**
+A monomorphic instance of
+libcrux_ml_kem.ind_cca.instantiations.portable.decapsulate with const generics
+- K= 3
+- SECRET_KEY_SIZE= 2400
+- CPA_SECRET_KEY_SIZE= 1152
+- PUBLIC_KEY_SIZE= 1184
+- CIPHERTEXT_SIZE= 1088
+- T_AS_NTT_ENCODED_SIZE= 1152
+- C1_SIZE= 960
+- C2_SIZE= 128
+- VECTOR_U_COMPRESSION_FACTOR= 10
+- VECTOR_V_COMPRESSION_FACTOR= 4
+- C1_BLOCK_SIZE= 320
+- ETA1= 2
+- ETA1_RANDOMNESS_SIZE= 128
+- ETA2= 2
+- ETA2_RANDOMNESS_SIZE= 128
+- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120
+*/
+static inline void
+libcrux_ml_kem_ind_cca_instantiations_portable_decapsulate_2e(
+ libcrux_ml_kem_types_MlKemPrivateKey_55 *private_key,
+ libcrux_ml_kem_mlkem768_MlKem768Ciphertext *ciphertext, uint8_t ret[32U]) {
+ libcrux_ml_kem_ind_cca_decapsulate_70(private_key, ciphertext, ret);
+}
+
+/**
+ Decapsulate ML-KEM 768
+
+ Generates an [`MlKemSharedSecret`].
+ The input is a reference to an [`MlKem768PrivateKey`] and an
+ [`MlKem768Ciphertext`].
+*/
+static inline void libcrux_ml_kem_mlkem768_portable_decapsulate(
+ libcrux_ml_kem_types_MlKemPrivateKey_55 *private_key,
+ libcrux_ml_kem_mlkem768_MlKem768Ciphertext *ciphertext, uint8_t ret[32U]) {
+ libcrux_ml_kem_ind_cca_instantiations_portable_decapsulate_2e(
+ private_key, ciphertext, ret);
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::variant::Variant for
+libcrux_ml_kem::variant::MlKem)#1}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.variant.entropy_preprocess_d8
+with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
+with const generics
+- K= 3
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_variant_entropy_preprocess_d8_63(
+ Eurydice_slice randomness, uint8_t ret[32U]) {
+ uint8_t out[32U] = {0U};
+ Eurydice_slice_copy(Eurydice_array_to_slice((size_t)32U, out, uint8_t),
+ randomness, uint8_t);
+ memcpy(ret, out, (size_t)32U * sizeof(uint8_t));
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::hash_functions::Hash<K> for
+libcrux_ml_kem::hash_functions::portable::PortableHash<K>)}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.hash_functions.portable.H_f1
+with const generics
+- K= 3
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_hash_functions_portable_H_f1_1a(
+ Eurydice_slice input, uint8_t ret[32U]) {
+ libcrux_ml_kem_hash_functions_portable_H(input, ret);
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector,
+libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]],
+libcrux_ml_kem_variant_MlKem with const generics
+- K= 3
+- CIPHERTEXT_SIZE= 1088
+- PUBLIC_KEY_SIZE= 1184
+- T_AS_NTT_ENCODED_SIZE= 1152
+- C1_SIZE= 960
+- C2_SIZE= 128
+- VECTOR_U_COMPRESSION_FACTOR= 10
+- VECTOR_V_COMPRESSION_FACTOR= 4
+- VECTOR_U_BLOCK_LEN= 320
+- ETA1= 2
+- ETA1_RANDOMNESS_SIZE= 128
+- ETA2= 2
+- ETA2_RANDOMNESS_SIZE= 128
+*/
+static inline tuple_3c libcrux_ml_kem_ind_cca_encapsulate_cd(
+ libcrux_ml_kem_types_MlKemPublicKey_15 *public_key,
+ uint8_t randomness[32U]) {
+ uint8_t randomness0[32U];
+ libcrux_ml_kem_variant_entropy_preprocess_d8_63(
+ Eurydice_array_to_slice((size_t)32U, randomness, uint8_t), randomness0);
+ uint8_t to_hash[64U];
+ libcrux_ml_kem_utils_into_padded_array_ea(
+ Eurydice_array_to_slice((size_t)32U, randomness0, uint8_t), to_hash);
+ Eurydice_slice uu____0 = Eurydice_array_to_subslice_from(
+ (size_t)64U, to_hash, LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE, uint8_t,
+ size_t);
+ uint8_t ret[32U];
+ libcrux_ml_kem_hash_functions_portable_H_f1_1a(
+ Eurydice_array_to_slice((size_t)1184U,
+ libcrux_ml_kem_types_as_slice_cb_50(public_key),
+ uint8_t),
+ ret);
+ Eurydice_slice_copy(
+ uu____0, Eurydice_array_to_slice((size_t)32U, ret, uint8_t), uint8_t);
+ uint8_t hashed[64U];
+ libcrux_ml_kem_hash_functions_portable_G_f1_e4(
+ Eurydice_array_to_slice((size_t)64U, to_hash, uint8_t), hashed);
+ Eurydice_slice_uint8_t_x2 uu____1 = Eurydice_slice_split_at(
+ Eurydice_array_to_slice((size_t)64U, hashed, uint8_t),
+ LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE, uint8_t,
+ Eurydice_slice_uint8_t_x2);
+ Eurydice_slice shared_secret = uu____1.fst;
+ Eurydice_slice pseudorandomness = uu____1.snd;
+ Eurydice_slice uu____2 = Eurydice_array_to_slice(
+ (size_t)1184U, libcrux_ml_kem_types_as_slice_cb_50(public_key), uint8_t);
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_randomness[32U];
+ memcpy(copy_of_randomness, randomness0, (size_t)32U * sizeof(uint8_t));
+ uint8_t ciphertext[1088U];
+ libcrux_ml_kem_ind_cpa_encrypt_60(uu____2, copy_of_randomness,
+ pseudorandomness, ciphertext);
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_ciphertext[1088U];
+ memcpy(copy_of_ciphertext, ciphertext, (size_t)1088U * sizeof(uint8_t));
+ libcrux_ml_kem_mlkem768_MlKem768Ciphertext ciphertext0 =
+ libcrux_ml_kem_types_from_01_9f(copy_of_ciphertext);
+ uint8_t shared_secret_array[32U];
+ libcrux_ml_kem_variant_kdf_d8_41(shared_secret, &ciphertext0,
+ shared_secret_array);
+ libcrux_ml_kem_mlkem768_MlKem768Ciphertext uu____5 = ciphertext0;
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_shared_secret_array[32U];
+ memcpy(copy_of_shared_secret_array, shared_secret_array,
+ (size_t)32U * sizeof(uint8_t));
+ tuple_3c lit;
+ lit.fst = uu____5;
+ memcpy(lit.snd, copy_of_shared_secret_array, (size_t)32U * sizeof(uint8_t));
+ return lit;
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.ind_cca.instantiations.portable.encapsulate with const generics
+- K= 3
+- CIPHERTEXT_SIZE= 1088
+- PUBLIC_KEY_SIZE= 1184
+- T_AS_NTT_ENCODED_SIZE= 1152
+- C1_SIZE= 960
+- C2_SIZE= 128
+- VECTOR_U_COMPRESSION_FACTOR= 10
+- VECTOR_V_COMPRESSION_FACTOR= 4
+- VECTOR_U_BLOCK_LEN= 320
+- ETA1= 2
+- ETA1_RANDOMNESS_SIZE= 128
+- ETA2= 2
+- ETA2_RANDOMNESS_SIZE= 128
+*/
+static inline tuple_3c
+libcrux_ml_kem_ind_cca_instantiations_portable_encapsulate_c6(
+ libcrux_ml_kem_types_MlKemPublicKey_15 *public_key,
+ uint8_t randomness[32U]) {
+ libcrux_ml_kem_types_MlKemPublicKey_15 *uu____0 = public_key;
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_randomness[32U];
+ memcpy(copy_of_randomness, randomness, (size_t)32U * sizeof(uint8_t));
+ return libcrux_ml_kem_ind_cca_encapsulate_cd(uu____0, copy_of_randomness);
+}
+
+/**
+ Encapsulate ML-KEM 768
+
+ Generates an ([`MlKem768Ciphertext`], [`MlKemSharedSecret`]) tuple.
+ The input is a reference to an [`MlKem768PublicKey`] and [`SHARED_SECRET_SIZE`]
+ bytes of `randomness`.
+*/
+static inline tuple_3c libcrux_ml_kem_mlkem768_portable_encapsulate(
+ libcrux_ml_kem_types_MlKemPublicKey_15 *public_key,
+ uint8_t randomness[32U]) {
+ libcrux_ml_kem_types_MlKemPublicKey_15 *uu____0 = public_key;
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_randomness[32U];
+ memcpy(copy_of_randomness, randomness, (size_t)32U * sizeof(uint8_t));
+ return libcrux_ml_kem_ind_cca_instantiations_portable_encapsulate_c6(
+ uu____0, copy_of_randomness);
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::variant::Variant for
+libcrux_ml_kem::variant::MlKem)#1}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.variant.cpa_keygen_seed_d8
+with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
+with const generics
+- K= 3
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_variant_cpa_keygen_seed_d8_0e(
+ Eurydice_slice key_generation_seed, uint8_t ret[64U]) {
+ uint8_t seed[33U] = {0U};
+ Eurydice_slice_copy(
+ Eurydice_array_to_subslice2(
+ seed, (size_t)0U,
+ LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE, uint8_t),
+ key_generation_seed, uint8_t);
+ seed[LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE] =
+ (uint8_t)(size_t)3U;
+ uint8_t ret0[64U];
+ libcrux_ml_kem_hash_functions_portable_G_f1_e4(
+ Eurydice_array_to_slice((size_t)33U, seed, uint8_t), ret0);
+ memcpy(ret, ret0, (size_t)64U * sizeof(uint8_t));
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.matrix.compute_As_plus_e.closure
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+- K= 3
+*/
+static inline libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_matrix_compute_As_plus_e_closure_87(size_t _i) {
+ return libcrux_ml_kem_polynomial_ZERO_89_ea();
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.vector.traits.to_standard_domain
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_traits_to_standard_domain_59(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector v) {
+ return libcrux_ml_kem_vector_portable_montgomery_multiply_by_constant_0d(
+ v, LIBCRUX_ML_KEM_VECTOR_TRAITS_MONTGOMERY_R_SQUARED_MOD_FIELD_MODULUS);
+}
+
+/**
+This function found in impl
+{libcrux_ml_kem::polynomial::PolynomialRingElement<Vector>[TraitClause@0]}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.polynomial.add_standard_error_reduce_89
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+
+*/
+static KRML_MUSTINLINE void
+libcrux_ml_kem_polynomial_add_standard_error_reduce_89_03(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *self,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *error) {
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) {
+ size_t j = i;
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector
+ coefficient_normal_form =
+ libcrux_ml_kem_vector_traits_to_standard_domain_59(
+ self->coefficients[j]);
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector uu____0 =
+ libcrux_ml_kem_vector_portable_barrett_reduce_0d(
+ libcrux_ml_kem_vector_portable_add_0d(coefficient_normal_form,
+ &error->coefficients[j]));
+ self->coefficients[j] = uu____0;
+ }
+}
+
+/**
+ Compute  ◦ ŝ + ê
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.matrix.compute_As_plus_e
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+- K= 3
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_matrix_compute_As_plus_e_60(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 (*matrix_A)[3U],
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *s_as_ntt,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *error_as_ntt,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[3U]) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 result[3U];
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ result[i] = libcrux_ml_kem_polynomial_ZERO_89_ea();
+ }
+ for (size_t i0 = (size_t)0U;
+ i0 < Eurydice_slice_len(
+ Eurydice_array_to_slice(
+ (size_t)3U, matrix_A,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0[3U]),
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0[3U]);
+ i0++) {
+ size_t i1 = i0;
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *row = matrix_A[i1];
+ for (size_t i = (size_t)0U;
+ i < Eurydice_slice_len(
+ Eurydice_array_to_slice(
+ (size_t)3U, row,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0),
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0);
+ i++) {
+ size_t j = i;
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *matrix_element =
+ &row[j];
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 product =
+ libcrux_ml_kem_polynomial_ntt_multiply_89_2a(matrix_element,
+ &s_as_ntt[j]);
+ libcrux_ml_kem_polynomial_add_to_ring_element_89_84(&result[i1],
+ &product);
+ }
+ libcrux_ml_kem_polynomial_add_standard_error_reduce_89_03(
+ &result[i1], &error_as_ntt[i1]);
+ }
+ memcpy(
+ ret, result,
+ (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0));
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.serialize.serialize_uncompressed_ring_element with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+
+*/
+static KRML_MUSTINLINE void
+libcrux_ml_kem_serialize_serialize_uncompressed_ring_element_5b(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *re, uint8_t ret[384U]) {
+ uint8_t serialized[384U] = {0U};
+ for (size_t i = (size_t)0U;
+ i < LIBCRUX_ML_KEM_POLYNOMIAL_VECTORS_IN_RING_ELEMENT; i++) {
+ size_t i0 = i;
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector coefficient =
+ libcrux_ml_kem_vector_traits_to_unsigned_representative_db(
+ re->coefficients[i0]);
+ uint8_t bytes[24U];
+ libcrux_ml_kem_vector_portable_serialize_12_0d(coefficient, bytes);
+ Eurydice_slice uu____0 = Eurydice_array_to_subslice2(
+ serialized, (size_t)24U * i0, (size_t)24U * i0 + (size_t)24U, uint8_t);
+ Eurydice_slice_copy(
+ uu____0, Eurydice_array_to_slice((size_t)24U, bytes, uint8_t), uint8_t);
+ }
+ memcpy(ret, serialized, (size_t)384U * sizeof(uint8_t));
+}
+
+/**
+ Call [`serialize_uncompressed_ring_element`] for each ring element.
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_secret_key
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+- K= 3
+- OUT_LEN= 1152
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_ind_cpa_serialize_secret_key_b5(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *key,
+ uint8_t ret[1152U]) {
+ uint8_t out[1152U] = {0U};
+ for (size_t i = (size_t)0U;
+ i < Eurydice_slice_len(
+ Eurydice_array_to_slice(
+ (size_t)3U, key,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0),
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0);
+ i++) {
+ size_t i0 = i;
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 re = key[i0];
+ Eurydice_slice uu____0 = Eurydice_array_to_subslice2(
+ out, i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,
+ (i0 + (size_t)1U) * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,
+ uint8_t);
+ uint8_t ret0[384U];
+ libcrux_ml_kem_serialize_serialize_uncompressed_ring_element_5b(&re, ret0);
+ Eurydice_slice_copy(
+ uu____0, Eurydice_array_to_slice((size_t)384U, ret0, uint8_t), uint8_t);
+ }
+ memcpy(ret, out, (size_t)1152U * sizeof(uint8_t));
+}
+
+/**
+ Concatenate `t` and `ρ` into the public key.
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.ind_cpa.serialize_public_key
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+- K= 3
+- RANKED_BYTES_PER_RING_ELEMENT= 1152
+- PUBLIC_KEY_SIZE= 1184
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_ind_cpa_serialize_public_key_79(
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *t_as_ntt,
+ Eurydice_slice seed_for_a, uint8_t ret[1184U]) {
+ uint8_t public_key_serialized[1184U] = {0U};
+ Eurydice_slice uu____0 = Eurydice_array_to_subslice2(
+ public_key_serialized, (size_t)0U, (size_t)1152U, uint8_t);
+ uint8_t ret0[1152U];
+ libcrux_ml_kem_ind_cpa_serialize_secret_key_b5(t_as_ntt, ret0);
+ Eurydice_slice_copy(
+ uu____0, Eurydice_array_to_slice((size_t)1152U, ret0, uint8_t), uint8_t);
+ Eurydice_slice_copy(
+ Eurydice_array_to_subslice_from((size_t)1184U, public_key_serialized,
+ (size_t)1152U, uint8_t, size_t),
+ seed_for_a, uint8_t);
+ memcpy(ret, public_key_serialized, (size_t)1184U * sizeof(uint8_t));
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector,
+libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]],
+libcrux_ml_kem_variant_MlKem with const generics
+- K= 3
+- PRIVATE_KEY_SIZE= 1152
+- PUBLIC_KEY_SIZE= 1184
+- RANKED_BYTES_PER_RING_ELEMENT= 1152
+- ETA1= 2
+- ETA1_RANDOMNESS_SIZE= 128
+*/
+static inline libcrux_ml_kem_utils_extraction_helper_Keypair768
+libcrux_ml_kem_ind_cpa_generate_keypair_fc(Eurydice_slice key_generation_seed) {
+ uint8_t hashed[64U];
+ libcrux_ml_kem_variant_cpa_keygen_seed_d8_0e(key_generation_seed, hashed);
+ Eurydice_slice_uint8_t_x2 uu____0 = Eurydice_slice_split_at(
+ Eurydice_array_to_slice((size_t)64U, hashed, uint8_t), (size_t)32U,
+ uint8_t, Eurydice_slice_uint8_t_x2);
+ Eurydice_slice seed_for_A0 = uu____0.fst;
+ Eurydice_slice seed_for_secret_and_error = uu____0.snd;
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 A_transpose[3U][3U];
+ uint8_t ret[34U];
+ libcrux_ml_kem_utils_into_padded_array_ea1(seed_for_A0, ret);
+ libcrux_ml_kem_matrix_sample_matrix_A_38(ret, true, A_transpose);
+ uint8_t prf_input[33U];
+ libcrux_ml_kem_utils_into_padded_array_ea2(seed_for_secret_and_error,
+ prf_input);
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_prf_input0[33U];
+ memcpy(copy_of_prf_input0, prf_input, (size_t)33U * sizeof(uint8_t));
+ tuple_b0 uu____2 = libcrux_ml_kem_ind_cpa_sample_vector_cbd_then_ntt_fc(
+ copy_of_prf_input0, 0U);
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 secret_as_ntt[3U];
+ memcpy(
+ secret_as_ntt, uu____2.fst,
+ (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0));
+ uint8_t domain_separator = uu____2.snd;
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_prf_input[33U];
+ memcpy(copy_of_prf_input, prf_input, (size_t)33U * sizeof(uint8_t));
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 error_as_ntt[3U];
+ memcpy(
+ error_as_ntt,
+ libcrux_ml_kem_ind_cpa_sample_vector_cbd_then_ntt_fc(copy_of_prf_input,
+ domain_separator)
+ .fst,
+ (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0));
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 t_as_ntt[3U];
+ libcrux_ml_kem_matrix_compute_As_plus_e_60(A_transpose, secret_as_ntt,
+ error_as_ntt, t_as_ntt);
+ uint8_t seed_for_A[32U];
+ Result_00 dst;
+ Eurydice_slice_to_array2(&dst, seed_for_A0, Eurydice_slice, uint8_t[32U]);
+ unwrap_41_83(dst, seed_for_A);
+ uint8_t public_key_serialized[1184U];
+ libcrux_ml_kem_ind_cpa_serialize_public_key_79(
+ t_as_ntt, Eurydice_array_to_slice((size_t)32U, seed_for_A, uint8_t),
+ public_key_serialized);
+ uint8_t secret_key_serialized[1152U];
+ libcrux_ml_kem_ind_cpa_serialize_secret_key_b5(secret_as_ntt,
+ secret_key_serialized);
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_secret_key_serialized[1152U];
+ memcpy(copy_of_secret_key_serialized, secret_key_serialized,
+ (size_t)1152U * sizeof(uint8_t));
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_public_key_serialized[1184U];
+ memcpy(copy_of_public_key_serialized, public_key_serialized,
+ (size_t)1184U * sizeof(uint8_t));
+ libcrux_ml_kem_utils_extraction_helper_Keypair768 lit;
+ memcpy(lit.fst, copy_of_secret_key_serialized,
+ (size_t)1152U * sizeof(uint8_t));
+ memcpy(lit.snd, copy_of_public_key_serialized,
+ (size_t)1184U * sizeof(uint8_t));
+ return lit;
+}
+
+/**
+ Serialize the secret key.
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.ind_cca.serialize_kem_secret_key
+with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
+with const generics
+- K= 3
+- SERIALIZED_KEY_LEN= 2400
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_ind_cca_serialize_kem_secret_key_48(
+ Eurydice_slice private_key, Eurydice_slice public_key,
+ Eurydice_slice implicit_rejection_value, uint8_t ret[2400U]) {
+ uint8_t out[2400U] = {0U};
+ size_t pointer = (size_t)0U;
+ uint8_t *uu____0 = out;
+ size_t uu____1 = pointer;
+ size_t uu____2 = pointer;
+ Eurydice_slice_copy(
+ Eurydice_array_to_subslice2(
+ uu____0, uu____1, uu____2 + Eurydice_slice_len(private_key, uint8_t),
+ uint8_t),
+ private_key, uint8_t);
+ pointer = pointer + Eurydice_slice_len(private_key, uint8_t);
+ uint8_t *uu____3 = out;
+ size_t uu____4 = pointer;
+ size_t uu____5 = pointer;
+ Eurydice_slice_copy(
+ Eurydice_array_to_subslice2(
+ uu____3, uu____4, uu____5 + Eurydice_slice_len(public_key, uint8_t),
+ uint8_t),
+ public_key, uint8_t);
+ pointer = pointer + Eurydice_slice_len(public_key, uint8_t);
+ Eurydice_slice uu____6 = Eurydice_array_to_subslice2(
+ out, pointer, pointer + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE, uint8_t);
+ uint8_t ret0[32U];
+ libcrux_ml_kem_hash_functions_portable_H_f1_1a(public_key, ret0);
+ Eurydice_slice_copy(
+ uu____6, Eurydice_array_to_slice((size_t)32U, ret0, uint8_t), uint8_t);
+ pointer = pointer + LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE;
+ uint8_t *uu____7 = out;
+ size_t uu____8 = pointer;
+ size_t uu____9 = pointer;
+ Eurydice_slice_copy(
+ Eurydice_array_to_subslice2(
+ uu____7, uu____8,
+ uu____9 + Eurydice_slice_len(implicit_rejection_value, uint8_t),
+ uint8_t),
+ implicit_rejection_value, uint8_t);
+ memcpy(ret, out, (size_t)2400U * sizeof(uint8_t));
+}
+
+/**
+ Packed API
+
+ Generate a key pair.
+
+ Depending on the `Vector` and `Hasher` used, this requires different hardware
+ features
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector,
+libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]],
+libcrux_ml_kem_variant_MlKem with const generics
+- K= 3
+- CPA_PRIVATE_KEY_SIZE= 1152
+- PRIVATE_KEY_SIZE= 2400
+- PUBLIC_KEY_SIZE= 1184
+- BYTES_PER_RING_ELEMENT= 1152
+- ETA1= 2
+- ETA1_RANDOMNESS_SIZE= 128
+*/
+static inline libcrux_ml_kem_mlkem768_MlKem768KeyPair
+libcrux_ml_kem_ind_cca_generate_keypair_8c(uint8_t randomness[64U]) {
+ Eurydice_slice ind_cpa_keypair_randomness = Eurydice_array_to_subslice2(
+ randomness, (size_t)0U,
+ LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE, uint8_t);
+ Eurydice_slice implicit_rejection_value = Eurydice_array_to_subslice_from(
+ (size_t)64U, randomness,
+ LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE, uint8_t,
+ size_t);
+ libcrux_ml_kem_utils_extraction_helper_Keypair768 uu____0 =
+ libcrux_ml_kem_ind_cpa_generate_keypair_fc(ind_cpa_keypair_randomness);
+ uint8_t ind_cpa_private_key[1152U];
+ memcpy(ind_cpa_private_key, uu____0.fst, (size_t)1152U * sizeof(uint8_t));
+ uint8_t public_key[1184U];
+ memcpy(public_key, uu____0.snd, (size_t)1184U * sizeof(uint8_t));
+ uint8_t secret_key_serialized[2400U];
+ libcrux_ml_kem_ind_cca_serialize_kem_secret_key_48(
+ Eurydice_array_to_slice((size_t)1152U, ind_cpa_private_key, uint8_t),
+ Eurydice_array_to_slice((size_t)1184U, public_key, uint8_t),
+ implicit_rejection_value, secret_key_serialized);
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_secret_key_serialized[2400U];
+ memcpy(copy_of_secret_key_serialized, secret_key_serialized,
+ (size_t)2400U * sizeof(uint8_t));
+ libcrux_ml_kem_types_MlKemPrivateKey_55 private_key =
+ libcrux_ml_kem_types_from_05_f2(copy_of_secret_key_serialized);
+ libcrux_ml_kem_types_MlKemPrivateKey_55 uu____2 = private_key;
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_public_key[1184U];
+ memcpy(copy_of_public_key, public_key, (size_t)1184U * sizeof(uint8_t));
+ return libcrux_ml_kem_types_from_17_35(
+ uu____2, libcrux_ml_kem_types_from_b6_da(copy_of_public_key));
+}
+
+/**
+ Portable generate key pair.
+*/
+/**
+A monomorphic instance of
+libcrux_ml_kem.ind_cca.instantiations.portable.generate_keypair with const
+generics
+- K= 3
+- CPA_PRIVATE_KEY_SIZE= 1152
+- PRIVATE_KEY_SIZE= 2400
+- PUBLIC_KEY_SIZE= 1184
+- BYTES_PER_RING_ELEMENT= 1152
+- ETA1= 2
+- ETA1_RANDOMNESS_SIZE= 128
+*/
+static inline libcrux_ml_kem_mlkem768_MlKem768KeyPair
+libcrux_ml_kem_ind_cca_instantiations_portable_generate_keypair_d5(
+ uint8_t randomness[64U]) {
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_randomness[64U];
+ memcpy(copy_of_randomness, randomness, (size_t)64U * sizeof(uint8_t));
+ return libcrux_ml_kem_ind_cca_generate_keypair_8c(copy_of_randomness);
+}
+
+/**
+ Generate ML-KEM 768 Key Pair
+*/
+static inline libcrux_ml_kem_mlkem768_MlKem768KeyPair
+libcrux_ml_kem_mlkem768_portable_generate_key_pair(uint8_t randomness[64U]) {
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_randomness[64U];
+ memcpy(copy_of_randomness, randomness, (size_t)64U * sizeof(uint8_t));
+ return libcrux_ml_kem_ind_cca_instantiations_portable_generate_keypair_d5(
+ copy_of_randomness);
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::variant::Variant for
+libcrux_ml_kem::variant::Kyber)}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.variant.kdf_33
+with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
+with const generics
+- K= 3
+- CIPHERTEXT_SIZE= 1088
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_variant_kdf_33_f0(
+ Eurydice_slice shared_secret,
+ libcrux_ml_kem_mlkem768_MlKem768Ciphertext *ciphertext, uint8_t ret[32U]) {
+ uint8_t kdf_input[64U];
+ libcrux_ml_kem_utils_into_padded_array_ea(shared_secret, kdf_input);
+ Eurydice_slice uu____0 = Eurydice_array_to_subslice_from(
+ (size_t)64U, kdf_input, LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE, uint8_t,
+ size_t);
+ uint8_t ret0[32U];
+ libcrux_ml_kem_hash_functions_portable_H_f1_1a(
+ Eurydice_array_to_slice((size_t)1088U,
+ libcrux_ml_kem_types_as_slice_d4_1d(ciphertext),
+ uint8_t),
+ ret0);
+ Eurydice_slice_copy(
+ uu____0, Eurydice_array_to_slice((size_t)32U, ret0, uint8_t), uint8_t);
+ uint8_t ret1[32U];
+ libcrux_ml_kem_hash_functions_portable_PRF_f1_ee(
+ Eurydice_array_to_slice((size_t)64U, kdf_input, uint8_t), ret1);
+ memcpy(ret, ret1, (size_t)32U * sizeof(uint8_t));
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.ind_cca.decapsulate
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector,
+libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]],
+libcrux_ml_kem_variant_Kyber with const generics
+- K= 3
+- SECRET_KEY_SIZE= 2400
+- CPA_SECRET_KEY_SIZE= 1152
+- PUBLIC_KEY_SIZE= 1184
+- CIPHERTEXT_SIZE= 1088
+- T_AS_NTT_ENCODED_SIZE= 1152
+- C1_SIZE= 960
+- C2_SIZE= 128
+- VECTOR_U_COMPRESSION_FACTOR= 10
+- VECTOR_V_COMPRESSION_FACTOR= 4
+- C1_BLOCK_SIZE= 320
+- ETA1= 2
+- ETA1_RANDOMNESS_SIZE= 128
+- ETA2= 2
+- ETA2_RANDOMNESS_SIZE= 128
+- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120
+*/
+static inline void libcrux_ml_kem_ind_cca_decapsulate_700(
+ libcrux_ml_kem_types_MlKemPrivateKey_55 *private_key,
+ libcrux_ml_kem_mlkem768_MlKem768Ciphertext *ciphertext, uint8_t ret[32U]) {
+ Eurydice_slice_uint8_t_x2 uu____0 = Eurydice_slice_split_at(
+ Eurydice_array_to_slice((size_t)2400U, private_key->value, uint8_t),
+ (size_t)1152U, uint8_t, Eurydice_slice_uint8_t_x2);
+ Eurydice_slice ind_cpa_secret_key = uu____0.fst;
+ Eurydice_slice secret_key0 = uu____0.snd;
+ Eurydice_slice_uint8_t_x2 uu____1 = Eurydice_slice_split_at(
+ secret_key0, (size_t)1184U, uint8_t, Eurydice_slice_uint8_t_x2);
+ Eurydice_slice ind_cpa_public_key = uu____1.fst;
+ Eurydice_slice secret_key = uu____1.snd;
+ Eurydice_slice_uint8_t_x2 uu____2 = Eurydice_slice_split_at(
+ secret_key, LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE, uint8_t,
+ Eurydice_slice_uint8_t_x2);
+ Eurydice_slice ind_cpa_public_key_hash = uu____2.fst;
+ Eurydice_slice implicit_rejection_value = uu____2.snd;
+ uint8_t decrypted[32U];
+ libcrux_ml_kem_ind_cpa_decrypt_43(ind_cpa_secret_key, ciphertext->value,
+ decrypted);
+ uint8_t to_hash0[64U];
+ libcrux_ml_kem_utils_into_padded_array_ea(
+ Eurydice_array_to_slice((size_t)32U, decrypted, uint8_t), to_hash0);
+ Eurydice_slice_copy(
+ Eurydice_array_to_subslice_from(
+ (size_t)64U, to_hash0, LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,
+ uint8_t, size_t),
+ ind_cpa_public_key_hash, uint8_t);
+ uint8_t hashed[64U];
+ libcrux_ml_kem_hash_functions_portable_G_f1_e4(
+ Eurydice_array_to_slice((size_t)64U, to_hash0, uint8_t), hashed);
+ Eurydice_slice_uint8_t_x2 uu____3 = Eurydice_slice_split_at(
+ Eurydice_array_to_slice((size_t)64U, hashed, uint8_t),
+ LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE, uint8_t,
+ Eurydice_slice_uint8_t_x2);
+ Eurydice_slice shared_secret0 = uu____3.fst;
+ Eurydice_slice pseudorandomness = uu____3.snd;
+ uint8_t to_hash[1120U];
+ libcrux_ml_kem_utils_into_padded_array_ea0(implicit_rejection_value, to_hash);
+ Eurydice_slice uu____4 = Eurydice_array_to_subslice_from(
+ (size_t)1120U, to_hash, LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE,
+ uint8_t, size_t);
+ Eurydice_slice_copy(uu____4, libcrux_ml_kem_types_as_ref_00_24(ciphertext),
+ uint8_t);
+ uint8_t implicit_rejection_shared_secret0[32U];
+ libcrux_ml_kem_hash_functions_portable_PRF_f1_ee(
+ Eurydice_array_to_slice((size_t)1120U, to_hash, uint8_t),
+ implicit_rejection_shared_secret0);
+ Eurydice_slice uu____5 = ind_cpa_public_key;
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_decrypted[32U];
+ memcpy(copy_of_decrypted, decrypted, (size_t)32U * sizeof(uint8_t));
+ uint8_t expected_ciphertext[1088U];
+ libcrux_ml_kem_ind_cpa_encrypt_60(uu____5, copy_of_decrypted,
+ pseudorandomness, expected_ciphertext);
+ uint8_t implicit_rejection_shared_secret[32U];
+ libcrux_ml_kem_variant_kdf_33_f0(
+ Eurydice_array_to_slice((size_t)32U, implicit_rejection_shared_secret0,
+ uint8_t),
+ ciphertext, implicit_rejection_shared_secret);
+ uint8_t shared_secret[32U];
+ libcrux_ml_kem_variant_kdf_33_f0(shared_secret0, ciphertext, shared_secret);
+ uint8_t ret0[32U];
+ libcrux_ml_kem_constant_time_ops_compare_ciphertexts_select_shared_secret_in_constant_time(
+ libcrux_ml_kem_types_as_ref_00_24(ciphertext),
+ Eurydice_array_to_slice((size_t)1088U, expected_ciphertext, uint8_t),
+ Eurydice_array_to_slice((size_t)32U, shared_secret, uint8_t),
+ Eurydice_array_to_slice((size_t)32U, implicit_rejection_shared_secret,
+ uint8_t),
+ ret0);
+ memcpy(ret, ret0, (size_t)32U * sizeof(uint8_t));
+}
+
+/**
+ Portable decapsulate
+*/
+/**
+A monomorphic instance of
+libcrux_ml_kem.ind_cca.instantiations.portable.kyber_decapsulate with const
+generics
+- K= 3
+- SECRET_KEY_SIZE= 2400
+- CPA_SECRET_KEY_SIZE= 1152
+- PUBLIC_KEY_SIZE= 1184
+- CIPHERTEXT_SIZE= 1088
+- T_AS_NTT_ENCODED_SIZE= 1152
+- C1_SIZE= 960
+- C2_SIZE= 128
+- VECTOR_U_COMPRESSION_FACTOR= 10
+- VECTOR_V_COMPRESSION_FACTOR= 4
+- C1_BLOCK_SIZE= 320
+- ETA1= 2
+- ETA1_RANDOMNESS_SIZE= 128
+- ETA2= 2
+- ETA2_RANDOMNESS_SIZE= 128
+- IMPLICIT_REJECTION_HASH_INPUT_SIZE= 1120
+*/
+static inline void
+libcrux_ml_kem_ind_cca_instantiations_portable_kyber_decapsulate_fc(
+ libcrux_ml_kem_types_MlKemPrivateKey_55 *private_key,
+ libcrux_ml_kem_mlkem768_MlKem768Ciphertext *ciphertext, uint8_t ret[32U]) {
+ libcrux_ml_kem_ind_cca_decapsulate_700(private_key, ciphertext, ret);
+}
+
+/**
+ Decapsulate Kyber 768
+
+ Generates an [`MlKemSharedSecret`].
+ The input is a reference to an [`MlKem768PrivateKey`] and an
+ [`MlKem768Ciphertext`].
+*/
+static inline void libcrux_ml_kem_mlkem768_portable_kyber_decapsulate(
+ libcrux_ml_kem_types_MlKemPrivateKey_55 *private_key,
+ libcrux_ml_kem_mlkem768_MlKem768Ciphertext *ciphertext, uint8_t ret[32U]) {
+ libcrux_ml_kem_ind_cca_instantiations_portable_kyber_decapsulate_fc(
+ private_key, ciphertext, ret);
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::variant::Variant for
+libcrux_ml_kem::variant::Kyber)}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.variant.entropy_preprocess_33
+with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
+with const generics
+- K= 3
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_variant_entropy_preprocess_33_8a(
+ Eurydice_slice randomness, uint8_t ret[32U]) {
+ libcrux_ml_kem_hash_functions_portable_H_f1_1a(randomness, ret);
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.ind_cca.encapsulate
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector,
+libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]],
+libcrux_ml_kem_variant_Kyber with const generics
+- K= 3
+- CIPHERTEXT_SIZE= 1088
+- PUBLIC_KEY_SIZE= 1184
+- T_AS_NTT_ENCODED_SIZE= 1152
+- C1_SIZE= 960
+- C2_SIZE= 128
+- VECTOR_U_COMPRESSION_FACTOR= 10
+- VECTOR_V_COMPRESSION_FACTOR= 4
+- VECTOR_U_BLOCK_LEN= 320
+- ETA1= 2
+- ETA1_RANDOMNESS_SIZE= 128
+- ETA2= 2
+- ETA2_RANDOMNESS_SIZE= 128
+*/
+static inline tuple_3c libcrux_ml_kem_ind_cca_encapsulate_cd0(
+ libcrux_ml_kem_types_MlKemPublicKey_15 *public_key,
+ uint8_t randomness[32U]) {
+ uint8_t randomness0[32U];
+ libcrux_ml_kem_variant_entropy_preprocess_33_8a(
+ Eurydice_array_to_slice((size_t)32U, randomness, uint8_t), randomness0);
+ uint8_t to_hash[64U];
+ libcrux_ml_kem_utils_into_padded_array_ea(
+ Eurydice_array_to_slice((size_t)32U, randomness0, uint8_t), to_hash);
+ Eurydice_slice uu____0 = Eurydice_array_to_subslice_from(
+ (size_t)64U, to_hash, LIBCRUX_ML_KEM_CONSTANTS_H_DIGEST_SIZE, uint8_t,
+ size_t);
+ uint8_t ret[32U];
+ libcrux_ml_kem_hash_functions_portable_H_f1_1a(
+ Eurydice_array_to_slice((size_t)1184U,
+ libcrux_ml_kem_types_as_slice_cb_50(public_key),
+ uint8_t),
+ ret);
+ Eurydice_slice_copy(
+ uu____0, Eurydice_array_to_slice((size_t)32U, ret, uint8_t), uint8_t);
+ uint8_t hashed[64U];
+ libcrux_ml_kem_hash_functions_portable_G_f1_e4(
+ Eurydice_array_to_slice((size_t)64U, to_hash, uint8_t), hashed);
+ Eurydice_slice_uint8_t_x2 uu____1 = Eurydice_slice_split_at(
+ Eurydice_array_to_slice((size_t)64U, hashed, uint8_t),
+ LIBCRUX_ML_KEM_CONSTANTS_SHARED_SECRET_SIZE, uint8_t,
+ Eurydice_slice_uint8_t_x2);
+ Eurydice_slice shared_secret = uu____1.fst;
+ Eurydice_slice pseudorandomness = uu____1.snd;
+ Eurydice_slice uu____2 = Eurydice_array_to_slice(
+ (size_t)1184U, libcrux_ml_kem_types_as_slice_cb_50(public_key), uint8_t);
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_randomness[32U];
+ memcpy(copy_of_randomness, randomness0, (size_t)32U * sizeof(uint8_t));
+ uint8_t ciphertext[1088U];
+ libcrux_ml_kem_ind_cpa_encrypt_60(uu____2, copy_of_randomness,
+ pseudorandomness, ciphertext);
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_ciphertext[1088U];
+ memcpy(copy_of_ciphertext, ciphertext, (size_t)1088U * sizeof(uint8_t));
+ libcrux_ml_kem_mlkem768_MlKem768Ciphertext ciphertext0 =
+ libcrux_ml_kem_types_from_01_9f(copy_of_ciphertext);
+ uint8_t shared_secret_array[32U];
+ libcrux_ml_kem_variant_kdf_33_f0(shared_secret, &ciphertext0,
+ shared_secret_array);
+ libcrux_ml_kem_mlkem768_MlKem768Ciphertext uu____5 = ciphertext0;
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_shared_secret_array[32U];
+ memcpy(copy_of_shared_secret_array, shared_secret_array,
+ (size_t)32U * sizeof(uint8_t));
+ tuple_3c lit;
+ lit.fst = uu____5;
+ memcpy(lit.snd, copy_of_shared_secret_array, (size_t)32U * sizeof(uint8_t));
+ return lit;
+}
+
+/**
+ Portable encapsulate
+*/
+/**
+A monomorphic instance of
+libcrux_ml_kem.ind_cca.instantiations.portable.kyber_encapsulate with const
+generics
+- K= 3
+- CIPHERTEXT_SIZE= 1088
+- PUBLIC_KEY_SIZE= 1184
+- T_AS_NTT_ENCODED_SIZE= 1152
+- C1_SIZE= 960
+- C2_SIZE= 128
+- VECTOR_U_COMPRESSION_FACTOR= 10
+- VECTOR_V_COMPRESSION_FACTOR= 4
+- VECTOR_U_BLOCK_LEN= 320
+- ETA1= 2
+- ETA1_RANDOMNESS_SIZE= 128
+- ETA2= 2
+- ETA2_RANDOMNESS_SIZE= 128
+*/
+static inline tuple_3c
+libcrux_ml_kem_ind_cca_instantiations_portable_kyber_encapsulate_7a(
+ libcrux_ml_kem_types_MlKemPublicKey_15 *public_key,
+ uint8_t randomness[32U]) {
+ libcrux_ml_kem_types_MlKemPublicKey_15 *uu____0 = public_key;
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_randomness[32U];
+ memcpy(copy_of_randomness, randomness, (size_t)32U * sizeof(uint8_t));
+ return libcrux_ml_kem_ind_cca_encapsulate_cd0(uu____0, copy_of_randomness);
+}
+
+/**
+ Encapsulate Kyber 768
+
+ Generates an ([`MlKem768Ciphertext`], [`MlKemSharedSecret`]) tuple.
+ The input is a reference to an [`MlKem768PublicKey`] and [`SHARED_SECRET_SIZE`]
+ bytes of `randomness`.
+*/
+static inline tuple_3c libcrux_ml_kem_mlkem768_portable_kyber_encapsulate(
+ libcrux_ml_kem_types_MlKemPublicKey_15 *public_key,
+ uint8_t randomness[32U]) {
+ libcrux_ml_kem_types_MlKemPublicKey_15 *uu____0 = public_key;
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_randomness[32U];
+ memcpy(copy_of_randomness, randomness, (size_t)32U * sizeof(uint8_t));
+ return libcrux_ml_kem_ind_cca_instantiations_portable_kyber_encapsulate_7a(
+ uu____0, copy_of_randomness);
+}
+
+/**
+This function found in impl {(libcrux_ml_kem::variant::Variant for
+libcrux_ml_kem::variant::Kyber)}
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.variant.cpa_keygen_seed_33
+with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
+with const generics
+- K= 3
+*/
+static KRML_MUSTINLINE void libcrux_ml_kem_variant_cpa_keygen_seed_33_b6(
+ Eurydice_slice key_generation_seed, uint8_t ret[64U]) {
+ libcrux_ml_kem_hash_functions_portable_G_f1_e4(key_generation_seed, ret);
+}
+
+/**
+A monomorphic instance of libcrux_ml_kem.ind_cpa.generate_keypair
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector,
+libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]],
+libcrux_ml_kem_variant_Kyber with const generics
+- K= 3
+- PRIVATE_KEY_SIZE= 1152
+- PUBLIC_KEY_SIZE= 1184
+- RANKED_BYTES_PER_RING_ELEMENT= 1152
+- ETA1= 2
+- ETA1_RANDOMNESS_SIZE= 128
+*/
+static inline libcrux_ml_kem_utils_extraction_helper_Keypair768
+libcrux_ml_kem_ind_cpa_generate_keypair_fc0(
+ Eurydice_slice key_generation_seed) {
+ uint8_t hashed[64U];
+ libcrux_ml_kem_variant_cpa_keygen_seed_33_b6(key_generation_seed, hashed);
+ Eurydice_slice_uint8_t_x2 uu____0 = Eurydice_slice_split_at(
+ Eurydice_array_to_slice((size_t)64U, hashed, uint8_t), (size_t)32U,
+ uint8_t, Eurydice_slice_uint8_t_x2);
+ Eurydice_slice seed_for_A0 = uu____0.fst;
+ Eurydice_slice seed_for_secret_and_error = uu____0.snd;
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 A_transpose[3U][3U];
+ uint8_t ret[34U];
+ libcrux_ml_kem_utils_into_padded_array_ea1(seed_for_A0, ret);
+ libcrux_ml_kem_matrix_sample_matrix_A_38(ret, true, A_transpose);
+ uint8_t prf_input[33U];
+ libcrux_ml_kem_utils_into_padded_array_ea2(seed_for_secret_and_error,
+ prf_input);
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_prf_input0[33U];
+ memcpy(copy_of_prf_input0, prf_input, (size_t)33U * sizeof(uint8_t));
+ tuple_b0 uu____2 = libcrux_ml_kem_ind_cpa_sample_vector_cbd_then_ntt_fc(
+ copy_of_prf_input0, 0U);
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 secret_as_ntt[3U];
+ memcpy(
+ secret_as_ntt, uu____2.fst,
+ (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0));
+ uint8_t domain_separator = uu____2.snd;
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_prf_input[33U];
+ memcpy(copy_of_prf_input, prf_input, (size_t)33U * sizeof(uint8_t));
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 error_as_ntt[3U];
+ memcpy(
+ error_as_ntt,
+ libcrux_ml_kem_ind_cpa_sample_vector_cbd_then_ntt_fc(copy_of_prf_input,
+ domain_separator)
+ .fst,
+ (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0));
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 t_as_ntt[3U];
+ libcrux_ml_kem_matrix_compute_As_plus_e_60(A_transpose, secret_as_ntt,
+ error_as_ntt, t_as_ntt);
+ uint8_t seed_for_A[32U];
+ Result_00 dst;
+ Eurydice_slice_to_array2(&dst, seed_for_A0, Eurydice_slice, uint8_t[32U]);
+ unwrap_41_83(dst, seed_for_A);
+ uint8_t public_key_serialized[1184U];
+ libcrux_ml_kem_ind_cpa_serialize_public_key_79(
+ t_as_ntt, Eurydice_array_to_slice((size_t)32U, seed_for_A, uint8_t),
+ public_key_serialized);
+ uint8_t secret_key_serialized[1152U];
+ libcrux_ml_kem_ind_cpa_serialize_secret_key_b5(secret_as_ntt,
+ secret_key_serialized);
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_secret_key_serialized[1152U];
+ memcpy(copy_of_secret_key_serialized, secret_key_serialized,
+ (size_t)1152U * sizeof(uint8_t));
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_public_key_serialized[1184U];
+ memcpy(copy_of_public_key_serialized, public_key_serialized,
+ (size_t)1184U * sizeof(uint8_t));
+ libcrux_ml_kem_utils_extraction_helper_Keypair768 lit;
+ memcpy(lit.fst, copy_of_secret_key_serialized,
+ (size_t)1152U * sizeof(uint8_t));
+ memcpy(lit.snd, copy_of_public_key_serialized,
+ (size_t)1184U * sizeof(uint8_t));
+ return lit;
+}
+
+/**
+ Packed API
+
+ Generate a key pair.
+
+ Depending on the `Vector` and `Hasher` used, this requires different hardware
+ features
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.ind_cca.generate_keypair
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector,
+libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]],
+libcrux_ml_kem_variant_Kyber with const generics
+- K= 3
+- CPA_PRIVATE_KEY_SIZE= 1152
+- PRIVATE_KEY_SIZE= 2400
+- PUBLIC_KEY_SIZE= 1184
+- BYTES_PER_RING_ELEMENT= 1152
+- ETA1= 2
+- ETA1_RANDOMNESS_SIZE= 128
+*/
+static inline libcrux_ml_kem_mlkem768_MlKem768KeyPair
+libcrux_ml_kem_ind_cca_generate_keypair_8c0(uint8_t randomness[64U]) {
+ Eurydice_slice ind_cpa_keypair_randomness = Eurydice_array_to_subslice2(
+ randomness, (size_t)0U,
+ LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE, uint8_t);
+ Eurydice_slice implicit_rejection_value = Eurydice_array_to_subslice_from(
+ (size_t)64U, randomness,
+ LIBCRUX_ML_KEM_CONSTANTS_CPA_PKE_KEY_GENERATION_SEED_SIZE, uint8_t,
+ size_t);
+ libcrux_ml_kem_utils_extraction_helper_Keypair768 uu____0 =
+ libcrux_ml_kem_ind_cpa_generate_keypair_fc0(ind_cpa_keypair_randomness);
+ uint8_t ind_cpa_private_key[1152U];
+ memcpy(ind_cpa_private_key, uu____0.fst, (size_t)1152U * sizeof(uint8_t));
+ uint8_t public_key[1184U];
+ memcpy(public_key, uu____0.snd, (size_t)1184U * sizeof(uint8_t));
+ uint8_t secret_key_serialized[2400U];
+ libcrux_ml_kem_ind_cca_serialize_kem_secret_key_48(
+ Eurydice_array_to_slice((size_t)1152U, ind_cpa_private_key, uint8_t),
+ Eurydice_array_to_slice((size_t)1184U, public_key, uint8_t),
+ implicit_rejection_value, secret_key_serialized);
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_secret_key_serialized[2400U];
+ memcpy(copy_of_secret_key_serialized, secret_key_serialized,
+ (size_t)2400U * sizeof(uint8_t));
+ libcrux_ml_kem_types_MlKemPrivateKey_55 private_key =
+ libcrux_ml_kem_types_from_05_f2(copy_of_secret_key_serialized);
+ libcrux_ml_kem_types_MlKemPrivateKey_55 uu____2 = private_key;
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_public_key[1184U];
+ memcpy(copy_of_public_key, public_key, (size_t)1184U * sizeof(uint8_t));
+ return libcrux_ml_kem_types_from_17_35(
+ uu____2, libcrux_ml_kem_types_from_b6_da(copy_of_public_key));
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.ind_cca.instantiations.portable.kyber_generate_keypair with const
+generics
+- K= 3
+- CPA_PRIVATE_KEY_SIZE= 1152
+- PRIVATE_KEY_SIZE= 2400
+- PUBLIC_KEY_SIZE= 1184
+- BYTES_PER_RING_ELEMENT= 1152
+- ETA1= 2
+- ETA1_RANDOMNESS_SIZE= 128
+*/
+static inline libcrux_ml_kem_mlkem768_MlKem768KeyPair
+libcrux_ml_kem_ind_cca_instantiations_portable_kyber_generate_keypair_9b(
+ uint8_t randomness[64U]) {
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_randomness[64U];
+ memcpy(copy_of_randomness, randomness, (size_t)64U * sizeof(uint8_t));
+ return libcrux_ml_kem_ind_cca_generate_keypair_8c0(copy_of_randomness);
+}
+
+/**
+ Generate Kyber 768 Key Pair
+*/
+static inline libcrux_ml_kem_mlkem768_MlKem768KeyPair
+libcrux_ml_kem_mlkem768_portable_kyber_generate_key_pair(
+ uint8_t randomness[64U]) {
+ /* Passing arrays by value in Rust generates a copy in C */
+ uint8_t copy_of_randomness[64U];
+ memcpy(copy_of_randomness, randomness, (size_t)64U * sizeof(uint8_t));
+ return libcrux_ml_kem_ind_cca_instantiations_portable_kyber_generate_keypair_9b(
+ copy_of_randomness);
+}
+
+/**
+ Validate an ML-KEM private key.
+
+ This implements the Hash check in 7.3 3.
+ Note that the size checks in 7.2 1 and 2 are covered by the `SECRET_KEY_SIZE`
+ and `CIPHERTEXT_SIZE` in the `private_key` and `ciphertext` types.
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.ind_cca.validate_private_key
+with types libcrux_ml_kem_hash_functions_portable_PortableHash[[$3size_t]]
+with const generics
+- K= 3
+- SECRET_KEY_SIZE= 2400
+- CIPHERTEXT_SIZE= 1088
+*/
+static KRML_MUSTINLINE bool libcrux_ml_kem_ind_cca_validate_private_key_e7(
+ libcrux_ml_kem_types_MlKemPrivateKey_55 *private_key,
+ libcrux_ml_kem_mlkem768_MlKem768Ciphertext *_ciphertext) {
+ uint8_t t[32U];
+ libcrux_ml_kem_hash_functions_portable_H_f1_1a(
+ Eurydice_array_to_subslice2(private_key->value, (size_t)384U * (size_t)3U,
+ (size_t)768U * (size_t)3U + (size_t)32U,
+ uint8_t),
+ t);
+ Eurydice_slice expected = Eurydice_array_to_subslice2(
+ private_key->value, (size_t)768U * (size_t)3U + (size_t)32U,
+ (size_t)768U * (size_t)3U + (size_t)64U, uint8_t);
+ return core_array_equality___core__cmp__PartialEq__0___Slice_U____for__Array_T__N___3__eq(
+ (size_t)32U, t, &expected, uint8_t, uint8_t, bool);
+}
+
+/**
+ Portable private key validation
+*/
+/**
+A monomorphic instance of
+libcrux_ml_kem.ind_cca.instantiations.portable.validate_private_key with const
+generics
+- K= 3
+- SECRET_KEY_SIZE= 2400
+- CIPHERTEXT_SIZE= 1088
+*/
+static KRML_MUSTINLINE bool
+libcrux_ml_kem_ind_cca_instantiations_portable_validate_private_key_9c(
+ libcrux_ml_kem_types_MlKemPrivateKey_55 *private_key,
+ libcrux_ml_kem_mlkem768_MlKem768Ciphertext *ciphertext) {
+ return libcrux_ml_kem_ind_cca_validate_private_key_e7(private_key,
+ ciphertext);
+}
+
+/**
+ Validate a private key.
+
+ Returns `true` if valid, and `false` otherwise.
+*/
+static inline bool libcrux_ml_kem_mlkem768_portable_validate_private_key(
+ libcrux_ml_kem_types_MlKemPrivateKey_55 *private_key,
+ libcrux_ml_kem_mlkem768_MlKem768Ciphertext *ciphertext) {
+ return libcrux_ml_kem_ind_cca_instantiations_portable_validate_private_key_9c(
+ private_key, ciphertext);
+}
+
+/**
+A monomorphic instance of
+libcrux_ml_kem.serialize.deserialize_ring_elements_reduced.closure with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+- PUBLIC_KEY_SIZE= 1184
+- K= 3
+*/
+static inline libcrux_ml_kem_polynomial_PolynomialRingElement_f0
+libcrux_ml_kem_serialize_deserialize_ring_elements_reduced_closure_cd0(
+ size_t _i) {
+ return libcrux_ml_kem_polynomial_ZERO_89_ea();
+}
+
+/**
+ This function deserializes ring elements and reduces the result by the field
+ modulus.
+
+ This function MUST NOT be used on secret inputs.
+*/
+/**
+A monomorphic instance of
+libcrux_ml_kem.serialize.deserialize_ring_elements_reduced with types
+libcrux_ml_kem_vector_portable_vector_type_PortableVector with const generics
+- PUBLIC_KEY_SIZE= 1184
+- K= 3
+*/
+static KRML_MUSTINLINE void
+libcrux_ml_kem_serialize_deserialize_ring_elements_reduced_330(
+ Eurydice_slice public_key,
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 ret[3U]) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 deserialized_pk[3U];
+ for (size_t i = (size_t)0U; i < (size_t)3U; i++) {
+ deserialized_pk[i] = libcrux_ml_kem_polynomial_ZERO_89_ea();
+ }
+ for (size_t i = (size_t)0U;
+ i < Eurydice_slice_len(public_key, uint8_t) /
+ LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT;
+ i++) {
+ size_t i0 = i;
+ Eurydice_slice ring_element = Eurydice_slice_subslice2(
+ public_key, i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,
+ i0 * LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT +
+ LIBCRUX_ML_KEM_CONSTANTS_BYTES_PER_RING_ELEMENT,
+ uint8_t);
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 uu____0 =
+ libcrux_ml_kem_serialize_deserialize_to_reduced_ring_element_4c(
+ ring_element);
+ deserialized_pk[i0] = uu____0;
+ }
+ memcpy(
+ ret, deserialized_pk,
+ (size_t)3U * sizeof(libcrux_ml_kem_polynomial_PolynomialRingElement_f0));
+}
+
+/**
+ Validate an ML-KEM public key.
+
+ This implements the Modulus check in 7.2 2.
+ Note that the size check in 7.2 1 is covered by the `PUBLIC_KEY_SIZE` in the
+ `public_key` type.
+*/
+/**
+A monomorphic instance of libcrux_ml_kem.ind_cca.validate_public_key
+with types libcrux_ml_kem_vector_portable_vector_type_PortableVector
+with const generics
+- K= 3
+- RANKED_BYTES_PER_RING_ELEMENT= 1152
+- PUBLIC_KEY_SIZE= 1184
+*/
+static KRML_MUSTINLINE bool libcrux_ml_kem_ind_cca_validate_public_key_19(
+ uint8_t *public_key) {
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 deserialized_pk[3U];
+ libcrux_ml_kem_serialize_deserialize_ring_elements_reduced_330(
+ Eurydice_array_to_subslice_to((size_t)1184U, public_key, (size_t)1152U,
+ uint8_t, size_t),
+ deserialized_pk);
+ libcrux_ml_kem_polynomial_PolynomialRingElement_f0 *uu____0 = deserialized_pk;
+ uint8_t public_key_serialized[1184U];
+ libcrux_ml_kem_ind_cpa_serialize_public_key_79(
+ uu____0,
+ Eurydice_array_to_subslice_from((size_t)1184U, public_key, (size_t)1152U,
+ uint8_t, size_t),
+ public_key_serialized);
+ return core_array_equality___core__cmp__PartialEq__Array_U__N___for__Array_T__N____eq(
+ (size_t)1184U, public_key, public_key_serialized, uint8_t, uint8_t, bool);
+}
+
+/**
+ Portable public key validation
+*/
+/**
+A monomorphic instance of
+libcrux_ml_kem.ind_cca.instantiations.portable.validate_public_key with const
+generics
+- K= 3
+- RANKED_BYTES_PER_RING_ELEMENT= 1152
+- PUBLIC_KEY_SIZE= 1184
+*/
+static KRML_MUSTINLINE bool
+libcrux_ml_kem_ind_cca_instantiations_portable_validate_public_key_4b(
+ uint8_t *public_key) {
+ return libcrux_ml_kem_ind_cca_validate_public_key_19(public_key);
+}
+
+/**
+ Validate a public key.
+
+ Returns `true` if valid, and `false` otherwise.
+*/
+static inline bool libcrux_ml_kem_mlkem768_portable_validate_public_key(
+ libcrux_ml_kem_types_MlKemPublicKey_15 *public_key) {
+ return libcrux_ml_kem_ind_cca_instantiations_portable_validate_public_key_4b(
+ public_key->value);
+}
+
+/**
+This function found in impl {(core::clone::Clone for
+libcrux_ml_kem::vector::portable::vector_type::PortableVector)}
+*/
+static inline libcrux_ml_kem_vector_portable_vector_type_PortableVector
+libcrux_ml_kem_vector_portable_vector_type_clone_3b(
+ libcrux_ml_kem_vector_portable_vector_type_PortableVector *self) {
+ return self[0U];
+}
+
+typedef int16_t libcrux_ml_kem_vector_portable_vector_type_FieldElement;
+
+typedef int16_t
+ libcrux_ml_kem_vector_portable_arithmetic_MontgomeryFieldElement;
+
+typedef int16_t
+ libcrux_ml_kem_vector_portable_arithmetic_FieldElementTimesMontgomeryR;
+
+#if defined(__cplusplus)
+}
+#endif
+
+#define __libcrux_mlkem768_portable_H_DEFINED
+#endif
+
+
+/* rename some types to be a bit more ergonomic */
+#define libcrux_mlkem768_keypair libcrux_ml_kem_mlkem768_MlKem768KeyPair_s
+#define libcrux_mlkem768_pk_valid_result Option_92_s
+#define libcrux_mlkem768_pk libcrux_ml_kem_types_MlKemPublicKey_15_s
+#define libcrux_mlkem768_sk libcrux_ml_kem_types_MlKemPrivateKey_55_s
+#define libcrux_mlkem768_ciphertext libcrux_ml_kem_mlkem768_MlKem768Ciphertext_s
+#define libcrux_mlkem768_enc_result tuple_3c_s
+/* defines for PRNG inputs */
+#define LIBCRUX_ML_KEM_KEY_PAIR_PRNG_LEN 64
+#define LIBCRUX_ML_KEM_ENC_PRNG_LEN 32
diff --git a/loginrec.c b/loginrec.c
index 4f21499..7460bb2 100644
--- a/loginrec.c
+++ b/loginrec.c
@@ -25,27 +25,6 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-/*
- * The btmp logging code is derived from login.c from util-linux and is under
- * the the following license:
- *
- * Copyright (c) 1980, 1987, 1988 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley. The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-
/**
** loginrec.c: platform-independent login recording and lastlog retrieval
**/
@@ -603,6 +582,9 @@ line_abbrevname(char *dst, const char *src, int dstsize)
memset(dst, '\0', dstsize);
+ if (strcmp(src, "ssh:notty") == 0)
+ return dst;
+
/* Always skip prefix if present */
if (strncmp(src, "/dev/", 5) == 0)
src += 5;
@@ -1651,23 +1633,20 @@ utmpx_get_entry(struct logininfo *li)
#endif /* USE_UTMPX && HAVE_SETUTXDB && UTXDB_LASTLOGIN && HAVE_GETUTXUSER */
#ifdef USE_BTMP
- /*
- * Logs failed login attempts in _PATH_BTMP if that exists.
- * The most common login failure is to give password instead of username.
- * So the _PATH_BTMP file checked for the correct permission, so that
- * only root can read it.
- */
-
+/*
+ * Logs failed login attempts in _PATH_BTMP if that exists.
+ * The most common login failure is to give password instead of username.
+ * So the _PATH_BTMP file checked for the correct permission, so that only
+ * root can read it.
+ */
void
record_failed_login(struct ssh *ssh, const char *username, const char *hostname,
const char *ttyn)
{
int fd;
struct utmp ut;
- struct sockaddr_storage from;
- socklen_t fromlen = sizeof(from);
- struct sockaddr_in *a4;
- struct sockaddr_in6 *a6;
+ struct logininfo li;
+ socklen_t fromlen = sizeof(li.hostaddr);
time_t t;
struct stat fst;
@@ -1683,47 +1662,31 @@ record_failed_login(struct ssh *ssh, const char *username, const char *hostname,
strerror(errno));
goto out;
}
- if((fst.st_mode & (S_IXGRP | S_IRWXO)) || (fst.st_uid != 0)){
+ if ((fst.st_mode & (S_IXGRP | S_IRWXO)) || fst.st_uid != 0) {
logit("Excess permission or bad ownership on file %s",
_PATH_BTMP);
goto out;
}
- memset(&ut, 0, sizeof(ut));
- /* strncpy because we don't necessarily want nul termination */
- strncpy(ut.ut_user, username, sizeof(ut.ut_user));
- strlcpy(ut.ut_line, "ssh:notty", sizeof(ut.ut_line));
-
+ /* Construct a logininfo and turn it into a utmp */
+ memset(&li, 0, sizeof(li));
+ li.type = LTYPE_LOGIN;
+ li.pid = getpid();
+ strlcpy(li.line, "ssh:notty", sizeof(li.line));
+ strlcpy(li.username, username, sizeof(li.username));
+ strlcpy(li.hostname, hostname, sizeof(li.hostname));
time(&t);
- ut.ut_time = t; /* ut_time is not always a time_t */
- ut.ut_type = LOGIN_PROCESS;
- ut.ut_pid = getpid();
-
- /* strncpy because we don't necessarily want nul termination */
- strncpy(ut.ut_host, hostname, sizeof(ut.ut_host));
-
- if (ssh_packet_connection_is_on_socket(ssh) &&
- getpeername(ssh_packet_get_connection_in(ssh),
- (struct sockaddr *)&from, &fromlen) == 0) {
- ipv64_normalise_mapped(&from, &fromlen);
- if (from.ss_family == AF_INET) {
- a4 = (struct sockaddr_in *)&from;
- memcpy(&ut.ut_addr, &(a4->sin_addr),
- MIN_SIZEOF(ut.ut_addr, a4->sin_addr));
- }
-#ifdef HAVE_ADDR_V6_IN_UTMP
- if (from.ss_family == AF_INET6) {
- a6 = (struct sockaddr_in6 *)&from;
- memcpy(&ut.ut_addr_v6, &(a6->sin6_addr),
- MIN_SIZEOF(ut.ut_addr_v6, a6->sin6_addr));
- }
-#endif
+ li.tv_sec = t > 0 ? (unsigned long)t : 0;
+ if (ssh_packet_connection_is_on_socket(ssh)) {
+ (void)getpeername(ssh_packet_get_connection_in(ssh),
+ &li.hostaddr.sa, &fromlen);
}
+ construct_utmp(&li, &ut);
- if (atomicio(vwrite, fd, &ut, sizeof(ut)) != sizeof(ut))
+ if (atomicio(vwrite, fd, &ut, sizeof(ut)) != sizeof(ut)) {
error("Failed to write to %s: %s", _PATH_BTMP,
strerror(errno));
-
+ }
out:
close(fd);
}
diff --git a/match.c b/match.c
index d6af256..3ef5369 100644
--- a/match.c
+++ b/match.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: match.c,v 1.44 2023/04/06 03:19:32 djm Exp $ */
+/* $OpenBSD: match.c,v 1.45 2024/09/06 02:30:44 djm Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -241,7 +241,7 @@ match_user(const char *user, const char *host, const char *ipaddr,
/* test mode */
if (user == NULL && host == NULL && ipaddr == NULL) {
- if ((p = strchr(pattern, '@')) != NULL &&
+ if ((p = strrchr(pattern, '@')) != NULL &&
match_host_and_ip(NULL, NULL, p + 1) < 0)
return -1;
return 0;
@@ -250,11 +250,11 @@ match_user(const char *user, const char *host, const char *ipaddr,
if (user == NULL)
return 0; /* shouldn't happen */
- if ((p = strchr(pattern, '@')) == NULL)
+ if (strrchr(pattern, '@') == NULL)
return match_pattern(user, pattern);
pat = xstrdup(pattern);
- p = strchr(pat, '@');
+ p = strrchr(pat, '@');
*p++ = '\0';
if ((ret = match_pattern(user, pat)) == 1)
diff --git a/mlkem768.sh b/mlkem768.sh
new file mode 100644
index 0000000..2fdc283
--- /dev/null
+++ b/mlkem768.sh
@@ -0,0 +1,148 @@
+#!/bin/sh
+# $OpenBSD: mlkem768.sh,v 1.2 2024/09/04 05:11:33 djm Exp $
+# Placed in the Public Domain.
+#
+
+WANT_LIBCRUX_REVISION="origin/main"
+
+FILES="
+ libcrux/libcrux-ml-kem/cg/eurydice_glue.h
+ libcrux/libcrux-ml-kem/cg/libcrux_core.h
+ libcrux/libcrux-ml-kem/cg/libcrux_ct_ops.h
+ libcrux/libcrux-ml-kem/cg/libcrux_sha3_portable.h
+ libcrux/libcrux-ml-kem/cg/libcrux_mlkem768_portable.h
+"
+
+START="$PWD"
+die() {
+ echo "$@" 1>&2
+ exit 1
+}
+
+set -xeuo pipefail
+test -d libcrux || git clone https://github.com/cryspen/libcrux
+cd libcrux
+test `git diff | wc -l` -ne 0 && die "tree has unstaged changes"
+git fetch
+git checkout -B extract 1>&2
+git reset --hard $WANT_LIBCRUX_REVISION 1>&2
+LIBCRUX_REVISION=`git rev-parse HEAD`
+set +x
+
+cd $START
+(
+printf '/* $Open'; printf 'BSD$ */\n' # Sigh
+echo
+echo "/* Extracted from libcrux revision $LIBCRUX_REVISION */"
+echo
+echo '/*'
+cat libcrux/LICENSE-MIT | sed 's/^/ * /;s/ *$//'
+echo ' */'
+echo
+echo '#if !defined(__GNUC__) || (__GNUC__ < 2)'
+echo '# define __attribute__(x)'
+echo '#endif'
+echo '#define KRML_MUSTINLINE inline'
+echo '#define KRML_NOINLINE __attribute__((noinline, unused))'
+echo '#define KRML_HOST_EPRINTF(...)'
+echo '#define KRML_HOST_EXIT(x) fatal_f("internal error")'
+echo
+for i in $FILES; do
+ echo "/* from $i */"
+ # Changes to all files:
+ # - remove all includes, we inline everything required.
+ # - cleanup whitespace
+ sed -e "/#include/d" \
+ -e 's/[ ]*$//' \
+ $i | \
+ case "$i" in
+ # XXX per-file handling goes here.
+ # Default: pass through.
+ *)
+ cat
+ ;;
+ esac
+ echo
+done
+
+echo
+echo '/* rename some types to be a bit more ergonomic */'
+echo '#define libcrux_mlkem768_keypair libcrux_ml_kem_mlkem768_MlKem768KeyPair_s'
+echo '#define libcrux_mlkem768_pk_valid_result Option_92_s'
+echo '#define libcrux_mlkem768_pk libcrux_ml_kem_types_MlKemPublicKey_15_s'
+echo '#define libcrux_mlkem768_sk libcrux_ml_kem_types_MlKemPrivateKey_55_s'
+echo '#define libcrux_mlkem768_ciphertext libcrux_ml_kem_mlkem768_MlKem768Ciphertext_s'
+echo '#define libcrux_mlkem768_enc_result tuple_3c_s'
+) > libcrux_mlkem768_sha3.h_new
+
+# Do some checks on the resultant file
+
+cat > libcrux_mlkem768_sha3_check.c << _EOF
+#include <sys/types.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <string.h>
+#include <signal.h>
+#include <err.h>
+#include "crypto_api.h"
+#define fatal_f(x) exit(1)
+#include "libcrux_mlkem768_sha3.h_new"
+int main(void) {
+ struct libcrux_mlkem768_keypair keypair = {0};
+ struct libcrux_mlkem768_pk pk = {0};
+ struct libcrux_mlkem768_sk sk = {0};
+ struct libcrux_mlkem768_ciphertext ct = {0};
+ struct libcrux_mlkem768_enc_result enc_result = {0};
+ uint8_t kp_seed[64] = {0}, enc_seed[32] = {0};
+ uint8_t shared_key[crypto_kem_mlkem768_BYTES];
+
+ if (sizeof(keypair.pk.value) != crypto_kem_mlkem768_PUBLICKEYBYTES)
+ errx(1, "keypair.pk bad");
+ if (sizeof(keypair.sk.value) != crypto_kem_mlkem768_SECRETKEYBYTES)
+ errx(1, "keypair.sk bad");
+ if (sizeof(pk.value) != crypto_kem_mlkem768_PUBLICKEYBYTES)
+ errx(1, "pk bad");
+ if (sizeof(sk.value) != crypto_kem_mlkem768_SECRETKEYBYTES)
+ errx(1, "sk bad");
+ if (sizeof(ct.value) != crypto_kem_mlkem768_CIPHERTEXTBYTES)
+ errx(1, "ct bad");
+ if (sizeof(enc_result.fst.value) != crypto_kem_mlkem768_CIPHERTEXTBYTES)
+ errx(1, "enc_result ct bad");
+ if (sizeof(enc_result.snd) != crypto_kem_mlkem768_BYTES)
+ errx(1, "enc_result shared key bad");
+
+ keypair = libcrux_ml_kem_mlkem768_portable_generate_key_pair(kp_seed);
+ if (!libcrux_ml_kem_mlkem768_portable_validate_public_key(&keypair.pk))
+ errx(1, "valid smoke failed");
+ enc_result = libcrux_ml_kem_mlkem768_portable_encapsulate(&keypair.pk,
+ enc_seed);
+ libcrux_ml_kem_mlkem768_portable_decapsulate(&keypair.sk,
+ &enc_result.fst, shared_key);
+ if (memcmp(shared_key, enc_result.snd, sizeof(shared_key)) != 0)
+ errx(1, "smoke failed");
+ return 0;
+}
+_EOF
+cc -Wall -Wextra -Wno-unused-parameter -o libcrux_mlkem768_sha3_check \
+ libcrux_mlkem768_sha3_check.c
+./libcrux_mlkem768_sha3_check
+
+# Extract PRNG inputs; there's no nice #defines for these
+key_pair_rng_len=`sed -e '/^libcrux_ml_kem_mlkem768_portable_kyber_generate_key_pair[(]$/,/[)] {$/!d' < libcrux_mlkem768_sha3.h_new | grep 'uint8_t randomness\[[0-9]*U\][)]' | sed 's/.*randomness\[\([0-9]*\)U\].*/\1/'`
+enc_rng_len=`sed -e '/^static inline tuple_3c libcrux_ml_kem_mlkem768_portable_kyber_encapsulate[(]$/,/[)] {$/!d' < libcrux_mlkem768_sha3.h_new | grep 'uint8_t randomness\[[0-9]*U\][)]' | sed 's/.*randomness\[\([0-9]*\)U\].*/\1/'`
+test -z "$key_pair_rng_len" && die "couldn't find size of libcrux_ml_kem_mlkem768_portable_kyber_generate_key_pair randomness argument"
+test -z "$enc_rng_len" && die "couldn't find size of libcrux_ml_kem_mlkem768_portable_kyber_encapsulate randomness argument"
+
+(
+echo "/* defines for PRNG inputs */"
+echo "#define LIBCRUX_ML_KEM_KEY_PAIR_PRNG_LEN $key_pair_rng_len"
+echo "#define LIBCRUX_ML_KEM_ENC_PRNG_LEN $enc_rng_len"
+) >> libcrux_mlkem768_sha3.h_new
+
+mv libcrux_mlkem768_sha3.h_new libcrux_mlkem768_sha3.h
+rm libcrux_mlkem768_sha3_check libcrux_mlkem768_sha3_check.c
+echo 1>&2
+echo "libcrux_mlkem768_sha3.h OK" 1>&2
+
diff --git a/moduli b/moduli
index fb682e4..bebd3a9 100644
--- a/moduli
+++ b/moduli
@@ -1,469 +1,412 @@
-# $OpenBSD: moduli,v 1.37 2024/03/26 01:23:11 dtucker Exp $
+# $OpenBSD: moduli,v 1.38 2024/08/21 07:06:27 dtucker Exp $
# Time Type Tests Tries Size Generator Modulus
-20240104095616 2 6 100 2047 5 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E18168688F265F
-20240104095622 2 6 100 2047 2 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E1816868B9D16B
-20240104095623 2 6 100 2047 2 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E1816868BE5B5B
-20240104095635 2 6 100 2047 2 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E18168691008CB
-20240104095636 2 6 100 2047 2 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E1816869118D93
-20240104095705 2 6 100 2047 2 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E1816869F03EDB
-20240104095716 2 6 100 2047 5 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686A45B59F
-20240104095724 2 6 100 2047 2 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686A76925B
-20240104095725 2 6 100 2047 2 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686A7CBA63
-20240104095735 2 6 100 2047 2 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686AC16E5B
-20240104095748 2 6 100 2047 5 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686B23EC2F
-20240104095803 2 6 100 2047 2 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686B8C2C0B
-20240104095812 2 6 100 2047 5 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686BC90DD7
-20240104095816 2 6 100 2047 5 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686BE3B4F7
-20240104095818 2 6 100 2047 2 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686BEB2A0B
-20240104095834 2 6 100 2047 2 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686C601253
-20240104095837 2 6 100 2047 2 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686C747FFB
-20240104095900 2 6 100 2047 5 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686D2720BF
-20240104095904 2 6 100 2047 2 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686D3E5603
-20240104095908 2 6 100 2047 2 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686D5635F3
-20240104095917 2 6 100 2047 2 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686D92F173
-20240104095918 2 6 100 2047 5 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686D93EFD7
-20240104095920 2 6 100 2047 2 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686D9E4673
-20240104095934 2 6 100 2047 5 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686E020E77
-20240104095941 2 6 100 2047 2 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686E319F3B
-20240104095947 2 6 100 2047 5 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686E5EC05F
-20240104100001 2 6 100 2047 5 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686EC17C4F
-20240104100012 2 6 100 2047 5 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686F12137F
-20240104100026 2 6 100 2047 2 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686F73FAC3
-20240104100029 2 6 100 2047 5 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686F88A3FF
-20240104100038 2 6 100 2047 5 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686FC81D1F
-20240104100039 2 6 100 2047 2 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686FCD023B
-20240104100042 2 6 100 2047 5 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181686FDA5E8F
-20240104100056 2 6 100 2047 2 C383B937F2718D0CF93B36B8C4AA5B68E7B0E45E07100F8E40336B40B211BD1B4199CC92D5D03890022C8855239908B7348F8C76667368F8F73988568196B6308F9CCBB2571B9B88258C0DD717FB2ECB063B05BC2E36AE5EC2941E2D52133405B5DB9219C76B11764CAF1D73001036AB26ECE915DD4FE21251F01C19C415B0DA80231EE10410BEF198E0FE320E105844F537E2D6A45E77B0B16454931C30ED888D505641E5A4D07DD7937276ED988EB5DB7CC54C8CF5FF28FD39F4FBBC49AF7E023AE39396796A4736279495BC00EC89FE830A7C0BCDEFFDF910FD80F702078543CC2D1E53EB0F510EB9CBE78819B3E33BEA921612FCD755E4E181687044E3F3
-20240104100101 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB8C5E15E3
-20240104100123 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB8D074C03
-20240104100130 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB8D33D613
-20240104100141 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB8D811FD3
-20240104100145 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB8D99912B
-20240104100202 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB8E169543
-20240104100223 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB8EB0BA6B
-20240104100226 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB8EBF5F7B
-20240104100227 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB8EC40C1B
-20240104100242 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB8F2E1DF3
-20240104100245 2 6 100 2047 5 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB8F3C8C67
-20240104100254 2 6 100 2047 5 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB8F795C9F
-20240104100317 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB902632A3
-20240104100332 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB9096384B
-20240104100334 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB90A286C3
-20240104100336 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB90AA1ABB
-20240104100338 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB90B5380B
-20240104100344 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB90DAA413
-20240104100351 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB910CE893
-20240104100351 2 6 100 2047 5 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB910EBF0F
-20240104100416 2 6 100 2047 5 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB91C2935F
-20240104100422 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB91EE5C43
-20240104100433 2 6 100 2047 5 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB92428037
-20240104100436 2 6 100 2047 5 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB924F7E5F
-20240104100448 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB92A78E33
-20240104100452 2 6 100 2047 5 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB92C39FFF
-20240104100502 2 6 100 2047 5 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB930AB887
-20240104100511 2 6 100 2047 5 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB93484697
-20240104100513 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB934EE903
-20240104100521 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB93859FA3
-20240104100525 2 6 100 2047 5 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB93A15877
-20240104100532 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB93CEA42B
-20240104100536 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB93F09E33
-20240104100547 2 6 100 2047 2 EDE2897770950A39DDAC39B88173C52469FCA04AAD0665C1C1FA7059B7859FD1F84ED9C9510F7ECAAD251C174DB09975EAE851EE71A9BD0F83F6E2022723E66ECDE73BFB6D940A1A1D6112197BC1DE040CDD9D3A80BDA683679CB0705FA548878C8720CB14BDAFFF61AE546A8450B000EAC1DB6756C04E7FF65D2131A1015F741396395858BA490C0A65920817F114BD74FCBF1019BFD5E3C31E49CE523818113DB2097DB3CBFF4F5D6F323F72A084C54CD042FC053D378F458CC55088D170BF36539FAD7A019AF20491C29A95FBF036C1D18B8035BB10ABB5321DDD1201DAF890AE31F3B77451C1A8A927AEBA77613E4EBBB490414B19451446A3BB943E537B
-20240104101115 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53A0D5ED5B
-20240104101119 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53A0DC38D3
-20240104101145 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53A12CF7DB
-20240104101213 2 6 100 3071 5 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53A17CE1A7
-20240104101309 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53A21EA1DB
-20240104101404 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53A2CFD013
-20240104101448 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53A356C09B
-20240104101513 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53A3A06C1B
-20240104101532 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53A3DC6ACB
-20240104101754 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53A59D6073
-20240104101824 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53A5F889D3
-20240104101914 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53A69226F3
-20240104102026 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53A7778413
-20240104102104 2 6 100 3071 5 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53A7ED53AF
-20240104102111 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53A7FC79FB
-20240104102143 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53A85B8803
-20240104102252 2 6 100 3071 5 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53A938656F
-20240104102259 2 6 100 3071 5 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53A9493BAF
-20240104102310 2 6 100 3071 5 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53A967D647
-20240104102422 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53AA47EBC3
-20240104102451 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53AAA0B5EB
-20240104102523 2 6 100 3071 5 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53AB06D25F
-20240104102545 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53AB48A373
-20240104102701 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53AC38C9B3
-20240104102738 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53ACA7A56B
-20240104102808 2 6 100 3071 5 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53AD033D5F
-20240104102825 2 6 100 3071 5 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53AD32BE27
-20240104102848 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53AD75754B
-20240104102913 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53ADBBC7BB
-20240104102931 2 6 100 3071 5 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53ADF2C9AF
-20240104102936 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53ADFA97A3
-20240104103004 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53AE4E97A3
-20240104103054 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53AEE6F5A3
-20240104103136 2 6 100 3071 5 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53AF6C7D17
-20240104103155 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53AFA24993
-20240104103204 2 6 100 3071 5 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53AFBD89BF
-20240104103225 2 6 100 3071 5 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53AFFADD37
-20240104103441 2 6 100 3071 2 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53B1BE6E0B
-20240104103449 2 6 100 3071 5 E5200F78D0067C75B413BFE21DBBB301C8D14F8A46C0D16A957F5FD8708569CEFA51C549F9493C21ACE299A60AB6C8191EC47A356BBD2E41B9BDBC12486F1783F1FC3E559D29B4863898B5976E7108C391F1DD63B58F705109961D1577EDC807AFB96777476D1DD837AF21F81B6556EAB1BF0576552FF3304AABF72FFFC460E83982B3290C139E75D1628B2562B1A541D28551569C6336041CFCA45BAF9955EC7CE3364BBB9344C59BDFB346F1316F9D2538EDA32A6C4A018799ECB20FD383CC8191903B26FAE0F84FFF6FCB5E0D6CC50F25E7C2F4D05AC02BE22DF03781BDE9A5FC4951C4A20495E18B12111FCEB42F4B41CB9C6BE9E7FEBD2A224CFFB0028E2D22DA3A00CB48B2AFAB5287445B04ACFD65164EC97370FD89F2F04C2190D2AE9590CA2B88A4E946D1B62684D76AC39E291A201BF50BD9D521458AA9BA0F11416018F59D98DA058F5F4A67078AF968E51B193A74BE8486ABB1ACBD89A16D6F053B2FDB6D769195D2452E932719714E3474844AA606BD9D3186D4BB53B1D4228F
-20240104103608 2 6 100 3071 2 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F45F532253
-20240104103721 2 6 100 3071 5 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F46039F7FF
-20240104103727 2 6 100 3071 2 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F46046CF03
-20240104103902 2 6 100 3071 2 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F4616F9AE3
-20240104103918 2 6 100 3071 2 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F4619C6F1B
-20240104103932 2 6 100 3071 5 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F461C2094F
-20240104103959 2 6 100 3071 2 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F46210E24B
-20240104104005 2 6 100 3071 2 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F4621D6F93
-20240104104014 2 6 100 3071 2 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F4623557F3
-20240104104041 2 6 100 3071 2 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F46283FC03
-20240104104104 2 6 100 3071 2 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F462C76DF3
-20240104104124 2 6 100 3071 5 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F463010D2F
-20240104104145 2 6 100 3071 5 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F4633D54E7
-20240104104221 2 6 100 3071 2 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F463A5D183
-20240104104232 2 6 100 3071 5 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F463C2FF47
-20240104104250 2 6 100 3071 2 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F463F7D33B
-20240104104437 2 6 100 3071 5 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F4653512CF
-20240104104548 2 6 100 3071 5 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F4661420E7
-20240104104605 2 6 100 3071 2 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F466462DDB
-20240104104608 2 6 100 3071 5 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F466482167
-20240104104613 2 6 100 3071 5 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F46651DF9F
-20240104104619 2 6 100 3071 2 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F4665D3CD3
-20240104104654 2 6 100 3071 5 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F466C8206F
-20240104104716 2 6 100 3071 2 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F46706CDFB
-20240104104816 2 6 100 3071 2 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F467C6AC6B
-20240104104849 2 6 100 3071 2 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F4682E9853
-20240104104939 2 6 100 3071 2 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F468CD47B3
-20240104105103 2 6 100 3071 2 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F469DC1C53
-20240104105116 2 6 100 3071 5 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F469FD7CA7
-20240104105238 2 6 100 3071 2 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F46B04E72B
-20240104105406 2 6 100 3071 5 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F46C1C8F1F
-20240104105432 2 6 100 3071 5 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F46C69A60F
-20240104105538 2 6 100 3071 5 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F46D3431C7
-20240104105600 2 6 100 3071 5 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F46D7551CF
-20240104105623 2 6 100 3071 2 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F46DBA58FB
-20240104105913 2 6 100 3071 5 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F46FDA4817
-20240104105921 2 6 100 3071 5 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F46FEE672F
-20240104105938 2 6 100 3071 2 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F47022732B
-20240104110025 2 6 100 3071 5 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F470BAC72F
-20240104110044 2 6 100 3071 5 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F470F2A087
-20240104110057 2 6 100 3071 2 EDCE3D686B1FF9B87585480575F96A54B973EBC8E9330E7CA890624CE60311FFB65EBFB08E9B6D6184895C6C78238241D12F50B9178DD3F77DEAABB0BDF084F9B7713B72CE5ABD25BAEECBFEC06957BC92D74EBC234D87B255ACD94372785BAAE5362EDD5E75D025FB7E4B36A9636A8F65141BDA5E5789F4C09E6FEEF47B2F56CBB05002856A2A85F3E25A83808E1AE44578ACA4A3139792B971D452CD2DFEE48A28C1CA7616E4E06218D0062EEDD5622D6F1B84DE03DBEA72F97A907F8CEFBB102C54657127F646A4B2422CE2503341B18E2E1424755628F11EB7B9D8938C939586E3CE84CD5620BD2AE105E7D821D97FC85B92F00A72DC47450C258143E1A5C99E4E89AC94E0BB028C650D10BB9EAB68C9EA5D7C3BB2D139590572A8421C3AE1B440DB320A99A439E542FB79754BAEE30361B8E8519FD118E60D33FDB1FC20FCE9A275CAEC3F4605DC8E1CBDBA207951BEFDE24227F34A9788EDBF91E9088A5255165F27AC8DF63FB4FDCEDB43FAD4D3E0606A0F27DD50C41BD5F47113FA93
-20240104111235 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92ED6D5283
-20240104111516 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92EE6BFE0B
-20240104111802 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92EF69F083
-20240104111812 2 6 100 4095 5 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92EF7314EF
-20240104112330 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92F168359B
-20240104112346 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92F17A8473
-20240104112646 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92F293A44B
-20240104113126 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92F454A78B
-20240104113140 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92F463745B
-20240104113405 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92F5472E0B
-20240104113513 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92F5AB6593
-20240104113631 2 6 100 4095 5 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92F61DC737
-20240104113915 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92F71C183B
-20240104114114 2 6 100 4095 5 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92F7D25F1F
-20240104114127 2 6 100 4095 5 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92F7E2A817
-20240104114209 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92F81D6DE3
-20240104114242 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92F847E7F3
-20240104114540 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92F95BB83B
-20240104114912 2 6 100 4095 5 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92FAA7AC87
-20240104115220 2 6 100 4095 5 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92FBDD46BF
-20240104115358 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92FC763BD3
-20240104115645 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92FD89AC93
-20240104115825 2 6 100 4095 5 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92FE24086F
-20240104120004 2 6 100 4095 5 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D92FEB1B48F
-20240104121351 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D9303DEC3DB
-20240104121632 2 6 100 4095 5 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D9304D97987
-20240104121655 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D9304F7758B
-20240104121904 2 6 100 4095 5 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D9305BB0867
-20240104122020 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D93062D0873
-20240104122033 2 6 100 4095 5 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D93063AE3CF
-20240104122233 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D9306EE09FB
-20240104122350 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D930763399B
-20240104122643 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D93086CF9BB
-20240104122651 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D9308730BA3
-20240104122926 2 6 100 4095 5 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D930966BF1F
-20240104123326 2 6 100 4095 5 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D930ADB4A27
-20240104123447 2 6 100 4095 2 EEB25F20046DA7CBAC47745F4C0F4B81D854E699C4761A4175478874F20DBA865A392640F8B584C4B9B4B1731A946DF7A57CD37B61BE3964194F06CA3A67C34B26DD2BBF3028F0239D0D947FD9A2AA9B38374FDE72528B7FA745F09DB9C1BCE23028F9EC17D19F25F088E0242B5F3554541185A9A16858D1553CCB603778B07887190A898727269B4228247FB3CE1AEA89ADFB3D11710243C05FA76BC3556B980B039126B0DA69D1FE928F77A4F7920A1AD89BCBF2B78B7D602BB7AF9C16F0E208C0C7500F6DCA222680C786E43DBFC1003AA1977EE65498C5245F14D66BB690B6786EF3AC4E3422C10C8D016EBFA509F8E68E378E1C4910400FF13C318C1072C0AEA5864E211D088A7F13B6FCBABFCB2D006C7E5F22D149078964A87C31FA80A570DB73D00B178CC34D4A5BEFAA270EA30F80184F4FF98E1E0A6CB45474DEA9381A8871519EF3C1BF1F68378D8DE6D11966D14EEC08EC96A656E677A35B415D56711D16FF912CD2A30DCCE1CBB648437D82A73BFCBD4CA25DA1CCAF9F49646FA5F420C3F6CEE4A5A19DF750E9842B460025EEDFDF208622435D0205916B75EDB72050CDE2B51F9C37DD99987C8957FE46DBDD97CE5BACF1A0CD04FD82309BE29809714DE6F0BCCD73B9EF1BCEBE57A7DED76A1BD19F2237704CE93EF30725CEA5E4EFE122A782E53E6474D5A7AFFC75F1D4E4CF2035E3DA53BF7D930B505B73
-20240104123558 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CE029B533
-20240104123620 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CE047224B
-20240104123807 2 6 100 4095 5 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CE0EBCB87
-20240104124250 2 6 100 4095 5 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CE2B0F0D7
-20240104124501 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CE36ED43B
-20240104124512 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CE378775B
-20240104125156 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CE5F9437B
-20240104125510 2 6 100 4095 5 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CE723ADDF
-20240104125525 2 6 100 4095 5 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CE7329FCF
-20240104125540 2 6 100 4095 5 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CE7439817
-20240104125851 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CE86AB4DB
-20240104125907 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CE87B66BB
-20240104125924 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CE88F2753
-20240104130222 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CE9A5226B
-20240104130442 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CEA7DB5B3
-20240104130643 2 6 100 4095 5 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CEB398DAF
-20240104130657 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CEB479503
-20240104131100 2 6 100 4095 5 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CECD07E8F
-20240104131128 2 6 100 4095 5 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CECF457BF
-20240104131223 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CED437003
-20240104131543 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CEE787A6B
-20240104131552 2 6 100 4095 5 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CEE7EE587
-20240104131707 2 6 100 4095 5 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CEEF11B57
-20240104131858 2 6 100 4095 5 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CEFA09947
-20240104132135 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CF0963173
-20240104132305 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CF11E122B
-20240104132442 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CF1B47BA3
-20240104132621 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CF244368B
-20240104132834 2 6 100 4095 5 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CF3139187
-20240104133205 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CF455DA5B
-20240104133257 2 6 100 4095 5 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CF49FB7F7
-20240104133331 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CF4CF5FFB
-20240104133444 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CF5392DAB
-20240104133611 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CF5BB213B
-20240104133702 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CF609579B
-20240104133750 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CF64F4693
-20240104133858 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CF6B0B2B3
-20240104134528 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CF9174353
-20240104134709 2 6 100 4095 5 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CF9A9D48F
-20240104134725 2 6 100 4095 5 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CF9B8ECEF
-20240104135017 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CFAC6EE33
-20240104135028 2 6 100 4095 5 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CFACF7567
-20240104135526 2 6 100 4095 5 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CFC9FDEEF
-20240104135617 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CFCE8DB8B
-20240104135643 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CFD0D1E7B
-20240104135715 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CFD3993D3
-20240104135931 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CFE0D249B
-20240104135940 2 6 100 4095 2 E8BBED0B2C20CE2D6D7C175858DF5007987AB4AC62559BFE502866F4BA984F41EC586A62B79DE81B818784CE66B4EF6EE06BE7C4242BE2A6DFA5D218E9D073A4162F0B05A1381AFCA6A27565DDD36D1EEF0812AA0CC37C3FEBA6CD728F8DD8FBBF5FF2C25C2D5F456EBF9EA83D6593AC7121E157F17101AE85DAC1B747A915C52159948A190454DBED5F7016F43D3F3BC2C496D6DE2A5DF17872B59789A4E5F503C4F1F096A3A9DCD1CA53D5CE88F6C00959DF042577D064467F375AAB350DCF6427078FAC4DB76E56A80A8AC4E3F276A2DC2E51DDB75F921B2F7A3C51D957B8A89F806FBD5879741438194AF82FC33DE8B5AF6D6D63A750DC1BC18A063CF6A824276A8F2447707DD110425B3644C19E3BAC8FC4686629D90101340691D026B8184EC4872FAC2A658FB8A4BBE5DF9B2A8A17D675FC9EEA09D12A8C8D7914712D21032FA35B056A95C60DB9F464EB15EC04C5CE8958A8CCE7600A207432BD6DBBDAC099DB42A6FAB7297FF7CDD77A80A245A16A9B01FF00442F0259EDB26BFD04BBF58E8CCD98C762BD1BFCF840398A5DF817F7632AEF5C1C9E9FFF766474308918E5D309DD318D0BACD2A75612BFE40FFCD6C14B55A96072C3FFC5F10DE4A3FF9D0DFCEE2EF21517D3095552873C9C875FF91E4518545D595B02B69D3E0CCC370270A0356F4CB3F7E0177557AD5AD730955DA0203EDDC3C19DE9D73CFE126753
-20240104142106 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A1710332DCB
-20240104143451 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A1711E1C253
-20240104150313 2 6 100 6143 5 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A17156243B7
-20240104150556 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A1715B0C103
-20240104150825 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A1715F7F803
-20240104152907 2 6 100 6143 5 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A171886D57F
-20240104154312 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A171A440F23
-20240104154730 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A171AC37183
-20240104155021 2 6 100 6143 5 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A171B12B0DF
-20240104155636 2 6 100 6143 5 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A171BCE9CAF
-20240104160727 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A171D1EA6C3
-20240104162058 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A171ECBF4F3
-20240104163450 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A1720828973
-20240104170537 2 6 100 6143 5 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A17246219FF
-20240104173739 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A17286C63FB
-20240104180227 2 6 100 6143 5 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A172B8A314F
-20240104181102 2 6 100 6143 5 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A172C9D0567
-20240104181529 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A172D236A93
-20240104184018 2 6 100 6143 5 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A1730435B07
-20240104184554 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A1730F0EAAB
-20240104185310 2 6 100 6143 5 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A1731CD5F77
-20240104185350 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A1731DAA9B3
-20240104190334 2 6 100 6143 5 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A173307F9A7
-20240104191938 2 6 100 6143 5 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A17350588AF
-20240104192635 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A1735DAA9A3
-20240104193532 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A1736F11283
-20240104193805 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A17373C750B
-20240104195916 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A1739EBDD33
-20240104200312 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A173A6430BB
-20240104200754 2 6 100 6143 5 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A173AF2A68F
-20240104202320 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A173CDDF643
-20240104203508 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A173E54E6E3
-20240104204338 2 6 100 6143 5 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A173F5E5ABF
-20240104205043 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A174019A1B3
-20240104210231 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A174197571B
-20240104215505 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A1748451A43
-20240104222200 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A174BA0BE73
-20240104223343 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A174D1343FB
-20240104223558 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A174D50F24B
-20240104223657 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A174D65D7C3
-20240104230313 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A1750A0115B
-20240104232200 2 6 100 6143 5 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A1752FC1F4F
-20240104232649 2 6 100 6143 5 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A17538FC137
-20240104233816 2 6 100 6143 2 E26B3DF44B6BDB283DD87C8FCFB841E7116C771B87651254D58C3ED54FCF6E041E04B189F53C0AAA9838EADA85D258A70516CAFE7752EB065542E89F25CFD74BEAC3A0B1EDC79D677137E229915D5E7F9AEC2386582B4E069651943CAFE738A6A435BF75D91B4ED92D571B74DB636A155162D8E43D2B3889E09241842FCEF7FF9841E69942817C72C20A23B015F781AC740D1FC7CC9CCBF98D8C92CAB153F8CE24E540A2325E9769AD8F4B6DE329919F797259B691DFF2FA06BAB66E11E5BB5556D8BADFE3F6B41EA905FBB17A7D602ACDFB98BD2F7F80204329121D3607C64547FE04E34A9F6C14F6BA70ECC6929880A305B6C647F4D1E3B4257FD60666C9FDA9E44F5A3C76818054A2BE034C80F7756854B8AC3694412A8632F10F794AD16EFC696C2B792A906F7E8B9B99086DB52C3BC1436B1D8B91489C1D7B910204DE03F8D837989BB65C1C69E35E5F3EFB61F79EE8877880ECA82F1A1CC886E4FC72EB5AB28A77584C11B8D26BA67F1E07AFCB19F478AE21E71A1A48E9ECC05388B7AE6D053EAB219F659D6353412261BE121E30F35CFB527FCFFB9EDA780CE6B3AABC281018EF7ED7612AF8E877496C8008229786D2656FC13028BA3AE818BEBCF5089ECC8C7E91CC8866838BCB4F605EC8C3CB236523C1F3FE67C63AD9E3C03AA7A8ECC2C78749FE2CBB046812E823750EB78124A61932972AEB7573BB7D3DC47597883C0B4DADD75E1D4752C08DECF2345B9A2DB5655CBF056843DC655FE0EE540E0A80BD113BCA208DC60C30A98ED742B262126D304A51D763A83F6FC09113F6DDF3583AAB10A6D16856900D1F0E0B61214DBAB00C353ED0A7D9B3E02A5D4E0EBAA6974408F4277F7C191CE9A7941FEBB456A38C6841CA5124D6B23373F97C6428D7BA96F4722B8110DE4078C3570E663039BE9B7B20C90474FE759C9391CFA635EC3D89CE491318DA89877CE31782F10F053F46DED6864FE28970C605E0B1C5D4BFAFD961DFBAC5EC123626D9B55592713918CC21A1A522FDD0C407E42532022DBE030A844C8008E184DDE76EA3F8B6333BCC27F23BA58170CE691A1754FE4CC3
-20240104235816 2 6 100 6143 5 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E526A4027
-20240105000102 2 6 100 6143 5 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E52B9D47F
-20240105000341 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E5307C49B
-20240105002604 2 6 100 6143 5 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E55C8951F
-20240105005413 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E594FDC6B
-20240105011251 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E5BA98A8B
-20240105013007 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E5DCD786B
-20240105013213 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E5E08D3E3
-20240105013953 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E5EF3AD33
-20240105014506 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E5F8EAA8B
-20240105014846 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E5FFDD18B
-20240105014953 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E601A78EB
-20240105015628 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E60E96A33
-20240105020424 2 6 100 6143 5 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E61E408CF
-20240105020757 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E6251DED3
-20240105022925 2 6 100 6143 5 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E64FD3CDF
-20240105024930 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E677F3A93
-20240105040144 2 6 100 6143 5 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E7077E4E7
-20240105040715 2 6 100 6143 5 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E7125CD47
-20240105041838 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E7292290B
-20240105043220 2 6 100 6143 5 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E7445EA7F
-20240105045717 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E775FC3E3
-20240105050855 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E78C836D3
-20240105051736 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E79DB2663
-20240105053034 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E7B7AF41B
-20240105053602 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E7C2244FB
-20240105055132 2 6 100 6143 5 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E7E0B5887
-20240105060142 2 6 100 6143 5 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E7F4B55DF
-20240105062354 2 6 100 6143 5 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E820CC287
-20240105062720 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E827312A3
-20240105070333 2 6 100 6143 5 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E87007257
-20240105070659 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E8765266B
-20240105070824 2 6 100 6143 5 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E8788941F
-20240105071340 2 6 100 6143 5 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E882B5647
-20240105073012 2 6 100 6143 5 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E8A3A1757
-20240105073438 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E8ABFBF6B
-20240105074101 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E8B83EBE3
-20240105075449 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E8D2D8B0B
-20240105075939 2 6 100 6143 5 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E8DC91A67
-20240105083505 2 6 100 6143 5 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E9233F247
-20240105091527 2 6 100 6143 2 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E97244C43
-20240105092237 2 6 100 6143 5 FF5C5D46851A712217A7872DC20FF08EDD8DAF1F5041D8E35C2889494C9D8EE9313A8425B2DF8ACE596A9B3044564D2DF404370C9F2B819E5E3F75FCD6A119BC357B24671D1F6221E94DADF4BBA056785FA323E6BCD416DD8A11799D997E73C6A32602F35592F31456FDF05CE5BECC9D233D607E6A6E1341CDE092E04376B35A81668315141B9F3EB5DB7D28A92A85F8175087FF4582636A29EBC0C14C1F8664BDFC4B1C3A5B405D240E0A67B81D3E8D366DCCF8649FFFACC530FEB87866AF3E765E9C8B7B19EAE109BD9BDB184137C7218AF8FF1E36BDE8FD9AFF4E4E29E9497A5104502CBE8A3A01A0D4C65C605A81EE3C3AF59DAD4AE4062201FD1F0AE0CC8FDE86625B1209EDE36FD81D573BA35A1153F6273C3F5DDEEC3E14BB20F6392E937FB2C11005B762FB8E5A61348AAF6374EC3F3A27498B5CCECD5447F7837C21D9EA418E689AD518778A3B4D70CB8CCE215CF5407CA93A882B8463F3311DC1757EF00554FD187F7A286D03AC715FC2CBABC7A00037D91EDF450DC6A515D2866D71555AD4073A87A5488F804A391890A48B2C8E8BD5AF53C97AA9505166788A216634B62DE3376E88621A47E5DA1A783B56C3D738473E9D751CC570F7EC94B8D76A9350CAA57D25F8621A6CB03B68A2E01D9FBD508E8C91CB8859544490936D5FCF198F3E5ADDD2C0DB756B3A94D9C357779C1867265F7CBE9EC00F726E683537DE973E59C7ACD928FA91AB996906D8FB6DBE6F1708913008D08180A3DE71AF098A481400BB5284B02B360080118163B2E19BEF45E51AD3A02D34E92B369C227355EE5BD6316E07991B211A87ED8F36FE5337C6969F4B0BC9FF626C5468F88D49B5A0BE005DC89E0AF7285710E14FC683FD9A99AC86749D8E1FF0BAC1CCB6D734BEFCBBA90F7F0D195860915578661F213012FB2C7F68C0E49D154B9D153D62C8C95084172A395F8E228688CE70226CA41435EB903E3EAAC6695BCE4E6AF36C63D387070D12009BE2B9ECAC9540896DCE83A4AAA6FF6F4ED14A169BC17A20B8AD165997536F55B7590483878B806458FAADC4AC60AE4326251A153B3E97FEE79F
-20240105095913 2 6 100 7679 2 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E29046217ABB
-20240105101403 2 6 100 7679 2 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E290471B744B
-20240105104919 2 6 100 7679 5 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E2904974A54F
-20240105113526 2 6 100 7679 2 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E2904C8FD633
-20240105121046 2 6 100 7679 5 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E2904ED8847F
-20240105122212 2 6 100 7679 5 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E2904F9A37C7
-20240105154705 2 6 100 7679 2 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E2905D2EA893
-20240105162329 2 6 100 7679 2 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E2905F97BD13
-20240105164947 2 6 100 7679 2 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E290615186EB
-20240105183728 2 6 100 7679 5 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E290687AC4D7
-20240105184151 2 6 100 7679 2 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E29068C000E3
-20240105202016 2 6 100 7679 5 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E2906F571D5F
-20240105214209 2 6 100 7679 2 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E29074DB94EB
-20240105224349 2 6 100 7679 2 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E29078F088AB
-20240105224824 2 6 100 7679 5 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E2907938DD5F
-20240106020909 2 6 100 7679 5 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E290869AA027
-20240106021855 2 6 100 7679 5 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E290874189E7
-20240106035257 2 6 100 7679 5 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E2908D8EE727
-20240106044018 2 6 100 7679 2 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E29090CAEA63
-20240106044946 2 6 100 7679 5 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E2909163261F
-20240106045528 2 6 100 7679 2 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E29091B93073
-20240106050848 2 6 100 7679 2 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E2909297B81B
-20240106092208 2 6 100 7679 5 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E290A3BCF3C7
-20240106101059 2 6 100 7679 2 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E290A7091163
-20240106101802 2 6 100 7679 2 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E290A77D0A0B
-20240106104846 2 6 100 7679 5 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E290A989844F
-20240106110203 2 6 100 7679 5 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E290AA67622F
-20240106113157 2 6 100 7679 2 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E290AC6FC52B
-20240106115438 2 6 100 7679 2 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E290ADE815A3
-20240106133228 2 6 100 7679 2 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E290B48CC803
-20240106133609 2 6 100 7679 5 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E290B4C4DBCF
-20240106134717 2 6 100 7679 2 D1501303160348FD3A7B93C0412E414592732D1C3780B7CEEAD4867A47FC4E561D607B47D1B05E93FAD668BBBB5F21CD009E5D3C9D7870A3FC811AA616A4F50A5F8A73DA799E4E2959006D1FD23D3DA241E8F5F7674904B56058A95AE30B7EB8ED4977C93E6C3460E0A4421B1BC044A93F71B8FB60C7EFE4B4C41454FF7BD38D5447AF6AE20D826D8244F9396EF549DFF6138BAE6BDFD3B1F2E1125365761CE905827D63F39605B703FF39EDA7A239D553012FAF6C33A327A4447868A9321D30ACE8F0DA43427BF73595D41C089F2F817245FCC4B38AE3DCDBD73C2F82386E53EE9BD4850754E21060B0688EC27CDC2045216E1FA70770F420230D8923361C30F10340A1715B1F642DCD397A5A3BA28C59B3F29818B896D45DD6B12F34BF69303048DB6A8DAF68F3DE4E9CB902C56D511578873A30869642961B242625FA41B5059ED0C9098DA1FC8EE928B6E5429EAFBEE721D5BAD923B35046CC09E85E1894FD0DEA671DBD5DC2FD42CD8FD2E52379544212ADE9F755712515AF31F47372F6DF80C9DAFF562542B7E26F32E373C5C83222FA83356071175C44F639B2711C7B3F74063CD8FDE5ED9E25BA806F4BE2504C339F03A1B9ABE0979D181A7F71624E2AB1DF6945C5FB419727BABFD9755A8019DAF7607273B57C7B9A802928D6C3B377E621988F6DBAA6FE322F14210244C1C3EDDF104F73D57A661F8CBF117D405A18E1B176A705049BD696244109AB272F4C5352C456D4C04D2A6001E1626E6E038F48093B3EF619B7BA9002A7E64BEFCCA297D71D08EF1C0E99962B55EF85CCD2F111F51AEEAD99C3085BC9AA936D1A55F5204281860E33EA6ACCC22CBFD6A1AD086E44B43E0E445B22F0A7222EC3417619461BB69E27B1A931EEECECA667DDF6A7AB24B3F369337F261A99DA78B55FB24FFFF315FA48882D70446E617F7804E8A743AAC7CA0A1F4FB3C31E37E0D51A6EC1E923C110763047E9AD04B1A321A3E3993D7A4C688DED76FB6B907D80DB3DB89589B98ECE42059630FE74FE945B0A92888B9D3566CC0384DDCD92C4B0455D7B5DD39E0A0DFED6C96A7C4B5095A231E67E8AF3D70742F37A4DEC85B0E060D7F304778062F0F4C3CE4019DEF66484000A0A79243EFFA5927813B30B915F454CD87A13B0B0403E65970194C98F042F26C25462D0F749B5255A5AC0D294DE30DDAFC1AEA00C7D280555003FD4C32C5C9987405CA4728104E469487794B3616BABA85B09A7369B8530FA565D2B04736386AD8938B8CEDAC0B1B9FE073B21B4D402BDFCE7AF4F8F69FD6695A013424FC8484AABAA19BDDFB74E1935EB972C6D6C0CA9E9A3C07333788552B446E290B5751C53
-20240106141837 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7DEE2E4EE3
-20240106142436 2 6 100 7679 5 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7DEE8A7CD7
-20240106144829 2 6 100 7679 5 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7DF015742F
-20240106152038 2 6 100 7679 5 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7DF234DAA7
-20240106160105 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7DF4EFC613
-20240106163121 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7DF6F6E203
-20240106163448 2 6 100 7679 5 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7DF72A0C27
-20240106170007 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7DF8E1C203
-20240106175041 2 6 100 7679 5 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7DFC3E7E5F
-20240106184134 2 6 100 7679 5 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7DFFA55BB7
-20240106194104 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E03A6612B
-20240106201237 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E05C48B9B
-20240106203135 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E070747CB
-20240106215140 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E0C7B892B
-20240106225612 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E10CEF363
-20240107002641 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E16E9D69B
-20240107012956 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E1B324EEB
-20240107014336 2 6 100 7679 5 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E1C0FDB2F
-20240107015412 2 6 100 7679 5 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E1CC29D5F
-20240107023117 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E1F39A223
-20240107024430 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E20145813
-20240107030408 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E2165D633
-20240107032720 2 6 100 7679 5 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E22F0D6AF
-20240107045444 2 6 100 7679 5 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E28D2CA07
-20240107052034 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E2A83AF4B
-20240107055000 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E2C7678F3
-20240107064332 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E3017D303
-20240107070345 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E316A269B
-20240107071248 2 6 100 7679 5 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E31F72497
-20240107073413 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E3368806B
-20240107075627 2 6 100 7679 5 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E34E626DF
-20240107092923 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E3B1B9373
-20240107105443 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E40D41C83
-20240107120213 2 6 100 7679 5 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E4560E6C7
-20240107121141 2 6 100 7679 5 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E45F89EEF
-20240107121703 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E464C599B
-20240107132926 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E4B161313
-20240107142507 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E4ECFD6B3
-20240107151843 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E5258293B
-20240107153743 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E539E84FB
-20240107160830 2 6 100 7679 5 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E55AB3C8F
-20240107163047 2 6 100 7679 2 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E571F6DD3
-20240107170058 2 6 100 7679 5 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E591D8A17
-20240107174158 2 6 100 7679 5 ECDBC2E7C98E3D4FEABA99C3FA3EEAAC6305023D95B895C4019BFC22601AB5F9D51E3CFC909E5B963B2C52654C150DECAEDA6D0397EB54F1DA714D70920CF4054E02B5CD515C51FCA359DC1733120FAA30541BC2707C9FA7B973464558F6A7119E9ACC9F0A62729B41A2CF697EBA9E646627E8DB08E967447517B31844C347B02576F9E8E9B80FBE14E5C1D42D5CA233644FA7652130878CCF740A59F20835B21FFBDB2B1EDE638AF89D50A3EE7E31E37DD712FD021DB31EDAE2981299034B6C0E4F99E40D4D8E179F384931DAC81A266507E586A01C60BBE107F6896ED9DF8F8CC7E4E50EEC3EAE34B00817FF531413A27B3F8DFFCBC297043E769DDF8CE267AE314F9CBEBEFBC43D46DCAA1948E1626094CF1D7109AABBF971D76CC4C8F8FEEB211BC7DA3748B0341C39126FF72497F6D0B4800CD8D47A1C64565C752ABD83B4B013CEE0547BE9EFC0C806F9B9318F5B2E34573E912A9A18A3778F82978BF2AB2ABCE38BF82F77A1FB15D6675BB0F881E2963686E2AF1842085AEFAF65DF160260D788DE8F1D955D89B70693E70F58EFE6E3B1C8C3852031BB44A17905DD9F083BFD8A8A4F08E1CDE8434B0CC84E9F119C0D56012FFB5854E3C427EC034E085733B77E072FE074714AEF51D8378774BCB2E7A38BD8FDED53AF1D086A508D90A2FE7AE66247BC4A476C9462FECD4EDF39147267EBAEFD44FA45E2E55B320E912CA67ECA0A768BC573B2639F3DC4D36CA747008A0B4EF891422F66123072F66753B5594981EBEC23CE739971AF90DB0822B1C312DD916395CAE325ABB2AD544C84C79C645095DF9BDD20FE6499B6999E471E85AA2012F38927A5B3AB17AA10956C240D9BB1151E6E83700C3759D74C463B56D5D215B812A5A5BA859B4237EF0E23D6C086A9A25A6ACCD2B830F64F677F83531CA0FDCEAAF65B96EF4C9772C73D4627BEAE8645ED34404F8A2F4FAB1FF4F56E28C5CA1D9AA227FD95DF5113FD07200E3D10065FA337160E544D0027C0A82B049204BA0A544B5E32B3F08B76404A85E2927630EC0324A50632657543A72E481F5418B1CB45B1DB93AA66539FF4A0120599F87705284BC1AB03EDD8FCFC9C0C2C4BD58276C1D4AC3680B05CED61B91AE9791140655A229D776900DB47379B99EF8ABF851E2F61099BF43F6870E1EF5D03CAC45D00F6927601241AC087C235098CEC4AFDC9DA8586108517F7D4D761D1FEA18110825E5EE903ED3562BF5E12A2C2A3B295553D3948A1B1F28B6B0F7D9C94D9AD634105D2A8BCE8E7C93FBF9CE2DD73047F6E1B616188375F94B3CDDC878B69C4FD9D918ED35FE45659093974E46247F09B8D3C23DAB5DA7E5BDEE42F
-20240107195132 2 6 100 8191 2 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C0BF412DB
-20240107211121 2 6 100 8191 2 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C106F1A93
-20240107220224 2 6 100 8191 5 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C1347F0E7
-20240107223011 2 6 100 8191 5 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C14CC844F
-20240107233406 2 6 100 8191 2 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C185DAE33
-20240108000524 2 6 100 8191 5 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C1A253E97
-20240108013639 2 6 100 8191 2 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C1D6DA233
-20240108015050 2 6 100 8191 2 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C1E2A0393
-20240108022016 2 6 100 8191 2 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C1FCAB623
-20240108033300 2 6 100 8191 2 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C23A9F963
-20240108082339 2 6 100 8191 2 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C33AB6633
-20240108085755 2 6 100 8191 2 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C3584E623
-20240108101256 2 6 100 8191 5 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C399FD6BF
-20240108142359 2 6 100 8191 2 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C47985243
-20240108150338 2 6 100 8191 2 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C49B5DE8B
-20240108163222 2 6 100 8191 5 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C4E9B7AD7
-20240108194900 2 6 100 8191 5 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C599C1087
-20240108204036 2 6 100 8191 2 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C5C81D16B
-20240108211124 2 6 100 8191 2 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C5E307A1B
-20240109020016 2 6 100 8191 5 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C6E22534F
-20240109031529 2 6 100 8191 2 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C7259083B
-20240109032856 2 6 100 8191 5 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C73148B47
-20240109034303 2 6 100 8191 2 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C73DA772B
-20240109040437 2 6 100 8191 2 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C7507EF03
-20240109045950 2 6 100 8191 2 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C7828D92B
-20240109064936 2 6 100 8191 2 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C7E67E273
-20240109084815 2 6 100 8191 5 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C850D9B77
-20240109091115 2 6 100 8191 2 F601EC0972F67ADD6AA2031ABBAE6FAF062C5AD1619D32B18D43DB10D9B5E0A5E2F69321C963175289C7B809575F1CA9B1C51D14BDDFB5B9F825EB4F2890D9C5C0D6D03B42ED03B16816DA4213187289FC4F2C51710DF07506C50B2D0BD47A1D5EEF8832D8D62CE93BE30646F7EAAB30AD4C172C1F0162FDF61299C3EB1EB91AC76D9219DD0608C0640E080887E6BC4F076CFA6CAD2C64B5E2BA2803B13A34F28923897E861DF14CA58848A773F0B348788F6034F3AFAE3798DCDB196172229F7D9ED45857917411A1F4A79119F544B45CDC2F0D7CC8381BC31DF229A72CF03D150E016B3CA95D803B42463FAB8382B389A1B3FF4E76F2B4025E0872D28F9F4E356B9C967EE4230BB3AA8629626C12DD66282B0E2979F428F89131BECD4FEF45E028BEBBD3CA638F71F8832B7552212BBE1C1A2F213DC579E227285D6B1511303F6905A492CC08BE2361EA5E46A66E0633D35819FAF6B7DA7C9BBA485E2813D0122ADCFAEB5C2991AFFF76A7A746CCC4F9A40DAA3870FD943E92F3BD8F65CFA997A3635EE9F3BBB3D4E229AAA64F6F53C56F02E65DB06ACD2182FB013FB2E33EF6D8D2A40C9EE3885D7322B4F87F2EBEA0A799EF949BD7CE9657CBD7FD75485F7B68839167FE40F20C796B4CFA42FAC5593BFDA46FA6E416BC688D33426B0644BABC0E52CBA377CD0A3CC0D159A7B003F3BEEB9405B160D55264F7A31A52A9A4C7A1576494BC994925D574DF813CFB2C0DFA6B92B8EA6036B2D4CD5E54109F722C3F75690F3295EEE4CE512612711B1E59A0600701A8AA90D4FB6604B765E0AECB664F2318B556A2C1645865E1CD30CF50FFD2F6A8BA3D1642DEDD67F3E1B0516205F5EDC25FB21217666A1690DED31BD0020B6F7706C9E499EE23B2BF9265E43C23CEE5CA5F9B70ABBC437E8FBBD0295E639FB4858A99A85DDA4B3058145F7D2081A869C3D8A775DBB3FA66DE5FD1DD8278E7627891B845CC8B2918DD8FC21112F3D1AE4EA375AEC71F95A0C02251489CFDFC40272F8BF3C04469E5FB196C18081E94EB56731AC5EB40E5476B3D8743E69BDD7316C9ECEF9FE30FBABA7B4483CABFE9BF91F3BC536F022DAC1FE2A3E5090924CC23EC793A45DC9BF88384CA6152A82903C107517D3252E3067A2AF52E24A3B0A9B7A1CB9F8FAC05C8CAD0729A270432A437A5417CED21A7BC11086437A104C05D542E5BC3E106DCF2772FAE6A90E3FDC1F3397C3E0A16630EAC1F02302407B453C4B2956FB8BDACBD8DB142ACFBFC8345F339E89B8103D2C5AB252BAB6B78BDD869F2A0FC7A9ABD2F4E5DF78E4A13EEC2DCF0B90FCA6CE7E255E95CD5B2CC59855FD7509B6C8080ABBB205F01186E25EA88DEB918EBCD5D62D3008DC8E93A4C31C379A388FD58E92E0E1308D30D66DEFF4C02C46FAB280FC61FA205B7A7D074582D40BF4B5EE4B87C86562483
-20240109102754 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB3113DE49B
-20240109103838 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB311CE7D53
-20240109122733 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB31802BDDB
-20240109144019 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB31F830A13
-20240109151803 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB3218C2C43
-20240109172004 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB32877BA83
-20240109173200 2 6 100 8191 5 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB3291AFE77
-20240109175727 2 6 100 8191 5 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB32A87A0F7
-20240109190851 2 6 100 8191 5 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB32E84D477
-20240109232421 2 6 100 8191 5 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB33CD99FDF
-20240110000155 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB33EF7933B
-20240110004723 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB3417961D3
-20240110033004 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB34A9B46AB
-20240110044250 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB34EAF64AB
-20240110053016 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB3514D538B
-20240110060245 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB3532513EB
-20240110065303 2 6 100 8191 5 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB355F0E0D7
-20240110065533 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB3560D1433
-20240110075227 2 6 100 8191 5 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB359366F87
-20240110100015 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB3604C809B
-20240110104106 2 6 100 8191 5 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB36298E677
-20240110104740 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB362EE1733
-20240110111504 2 6 100 8191 5 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB3646C34FF
-20240110112023 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB364B02F03
-20240110115553 2 6 100 8191 5 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB366AD1CA7
-20240110120601 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB367384E6B
-20240110130930 2 6 100 8191 5 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB36ACD8457
-20240110133324 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB36C204A5B
-20240110144137 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB36FE62043
-20240110150954 2 6 100 8191 5 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB37171A81F
-20240110152353 2 6 100 8191 5 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB3722EE947
-20240110152557 2 6 100 8191 5 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB37242E447
-20240110152925 2 6 100 8191 5 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB3726B351F
-20240110161518 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB3750124BB
-20240110163930 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB37655D503
-20240110171223 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB3782C4503
-20240110173427 2 6 100 8191 5 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB3795E162F
-20240110184239 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB37D2F5503
-20240110194145 2 6 100 8191 5 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB3807A121F
-20240110194314 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB38088267B
-20240110200018 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB381776C63
-20240110211339 2 6 100 8191 5 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB385922C6F
-20240110230519 2 6 100 8191 2 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB38BF1EC13
-20240110230904 2 6 100 8191 5 F7D2DED9D5BF8F08F6729427B4FA345B673D55A16502D2B438B068D893B7FD078638BFC485EE380DA4F972F1E2D28F9DE0C9D32CFECE54C8FFACDFB01EF0CFEAF7E644667DAE998AC4E387CBB3D7A5E4CC822EAC7D515E6FFC76DF221FCF9C75B443A10C349D01D7B0EDE446DB84A638E4BB390362E25201D2B3766FAB1C154B24827C9DD3F26018960AD84D599FB5F0090E321AD891DBB94B9E755CE54B3A99BE00CE2CBA594205B28F277FB3205A531709AC7753EC2C38CEF555715CC56FD88780779CDFED96E1300F705E6426C9420275C5CFF3A5CEA59FCC57EF776B98DB7B23C1CE34F6097E778B6DA4AE5593C3827DF62AE582738497F51A089E30DCC44FADD4200A72DD9C11E645C56085678687ED0BD12E6C862EC0BA0FBEC9B5677534D83335C5550B6A04C6D52189E396CDFAD25D56344300D17DEEF76FA106741EA0A164EF404EBD6EE03ED514D3E0443B8C30535114CE68B8507B9C3F7F942E1E4A86AABDB9DF0D688842E9AB8508146E08F974FDB3D7E07DC7610FC4BB3259FB2F1FB9142B77640715690A53E6B9E1CB43F270CE35A585BD6BD5F8E7415C27273F0B6C040D4F293C71FFAED61319DAF9FAAD3BE65671657B7A3C1F115CE315A3C329DF25DA1C3CC8EEA18AC8BCDCF1E965B573FC5B194AF79F04FE7B3E28347EB73F12F19B87548D9A34DE6820D78D5490F93B126A0ECB6696E32E917EC922BB27BC3DED89EF206AE1917F74B4C642043C54F77AC8B9273CC68BE4A1131E634263057E10C97C866934AE984D8D4D2FDDF833AB58AAB209A193D0E6AEDDB70A8E6AD7DB2090412118687DF9817B1D81D00C64925A4995F19368813CCFC1D13BAD28B8C449A71FA42CEFFB1251D7CBC01875C80ED21FF370638E4EBE5CC4EA7674B24599826390C84DA1F292E7B989E838F047ABE7A075E357D90068037E886ADB9A869E0C62513A7E0B90231AA40AA8F96A5A795482410EB3FEA4D1CC5549CD50FF2B2AA5A42DB4366B3CABF54EE92B830D8EE77293A03E436A637CFCA3FE7CF60B662FFDD8C72516C2F2370978BC2DEF32D88FB55801D1E22878C8C86B7DD63077A700639A95A30C7DD522943D99C9CA17059715B6884FB786FE50994915D41B0D9DDC8AA2517094CFF9C1769E05F548C5222486B798EFE13788351E986CAAFFE3D95A0082C822CECB7D55FBAF4DD026849765690E283433B0B6B0060533863CA03736FB7973BF83EE5C12C1A3FA3F4E64A23746A9DB919257C06ED0918FB1BC8D28EB4A72DDC37954680C91FF58811883342B3FE2D8FA68623C139BFB6843E858156317C8C803D5971871F2A55C0A36CC5FED30733FB09F6F5D87825300E543B02DDCCD6C4CE68E977C7EA824B5E9EC28B671DC4B28224C6CE43F2BC3B729E3C833403C2FF9F082B2445368A132F97C088E90367832BB69F5C54CB38C21AB87
+20240326013051 2 6 100 2047 2 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A85DDC5DFB
+20240326013055 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A85DF8EE9F
+20240326013100 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A85E15B2AF
+20240326013115 2 6 100 2047 2 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A85E8800BB
+20240326013121 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A85EA93D9F
+20240326013127 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A85ED33B77
+20240326013129 2 6 100 2047 2 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A85EDE96FB
+20240326013133 2 6 100 2047 2 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A85EFDC7AB
+20240326013135 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A85F004B07
+20240326013147 2 6 100 2047 2 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A85F5A20FB
+20240326013151 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A85F780007
+20240326013154 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A85F873847
+20240326013155 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A85F8792BF
+20240326013158 2 6 100 2047 2 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A85F99602B
+20240326013212 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A85FFDCCE7
+20240326013219 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A86033F8F7
+20240326013239 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A860C92607
+20240326013244 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A860EACC9F
+20240326013252 2 6 100 2047 2 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A8612623A3
+20240326013254 2 6 100 2047 2 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A86131122B
+20240326013256 2 6 100 2047 2 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A86137AE5B
+20240326013316 2 6 100 2047 2 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A861CE9FAB
+20240326013319 2 6 100 2047 2 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A861DDF033
+20240326013322 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A861F71477
+20240326013330 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A8622DF73F
+20240326013333 2 6 100 2047 2 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A8623FA97B
+20240326013347 2 6 100 2047 2 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A862A6F8D3
+20240326013357 2 6 100 2047 2 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A862EDADB3
+20240326013401 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A86306A44F
+20240326013402 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A8630A4F4F
+20240326013406 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A86329C6AF
+20240326013412 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A8634D56D7
+20240326013433 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A863ECB6D7
+20240326013438 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A8640E99FF
+20240326013448 2 6 100 2047 2 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A86456D45B
+20240326013455 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A8648DB9CF
+20240326013456 2 6 100 2047 2 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A86490C78B
+20240326013506 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A864D48787
+20240326013511 2 6 100 2047 2 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A864F4C14B
+20240326013522 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A86546E877
+20240326013524 2 6 100 2047 2 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A8654FB6D3
+20240326013529 2 6 100 2047 2 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A865742D0B
+20240326013534 2 6 100 2047 2 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A8659900A3
+20240326013537 2 6 100 2047 5 D221068E02C30ED0DB86E4A0861A1E810B7BB629273F85D3706B90056B2CF34C342FF875ACADDDF5E49A87B1B038567EB05D77EADB0905CD24ECC8240F5EF15DCF197BBF61895F00DDD75D949C9BFF7066625602DBD460D9EA7D9E06F70AA721011BE246139444E9AB4ABFCCCB1A5943E67BF7D3AA5ADCF214945B1E7D8E40E44BD60D9ECD3C5E151944467F1B3DD3CFEDEA7C15CAD12F4F9AC78C7E0DEE2E15713C13FAFDC297DF06F3FB0BEBD1F481C642527085FAF48A29CB1BE20D5FE235E29345BF213C475F5A20CFA960E716987614825120EA968864837EEB68DB47A1F3336927BB9ADCC54A4341228289F92F9E23F1FFFB1E59DFCA8017A865A3FE37
+20240326013538 2 6 100 2047 5 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F049F51F
+20240326013547 2 6 100 2047 2 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F0859D0B
+20240326013554 2 6 100 2047 5 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F0BBD077
+20240326013607 2 6 100 2047 2 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F11279FB
+20240326013628 2 6 100 2047 2 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F1B2B0DB
+20240326013645 2 6 100 2047 5 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F22EA4A7
+20240326013653 2 6 100 2047 2 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F266CCCB
+20240326013656 2 6 100 2047 2 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F27B8CC3
+20240326013704 2 6 100 2047 2 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F2B6898B
+20240326013728 2 6 100 2047 5 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F3661F27
+20240326013732 2 6 100 2047 5 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F382F33F
+20240326013755 2 6 100 2047 2 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F42B19A3
+20240326013815 2 6 100 2047 5 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F4BFFC7F
+20240326013816 2 6 100 2047 2 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F4C4D313
+20240326013818 2 6 100 2047 5 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F4CB895F
+20240326013838 2 6 100 2047 2 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F55F34E3
+20240326013843 2 6 100 2047 2 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F581582B
+20240326013845 2 6 100 2047 5 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F58BB9BF
+20240326013904 2 6 100 2047 2 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F61FCE5B
+20240326013920 2 6 100 2047 5 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F69490CF
+20240326013923 2 6 100 2047 2 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F6A8041B
+20240326013953 2 6 100 2047 2 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F7815AF3
+20240326014006 2 6 100 2047 5 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F7E1576F
+20240326014014 2 6 100 2047 5 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F818E747
+20240326014019 2 6 100 2047 5 F7B6DB1359F90C032532089BF3BAE4A2ED1209EE181E517D24238A7EDF32489C1E6F3DBA19C01489FF3B6A2764E932B108218462111D8C834EB642726F08FDBEEBC08DC25A2ABD10D72DE4053EF4B48AD385A0EB97F1EF96F01BAA45AA914BAD8096B97919F724C1075FCFBA43119006C61A5F4E991B791E1056730CF19E9215B482F6047104269C1122AA14A76B5537621C0A620CE4BD63A70B898E002D19BD2897A1D036B6283EF9CB8ADF92806CAEA8AEFCDE63F945C5F098E11824BE3493225F9848E08F4AAB4E4C3621D8AF209C02058683332CE1163D158C484ECF99095C889B900127DE4367D2A8433E5D23DAB5F5AEBDA97C425F8B169759F83E49A7
+20240326014532 2 6 100 3071 5 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A3425DB7F
+20240326014544 2 6 100 3071 5 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A34464EAF
+20240326014614 2 6 100 3071 2 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A349D1663
+20240326014629 2 6 100 3071 2 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A34C39EC3
+20240326014710 2 6 100 3071 5 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A3544B6B7
+20240326014727 2 6 100 3071 2 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A3574A89B
+20240326014741 2 6 100 3071 5 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A359DA947
+20240326014823 2 6 100 3071 5 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A361FBA5F
+20240326014832 2 6 100 3071 2 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A36377BB3
+20240326015023 2 6 100 3071 5 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A37A19A47
+20240326015025 2 6 100 3071 2 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A37A30F2B
+20240326015030 2 6 100 3071 5 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A37AD1B0F
+20240326015038 2 6 100 3071 5 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A37C0B3FF
+20240326015116 2 6 100 3071 2 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A38348BB3
+20240326015159 2 6 100 3071 5 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A38BA81C7
+20240326015331 2 6 100 3071 2 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A39D93F9B
+20240326015416 2 6 100 3071 5 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A3A61FCDF
+20240326015505 2 6 100 3071 5 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A3AFA877F
+20240326015516 2 6 100 3071 2 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A3B1796B3
+20240326015601 2 6 100 3071 5 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A3BA5A777
+20240326015813 2 6 100 3071 5 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A3D516827
+20240326020106 2 6 100 3071 5 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A3F7A7897
+20240326020108 2 6 100 3071 2 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A3F7B337B
+20240326020156 2 6 100 3071 2 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A4012DDF3
+20240326020241 2 6 100 3071 5 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A409D1FB7
+20240326020357 2 6 100 3071 5 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A418A36C7
+20240326020359 2 6 100 3071 5 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A418AC37F
+20240326020434 2 6 100 3071 2 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A41F5DCD3
+20240326020621 2 6 100 3071 5 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A434E3E3F
+20240326020642 2 6 100 3071 2 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A438BE4BB
+20240326020655 2 6 100 3071 5 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A43ADA137
+20240326020708 2 6 100 3071 2 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A43D0D1CB
+20240326020800 2 6 100 3071 2 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A44709DB3
+20240326020836 2 6 100 3071 2 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A44DBD6DB
+20240326020854 2 6 100 3071 2 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A450CF663
+20240326020934 2 6 100 3071 2 E5EBD573C64E8C90F57D2EA3086FE8A0553F6E71A29D8C629C3AA54B6648F45B3CE898928396A4E07340D3B08C83DDF2DFD73A938E8716E633EFF84055EF653423B67B0C98C1BB45E6D24662B5EC5F04E90EEB4FE7EFC4F2EE41AACB0FE5712DEF846A2454C0FAB58061046FB8EEEB7FB351ABF70069E22A9901246EF9A8640AF80DA998506C749DED56E421DCC0FFC09F2E011C237573CDE365CE2E7D41C2614602CACDA3706EF919ACD82FF79FC1DC48C2F724EF8781281F67CA0E0835455A8D2142F2A820C2A57B7E9EA2936E76044F09655E2B5EC40BCD6198DEB10DBCF87C2CBA659431D54921A880F79DCB5C9D4B7CFC688A2BFB84D40199A41461A8FD2A0EFD68F72358311886D7FA3EB29F627133C892E1E27626D476A271BC1C3970C7B52C996089A16798D2E4B7D43E6233450A89F356D9A4AB9C00E4D7683480F7618DFF43DBE5D8324B95A49F4E71874BBD0245D30B2E57DEC68E85D176122EAC0D398A0DAE7A1880BE551B47E28898FED4C40A38365830967BA1423A458A51DB
+20240326021106 2 6 100 3071 5 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A3512585539C8487
+20240326021134 2 6 100 3071 5 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A351258553F5040F
+20240326021206 2 6 100 3071 5 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A35125855453B76F
+20240326021324 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A35125855546DBDB
+20240326021407 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A351258555BDDCF3
+20240326021424 2 6 100 3071 5 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A351258555F11B9F
+20240326021450 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A35125855644DDE3
+20240326021458 2 6 100 3071 5 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A35125855656D6E7
+20240326021614 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A351258557488DE3
+20240326021659 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A351258557D16D53
+20240326021718 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A3512585580918BB
+20240326021822 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A351258558D0013B
+20240326021836 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A351258558F7A96B
+20240326021921 2 6 100 3071 5 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A35125855982467F
+20240326021932 2 6 100 3071 5 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A351258559A0BC87
+20240326022009 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A35125855A12A95B
+20240326022029 2 6 100 3071 5 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A35125855A4C1027
+20240326022038 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A35125855A608723
+20240326022102 2 6 100 3071 5 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A35125855AA76F27
+20240326022132 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A35125855B050E7B
+20240326022301 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A35125855C2121F3
+20240326022441 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A35125855D60DD03
+20240326022451 2 6 100 3071 5 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A35125855D7D2637
+20240326022516 2 6 100 3071 5 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A35125855DC6F6EF
+20240326022530 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A35125855DEDE3DB
+20240326022711 2 6 100 3071 5 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A35125855F35973F
+20240326022824 2 6 100 3071 5 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A35125856017684F
+20240326022834 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A35125856032C153
+20240326022854 2 6 100 3071 5 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A3512585606C9E9F
+20240326022919 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A351258560B97F3B
+20240326023041 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A351258561B88E3B
+20240326023119 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A3512585622F17B3
+20240326023135 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A3512585625E20DB
+20240326023142 2 6 100 3071 5 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A3512585626E1567
+20240326023229 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A3512585630054CB
+20240326023255 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A3512585634C7DFB
+20240326023307 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A3512585636F2A3B
+20240326023310 2 6 100 3071 5 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A35125856371CA8F
+20240326023417 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A351258564487EA3
+20240326023451 2 6 100 3071 2 FF64FA2B9B9C1232EEECB2CB61C177D9714DAEAB27DB484855D95D7851B1CCD86068CCADB2EE0DF3C4FD76B2D7B8963DC5FBB49B5A003C23F423141B9E8FFFD771F5A40D47B74B8DC9704D7F3023637905DCE2000F5F85CE9699626BA067C7693A5CBC03598D402679D874A38904AB699D08F4E6BD73830B57BE87F9A10858EC3C342033B25D1DD6AD29D3CCB4AF01BC721AC75082CCFD5B098B15F5F154F222C33F580980904EAFE0BE926F740A3165BCC89C47E74C9B713CA0332947D1F9A5D05A52117EDABF7316C54605FEA3AE7EB7587E05EBC98A2A3ABA708E85DABC10BF48B64A6381730FA722A3FBFCA80817E1F0EDE608EAA6CF1FADDD8FABDF59825DC0DEF002BE804A59E70AD94C576E049D445656644CF2AF384220DDBEC013C0F532BC9AB8283902F8E8D6CEEBFA8E1CB4CA576A2B0500E26CF967603A69084F9D877953034E38AE87ABA7D08926790B1A37A613401CE8D42CF4384118F6CAAEA1C6B28A10DD710F681F328D73EB3E43B3EABC74C5EA8133A351258564AFE53B
+20240326024347 2 6 100 4095 2 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF8181186E03B3
+20240326024508 2 6 100 4095 2 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF818118EEB0A3
+20240326024849 2 6 100 4095 2 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF81811A4ECE4B
+20240326025526 2 6 100 4095 2 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF81811CD141E3
+20240326025628 2 6 100 4095 2 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF81811D32676B
+20240326030110 2 6 100 4095 2 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF81811EF7F1E3
+20240326030518 2 6 100 4095 5 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF818120788D47
+20240326031719 2 6 100 4095 2 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF818125002673
+20240326031926 2 6 100 4095 2 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF818125C6B433
+20240326031951 2 6 100 4095 2 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF818125E6335B
+20240326032742 2 6 100 4095 5 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF818128EAC3E7
+20240326032936 2 6 100 4095 2 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF818129980033
+20240326032952 2 6 100 4095 2 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF818129AAC3DB
+20240326033059 2 6 100 4095 2 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF81812A0B8603
+20240326033458 2 6 100 4095 5 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF81812B8E0D07
+20240326033533 2 6 100 4095 5 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF81812BBB8B97
+20240326033606 2 6 100 4095 5 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF81812BE87FF7
+20240326033629 2 6 100 4095 5 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF81812C03788F
+20240326033712 2 6 100 4095 5 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF81812C3FAF07
+20240326034008 2 6 100 4095 2 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF81812D534F8B
+20240326034204 2 6 100 4095 2 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF81812E080CA3
+20240326034508 2 6 100 4095 2 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF81812F2F5493
+20240326034751 2 6 100 4095 5 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF8181302AABC7
+20240326034806 2 6 100 4095 2 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF8181303CD8D3
+20240326034823 2 6 100 4095 2 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF8181304F3DCB
+20240326035043 2 6 100 4095 5 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF8181312A3FE7
+20240326035348 2 6 100 4095 2 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF8181324BFA5B
+20240326035602 2 6 100 4095 2 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF8181331F2E53
+20240326035702 2 6 100 4095 2 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF818133769453
+20240326035737 2 6 100 4095 2 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF818133AA336B
+20240326035756 2 6 100 4095 2 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF818133C16B8B
+20240326040216 2 6 100 4095 5 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF81813553AD37
+20240326040447 2 6 100 4095 5 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF81813644788F
+20240326040552 2 6 100 4095 5 D0D3C82A946A66A83A8CC225EE93B60D6260A5167B1476B41D8FE172E9EE15CE394E23C7F35D6BB24C0D3A5266A4F21DF8FF23134101FDA61F9D92F70AF32EFBABC5408226C6F931149BF40FD4B166B21B87F0E76B95A9095E0ECED05C7F81900F7216E7DDFE22FA3E4EAD74992DB6FE68F539AAAF285CE869BDD819AF650DAE192DC217EB6988E92601FAF7FEF564AB4A01C7E24E38F7B6EF0CC17CA220E6269AB1E837FBF694B3961E5AEC0C85D4800B3334CE6E8716F94557B081927267D33F1E7A3DD7FC965718956E2364E956076C23CAF13A5145F1BD62DC073C8170BFA98D8A405717190A95C98E598613AEA578B5FC4A9A08B80782D9A3EF49A6A464DA9D5A3B14F1CDAADAC4143FA77C9FB73FD5DD650CF078010A8FC6C6946A4D991E75A0AC709DF3D028DB86995A2007913522632092292537BEB34196EBF1E2ACBD4A697056CEBA4DEEA8F7AEBC11963601C12C33B0FEA90102D87ECB40277B32067CBA52DD74CBDCE68597DAF04C4635AD5918E7AE99008008DDCC49713B68CA567D1F46C3C0A0A1403E722408647E072F6A3C543F9CCE36A025427211721D377ABFE15806AD07EBD60B5BCB23C50EC37B06F47D2AA941E3DF5AFB749C0E325ED8A4157E7695696B08015BAEDA784B3503F42019AA96CCBA41CB72E0CF3491F440116B5BA679355835BAC1164676279FA026655D285CA0F094CF818136A4C7F7
+20240326040951 2 6 100 4095 2 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D80EA89E4B
+20240326042517 2 6 100 4095 2 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D8147E15B3
+20240326042616 2 6 100 4095 2 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D814D61A3B
+20240326043713 2 6 100 4095 2 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D818FD20D3
+20240326043724 2 6 100 4095 2 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D819078123
+20240326043742 2 6 100 4095 5 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D8191EAEFF
+20240326044025 2 6 100 4095 5 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D81A204197
+20240326044258 2 6 100 4095 5 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D81B145927
+20240326044447 2 6 100 4095 2 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D81BB935AB
+20240326044534 2 6 100 4095 5 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D81BFCFA6F
+20240326045348 2 6 100 4095 2 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D81F0CEB6B
+20240326045438 2 6 100 4095 2 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D81F582F4B
+20240326045630 2 6 100 4095 2 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D82007A843
+20240326045745 2 6 100 4095 5 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D820792B27
+20240326045949 2 6 100 4095 5 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D82142CB8F
+20240326045957 2 6 100 4095 2 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D82148EA73
+20240326050355 2 6 100 4095 5 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D822CAC6BF
+20240326050713 2 6 100 4095 2 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D8240BBCC3
+20240326050731 2 6 100 4095 2 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D824214D3B
+20240326050903 2 6 100 4095 2 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D824ACACFB
+20240326051214 2 6 100 4095 5 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D825DF67F7
+20240326051332 2 6 100 4095 2 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D826515C63
+20240326051747 2 6 100 4095 2 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D827E42F0B
+20240326051831 2 6 100 4095 2 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D828243B8B
+20240326051843 2 6 100 4095 2 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D82831A223
+20240326052417 2 6 100 4095 2 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D82A48CE23
+20240326052731 2 6 100 4095 2 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D82B78A8F3
+20240326052959 2 6 100 4095 2 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D82C5D399B
+20240326053126 2 6 100 4095 2 F52D556E0D75D910A1C4DF0D571DBCEBCAB3513CA78923277BA6240C1BB579A73E56739548C0F6882B5C8BF03A15C36CA58355E6EE2170ACDFBB13CF60BA34BD92FFDC091D9AC86141CAC874E1615508A2B1A1B4A31E81B2E1982AA3ED676B3DFBD0962400B188F56C6DFCDE7CDDBCEA57654D61272C585EDBBE0449D1AF74C537F8A022BADDCFC2E6F3050B586A6761CFD444DF39CC585715A0CC863B9B225499B3097CE62B7645485754A1A8B3010FCEF13EA07D29161D1F3E701B5BC3D99B1EF2F8916F862B4815BC0D0A3385B33FEDF1B7FBC85F615E051B8A31F32A6B4213754A5F8E4BBFCE77A292BCF482B7FC30E817A591170E72696359B3635CB393BEF4075DDD7D0734E358DB2A803EE621CBB04010EAC75F810D72C41A3D7013EE2799A59D7A8ADAB73E0FD5EE4A6498CA8DF000AC152C0F6CA1C57660D0DD750A6A5F788F89CC424FD19FBD42E9C7E2A949FBF43FC67528AFD879A37A0D1D38E05328C5216BA938C058A341AAEA8D8EACBA42610B0E7823E74CAB6CA791F17AECB532DA5BF80C056B67BDFDED51A97C95AFCD32509C87600A2D734F23944552727CF726068C04F339D206BAF472A0C2E2F22D7CF939B7A6FB3D5C67B0564537A33E6802DBD07AEE817BAD37B5287BA678E962EB3B8B5BEFAC937241725A1B8789C1609706B24C7266FAE9195B9536151FE3D65684AACF304BC664F4D82CE5BB4B
+20240326060038 2 6 100 6143 5 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A3C767FD7
+20240326060444 2 6 100 6143 2 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A3CF77C3B
+20240326070240 2 6 100 6143 2 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A4448EF33
+20240326073131 2 6 100 6143 2 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A47DAE05B
+20240326073415 2 6 100 6143 5 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A482BBA27
+20240326080953 2 6 100 6143 5 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A4CB6AE7F
+20240326081127 2 6 100 6143 2 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A4CDF5A0B
+20240326093032 2 6 100 6143 2 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A56B6523B
+20240326093454 2 6 100 6143 2 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A573897EB
+20240326093728 2 6 100 6143 2 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A57820693
+20240326094259 2 6 100 6143 5 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A5829EAF7
+20240326094948 2 6 100 6143 5 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A58FD0FEF
+20240326101231 2 6 100 6143 2 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A5BDEBEE3
+20240326101412 2 6 100 6143 2 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A5C09FFB3
+20240326102704 2 6 100 6143 5 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A5DAD12BF
+20240326103806 2 6 100 6143 5 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A5F05465F
+20240326105506 2 6 100 6143 2 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A611EE2E3
+20240326112146 2 6 100 6143 2 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A647870E3
+20240326114154 2 6 100 6143 2 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A6707EC03
+20240326114315 2 6 100 6143 2 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A6729353B
+20240326122735 2 6 100 6143 2 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A6CC0FBB3
+20240326123728 2 6 100 6143 5 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A6DF24D2F
+20240326130541 2 6 100 6143 2 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A71768773
+20240326130743 2 6 100 6143 2 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A71AF6A1B
+20240326132826 2 6 100 6143 2 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A743654E3
+20240326134513 2 6 100 6143 2 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A76478D13
+20240326134939 2 6 100 6143 5 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A76C9E817
+20240326135416 2 6 100 6143 5 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A7755E8B7
+20240326143409 2 6 100 6143 5 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A7C397F2F
+20240326144117 2 6 100 6143 2 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A7D13AF93
+20240326150017 2 6 100 6143 5 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A7F704F7F
+20240326150157 2 6 100 6143 5 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A7F9F468F
+20240326150526 2 6 100 6143 2 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A8005826B
+20240326150739 2 6 100 6143 5 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A8045FDAF
+20240326151012 2 6 100 6143 5 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A808FF207
+20240326151536 2 6 100 6143 2 E0848AB4E94DE11B8BFF81622A26C6D2145529210F586E2C145E8E26243AD47D8FB09EC8A70E1DBC3C1360EB1E511BB8657803B33D9CBAEA50236234CFD5354B08A7F9ADAEE929E263FFDB2572D56BE935DB62E8BC56ABB4594F5C0E9944B002E3A1E4DB42DEFBFEFCFB6DC014B5E20B319AC14C08FF4881E1648B39853C2D02C12EC355531BD61DCB6DE2EF99EBE4960810D43EA00A4F4CDD1E6A4F6B8037A737A306443E0E7F5B121101114FB3859ADC3C1A162DC937E6789B130DCCE01BF013CB3E79FAE8A4F6D1BA8EC5D2014D5E807DC5B1837AA025AE5A1A104C3FBC676C595DB6D27EF9F417F29C7CE3C48D2CAF46B9B79B2DD203E51E15A455B44D7EE85467BA02F922CB10CEA99C61589041CDA67D8F48A80FEC7B68CBBEEBD9DB6A82B377FFDADD912FCFD17AF6A08563F6CE7EF94153C9666CEC4D4210801E9BE697B3EDAC935E13A7D490DA08EC4F86CB2DC4497B0B4F031366918CD0ADD7B28E3E29C258CC3550EDFF59D8BCE4699296A0625AF61BA1DD74107CAD7D7EED70F3CCA27FE27E1A56C7AFEC8F92FB33BA5B322978D941FC4B39D22B1D952D975C4B1478E09F4ED4E98C054B80AD8AA5E02B5F0F84711E1464587FCF94D06CF716BA68141C3EADD9B501FA73B9DC49C19E95CCFF50613417CF6C95824E9C108B094C9AADC3E2CD6D2FEACEE698800ECF9411EAB20CD2A308B6983B25F3741D5EB12E7C9D46505CB2B0AA00FBFCFDEEF158FB28B4A93BEAB3EB4079EA6C6F9AA618A5E80560EF8966FC202ADB571DC143082E3E444149DFB3B3DD7B325440563A67147F351BF8B4C480D2635B2C78EA102E42B894489A366FFC764B502F3D48EFA342E7F0D13B15EEE257BE326265740BA62CA2DC2E6E49CEF1B11EF903CC0E756E92BCF404997D56631C817F44FCD826C6C0140EF990DF1FAA8A0A288DF2DDE4D67214C9B27F6D97A89D2067D59D1FCE0B65A27EAE0E6F065F01F0B06CF951E5D62460947DADAFF0B339CBDE45D8E6BACF1FA59676D9F65FC202FB640F3CCE10C2A5F4923F73AB1F9BEBF68906F4F36F469C7996739440380E4D5F63FF3A81343BEB
+20240326162321 2 6 100 6143 5 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5AD9F98F93F
+20240326163529 2 6 100 6143 2 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADA11D7CC3
+20240326163654 2 6 100 6143 2 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADA142310B
+20240326165530 2 6 100 6143 2 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADA394A593
+20240326171340 2 6 100 6143 2 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADA5C7FE3B
+20240326175630 2 6 100 6143 2 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADAB35A653
+20240326175808 2 6 100 6143 5 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADAB62C48F
+20240326184011 2 6 100 6143 5 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADB0B50FD7
+20240326184335 2 6 100 6143 5 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADB1203D2F
+20240326185246 2 6 100 6143 5 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADB2435AB7
+20240326190020 2 6 100 6143 2 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADB333EDAB
+20240326190122 2 6 100 6143 5 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADB34BD947
+20240326191114 2 6 100 6143 5 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADB482E3D7
+20240326192702 2 6 100 6143 2 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADB67FBDFB
+20240326195941 2 6 100 6143 2 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADBAA83D13
+20240326200115 2 6 100 6143 5 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADBAD40AEF
+20240326201633 2 6 100 6143 5 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADBCB670E7
+20240326203821 2 6 100 6143 2 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADBF6DC6B3
+20240326204751 2 6 100 6143 2 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADC094E45B
+20240326205334 2 6 100 6143 5 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADC1441637
+20240326211827 2 6 100 6143 5 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADC45F0E3F
+20240326212459 2 6 100 6143 2 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADC52DBD1B
+20240326214659 2 6 100 6143 5 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADC800E58F
+20240326215635 2 6 100 6143 5 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADC9314DBF
+20240326221037 2 6 100 6143 5 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADCAE8162F
+20240326225055 2 6 100 6143 2 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADCFEC8FA3
+20240326225519 2 6 100 6143 5 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADD072DFCF
+20240326231305 2 6 100 6143 5 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADD2AFDE1F
+20240326233946 2 6 100 6143 2 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADD60F026B
+20240327001519 2 6 100 6143 2 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADDA879EA3
+20240327002618 2 6 100 6143 2 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADDBDFC89B
+20240327003415 2 6 100 6143 2 F133729818EAD55DC3D8CA6C2754D6A78304D3CE96232D084B090E615BEAB6C63EC4B94BB1E33816ABCAFA3A08568FAD186C8873FDB17D7F9A28555871790CDA450A6EE13E97123F9A0589A77927047CE8B41B24F5505D19A3C4C18E132AFE9671423749DE1E110FB172AA66A15E405BD5CF56BE3CC6A22B13C3E03E42CA5BC3D8DA5B228C9569D7C15A2AE749A0F884A558687C2B656D94C167B47D9E3DD0691744E0D48858D0A1991FFEAAFE7E00C6284DC1E31CE3CED715F6686408BAEED6597453030DC62D033EF5A10B72D5367F7F1558F632CA86797FEBC16BF862D5CA0966122A584259FA0277B166F64F91959CC1F21E66BF0F6FD4489A00E0FC2E5C443A7AF646F32A772414D29F7A8116264C089E7D8A436870F0BB98EB134383464E2583DC569C9FC7D779D8C51A6D8BFA498FF8CF0F3CCDB631D794F1330E4E27A922BF0B0CADD66C11C885977B0AD344910D930E9D22F800FBB5A3712A5581C13D0378F82B2481969FC22C6A82E522A271C5FCA7079EEB7718D67BAC06F6A83B094B4FCD95BA2BCDC50EB547C79AAD9392DB976298511E0C270411CB37E3C1228ED8B018B15D3E2B334756DBF219624F2A2C6226FBF2EA33B9AAEC961E6BD3D7B6C9625ECF7E649D5EC21792E0A3E75E998FF6464961E74DAFB9CF95CF1CD654E4906FB725B381A325BE2D967B756072194EBAF8A2A524660EFA430957F30BE266C1105474A41964A5F7D5C9782FA193221BA23D9150CB5A08A3E231C62088D42FAA95777ADCE5D63ACB49299FBB1B29448A63B683B5799EE8DEE56B56748B7F269B43C35200716D74B5010388CF17B082AB285AC0DC827AAFF482EEC13268514B4F45AF6E0F948D3F466CE07C38A1308ED781B89837EB7332748A1BDD7E75CC904C763D44B0BA7A404046F1422B29DEC63EE2A524A123B8F971A181E8169601EBF10AABB5B71649E00E3D4600E23D2C20096CE2DB122C82F15A85238AA2337B559E7E8D0A824929956AA2394746B03E36A401565C2048D3DBF0411A8D4BB1044A9904290D264256B9085DA6001E5C208A2FB2760E94B958B4B2D5ADDCD9388B
+20240327012525 2 6 100 7679 2 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A54123BF06ED93
+20240327022256 2 6 100 7679 2 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A54123C2EB1D03
+20240327025321 2 6 100 7679 5 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A54123C4EE6D8F
+20240327031901 2 6 100 7679 2 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A54123C6A6ECFB
+20240327034252 2 6 100 7679 2 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A54123C84AA3F3
+20240327034558 2 6 100 7679 5 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A54123C876E36F
+20240327035607 2 6 100 7679 5 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A54123C91E770F
+20240327043824 2 6 100 7679 2 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A54123CBF90753
+20240327061734 2 6 100 7679 2 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A54123D2A46DE3
+20240327071503 2 6 100 7679 5 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A54123D6765ED7
+20240327080706 2 6 100 7679 2 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A54123D9FC24D3
+20240327091530 2 6 100 7679 2 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A54123DE8C18AB
+20240327092725 2 6 100 7679 5 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A54123DF4D10AF
+20240327100400 2 6 100 7679 2 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A54123E1BE884B
+20240327102109 2 6 100 7679 5 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A54123E2D9E9AF
+20240327111646 2 6 100 7679 2 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A54123E69B7CAB
+20240327140134 2 6 100 7679 2 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A54123F1C97CDB
+20240327144258 2 6 100 7679 2 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A54123F48C6AEB
+20240327150511 2 6 100 7679 2 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A54123F6023BEB
+20240327153839 2 6 100 7679 2 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A54123F8480A9B
+20240327160724 2 6 100 7679 5 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A54123FA2AE0EF
+20240327170619 2 6 100 7679 2 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A54123FE1F90CB
+20240327201733 2 6 100 7679 5 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A541240B20240F
+20240327202608 2 6 100 7679 5 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A541240BACBC77
+20240327204230 2 6 100 7679 2 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A541240CCB39CB
+20240327220340 2 6 100 7679 2 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A5412412509EF3
+20240327230112 2 6 100 7679 5 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A54124164279BF
+20240327231350 2 6 100 7679 5 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A5412417159137
+20240328011850 2 6 100 7679 5 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A541241F8FAF0F
+20240328020121 2 6 100 7679 2 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A541242268881B
+20240328020416 2 6 100 7679 5 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A5412422921477
+20240328035516 2 6 100 7679 2 EC85B1B812727C95C9C6D18B4F5700D62DBF698E4F4663A8C3298C2E301DF351147BB27E17982D2AF86FC969FB517AF57B10D864F23E8604341D97ECE9D33D31CA686CEEF872647B720A3010AFD4B85B0DBA65D3C9200D2C87BE4D4CAC50CAEBE0C92600F73FE5B5FD60D09762105BAA466DEB7809061EE3E4D0621D53DD39F5D7730324DF21FD9871E0BBCEBBB5450DBA4F30CA294BE8AE76D4318F8C543D9E6A032586BC29BE362311B3087657F3A068ED3221BA4EF3FF233C721D261FB9EE8245E171B32FFB8E7BA85ADFE304C784FF306AF7B2C8D9CDE0209AF5592BC33CAE85EAFB662808FA8B45405C4C0ED10DDC3B44C9A69AE6EFC86088D91C137046B2C2133EEAAA55EF5A55D4501B6357FEAC66EF33E521CCBCAA4BA4969EFAF7B41A2059C391AA92A387E75E02E8A018911D13899851C88B81F0592219032EB0538E6CB37E69A8FE2D7E759C7548556FF28B61F3DB0D1D945CF68BEC64497C803A4F8EB9B88F9872963A792480007310840F83966B386681071FAD8E5CF1502B6B2985C39E4D6CE509F086B53594B93A9AE3CA763C5CAD850FD1B1138B88E6741E7198ADC5768CC1737DEB702270FC8DE01042774E36AED88262D1C8B2166F84A3CEB5623B764CD85C808DB607837701D3F5BBEF83D19E927AEEF464079A9ABA5053CB0F2FD0942ABB568ACD050BF682809EAACD695F248D851CA0D7542BE8517BAEE4D0C8E22AA1C76E7650602723DD93A4834F4D87E74EEE8288F17175F481932E5FF012F903DDA99F74B547AF32937C7FD673ED79588C220D8EB60600747A32CFECC4E4E87001E6EEBB855EE56D47AFCD6B820D4130F6DB7E78948253A03E76CED6C399C058BB06253B799FD075DF738B7CEE5EF7AF153EFBA54A5A1EB9080A975B30262708B5E9CD283DCC8839CF10C28611B8D69A24A46DD926F755B84FF6C3D004313436C4E3E78A52D8FD8533DC2B1B7AFD1C3134B0AEBB0194844398262D56B442EEA1DD8731FE31FB785C2DFC32728AC502EF85A4A25EA2FA869172BDAE8872DA8EDA79020BF86E291EE8F383CCA7CFD3DAD66C92A734474A2AD7309BDB87C63F4FCD19E0C65912F9F054EB2E7A387CA81AB509E095C7331EE7DAA33E636663E0FF6DB66C3F3812C3CEC115B899FA6621B209E392DCB747F1800718A9ADAD04D48B5617D36AF518EF9A5A76FCCE8CE6BEFE567F1E91DA0FAEF318762B2E3D949C2D08A8544C80A841BF3DF01ACCF58700B804E7568F59F370DB76EEE625A7B380B38E4A1CC24F0DF6FD26C439B34B765DC4E04D6C0325DAF60A1C79057C0D94281E652E2C1CDCDCC304159440571F1B565F0A511647A541242A164FCB
+20240328051250 2 6 100 7679 2 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FCB60A9A5B
+20240328061956 2 6 100 7679 2 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FCBA8EE4D3
+20240328083541 2 6 100 7679 2 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FCC39DE953
+20240328104001 2 6 100 7679 5 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FCCBE8F2FF
+20240328123936 2 6 100 7679 2 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FCD40450AB
+20240328131851 2 6 100 7679 5 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FCD6B3842F
+20240328133514 2 6 100 7679 2 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FCD7C761BB
+20240328163521 2 6 100 7679 2 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FCE3D44693
+20240328184556 2 6 100 7679 5 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FCECA94E8F
+20240328185443 2 6 100 7679 2 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FCED3C2EEB
+20240328190404 2 6 100 7679 2 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FCEDD4DEAB
+20240328193132 2 6 100 7679 5 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FCEFA3B567
+20240328194029 2 6 100 7679 5 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FCF039E777
+20240328205320 2 6 100 7679 5 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FCF523DF3F
+20240328210032 2 6 100 7679 2 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FCF59C775B
+20240328221220 2 6 100 7679 2 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FCFA7B3FEB
+20240328221329 2 6 100 7679 2 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FCFA863653
+20240328222505 2 6 100 7679 2 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FCFB420393
+20240328224858 2 6 100 7679 5 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FCFCDA54CF
+20240329004423 2 6 100 7679 5 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FD04B953EF
+20240329024223 2 6 100 7679 5 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FD0BE0B937
+20240329035503 2 6 100 7679 5 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FD10BA6927
+20240329035634 2 6 100 7679 5 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FD10CC8C1F
+20240329035914 2 6 100 7679 2 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FD10F42063
+20240329045640 2 6 100 7679 2 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FD14CA5323
+20240329050935 2 6 100 7679 2 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FD159E9383
+20240329053141 2 6 100 7679 2 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FD170D04C3
+20240329054343 2 6 100 7679 2 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FD17D323FB
+20240329062142 2 6 100 7679 5 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FD1A5DB2DF
+20240329073301 2 6 100 7679 5 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FD1F20E86F
+20240329074920 2 6 100 7679 2 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FD20377F03
+20240329085033 2 6 100 7679 2 D4279A076EDA914DE80D14AF2DCB0B98294B99F706FBC061EF9007F2FA5897AEAF52D11A38EABEBA1EE590E35650894BA7669CE22689E6B50F11858063244F6BFBD664B19BA7ABD81CF1B65852069F215E8A1E1E72B3DFE09CAAFEC80797FF9F7AC81B6FB4A8813551385CD0D679E3F56BBFDC9069C7EB860A985C0170EA7899D76AD2D05AFD42205537E7BEB5782C27D2E6EF1532CEB5158BA23AC9E115AB472A1571A37E03439EFA47A04F61839D0DC47A8C7E2D13C9A018E87B5EB6B804AF7147814742D908212DBFB893171BC1713680CB1A036CBD0A6B6280F4D7B798913A9B59299E98F7553F202B0F33A2F67D6BB0071803DAD35595103E073F992321C4FFFCEB4F6AF4D3ADC9B53C41D8EFE7FE7AFE531E6485F8C087F18DD6B5A73101AE84737CAB85244E3FE085806104A9323907A94B06C437EE31D89AF7A584DE2F18DAD1A8E57FE1BAF5E2CC773EE57781F69A5D1EC4D8EB468BA9432394B5A9AD2F53B58A264B9C8E015F209DF60F865209482EDF309A575724A16E211CFC448799E4F05A9C2B1F09BDDECFB33FCC71211A646D8482F9A6EC20F10B38218A62182EB0E55BFF9BBA85585242B8BEFF20F1C88DFF9B20EA0C006D705B495750E2E78C4D1739347BF4628DF3F6A301DEDFCA7FA60D139B942338E8375471A1B33DF30316AF5584142D8B1E1F2C6966A08E2D70AED5DEC84968CAE5881587A734DEAD037A97EB384E4E07960EB4A64774579094763B71999D0783E95117BAB533C42516FE26A5F1C35F4FA2AF2B4F7A72E84B805DC31E8709BC36505F09954BDE0C86C918BC34FFD230491BECF307F1522AF4835C444D3CDBD0B00907B9CC3F483A51591659652378FF7C799373C2C40D238F8A2EBF6CDBC7FB26CE2748CCA89B85638CA12E7F5C477BB4FA0ED536BCCC7B3CFFC9E9D9126A8B1F56540A919A21439B66F3DF4C81A057B630176733B89AF3A29C297E2C0460265246AD68BF34E02391AD8C4601537B2B6BBD22C921D35574EFF85B1FE6C8A7BD6662CBF96D990929203D471F7648A7EDFC1E3AD551DFB688C6AC06E0F47844085C7485B00B5CDB3A3A449B26E104562531A12268ADC308F5095B066C0F82BD722D48A572EFC0F28865AE6EE37E39CAF2548C2B44780945AE573F8469ECC546FCEABCE9F518477ECC21B23B3E0532530795F1613B59C86EC0ACE047938CEC19C46CDCA59633F4712F989EFBDF065A5F64883C1E3960D7BCFE9FAB9B04A6DC4FB4BDA363E7A3967DF393799619DA22C6D2ECA276A6E9801CC1DCFBDBDD9985C09463B2F2CD57C922BF8FF65964A7B5EA4108F547F5D2FD328DD6A34C2B581AEDB7949AB8FD242F4BCB
+20240329121808 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C124806CA43
+20240329122442 2 6 100 8191 5 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C12485AF08F
+20240329153134 2 6 100 8191 5 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C1252D3F0CF
+20240329155254 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C1254053513
+20240329161124 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C12550A7BDB
+20240329161738 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C12555C651B
+20240329174531 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C125A40EEC3
+20240329191732 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C125F71710B
+20240329195323 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C126178458B
+20240329204827 2 6 100 8191 5 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C12648DD15F
+20240329234203 2 6 100 8191 5 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C126E5A5097
+20240329234306 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C126E615ACB
+20240330005652 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C12726F6443
+20240330033619 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C127B69FC23
+20240330044619 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C127F446BC3
+20240330054010 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C1282492493
+20240330055823 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C128344D603
+20240330062335 2 6 100 8191 5 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C1284A06C1F
+20240330082107 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C128B2D4E73
+20240330083555 2 6 100 8191 5 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C128BF7E127
+20240330084121 2 6 100 8191 5 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C128C3C894F
+20240330104737 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C129350C1FB
+20240330112334 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C12954A50B3
+20240330133619 2 6 100 8191 5 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C129CB0C66F
+20240330135122 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C129D7F94B3
+20240330141203 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C129E9C046B
+20240330155328 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C12A438CDC3
+20240330164337 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C12A6FF833B
+20240330172236 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C12A9222D1B
+20240330193325 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C12B07FB5BB
+20240330201458 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C12B2CA43B3
+20240330212712 2 6 100 8191 2 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C12B6C88EF3
+20240330225844 2 6 100 8191 5 C4FF326CB002CB4F25BB4309818DE616BCD6A04CB1C8D569FC4D34148B1D5D6B439D6DB946A264765BB6EAAE20B1B737C3CE28B7047D18B47C37ABECEC047E51A0541FE6434045192CE79898A70E6D93E12C35237219A6E3E00F88F5B1EE69982F0ECDA40DE90F5181A6F6F9BF5F9C497A1589ED3E2C16C68A41EA50D544BC57DB544F81F3DD6E6E09E0261A8FB2845A73A13156EBEC90719DE167262FAA68FA08DB412A918DE0D0C5585262DAB724FE31489205D7EA7C669DF4A4423E537153DB359EF31A71FE15C0707D46EE8EFF55305742BE773C6BAD327B2DB2829BF88216A275DFEBB04B3CFA2CF45507788E1DC5EDAFA03A03AD61CFCFE40D7CF7BF3712874CAA2C711691DD189B7024520B0B07D51095E91162FCA7203ECB4DDC9FFEA8355090AB20EEBA13F7901F5B71AB397CD097E0443DFAC8FED92DBBF2B38100E3CCB0118B2C8F27876D6067AF3EE9E44C7F44472C0DC419DE40E23D9DE359138028A9423328261E625A7381012787C370BC3C933C192EFE8CBF23F80271CBCA40F39D1BE4B4173997E646FEDB7AC81006E10D96559EDF6490A56FD47945E35A102C8B00EA740A7F1B53B4CC03D2DC302A8EA16971403CA8B826F6D56E307E04C75EDC1A8565A9EFBBE0F6ECA61D976649A23C82D9A8D7AC3E5124334916A75A6C8AA3B5DFB00FFEB893E6A7E7CEF0622C41C3FFB0B83C38A329E7144F6C06E789D897E3704817C6A79548B8D394EC53A460517DFD1513896B8360156561A5668AEF0F9F2D2B1CDBD4DAA8ED0C28E774EFE72D9FF758B97DAD89B305E5EC82BBC17733DB5F550EFFF1C45CBCA807BD7461C2D3C80FFDE3C1D4410DD678A94ADA54192EABFEC129C5F33DEADEF0C15B1D13782336637544FF1433E97022E45CFD560870ECD85CFF72944596B73DC7D9F978A07A47806E97EDB253019551791D6C62DEB669F5FA5EAA31FCDA0431C07AD97004F527C72548E9D22936D47D8963ABA0D82231473AF8CA45EBC59D93FCE197B7930AD7A82E3D780391A317097CFFA545DC42341FB1B265B851BBF55D95EF63A9AAFA4B2A78036751FBAABCBE9A8215B050AD478C3BF350462A4812A4FDE66FAC8B91718AAD80B68D21E5788F7CB3711F23F25EDBBDF7AC6DD9FBC110EBA2272750936C2F2A74CE5E69DE59A0B6359076EE3FB1D4F2779A6AC5753C860C2CA448E036EA15055D4A19148FE7BCD0AFA3B140A0203548A7A456ECDA8B9B9E740620291F14E21D08EEF21CE5676BB2434233E6C7CC62E48B9B752C87DC87E6DAE0A870E81D17E44AAF6982000A95B7EA676255A17D73FF4A45FAE0C5C9513B5EC0C6414D73EA9488373B6E2FFC9BD2E2C77394BB392F0AD23D91C99D9AA5066EBEE7123D00E223CA3CE572F667DBBD243473453DEC1A44CB979EF3898056D1E3B3A66DB1CB711B232291FA7C12BBE67097
+20240331000148 2 6 100 8191 5 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51B73EA509F
+20240331002043 2 6 100 8191 5 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51B74F19237
+20240331015303 2 6 100 8191 5 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51B7A08A157
+20240331021926 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51B7B77B293
+20240331031147 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51B7E5DF07B
+20240331032001 2 6 100 8191 5 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51B7ECA5C3F
+20240331054028 2 6 100 8191 5 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51B86B76577
+20240331062300 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51B891AC21B
+20240331063150 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51B898D590B
+20240331064453 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51B8A3FB29B
+20240331070343 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51B8B4728B3
+20240331082004 2 6 100 8191 5 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51B8F78FC67
+20240331083046 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51B90063753
+20240331085336 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51B913BDDA3
+20240331104948 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51B97AD8FBB
+20240331121935 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51B9CBCB66B
+20240331125021 2 6 100 8191 5 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51B9E75E9EF
+20240331131006 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51B9F876B2B
+20240331135555 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51BA21BA983
+20240331154257 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51BA8151143
+20240331171643 2 6 100 8191 5 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51BAD603A0F
+20240331180835 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51BB042B533
+20240331184114 2 6 100 8191 5 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51BB20E55D7
+20240331190024 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51BB31FB5FB
+20240331193130 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51BB4D5DEF3
+20240331203633 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51BB878F90B
+20240331215848 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51BBD220A13
+20240331220718 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51BBD9694FB
+20240331234057 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51BC2D1D8B3
+20240401015736 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51BCA81EB2B
+20240401044749 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51BD41C3C93
+20240401051819 2 6 100 8191 5 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51BD5D2C057
+20240401061504 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51BD8EDA743
+20240401062619 2 6 100 8191 5 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51BD98C438F
+20240401095349 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51BE51ECC83
+20240401133450 2 6 100 8191 2 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51BF189CF03
+20240401134927 2 6 100 8191 5 C236B21D4EECEC7DC25307B012452FBBBA72E7AB9CAD0D72A327FD19280856FD9993CDA7989072BD8C6E597FF7E009888DDDF8383E4F27BDB40D384CE8E9E7D739F296FD74C5415A164B0746783ACF1ABF031D4E8D1F2585BB9DBF6195215D9663196D4C5D3162E95A7163CA49255C77E412FFD7230B29C42C8703726D41006EBCFDB4EE478111ED6A8B3EDFE73496070250ECEBBB15E9376DCA438A3905EE308F8E4E064C31D1399ED7BB8AC8F6E458E8B43B1AC35DC4600B3780EA5D30F0704E7EEFDA1F2BACC94196B27E4A08B622D0AD441F3FEBA78A30D49732673040D7DD905604C7A7972BF62EFA6F3E477EADF778A7B9EA91ED338B72A42E4C30C40EF3CFADFAAF1690E469AD2B160FB1C2E836090D69F42C035B81B0E3301C0A18F9CA77C54447DB2AE57EC1765D79E188073D26328E285A3B889983409DA8B28EE75E5882524878D25083126A8007E5833272A7C330221D51CB023EC3BB452518BD57AEA2EE4560E57DF5FB7017646C6A426041551E6C55FE4ED7506FDFA1A04E1F9C36B47B031FFE4AE7480780BDC916A2B5A96C7B6D20EAFC4DF2FE721B415C365FEC16D0FEC74D034727A32D8E16D5E6CD64CAF6BC6F394E8BFBD3E9895A00924C016EEB8B6932B11CEB9A15668FE87E931CE9B1F30C3B23508760DF07A7B0AEDEDA196CC2D2974A15B51087503AF06B7351854CA928C966634E4638DC49A714B9F163AFAFD29B192E5AD2F4DED6A6945D77E7F26A72B5D6D1FB5C2F3A48970E9A0D2A212FBB8C15D5EA5435DA282E4C75DC3366BED430F71FFB6A43759542D572F828533C2437F65AB6A86EB6A994D2AA49B81D28106CFBDA10BBD7CA117A6E3CBED73D53185FEDE998C0D2EBADD81AEE2CFFAF17276E110BDDDDA163CDB5F12C12F67F432143588D4FDA6EF0763BAEC70B7D43BCD0213E650FEE7CAE47A3F327605A56116F2DB500F6481AAAD8AC312CD62F6E344705C5DA741C5E30140FB702BEE43DE37D905E8688E03F2E4D84DCBFD1BAED99BC18FAE53D701B6D78A6CDC84CDD09BA52F495785135F9006C34D7FB1059200FE16D1C707302FFB775387B3BDF1833953C0090D44076F1C27F815B638A846BEFCFC4F14B5EB38136737657E4781B8EDE5D97C175AF87F1EBE97DE9EBC410CA0C14DF17E320E986181D05D7573DF744D28846A6D78B193C7E094EE4530A15385AE6865469ADA3BCA7D6582E05C046B04306DD460940D9F76A72C13E9EFAA9184F5DC17FAB86879B29A6049BF201C5F21F6442BC1225217C288066E4FA5C16C62F8923B5C4A6B218365B3806349CEC8F79EEA94170A94BB10D6127DC78D1493CBBF7E12A7C1C2C4C14F353110E01DB0FA6459344DDD60EADE8F49924280CDEBE3D563F7069746DA3A0717438169F67534B769A9DE2B9938F148854652D7DDC7E513BAB18D356C51BF2540457
diff --git a/monitor.c b/monitor.c
index 9e0e03e..5966b4f 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: monitor.c,v 1.240 2024/06/06 17:15:25 djm Exp $ */
+/* $OpenBSD: monitor.c,v 1.244 2024/09/15 01:09:40 djm Exp $ */
/*
* Copyright 2002 Niels Provos <provos@citi.umich.edu>
* Copyright 2002 Markus Friedl <markus@openbsd.org>
@@ -96,6 +96,7 @@
#include "match.h"
#include "ssherr.h"
#include "sk-api.h"
+#include "srclimit.h"
#ifdef GSSAPI
static Gssctxt *gsscontext = NULL;
@@ -797,6 +798,15 @@ mm_answer_pwnamallow(struct ssh *ssh, int sock, struct sshbuf *m)
ssh_packet_set_log_preamble(ssh, "%suser %s",
authctxt->valid ? "authenticating" : "invalid ", authctxt->user);
+ if (options.refuse_connection) {
+ logit("administratively prohibited connection for "
+ "%s%s from %.128s port %d",
+ authctxt->valid ? "" : "invalid user ",
+ authctxt->user, ssh_remote_ipaddr(ssh),
+ ssh_remote_port(ssh));
+ cleanup_exit(EXIT_CONFIG_REFUSED);
+ }
+
/* Send active options to unpriv */
mm_encode_server_options(m);
@@ -1496,7 +1506,7 @@ mm_answer_keyverify(struct ssh *ssh, int sock, struct sshbuf *m)
}
auth2_record_key(authctxt, ret == 0, key);
- if (key_blobtype == MM_USERKEY)
+ if (key_blobtype == MM_USERKEY && ret == 0)
auth_activate_options(ssh, key_opts);
monitor_reset_key_state();
@@ -1763,6 +1773,7 @@ monitor_apply_keystate(struct ssh *ssh, struct monitor *pmonitor)
#endif /* WITH_OPENSSL */
kex->kex[KEX_C25519_SHA256] = kex_gen_server;
kex->kex[KEX_KEM_SNTRUP761X25519_SHA512] = kex_gen_server;
+ kex->kex[KEX_KEM_MLKEM768X25519_SHA256] = kex_gen_server;
kex->load_host_public_key=&get_hostkey_public_by_type;
kex->load_host_private_key=&get_hostkey_private_by_type;
kex->host_key_index=&get_hostkey_index;
diff --git a/mux.c b/mux.c
index d598a17..0529299 100644
--- a/mux.c
+++ b/mux.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mux.c,v 1.101 2023/11/23 03:37:05 dtucker Exp $ */
+/* $OpenBSD: mux.c,v 1.102 2024/07/25 22:40:08 djm Exp $ */
/*
* Copyright (c) 2002-2008 Damien Miller <djm@openbsd.org>
*
@@ -201,8 +201,8 @@ mux_master_session_cleanup_cb(struct ssh *ssh, int cid, int force, void *unused)
fatal_f("channel %d missing control channel %d",
c->self, c->ctl_chan);
c->ctl_chan = -1;
- cc->remote_id = 0;
- cc->have_remote_id = 0;
+ cc->ctl_child_id = 0;
+ cc->have_ctl_child_id = 0;
chan_rcvd_oclose(ssh, cc);
}
channel_cancel_cleanup(ssh, c->self);
@@ -217,12 +217,12 @@ mux_master_control_cleanup_cb(struct ssh *ssh, int cid, int force, void *unused)
debug3_f("entering for channel %d", cid);
if (c == NULL)
fatal_f("channel_by_id(%i) == NULL", cid);
- if (c->have_remote_id) {
- if ((sc = channel_by_id(ssh, c->remote_id)) == NULL)
+ if (c->have_ctl_child_id) {
+ if ((sc = channel_by_id(ssh, c->ctl_child_id)) == NULL)
fatal_f("channel %d missing session channel %u",
- c->self, c->remote_id);
- c->remote_id = 0;
- c->have_remote_id = 0;
+ c->self, c->ctl_child_id);
+ c->ctl_child_id = 0;
+ c->have_ctl_child_id = 0;
sc->ctl_chan = -1;
if (sc->type != SSH_CHANNEL_OPEN &&
sc->type != SSH_CHANNEL_OPENING) {
@@ -418,7 +418,7 @@ mux_master_process_new_session(struct ssh *ssh, u_int rid,
new_fd[0], new_fd[1], new_fd[2]);
/* XXX support multiple child sessions in future */
- if (c->have_remote_id) {
+ if (c->have_ctl_child_id) {
debug2_f("session already open");
reply_error(reply, MUX_S_FAILURE, rid,
"Multiple sessions not supported");
@@ -463,8 +463,8 @@ mux_master_process_new_session(struct ssh *ssh, u_int rid,
CHAN_EXTENDED_WRITE, "client-session", CHANNEL_NONBLOCK_STDIO);
nc->ctl_chan = c->self; /* link session -> control channel */
- c->remote_id = nc->self; /* link control -> session channel */
- c->have_remote_id = 1;
+ c->ctl_child_id = nc->self; /* link control -> session channel */
+ c->have_ctl_child_id = 1;
if (cctx->want_tty && escape_char != 0xffffffff) {
channel_register_filter(ssh, nc->self,
@@ -1003,7 +1003,7 @@ mux_master_process_stdio_fwd(struct ssh *ssh, u_int rid,
debug3_f("got fds stdin %d, stdout %d", new_fd[0], new_fd[1]);
/* XXX support multiple child sessions in future */
- if (c->have_remote_id) {
+ if (c->have_ctl_child_id) {
debug2_f("session already open");
reply_error(reply, MUX_S_FAILURE, rid,
"Multiple sessions not supported");
@@ -1035,8 +1035,8 @@ mux_master_process_stdio_fwd(struct ssh *ssh, u_int rid,
free(chost);
nc->ctl_chan = c->self; /* link session -> control channel */
- c->remote_id = nc->self; /* link control -> session channel */
- c->have_remote_id = 1;
+ c->ctl_child_id = nc->self; /* link control -> session channel */
+ c->have_ctl_child_id = 1;
debug2_f("channel_new: %d control %d", nc->self, nc->ctl_chan);
diff --git a/myproposal.h b/myproposal.h
index ee6e9f7..3bdc2e9 100644
--- a/myproposal.h
+++ b/myproposal.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: myproposal.h,v 1.71 2022/03/30 21:13:23 djm Exp $ */
+/* $OpenBSD: myproposal.h,v 1.73 2024/09/09 02:39:57 djm Exp $ */
/*
* Copyright (c) 2000 Markus Friedl. All rights reserved.
@@ -25,7 +25,9 @@
*/
#define KEX_SERVER_KEX \
+ "sntrup761x25519-sha512," \
"sntrup761x25519-sha512@openssh.com," \
+ "mlkem768x25519-sha256," \
"curve25519-sha256," \
"curve25519-sha256@libssh.org," \
"ecdh-sha2-nistp256," \
diff --git a/nchan.c b/nchan.c
index b156695..bd4758a 100644
--- a/nchan.c
+++ b/nchan.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: nchan.c,v 1.75 2024/02/01 02:37:33 djm Exp $ */
+/* $OpenBSD: nchan.c,v 1.76 2024/07/25 22:40:08 djm Exp $ */
/*
* Copyright (c) 1999, 2000, 2001, 2002 Markus Friedl. All rights reserved.
*
@@ -208,7 +208,7 @@ chan_send_close2(struct ssh *ssh, Channel *c)
{
int r;
- debug2("channel %d: send close", c->self);
+ debug2("channel %d: send_close2", c->self);
if (c->ostate != CHAN_OUTPUT_CLOSED ||
c->istate != CHAN_INPUT_CLOSED) {
error("channel %d: cannot send close for istate/ostate %d/%d",
@@ -218,6 +218,8 @@ chan_send_close2(struct ssh *ssh, Channel *c)
} else {
if (!c->have_remote_id)
fatal_f("channel %d: no remote_id", c->self);
+ debug2("channel %d: send close for remote id %u", c->self,
+ c->remote_id);
if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_CLOSE)) != 0 ||
(r = sshpkt_put_u32(ssh, c->remote_id)) != 0 ||
(r = sshpkt_send(ssh)) != 0)
diff --git a/openbsd-compat/arc4random.h b/openbsd-compat/arc4random.h
index 5af3a44..af2d5c1 100644
--- a/openbsd-compat/arc4random.h
+++ b/openbsd-compat/arc4random.h
@@ -23,7 +23,9 @@
* Stub functions for portability. From LibreSSL with some adaptations.
*/
+#ifdef HAVE_SYS_MMAN_H
#include <sys/mman.h>
+#endif
#include <signal.h>
diff --git a/openbsd-compat/openssl-compat.c b/openbsd-compat/openssl-compat.c
index 6c65003..1486507 100644
--- a/openbsd-compat/openssl-compat.c
+++ b/openbsd-compat/openssl-compat.c
@@ -95,4 +95,30 @@ ssh_libcrypto_init(void)
#endif /* USE_OPENSSL_ENGINE */
}
+#ifndef HAVE_EVP_DIGESTSIGN
+int
+EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen,
+ const unsigned char *tbs, size_t tbslen)
+{
+ if (sigret != NULL) {
+ if (EVP_DigestSignUpdate(ctx, tbs, tbslen) <= 0)
+ return 0;
+ }
+
+ return EVP_DigestSignFinal(ctx, sigret, siglen);
+}
+#endif
+
+#ifndef HAVE_EVP_DIGESTVERIFY
+int
+EVP_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret, size_t siglen,
+ const unsigned char *tbs, size_t tbslen)
+{
+ if (EVP_DigestVerifyUpdate(ctx, tbs, tbslen) <= 0)
+ return -1;
+
+ return EVP_DigestVerifyFinal(ctx, sigret, siglen);
+}
+#endif
+
#endif /* WITH_OPENSSL */
diff --git a/openbsd-compat/openssl-compat.h b/openbsd-compat/openssl-compat.h
index f6796b3..2b9780f 100644
--- a/openbsd-compat/openssl-compat.h
+++ b/openbsd-compat/openssl-compat.h
@@ -78,5 +78,15 @@ int EVP_CIPHER_CTX_set_iv(EVP_CIPHER_CTX *ctx,
const unsigned char *iv, size_t len);
#endif /* HAVE_EVP_CIPHER_CTX_SET_IV */
+#ifndef HAVE_EVP_DIGESTSIGN
+int EVP_DigestSign(EVP_MD_CTX *, unsigned char *, size_t *,
+ const unsigned char *, size_t);
+#endif
+
+#ifndef HAVE_EVP_DIGESTVERIFY
+int EVP_DigestVerify(EVP_MD_CTX *, const unsigned char *, size_t,
+ const unsigned char *, size_t);
+#endif
+
#endif /* WITH_OPENSSL */
#endif /* _OPENSSL_COMPAT_H */
diff --git a/openbsd-compat/port-linux.c b/openbsd-compat/port-linux.c
index 4c024c6..8adfec5 100644
--- a/openbsd-compat/port-linux.c
+++ b/openbsd-compat/port-linux.c
@@ -366,7 +366,7 @@ ssh_systemd_notify(const char *fmt, ...)
error_f("socket \"%s\": %s", path, strerror(errno));
goto out;
}
- if (connect(fd, &addr, sizeof(addr)) != 0) {
+ if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) != 0) {
error_f("socket \"%s\" connect: %s", path, strerror(errno));
goto out;
}
diff --git a/packet.c b/packet.c
index 4fca8d6..486f851 100644
--- a/packet.c
+++ b/packet.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: packet.c,v 1.315 2024/05/31 08:49:35 djm Exp $ */
+/* $OpenBSD: packet.c,v 1.317 2024/08/23 04:51:00 deraadt Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -1015,9 +1015,8 @@ ssh_set_newkeys(struct ssh *ssh, int mode)
/* explicit_bzero(enc->iv, enc->block_size);
explicit_bzero(enc->key, enc->key_len);
explicit_bzero(mac->key, mac->key_len); */
- if ((comp->type == COMP_ZLIB ||
- (comp->type == COMP_DELAYED &&
- state->after_authentication)) && comp->enabled == 0) {
+ if (((comp->type == COMP_DELAYED && state->after_authentication)) &&
+ comp->enabled == 0) {
if ((r = ssh_packet_init_compression(ssh)) < 0)
return r;
if (mode == MODE_OUT) {
@@ -2637,12 +2636,6 @@ sshpkt_put_stringb(struct ssh *ssh, const struct sshbuf *v)
return sshbuf_put_stringb(ssh->state->outgoing_packet, v);
}
-int
-sshpkt_getb_froms(struct ssh *ssh, struct sshbuf **valp)
-{
- return sshbuf_froms(ssh->state->incoming_packet, valp);
-}
-
#ifdef WITH_OPENSSL
#ifdef OPENSSL_HAS_ECC
int
@@ -2650,8 +2643,13 @@ sshpkt_put_ec(struct ssh *ssh, const EC_POINT *v, const EC_GROUP *g)
{
return sshbuf_put_ec(ssh->state->outgoing_packet, v, g);
}
-#endif /* OPENSSL_HAS_ECC */
+int
+sshpkt_put_ec_pkey(struct ssh *ssh, EVP_PKEY *pkey)
+{
+ return sshbuf_put_ec_pkey(ssh->state->outgoing_packet, pkey);
+}
+#endif /* OPENSSL_HAS_ECC */
int
sshpkt_put_bignum2(struct ssh *ssh, const BIGNUM *v)
@@ -2710,6 +2708,12 @@ sshpkt_get_cstring(struct ssh *ssh, char **valp, size_t *lenp)
return sshbuf_get_cstring(ssh->state->incoming_packet, valp, lenp);
}
+int
+sshpkt_getb_froms(struct ssh *ssh, struct sshbuf **valp)
+{
+ return sshbuf_froms(ssh->state->incoming_packet, valp);
+}
+
#ifdef WITH_OPENSSL
#ifdef OPENSSL_HAS_ECC
int
diff --git a/packet.h b/packet.h
index 5ab1f40..49bb87f 100644
--- a/packet.h
+++ b/packet.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: packet.h,v 1.98 2024/05/17 06:42:04 jsg Exp $ */
+/* $OpenBSD: packet.h,v 1.99 2024/08/15 00:51:51 djm Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -20,6 +20,7 @@
#ifdef WITH_OPENSSL
# include <openssl/bn.h>
+# include <openssl/evp.h>
# ifdef OPENSSL_HAS_ECC
# include <openssl/ec.h>
# else /* OPENSSL_HAS_ECC */
@@ -32,6 +33,7 @@
# define EC_KEY void
# define EC_GROUP void
# define EC_POINT void
+# define EVP_PKEY void
#endif /* WITH_OPENSSL */
#include <signal.h>
@@ -191,6 +193,7 @@ int sshpkt_put_string(struct ssh *ssh, const void *v, size_t len);
int sshpkt_put_cstring(struct ssh *ssh, const void *v);
int sshpkt_put_stringb(struct ssh *ssh, const struct sshbuf *v);
int sshpkt_put_ec(struct ssh *ssh, const EC_POINT *v, const EC_GROUP *g);
+int sshpkt_put_ec_pkey(struct ssh *ssh, EVP_PKEY *pkey);
int sshpkt_put_bignum2(struct ssh *ssh, const BIGNUM *v);
int sshpkt_get(struct ssh *ssh, void *valp, size_t len);
@@ -213,6 +216,7 @@ const u_char *sshpkt_ptr(struct ssh *, size_t *lenp);
# undef EC_KEY
# undef EC_GROUP
# undef EC_POINT
+# undef EVP_PKEY
#elif !defined(OPENSSL_HAS_ECC)
# undef EC_KEY
# undef EC_GROUP
diff --git a/readconf.c b/readconf.c
index 4e3791c..3d9cc6d 100644
--- a/readconf.c
+++ b/readconf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: readconf.c,v 1.387 2024/05/17 02:39:11 jsg Exp $ */
+/* $OpenBSD: readconf.c,v 1.390 2024/09/15 00:57:36 djm Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -646,24 +646,78 @@ check_match_ifaddrs(const char *addrlist)
}
/*
+ * Expand a "match exec" command or an Include path, caller must free returned
+ * value.
+ */
+static char *
+expand_match_exec_or_include_path(const char *path, Options *options,
+ struct passwd *pw, const char *host_arg, const char *original_host,
+ int final_pass, int is_include_path)
+{
+ char thishost[NI_MAXHOST], shorthost[NI_MAXHOST], portstr[NI_MAXSERV];
+ char uidstr[32], *conn_hash_hex, *keyalias, *jmphost, *ruser;
+ char *host, *ret;
+ int port;
+
+ port = options->port <= 0 ? default_ssh_port() : options->port;
+ ruser = options->user == NULL ? pw->pw_name : options->user;
+ if (final_pass) {
+ host = xstrdup(options->hostname);
+ } else if (options->hostname != NULL) {
+ /* NB. Please keep in sync with ssh.c:main() */
+ host = percent_expand(options->hostname,
+ "h", host_arg, (char *)NULL);
+ } else {
+ host = xstrdup(host_arg);
+ }
+ if (gethostname(thishost, sizeof(thishost)) == -1)
+ fatal("gethostname: %s", strerror(errno));
+ jmphost = option_clear_or_none(options->jump_host) ?
+ "" : options->jump_host;
+ strlcpy(shorthost, thishost, sizeof(shorthost));
+ shorthost[strcspn(thishost, ".")] = '\0';
+ snprintf(portstr, sizeof(portstr), "%d", port);
+ snprintf(uidstr, sizeof(uidstr), "%llu",
+ (unsigned long long)pw->pw_uid);
+ conn_hash_hex = ssh_connection_hash(thishost, host,
+ portstr, ruser, jmphost);
+ keyalias = options->host_key_alias ? options->host_key_alias : host;
+
+ ret = (is_include_path ? percent_dollar_expand : percent_expand)(path,
+ "C", conn_hash_hex,
+ "L", shorthost,
+ "d", pw->pw_dir,
+ "h", host,
+ "k", keyalias,
+ "l", thishost,
+ "n", original_host,
+ "p", portstr,
+ "r", ruser,
+ "u", pw->pw_name,
+ "i", uidstr,
+ "j", jmphost,
+ (char *)NULL);
+ free(host);
+ free(conn_hash_hex);
+ return ret;
+}
+
+/*
* Parse and execute a Match directive.
*/
static int
-match_cfg_line(Options *options, char **condition, struct passwd *pw,
- const char *host_arg, const char *original_host, int final_pass,
- int *want_final_pass, const char *filename, int linenum)
+match_cfg_line(Options *options, const char *full_line, int *acp, char ***avp,
+ struct passwd *pw, const char *host_arg, const char *original_host,
+ int final_pass, int *want_final_pass, const char *filename, int linenum)
{
- char *arg, *oattrib, *attrib, *cmd, *cp = *condition, *host, *criteria;
+ char *arg, *oattrib, *attrib, *cmd, *host, *criteria;
const char *ruser;
- int r, port, this_result, result = 1, attributes = 0, negate;
- char thishost[NI_MAXHOST], shorthost[NI_MAXHOST], portstr[NI_MAXSERV];
- char uidstr[32];
+ int r, this_result, result = 1, attributes = 0, negate;
/*
* Configuration is likely to be incomplete at this point so we
* must be prepared to use default values.
*/
- port = options->port <= 0 ? default_ssh_port() : options->port;
ruser = options->user == NULL ? pw->pw_name : options->user;
if (final_pass) {
host = xstrdup(options->hostname);
@@ -676,11 +730,11 @@ match_cfg_line(Options *options, char **condition, struct passwd *pw,
}
debug2("checking match for '%s' host %s originally %s",
- cp, host, original_host);
- while ((oattrib = attrib = strdelim(&cp)) && *attrib != '\0') {
+ full_line, host, original_host);
+ while ((oattrib = attrib = argv_next(acp, avp)) != NULL) {
/* Terminate on comment */
if (*attrib == '#') {
- cp = NULL; /* mark all arguments consumed */
+ argv_consume(acp);
break;
}
arg = criteria = NULL;
@@ -689,7 +743,8 @@ match_cfg_line(Options *options, char **condition, struct passwd *pw,
attrib++;
/* Criterion "all" has no argument and must appear alone */
if (strcasecmp(attrib, "all") == 0) {
- if (attributes > 1 || ((arg = strdelim(&cp)) != NULL &&
+ if (attributes > 1 ||
+ ((arg = argv_next(acp, avp)) != NULL &&
*arg != '\0' && *arg != '#')) {
error("%.200s line %d: '%s' cannot be combined "
"with other Match attributes",
@@ -698,7 +753,7 @@ match_cfg_line(Options *options, char **condition, struct passwd *pw,
goto out;
}
if (arg != NULL && *arg == '#')
- cp = NULL; /* mark all arguments consumed */
+ argv_consume(acp); /* consume remaining args */
if (result)
result = negate ? 0 : 1;
goto out;
@@ -723,7 +778,7 @@ match_cfg_line(Options *options, char **condition, struct passwd *pw,
continue;
}
/* All other criteria require an argument */
- if ((arg = strdelim(&cp)) == NULL ||
+ if ((arg = argv_next(acp, avp)) == NULL ||
*arg == '\0' || *arg == '#') {
error("Missing Match criteria for %s", attrib);
result = -1;
@@ -765,37 +820,12 @@ match_cfg_line(Options *options, char **condition, struct passwd *pw,
if (r == (negate ? 1 : 0))
this_result = result = 0;
} else if (strcasecmp(attrib, "exec") == 0) {
- char *conn_hash_hex, *keyalias, *jmphost;
-
- if (gethostname(thishost, sizeof(thishost)) == -1)
- fatal("gethostname: %s", strerror(errno));
- jmphost = option_clear_or_none(options->jump_host) ?
- "" : options->jump_host;
- strlcpy(shorthost, thishost, sizeof(shorthost));
- shorthost[strcspn(thishost, ".")] = '\0';
- snprintf(portstr, sizeof(portstr), "%d", port);
- snprintf(uidstr, sizeof(uidstr), "%llu",
- (unsigned long long)pw->pw_uid);
- conn_hash_hex = ssh_connection_hash(thishost, host,
- portstr, ruser, jmphost);
- keyalias = options->host_key_alias ?
- options->host_key_alias : host;
-
- cmd = percent_expand(arg,
- "C", conn_hash_hex,
- "L", shorthost,
- "d", pw->pw_dir,
- "h", host,
- "k", keyalias,
- "l", thishost,
- "n", original_host,
- "p", portstr,
- "r", ruser,
- "u", pw->pw_name,
- "i", uidstr,
- "j", jmphost,
- (char *)NULL);
- free(conn_hash_hex);
+ if ((cmd = expand_match_exec_or_include_path(arg,
+ options, pw, host_arg, original_host,
+ final_pass, 0)) == NULL) {
+ fatal("%.200s line %d: failed to expand match "
+ "exec '%.100s'", filename, linenum, arg);
+ }
if (result != 1) {
/* skip execution if prior predicate failed */
debug3("%.200s line %d: skipped exec "
@@ -835,7 +865,6 @@ match_cfg_line(Options *options, char **condition, struct passwd *pw,
out:
if (result != -1)
debug2("match %sfound", result ? "" : "not ");
- *condition = cp;
free(host);
return result;
}
@@ -1002,7 +1031,7 @@ static const struct multistate multistate_pubkey_auth[] = {
};
static const struct multistate multistate_compression[] = {
#ifdef WITH_ZLIB
- { "yes", COMP_ZLIB },
+ { "yes", COMP_DELAYED },
#endif
{ "no", COMP_NONE },
{ NULL, -1 }
@@ -1778,8 +1807,8 @@ parse_pubkey_algos:
"option");
goto out;
}
- value = match_cfg_line(options, &str, pw, host, original_host,
- flags & SSHCONF_FINAL, want_final_pass,
+ value = match_cfg_line(options, str, &ac, &av, pw, host,
+ original_host, flags & SSHCONF_FINAL, want_final_pass,
filename, linenum);
if (value < 0) {
error("%.200s line %d: Bad Match condition", filename,
@@ -1787,13 +1816,6 @@ parse_pubkey_algos:
goto out;
}
*activep = (flags & SSHCONF_NEVERMATCH) ? 0 : value;
- /*
- * If match_cfg_line() didn't consume all its arguments then
- * arrange for the extra arguments check below to fail.
- */
-
- if (str == NULL || *str == '\0')
- argv_consume(&ac);
break;
case oEscapeChar:
@@ -1990,6 +2012,15 @@ parse_pubkey_algos:
filename, linenum, keyword);
goto out;
}
+ /* Expand %tokens and environment variables */
+ if ((p = expand_match_exec_or_include_path(arg,
+ options, pw, host, original_host,
+ flags & SSHCONF_FINAL, 1)) == NULL) {
+ error("%.200s line %d: Unable to expand user "
+ "config file '%.100s'",
+ filename, linenum, arg);
+ continue;
+ }
/*
* Ensure all paths are anchored. User configuration
* files may begin with '~/' but system configurations
@@ -1997,17 +2028,19 @@ parse_pubkey_algos:
* as living in ~/.ssh for user configurations or
* /etc/ssh for system ones.
*/
- if (*arg == '~' && (flags & SSHCONF_USERCONF) == 0) {
+ if (*p == '~' && (flags & SSHCONF_USERCONF) == 0) {
error("%.200s line %d: bad include path %s.",
- filename, linenum, arg);
+ filename, linenum, p);
goto out;
}
- if (!path_absolute(arg) && *arg != '~') {
+ if (!path_absolute(p) && *p != '~') {
xasprintf(&arg2, "%s/%s",
(flags & SSHCONF_USERCONF) ?
- "~/" _PATH_SSH_USER_DIR : SSHDIR, arg);
- } else
- arg2 = xstrdup(arg);
+ "~/" _PATH_SSH_USER_DIR : SSHDIR, p);
+ } else {
+ arg2 = xstrdup(p);
+ }
+ free(p);
memset(&gl, 0, sizeof(gl));
r = glob(arg2, GLOB_TILDE, NULL, &gl);
if (r == GLOB_NOMATCH) {
@@ -2033,8 +2066,9 @@ parse_pubkey_algos:
(oactive ? 0 : SSHCONF_NEVERMATCH),
activep, want_final_pass, depth + 1);
if (r != 1 && errno != ENOENT) {
- error("Can't open user config file "
- "%.100s: %.100s", gl.gl_pathv[i],
+ error("%.200s line %d: Can't open user "
+ "config file %.100s: %.100s",
+ filename, linenum, gl.gl_pathv[i],
strerror(errno));
globfree(&gl);
goto out;
diff --git a/regress/cfginclude.sh b/regress/cfginclude.sh
index f5b492f..d442cdd 100644
--- a/regress/cfginclude.sh
+++ b/regress/cfginclude.sh
@@ -1,4 +1,4 @@
-# $OpenBSD: cfginclude.sh,v 1.3 2021/06/08 06:52:43 djm Exp $
+# $OpenBSD: cfginclude.sh,v 1.4 2024/09/03 05:58:56 djm Exp $
# Placed in the Public Domain.
tid="config include"
@@ -142,7 +142,7 @@ trial a aa
# cleanup
rm -f $OBJ/ssh_config.i $OBJ/ssh_config.i.* $OBJ/ssh_config.out
-# $OpenBSD: cfginclude.sh,v 1.3 2021/06/08 06:52:43 djm Exp $
+# $OpenBSD: cfginclude.sh,v 1.4 2024/09/03 05:58:56 djm Exp $
# Placed in the Public Domain.
tid="config include"
@@ -289,5 +289,27 @@ _EOF
${REAL_SSH} -F $OBJ/ssh_config.i -G a 2>/dev/null && \
fail "ssh include allowed infinite recursion?" # or hang...
+# Environment variable expansion
+cat > $OBJ/ssh_config.i << _EOF
+Include $OBJ/ssh_config.\${REAL_FILE}
+_EOF
+cat > $OBJ/ssh_config.i.x << _EOF
+Hostname xyzzy
+_EOF
+REAL_FILE=i.x
+export REAL_FILE
+trial a xyzzy
+
+# Environment variable expansion
+cat > $OBJ/ssh_config.i << _EOF
+Include $OBJ/ssh_config.i.%h%h
+_EOF
+cat > $OBJ/ssh_config.i.blahblah << _EOF
+Hostname mekmitastdigoat
+_EOF
+REAL_FILE=i.x
+export REAL_FILE
+trial blah mekmitastdigoat
+
# cleanup
rm -f $OBJ/ssh_config.i $OBJ/ssh_config.i.* $OBJ/ssh_config.out
diff --git a/regress/misc/fuzz-harness/Makefile b/regress/misc/fuzz-harness/Makefile
index 1072130..55dcc17 100644
--- a/regress/misc/fuzz-harness/Makefile
+++ b/regress/misc/fuzz-harness/Makefile
@@ -4,52 +4,68 @@ CXX=clang++-16
FUZZ_FLAGS=-fsanitize=address,fuzzer -fno-omit-frame-pointer
FUZZ_LIBS=-L/usr/lib/llvm-16/lib -lFuzzer
-CXXFLAGS=-O2 -g -Wall -Wextra -Wno-unused-parameter -Wno-exceptions -I ../../.. $(FUZZ_FLAGS)
-CFLAGS=$(CXXFLAGS)
-LDFLAGS=-L ../../.. -L ../../../openbsd-compat -g $(FUZZ_FLAGS)
+CFLAGS=-D_GNU_SOURCE=1 -O2 -g -Wall -Wextra -Wno-unused-parameter -Wno-exceptions -Wno-deprecated -I ../../..
+CXXFLAGS=$(CFLAGS) $(FUZZ_FLAGS)
+LDFLAGS=-L ../../.. -L ../../../openbsd-compat -g
LIBS=-lssh -lopenbsd-compat -lmd -lcrypto -lfido2 -lcbor $(FUZZ_LIBS)
SK_NULL_OBJS=ssh-sk-null.o
COMMON_DEPS=../../../libssh.a
TARGETS=pubkey_fuzz sig_fuzz authopt_fuzz authkeys_fuzz sshsig_fuzz \
- sshsigopt_fuzz privkey_fuzz kex_fuzz agent_fuzz
+ sshsigopt_fuzz privkey_fuzz kex_fuzz agent_fuzz \
+ mkcorpus_sntrup761 sntrup761_enc_fuzz sntrup761_dec_fuzz
all: $(TARGETS)
.cc.o:
$(CXX) $(CXXFLAGS) -c $< -o $@
+.c.o:
+ $(CC) $(CFLAGS) -c $< -o $@
+
pubkey_fuzz: pubkey_fuzz.o $(SK_NULL_OBJS) $(COMMON_DEPS)
- $(CXX) -o $@ pubkey_fuzz.o $(SK_NULL_OBJS) $(LDFLAGS) $(LIBS)
+ $(CXX) -o $@ pubkey_fuzz.o $(SK_NULL_OBJS) $(LDFLAGS) $(FUZZ_FLAGS) $(LIBS)
sig_fuzz: sig_fuzz.o $(SK_NULL_OBJS) $(COMMON_DEPS)
- $(CXX) -o $@ sig_fuzz.o $(SK_NULL_OBJS) $(LDFLAGS) $(LIBS)
+ $(CXX) -o $@ sig_fuzz.o $(SK_NULL_OBJS) $(LDFLAGS) $(FUZZ_FLAGS) $(LIBS)
authopt_fuzz: authopt_fuzz.o $(SK_NULL_OBJS) $(COMMON_DEPS)
- $(CXX) -o $@ authopt_fuzz.o $(SK_NULL_OBJS) ../../../auth-options.o $(LDFLAGS) $(LIBS)
+ $(CXX) -o $@ authopt_fuzz.o $(SK_NULL_OBJS) ../../../auth-options.o $(LDFLAGS) $(FUZZ_FLAGS) $(LIBS)
authkeys_fuzz: authkeys_fuzz.o $(SK_NULL_OBJS) $(COMMON_DEPS)
- $(CXX) -o $@ authkeys_fuzz.o $(SK_NULL_OBJS) ../../../auth-options.o ../../../auth2-pubkeyfile.o $(LDFLAGS) $(LIBS)
+ $(CXX) -o $@ authkeys_fuzz.o $(SK_NULL_OBJS) ../../../auth-options.o ../../../auth2-pubkeyfile.o $(LDFLAGS) $(FUZZ_FLAGS) $(LIBS)
sshsig_fuzz: sshsig_fuzz.o $(SK_NULL_OBJS) $(COMMON_DEPS)
- $(CXX) -o $@ sshsig_fuzz.o $(SK_NULL_OBJS) ../../../sshsig.o $(LDFLAGS) $(LIBS)
+ $(CXX) -o $@ sshsig_fuzz.o $(SK_NULL_OBJS) ../../../sshsig.o $(LDFLAGS) $(FUZZ_FLAGS) $(LIBS)
sshsigopt_fuzz: sshsigopt_fuzz.o $(SK_NULL_OBJS) $(COMMON_DEPS)
- $(CXX) -o $@ sshsigopt_fuzz.o $(SK_NULL_OBJS) ../../../sshsig.o $(LDFLAGS) $(LIBS)
+ $(CXX) -o $@ sshsigopt_fuzz.o $(SK_NULL_OBJS) ../../../sshsig.o $(LDFLAGS) $(FUZZ_FLAGS) $(LIBS)
privkey_fuzz: privkey_fuzz.o $(SK_NULL_OBJS) $(COMMON_DEPS)
- $(CXX) -o $@ privkey_fuzz.o $(SK_NULL_OBJS) $(LDFLAGS) $(LIBS)
+ $(CXX) -o $@ privkey_fuzz.o $(SK_NULL_OBJS) $(LDFLAGS) $(FUZZ_FLAGS) $(LIBS)
kex_fuzz: kex_fuzz.o $(SK_NULL_OBJS) $(COMMON_DEPS)
- $(CXX) -o $@ kex_fuzz.o $(SK_NULL_OBJS) $(LDFLAGS) $(LIBS) -lz
+ $(CXX) -o $@ kex_fuzz.o $(SK_NULL_OBJS) $(LDFLAGS) $(FUZZ_FLAGS) $(LIBS) -lz
agent_fuzz: agent_fuzz.o agent_fuzz_helper.o sk-dummy.o ../../../ssh-sk.o $(COMMON_DEPS)
- $(CXX) -o $@ agent_fuzz.o agent_fuzz_helper.o sk-dummy.o ../../../ssh-sk.o $(LDFLAGS) $(LIBS) -lz
+ $(CXX) -o $@ agent_fuzz.o agent_fuzz_helper.o sk-dummy.o ../../../ssh-sk.o $(LDFLAGS) $(FUZZ_FLAGS) $(LIBS) -lz
agent_fuzz_helper.o: agent_fuzz_helper.c ../../../ssh-agent.c
sk-dummy.o: ../sk-dummy/sk-dummy.c
- $(CC) $(CFLAGS) -c -o $@ ../sk-dummy/sk-dummy.c -DSK_DUMMY_INTEGRATE=1 $(LDFLAGS)
+ $(CC) $(CFLAGS) -c -o $@ ../sk-dummy/sk-dummy.c -DSK_DUMMY_INTEGRATE=1 $(LDFLAGS) $(FUZZ_FLAGS)
+
+mkcorpus_sntrup761: mkcorpus_sntrup761.o
+ $(CC) -o $@ mkcorpus_sntrup761.o $(LDFLAGS) -lcrypto
+
+sntrup761_dec_fuzz: sntrup761_dec_fuzz.o
+ $(CXX) -o $@ sntrup761_dec_fuzz.o $(LDFLAGS) $(FUZZ_FLAGS) $(FUZZ_LIBS) -lcrypto
+
+sntrup761_enc_fuzz: sntrup761_enc_fuzz.o
+ $(CXX) -o $@ sntrup761_enc_fuzz.o $(LDFLAGS) $(FUZZ_FLAGS) $(FUZZ_LIBS) -lcrypto
clean:
-rm -f *.o $(TARGETS)
+
+cleandir: clean
+
diff --git a/regress/misc/fuzz-harness/mkcorpus_sntrup761.c b/regress/misc/fuzz-harness/mkcorpus_sntrup761.c
new file mode 100644
index 0000000..86a8e02
--- /dev/null
+++ b/regress/misc/fuzz-harness/mkcorpus_sntrup761.c
@@ -0,0 +1,82 @@
+// Makes basic seed corpora for other fuzzers
+//
+// Will write to ./sntrup761_pubkey_corpus (for sntrup761_enc_fuzz) and
+// to ./sntrup761_ciphertext_corpus (for sntrup761_dec_fuzz)
+
+#include <sys/stat.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <err.h>
+#include <errno.h>
+
+#include "crypto_api.h"
+#include "hash.c"
+
+#undef randombytes
+#define USE_SNTRUP761X25519 1
+void randombytes(unsigned char *ptr, size_t l);
+volatile crypto_int16 crypto_int16_optblocker = 0;
+volatile crypto_int32 crypto_int32_optblocker = 0;
+volatile crypto_int64 crypto_int64_optblocker = 0;
+#include "sntrup761.c"
+
+#define NSEEDS 1000
+
+static int real_random;
+
+void
+randombytes(unsigned char *ptr, size_t l)
+{
+ if (real_random)
+ arc4random_buf(ptr, l);
+ else
+ memset(ptr, 0, l);
+}
+
+void write_blob(const char *path, int n, const char *suffix,
+ const void *ptr, size_t l)
+{
+ char name[256];
+ FILE *f;
+
+ snprintf(name, sizeof(name), "%s/%06d.%s", path, n, suffix);
+ if ((f = fopen(name, "wb+")) == NULL)
+ err(1, "fopen %s", name);
+ if (fwrite(ptr, l, 1, f) != 1)
+ err(1, "write %s", name);
+ fclose(f);
+}
+
+int main(void)
+{
+ int i;
+ unsigned char pk[crypto_kem_sntrup761_PUBLICKEYBYTES];
+ unsigned char sk[crypto_kem_sntrup761_SECRETKEYBYTES];
+ unsigned char ciphertext[crypto_kem_sntrup761_CIPHERTEXTBYTES];
+ unsigned char secret[crypto_kem_sntrup761_BYTES];
+
+ if (mkdir("sntrup761_pubkey_corpus", 0777) != 0 && errno != EEXIST)
+ err(1, "mkdir sntrup761_pubkey_corpus");
+ if (mkdir("sntrup761_ciphertext_corpus", 0777) != 0 && errno != EEXIST)
+ err(1, "mkdir sntrup761_ciphertext_corpus");
+
+ fprintf(stderr, "making: ");
+ for (i = 0; i < NSEEDS; i++) {
+ real_random = i != 0;
+ if (crypto_kem_sntrup761_keypair(pk, sk) != 0)
+ errx(1, "crypto_kem_sntrup761_keypair failed");
+ write_blob("sntrup761_pubkey_corpus", i, "pk", pk, sizeof(pk));
+ if (crypto_kem_sntrup761_enc(ciphertext, secret, pk) != 0)
+ errx(1, "crypto_kem_sntrup761_enc failed");
+ write_blob("sntrup761_ciphertext_corpus", i, "ct",
+ ciphertext, sizeof(ciphertext));
+ if (i % 20 == 0)
+ fprintf(stderr, ".");
+ }
+ fprintf(stderr, "\n");
+ return 0;
+}
diff --git a/regress/misc/fuzz-harness/sntrup761_dec_fuzz.cc b/regress/misc/fuzz-harness/sntrup761_dec_fuzz.cc
new file mode 100644
index 0000000..9aecae0
--- /dev/null
+++ b/regress/misc/fuzz-harness/sntrup761_dec_fuzz.cc
@@ -0,0 +1,74 @@
+// Basic fuzz test for depcapsulate operation,
+
+#include <stddef.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <err.h>
+
+extern "C" {
+
+#include "crypto_api.h"
+#include "hash.c"
+
+#undef randombytes
+#define USE_SNTRUP761X25519 1
+#ifdef SNTRUP761_NO_ASM
+# undef __GNUC__
+#endif
+void randombytes(unsigned char *ptr, size_t l);
+volatile crypto_int16 crypto_int16_optblocker = 0;
+volatile crypto_int32 crypto_int32_optblocker = 0;
+volatile crypto_int64 crypto_int64_optblocker = 0;
+#include "sntrup761.c"
+
+static int real_random;
+
+void
+randombytes(unsigned char *ptr, size_t l)
+{
+ if (real_random)
+ arc4random_buf(ptr, l);
+ else
+ memset(ptr, 0, l);
+}
+
+void privkeys(unsigned char *zero_sk, unsigned char *rnd_sk)
+{
+ unsigned char pk[crypto_kem_sntrup761_PUBLICKEYBYTES];
+
+ real_random = 0;
+ if (crypto_kem_sntrup761_keypair(pk, zero_sk) != 0)
+ errx(1, "crypto_kem_sntrup761_keypair failed");
+ real_random = 1;
+ if (crypto_kem_sntrup761_keypair(pk, rnd_sk) != 0)
+ errx(1, "crypto_kem_sntrup761_keypair failed");
+}
+
+int LLVMFuzzerTestOneInput(const uint8_t* input, size_t len)
+{
+ static bool once;
+ static unsigned char zero_sk[crypto_kem_sntrup761_SECRETKEYBYTES];
+ static unsigned char rnd_sk[crypto_kem_sntrup761_SECRETKEYBYTES];
+ unsigned char ciphertext[crypto_kem_sntrup761_CIPHERTEXTBYTES];
+ unsigned char secret[crypto_kem_sntrup761_BYTES];
+
+ if (!once) {
+ privkeys(zero_sk, rnd_sk);
+ once = true;
+ }
+
+ memset(&ciphertext, 0, sizeof(ciphertext));
+ if (len > sizeof(ciphertext)) {
+ len = sizeof(ciphertext);
+ }
+ memcpy(ciphertext, input, len);
+
+ (void)crypto_kem_sntrup761_dec(secret, ciphertext, zero_sk);
+ (void)crypto_kem_sntrup761_dec(secret, ciphertext, rnd_sk);
+ return 0;
+}
+
+} // extern
diff --git a/regress/misc/fuzz-harness/sntrup761_enc_fuzz.cc b/regress/misc/fuzz-harness/sntrup761_enc_fuzz.cc
new file mode 100644
index 0000000..c4ebac4
--- /dev/null
+++ b/regress/misc/fuzz-harness/sntrup761_enc_fuzz.cc
@@ -0,0 +1,57 @@
+// Basic fuzz test for encapsulate operation.
+
+#include <stddef.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <err.h>
+
+extern "C" {
+
+#include "crypto_api.h"
+#include "hash.c"
+
+#undef randombytes
+#define USE_SNTRUP761X25519 1
+#ifdef SNTRUP761_NO_ASM
+# undef __GNUC__
+#endif
+void randombytes(unsigned char *ptr, size_t l);
+volatile crypto_int16 crypto_int16_optblocker = 0;
+volatile crypto_int32 crypto_int32_optblocker = 0;
+volatile crypto_int64 crypto_int64_optblocker = 0;
+#include "sntrup761.c"
+
+static int real_random;
+
+void
+randombytes(unsigned char *ptr, size_t l)
+{
+ if (real_random)
+ arc4random_buf(ptr, l);
+ else
+ memset(ptr, 0, l);
+}
+
+int LLVMFuzzerTestOneInput(const uint8_t* input, size_t len)
+{
+ unsigned char pk[crypto_kem_sntrup761_PUBLICKEYBYTES];
+ unsigned char ciphertext[crypto_kem_sntrup761_CIPHERTEXTBYTES];
+ unsigned char secret[crypto_kem_sntrup761_BYTES];
+
+ memset(&pk, 0, sizeof(pk));
+ if (len > sizeof(pk)) {
+ len = sizeof(pk);
+ }
+ memcpy(pk, input, len);
+
+ real_random = 0;
+ (void)crypto_kem_sntrup761_enc(ciphertext, secret, pk);
+ real_random = 1;
+ (void)crypto_kem_sntrup761_enc(ciphertext, secret, pk);
+ return 0;
+}
+
+} // extern
diff --git a/regress/misc/fuzz-harness/watch-sntrup761.sh b/regress/misc/fuzz-harness/watch-sntrup761.sh
new file mode 100755
index 0000000..482f831
--- /dev/null
+++ b/regress/misc/fuzz-harness/watch-sntrup761.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+set -e
+mkdir -p sntrup761_dec_fuzzing sntrup761_enc_fuzzing
+(cd sntrup761_enc_fuzzing ;
+ ../sntrup761_enc_fuzz -jobs=48 ../sntrup761_pubkey_corpus &)
+(cd sntrup761_dec_fuzzing ;
+ ../sntrup761_dec_fuzz -jobs=48 ../sntrup761_ciphertext_corpus &)
+
+while true ; do
+ clear
+ uptime
+ echo
+ echo "Findings"
+ ls -1 sntrup761_dec_fuzzing sntrup761_enc_fuzzing | grep -v '^fuzz-.*log$'
+ printf "\n\n"
+ printf "ciphertext_corpus: " ; ls -1 sntrup761_ciphertext_corpus | wc -l
+ printf " pubkey_corpus: "; ls -1 sntrup761_pubkey_corpus | wc -l
+ sleep 10;
+done
diff --git a/regress/multiplex.sh b/regress/multiplex.sh
index b992cd4..8274b9d 100644
--- a/regress/multiplex.sh
+++ b/regress/multiplex.sh
@@ -1,4 +1,4 @@
-# $OpenBSD: multiplex.sh,v 1.36 2023/03/01 09:29:32 dtucker Exp $
+# $OpenBSD: multiplex.sh,v 1.37 2024/07/19 04:33:36 djm Exp $
# Placed in the Public Domain.
make_tmpdir
@@ -56,19 +56,20 @@ if [ $? -ne 0 ]; then
fail "environment not found"
fi
-
-verbose "test $tid: transfer"
-rm -f ${COPY}
-trace "ssh transfer over multiplexed connection and check result"
-${SSH} -F $OBJ/ssh_config -S$CTL otherhost cat ${DATA} > ${COPY}
-test -f ${COPY} || fail "ssh -Sctl: failed copy ${DATA}"
-cmp ${DATA} ${COPY} || fail "ssh -Sctl: corrupted copy of ${DATA}"
-
-rm -f ${COPY}
-trace "ssh transfer over multiplexed connection and check result"
-${SSH} -F $OBJ/ssh_config -S $CTL otherhost cat ${DATA} > ${COPY}
-test -f ${COPY} || fail "ssh -S ctl: failed copy ${DATA}"
-cmp ${DATA} ${COPY} || fail "ssh -S ctl: corrupted copy of ${DATA}"
+for mode in "" "-Oproxy"; do
+ verbose "test $tid: transfer $mode"
+ rm -f ${COPY}
+ trace "ssh transfer over $mode multiplexed connection and check result"
+ ${SSH} $mode -F $OBJ/ssh_config -S$CTL otherhost cat ${DATA} > ${COPY}
+ test -f ${COPY} || fail "ssh -Sctl: failed copy ${DATA}"
+ cmp ${DATA} ${COPY} || fail "ssh -Sctl: corrupted copy of ${DATA}"
+
+ rm -f ${COPY}
+ trace "ssh transfer over $mode multiplexed connection and check result"
+ ${SSH} $mode -F $OBJ/ssh_config -S $CTL otherhost cat ${DATA} > ${COPY}
+ test -f ${COPY} || fail "ssh -S ctl: failed copy ${DATA}"
+ cmp ${DATA} ${COPY} || fail "ssh -S ctl: corrupted copy of ${DATA}"
+done
rm -f ${COPY}
trace "sftp transfer over multiplexed connection and check result"
diff --git a/regress/rekey.sh b/regress/rekey.sh
index 8005a86..3f5e1d5 100644
--- a/regress/rekey.sh
+++ b/regress/rekey.sh
@@ -1,76 +1,114 @@
-# $OpenBSD: rekey.sh,v 1.20 2024/05/22 04:20:00 djm Exp $
+# $OpenBSD: rekey.sh,v 1.30 2024/08/28 12:08:26 djm Exp $
# Placed in the Public Domain.
tid="rekey"
LOG=${TEST_SSH_LOGFILE}
+COPY2=$OBJ/copy2
rm -f ${LOG}
cp $OBJ/sshd_proxy $OBJ/sshd_proxy_bak
+echo "Compression no" >> $OBJ/ssh_proxy
+echo "RekeyLimit 256k" >> $OBJ/ssh_proxy
+echo "KexAlgorithms curve25519-sha256" >> ssh_proxy
+
# Test rekeying based on data volume only.
-# Arguments will be passed to ssh.
+# Arguments: rekeylimit, kex method, optional remaining opts are passed to ssh.
ssh_data_rekeying()
{
+ _bytes=$1 ; shift
_kexopt=$1 ; shift
_opts="$@"
+ if test -z "$_bytes"; then
+ _bytes=32k
+ fi
if ! test -z "$_kexopt" ; then
cp $OBJ/sshd_proxy_bak $OBJ/sshd_proxy
echo "$_kexopt" >> $OBJ/sshd_proxy
_opts="$_opts -o$_kexopt"
fi
- rm -f ${COPY} ${LOG}
- _opts="$_opts -oCompression=no"
- ${SSH} <${DATA} $_opts -v -F $OBJ/ssh_proxy somehost "cat > ${COPY}"
+ case "$_kexopt" in
+ MACs=*)
+ # default chacha20-poly1305 cipher has implicit MAC
+ _opts="$_opts -oCiphers=aes128-ctr" ;;
+ esac
+ trace bytes $_bytes kex $_kexopt opts $_opts
+ rm -f ${COPY} ${COPY2} ${LOG}
+ # Create data file just big enough to reach rekey threshold.
+ dd if=${DATA} of=${COPY} bs=$_bytes count=1 2>/dev/null
+ ${SSH} <${COPY} $_opts -vv \
+ -oRekeyLimit=$_bytes -F $OBJ/ssh_proxy somehost "cat >${COPY2}"
if [ $? -ne 0 ]; then
fail "ssh failed ($@)"
fi
- cmp ${DATA} ${COPY} || fail "corrupted copy ($@)"
+ cmp ${COPY} ${COPY2} || fail "corrupted copy ($@)"
n=`grep 'NEWKEYS sent' ${LOG} | wc -l`
n=`expr $n - 1`
+ _want=`echo $_kexopt | cut -f2 -d=`
+ _got=""
+ case "$_kexopt" in
+ KexAlgorithms=*)
+ _got=`awk '/kex: algorithm: /{print $4}' ${LOG} | \
+ tr -d '\r' | sort -u` ;;
+ Ciphers=*)
+ _got=`awk '/kex: client->server cipher:/{print $5}' ${LOG} | \
+ tr -d '\r' | sort -u` ;;
+ MACs=*)
+ _got=`awk '/kex: client->server cipher:/{print $7}' ${LOG} | \
+ tr -d '\r' | sort -u` ;;
+ esac
+ if [ "$_want" != "$_got" ]; then
+ fail "unexpected algorithm, want $_want, got $_got"
+ fi
trace "$n rekeying(s)"
if [ $n -lt 1 ]; then
fail "no rekeying occurred ($@)"
fi
+ cp $OBJ/sshd_proxy_bak $OBJ/sshd_proxy
}
increase_datafile_size 300
opts=""
-for i in `${SSH} -Q kex`; do
+
+# Filter out duplicate curve algo
+kexs=`${SSH} -Q kex | grep -v curve25519-sha256@libssh.org`
+ciphers=`${SSH} -Q cipher`
+macs=`${SSH} -Q mac`
+
+for i in $kexs; do
opts="$opts KexAlgorithms=$i"
done
-for i in `${SSH} -Q cipher`; do
+for i in $ciphers; do
opts="$opts Ciphers=$i"
done
-for i in `${SSH} -Q mac`; do
+for i in $macs; do
opts="$opts MACs=$i"
done
for opt in $opts; do
verbose "client rekey $opt"
- ssh_data_rekeying "$opt" -oRekeyLimit=256k
+ if ${SSH} -Q cipher-auth | sed 's/^/Ciphers=/' | \
+ grep $opt >/dev/null; then
+ trace AEAD cipher, testing all KexAlgorithms
+ for kex in $kexs; do
+ ssh_data_rekeying "" "KexAlgorithms=$kex" "-o$opt"
+ done
+ else
+ ssh_data_rekeying "" "$opt"
+ fi
done
-# AEAD ciphers are magical so test with all KexAlgorithms
-if ${SSH} -Q cipher-auth | grep '^.*$' >/dev/null 2>&1 ; then
- for c in `${SSH} -Q cipher-auth`; do
- for kex in `${SSH} -Q kex`; do
- verbose "client rekey $c $kex"
- ssh_data_rekeying "KexAlgorithms=$kex" -oRekeyLimit=256k -oCiphers=$c
- done
- done
-fi
-
for s in 16 1k 128k 256k; do
verbose "client rekeylimit ${s}"
- ssh_data_rekeying "" -oCompression=no -oRekeyLimit=$s
+ ssh_data_rekeying "$s" ""
done
for s in 5 10; do
verbose "client rekeylimit default ${s}"
rm -f ${COPY} ${LOG}
- ${SSH} < ${DATA} -oCompression=no -oRekeyLimit="default $s" -F \
+ ${SSH} < ${DATA} -oRekeyLimit="default $s" -F \
$OBJ/ssh_proxy somehost "cat >${COPY};sleep $s;sleep 10"
if [ $? -ne 0 ]; then
fail "ssh failed"
@@ -87,7 +125,7 @@ done
for s in 5 10; do
verbose "client rekeylimit default ${s} no data"
rm -f ${COPY} ${LOG}
- ${SSH} -oCompression=no -oRekeyLimit="default $s" -F \
+ ${SSH} -oRekeyLimit="default $s" -F \
$OBJ/ssh_proxy somehost "sleep $s;sleep 10"
if [ $? -ne 0 ]; then
fail "ssh failed"
@@ -104,13 +142,13 @@ for s in 16 1k 128k 256k; do
verbose "server rekeylimit ${s}"
cp $OBJ/sshd_proxy_bak $OBJ/sshd_proxy
echo "rekeylimit ${s}" >>$OBJ/sshd_proxy
- rm -f ${COPY} ${LOG}
- ${SSH} -oCompression=no -F $OBJ/ssh_proxy somehost "cat ${DATA}" \
- > ${COPY}
+ rm -f ${COPY} ${COPY2} ${LOG}
+ dd if=${DATA} of=${COPY} bs=$s count=1 2>/dev/null
+ ${SSH} -F $OBJ/ssh_proxy somehost "cat ${COPY}" >${COPY2}
if [ $? -ne 0 ]; then
fail "ssh failed"
fi
- cmp ${DATA} ${COPY} || fail "corrupted copy"
+ cmp ${COPY} ${COPY2} || fail "corrupted copy"
n=`grep 'NEWKEYS sent' ${LOG} | wc -l`
n=`expr $n - 1`
trace "$n rekeying(s)"
@@ -124,7 +162,7 @@ for s in 5 10; do
cp $OBJ/sshd_proxy_bak $OBJ/sshd_proxy
echo "rekeylimit default ${s}" >>$OBJ/sshd_proxy
rm -f ${COPY} ${LOG}
- ${SSH} -oCompression=no -F $OBJ/ssh_proxy somehost "sleep $s;sleep 10"
+ ${SSH} -F $OBJ/ssh_proxy somehost "sleep $s;sleep 10"
if [ $? -ne 0 ]; then
fail "ssh failed"
fi
@@ -136,9 +174,8 @@ for s in 5 10; do
fi
done
-verbose "rekeylimit parsing"
+verbose "rekeylimit parsing: bytes"
for size in 16 1k 1K 1m 1M 1g 1G 4G 8G; do
- for time in 1 1m 1M 1h 1H 1d 1D 1w 1W; do
case $size in
16) bytes=16 ;;
1k|1K) bytes=1024 ;;
@@ -147,6 +184,15 @@ for size in 16 1k 1K 1m 1M 1g 1G 4G 8G; do
4g|4G) bytes=4294967296 ;;
8g|8G) bytes=8589934592 ;;
esac
+ b=`${SSH} -G -o "rekeylimit $size" -F $OBJ/ssh_proxy host | \
+ awk '/rekeylimit/{print $2}'`
+ if [ "$bytes" != "$b" ]; then
+ fatal "rekeylimit size: expected $bytes bytes got $b"
+ fi
+done
+
+verbose "rekeylimit parsing: time"
+for time in 1 1m 1M 1h 1H 1d 1D 1w 1W; do
case $time in
1) seconds=1 ;;
1m|1M) seconds=60 ;;
@@ -154,19 +200,11 @@ for size in 16 1k 1K 1m 1M 1g 1G 4G 8G; do
1d|1D) seconds=86400 ;;
1w|1W) seconds=604800 ;;
esac
-
- b=`$SUDO ${SSHD} -T -o "rekeylimit $size $time" -f $OBJ/sshd_proxy | \
- awk '/rekeylimit/{print $2}'`
- s=`$SUDO ${SSHD} -T -o "rekeylimit $size $time" -f $OBJ/sshd_proxy | \
+ s=`${SSH} -G -o "rekeylimit default $time" -F $OBJ/ssh_proxy host | \
awk '/rekeylimit/{print $3}'`
-
- if [ "$bytes" != "$b" ]; then
- fatal "rekeylimit size: expected $bytes bytes got $b"
- fi
if [ "$seconds" != "$s" ]; then
fatal "rekeylimit time: expected $time seconds got $s"
fi
- done
done
-rm -f ${COPY} ${DATA}
+rm -f ${COPY} ${COPY2} ${DATA}
diff --git a/regress/unittests/kex/Makefile b/regress/unittests/kex/Makefile
index 3c89840..ca4f0ee 100644
--- a/regress/unittests/kex/Makefile
+++ b/regress/unittests/kex/Makefile
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.15 2024/05/19 19:10:01 anton Exp $
+# $OpenBSD: Makefile,v 1.16 2024/09/09 03:13:39 djm Exp $
PROG=test_kex
SRCS=tests.c test_kex.c test_proposal.c
@@ -25,6 +25,7 @@ SRCS+= kexc25519.c
SRCS+= smult_curve25519_ref.c
SRCS+= kexgen.c
SRCS+= kexsntrup761x25519.c
+SRCS+= kexmlkem768x25519.c
SRCS+= sntrup761.c
SRCS+= utf8.c
diff --git a/regress/unittests/kex/test_kex.c b/regress/unittests/kex/test_kex.c
index b1161ea..caf8f57 100644
--- a/regress/unittests/kex/test_kex.c
+++ b/regress/unittests/kex/test_kex.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: test_kex.c,v 1.8 2024/03/25 19:28:09 djm Exp $ */
+/* $OpenBSD: test_kex.c,v 1.9 2024/09/09 03:13:39 djm Exp $ */
/*
* Regress test KEX
*
@@ -153,6 +153,7 @@ do_kex_with_key(char *kex, int keytype, int bits)
#endif /* WITH_OPENSSL */
server2->kex->kex[KEX_C25519_SHA256] = kex_gen_server;
server2->kex->kex[KEX_KEM_SNTRUP761X25519_SHA512] = kex_gen_server;
+ server2->kex->kex[KEX_KEM_MLKEM768X25519_SHA256] = kex_gen_server;
server2->kex->load_host_public_key = server->kex->load_host_public_key;
server2->kex->load_host_private_key = server->kex->load_host_private_key;
server2->kex->sign = server->kex->sign;
@@ -207,6 +208,9 @@ kex_tests(void)
do_kex("diffie-hellman-group-exchange-sha1");
do_kex("diffie-hellman-group14-sha1");
do_kex("diffie-hellman-group1-sha1");
+# ifdef USE_MLKEM768X25519
+ do_kex("mlkem768x25519-sha256");
+# endif /* USE_MLKEM768X25519 */
# ifdef USE_SNTRUP761X25519
do_kex("sntrup761x25519-sha512@openssh.com");
# endif /* USE_SNTRUP761X25519 */
diff --git a/regress/unittests/sshkey/common.c b/regress/unittests/sshkey/common.c
index 51b0d92..f325c2a 100644
--- a/regress/unittests/sshkey/common.c
+++ b/regress/unittests/sshkey/common.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: common.c,v 1.5 2021/12/14 21:25:27 deraadt Exp $ */
+/* $OpenBSD: common.c,v 1.6 2024/08/15 00:52:23 djm Exp $ */
/*
* Helpers for key API tests
*
@@ -89,8 +89,8 @@ rsa_n(struct sshkey *k)
const BIGNUM *n = NULL;
ASSERT_PTR_NE(k, NULL);
- ASSERT_PTR_NE(k->rsa, NULL);
- RSA_get0_key(k->rsa, &n, NULL, NULL);
+ ASSERT_PTR_NE(k->pkey, NULL);
+ RSA_get0_key(EVP_PKEY_get0_RSA(k->pkey), &n, NULL, NULL);
return n;
}
@@ -100,8 +100,8 @@ rsa_e(struct sshkey *k)
const BIGNUM *e = NULL;
ASSERT_PTR_NE(k, NULL);
- ASSERT_PTR_NE(k->rsa, NULL);
- RSA_get0_key(k->rsa, NULL, &e, NULL);
+ ASSERT_PTR_NE(k->pkey, NULL);
+ RSA_get0_key(EVP_PKEY_get0_RSA(k->pkey), NULL, &e, NULL);
return e;
}
@@ -111,8 +111,8 @@ rsa_p(struct sshkey *k)
const BIGNUM *p = NULL;
ASSERT_PTR_NE(k, NULL);
- ASSERT_PTR_NE(k->rsa, NULL);
- RSA_get0_factors(k->rsa, &p, NULL);
+ ASSERT_PTR_NE(EVP_PKEY_get0_RSA(k->pkey), NULL);
+ RSA_get0_factors(EVP_PKEY_get0_RSA(k->pkey), &p, NULL);
return p;
}
@@ -122,8 +122,8 @@ rsa_q(struct sshkey *k)
const BIGNUM *q = NULL;
ASSERT_PTR_NE(k, NULL);
- ASSERT_PTR_NE(k->rsa, NULL);
- RSA_get0_factors(k->rsa, NULL, &q);
+ ASSERT_PTR_NE(EVP_PKEY_get0_RSA(k->pkey), NULL);
+ RSA_get0_factors(EVP_PKEY_get0_RSA(k->pkey), NULL, &q);
return q;
}
diff --git a/regress/unittests/sshkey/test_file.c b/regress/unittests/sshkey/test_file.c
index 4528405..3babe60 100644
--- a/regress/unittests/sshkey/test_file.c
+++ b/regress/unittests/sshkey/test_file.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: test_file.c,v 1.11 2024/01/11 01:45:58 djm Exp $ */
+/* $OpenBSD: test_file.c,v 1.12 2024/08/15 00:52:23 djm Exp $ */
/*
* Regress test for sshkey.h key management API
*
@@ -271,11 +271,12 @@ sshkey_file_tests(void)
#ifndef OPENSSL_IS_BORINGSSL /* lacks EC_POINT_point2bn() */
a = load_bignum("ecdsa_1.param.priv");
b = load_bignum("ecdsa_1.param.pub");
- c = EC_POINT_point2bn(EC_KEY_get0_group(k1->ecdsa),
- EC_KEY_get0_public_key(k1->ecdsa), POINT_CONVERSION_UNCOMPRESSED,
- NULL, NULL);
+ c = EC_POINT_point2bn(EC_KEY_get0_group(EVP_PKEY_get0_EC_KEY(k1->pkey)),
+ EC_KEY_get0_public_key(EVP_PKEY_get0_EC_KEY(k1->pkey)),
+ POINT_CONVERSION_UNCOMPRESSED, NULL, NULL);
ASSERT_PTR_NE(c, NULL);
- ASSERT_BIGNUM_EQ(EC_KEY_get0_private_key(k1->ecdsa), a);
+ ASSERT_BIGNUM_EQ(
+ EC_KEY_get0_private_key(EVP_PKEY_get0_EC_KEY(k1->pkey)), a);
ASSERT_BIGNUM_EQ(b, c);
BN_free(a);
BN_free(b);
diff --git a/regress/unittests/sshkey/test_sshkey.c b/regress/unittests/sshkey/test_sshkey.c
index c1cbb11..5bf4b65 100644
--- a/regress/unittests/sshkey/test_sshkey.c
+++ b/regress/unittests/sshkey/test_sshkey.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: test_sshkey.c,v 1.24 2024/01/11 01:45:58 djm Exp $ */
+/* $OpenBSD: test_sshkey.c,v 1.25 2024/08/15 00:52:23 djm Exp $ */
/*
* Regress test for sshkey.h key management API
*
@@ -204,7 +204,7 @@ sshkey_tests(void)
TEST_START("new/free KEY_RSA");
k1 = sshkey_new(KEY_RSA);
ASSERT_PTR_NE(k1, NULL);
- ASSERT_PTR_NE(k1->rsa, NULL);
+ ASSERT_PTR_NE(k1->pkey, NULL);
sshkey_free(k1);
TEST_DONE();
@@ -221,7 +221,7 @@ sshkey_tests(void)
TEST_START("new/free KEY_ECDSA");
k1 = sshkey_new(KEY_ECDSA);
ASSERT_PTR_NE(k1, NULL);
- ASSERT_PTR_EQ(k1->ecdsa, NULL); /* Can't allocate without NID */
+ ASSERT_PTR_EQ(k1->pkey, NULL); /* Can't allocate without NID */
sshkey_free(k1);
TEST_DONE();
#endif
@@ -270,7 +270,7 @@ sshkey_tests(void)
SSH_ERR_KEY_LENGTH);
ASSERT_INT_EQ(sshkey_generate(KEY_RSA, 1024, &kr), 0);
ASSERT_PTR_NE(kr, NULL);
- ASSERT_PTR_NE(kr->rsa, NULL);
+ ASSERT_PTR_NE(EVP_PKEY_get0_RSA(kr->pkey), NULL);
ASSERT_PTR_NE(rsa_n(kr), NULL);
ASSERT_PTR_NE(rsa_e(kr), NULL);
ASSERT_PTR_NE(rsa_p(kr), NULL);
@@ -291,9 +291,11 @@ sshkey_tests(void)
TEST_START("generate KEY_ECDSA");
ASSERT_INT_EQ(sshkey_generate(KEY_ECDSA, 256, &ke), 0);
ASSERT_PTR_NE(ke, NULL);
- ASSERT_PTR_NE(ke->ecdsa, NULL);
- ASSERT_PTR_NE(EC_KEY_get0_public_key(ke->ecdsa), NULL);
- ASSERT_PTR_NE(EC_KEY_get0_private_key(ke->ecdsa), NULL);
+ ASSERT_PTR_NE(EVP_PKEY_get0_EC_KEY(ke->pkey), NULL);
+ ASSERT_PTR_NE(EC_KEY_get0_public_key(EVP_PKEY_get0_EC_KEY(ke->pkey)),
+ NULL);
+ ASSERT_PTR_NE(EC_KEY_get0_private_key(EVP_PKEY_get0_EC_KEY(ke->pkey)),
+ NULL);
TEST_DONE();
#endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
@@ -312,7 +314,7 @@ sshkey_tests(void)
ASSERT_PTR_NE(k1, NULL);
ASSERT_PTR_NE(kr, k1);
ASSERT_INT_EQ(k1->type, KEY_RSA);
- ASSERT_PTR_NE(k1->rsa, NULL);
+ ASSERT_PTR_NE(EVP_PKEY_get0_RSA(k1->pkey), NULL);
ASSERT_PTR_NE(rsa_n(k1), NULL);
ASSERT_PTR_NE(rsa_e(k1), NULL);
ASSERT_PTR_EQ(rsa_p(k1), NULL);
@@ -346,10 +348,12 @@ sshkey_tests(void)
ASSERT_PTR_NE(k1, NULL);
ASSERT_PTR_NE(ke, k1);
ASSERT_INT_EQ(k1->type, KEY_ECDSA);
- ASSERT_PTR_NE(k1->ecdsa, NULL);
+ ASSERT_PTR_NE(EVP_PKEY_get0_EC_KEY(k1->pkey), NULL);
ASSERT_INT_EQ(k1->ecdsa_nid, ke->ecdsa_nid);
- ASSERT_PTR_NE(EC_KEY_get0_public_key(ke->ecdsa), NULL);
- ASSERT_PTR_EQ(EC_KEY_get0_private_key(k1->ecdsa), NULL);
+ ASSERT_PTR_NE(EC_KEY_get0_public_key(EVP_PKEY_get0_EC_KEY(ke->pkey)),
+ NULL);
+ ASSERT_PTR_EQ(EC_KEY_get0_private_key(EVP_PKEY_get0_EC_KEY(k1->pkey)),
+ NULL);
TEST_DONE();
TEST_START("equal KEY_ECDSA/demoted KEY_ECDSA");
diff --git a/regress/unittests/test_helper/fuzz.c b/regress/unittests/test_helper/fuzz.c
index 78b3665..9995b26 100644
--- a/regress/unittests/test_helper/fuzz.c
+++ b/regress/unittests/test_helper/fuzz.c
@@ -214,7 +214,7 @@ siginfo(int unused __attribute__((__unused__)))
struct fuzz *
fuzz_begin(u_int strategies, const void *p, size_t l)
{
- struct fuzz *ret = calloc(sizeof(*ret), 1);
+ struct fuzz *ret = calloc(1, sizeof(*ret));
assert(p != NULL);
assert(ret != NULL);
diff --git a/servconf.c b/servconf.c
index 5b32f0b..89b8413 100644
--- a/servconf.c
+++ b/servconf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: servconf.c,v 1.411 2024/06/12 22:36:00 djm Exp $ */
+/* $OpenBSD: servconf.c,v 1.418 2024/09/15 03:09:44 djm Exp $ */
/*
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
* All rights reserved
@@ -178,6 +178,7 @@ initialize_server_options(ServerOptions *options)
options->per_source_penalty.penalty_authfail = -1;
options->per_source_penalty.penalty_noauth = -1;
options->per_source_penalty.penalty_grace = -1;
+ options->per_source_penalty.penalty_refuseconnection = -1;
options->per_source_penalty.penalty_max = -1;
options->per_source_penalty.penalty_min = -1;
options->max_authtries = -1;
@@ -213,6 +214,7 @@ initialize_server_options(ServerOptions *options)
options->num_channel_timeouts = 0;
options->unused_connection_timeout = -1;
options->sshd_session_path = NULL;
+ options->refuse_connection = -1;
}
/* Returns 1 if a string option is unset or set to "none" or 0 otherwise. */
@@ -434,11 +436,13 @@ fill_default_server_options(ServerOptions *options)
if (options->per_source_penalty.penalty_crash == -1)
options->per_source_penalty.penalty_crash = 90;
if (options->per_source_penalty.penalty_grace == -1)
- options->per_source_penalty.penalty_grace = 20;
+ options->per_source_penalty.penalty_grace = 10;
if (options->per_source_penalty.penalty_authfail == -1)
options->per_source_penalty.penalty_authfail = 5;
if (options->per_source_penalty.penalty_noauth == -1)
options->per_source_penalty.penalty_noauth = 1;
+ if (options->per_source_penalty.penalty_refuseconnection == -1)
+ options->per_source_penalty.penalty_refuseconnection = 10;
if (options->per_source_penalty.penalty_min == -1)
options->per_source_penalty.penalty_min = 15;
if (options->per_source_penalty.penalty_max == -1)
@@ -489,6 +493,8 @@ fill_default_server_options(ServerOptions *options)
options->unused_connection_timeout = 0;
if (options->sshd_session_path == NULL)
options->sshd_session_path = xstrdup(_PATH_SSHD_SESSION);
+ if (options->refuse_connection == -1)
+ options->refuse_connection = 0;
assemble_algorithms(options);
@@ -571,7 +577,7 @@ typedef enum {
sAllowStreamLocalForwarding, sFingerprintHash, sDisableForwarding,
sExposeAuthInfo, sRDomain, sPubkeyAuthOptions, sSecurityKeyProvider,
sRequiredRSASize, sChannelTimeout, sUnusedConnectionTimeout,
- sSshdSessionPath,
+ sSshdSessionPath, sRefuseConnection,
sDeprecated, sIgnore, sUnsupported
} ServerOpCodes;
@@ -739,6 +745,7 @@ static struct {
{ "channeltimeout", sChannelTimeout, SSHCFG_ALL },
{ "unusedconnectiontimeout", sUnusedConnectionTimeout, SSHCFG_ALL },
{ "sshdsessionpath", sSshdSessionPath, SSHCFG_GLOBAL },
+ { "refuseconnection", sRefuseConnection, SSHCFG_ALL },
{ NULL, sBadOption, 0 }
};
@@ -1022,43 +1029,57 @@ match_test_missing_fatal(const char *criteria, const char *attrib)
* not match.
*/
static int
-match_cfg_line(char **condition, int line, struct connection_info *ci)
+match_cfg_line(const char *full_line, int *acp, char ***avp,
+ int line, struct connection_info *ci)
{
int result = 1, attributes = 0, port;
- char *arg, *attrib, *cp = *condition;
+ char *arg, *attrib;
if (ci == NULL)
- debug3("checking syntax for 'Match %s'", cp);
- else
- debug3("checking match for '%s' user %s host %s addr %s "
- "laddr %s lport %d", cp, ci->user ? ci->user : "(null)",
+ debug3("checking syntax for 'Match %s'", full_line);
+ else {
+ debug3("checking match for '%s' user %s%s host %s addr %s "
+ "laddr %s lport %d", full_line,
+ ci->user ? ci->user : "(null)",
+ ci->user_invalid ? " (invalid)" : "",
ci->host ? ci->host : "(null)",
ci->address ? ci->address : "(null)",
ci->laddress ? ci->laddress : "(null)", ci->lport);
+ }
- while ((attrib = strdelim(&cp)) && *attrib != '\0') {
+ while ((attrib = argv_next(acp, avp)) != NULL) {
/* Terminate on comment */
if (*attrib == '#') {
- cp = NULL; /* mark all arguments consumed */
+ argv_consume(acp); /* mark all arguments consumed */
break;
}
arg = NULL;
attributes++;
/* Criterion "all" has no argument and must appear alone */
if (strcasecmp(attrib, "all") == 0) {
- if (attributes > 1 || ((arg = strdelim(&cp)) != NULL &&
+ if (attributes > 1 ||
+ ((arg = argv_next(acp, avp)) != NULL &&
*arg != '\0' && *arg != '#')) {
error("'all' cannot be combined with other "
"Match attributes");
return -1;
}
if (arg != NULL && *arg == '#')
- cp = NULL; /* mark all arguments consumed */
- *condition = cp;
+ argv_consume(acp); /* consume remaining args */
return 1;
}
+ /* Criterion "invalid-user" also has no argument */
+ if (strcasecmp(attrib, "invalid-user") == 0) {
+ if (ci == NULL)
+ continue;
+ if (ci->user_invalid == 0)
+ result = 0;
+ else
+ debug("matched invalid-user at line %d", line);
+ continue;
+ }
/* All other criteria require an argument */
- if ((arg = strdelim(&cp)) == NULL ||
+ if ((arg = argv_next(acp, avp)) == NULL ||
*arg == '\0' || *arg == '#') {
error("Missing Match criteria for %s", attrib);
return -1;
@@ -1189,7 +1210,6 @@ match_cfg_line(char **condition, int line, struct connection_info *ci)
}
if (ci != NULL)
debug3("match %sfound", result ? "" : "not ");
- *condition = cp;
return result;
}
@@ -1933,6 +1953,7 @@ process_server_config_line_depth(ServerOptions *options, char *line,
xasprintf(&options->subsystem_args[options->num_subsystems],
"%s%s%s", arg, *arg2 == '\0' ? "" : " ", arg2);
free(arg2);
+ free(arg);
argv_consume(&ac);
options->num_subsystems++;
break;
@@ -2047,6 +2068,9 @@ process_server_config_line_depth(ServerOptions *options, char *line,
} else if (strncmp(arg, "grace-exceeded:", 15) == 0) {
p = arg + 15;
intptr = &options->per_source_penalty.penalty_grace;
+ } else if (strncmp(arg, "refuseconnection:", 17) == 0) {
+ p = arg + 17;
+ intptr = &options->per_source_penalty.penalty_refuseconnection;
} else if (strncmp(arg, "max:", 4) == 0) {
p = arg + 4;
intptr = &options->per_source_penalty.penalty_max;
@@ -2325,7 +2349,7 @@ process_server_config_line_depth(ServerOptions *options, char *line,
if (cmdline)
fatal("Match directive not supported as a command-line "
"option");
- value = match_cfg_line(&str, linenum,
+ value = match_cfg_line(str, &ac, &av, linenum,
(*inc_flags & SSHCFG_NEVERMATCH ? NULL : connectinfo));
if (value < 0)
fatal("%s line %d: Bad Match condition", filename,
@@ -2336,12 +2360,6 @@ process_server_config_line_depth(ServerOptions *options, char *line,
* match block.
*/
*inc_flags &= ~SSHCFG_MATCH_ONLY;
- /*
- * If match_cfg_line() didn't consume all its arguments then
- * arrange for the extra arguments check below to fail.
- */
- if (str == NULL || *str == '\0')
- argv_consume(&ac);
break;
case sPermitListen:
@@ -2658,6 +2676,11 @@ process_server_config_line_depth(ServerOptions *options, char *line,
charptr = &options->sshd_session_path;
goto parse_filename;
+ case sRefuseConnection:
+ intptr = &options->refuse_connection;
+ multistate_ptr = multistate_flag;
+ goto parse_multistate;
+
case sDeprecated:
case sIgnore:
case sUnsupported:
@@ -2772,6 +2795,8 @@ int parse_server_match_testspec(struct connection_info *ci, char *spec)
" specification %s\n", p+6, p);
return -1;
}
+ } else if (strcmp(p, "invalid-user") == 0) {
+ ci->user_invalid = 1;
} else {
fprintf(stderr, "Invalid test mode specification %s\n",
p);
@@ -2873,6 +2898,7 @@ copy_set_server_options(ServerOptions *dst, ServerOptions *src, int preauth)
M_CP_INTOPT(log_level);
M_CP_INTOPT(required_rsa_size);
M_CP_INTOPT(unused_connection_timeout);
+ M_CP_INTOPT(refuse_connection);
/*
* The bind_mask is a mode_t that may be unsigned, so we can't use
@@ -3203,6 +3229,7 @@ dump_config(ServerOptions *o)
dump_cfg_fmtint(sStreamLocalBindUnlink, o->fwd_opts.streamlocal_bind_unlink);
dump_cfg_fmtint(sFingerprintHash, o->fingerprint_hash);
dump_cfg_fmtint(sExposeAuthInfo, o->expose_userauth_info);
+ dump_cfg_fmtint(sRefuseConnection, o->refuse_connection);
/* string arguments */
dump_cfg_string(sPidFile, o->pid_file);
@@ -3325,12 +3352,14 @@ dump_config(ServerOptions *o)
if (o->per_source_penalty.enabled) {
printf("persourcepenalties crash:%d authfail:%d noauth:%d "
- "grace-exceeded:%d max:%d min:%d max-sources4:%d "
- "max-sources6:%d overflow:%s overflow6:%s\n",
+ "grace-exceeded:%d refuseconnection:%d max:%d min:%d "
+ "max-sources4:%d max-sources6:%d "
+ "overflow:%s overflow6:%s\n",
o->per_source_penalty.penalty_crash,
o->per_source_penalty.penalty_authfail,
o->per_source_penalty.penalty_noauth,
o->per_source_penalty.penalty_grace,
+ o->per_source_penalty.penalty_refuseconnection,
o->per_source_penalty.penalty_max,
o->per_source_penalty.penalty_min,
o->per_source_penalty.max_sources4,
diff --git a/servconf.h b/servconf.h
index 22b158d..5089bc9 100644
--- a/servconf.h
+++ b/servconf.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: servconf.h,v 1.165 2024/06/12 22:36:00 djm Exp $ */
+/* $OpenBSD: servconf.h,v 1.168 2024/09/15 01:18:26 djm Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -77,6 +77,7 @@ struct per_source_penalty {
int penalty_grace;
int penalty_authfail;
int penalty_noauth;
+ int penalty_refuseconnection;
int penalty_max;
int penalty_min;
};
@@ -248,11 +249,14 @@ typedef struct {
int unused_connection_timeout;
char *sshd_session_path;
+
+ int refuse_connection;
} ServerOptions;
/* Information about the incoming connection as used by Match */
struct connection_info {
const char *user;
+ int user_invalid;
const char *host; /* possibly resolved hostname */
const char *address; /* remote address */
const char *laddress; /* local address */
diff --git a/sntrup761.c b/sntrup761.c
index 57368bd..123d013 100644
--- a/sntrup761.c
+++ b/sntrup761.c
@@ -1,4 +1,5 @@
-/* $OpenBSD: sntrup761.c,v 1.6 2023/01/11 02:13:52 djm Exp $ */
+
+/* $OpenBSD: sntrup761.c,v 1.8 2024/09/16 05:37:05 djm Exp $ */
/*
* Public Domain, Authors:
@@ -15,6 +16,8 @@
#include <string.h>
#include "crypto_api.h"
+#define crypto_declassify(x, y) do {} while (0)
+
#define int8 crypto_int8
#define uint8 crypto_uint8
#define int16 crypto_int16
@@ -23,1251 +26,2134 @@
#define uint32 crypto_uint32
#define int64 crypto_int64
#define uint64 crypto_uint64
+extern volatile crypto_int16 crypto_int16_optblocker;
+extern volatile crypto_int32 crypto_int32_optblocker;
+extern volatile crypto_int64 crypto_int64_optblocker;
-/* from supercop-20201130/crypto_sort/int32/portable4/int32_minmax.inc */
-#define int32_MINMAX(a,b) \
-do { \
- int64_t ab = (int64_t)b ^ (int64_t)a; \
- int64_t c = (int64_t)b - (int64_t)a; \
- c ^= ab & (c ^ b); \
- c >>= 31; \
- c &= ab; \
- a ^= c; \
- b ^= c; \
-} while(0)
+/* from supercop-20240808/cryptoint/crypto_int16.h */
+/* auto-generated: cd cryptoint; ./autogen */
+/* cryptoint 20240806 */
-/* from supercop-20201130/crypto_sort/int32/portable4/sort.c */
+#ifndef crypto_int16_h
+#define crypto_int16_h
+#define crypto_int16 int16_t
+#define crypto_int16_unsigned uint16_t
-static void crypto_sort_int32(void *array,long long n)
-{
- long long top,p,q,r,i,j;
- int32 *x = array;
- if (n < 2) return;
- top = 1;
- while (top < n - top) top += top;
-
- for (p = top;p >= 1;p >>= 1) {
- i = 0;
- while (i + 2 * p <= n) {
- for (j = i;j < i + p;++j)
- int32_MINMAX(x[j],x[j+p]);
- i += 2 * p;
- }
- for (j = i;j < n - p;++j)
- int32_MINMAX(x[j],x[j+p]);
- i = 0;
- j = 0;
- for (q = top;q > p;q >>= 1) {
- if (j != i) for (;;) {
- if (j == n - q) goto done;
- int32 a = x[j + p];
- for (r = q;r > p;r >>= 1)
- int32_MINMAX(a,x[j + r]);
- x[j + p] = a;
- ++j;
- if (j == i + p) {
- i += 2 * p;
- break;
- }
- }
- while (i + p <= n - q) {
- for (j = i;j < i + p;++j) {
- int32 a = x[j + p];
- for (r = q;r > p;r >>= 1)
- int32_MINMAX(a,x[j+r]);
- x[j + p] = a;
- }
- i += 2 * p;
- }
- /* now i + p > n - q */
- j = i;
- while (j < n - q) {
- int32 a = x[j + p];
- for (r = q;r > p;r >>= 1)
- int32_MINMAX(a,x[j+r]);
- x[j + p] = a;
- ++j;
- }
-
- done: ;
- }
- }
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_load(const unsigned char *crypto_int16_s) {
+ crypto_int16 crypto_int16_z = 0;
+ crypto_int16_z |= ((crypto_int16) (*crypto_int16_s++)) << 0;
+ crypto_int16_z |= ((crypto_int16) (*crypto_int16_s++)) << 8;
+ return crypto_int16_z;
}
-/* from supercop-20201130/crypto_sort/uint32/useint32/sort.c */
-
-/* can save time by vectorizing xor loops */
-/* can save time by integrating xor loops with int32_sort */
-
-static void crypto_sort_uint32(void *array,long long n)
-{
- crypto_uint32 *x = array;
- long long j;
- for (j = 0;j < n;++j) x[j] ^= 0x80000000;
- crypto_sort_int32(array,n);
- for (j = 0;j < n;++j) x[j] ^= 0x80000000;
+__attribute__((unused))
+static inline
+void crypto_int16_store(unsigned char *crypto_int16_s,crypto_int16 crypto_int16_x) {
+ *crypto_int16_s++ = crypto_int16_x >> 0;
+ *crypto_int16_s++ = crypto_int16_x >> 8;
}
-/* from supercop-20201130/crypto_kem/sntrup761/ref/uint32.c */
-
-/*
-CPU division instruction typically takes time depending on x.
-This software is designed to take time independent of x.
-Time still varies depending on m; user must ensure that m is constant.
-Time also varies on CPUs where multiplication is variable-time.
-There could be more CPU issues.
-There could also be compiler issues.
-*/
-
-static void uint32_divmod_uint14(uint32 *q,uint16 *r,uint32 x,uint16 m)
-{
- uint32 v = 0x80000000;
- uint32 qpart;
- uint32 mask;
-
- v /= m;
-
- /* caller guarantees m > 0 */
- /* caller guarantees m < 16384 */
- /* vm <= 2^31 <= vm+m-1 */
- /* xvm <= 2^31 x <= xvm+x(m-1) */
-
- *q = 0;
-
- qpart = (x*(uint64)v)>>31;
- /* 2^31 qpart <= xv <= 2^31 qpart + 2^31-1 */
- /* 2^31 qpart m <= xvm <= 2^31 qpart m + (2^31-1)m */
- /* 2^31 qpart m <= 2^31 x <= 2^31 qpart m + (2^31-1)m + x(m-1) */
- /* 0 <= 2^31 newx <= (2^31-1)m + x(m-1) */
- /* 0 <= newx <= (1-1/2^31)m + x(m-1)/2^31 */
- /* 0 <= newx <= (1-1/2^31)(2^14-1) + (2^32-1)((2^14-1)-1)/2^31 */
-
- x -= qpart*m; *q += qpart;
- /* x <= 49146 */
-
- qpart = (x*(uint64)v)>>31;
- /* 0 <= newx <= (1-1/2^31)m + x(m-1)/2^31 */
- /* 0 <= newx <= m + 49146(2^14-1)/2^31 */
- /* 0 <= newx <= m + 0.4 */
- /* 0 <= newx <= m */
-
- x -= qpart*m; *q += qpart;
- /* x <= m */
-
- x -= m; *q += 1;
- mask = -(x>>31);
- x += mask&(uint32)m; *q += mask;
- /* x < m */
-
- *r = x;
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_negative_mask(crypto_int16 crypto_int16_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("sarw $15,%0" : "+r"(crypto_int16_x) : : "cc");
+ return crypto_int16_x;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int16 crypto_int16_y;
+ __asm__ ("sbfx %w0,%w1,15,1" : "=r"(crypto_int16_y) : "r"(crypto_int16_x) : );
+ return crypto_int16_y;
+#else
+ crypto_int16_x >>= 16-6;
+ crypto_int16_x ^= crypto_int16_optblocker;
+ crypto_int16_x >>= 5;
+ return crypto_int16_x;
+#endif
}
-
-static uint16 uint32_mod_uint14(uint32 x,uint16 m)
-{
- uint32 q;
- uint16 r;
- uint32_divmod_uint14(&q,&r,x,m);
- return r;
+__attribute__((unused))
+static inline
+crypto_int16_unsigned crypto_int16_unsigned_topbit_01(crypto_int16_unsigned crypto_int16_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("shrw $15,%0" : "+r"(crypto_int16_x) : : "cc");
+ return crypto_int16_x;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int16 crypto_int16_y;
+ __asm__ ("ubfx %w0,%w1,15,1" : "=r"(crypto_int16_y) : "r"(crypto_int16_x) : );
+ return crypto_int16_y;
+#else
+ crypto_int16_x >>= 16-6;
+ crypto_int16_x ^= crypto_int16_optblocker;
+ crypto_int16_x >>= 5;
+ return crypto_int16_x;
+#endif
}
-/* from supercop-20201130/crypto_kem/sntrup761/ref/int32.c */
-
-static void int32_divmod_uint14(int32 *q,uint16 *r,int32 x,uint16 m)
-{
- uint32 uq,uq2;
- uint16 ur,ur2;
- uint32 mask;
-
- uint32_divmod_uint14(&uq,&ur,0x80000000+(uint32)x,m);
- uint32_divmod_uint14(&uq2,&ur2,0x80000000,m);
- ur -= ur2; uq -= uq2;
- mask = -(uint32)(ur>>15);
- ur += mask&m; uq += mask;
- *r = ur; *q = uq;
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_negative_01(crypto_int16 crypto_int16_x) {
+ return crypto_int16_unsigned_topbit_01(crypto_int16_x);
}
-
-static uint16 int32_mod_uint14(int32 x,uint16 m)
-{
- int32 q;
- uint16 r;
- int32_divmod_uint14(&q,&r,x,m);
- return r;
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_topbit_mask(crypto_int16 crypto_int16_x) {
+ return crypto_int16_negative_mask(crypto_int16_x);
}
-/* from supercop-20201130/crypto_kem/sntrup761/ref/paramsmenu.h */
-/* pick one of these three: */
-#define SIZE761
-#undef SIZE653
-#undef SIZE857
-
-/* pick one of these two: */
-#define SNTRUP /* Streamlined NTRU Prime */
-#undef LPR /* NTRU LPRime */
-
-/* from supercop-20201130/crypto_kem/sntrup761/ref/params.h */
-#ifndef params_H
-#define params_H
-
-/* menu of parameter choices: */
-
-
-/* what the menu means: */
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_topbit_01(crypto_int16 crypto_int16_x) {
+ return crypto_int16_unsigned_topbit_01(crypto_int16_x);
+}
-#if defined(SIZE761)
-#define p 761
-#define q 4591
-#define Rounded_bytes 1007
-#ifndef LPR
-#define Rq_bytes 1158
-#define w 286
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_bottombit_mask(crypto_int16 crypto_int16_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("andw $1,%0" : "+r"(crypto_int16_x) : : "cc");
+ return -crypto_int16_x;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int16 crypto_int16_y;
+ __asm__ ("sbfx %w0,%w1,0,1" : "=r"(crypto_int16_y) : "r"(crypto_int16_x) : );
+ return crypto_int16_y;
#else
-#define w 250
-#define tau0 2156
-#define tau1 114
-#define tau2 2007
-#define tau3 287
+ crypto_int16_x &= 1 ^ crypto_int16_optblocker;
+ return -crypto_int16_x;
#endif
+}
-#elif defined(SIZE653)
-#define p 653
-#define q 4621
-#define Rounded_bytes 865
-#ifndef LPR
-#define Rq_bytes 994
-#define w 288
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_bottombit_01(crypto_int16 crypto_int16_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("andw $1,%0" : "+r"(crypto_int16_x) : : "cc");
+ return crypto_int16_x;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int16 crypto_int16_y;
+ __asm__ ("ubfx %w0,%w1,0,1" : "=r"(crypto_int16_y) : "r"(crypto_int16_x) : );
+ return crypto_int16_y;
#else
-#define w 252
-#define tau0 2175
-#define tau1 113
-#define tau2 2031
-#define tau3 290
+ crypto_int16_x &= 1 ^ crypto_int16_optblocker;
+ return crypto_int16_x;
#endif
+}
-#elif defined(SIZE857)
-#define p 857
-#define q 5167
-#define Rounded_bytes 1152
-#ifndef LPR
-#define Rq_bytes 1322
-#define w 322
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_bitinrangepublicpos_mask(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_s) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("sarw %%cl,%0" : "+r"(crypto_int16_x) : "c"(crypto_int16_s) : "cc");
+#elif defined(__GNUC__) && defined(__aarch64__)
+ __asm__ ("sxth %w0,%w0\n asr %w0,%w0,%w1" : "+&r"(crypto_int16_x) : "r"(crypto_int16_s) : );
#else
-#define w 281
-#define tau0 2433
-#define tau1 101
-#define tau2 2265
-#define tau3 324
+ crypto_int16_x >>= crypto_int16_s ^ crypto_int16_optblocker;
#endif
+ return crypto_int16_bottombit_mask(crypto_int16_x);
+}
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_bitinrangepublicpos_01(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_s) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("sarw %%cl,%0" : "+r"(crypto_int16_x) : "c"(crypto_int16_s) : "cc");
+#elif defined(__GNUC__) && defined(__aarch64__)
+ __asm__ ("sxth %w0,%w0\n asr %w0,%w0,%w1" : "+&r"(crypto_int16_x) : "r"(crypto_int16_s) : );
#else
-#error "no parameter set defined"
+ crypto_int16_x >>= crypto_int16_s ^ crypto_int16_optblocker;
#endif
+ return crypto_int16_bottombit_01(crypto_int16_x);
+}
-#ifdef LPR
-#define I 256
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_shlmod(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_s) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int16_s &= 15;
+ __asm__ ("shlw %%cl,%0" : "+r"(crypto_int16_x) : "c"(crypto_int16_s) : "cc");
+#elif defined(__GNUC__) && defined(__aarch64__)
+ __asm__ ("and %w0,%w0,15\n and %w1,%w1,65535\n lsl %w1,%w1,%w0" : "+&r"(crypto_int16_s), "+r"(crypto_int16_x) : : );
+#else
+ int crypto_int16_k, crypto_int16_l;
+ for (crypto_int16_l = 0,crypto_int16_k = 1;crypto_int16_k < 16;++crypto_int16_l,crypto_int16_k *= 2)
+ crypto_int16_x ^= (crypto_int16_x ^ (crypto_int16_x << crypto_int16_k)) & crypto_int16_bitinrangepublicpos_mask(crypto_int16_s,crypto_int16_l);
#endif
+ return crypto_int16_x;
+}
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_shrmod(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_s) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int16_s &= 15;
+ __asm__ ("sarw %%cl,%0" : "+r"(crypto_int16_x) : "c"(crypto_int16_s) : "cc");
+#elif defined(__GNUC__) && defined(__aarch64__)
+ __asm__ ("and %w0,%w0,15\n sxth %w1,%w1\n asr %w1,%w1,%w0" : "+&r"(crypto_int16_s), "+r"(crypto_int16_x) : : );
+#else
+ int crypto_int16_k, crypto_int16_l;
+ for (crypto_int16_l = 0,crypto_int16_k = 1;crypto_int16_k < 16;++crypto_int16_l,crypto_int16_k *= 2)
+ crypto_int16_x ^= (crypto_int16_x ^ (crypto_int16_x >> crypto_int16_k)) & crypto_int16_bitinrangepublicpos_mask(crypto_int16_s,crypto_int16_l);
#endif
-
-/* from supercop-20201130/crypto_kem/sntrup761/ref/Decode.h */
-#ifndef Decode_H
-#define Decode_H
-
-
-/* Decode(R,s,M,len) */
-/* assumes 0 < M[i] < 16384 */
-/* produces 0 <= R[i] < M[i] */
-
+ return crypto_int16_x;
+}
+
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_bitmod_mask(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_s) {
+ crypto_int16_x = crypto_int16_shrmod(crypto_int16_x,crypto_int16_s);
+ return crypto_int16_bottombit_mask(crypto_int16_x);
+}
+
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_bitmod_01(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_s) {
+ crypto_int16_x = crypto_int16_shrmod(crypto_int16_x,crypto_int16_s);
+ return crypto_int16_bottombit_01(crypto_int16_x);
+}
+
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_nonzero_mask(crypto_int16 crypto_int16_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int16 crypto_int16_q,crypto_int16_z;
+ __asm__ ("xorw %0,%0\n movw $-1,%1\n testw %2,%2\n cmovnew %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x) : "cc");
+ return crypto_int16_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int16 crypto_int16_z;
+ __asm__ ("tst %w1,65535\n csetm %w0,ne" : "=r"(crypto_int16_z) : "r"(crypto_int16_x) : "cc");
+ return crypto_int16_z;
+#else
+ crypto_int16_x |= -crypto_int16_x;
+ return crypto_int16_negative_mask(crypto_int16_x);
#endif
-
-/* from supercop-20201130/crypto_kem/sntrup761/ref/Decode.c */
-
-static void Decode(uint16 *out,const unsigned char *S,const uint16 *M,long long len)
-{
- if (len == 1) {
- if (M[0] == 1)
- *out = 0;
- else if (M[0] <= 256)
- *out = uint32_mod_uint14(S[0],M[0]);
- else
- *out = uint32_mod_uint14(S[0]+(((uint16)S[1])<<8),M[0]);
- }
- if (len > 1) {
- uint16 R2[(len+1)/2];
- uint16 M2[(len+1)/2];
- uint16 bottomr[len/2];
- uint32 bottomt[len/2];
- long long i;
- for (i = 0;i < len-1;i += 2) {
- uint32 m = M[i]*(uint32) M[i+1];
- if (m > 256*16383) {
- bottomt[i/2] = 256*256;
- bottomr[i/2] = S[0]+256*S[1];
- S += 2;
- M2[i/2] = (((m+255)>>8)+255)>>8;
- } else if (m >= 16384) {
- bottomt[i/2] = 256;
- bottomr[i/2] = S[0];
- S += 1;
- M2[i/2] = (m+255)>>8;
- } else {
- bottomt[i/2] = 1;
- bottomr[i/2] = 0;
- M2[i/2] = m;
- }
- }
- if (i < len)
- M2[i/2] = M[i];
- Decode(R2,S,M2,(len+1)/2);
- for (i = 0;i < len-1;i += 2) {
- uint32 r = bottomr[i/2];
- uint32 r1;
- uint16 r0;
- r += bottomt[i/2]*R2[i/2];
- uint32_divmod_uint14(&r1,&r0,r,M[i]);
- r1 = uint32_mod_uint14(r1,M[i+1]); /* only needed for invalid inputs */
- *out++ = r0;
- *out++ = r1;
- }
- if (i < len)
- *out++ = R2[i/2];
- }
}
-/* from supercop-20201130/crypto_kem/sntrup761/ref/Encode.h */
-#ifndef Encode_H
-#define Encode_H
-
-
-/* Encode(s,R,M,len) */
-/* assumes 0 <= R[i] < M[i] < 16384 */
-
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_nonzero_01(crypto_int16 crypto_int16_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int16 crypto_int16_q,crypto_int16_z;
+ __asm__ ("xorw %0,%0\n movw $1,%1\n testw %2,%2\n cmovnew %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x) : "cc");
+ return crypto_int16_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int16 crypto_int16_z;
+ __asm__ ("tst %w1,65535\n cset %w0,ne" : "=r"(crypto_int16_z) : "r"(crypto_int16_x) : "cc");
+ return crypto_int16_z;
+#else
+ crypto_int16_x |= -crypto_int16_x;
+ return crypto_int16_unsigned_topbit_01(crypto_int16_x);
#endif
-
-/* from supercop-20201130/crypto_kem/sntrup761/ref/Encode.c */
-
-/* 0 <= R[i] < M[i] < 16384 */
-static void Encode(unsigned char *out,const uint16 *R,const uint16 *M,long long len)
-{
- if (len == 1) {
- uint16 r = R[0];
- uint16 m = M[0];
- while (m > 1) {
- *out++ = r;
- r >>= 8;
- m = (m+255)>>8;
- }
- }
- if (len > 1) {
- uint16 R2[(len+1)/2];
- uint16 M2[(len+1)/2];
- long long i;
- for (i = 0;i < len-1;i += 2) {
- uint32 m0 = M[i];
- uint32 r = R[i]+R[i+1]*m0;
- uint32 m = M[i+1]*m0;
- while (m >= 16384) {
- *out++ = r;
- r >>= 8;
- m = (m+255)>>8;
- }
- R2[i/2] = r;
- M2[i/2] = m;
- }
- if (i < len) {
- R2[i/2] = R[i];
- M2[i/2] = M[i];
- }
- Encode(out,R2,M2,(len+1)/2);
- }
}
-/* from supercop-20201130/crypto_kem/sntrup761/ref/kem.c */
-
-#ifdef LPR
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_positive_mask(crypto_int16 crypto_int16_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int16 crypto_int16_q,crypto_int16_z;
+ __asm__ ("xorw %0,%0\n movw $-1,%1\n testw %2,%2\n cmovgw %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x) : "cc");
+ return crypto_int16_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int16 crypto_int16_z;
+ __asm__ ("sxth %w0,%w1\n cmp %w0,0\n csetm %w0,gt" : "=r"(crypto_int16_z) : "r"(crypto_int16_x) : "cc");
+ return crypto_int16_z;
+#else
+ crypto_int16 crypto_int16_z = -crypto_int16_x;
+ crypto_int16_z ^= crypto_int16_x & crypto_int16_z;
+ return crypto_int16_negative_mask(crypto_int16_z);
#endif
-
-
-/* ----- masks */
-
-#ifndef LPR
-
-/* return -1 if x!=0; else return 0 */
-static int int16_nonzero_mask(int16 x)
-{
- uint16 u = x; /* 0, else 1...65535 */
- uint32 v = u; /* 0, else 1...65535 */
- v = -v; /* 0, else 2^32-65535...2^32-1 */
- v >>= 31; /* 0, else 1 */
- return -v; /* 0, else -1 */
}
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_positive_01(crypto_int16 crypto_int16_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int16 crypto_int16_q,crypto_int16_z;
+ __asm__ ("xorw %0,%0\n movw $1,%1\n testw %2,%2\n cmovgw %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x) : "cc");
+ return crypto_int16_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int16 crypto_int16_z;
+ __asm__ ("sxth %w0,%w1\n cmp %w0,0\n cset %w0,gt" : "=r"(crypto_int16_z) : "r"(crypto_int16_x) : "cc");
+ return crypto_int16_z;
+#else
+ crypto_int16 crypto_int16_z = -crypto_int16_x;
+ crypto_int16_z ^= crypto_int16_x & crypto_int16_z;
+ return crypto_int16_unsigned_topbit_01(crypto_int16_z);
#endif
-
-/* return -1 if x<0; otherwise return 0 */
-static int int16_negative_mask(int16 x)
-{
- uint16 u = x;
- u >>= 15;
- return -(int) u;
- /* alternative with gcc -fwrapv: */
- /* x>>15 compiles to CPU's arithmetic right shift */
}
-/* ----- arithmetic mod 3 */
-
-typedef int8 small;
-
-/* F3 is always represented as -1,0,1 */
-/* so ZZ_fromF3 is a no-op */
-
-/* x must not be close to top int16 */
-static small F3_freeze(int16 x)
-{
- return int32_mod_uint14(x+1,3)-1;
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_zero_mask(crypto_int16 crypto_int16_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int16 crypto_int16_q,crypto_int16_z;
+ __asm__ ("xorw %0,%0\n movw $-1,%1\n testw %2,%2\n cmovew %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x) : "cc");
+ return crypto_int16_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int16 crypto_int16_z;
+ __asm__ ("tst %w1,65535\n csetm %w0,eq" : "=r"(crypto_int16_z) : "r"(crypto_int16_x) : "cc");
+ return crypto_int16_z;
+#else
+ return ~crypto_int16_nonzero_mask(crypto_int16_x);
+#endif
}
-/* ----- arithmetic mod q */
-
-#define q12 ((q-1)/2)
-typedef int16 Fq;
-/* always represented as -q12...q12 */
-/* so ZZ_fromFq is a no-op */
-
-/* x must not be close to top int32 */
-static Fq Fq_freeze(int32 x)
-{
- return int32_mod_uint14(x+q12,q)-q12;
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_zero_01(crypto_int16 crypto_int16_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int16 crypto_int16_q,crypto_int16_z;
+ __asm__ ("xorw %0,%0\n movw $1,%1\n testw %2,%2\n cmovew %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x) : "cc");
+ return crypto_int16_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int16 crypto_int16_z;
+ __asm__ ("tst %w1,65535\n cset %w0,eq" : "=r"(crypto_int16_z) : "r"(crypto_int16_x) : "cc");
+ return crypto_int16_z;
+#else
+ return 1-crypto_int16_nonzero_01(crypto_int16_x);
+#endif
}
-#ifndef LPR
-
-static Fq Fq_recip(Fq a1)
-{
- int i = 1;
- Fq ai = a1;
-
- while (i < q-2) {
- ai = Fq_freeze(a1*(int32)ai);
- i += 1;
- }
- return ai;
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_unequal_mask(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int16 crypto_int16_q,crypto_int16_z;
+ __asm__ ("xorw %0,%0\n movw $-1,%1\n cmpw %3,%2\n cmovnew %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
+ return crypto_int16_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int16 crypto_int16_z;
+ __asm__ ("and %w0,%w1,65535\n cmp %w0,%w2,uxth\n csetm %w0,ne" : "=&r"(crypto_int16_z) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
+ return crypto_int16_z;
+#else
+ return crypto_int16_nonzero_mask(crypto_int16_x ^ crypto_int16_y);
+#endif
}
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_unequal_01(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int16 crypto_int16_q,crypto_int16_z;
+ __asm__ ("xorw %0,%0\n movw $1,%1\n cmpw %3,%2\n cmovnew %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
+ return crypto_int16_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int16 crypto_int16_z;
+ __asm__ ("and %w0,%w1,65535\n cmp %w0,%w2,uxth\n cset %w0,ne" : "=&r"(crypto_int16_z) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
+ return crypto_int16_z;
+#else
+ return crypto_int16_nonzero_01(crypto_int16_x ^ crypto_int16_y);
#endif
-
-/* ----- Top and Right */
-
-#ifdef LPR
-#define tau 16
-
-static int8 Top(Fq C)
-{
- return (tau1*(int32)(C+tau0)+16384)>>15;
}
-static Fq Right(int8 T)
-{
- return Fq_freeze(tau3*(int32)T-tau2);
-}
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_equal_mask(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int16 crypto_int16_q,crypto_int16_z;
+ __asm__ ("xorw %0,%0\n movw $-1,%1\n cmpw %3,%2\n cmovew %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
+ return crypto_int16_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int16 crypto_int16_z;
+ __asm__ ("and %w0,%w1,65535\n cmp %w0,%w2,uxth\n csetm %w0,eq" : "=&r"(crypto_int16_z) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
+ return crypto_int16_z;
+#else
+ return ~crypto_int16_unequal_mask(crypto_int16_x,crypto_int16_y);
#endif
+}
-/* ----- small polynomials */
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_equal_01(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int16 crypto_int16_q,crypto_int16_z;
+ __asm__ ("xorw %0,%0\n movw $1,%1\n cmpw %3,%2\n cmovew %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
+ return crypto_int16_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int16 crypto_int16_z;
+ __asm__ ("and %w0,%w1,65535\n cmp %w0,%w2,uxth\n cset %w0,eq" : "=&r"(crypto_int16_z) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
+ return crypto_int16_z;
+#else
+ return 1-crypto_int16_unequal_01(crypto_int16_x,crypto_int16_y);
+#endif
+}
-#ifndef LPR
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_min(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("cmpw %1,%0\n cmovgw %1,%0" : "+r"(crypto_int16_x) : "r"(crypto_int16_y) : "cc");
+ return crypto_int16_x;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ __asm__ ("sxth %w0,%w0\n cmp %w0,%w1,sxth\n csel %w0,%w0,%w1,lt" : "+&r"(crypto_int16_x) : "r"(crypto_int16_y) : "cc");
+ return crypto_int16_x;
+#else
+ crypto_int16 crypto_int16_r = crypto_int16_y ^ crypto_int16_x;
+ crypto_int16 crypto_int16_z = crypto_int16_y - crypto_int16_x;
+ crypto_int16_z ^= crypto_int16_r & (crypto_int16_z ^ crypto_int16_y);
+ crypto_int16_z = crypto_int16_negative_mask(crypto_int16_z);
+ crypto_int16_z &= crypto_int16_r;
+ return crypto_int16_x ^ crypto_int16_z;
+#endif
+}
-/* 0 if Weightw_is(r), else -1 */
-static int Weightw_mask(small *r)
-{
- int weight = 0;
- int i;
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_max(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("cmpw %1,%0\n cmovlw %1,%0" : "+r"(crypto_int16_x) : "r"(crypto_int16_y) : "cc");
+ return crypto_int16_x;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ __asm__ ("sxth %w0,%w0\n cmp %w0,%w1,sxth\n csel %w0,%w1,%w0,lt" : "+&r"(crypto_int16_x) : "r"(crypto_int16_y) : "cc");
+ return crypto_int16_x;
+#else
+ crypto_int16 crypto_int16_r = crypto_int16_y ^ crypto_int16_x;
+ crypto_int16 crypto_int16_z = crypto_int16_y - crypto_int16_x;
+ crypto_int16_z ^= crypto_int16_r & (crypto_int16_z ^ crypto_int16_y);
+ crypto_int16_z = crypto_int16_negative_mask(crypto_int16_z);
+ crypto_int16_z &= crypto_int16_r;
+ return crypto_int16_y ^ crypto_int16_z;
+#endif
+}
- for (i = 0;i < p;++i) weight += r[i]&1;
- return int16_nonzero_mask(weight-w);
+__attribute__((unused))
+static inline
+void crypto_int16_minmax(crypto_int16 *crypto_int16_p,crypto_int16 *crypto_int16_q) {
+ crypto_int16 crypto_int16_x = *crypto_int16_p;
+ crypto_int16 crypto_int16_y = *crypto_int16_q;
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int16 crypto_int16_z;
+ __asm__ ("cmpw %2,%1\n movw %1,%0\n cmovgw %2,%1\n cmovgw %0,%2" : "=&r"(crypto_int16_z), "+&r"(crypto_int16_x), "+r"(crypto_int16_y) : : "cc");
+ *crypto_int16_p = crypto_int16_x;
+ *crypto_int16_q = crypto_int16_y;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int16 crypto_int16_r, crypto_int16_s;
+ __asm__ ("sxth %w0,%w0\n cmp %w0,%w3,sxth\n csel %w1,%w0,%w3,lt\n csel %w2,%w3,%w0,lt" : "+&r"(crypto_int16_x), "=&r"(crypto_int16_r), "=r"(crypto_int16_s) : "r"(crypto_int16_y) : "cc");
+ *crypto_int16_p = crypto_int16_r;
+ *crypto_int16_q = crypto_int16_s;
+#else
+ crypto_int16 crypto_int16_r = crypto_int16_y ^ crypto_int16_x;
+ crypto_int16 crypto_int16_z = crypto_int16_y - crypto_int16_x;
+ crypto_int16_z ^= crypto_int16_r & (crypto_int16_z ^ crypto_int16_y);
+ crypto_int16_z = crypto_int16_negative_mask(crypto_int16_z);
+ crypto_int16_z &= crypto_int16_r;
+ crypto_int16_x ^= crypto_int16_z;
+ crypto_int16_y ^= crypto_int16_z;
+ *crypto_int16_p = crypto_int16_x;
+ *crypto_int16_q = crypto_int16_y;
+#endif
}
-/* R3_fromR(R_fromRq(r)) */
-static void R3_fromRq(small *out,const Fq *r)
-{
- int i;
- for (i = 0;i < p;++i) out[i] = F3_freeze(r[i]);
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_smaller_mask(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int16 crypto_int16_q,crypto_int16_z;
+ __asm__ ("xorw %0,%0\n movw $-1,%1\n cmpw %3,%2\n cmovlw %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
+ return crypto_int16_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int16 crypto_int16_z;
+ __asm__ ("sxth %w0,%w1\n cmp %w0,%w2,sxth\n csetm %w0,lt" : "=&r"(crypto_int16_z) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
+ return crypto_int16_z;
+#else
+ crypto_int16 crypto_int16_r = crypto_int16_x ^ crypto_int16_y;
+ crypto_int16 crypto_int16_z = crypto_int16_x - crypto_int16_y;
+ crypto_int16_z ^= crypto_int16_r & (crypto_int16_z ^ crypto_int16_x);
+ return crypto_int16_negative_mask(crypto_int16_z);
+#endif
}
-/* h = f*g in the ring R3 */
-static void R3_mult(small *h,const small *f,const small *g)
-{
- small fg[p+p-1];
- small result;
- int i,j;
-
- for (i = 0;i < p;++i) {
- result = 0;
- for (j = 0;j <= i;++j) result = F3_freeze(result+f[j]*g[i-j]);
- fg[i] = result;
- }
- for (i = p;i < p+p-1;++i) {
- result = 0;
- for (j = i-p+1;j < p;++j) result = F3_freeze(result+f[j]*g[i-j]);
- fg[i] = result;
- }
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_smaller_01(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int16 crypto_int16_q,crypto_int16_z;
+ __asm__ ("xorw %0,%0\n movw $1,%1\n cmpw %3,%2\n cmovlw %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
+ return crypto_int16_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int16 crypto_int16_z;
+ __asm__ ("sxth %w0,%w1\n cmp %w0,%w2,sxth\n cset %w0,lt" : "=&r"(crypto_int16_z) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
+ return crypto_int16_z;
+#else
+ crypto_int16 crypto_int16_r = crypto_int16_x ^ crypto_int16_y;
+ crypto_int16 crypto_int16_z = crypto_int16_x - crypto_int16_y;
+ crypto_int16_z ^= crypto_int16_r & (crypto_int16_z ^ crypto_int16_x);
+ return crypto_int16_unsigned_topbit_01(crypto_int16_z);
+#endif
+}
- for (i = p+p-2;i >= p;--i) {
- fg[i-p] = F3_freeze(fg[i-p]+fg[i]);
- fg[i-p+1] = F3_freeze(fg[i-p+1]+fg[i]);
- }
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_leq_mask(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int16 crypto_int16_q,crypto_int16_z;
+ __asm__ ("xorw %0,%0\n movw $-1,%1\n cmpw %3,%2\n cmovlew %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
+ return crypto_int16_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int16 crypto_int16_z;
+ __asm__ ("sxth %w0,%w1\n cmp %w0,%w2,sxth\n csetm %w0,le" : "=&r"(crypto_int16_z) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
+ return crypto_int16_z;
+#else
+ return ~crypto_int16_smaller_mask(crypto_int16_y,crypto_int16_x);
+#endif
+}
- for (i = 0;i < p;++i) h[i] = fg[i];
+__attribute__((unused))
+static inline
+crypto_int16 crypto_int16_leq_01(crypto_int16 crypto_int16_x,crypto_int16 crypto_int16_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int16 crypto_int16_q,crypto_int16_z;
+ __asm__ ("xorw %0,%0\n movw $1,%1\n cmpw %3,%2\n cmovlew %1,%0" : "=&r"(crypto_int16_z), "=&r"(crypto_int16_q) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
+ return crypto_int16_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int16 crypto_int16_z;
+ __asm__ ("sxth %w0,%w1\n cmp %w0,%w2,sxth\n cset %w0,le" : "=&r"(crypto_int16_z) : "r"(crypto_int16_x), "r"(crypto_int16_y) : "cc");
+ return crypto_int16_z;
+#else
+ return 1-crypto_int16_smaller_01(crypto_int16_y,crypto_int16_x);
+#endif
}
-/* returns 0 if recip succeeded; else -1 */
-static int R3_recip(small *out,const small *in)
-{
- small f[p+1],g[p+1],v[p+1],r[p+1];
- int i,loop,delta;
- int sign,swap,t;
+__attribute__((unused))
+static inline
+int crypto_int16_ones_num(crypto_int16 crypto_int16_x) {
+ crypto_int16_unsigned crypto_int16_y = crypto_int16_x;
+ const crypto_int16 C0 = 0x5555;
+ const crypto_int16 C1 = 0x3333;
+ const crypto_int16 C2 = 0x0f0f;
+ crypto_int16_y -= ((crypto_int16_y >> 1) & C0);
+ crypto_int16_y = (crypto_int16_y & C1) + ((crypto_int16_y >> 2) & C1);
+ crypto_int16_y = (crypto_int16_y + (crypto_int16_y >> 4)) & C2;
+ crypto_int16_y = (crypto_int16_y + (crypto_int16_y >> 8)) & 0xff;
+ return crypto_int16_y;
+}
+
+__attribute__((unused))
+static inline
+int crypto_int16_bottomzeros_num(crypto_int16 crypto_int16_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int16 fallback = 16;
+ __asm__ ("bsfw %0,%0\n cmovew %1,%0" : "+&r"(crypto_int16_x) : "r"(fallback) : "cc");
+ return crypto_int16_x;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ int64_t crypto_int16_y;
+ __asm__ ("orr %w0,%w1,-65536\n rbit %w0,%w0\n clz %w0,%w0" : "=r"(crypto_int16_y) : "r"(crypto_int16_x) : );
+ return crypto_int16_y;
+#else
+ crypto_int16 crypto_int16_y = crypto_int16_x ^ (crypto_int16_x-1);
+ crypto_int16_y = ((crypto_int16) crypto_int16_y) >> 1;
+ crypto_int16_y &= ~(crypto_int16_x & (((crypto_int16) 1) << (16-1)));
+ return crypto_int16_ones_num(crypto_int16_y);
+#endif
+}
- for (i = 0;i < p+1;++i) v[i] = 0;
- for (i = 0;i < p+1;++i) r[i] = 0;
- r[0] = 1;
- for (i = 0;i < p;++i) f[i] = 0;
- f[0] = 1; f[p-1] = f[p] = -1;
- for (i = 0;i < p;++i) g[p-1-i] = in[i];
- g[p] = 0;
+#endif
- delta = 1;
+/* from supercop-20240808/cryptoint/crypto_int32.h */
+/* auto-generated: cd cryptoint; ./autogen */
+/* cryptoint 20240806 */
- for (loop = 0;loop < 2*p-1;++loop) {
- for (i = p;i > 0;--i) v[i] = v[i-1];
- v[0] = 0;
+#ifndef crypto_int32_h
+#define crypto_int32_h
- sign = -g[0]*f[0];
- swap = int16_negative_mask(-delta) & int16_nonzero_mask(g[0]);
- delta ^= swap&(delta^-delta);
- delta += 1;
+#define crypto_int32 int32_t
+#define crypto_int32_unsigned uint32_t
- for (i = 0;i < p+1;++i) {
- t = swap&(f[i]^g[i]); f[i] ^= t; g[i] ^= t;
- t = swap&(v[i]^r[i]); v[i] ^= t; r[i] ^= t;
- }
- for (i = 0;i < p+1;++i) g[i] = F3_freeze(g[i]+sign*f[i]);
- for (i = 0;i < p+1;++i) r[i] = F3_freeze(r[i]+sign*v[i]);
- for (i = 0;i < p;++i) g[i] = g[i+1];
- g[p] = 0;
- }
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_load(const unsigned char *crypto_int32_s) {
+ crypto_int32 crypto_int32_z = 0;
+ crypto_int32_z |= ((crypto_int32) (*crypto_int32_s++)) << 0;
+ crypto_int32_z |= ((crypto_int32) (*crypto_int32_s++)) << 8;
+ crypto_int32_z |= ((crypto_int32) (*crypto_int32_s++)) << 16;
+ crypto_int32_z |= ((crypto_int32) (*crypto_int32_s++)) << 24;
+ return crypto_int32_z;
+}
- sign = f[0];
- for (i = 0;i < p;++i) out[i] = sign*v[p-1-i];
+__attribute__((unused))
+static inline
+void crypto_int32_store(unsigned char *crypto_int32_s,crypto_int32 crypto_int32_x) {
+ *crypto_int32_s++ = crypto_int32_x >> 0;
+ *crypto_int32_s++ = crypto_int32_x >> 8;
+ *crypto_int32_s++ = crypto_int32_x >> 16;
+ *crypto_int32_s++ = crypto_int32_x >> 24;
+}
- return int16_nonzero_mask(delta);
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_negative_mask(crypto_int32 crypto_int32_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("sarl $31,%0" : "+r"(crypto_int32_x) : : "cc");
+ return crypto_int32_x;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int32 crypto_int32_y;
+ __asm__ ("asr %w0,%w1,31" : "=r"(crypto_int32_y) : "r"(crypto_int32_x) : );
+ return crypto_int32_y;
+#else
+ crypto_int32_x >>= 32-6;
+ crypto_int32_x ^= crypto_int32_optblocker;
+ crypto_int32_x >>= 5;
+ return crypto_int32_x;
+#endif
}
+__attribute__((unused))
+static inline
+crypto_int32_unsigned crypto_int32_unsigned_topbit_01(crypto_int32_unsigned crypto_int32_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("shrl $31,%0" : "+r"(crypto_int32_x) : : "cc");
+ return crypto_int32_x;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int32 crypto_int32_y;
+ __asm__ ("lsr %w0,%w1,31" : "=r"(crypto_int32_y) : "r"(crypto_int32_x) : );
+ return crypto_int32_y;
+#else
+ crypto_int32_x >>= 32-6;
+ crypto_int32_x ^= crypto_int32_optblocker;
+ crypto_int32_x >>= 5;
+ return crypto_int32_x;
#endif
+}
-/* ----- polynomials mod q */
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_negative_01(crypto_int32 crypto_int32_x) {
+ return crypto_int32_unsigned_topbit_01(crypto_int32_x);
+}
-/* h = f*g in the ring Rq */
-static void Rq_mult_small(Fq *h,const Fq *f,const small *g)
-{
- Fq fg[p+p-1];
- Fq result;
- int i,j;
-
- for (i = 0;i < p;++i) {
- result = 0;
- for (j = 0;j <= i;++j) result = Fq_freeze(result+f[j]*(int32)g[i-j]);
- fg[i] = result;
- }
- for (i = p;i < p+p-1;++i) {
- result = 0;
- for (j = i-p+1;j < p;++j) result = Fq_freeze(result+f[j]*(int32)g[i-j]);
- fg[i] = result;
- }
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_topbit_mask(crypto_int32 crypto_int32_x) {
+ return crypto_int32_negative_mask(crypto_int32_x);
+}
- for (i = p+p-2;i >= p;--i) {
- fg[i-p] = Fq_freeze(fg[i-p]+fg[i]);
- fg[i-p+1] = Fq_freeze(fg[i-p+1]+fg[i]);
- }
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_topbit_01(crypto_int32 crypto_int32_x) {
+ return crypto_int32_unsigned_topbit_01(crypto_int32_x);
+}
- for (i = 0;i < p;++i) h[i] = fg[i];
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_bottombit_mask(crypto_int32 crypto_int32_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("andl $1,%0" : "+r"(crypto_int32_x) : : "cc");
+ return -crypto_int32_x;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int32 crypto_int32_y;
+ __asm__ ("sbfx %w0,%w1,0,1" : "=r"(crypto_int32_y) : "r"(crypto_int32_x) : );
+ return crypto_int32_y;
+#else
+ crypto_int32_x &= 1 ^ crypto_int32_optblocker;
+ return -crypto_int32_x;
+#endif
}
-#ifndef LPR
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_bottombit_01(crypto_int32 crypto_int32_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("andl $1,%0" : "+r"(crypto_int32_x) : : "cc");
+ return crypto_int32_x;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int32 crypto_int32_y;
+ __asm__ ("ubfx %w0,%w1,0,1" : "=r"(crypto_int32_y) : "r"(crypto_int32_x) : );
+ return crypto_int32_y;
+#else
+ crypto_int32_x &= 1 ^ crypto_int32_optblocker;
+ return crypto_int32_x;
+#endif
+}
-/* h = 3f in Rq */
-static void Rq_mult3(Fq *h,const Fq *f)
-{
- int i;
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_bitinrangepublicpos_mask(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_s) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("sarl %%cl,%0" : "+r"(crypto_int32_x) : "c"(crypto_int32_s) : "cc");
+#elif defined(__GNUC__) && defined(__aarch64__)
+ __asm__ ("asr %w0,%w0,%w1" : "+r"(crypto_int32_x) : "r"(crypto_int32_s) : );
+#else
+ crypto_int32_x >>= crypto_int32_s ^ crypto_int32_optblocker;
+#endif
+ return crypto_int32_bottombit_mask(crypto_int32_x);
+}
- for (i = 0;i < p;++i) h[i] = Fq_freeze(3*f[i]);
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_bitinrangepublicpos_01(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_s) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("sarl %%cl,%0" : "+r"(crypto_int32_x) : "c"(crypto_int32_s) : "cc");
+#elif defined(__GNUC__) && defined(__aarch64__)
+ __asm__ ("asr %w0,%w0,%w1" : "+r"(crypto_int32_x) : "r"(crypto_int32_s) : );
+#else
+ crypto_int32_x >>= crypto_int32_s ^ crypto_int32_optblocker;
+#endif
+ return crypto_int32_bottombit_01(crypto_int32_x);
}
-/* out = 1/(3*in) in Rq */
-/* returns 0 if recip succeeded; else -1 */
-static int Rq_recip3(Fq *out,const small *in)
-{
- Fq f[p+1],g[p+1],v[p+1],r[p+1];
- int i,loop,delta;
- int swap,t;
- int32 f0,g0;
- Fq scale;
-
- for (i = 0;i < p+1;++i) v[i] = 0;
- for (i = 0;i < p+1;++i) r[i] = 0;
- r[0] = Fq_recip(3);
- for (i = 0;i < p;++i) f[i] = 0;
- f[0] = 1; f[p-1] = f[p] = -1;
- for (i = 0;i < p;++i) g[p-1-i] = in[i];
- g[p] = 0;
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_shlmod(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_s) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("shll %%cl,%0" : "+r"(crypto_int32_x) : "c"(crypto_int32_s) : "cc");
+#elif defined(__GNUC__) && defined(__aarch64__)
+ __asm__ ("lsl %w0,%w0,%w1" : "+r"(crypto_int32_x) : "r"(crypto_int32_s) : );
+#else
+ int crypto_int32_k, crypto_int32_l;
+ for (crypto_int32_l = 0,crypto_int32_k = 1;crypto_int32_k < 32;++crypto_int32_l,crypto_int32_k *= 2)
+ crypto_int32_x ^= (crypto_int32_x ^ (crypto_int32_x << crypto_int32_k)) & crypto_int32_bitinrangepublicpos_mask(crypto_int32_s,crypto_int32_l);
+#endif
+ return crypto_int32_x;
+}
- delta = 1;
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_shrmod(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_s) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("sarl %%cl,%0" : "+r"(crypto_int32_x) : "c"(crypto_int32_s) : "cc");
+#elif defined(__GNUC__) && defined(__aarch64__)
+ __asm__ ("asr %w0,%w0,%w1" : "+r"(crypto_int32_x) : "r"(crypto_int32_s) : );
+#else
+ int crypto_int32_k, crypto_int32_l;
+ for (crypto_int32_l = 0,crypto_int32_k = 1;crypto_int32_k < 32;++crypto_int32_l,crypto_int32_k *= 2)
+ crypto_int32_x ^= (crypto_int32_x ^ (crypto_int32_x >> crypto_int32_k)) & crypto_int32_bitinrangepublicpos_mask(crypto_int32_s,crypto_int32_l);
+#endif
+ return crypto_int32_x;
+}
+
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_bitmod_mask(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_s) {
+ crypto_int32_x = crypto_int32_shrmod(crypto_int32_x,crypto_int32_s);
+ return crypto_int32_bottombit_mask(crypto_int32_x);
+}
+
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_bitmod_01(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_s) {
+ crypto_int32_x = crypto_int32_shrmod(crypto_int32_x,crypto_int32_s);
+ return crypto_int32_bottombit_01(crypto_int32_x);
+}
+
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_nonzero_mask(crypto_int32 crypto_int32_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int32 crypto_int32_q,crypto_int32_z;
+ __asm__ ("xorl %0,%0\n movl $-1,%1\n testl %2,%2\n cmovnel %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x) : "cc");
+ return crypto_int32_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int32 crypto_int32_z;
+ __asm__ ("cmp %w1,0\n csetm %w0,ne" : "=r"(crypto_int32_z) : "r"(crypto_int32_x) : "cc");
+ return crypto_int32_z;
+#else
+ crypto_int32_x |= -crypto_int32_x;
+ return crypto_int32_negative_mask(crypto_int32_x);
+#endif
+}
- for (loop = 0;loop < 2*p-1;++loop) {
- for (i = p;i > 0;--i) v[i] = v[i-1];
- v[0] = 0;
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_nonzero_01(crypto_int32 crypto_int32_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int32 crypto_int32_q,crypto_int32_z;
+ __asm__ ("xorl %0,%0\n movl $1,%1\n testl %2,%2\n cmovnel %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x) : "cc");
+ return crypto_int32_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int32 crypto_int32_z;
+ __asm__ ("cmp %w1,0\n cset %w0,ne" : "=r"(crypto_int32_z) : "r"(crypto_int32_x) : "cc");
+ return crypto_int32_z;
+#else
+ crypto_int32_x |= -crypto_int32_x;
+ return crypto_int32_unsigned_topbit_01(crypto_int32_x);
+#endif
+}
- swap = int16_negative_mask(-delta) & int16_nonzero_mask(g[0]);
- delta ^= swap&(delta^-delta);
- delta += 1;
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_positive_mask(crypto_int32 crypto_int32_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int32 crypto_int32_q,crypto_int32_z;
+ __asm__ ("xorl %0,%0\n movl $-1,%1\n testl %2,%2\n cmovgl %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x) : "cc");
+ return crypto_int32_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int32 crypto_int32_z;
+ __asm__ ("cmp %w1,0\n csetm %w0,gt" : "=r"(crypto_int32_z) : "r"(crypto_int32_x) : "cc");
+ return crypto_int32_z;
+#else
+ crypto_int32 crypto_int32_z = -crypto_int32_x;
+ crypto_int32_z ^= crypto_int32_x & crypto_int32_z;
+ return crypto_int32_negative_mask(crypto_int32_z);
+#endif
+}
- for (i = 0;i < p+1;++i) {
- t = swap&(f[i]^g[i]); f[i] ^= t; g[i] ^= t;
- t = swap&(v[i]^r[i]); v[i] ^= t; r[i] ^= t;
- }
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_positive_01(crypto_int32 crypto_int32_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int32 crypto_int32_q,crypto_int32_z;
+ __asm__ ("xorl %0,%0\n movl $1,%1\n testl %2,%2\n cmovgl %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x) : "cc");
+ return crypto_int32_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int32 crypto_int32_z;
+ __asm__ ("cmp %w1,0\n cset %w0,gt" : "=r"(crypto_int32_z) : "r"(crypto_int32_x) : "cc");
+ return crypto_int32_z;
+#else
+ crypto_int32 crypto_int32_z = -crypto_int32_x;
+ crypto_int32_z ^= crypto_int32_x & crypto_int32_z;
+ return crypto_int32_unsigned_topbit_01(crypto_int32_z);
+#endif
+}
- f0 = f[0];
- g0 = g[0];
- for (i = 0;i < p+1;++i) g[i] = Fq_freeze(f0*g[i]-g0*f[i]);
- for (i = 0;i < p+1;++i) r[i] = Fq_freeze(f0*r[i]-g0*v[i]);
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_zero_mask(crypto_int32 crypto_int32_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int32 crypto_int32_q,crypto_int32_z;
+ __asm__ ("xorl %0,%0\n movl $-1,%1\n testl %2,%2\n cmovel %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x) : "cc");
+ return crypto_int32_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int32 crypto_int32_z;
+ __asm__ ("cmp %w1,0\n csetm %w0,eq" : "=r"(crypto_int32_z) : "r"(crypto_int32_x) : "cc");
+ return crypto_int32_z;
+#else
+ return ~crypto_int32_nonzero_mask(crypto_int32_x);
+#endif
+}
- for (i = 0;i < p;++i) g[i] = g[i+1];
- g[p] = 0;
- }
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_zero_01(crypto_int32 crypto_int32_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int32 crypto_int32_q,crypto_int32_z;
+ __asm__ ("xorl %0,%0\n movl $1,%1\n testl %2,%2\n cmovel %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x) : "cc");
+ return crypto_int32_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int32 crypto_int32_z;
+ __asm__ ("cmp %w1,0\n cset %w0,eq" : "=r"(crypto_int32_z) : "r"(crypto_int32_x) : "cc");
+ return crypto_int32_z;
+#else
+ return 1-crypto_int32_nonzero_01(crypto_int32_x);
+#endif
+}
- scale = Fq_recip(f[0]);
- for (i = 0;i < p;++i) out[i] = Fq_freeze(scale*(int32)v[p-1-i]);
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_unequal_mask(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int32 crypto_int32_q,crypto_int32_z;
+ __asm__ ("xorl %0,%0\n movl $-1,%1\n cmpl %3,%2\n cmovnel %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
+ return crypto_int32_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int32 crypto_int32_z;
+ __asm__ ("cmp %w1,%w2\n csetm %w0,ne" : "=r"(crypto_int32_z) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
+ return crypto_int32_z;
+#else
+ return crypto_int32_nonzero_mask(crypto_int32_x ^ crypto_int32_y);
+#endif
+}
- return int16_nonzero_mask(delta);
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_unequal_01(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int32 crypto_int32_q,crypto_int32_z;
+ __asm__ ("xorl %0,%0\n movl $1,%1\n cmpl %3,%2\n cmovnel %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
+ return crypto_int32_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int32 crypto_int32_z;
+ __asm__ ("cmp %w1,%w2\n cset %w0,ne" : "=r"(crypto_int32_z) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
+ return crypto_int32_z;
+#else
+ return crypto_int32_nonzero_01(crypto_int32_x ^ crypto_int32_y);
+#endif
}
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_equal_mask(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int32 crypto_int32_q,crypto_int32_z;
+ __asm__ ("xorl %0,%0\n movl $-1,%1\n cmpl %3,%2\n cmovel %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
+ return crypto_int32_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int32 crypto_int32_z;
+ __asm__ ("cmp %w1,%w2\n csetm %w0,eq" : "=r"(crypto_int32_z) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
+ return crypto_int32_z;
+#else
+ return ~crypto_int32_unequal_mask(crypto_int32_x,crypto_int32_y);
#endif
+}
-/* ----- rounded polynomials mod q */
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_equal_01(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int32 crypto_int32_q,crypto_int32_z;
+ __asm__ ("xorl %0,%0\n movl $1,%1\n cmpl %3,%2\n cmovel %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
+ return crypto_int32_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int32 crypto_int32_z;
+ __asm__ ("cmp %w1,%w2\n cset %w0,eq" : "=r"(crypto_int32_z) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
+ return crypto_int32_z;
+#else
+ return 1-crypto_int32_unequal_01(crypto_int32_x,crypto_int32_y);
+#endif
+}
-static void Round(Fq *out,const Fq *a)
-{
- int i;
- for (i = 0;i < p;++i) out[i] = a[i]-F3_freeze(a[i]);
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_min(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("cmpl %1,%0\n cmovgl %1,%0" : "+r"(crypto_int32_x) : "r"(crypto_int32_y) : "cc");
+ return crypto_int32_x;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ __asm__ ("cmp %w0,%w1\n csel %w0,%w0,%w1,lt" : "+r"(crypto_int32_x) : "r"(crypto_int32_y) : "cc");
+ return crypto_int32_x;
+#else
+ crypto_int64 crypto_int32_r = (crypto_int64)crypto_int32_y ^ (crypto_int64)crypto_int32_x;
+ crypto_int64 crypto_int32_z = (crypto_int64)crypto_int32_y - (crypto_int64)crypto_int32_x;
+ crypto_int32_z ^= crypto_int32_r & (crypto_int32_z ^ crypto_int32_y);
+ crypto_int32_z = crypto_int32_negative_mask(crypto_int32_z);
+ crypto_int32_z &= crypto_int32_r;
+ return crypto_int32_x ^ crypto_int32_z;
+#endif
}
-/* ----- sorting to generate short polynomial */
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_max(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("cmpl %1,%0\n cmovll %1,%0" : "+r"(crypto_int32_x) : "r"(crypto_int32_y) : "cc");
+ return crypto_int32_x;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ __asm__ ("cmp %w0,%w1\n csel %w0,%w1,%w0,lt" : "+r"(crypto_int32_x) : "r"(crypto_int32_y) : "cc");
+ return crypto_int32_x;
+#else
+ crypto_int64 crypto_int32_r = (crypto_int64)crypto_int32_y ^ (crypto_int64)crypto_int32_x;
+ crypto_int64 crypto_int32_z = (crypto_int64)crypto_int32_y - (crypto_int64)crypto_int32_x;
+ crypto_int32_z ^= crypto_int32_r & (crypto_int32_z ^ crypto_int32_y);
+ crypto_int32_z = crypto_int32_negative_mask(crypto_int32_z);
+ crypto_int32_z &= crypto_int32_r;
+ return crypto_int32_y ^ crypto_int32_z;
+#endif
+}
-static void Short_fromlist(small *out,const uint32 *in)
-{
- uint32 L[p];
- int i;
+__attribute__((unused))
+static inline
+void crypto_int32_minmax(crypto_int32 *crypto_int32_p,crypto_int32 *crypto_int32_q) {
+ crypto_int32 crypto_int32_x = *crypto_int32_p;
+ crypto_int32 crypto_int32_y = *crypto_int32_q;
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int32 crypto_int32_z;
+ __asm__ ("cmpl %2,%1\n movl %1,%0\n cmovgl %2,%1\n cmovgl %0,%2" : "=&r"(crypto_int32_z), "+&r"(crypto_int32_x), "+r"(crypto_int32_y) : : "cc");
+ *crypto_int32_p = crypto_int32_x;
+ *crypto_int32_q = crypto_int32_y;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int32 crypto_int32_r, crypto_int32_s;
+ __asm__ ("cmp %w2,%w3\n csel %w0,%w2,%w3,lt\n csel %w1,%w3,%w2,lt" : "=&r"(crypto_int32_r), "=r"(crypto_int32_s) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
+ *crypto_int32_p = crypto_int32_r;
+ *crypto_int32_q = crypto_int32_s;
+#else
+ crypto_int64 crypto_int32_r = (crypto_int64)crypto_int32_y ^ (crypto_int64)crypto_int32_x;
+ crypto_int64 crypto_int32_z = (crypto_int64)crypto_int32_y - (crypto_int64)crypto_int32_x;
+ crypto_int32_z ^= crypto_int32_r & (crypto_int32_z ^ crypto_int32_y);
+ crypto_int32_z = crypto_int32_negative_mask(crypto_int32_z);
+ crypto_int32_z &= crypto_int32_r;
+ crypto_int32_x ^= crypto_int32_z;
+ crypto_int32_y ^= crypto_int32_z;
+ *crypto_int32_p = crypto_int32_x;
+ *crypto_int32_q = crypto_int32_y;
+#endif
+}
- for (i = 0;i < w;++i) L[i] = in[i]&(uint32)-2;
- for (i = w;i < p;++i) L[i] = (in[i]&(uint32)-3)|1;
- crypto_sort_uint32(L,p);
- for (i = 0;i < p;++i) out[i] = (L[i]&3)-1;
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_smaller_mask(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int32 crypto_int32_q,crypto_int32_z;
+ __asm__ ("xorl %0,%0\n movl $-1,%1\n cmpl %3,%2\n cmovll %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
+ return crypto_int32_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int32 crypto_int32_z;
+ __asm__ ("cmp %w1,%w2\n csetm %w0,lt" : "=r"(crypto_int32_z) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
+ return crypto_int32_z;
+#else
+ crypto_int32 crypto_int32_r = crypto_int32_x ^ crypto_int32_y;
+ crypto_int32 crypto_int32_z = crypto_int32_x - crypto_int32_y;
+ crypto_int32_z ^= crypto_int32_r & (crypto_int32_z ^ crypto_int32_x);
+ return crypto_int32_negative_mask(crypto_int32_z);
+#endif
}
-/* ----- underlying hash function */
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_smaller_01(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int32 crypto_int32_q,crypto_int32_z;
+ __asm__ ("xorl %0,%0\n movl $1,%1\n cmpl %3,%2\n cmovll %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
+ return crypto_int32_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int32 crypto_int32_z;
+ __asm__ ("cmp %w1,%w2\n cset %w0,lt" : "=r"(crypto_int32_z) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
+ return crypto_int32_z;
+#else
+ crypto_int32 crypto_int32_r = crypto_int32_x ^ crypto_int32_y;
+ crypto_int32 crypto_int32_z = crypto_int32_x - crypto_int32_y;
+ crypto_int32_z ^= crypto_int32_r & (crypto_int32_z ^ crypto_int32_x);
+ return crypto_int32_unsigned_topbit_01(crypto_int32_z);
+#endif
+}
-#define Hash_bytes 32
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_leq_mask(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int32 crypto_int32_q,crypto_int32_z;
+ __asm__ ("xorl %0,%0\n movl $-1,%1\n cmpl %3,%2\n cmovlel %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
+ return crypto_int32_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int32 crypto_int32_z;
+ __asm__ ("cmp %w1,%w2\n csetm %w0,le" : "=r"(crypto_int32_z) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
+ return crypto_int32_z;
+#else
+ return ~crypto_int32_smaller_mask(crypto_int32_y,crypto_int32_x);
+#endif
+}
-/* e.g., b = 0 means out = Hash0(in) */
-static void Hash_prefix(unsigned char *out,int b,const unsigned char *in,int inlen)
-{
- unsigned char x[inlen+1];
- unsigned char h[64];
- int i;
+__attribute__((unused))
+static inline
+crypto_int32 crypto_int32_leq_01(crypto_int32 crypto_int32_x,crypto_int32 crypto_int32_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int32 crypto_int32_q,crypto_int32_z;
+ __asm__ ("xorl %0,%0\n movl $1,%1\n cmpl %3,%2\n cmovlel %1,%0" : "=&r"(crypto_int32_z), "=&r"(crypto_int32_q) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
+ return crypto_int32_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int32 crypto_int32_z;
+ __asm__ ("cmp %w1,%w2\n cset %w0,le" : "=r"(crypto_int32_z) : "r"(crypto_int32_x), "r"(crypto_int32_y) : "cc");
+ return crypto_int32_z;
+#else
+ return 1-crypto_int32_smaller_01(crypto_int32_y,crypto_int32_x);
+#endif
+}
- x[0] = b;
- for (i = 0;i < inlen;++i) x[i+1] = in[i];
- crypto_hash_sha512(h,x,inlen+1);
- for (i = 0;i < 32;++i) out[i] = h[i];
+__attribute__((unused))
+static inline
+int crypto_int32_ones_num(crypto_int32 crypto_int32_x) {
+ crypto_int32_unsigned crypto_int32_y = crypto_int32_x;
+ const crypto_int32 C0 = 0x55555555;
+ const crypto_int32 C1 = 0x33333333;
+ const crypto_int32 C2 = 0x0f0f0f0f;
+ crypto_int32_y -= ((crypto_int32_y >> 1) & C0);
+ crypto_int32_y = (crypto_int32_y & C1) + ((crypto_int32_y >> 2) & C1);
+ crypto_int32_y = (crypto_int32_y + (crypto_int32_y >> 4)) & C2;
+ crypto_int32_y += crypto_int32_y >> 8;
+ crypto_int32_y = (crypto_int32_y + (crypto_int32_y >> 16)) & 0xff;
+ return crypto_int32_y;
+}
+
+__attribute__((unused))
+static inline
+int crypto_int32_bottomzeros_num(crypto_int32 crypto_int32_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int32 fallback = 32;
+ __asm__ ("bsfl %0,%0\n cmovel %1,%0" : "+&r"(crypto_int32_x) : "r"(fallback) : "cc");
+ return crypto_int32_x;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ int64_t crypto_int32_y;
+ __asm__ ("rbit %w0,%w1\n clz %w0,%w0" : "=r"(crypto_int32_y) : "r"(crypto_int32_x) : );
+ return crypto_int32_y;
+#else
+ crypto_int32 crypto_int32_y = crypto_int32_x ^ (crypto_int32_x-1);
+ crypto_int32_y = ((crypto_int32) crypto_int32_y) >> 1;
+ crypto_int32_y &= ~(crypto_int32_x & (((crypto_int32) 1) << (32-1)));
+ return crypto_int32_ones_num(crypto_int32_y);
+#endif
}
-/* ----- higher-level randomness */
+#endif
-static uint32 urandom32(void)
-{
- unsigned char c[4];
- uint32 out[4];
+/* from supercop-20240808/cryptoint/crypto_int64.h */
+/* auto-generated: cd cryptoint; ./autogen */
+/* cryptoint 20240806 */
+
+#ifndef crypto_int64_h
+#define crypto_int64_h
+
+#define crypto_int64 int64_t
+#define crypto_int64_unsigned uint64_t
+
+
+
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_load(const unsigned char *crypto_int64_s) {
+ crypto_int64 crypto_int64_z = 0;
+ crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 0;
+ crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 8;
+ crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 16;
+ crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 24;
+ crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 32;
+ crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 40;
+ crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 48;
+ crypto_int64_z |= ((crypto_int64) (*crypto_int64_s++)) << 56;
+ return crypto_int64_z;
+}
+
+__attribute__((unused))
+static inline
+void crypto_int64_store(unsigned char *crypto_int64_s,crypto_int64 crypto_int64_x) {
+ *crypto_int64_s++ = crypto_int64_x >> 0;
+ *crypto_int64_s++ = crypto_int64_x >> 8;
+ *crypto_int64_s++ = crypto_int64_x >> 16;
+ *crypto_int64_s++ = crypto_int64_x >> 24;
+ *crypto_int64_s++ = crypto_int64_x >> 32;
+ *crypto_int64_s++ = crypto_int64_x >> 40;
+ *crypto_int64_s++ = crypto_int64_x >> 48;
+ *crypto_int64_s++ = crypto_int64_x >> 56;
+}
+
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_negative_mask(crypto_int64 crypto_int64_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("sarq $63,%0" : "+r"(crypto_int64_x) : : "cc");
+ return crypto_int64_x;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int64 crypto_int64_y;
+ __asm__ ("asr %0,%1,63" : "=r"(crypto_int64_y) : "r"(crypto_int64_x) : );
+ return crypto_int64_y;
+#else
+ crypto_int64_x >>= 64-6;
+ crypto_int64_x ^= crypto_int64_optblocker;
+ crypto_int64_x >>= 5;
+ return crypto_int64_x;
+#endif
+}
- randombytes(c,4);
- out[0] = (uint32)c[0];
- out[1] = ((uint32)c[1])<<8;
- out[2] = ((uint32)c[2])<<16;
- out[3] = ((uint32)c[3])<<24;
- return out[0]+out[1]+out[2]+out[3];
+__attribute__((unused))
+static inline
+crypto_int64_unsigned crypto_int64_unsigned_topbit_01(crypto_int64_unsigned crypto_int64_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("shrq $63,%0" : "+r"(crypto_int64_x) : : "cc");
+ return crypto_int64_x;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int64 crypto_int64_y;
+ __asm__ ("lsr %0,%1,63" : "=r"(crypto_int64_y) : "r"(crypto_int64_x) : );
+ return crypto_int64_y;
+#else
+ crypto_int64_x >>= 64-6;
+ crypto_int64_x ^= crypto_int64_optblocker;
+ crypto_int64_x >>= 5;
+ return crypto_int64_x;
+#endif
}
-static void Short_random(small *out)
-{
- uint32 L[p];
- int i;
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_negative_01(crypto_int64 crypto_int64_x) {
+ return crypto_int64_unsigned_topbit_01(crypto_int64_x);
+}
- for (i = 0;i < p;++i) L[i] = urandom32();
- Short_fromlist(out,L);
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_topbit_mask(crypto_int64 crypto_int64_x) {
+ return crypto_int64_negative_mask(crypto_int64_x);
}
-#ifndef LPR
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_topbit_01(crypto_int64 crypto_int64_x) {
+ return crypto_int64_unsigned_topbit_01(crypto_int64_x);
+}
-static void Small_random(small *out)
-{
- int i;
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_bottombit_mask(crypto_int64 crypto_int64_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("andq $1,%0" : "+r"(crypto_int64_x) : : "cc");
+ return -crypto_int64_x;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int64 crypto_int64_y;
+ __asm__ ("sbfx %0,%1,0,1" : "=r"(crypto_int64_y) : "r"(crypto_int64_x) : );
+ return crypto_int64_y;
+#else
+ crypto_int64_x &= 1 ^ crypto_int64_optblocker;
+ return -crypto_int64_x;
+#endif
+}
- for (i = 0;i < p;++i) out[i] = (((urandom32()&0x3fffffff)*3)>>30)-1;
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_bottombit_01(crypto_int64 crypto_int64_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("andq $1,%0" : "+r"(crypto_int64_x) : : "cc");
+ return crypto_int64_x;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int64 crypto_int64_y;
+ __asm__ ("ubfx %0,%1,0,1" : "=r"(crypto_int64_y) : "r"(crypto_int64_x) : );
+ return crypto_int64_y;
+#else
+ crypto_int64_x &= 1 ^ crypto_int64_optblocker;
+ return crypto_int64_x;
+#endif
}
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_bitinrangepublicpos_mask(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_s) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("sarq %%cl,%0" : "+r"(crypto_int64_x) : "c"(crypto_int64_s) : "cc");
+#elif defined(__GNUC__) && defined(__aarch64__)
+ __asm__ ("asr %0,%0,%1" : "+r"(crypto_int64_x) : "r"(crypto_int64_s) : );
+#else
+ crypto_int64_x >>= crypto_int64_s ^ crypto_int64_optblocker;
#endif
+ return crypto_int64_bottombit_mask(crypto_int64_x);
+}
-/* ----- Streamlined NTRU Prime Core */
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_bitinrangepublicpos_01(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_s) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("sarq %%cl,%0" : "+r"(crypto_int64_x) : "c"(crypto_int64_s) : "cc");
+#elif defined(__GNUC__) && defined(__aarch64__)
+ __asm__ ("asr %0,%0,%1" : "+r"(crypto_int64_x) : "r"(crypto_int64_s) : );
+#else
+ crypto_int64_x >>= crypto_int64_s ^ crypto_int64_optblocker;
+#endif
+ return crypto_int64_bottombit_01(crypto_int64_x);
+}
-#ifndef LPR
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_shlmod(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_s) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("shlq %%cl,%0" : "+r"(crypto_int64_x) : "c"(crypto_int64_s) : "cc");
+#elif defined(__GNUC__) && defined(__aarch64__)
+ __asm__ ("lsl %0,%0,%1" : "+r"(crypto_int64_x) : "r"(crypto_int64_s) : );
+#else
+ int crypto_int64_k, crypto_int64_l;
+ for (crypto_int64_l = 0,crypto_int64_k = 1;crypto_int64_k < 64;++crypto_int64_l,crypto_int64_k *= 2)
+ crypto_int64_x ^= (crypto_int64_x ^ (crypto_int64_x << crypto_int64_k)) & crypto_int64_bitinrangepublicpos_mask(crypto_int64_s,crypto_int64_l);
+#endif
+ return crypto_int64_x;
+}
-/* h,(f,ginv) = KeyGen() */
-static void KeyGen(Fq *h,small *f,small *ginv)
-{
- small g[p];
- Fq finv[p];
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_shrmod(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_s) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("sarq %%cl,%0" : "+r"(crypto_int64_x) : "c"(crypto_int64_s) : "cc");
+#elif defined(__GNUC__) && defined(__aarch64__)
+ __asm__ ("asr %0,%0,%1" : "+r"(crypto_int64_x) : "r"(crypto_int64_s) : );
+#else
+ int crypto_int64_k, crypto_int64_l;
+ for (crypto_int64_l = 0,crypto_int64_k = 1;crypto_int64_k < 64;++crypto_int64_l,crypto_int64_k *= 2)
+ crypto_int64_x ^= (crypto_int64_x ^ (crypto_int64_x >> crypto_int64_k)) & crypto_int64_bitinrangepublicpos_mask(crypto_int64_s,crypto_int64_l);
+#endif
+ return crypto_int64_x;
+}
+
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_bitmod_mask(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_s) {
+ crypto_int64_x = crypto_int64_shrmod(crypto_int64_x,crypto_int64_s);
+ return crypto_int64_bottombit_mask(crypto_int64_x);
+}
+
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_bitmod_01(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_s) {
+ crypto_int64_x = crypto_int64_shrmod(crypto_int64_x,crypto_int64_s);
+ return crypto_int64_bottombit_01(crypto_int64_x);
+}
+
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_nonzero_mask(crypto_int64 crypto_int64_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int64 crypto_int64_q,crypto_int64_z;
+ __asm__ ("xorq %0,%0\n movq $-1,%1\n testq %2,%2\n cmovneq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x) : "cc");
+ return crypto_int64_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int64 crypto_int64_z;
+ __asm__ ("cmp %1,0\n csetm %0,ne" : "=r"(crypto_int64_z) : "r"(crypto_int64_x) : "cc");
+ return crypto_int64_z;
+#else
+ crypto_int64_x |= -crypto_int64_x;
+ return crypto_int64_negative_mask(crypto_int64_x);
+#endif
+}
- for (;;) {
- Small_random(g);
- if (R3_recip(ginv,g) == 0) break;
- }
- Short_random(f);
- Rq_recip3(finv,f); /* always works */
- Rq_mult_small(h,finv,g);
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_nonzero_01(crypto_int64 crypto_int64_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int64 crypto_int64_q,crypto_int64_z;
+ __asm__ ("xorq %0,%0\n movq $1,%1\n testq %2,%2\n cmovneq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x) : "cc");
+ return crypto_int64_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int64 crypto_int64_z;
+ __asm__ ("cmp %1,0\n cset %0,ne" : "=r"(crypto_int64_z) : "r"(crypto_int64_x) : "cc");
+ return crypto_int64_z;
+#else
+ crypto_int64_x |= -crypto_int64_x;
+ return crypto_int64_unsigned_topbit_01(crypto_int64_x);
+#endif
}
-/* c = Encrypt(r,h) */
-static void Encrypt(Fq *c,const small *r,const Fq *h)
-{
- Fq hr[p];
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_positive_mask(crypto_int64 crypto_int64_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int64 crypto_int64_q,crypto_int64_z;
+ __asm__ ("xorq %0,%0\n movq $-1,%1\n testq %2,%2\n cmovgq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x) : "cc");
+ return crypto_int64_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int64 crypto_int64_z;
+ __asm__ ("cmp %1,0\n csetm %0,gt" : "=r"(crypto_int64_z) : "r"(crypto_int64_x) : "cc");
+ return crypto_int64_z;
+#else
+ crypto_int64 crypto_int64_z = -crypto_int64_x;
+ crypto_int64_z ^= crypto_int64_x & crypto_int64_z;
+ return crypto_int64_negative_mask(crypto_int64_z);
+#endif
+}
- Rq_mult_small(hr,h,r);
- Round(c,hr);
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_positive_01(crypto_int64 crypto_int64_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int64 crypto_int64_q,crypto_int64_z;
+ __asm__ ("xorq %0,%0\n movq $1,%1\n testq %2,%2\n cmovgq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x) : "cc");
+ return crypto_int64_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int64 crypto_int64_z;
+ __asm__ ("cmp %1,0\n cset %0,gt" : "=r"(crypto_int64_z) : "r"(crypto_int64_x) : "cc");
+ return crypto_int64_z;
+#else
+ crypto_int64 crypto_int64_z = -crypto_int64_x;
+ crypto_int64_z ^= crypto_int64_x & crypto_int64_z;
+ return crypto_int64_unsigned_topbit_01(crypto_int64_z);
+#endif
}
-/* r = Decrypt(c,(f,ginv)) */
-static void Decrypt(small *r,const Fq *c,const small *f,const small *ginv)
-{
- Fq cf[p];
- Fq cf3[p];
- small e[p];
- small ev[p];
- int mask;
- int i;
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_zero_mask(crypto_int64 crypto_int64_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int64 crypto_int64_q,crypto_int64_z;
+ __asm__ ("xorq %0,%0\n movq $-1,%1\n testq %2,%2\n cmoveq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x) : "cc");
+ return crypto_int64_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int64 crypto_int64_z;
+ __asm__ ("cmp %1,0\n csetm %0,eq" : "=r"(crypto_int64_z) : "r"(crypto_int64_x) : "cc");
+ return crypto_int64_z;
+#else
+ return ~crypto_int64_nonzero_mask(crypto_int64_x);
+#endif
+}
- Rq_mult_small(cf,c,f);
- Rq_mult3(cf3,cf);
- R3_fromRq(e,cf3);
- R3_mult(ev,e,ginv);
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_zero_01(crypto_int64 crypto_int64_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int64 crypto_int64_q,crypto_int64_z;
+ __asm__ ("xorq %0,%0\n movq $1,%1\n testq %2,%2\n cmoveq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x) : "cc");
+ return crypto_int64_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int64 crypto_int64_z;
+ __asm__ ("cmp %1,0\n cset %0,eq" : "=r"(crypto_int64_z) : "r"(crypto_int64_x) : "cc");
+ return crypto_int64_z;
+#else
+ return 1-crypto_int64_nonzero_01(crypto_int64_x);
+#endif
+}
- mask = Weightw_mask(ev); /* 0 if weight w, else -1 */
- for (i = 0;i < w;++i) r[i] = ((ev[i]^1)&~mask)^1;
- for (i = w;i < p;++i) r[i] = ev[i]&~mask;
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_unequal_mask(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int64 crypto_int64_q,crypto_int64_z;
+ __asm__ ("xorq %0,%0\n movq $-1,%1\n cmpq %3,%2\n cmovneq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
+ return crypto_int64_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int64 crypto_int64_z;
+ __asm__ ("cmp %1,%2\n csetm %0,ne" : "=r"(crypto_int64_z) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
+ return crypto_int64_z;
+#else
+ return crypto_int64_nonzero_mask(crypto_int64_x ^ crypto_int64_y);
+#endif
}
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_unequal_01(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int64 crypto_int64_q,crypto_int64_z;
+ __asm__ ("xorq %0,%0\n movq $1,%1\n cmpq %3,%2\n cmovneq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
+ return crypto_int64_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int64 crypto_int64_z;
+ __asm__ ("cmp %1,%2\n cset %0,ne" : "=r"(crypto_int64_z) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
+ return crypto_int64_z;
+#else
+ return crypto_int64_nonzero_01(crypto_int64_x ^ crypto_int64_y);
#endif
+}
-/* ----- NTRU LPRime Core */
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_equal_mask(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int64 crypto_int64_q,crypto_int64_z;
+ __asm__ ("xorq %0,%0\n movq $-1,%1\n cmpq %3,%2\n cmoveq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
+ return crypto_int64_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int64 crypto_int64_z;
+ __asm__ ("cmp %1,%2\n csetm %0,eq" : "=r"(crypto_int64_z) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
+ return crypto_int64_z;
+#else
+ return ~crypto_int64_unequal_mask(crypto_int64_x,crypto_int64_y);
+#endif
+}
-#ifdef LPR
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_equal_01(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int64 crypto_int64_q,crypto_int64_z;
+ __asm__ ("xorq %0,%0\n movq $1,%1\n cmpq %3,%2\n cmoveq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
+ return crypto_int64_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int64 crypto_int64_z;
+ __asm__ ("cmp %1,%2\n cset %0,eq" : "=r"(crypto_int64_z) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
+ return crypto_int64_z;
+#else
+ return 1-crypto_int64_unequal_01(crypto_int64_x,crypto_int64_y);
+#endif
+}
-/* (G,A),a = KeyGen(G); leaves G unchanged */
-static void KeyGen(Fq *A,small *a,const Fq *G)
-{
- Fq aG[p];
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_min(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("cmpq %1,%0\n cmovgq %1,%0" : "+r"(crypto_int64_x) : "r"(crypto_int64_y) : "cc");
+ return crypto_int64_x;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ __asm__ ("cmp %0,%1\n csel %0,%0,%1,lt" : "+r"(crypto_int64_x) : "r"(crypto_int64_y) : "cc");
+ return crypto_int64_x;
+#else
+ crypto_int64 crypto_int64_r = crypto_int64_y ^ crypto_int64_x;
+ crypto_int64 crypto_int64_z = crypto_int64_y - crypto_int64_x;
+ crypto_int64_z ^= crypto_int64_r & (crypto_int64_z ^ crypto_int64_y);
+ crypto_int64_z = crypto_int64_negative_mask(crypto_int64_z);
+ crypto_int64_z &= crypto_int64_r;
+ return crypto_int64_x ^ crypto_int64_z;
+#endif
+}
- Short_random(a);
- Rq_mult_small(aG,G,a);
- Round(A,aG);
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_max(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__ ("cmpq %1,%0\n cmovlq %1,%0" : "+r"(crypto_int64_x) : "r"(crypto_int64_y) : "cc");
+ return crypto_int64_x;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ __asm__ ("cmp %0,%1\n csel %0,%1,%0,lt" : "+r"(crypto_int64_x) : "r"(crypto_int64_y) : "cc");
+ return crypto_int64_x;
+#else
+ crypto_int64 crypto_int64_r = crypto_int64_y ^ crypto_int64_x;
+ crypto_int64 crypto_int64_z = crypto_int64_y - crypto_int64_x;
+ crypto_int64_z ^= crypto_int64_r & (crypto_int64_z ^ crypto_int64_y);
+ crypto_int64_z = crypto_int64_negative_mask(crypto_int64_z);
+ crypto_int64_z &= crypto_int64_r;
+ return crypto_int64_y ^ crypto_int64_z;
+#endif
}
-/* B,T = Encrypt(r,(G,A),b) */
-static void Encrypt(Fq *B,int8 *T,const int8 *r,const Fq *G,const Fq *A,const small *b)
-{
- Fq bG[p];
- Fq bA[p];
- int i;
+__attribute__((unused))
+static inline
+void crypto_int64_minmax(crypto_int64 *crypto_int64_p,crypto_int64 *crypto_int64_q) {
+ crypto_int64 crypto_int64_x = *crypto_int64_p;
+ crypto_int64 crypto_int64_y = *crypto_int64_q;
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int64 crypto_int64_z;
+ __asm__ ("cmpq %2,%1\n movq %1,%0\n cmovgq %2,%1\n cmovgq %0,%2" : "=&r"(crypto_int64_z), "+&r"(crypto_int64_x), "+r"(crypto_int64_y) : : "cc");
+ *crypto_int64_p = crypto_int64_x;
+ *crypto_int64_q = crypto_int64_y;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int64 crypto_int64_r, crypto_int64_s;
+ __asm__ ("cmp %2,%3\n csel %0,%2,%3,lt\n csel %1,%3,%2,lt" : "=&r"(crypto_int64_r), "=r"(crypto_int64_s) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
+ *crypto_int64_p = crypto_int64_r;
+ *crypto_int64_q = crypto_int64_s;
+#else
+ crypto_int64 crypto_int64_r = crypto_int64_y ^ crypto_int64_x;
+ crypto_int64 crypto_int64_z = crypto_int64_y - crypto_int64_x;
+ crypto_int64_z ^= crypto_int64_r & (crypto_int64_z ^ crypto_int64_y);
+ crypto_int64_z = crypto_int64_negative_mask(crypto_int64_z);
+ crypto_int64_z &= crypto_int64_r;
+ crypto_int64_x ^= crypto_int64_z;
+ crypto_int64_y ^= crypto_int64_z;
+ *crypto_int64_p = crypto_int64_x;
+ *crypto_int64_q = crypto_int64_y;
+#endif
+}
- Rq_mult_small(bG,G,b);
- Round(B,bG);
- Rq_mult_small(bA,A,b);
- for (i = 0;i < I;++i) T[i] = Top(Fq_freeze(bA[i]+r[i]*q12));
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_smaller_mask(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int64 crypto_int64_q,crypto_int64_z;
+ __asm__ ("xorq %0,%0\n movq $-1,%1\n cmpq %3,%2\n cmovlq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
+ return crypto_int64_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int64 crypto_int64_z;
+ __asm__ ("cmp %1,%2\n csetm %0,lt" : "=r"(crypto_int64_z) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
+ return crypto_int64_z;
+#else
+ crypto_int64 crypto_int64_r = crypto_int64_x ^ crypto_int64_y;
+ crypto_int64 crypto_int64_z = crypto_int64_x - crypto_int64_y;
+ crypto_int64_z ^= crypto_int64_r & (crypto_int64_z ^ crypto_int64_x);
+ return crypto_int64_negative_mask(crypto_int64_z);
+#endif
}
-/* r = Decrypt((B,T),a) */
-static void Decrypt(int8 *r,const Fq *B,const int8 *T,const small *a)
-{
- Fq aB[p];
- int i;
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_smaller_01(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int64 crypto_int64_q,crypto_int64_z;
+ __asm__ ("xorq %0,%0\n movq $1,%1\n cmpq %3,%2\n cmovlq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
+ return crypto_int64_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int64 crypto_int64_z;
+ __asm__ ("cmp %1,%2\n cset %0,lt" : "=r"(crypto_int64_z) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
+ return crypto_int64_z;
+#else
+ crypto_int64 crypto_int64_r = crypto_int64_x ^ crypto_int64_y;
+ crypto_int64 crypto_int64_z = crypto_int64_x - crypto_int64_y;
+ crypto_int64_z ^= crypto_int64_r & (crypto_int64_z ^ crypto_int64_x);
+ return crypto_int64_unsigned_topbit_01(crypto_int64_z);
+#endif
+}
- Rq_mult_small(aB,B,a);
- for (i = 0;i < I;++i)
- r[i] = -int16_negative_mask(Fq_freeze(Right(T[i])-aB[i]+4*w+1));
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_leq_mask(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int64 crypto_int64_q,crypto_int64_z;
+ __asm__ ("xorq %0,%0\n movq $-1,%1\n cmpq %3,%2\n cmovleq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
+ return crypto_int64_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int64 crypto_int64_z;
+ __asm__ ("cmp %1,%2\n csetm %0,le" : "=r"(crypto_int64_z) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
+ return crypto_int64_z;
+#else
+ return ~crypto_int64_smaller_mask(crypto_int64_y,crypto_int64_x);
+#endif
}
+__attribute__((unused))
+static inline
+crypto_int64 crypto_int64_leq_01(crypto_int64 crypto_int64_x,crypto_int64 crypto_int64_y) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int64 crypto_int64_q,crypto_int64_z;
+ __asm__ ("xorq %0,%0\n movq $1,%1\n cmpq %3,%2\n cmovleq %1,%0" : "=&r"(crypto_int64_z), "=&r"(crypto_int64_q) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
+ return crypto_int64_z;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ crypto_int64 crypto_int64_z;
+ __asm__ ("cmp %1,%2\n cset %0,le" : "=r"(crypto_int64_z) : "r"(crypto_int64_x), "r"(crypto_int64_y) : "cc");
+ return crypto_int64_z;
+#else
+ return 1-crypto_int64_smaller_01(crypto_int64_y,crypto_int64_x);
#endif
+}
-/* ----- encoding I-bit inputs */
+__attribute__((unused))
+static inline
+int crypto_int64_ones_num(crypto_int64 crypto_int64_x) {
+ crypto_int64_unsigned crypto_int64_y = crypto_int64_x;
+ const crypto_int64 C0 = 0x5555555555555555;
+ const crypto_int64 C1 = 0x3333333333333333;
+ const crypto_int64 C2 = 0x0f0f0f0f0f0f0f0f;
+ crypto_int64_y -= ((crypto_int64_y >> 1) & C0);
+ crypto_int64_y = (crypto_int64_y & C1) + ((crypto_int64_y >> 2) & C1);
+ crypto_int64_y = (crypto_int64_y + (crypto_int64_y >> 4)) & C2;
+ crypto_int64_y += crypto_int64_y >> 8;
+ crypto_int64_y += crypto_int64_y >> 16;
+ crypto_int64_y = (crypto_int64_y + (crypto_int64_y >> 32)) & 0xff;
+ return crypto_int64_y;
+}
+
+__attribute__((unused))
+static inline
+int crypto_int64_bottomzeros_num(crypto_int64 crypto_int64_x) {
+#if defined(__GNUC__) && defined(__x86_64__)
+ crypto_int64 fallback = 64;
+ __asm__ ("bsfq %0,%0\n cmoveq %1,%0" : "+&r"(crypto_int64_x) : "r"(fallback) : "cc");
+ return crypto_int64_x;
+#elif defined(__GNUC__) && defined(__aarch64__)
+ int64_t crypto_int64_y;
+ __asm__ ("rbit %0,%1\n clz %0,%0" : "=r"(crypto_int64_y) : "r"(crypto_int64_x) : );
+ return crypto_int64_y;
+#else
+ crypto_int64 crypto_int64_y = crypto_int64_x ^ (crypto_int64_x-1);
+ crypto_int64_y = ((crypto_int64) crypto_int64_y) >> 1;
+ crypto_int64_y &= ~(crypto_int64_x & (((crypto_int64) 1) << (64-1)));
+ return crypto_int64_ones_num(crypto_int64_y);
+#endif
+}
-#ifdef LPR
+#endif
-#define Inputs_bytes (I/8)
-typedef int8 Inputs[I]; /* passed by reference */
+/* from supercop-20240808/crypto_sort/int32/portable4/sort.c */
+#define int32_MINMAX(a,b) crypto_int32_minmax(&a,&b)
-static void Inputs_encode(unsigned char *s,const Inputs r)
+static void crypto_sort_int32(void *array,long long n)
{
- int i;
- for (i = 0;i < Inputs_bytes;++i) s[i] = 0;
- for (i = 0;i < I;++i) s[i>>3] |= r[i]<<(i&7);
-}
-
-#endif
+ long long top,p,q,r,i,j;
+ int32 *x = array;
-/* ----- Expand */
+ if (n < 2) return;
+ top = 1;
+ while (top < n - top) top += top;
-#ifdef LPR
+ for (p = top;p >= 1;p >>= 1) {
+ i = 0;
+ while (i + 2 * p <= n) {
+ for (j = i;j < i + p;++j)
+ int32_MINMAX(x[j],x[j+p]);
+ i += 2 * p;
+ }
+ for (j = i;j < n - p;++j)
+ int32_MINMAX(x[j],x[j+p]);
-static const unsigned char aes_nonce[16] = {0};
+ i = 0;
+ j = 0;
+ for (q = top;q > p;q >>= 1) {
+ if (j != i) for (;;) {
+ if (j == n - q) goto done;
+ int32 a = x[j + p];
+ for (r = q;r > p;r >>= 1)
+ int32_MINMAX(a,x[j + r]);
+ x[j + p] = a;
+ ++j;
+ if (j == i + p) {
+ i += 2 * p;
+ break;
+ }
+ }
+ while (i + p <= n - q) {
+ for (j = i;j < i + p;++j) {
+ int32 a = x[j + p];
+ for (r = q;r > p;r >>= 1)
+ int32_MINMAX(a,x[j+r]);
+ x[j + p] = a;
+ }
+ i += 2 * p;
+ }
+ /* now i + p > n - q */
+ j = i;
+ while (j < n - q) {
+ int32 a = x[j + p];
+ for (r = q;r > p;r >>= 1)
+ int32_MINMAX(a,x[j+r]);
+ x[j + p] = a;
+ ++j;
+ }
-static void Expand(uint32 *L,const unsigned char *k)
-{
- int i;
- crypto_stream_aes256ctr((unsigned char *) L,4*p,aes_nonce,k);
- for (i = 0;i < p;++i) {
- uint32 L0 = ((unsigned char *) L)[4*i];
- uint32 L1 = ((unsigned char *) L)[4*i+1];
- uint32 L2 = ((unsigned char *) L)[4*i+2];
- uint32 L3 = ((unsigned char *) L)[4*i+3];
- L[i] = L0+(L1<<8)+(L2<<16)+(L3<<24);
+ done: ;
+ }
}
}
-#endif
-
-/* ----- Seeds */
-
-#ifdef LPR
+/* from supercop-20240808/crypto_sort/uint32/useint32/sort.c */
-#define Seeds_bytes 32
+/* can save time by vectorizing xor loops */
+/* can save time by integrating xor loops with int32_sort */
-static void Seeds_random(unsigned char *s)
+static void crypto_sort_uint32(void *array,long long n)
{
- randombytes(s,Seeds_bytes);
+ crypto_uint32 *x = array;
+ long long j;
+ for (j = 0;j < n;++j) x[j] ^= 0x80000000;
+ crypto_sort_int32(array,n);
+ for (j = 0;j < n;++j) x[j] ^= 0x80000000;
}
-#endif
-
-/* ----- Generator, HashShort */
-
-#ifdef LPR
+/* from supercop-20240808/crypto_kem/sntrup761/compact/kem.c */
+// 20240806 djb: some automated conversion to cryptoint
-/* G = Generator(k) */
-static void Generator(Fq *G,const unsigned char *k)
-{
- uint32 L[p];
- int i;
+#define p 761
+#define q 4591
+#define w 286
+#define q12 ((q - 1) / 2)
+typedef int8_t small;
+typedef int16_t Fq;
+#define Hash_bytes 32
+#define Small_bytes ((p + 3) / 4)
+typedef small Inputs[p];
+#define SecretKeys_bytes (2 * Small_bytes)
+#define Confirm_bytes 32
- Expand(L,k);
- for (i = 0;i < p;++i) G[i] = uint32_mod_uint14(L[i],q)-q12;
+static small F3_freeze(int16_t x) { return x - 3 * ((10923 * x + 16384) >> 15); }
+
+static Fq Fq_freeze(int32_t x) {
+ const int32_t q16 = (0x10000 + q / 2) / q;
+ const int32_t q20 = (0x100000 + q / 2) / q;
+ const int32_t q28 = (0x10000000 + q / 2) / q;
+ x -= q * ((q16 * x) >> 16);
+ x -= q * ((q20 * x) >> 20);
+ return x - q * ((q28 * x + 0x8000000) >> 28);
+}
+
+static int Weightw_mask(small *r) {
+ int i, weight = 0;
+ for (i = 0; i < p; ++i) weight += crypto_int64_bottombit_01(r[i]);
+ return crypto_int16_nonzero_mask(weight - w);
+}
+
+static void uint32_divmod_uint14(uint32_t *Q, uint16_t *r, uint32_t x, uint16_t m) {
+ uint32_t qpart, mask, v = 0x80000000 / m;
+ qpart = (x * (uint64_t)v) >> 31;
+ x -= qpart * m;
+ *Q = qpart;
+ qpart = (x * (uint64_t)v) >> 31;
+ x -= qpart * m;
+ *Q += qpart;
+ x -= m;
+ *Q += 1;
+ mask = crypto_int32_negative_mask(x);
+ x += mask & (uint32_t)m;
+ *Q += mask;
+ *r = x;
}
-/* out = HashShort(r) */
-static void HashShort(small *out,const Inputs r)
-{
- unsigned char s[Inputs_bytes];
- unsigned char h[Hash_bytes];
- uint32 L[p];
-
- Inputs_encode(s,r);
- Hash_prefix(h,5,s,sizeof s);
- Expand(L,h);
- Short_fromlist(out,L);
+static uint16_t uint32_mod_uint14(uint32_t x, uint16_t m) {
+ uint32_t Q;
+ uint16_t r;
+ uint32_divmod_uint14(&Q, &r, x, m);
+ return r;
}
-#endif
-
-/* ----- NTRU LPRime Expand */
-
-#ifdef LPR
-
-/* (S,A),a = XKeyGen() */
-static void XKeyGen(unsigned char *S,Fq *A,small *a)
-{
- Fq G[p];
-
- Seeds_random(S);
- Generator(G,S);
- KeyGen(A,a,G);
+static void Encode(unsigned char *out, const uint16_t *R, const uint16_t *M, long long len) {
+ if (len == 1) {
+ uint16_t r = R[0], m = M[0];
+ while (m > 1) {
+ *out++ = r;
+ r >>= 8;
+ m = (m + 255) >> 8;
+ }
+ }
+ if (len > 1) {
+ uint16_t R2[(len + 1) / 2], M2[(len + 1) / 2];
+ long long i;
+ for (i = 0; i < len - 1; i += 2) {
+ uint32_t m0 = M[i];
+ uint32_t r = R[i] + R[i + 1] * m0;
+ uint32_t m = M[i + 1] * m0;
+ while (m >= 16384) {
+ *out++ = r;
+ r >>= 8;
+ m = (m + 255) >> 8;
+ }
+ R2[i / 2] = r;
+ M2[i / 2] = m;
+ }
+ if (i < len) {
+ R2[i / 2] = R[i];
+ M2[i / 2] = M[i];
+ }
+ Encode(out, R2, M2, (len + 1) / 2);
+ }
}
-/* B,T = XEncrypt(r,(S,A)) */
-static void XEncrypt(Fq *B,int8 *T,const int8 *r,const unsigned char *S,const Fq *A)
-{
- Fq G[p];
- small b[p];
-
- Generator(G,S);
- HashShort(b,r);
- Encrypt(B,T,r,G,A,b);
+static void Decode(uint16_t *out, const unsigned char *S, const uint16_t *M, long long len) {
+ if (len == 1) {
+ if (M[0] == 1)
+ *out = 0;
+ else if (M[0] <= 256)
+ *out = uint32_mod_uint14(S[0], M[0]);
+ else
+ *out = uint32_mod_uint14(S[0] + (((uint16_t)S[1]) << 8), M[0]);
+ }
+ if (len > 1) {
+ uint16_t R2[(len + 1) / 2], M2[(len + 1) / 2], bottomr[len / 2];
+ uint32_t bottomt[len / 2];
+ long long i;
+ for (i = 0; i < len - 1; i += 2) {
+ uint32_t m = M[i] * (uint32_t)M[i + 1];
+ if (m > 256 * 16383) {
+ bottomt[i / 2] = 256 * 256;
+ bottomr[i / 2] = S[0] + 256 * S[1];
+ S += 2;
+ M2[i / 2] = (((m + 255) >> 8) + 255) >> 8;
+ } else if (m >= 16384) {
+ bottomt[i / 2] = 256;
+ bottomr[i / 2] = S[0];
+ S += 1;
+ M2[i / 2] = (m + 255) >> 8;
+ } else {
+ bottomt[i / 2] = 1;
+ bottomr[i / 2] = 0;
+ M2[i / 2] = m;
+ }
+ }
+ if (i < len) M2[i / 2] = M[i];
+ Decode(R2, S, M2, (len + 1) / 2);
+ for (i = 0; i < len - 1; i += 2) {
+ uint32_t r1, r = bottomr[i / 2];
+ uint16_t r0;
+ r += bottomt[i / 2] * R2[i / 2];
+ uint32_divmod_uint14(&r1, &r0, r, M[i]);
+ r1 = uint32_mod_uint14(r1, M[i + 1]);
+ *out++ = r0;
+ *out++ = r1;
+ }
+ if (i < len) *out++ = R2[i / 2];
+ }
}
-#define XDecrypt Decrypt
-
-#endif
+static void R3_fromRq(small *out, const Fq *r) {
+ int i;
+ for (i = 0; i < p; ++i) out[i] = F3_freeze(r[i]);
+}
-/* ----- encoding small polynomials (including short polynomials) */
+static void R3_mult(small *h, const small *f, const small *g) {
+ int16_t fg[p + p - 1];
+ int i, j;
+ for (i = 0; i < p + p - 1; ++i) fg[i] = 0;
+ for (i = 0; i < p; ++i)
+ for (j = 0; j < p; ++j) fg[i + j] += f[i] * (int16_t)g[j];
+ for (i = p; i < p + p - 1; ++i) fg[i - p] += fg[i];
+ for (i = p; i < p + p - 1; ++i) fg[i - p + 1] += fg[i];
+ for (i = 0; i < p; ++i) h[i] = F3_freeze(fg[i]);
+}
-#define Small_bytes ((p+3)/4)
+static int R3_recip(small *out, const small *in) {
+ small f[p + 1], g[p + 1], v[p + 1], r[p + 1];
+ int sign, swap, t, i, loop, delta = 1;
+ for (i = 0; i < p + 1; ++i) v[i] = 0;
+ for (i = 0; i < p + 1; ++i) r[i] = 0;
+ r[0] = 1;
+ for (i = 0; i < p; ++i) f[i] = 0;
+ f[0] = 1;
+ f[p - 1] = f[p] = -1;
+ for (i = 0; i < p; ++i) g[p - 1 - i] = in[i];
+ g[p] = 0;
+ for (loop = 0; loop < 2 * p - 1; ++loop) {
+ for (i = p; i > 0; --i) v[i] = v[i - 1];
+ v[0] = 0;
+ sign = -g[0] * f[0];
+ swap = crypto_int16_negative_mask(-delta) & crypto_int16_nonzero_mask(g[0]);
+ delta ^= swap & (delta ^ -delta);
+ delta += 1;
+ for (i = 0; i < p + 1; ++i) {
+ t = swap & (f[i] ^ g[i]);
+ f[i] ^= t;
+ g[i] ^= t;
+ t = swap & (v[i] ^ r[i]);
+ v[i] ^= t;
+ r[i] ^= t;
+ }
+ for (i = 0; i < p + 1; ++i) g[i] = F3_freeze(g[i] + sign * f[i]);
+ for (i = 0; i < p + 1; ++i) r[i] = F3_freeze(r[i] + sign * v[i]);
+ for (i = 0; i < p; ++i) g[i] = g[i + 1];
+ g[p] = 0;
+ }
+ sign = f[0];
+ for (i = 0; i < p; ++i) out[i] = sign * v[p - 1 - i];
+ return crypto_int16_nonzero_mask(delta);
+}
-/* these are the only functions that rely on p mod 4 = 1 */
+static void Rq_mult_small(Fq *h, const Fq *f, const small *g) {
+ int32_t fg[p + p - 1];
+ int i, j;
+ for (i = 0; i < p + p - 1; ++i) fg[i] = 0;
+ for (i = 0; i < p; ++i)
+ for (j = 0; j < p; ++j) fg[i + j] += f[i] * (int32_t)g[j];
+ for (i = p; i < p + p - 1; ++i) fg[i - p] += fg[i];
+ for (i = p; i < p + p - 1; ++i) fg[i - p + 1] += fg[i];
+ for (i = 0; i < p; ++i) h[i] = Fq_freeze(fg[i]);
+}
-static void Small_encode(unsigned char *s,const small *f)
-{
- small x;
+static void Rq_mult3(Fq *h, const Fq *f) {
int i;
+ for (i = 0; i < p; ++i) h[i] = Fq_freeze(3 * f[i]);
+}
- for (i = 0;i < p/4;++i) {
- x = *f++ + 1;
- x += (*f++ + 1)<<2;
- x += (*f++ + 1)<<4;
- x += (*f++ + 1)<<6;
- *s++ = x;
+static Fq Fq_recip(Fq a1) {
+ int i = 1;
+ Fq ai = a1;
+ while (i < q - 2) {
+ ai = Fq_freeze(a1 * (int32_t)ai);
+ i += 1;
}
- x = *f++ + 1;
- *s++ = x;
+ return ai;
}
-static void Small_decode(small *f,const unsigned char *s)
-{
- unsigned char x;
- int i;
-
- for (i = 0;i < p/4;++i) {
- x = *s++;
- *f++ = ((small)(x&3))-1; x >>= 2;
- *f++ = ((small)(x&3))-1; x >>= 2;
- *f++ = ((small)(x&3))-1; x >>= 2;
- *f++ = ((small)(x&3))-1;
+static int Rq_recip3(Fq *out, const small *in) {
+ Fq f[p + 1], g[p + 1], v[p + 1], r[p + 1], scale;
+ int swap, t, i, loop, delta = 1;
+ int32_t f0, g0;
+ for (i = 0; i < p + 1; ++i) v[i] = 0;
+ for (i = 0; i < p + 1; ++i) r[i] = 0;
+ r[0] = Fq_recip(3);
+ for (i = 0; i < p; ++i) f[i] = 0;
+ f[0] = 1;
+ f[p - 1] = f[p] = -1;
+ for (i = 0; i < p; ++i) g[p - 1 - i] = in[i];
+ g[p] = 0;
+ for (loop = 0; loop < 2 * p - 1; ++loop) {
+ for (i = p; i > 0; --i) v[i] = v[i - 1];
+ v[0] = 0;
+ swap = crypto_int16_negative_mask(-delta) & crypto_int16_nonzero_mask(g[0]);
+ delta ^= swap & (delta ^ -delta);
+ delta += 1;
+ for (i = 0; i < p + 1; ++i) {
+ t = swap & (f[i] ^ g[i]);
+ f[i] ^= t;
+ g[i] ^= t;
+ t = swap & (v[i] ^ r[i]);
+ v[i] ^= t;
+ r[i] ^= t;
+ }
+ f0 = f[0];
+ g0 = g[0];
+ for (i = 0; i < p + 1; ++i) g[i] = Fq_freeze(f0 * g[i] - g0 * f[i]);
+ for (i = 0; i < p + 1; ++i) r[i] = Fq_freeze(f0 * r[i] - g0 * v[i]);
+ for (i = 0; i < p; ++i) g[i] = g[i + 1];
+ g[p] = 0;
}
- x = *s++;
- *f++ = ((small)(x&3))-1;
+ scale = Fq_recip(f[0]);
+ for (i = 0; i < p; ++i) out[i] = Fq_freeze(scale * (int32_t)v[p - 1 - i]);
+ return crypto_int16_nonzero_mask(delta);
}
-/* ----- encoding general polynomials */
-
-#ifndef LPR
-
-static void Rq_encode(unsigned char *s,const Fq *r)
-{
- uint16 R[p],M[p];
+static void Round(Fq *out, const Fq *a) {
int i;
-
- for (i = 0;i < p;++i) R[i] = r[i]+q12;
- for (i = 0;i < p;++i) M[i] = q;
- Encode(s,R,M,p);
+ for (i = 0; i < p; ++i) out[i] = a[i] - F3_freeze(a[i]);
}
-static void Rq_decode(Fq *r,const unsigned char *s)
-{
- uint16 R[p],M[p];
+static void Short_fromlist(small *out, const uint32_t *in) {
+ uint32_t L[p];
int i;
-
- for (i = 0;i < p;++i) M[i] = q;
- Decode(R,s,M,p);
- for (i = 0;i < p;++i) r[i] = ((Fq)R[i])-q12;
+ for (i = 0; i < w; ++i) L[i] = in[i] & (uint32_t)-2;
+ for (i = w; i < p; ++i) L[i] = (in[i] & (uint32_t)-3) | 1;
+ crypto_sort_uint32(L, p);
+ for (i = 0; i < p; ++i) out[i] = (L[i] & 3) - 1;
}
-#endif
-
-/* ----- encoding rounded polynomials */
-
-static void Rounded_encode(unsigned char *s,const Fq *r)
-{
- uint16 R[p],M[p];
+static void Hash_prefix(unsigned char *out, int b, const unsigned char *in, int inlen) {
+ unsigned char x[inlen + 1], h[64];
int i;
-
- for (i = 0;i < p;++i) R[i] = ((r[i]+q12)*10923)>>15;
- for (i = 0;i < p;++i) M[i] = (q+2)/3;
- Encode(s,R,M,p);
+ x[0] = b;
+ for (i = 0; i < inlen; ++i) x[i + 1] = in[i];
+ crypto_hash_sha512(h, x, inlen + 1);
+ for (i = 0; i < 32; ++i) out[i] = h[i];
}
-static void Rounded_decode(Fq *r,const unsigned char *s)
-{
- uint16 R[p],M[p];
+static uint32_t urandom32(void) {
+ unsigned char c[4];
+ uint32_t result = 0;
int i;
-
- for (i = 0;i < p;++i) M[i] = (q+2)/3;
- Decode(R,s,M,p);
- for (i = 0;i < p;++i) r[i] = R[i]*3-q12;
+ randombytes(c, 4);
+ for (i = 0; i < 4; ++i) result += ((uint32_t)c[i]) << (8 * i);
+ return result;
}
-/* ----- encoding top polynomials */
-
-#ifdef LPR
-
-#define Top_bytes (I/2)
-
-static void Top_encode(unsigned char *s,const int8 *T)
-{
+static void Short_random(small *out) {
+ uint32_t L[p];
int i;
- for (i = 0;i < Top_bytes;++i)
- s[i] = T[2*i]+(T[2*i+1]<<4);
+ for (i = 0; i < p; ++i) L[i] = urandom32();
+ Short_fromlist(out, L);
}
-static void Top_decode(int8 *T,const unsigned char *s)
-{
+static void Small_random(small *out) {
int i;
- for (i = 0;i < Top_bytes;++i) {
- T[2*i] = s[i]&15;
- T[2*i+1] = s[i]>>4;
- }
+ for (i = 0; i < p; ++i) out[i] = (((urandom32() & 0x3fffffff) * 3) >> 30) - 1;
}
-#endif
-
-/* ----- Streamlined NTRU Prime Core plus encoding */
-
-#ifndef LPR
-
-typedef small Inputs[p]; /* passed by reference */
-#define Inputs_random Short_random
-#define Inputs_encode Small_encode
-#define Inputs_bytes Small_bytes
-
-#define Ciphertexts_bytes Rounded_bytes
-#define SecretKeys_bytes (2*Small_bytes)
-#define PublicKeys_bytes Rq_bytes
-
-/* pk,sk = ZKeyGen() */
-static void ZKeyGen(unsigned char *pk,unsigned char *sk)
-{
- Fq h[p];
- small f[p],v[p];
-
- KeyGen(h,f,v);
- Rq_encode(pk,h);
- Small_encode(sk,f); sk += Small_bytes;
- Small_encode(sk,v);
+static void KeyGen(Fq *h, small *f, small *ginv) {
+ small g[p];
+ Fq finv[p];
+ for (;;) {
+ int result;
+ Small_random(g);
+ result = R3_recip(ginv, g);
+ crypto_declassify(&result, sizeof result);
+ if (result == 0) break;
+ }
+ Short_random(f);
+ Rq_recip3(finv, f);
+ Rq_mult_small(h, finv, g);
}
-/* C = ZEncrypt(r,pk) */
-static void ZEncrypt(unsigned char *C,const Inputs r,const unsigned char *pk)
-{
- Fq h[p];
- Fq c[p];
- Rq_decode(h,pk);
- Encrypt(c,r,h);
- Rounded_encode(C,c);
+static void Encrypt(Fq *c, const small *r, const Fq *h) {
+ Fq hr[p];
+ Rq_mult_small(hr, h, r);
+ Round(c, hr);
+}
+
+static void Decrypt(small *r, const Fq *c, const small *f, const small *ginv) {
+ Fq cf[p], cf3[p];
+ small e[p], ev[p];
+ int mask, i;
+ Rq_mult_small(cf, c, f);
+ Rq_mult3(cf3, cf);
+ R3_fromRq(e, cf3);
+ R3_mult(ev, e, ginv);
+ mask = Weightw_mask(ev);
+ for (i = 0; i < w; ++i) r[i] = ((ev[i] ^ 1) & ~mask) ^ 1;
+ for (i = w; i < p; ++i) r[i] = ev[i] & ~mask;
+}
+
+static void Small_encode(unsigned char *s, const small *f) {
+ int i, j;
+ for (i = 0; i < p / 4; ++i) {
+ small x = 0;
+ for (j = 0;j < 4;++j) x += (*f++ + 1) << (2 * j);
+ *s++ = x;
+ }
+ *s = *f++ + 1;
}
-/* r = ZDecrypt(C,sk) */
-static void ZDecrypt(Inputs r,const unsigned char *C,const unsigned char *sk)
-{
- small f[p],v[p];
- Fq c[p];
-
- Small_decode(f,sk); sk += Small_bytes;
- Small_decode(v,sk);
- Rounded_decode(c,C);
- Decrypt(r,c,f,v);
+static void Small_decode(small *f, const unsigned char *s) {
+ int i, j;
+ for (i = 0; i < p / 4; ++i) {
+ unsigned char x = *s++;
+ for (j = 0;j < 4;++j) *f++ = ((small)((x >> (2 * j)) & 3)) - 1;
+ }
+ *f++ = ((small)(*s & 3)) - 1;
}
-#endif
-
-/* ----- NTRU LPRime Expand plus encoding */
-
-#ifdef LPR
-
-#define Ciphertexts_bytes (Rounded_bytes+Top_bytes)
-#define SecretKeys_bytes Small_bytes
-#define PublicKeys_bytes (Seeds_bytes+Rounded_bytes)
-
-static void Inputs_random(Inputs r)
-{
- unsigned char s[Inputs_bytes];
+static void Rq_encode(unsigned char *s, const Fq *r) {
+ uint16_t R[p], M[p];
int i;
-
- randombytes(s,sizeof s);
- for (i = 0;i < I;++i) r[i] = 1&(s[i>>3]>>(i&7));
+ for (i = 0; i < p; ++i) R[i] = r[i] + q12;
+ for (i = 0; i < p; ++i) M[i] = q;
+ Encode(s, R, M, p);
}
-/* pk,sk = ZKeyGen() */
-static void ZKeyGen(unsigned char *pk,unsigned char *sk)
-{
- Fq A[p];
- small a[p];
-
- XKeyGen(pk,A,a); pk += Seeds_bytes;
- Rounded_encode(pk,A);
- Small_encode(sk,a);
-}
-
-/* c = ZEncrypt(r,pk) */
-static void ZEncrypt(unsigned char *c,const Inputs r,const unsigned char *pk)
-{
- Fq A[p];
- Fq B[p];
- int8 T[I];
-
- Rounded_decode(A,pk+Seeds_bytes);
- XEncrypt(B,T,r,pk,A);
- Rounded_encode(c,B); c += Rounded_bytes;
- Top_encode(c,T);
+static void Rq_decode(Fq *r, const unsigned char *s) {
+ uint16_t R[p], M[p];
+ int i;
+ for (i = 0; i < p; ++i) M[i] = q;
+ Decode(R, s, M, p);
+ for (i = 0; i < p; ++i) r[i] = ((Fq)R[i]) - q12;
}
-/* r = ZDecrypt(C,sk) */
-static void ZDecrypt(Inputs r,const unsigned char *c,const unsigned char *sk)
-{
- small a[p];
- Fq B[p];
- int8 T[I];
-
- Small_decode(a,sk);
- Rounded_decode(B,c);
- Top_decode(T,c+Rounded_bytes);
- XDecrypt(r,B,T,a);
+static void Rounded_encode(unsigned char *s, const Fq *r) {
+ uint16_t R[p], M[p];
+ int i;
+ for (i = 0; i < p; ++i) R[i] = ((r[i] + q12) * 10923) >> 15;
+ for (i = 0; i < p; ++i) M[i] = (q + 2) / 3;
+ Encode(s, R, M, p);
}
-#endif
-
-/* ----- confirmation hash */
-
-#define Confirm_bytes 32
-
-/* h = HashConfirm(r,pk,cache); cache is Hash4(pk) */
-static void HashConfirm(unsigned char *h,const unsigned char *r,const unsigned char *pk,const unsigned char *cache)
-{
-#ifndef LPR
- unsigned char x[Hash_bytes*2];
+static void Rounded_decode(Fq *r, const unsigned char *s) {
+ uint16_t R[p], M[p];
int i;
+ for (i = 0; i < p; ++i) M[i] = (q + 2) / 3;
+ Decode(R, s, M, p);
+ for (i = 0; i < p; ++i) r[i] = R[i] * 3 - q12;
+}
- Hash_prefix(x,3,r,Inputs_bytes);
- for (i = 0;i < Hash_bytes;++i) x[Hash_bytes+i] = cache[i];
-#else
- unsigned char x[Inputs_bytes+Hash_bytes];
- int i;
+static void ZKeyGen(unsigned char *pk, unsigned char *sk) {
+ Fq h[p];
+ small f[p], v[p];
+ KeyGen(h, f, v);
+ Rq_encode(pk, h);
+ Small_encode(sk, f);
+ Small_encode(sk + Small_bytes, v);
+}
- for (i = 0;i < Inputs_bytes;++i) x[i] = r[i];
- for (i = 0;i < Hash_bytes;++i) x[Inputs_bytes+i] = cache[i];
-#endif
- Hash_prefix(h,2,x,sizeof x);
+static void ZEncrypt(unsigned char *C, const Inputs r, const unsigned char *pk) {
+ Fq h[p], c[p];
+ Rq_decode(h, pk);
+ Encrypt(c, r, h);
+ Rounded_encode(C, c);
}
-/* ----- session-key hash */
+static void ZDecrypt(Inputs r, const unsigned char *C, const unsigned char *sk) {
+ small f[p], v[p];
+ Fq c[p];
+ Small_decode(f, sk);
+ Small_decode(v, sk + Small_bytes);
+ Rounded_decode(c, C);
+ Decrypt(r, c, f, v);
+}
-/* k = HashSession(b,y,z) */
-static void HashSession(unsigned char *k,int b,const unsigned char *y,const unsigned char *z)
-{
-#ifndef LPR
- unsigned char x[Hash_bytes+Ciphertexts_bytes+Confirm_bytes];
+static void HashConfirm(unsigned char *h, const unsigned char *r, const unsigned char *cache) {
+ unsigned char x[Hash_bytes * 2];
int i;
+ Hash_prefix(x, 3, r, Small_bytes);
+ for (i = 0; i < Hash_bytes; ++i) x[Hash_bytes + i] = cache[i];
+ Hash_prefix(h, 2, x, sizeof x);
+}
- Hash_prefix(x,3,y,Inputs_bytes);
- for (i = 0;i < Ciphertexts_bytes+Confirm_bytes;++i) x[Hash_bytes+i] = z[i];
-#else
- unsigned char x[Inputs_bytes+Ciphertexts_bytes+Confirm_bytes];
+static void HashSession(unsigned char *k, int b, const unsigned char *y, const unsigned char *z) {
+ unsigned char x[Hash_bytes + crypto_kem_sntrup761_CIPHERTEXTBYTES];
int i;
-
- for (i = 0;i < Inputs_bytes;++i) x[i] = y[i];
- for (i = 0;i < Ciphertexts_bytes+Confirm_bytes;++i) x[Inputs_bytes+i] = z[i];
-#endif
- Hash_prefix(k,b,x,sizeof x);
+ Hash_prefix(x, 3, y, Small_bytes);
+ for (i = 0; i < crypto_kem_sntrup761_CIPHERTEXTBYTES; ++i) x[Hash_bytes + i] = z[i];
+ Hash_prefix(k, b, x, sizeof x);
}
-/* ----- Streamlined NTRU Prime and NTRU LPRime */
-
-/* pk,sk = KEM_KeyGen() */
-static void KEM_KeyGen(unsigned char *pk,unsigned char *sk)
-{
+int crypto_kem_sntrup761_keypair(unsigned char *pk, unsigned char *sk) {
int i;
-
- ZKeyGen(pk,sk); sk += SecretKeys_bytes;
- for (i = 0;i < PublicKeys_bytes;++i) *sk++ = pk[i];
- randombytes(sk,Inputs_bytes); sk += Inputs_bytes;
- Hash_prefix(sk,4,pk,PublicKeys_bytes);
+ ZKeyGen(pk, sk);
+ sk += SecretKeys_bytes;
+ for (i = 0; i < crypto_kem_sntrup761_PUBLICKEYBYTES; ++i) *sk++ = pk[i];
+ randombytes(sk, Small_bytes);
+ Hash_prefix(sk + Small_bytes, 4, pk, crypto_kem_sntrup761_PUBLICKEYBYTES);
+ return 0;
}
-/* c,r_enc = Hide(r,pk,cache); cache is Hash4(pk) */
-static void Hide(unsigned char *c,unsigned char *r_enc,const Inputs r,const unsigned char *pk,const unsigned char *cache)
-{
- Inputs_encode(r_enc,r);
- ZEncrypt(c,r,pk); c += Ciphertexts_bytes;
- HashConfirm(c,r_enc,pk,cache);
+static void Hide(unsigned char *c, unsigned char *r_enc, const Inputs r, const unsigned char *pk, const unsigned char *cache) {
+ Small_encode(r_enc, r);
+ ZEncrypt(c, r, pk);
+ HashConfirm(c + crypto_kem_sntrup761_CIPHERTEXTBYTES - Confirm_bytes, r_enc, cache);
}
-/* c,k = Encap(pk) */
-static void Encap(unsigned char *c,unsigned char *k,const unsigned char *pk)
-{
+int crypto_kem_sntrup761_enc(unsigned char *c, unsigned char *k, const unsigned char *pk) {
Inputs r;
- unsigned char r_enc[Inputs_bytes];
- unsigned char cache[Hash_bytes];
-
- Hash_prefix(cache,4,pk,PublicKeys_bytes);
- Inputs_random(r);
- Hide(c,r_enc,r,pk,cache);
- HashSession(k,1,r_enc,c);
+ unsigned char r_enc[Small_bytes], cache[Hash_bytes];
+ Hash_prefix(cache, 4, pk, crypto_kem_sntrup761_PUBLICKEYBYTES);
+ Short_random(r);
+ Hide(c, r_enc, r, pk, cache);
+ HashSession(k, 1, r_enc, c);
+ return 0;
}
-/* 0 if matching ciphertext+confirm, else -1 */
-static int Ciphertexts_diff_mask(const unsigned char *c,const unsigned char *c2)
-{
- uint16 differentbits = 0;
- int len = Ciphertexts_bytes+Confirm_bytes;
-
- while (len-- > 0) differentbits |= (*c++)^(*c2++);
- return (1&((differentbits-1)>>8))-1;
+static int Ciphertexts_diff_mask(const unsigned char *c, const unsigned char *c2) {
+ uint16_t differentbits = 0;
+ int len = crypto_kem_sntrup761_CIPHERTEXTBYTES;
+ while (len-- > 0) differentbits |= (*c++) ^ (*c2++);
+ return (crypto_int64_bitmod_01((differentbits - 1),8)) - 1;
}
-/* k = Decap(c,sk) */
-static void Decap(unsigned char *k,const unsigned char *c,const unsigned char *sk)
-{
+int crypto_kem_sntrup761_dec(unsigned char *k, const unsigned char *c, const unsigned char *sk) {
const unsigned char *pk = sk + SecretKeys_bytes;
- const unsigned char *rho = pk + PublicKeys_bytes;
- const unsigned char *cache = rho + Inputs_bytes;
+ const unsigned char *rho = pk + crypto_kem_sntrup761_PUBLICKEYBYTES;
+ const unsigned char *cache = rho + Small_bytes;
Inputs r;
- unsigned char r_enc[Inputs_bytes];
- unsigned char cnew[Ciphertexts_bytes+Confirm_bytes];
- int mask;
- int i;
-
- ZDecrypt(r,c,sk);
- Hide(cnew,r_enc,r,pk,cache);
- mask = Ciphertexts_diff_mask(c,cnew);
- for (i = 0;i < Inputs_bytes;++i) r_enc[i] ^= mask&(r_enc[i]^rho[i]);
- HashSession(k,1+mask,r_enc,c);
-}
-
-/* ----- crypto_kem API */
-
-
-int crypto_kem_sntrup761_keypair(unsigned char *pk,unsigned char *sk)
-{
- KEM_KeyGen(pk,sk);
- return 0;
-}
-
-int crypto_kem_sntrup761_enc(unsigned char *c,unsigned char *k,const unsigned char *pk)
-{
- Encap(c,k,pk);
+ unsigned char r_enc[Small_bytes], cnew[crypto_kem_sntrup761_CIPHERTEXTBYTES];
+ int mask, i;
+ ZDecrypt(r, c, sk);
+ Hide(cnew, r_enc, r, pk, cache);
+ mask = Ciphertexts_diff_mask(c, cnew);
+ for (i = 0; i < Small_bytes; ++i) r_enc[i] ^= mask & (r_enc[i] ^ rho[i]);
+ HashSession(k, 1 + mask, r_enc, c);
return 0;
}
-int crypto_kem_sntrup761_dec(unsigned char *k,const unsigned char *c,const unsigned char *sk)
-{
- Decap(k,c,sk);
- return 0;
-}
#endif /* USE_SNTRUP761X25519 */
diff --git a/sntrup761.sh b/sntrup761.sh
index db4e9ae..4de8dc3 100644
--- a/sntrup761.sh
+++ b/sntrup761.sh
@@ -1,25 +1,18 @@
#!/bin/sh
-# $OpenBSD: sntrup761.sh,v 1.7 2023/01/11 02:13:52 djm Exp $
+# $OpenBSD: sntrup761.sh,v 1.9 2024/09/16 05:37:05 djm Exp $
# Placed in the Public Domain.
#
-AUTHOR="supercop-20201130/crypto_kem/sntrup761/ref/implementors"
-FILES="
- supercop-20201130/crypto_sort/int32/portable4/int32_minmax.inc
- supercop-20201130/crypto_sort/int32/portable4/sort.c
- supercop-20201130/crypto_sort/uint32/useint32/sort.c
- supercop-20201130/crypto_kem/sntrup761/ref/uint32.c
- supercop-20201130/crypto_kem/sntrup761/ref/int32.c
- supercop-20201130/crypto_kem/sntrup761/ref/paramsmenu.h
- supercop-20201130/crypto_kem/sntrup761/ref/params.h
- supercop-20201130/crypto_kem/sntrup761/ref/Decode.h
- supercop-20201130/crypto_kem/sntrup761/ref/Decode.c
- supercop-20201130/crypto_kem/sntrup761/ref/Encode.h
- supercop-20201130/crypto_kem/sntrup761/ref/Encode.c
- supercop-20201130/crypto_kem/sntrup761/ref/kem.c
+AUTHOR="supercop-20240808/crypto_kem/sntrup761/ref/implementors"
+FILES=" supercop-20240808/cryptoint/crypto_int16.h
+ supercop-20240808/cryptoint/crypto_int32.h
+ supercop-20240808/cryptoint/crypto_int64.h
+ supercop-20240808/crypto_sort/int32/portable4/sort.c
+ supercop-20240808/crypto_sort/uint32/useint32/sort.c
+ supercop-20240808/crypto_kem/sntrup761/compact/kem.c
"
###
-set -e
+set -euo pipefail
cd $1
echo -n '/* $'
echo 'OpenBSD: $ */'
@@ -32,12 +25,19 @@ echo
echo '#include <string.h>'
echo '#include "crypto_api.h"'
echo
+echo '#define crypto_declassify(x, y) do {} while (0)'
+echo
# Map the types used in this code to the ones in crypto_api.h. We use #define
# instead of typedef since some systems have existing intXX types and do not
# permit multiple typedefs even if they do not conflict.
for t in int8 uint8 int16 uint16 int32 uint32 int64 uint64; do
echo "#define $t crypto_${t}"
done
+
+for x in 16 32 64 ; do
+ echo "extern volatile crypto_int$x crypto_int${x}_optblocker;"
+done
+
echo
for i in $FILES; do
echo "/* from $i */"
@@ -57,14 +57,32 @@ for i in $FILES; do
-e 's/[ ]*$//' \
$i | \
case "$i" in
- # Use int64_t for intermediate values in int32_MINMAX to prevent signed
- # 32-bit integer overflow when called by crypto_sort_uint32.
- */int32_minmax.inc)
- sed -e "s/int32 ab = b ^ a/int64_t ab = (int64_t)b ^ (int64_t)a/" \
- -e "s/int32 c = b - a/int64_t c = (int64_t)b - (int64_t)a/"
+ */cryptoint/crypto_int16.h)
+ sed -e "s/static void crypto_int16_store/void crypto_int16_store/" \
+ -e "s/^[#]define crypto_int16_optblocker.*//" \
+ -e "s/static void crypto_int16_minmax/void crypto_int16_minmax/"
+ ;;
+ */cryptoint/crypto_int32.h)
+ # Use int64_t for intermediate values in crypto_int32_minmax to
+ # prevent signed 32-bit integer overflow when called by
+ # crypto_sort_int32. Original code depends on -fwrapv (we set -ftrapv)
+ sed -e "s/static void crypto_int32_store/void crypto_int32_store/" \
+ -e "s/^[#]define crypto_int32_optblocker.*//" \
+ -e "s/crypto_int32 crypto_int32_r = crypto_int32_y ^ crypto_int32_x;/crypto_int64 crypto_int32_r = (crypto_int64)crypto_int32_y ^ (crypto_int64)crypto_int32_x;/" \
+ -e "s/crypto_int32 crypto_int32_z = crypto_int32_y - crypto_int32_x;/crypto_int64 crypto_int32_z = (crypto_int64)crypto_int32_y - (crypto_int64)crypto_int32_x;/" \
+ -e "s/static void crypto_int32_minmax/void crypto_int32_minmax/"
+ ;;
+ */cryptoint/crypto_int64.h)
+ sed -e "s/static void crypto_int64_store/void crypto_int64_store/" \
+ -e "s/^[#]define crypto_int64_optblocker.*//" \
+ -e "s/static void crypto_int64_minmax/void crypto_int64_minmax/"
;;
*/int32/portable4/sort.c)
- sed -e "s/void crypto_sort/void crypto_sort_int32/g"
+ sed -e "s/void crypto_sort[(]/void crypto_sort_int32(/g"
+ ;;
+ */int32/portable5/sort.c)
+ sed -e "s/crypto_sort_smallindices/crypto_sort_int32_smallindices/"\
+ -e "s/void crypto_sort[(]/void crypto_sort_int32(/g"
;;
*/uint32/useint32/sort.c)
sed -e "s/void crypto_sort/void crypto_sort_uint32/g"
diff --git a/srclimit.c b/srclimit.c
index 3dbdbf6..33116fa 100644
--- a/srclimit.c
+++ b/srclimit.c
@@ -381,6 +381,10 @@ srclimit_penalise(struct xaddr *addr, int penalty_type)
penalty_secs = penalty_cfg.penalty_noauth;
reason = "penalty: connections without attempting authentication";
break;
+ case SRCLIMIT_PENALTY_REFUSECONNECTION:
+ penalty_secs = penalty_cfg.penalty_refuseconnection;
+ reason = "penalty: connection prohibited by RefuseConnection";
+ break;
case SRCLIMIT_PENALTY_GRACE_EXCEEDED:
penalty_secs = penalty_cfg.penalty_crash;
reason = "penalty: exceeded LoginGraceTime";
diff --git a/srclimit.h b/srclimit.h
index 74a6f2b..77d951b 100644
--- a/srclimit.h
+++ b/srclimit.h
@@ -22,16 +22,18 @@ void srclimit_init(int, int, int, int,
int srclimit_check_allow(int, int);
void srclimit_done(int);
-#define SRCLIMIT_PENALTY_NONE 0
-#define SRCLIMIT_PENALTY_CRASH 1
-#define SRCLIMIT_PENALTY_AUTHFAIL 2
-#define SRCLIMIT_PENALTY_GRACE_EXCEEDED 3
-#define SRCLIMIT_PENALTY_NOAUTH 4
+#define SRCLIMIT_PENALTY_NONE 0
+#define SRCLIMIT_PENALTY_CRASH 1
+#define SRCLIMIT_PENALTY_AUTHFAIL 2
+#define SRCLIMIT_PENALTY_GRACE_EXCEEDED 3
+#define SRCLIMIT_PENALTY_NOAUTH 4
+#define SRCLIMIT_PENALTY_REFUSECONNECTION 5
/* meaningful exit values, used by sshd listener for penalties */
#define EXIT_LOGIN_GRACE 3 /* login grace period exceeded */
#define EXIT_CHILD_CRASH 4 /* preauth child crashed */
#define EXIT_AUTH_ATTEMPTED 5 /* at least one auth attempt made */
+#define EXIT_CONFIG_REFUSED 6 /* sshd_config RefuseConnection */
void srclimit_penalise(struct xaddr *, int);
int srclimit_penalty_check_allow(int, const char **);
diff --git a/ssh-add.c b/ssh-add.c
index e532d5c..0035cb8 100644
--- a/ssh-add.c
+++ b/ssh-add.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-add.c,v 1.172 2024/01/11 01:45:36 djm Exp $ */
+/* $OpenBSD: ssh-add.c,v 1.173 2024/09/06 02:30:44 djm Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -698,7 +698,7 @@ parse_dest_constraint_hop(const char *s, struct dest_constraint_hop *dch,
memset(dch, '\0', sizeof(*dch));
os = xstrdup(s);
- if ((host = strchr(os, '@')) == NULL)
+ if ((host = strrchr(os, '@')) == NULL)
host = os;
else {
*host++ = '\0';
diff --git a/ssh-ecdsa-sk.c b/ssh-ecdsa-sk.c
index 5dcd3c1..27ddf90 100644
--- a/ssh-ecdsa-sk.c
+++ b/ssh-ecdsa-sk.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-ecdsa-sk.c,v 1.18 2023/03/08 04:43:12 guenther Exp $ */
+/* $OpenBSD: ssh-ecdsa-sk.c,v 1.19 2024/08/15 00:51:51 djm Exp $ */
/*
* Copyright (c) 2000 Markus Friedl. All rights reserved.
* Copyright (c) 2010 Damien Miller. All rights reserved.
@@ -237,11 +237,13 @@ ssh_ecdsa_sk_verify(const struct sshkey *key,
struct sshkey_sig_details **detailsp)
{
ECDSA_SIG *esig = NULL;
+ EVP_MD_CTX *md_ctx = NULL;
BIGNUM *sig_r = NULL, *sig_s = NULL;
u_char sig_flags;
- u_char msghash[32], apphash[32], sighash[32];
+ u_char msghash[32], apphash[32];
u_int sig_counter;
- int is_webauthn = 0, ret = SSH_ERR_INTERNAL_ERROR;
+ u_char *sigb = NULL, *cp;
+ int is_webauthn = 0, ret = SSH_ERR_INTERNAL_ERROR, len = 0;
struct sshbuf *b = NULL, *sigbuf = NULL, *original_signed = NULL;
struct sshbuf *webauthn_wrapper = NULL, *webauthn_exts = NULL;
char *ktype = NULL, *webauthn_origin = NULL;
@@ -252,7 +254,7 @@ ssh_ecdsa_sk_verify(const struct sshkey *key,
if (detailsp != NULL)
*detailsp = NULL;
- if (key == NULL || key->ecdsa == NULL ||
+ if (key == NULL || key->pkey == NULL ||
sshkey_type_plain(key->type) != KEY_ECDSA_SK ||
sig == NULL || siglen == 0)
return SSH_ERR_INVALID_ARGUMENT;
@@ -363,21 +365,43 @@ ssh_ecdsa_sk_verify(const struct sshkey *key,
(ret = sshbuf_putb(original_signed, webauthn_exts)) != 0 ||
(ret = sshbuf_put(original_signed, msghash, sizeof(msghash))) != 0)
goto out;
- /* Signature is over H(original_signed) */
- if ((ret = ssh_digest_buffer(SSH_DIGEST_SHA256, original_signed,
- sighash, sizeof(sighash))) != 0)
- goto out;
details->sk_counter = sig_counter;
details->sk_flags = sig_flags;
#ifdef DEBUG_SK
fprintf(stderr, "%s: signed buf:\n", __func__);
sshbuf_dump(original_signed, stderr);
- fprintf(stderr, "%s: signed hash:\n", __func__);
- sshbuf_dump_data(sighash, sizeof(sighash), stderr);
#endif
+ if ((md_ctx = EVP_MD_CTX_new()) == NULL) {
+ ret = SSH_ERR_ALLOC_FAIL;
+ goto out;
+ }
+ if ((len = i2d_ECDSA_SIG(esig, NULL)) <= 0) {
+ len = 0;
+ ret = SSH_ERR_LIBCRYPTO_ERROR;
+ goto out;
+ }
+ if ((sigb = calloc(1, len)) == NULL) {
+ ret = SSH_ERR_ALLOC_FAIL;
+ goto out;
+ }
+ cp = sigb; /* ASN1_item_i2d increments the pointer past the object */
+ if (i2d_ECDSA_SIG(esig, &cp) != len) {
+ ret = SSH_ERR_LIBCRYPTO_ERROR;
+ goto out;
+ }
+#ifdef DEBUG_SK
+ fprintf(stderr, "%s: signed hash:\n", __func__);
+ sshbuf_dump_data(sigb, len, stderr);
+#endif
/* Verify it */
- switch (ECDSA_do_verify(sighash, sizeof(sighash), esig, key->ecdsa)) {
+ if (EVP_DigestVerifyInit(md_ctx, NULL, EVP_sha256(), NULL,
+ key->pkey) != 1) {
+ ret = SSH_ERR_LIBCRYPTO_ERROR;
+ goto out;
+ }
+ switch (EVP_DigestVerify(md_ctx, sigb, len,
+ sshbuf_ptr(original_signed), sshbuf_len(original_signed))) {
case 1:
ret = 0;
break;
@@ -397,7 +421,6 @@ ssh_ecdsa_sk_verify(const struct sshkey *key,
explicit_bzero(&sig_flags, sizeof(sig_flags));
explicit_bzero(&sig_counter, sizeof(sig_counter));
explicit_bzero(msghash, sizeof(msghash));
- explicit_bzero(sighash, sizeof(msghash));
explicit_bzero(apphash, sizeof(apphash));
sshkey_sig_details_free(details);
sshbuf_free(webauthn_wrapper);
@@ -410,6 +433,8 @@ ssh_ecdsa_sk_verify(const struct sshkey *key,
BN_clear_free(sig_r);
BN_clear_free(sig_s);
free(ktype);
+ freezero(sigb, len);
+ EVP_MD_CTX_free(md_ctx);
return ret;
}
diff --git a/ssh-ecdsa.c b/ssh-ecdsa.c
index 341c324..695ed45 100644
--- a/ssh-ecdsa.c
+++ b/ssh-ecdsa.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-ecdsa.c,v 1.26 2023/03/08 04:43:12 guenther Exp $ */
+/* $OpenBSD: ssh-ecdsa.c,v 1.27 2024/08/15 00:51:51 djm Exp $ */
/*
* Copyright (c) 2000 Markus Friedl. All rights reserved.
* Copyright (c) 2010 Damien Miller. All rights reserved.
@@ -45,6 +45,61 @@
#include "openbsd-compat/openssl-compat.h"
+int
+sshkey_ecdsa_fixup_group(EVP_PKEY *k)
+{
+ int nids[] = {
+ NID_X9_62_prime256v1,
+ NID_secp384r1,
+#ifdef OPENSSL_HAS_NISTP521
+ NID_secp521r1,
+#endif
+ -1
+ };
+ int nid = -1;
+ u_int i;
+ const EC_GROUP *g;
+ EC_KEY *ec = NULL;
+ EC_GROUP *eg = NULL;
+
+ if ((ec = EVP_PKEY_get1_EC_KEY(k)) == NULL ||
+ (g = EC_KEY_get0_group(ec)) == NULL)
+ goto out;
+ /*
+ * The group may be stored in a ASN.1 encoded private key in one of two
+ * ways: as a "named group", which is reconstituted by ASN.1 object ID
+ * or explicit group parameters encoded into the key blob. Only the
+ * "named group" case sets the group NID for us, but we can figure
+ * it out for the other case by comparing against all the groups that
+ * are supported.
+ */
+ if ((nid = EC_GROUP_get_curve_name(g)) > 0)
+ goto out;
+ nid = -1;
+ for (i = 0; nids[i] != -1; i++) {
+ if ((eg = EC_GROUP_new_by_curve_name(nids[i])) == NULL)
+ goto out;
+ if (EC_GROUP_cmp(g, eg, NULL) == 0)
+ break;
+ EC_GROUP_free(eg);
+ eg = NULL;
+ }
+ if (nids[i] == -1)
+ goto out;
+
+ /* Use the group with the NID attached */
+ EC_GROUP_set_asn1_flag(eg, OPENSSL_EC_NAMED_CURVE);
+ if (EC_KEY_set_group(ec, eg) != 1 ||
+ EVP_PKEY_set1_EC_KEY(k, ec) != 1)
+ goto out;
+ /* success */
+ nid = nids[i];
+ out:
+ EC_KEY_free(ec);
+ EC_GROUP_free(eg);
+ return nid;
+}
+
static u_int
ssh_ecdsa_size(const struct sshkey *key)
{
@@ -65,30 +120,16 @@ ssh_ecdsa_size(const struct sshkey *key)
static void
ssh_ecdsa_cleanup(struct sshkey *k)
{
- EC_KEY_free(k->ecdsa);
- k->ecdsa = NULL;
+ EVP_PKEY_free(k->pkey);
+ k->pkey = NULL;
}
static int
ssh_ecdsa_equal(const struct sshkey *a, const struct sshkey *b)
{
- const EC_GROUP *grp_a, *grp_b;
- const EC_POINT *pub_a, *pub_b;
-
- if (a->ecdsa == NULL || b->ecdsa == NULL)
+ if (a->pkey == NULL || b->pkey == NULL)
return 0;
- if ((grp_a = EC_KEY_get0_group(a->ecdsa)) == NULL ||
- (grp_b = EC_KEY_get0_group(b->ecdsa)) == NULL)
- return 0;
- if ((pub_a = EC_KEY_get0_public_key(a->ecdsa)) == NULL ||
- (pub_b = EC_KEY_get0_public_key(b->ecdsa)) == NULL)
- return 0;
- if (EC_GROUP_cmp(grp_a, grp_b, NULL) != 0)
- return 0;
- if (EC_POINT_cmp(grp_a, pub_a, pub_b, NULL) != 0)
- return 0;
-
- return 1;
+ return EVP_PKEY_cmp(a->pkey, b->pkey) == 1;
}
static int
@@ -97,11 +138,11 @@ ssh_ecdsa_serialize_public(const struct sshkey *key, struct sshbuf *b,
{
int r;
- if (key->ecdsa == NULL)
+ if (key->pkey == NULL)
return SSH_ERR_INVALID_ARGUMENT;
if ((r = sshbuf_put_cstring(b,
sshkey_curve_nid_to_name(key->ecdsa_nid))) != 0 ||
- (r = sshbuf_put_eckey(b, key->ecdsa)) != 0)
+ (r = sshbuf_put_ec_pkey(b, key->pkey)) != 0)
return r;
return 0;
@@ -118,7 +159,7 @@ ssh_ecdsa_serialize_private(const struct sshkey *key, struct sshbuf *b,
return r;
}
if ((r = sshbuf_put_bignum2(b,
- EC_KEY_get0_private_key(key->ecdsa))) != 0)
+ EC_KEY_get0_private_key(EVP_PKEY_get0_EC_KEY(key->pkey)))) != 0)
return r;
return 0;
}
@@ -126,31 +167,64 @@ ssh_ecdsa_serialize_private(const struct sshkey *key, struct sshbuf *b,
static int
ssh_ecdsa_generate(struct sshkey *k, int bits)
{
- EC_KEY *private;
+ EVP_PKEY *res = NULL;
+ EVP_PKEY_CTX *ctx = NULL;
+ int ret = SSH_ERR_INTERNAL_ERROR;
if ((k->ecdsa_nid = sshkey_ecdsa_bits_to_nid(bits)) == -1)
return SSH_ERR_KEY_LENGTH;
- if ((private = EC_KEY_new_by_curve_name(k->ecdsa_nid)) == NULL)
+
+ if ((ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, NULL)) == NULL)
return SSH_ERR_ALLOC_FAIL;
- if (EC_KEY_generate_key(private) != 1) {
- EC_KEY_free(private);
- return SSH_ERR_LIBCRYPTO_ERROR;
+
+ if (EVP_PKEY_keygen_init(ctx) <= 0 ||
+ EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, k->ecdsa_nid) <= 0 ||
+ EVP_PKEY_keygen(ctx, &res) <= 0) {
+ ret = SSH_ERR_LIBCRYPTO_ERROR;
+ goto out;
}
- EC_KEY_set_asn1_flag(private, OPENSSL_EC_NAMED_CURVE);
- k->ecdsa = private;
- return 0;
+ /* success */
+ k->pkey = res;
+ res = NULL;
+ ret = 0;
+ out:
+ EVP_PKEY_free(res);
+ EVP_PKEY_CTX_free(ctx);
+ return ret;
}
static int
ssh_ecdsa_copy_public(const struct sshkey *from, struct sshkey *to)
{
+ const EC_KEY *ec_from;
+ EC_KEY *ec_to = NULL;
+ int ret = SSH_ERR_INTERNAL_ERROR;
+
+ ec_from = EVP_PKEY_get0_EC_KEY(from->pkey);
+ if (ec_from == NULL)
+ return SSH_ERR_LIBCRYPTO_ERROR;
+
to->ecdsa_nid = from->ecdsa_nid;
- if ((to->ecdsa = EC_KEY_new_by_curve_name(from->ecdsa_nid)) == NULL)
+ if ((ec_to = EC_KEY_new_by_curve_name(from->ecdsa_nid)) == NULL)
return SSH_ERR_ALLOC_FAIL;
- if (EC_KEY_set_public_key(to->ecdsa,
- EC_KEY_get0_public_key(from->ecdsa)) != 1)
- return SSH_ERR_LIBCRYPTO_ERROR; /* caller will free k->ecdsa */
- return 0;
+ if (EC_KEY_set_public_key(ec_to,
+ EC_KEY_get0_public_key(ec_from)) != 1) {
+ ret = SSH_ERR_LIBCRYPTO_ERROR;
+ goto out;
+ }
+ EVP_PKEY_free(to->pkey);
+ if ((to->pkey = EVP_PKEY_new()) == NULL) {
+ ret = SSH_ERR_ALLOC_FAIL;
+ goto out;
+ }
+ if (EVP_PKEY_set1_EC_KEY(to->pkey, ec_to) != 1) {
+ ret = SSH_ERR_LIBCRYPTO_ERROR;
+ goto out;
+ }
+ ret = 0;
+ out:
+ EC_KEY_free(ec_to);
+ return ret;
}
static int
@@ -159,6 +233,8 @@ ssh_ecdsa_deserialize_public(const char *ktype, struct sshbuf *b,
{
int r;
char *curve = NULL;
+ EVP_PKEY *pkey = NULL;
+ EC_KEY *ec = NULL;
if ((key->ecdsa_nid = sshkey_ecdsa_nid_from_name(ktype)) == -1)
return SSH_ERR_INVALID_ARGUMENT;
@@ -168,31 +244,39 @@ ssh_ecdsa_deserialize_public(const char *ktype, struct sshbuf *b,
r = SSH_ERR_EC_CURVE_MISMATCH;
goto out;
}
- EC_KEY_free(key->ecdsa);
- key->ecdsa = NULL;
- if ((key->ecdsa = EC_KEY_new_by_curve_name(key->ecdsa_nid)) == NULL) {
+ if ((ec = EC_KEY_new_by_curve_name(key->ecdsa_nid)) == NULL) {
r = SSH_ERR_LIBCRYPTO_ERROR;
goto out;
}
- if ((r = sshbuf_get_eckey(b, key->ecdsa)) != 0)
+ if ((r = sshbuf_get_eckey(b, ec)) != 0)
goto out;
- if (sshkey_ec_validate_public(EC_KEY_get0_group(key->ecdsa),
- EC_KEY_get0_public_key(key->ecdsa)) != 0) {
+ if (sshkey_ec_validate_public(EC_KEY_get0_group(ec),
+ EC_KEY_get0_public_key(ec)) != 0) {
r = SSH_ERR_KEY_INVALID_EC_VALUE;
goto out;
}
+ if ((pkey = EVP_PKEY_new()) == NULL) {
+ r = SSH_ERR_ALLOC_FAIL;
+ goto out;
+ }
+ if (EVP_PKEY_set1_EC_KEY(pkey, ec) != 1) {
+ r = SSH_ERR_LIBCRYPTO_ERROR;
+ goto out;
+ }
+ EVP_PKEY_free(key->pkey);
+ key->pkey = pkey;
+ pkey = NULL;
/* success */
r = 0;
#ifdef DEBUG_PK
- sshkey_dump_ec_point(EC_KEY_get0_group(key->ecdsa),
- EC_KEY_get0_public_key(key->ecdsa));
+ sshkey_dump_ec_point(
+ EC_KEY_get0_group(EVP_PKEY_get0_EC_KEY(key->pkey)),
+ EC_KEY_get0_public_key(EVP_PKEY_get0_EC_KEY(key->pkey)));
#endif
out:
+ EC_KEY_free(ec);
+ EVP_PKEY_free(pkey);
free(curve);
- if (r != 0) {
- EC_KEY_free(key->ecdsa);
- key->ecdsa = NULL;
- }
return r;
}
@@ -202,6 +286,7 @@ ssh_ecdsa_deserialize_private(const char *ktype, struct sshbuf *b,
{
int r;
BIGNUM *exponent = NULL;
+ EC_KEY *ec = NULL;
if (!sshkey_is_cert(key)) {
if ((r = ssh_ecdsa_deserialize_public(ktype, b, key)) != 0)
@@ -209,16 +294,25 @@ ssh_ecdsa_deserialize_private(const char *ktype, struct sshbuf *b,
}
if ((r = sshbuf_get_bignum2(b, &exponent)) != 0)
goto out;
- if (EC_KEY_set_private_key(key->ecdsa, exponent) != 1) {
+ if ((ec = EVP_PKEY_get1_EC_KEY(key->pkey)) == NULL) {
+ r = SSH_ERR_LIBCRYPTO_ERROR;
+ goto out;
+ }
+ if (EC_KEY_set_private_key(ec, exponent) != 1) {
r = SSH_ERR_LIBCRYPTO_ERROR;
goto out;
}
- if ((r = sshkey_ec_validate_private(key->ecdsa)) != 0)
+ if ((r = sshkey_ec_validate_private(ec)) != 0)
goto out;
+ if (EVP_PKEY_set1_EC_KEY(key->pkey, ec) != 1) {
+ r = SSH_ERR_LIBCRYPTO_ERROR;
+ goto out;
+ }
/* success */
r = 0;
out:
BN_clear_free(exponent);
+ EC_KEY_free(ec);
return r;
}
@@ -229,34 +323,35 @@ ssh_ecdsa_sign(struct sshkey *key,
const char *alg, const char *sk_provider, const char *sk_pin, u_int compat)
{
ECDSA_SIG *esig = NULL;
+ unsigned char *sigb = NULL;
+ const unsigned char *psig;
const BIGNUM *sig_r, *sig_s;
int hash_alg;
- u_char digest[SSH_DIGEST_MAX_LENGTH];
- size_t len, hlen;
+ size_t slen = 0;
struct sshbuf *b = NULL, *bb = NULL;
- int ret = SSH_ERR_INTERNAL_ERROR;
+ int len = 0, ret = SSH_ERR_INTERNAL_ERROR;
if (lenp != NULL)
*lenp = 0;
if (sigp != NULL)
*sigp = NULL;
- if (key == NULL || key->ecdsa == NULL ||
+ if (key == NULL || key->pkey == NULL ||
sshkey_type_plain(key->type) != KEY_ECDSA)
return SSH_ERR_INVALID_ARGUMENT;
- if ((hash_alg = sshkey_ec_nid_to_hash_alg(key->ecdsa_nid)) == -1 ||
- (hlen = ssh_digest_bytes(hash_alg)) == 0)
+ if ((hash_alg = sshkey_ec_nid_to_hash_alg(key->ecdsa_nid)) == -1)
return SSH_ERR_INTERNAL_ERROR;
- if ((ret = ssh_digest_memory(hash_alg, data, dlen,
- digest, sizeof(digest))) != 0)
+
+ if ((ret = sshkey_pkey_digest_sign(key->pkey, hash_alg, &sigb, &slen,
+ data, dlen)) != 0)
goto out;
- if ((esig = ECDSA_do_sign(digest, hlen, key->ecdsa)) == NULL) {
+ psig = sigb;
+ if ((esig = d2i_ECDSA_SIG(NULL, &psig, slen)) == NULL) {
ret = SSH_ERR_LIBCRYPTO_ERROR;
goto out;
}
-
if ((bb = sshbuf_new()) == NULL || (b = sshbuf_new()) == NULL) {
ret = SSH_ERR_ALLOC_FAIL;
goto out;
@@ -280,7 +375,7 @@ ssh_ecdsa_sign(struct sshkey *key,
*lenp = len;
ret = 0;
out:
- explicit_bzero(digest, sizeof(digest));
+ freezero(sigb, slen);
sshbuf_free(b);
sshbuf_free(bb);
ECDSA_SIG_free(esig);
@@ -295,20 +390,18 @@ ssh_ecdsa_verify(const struct sshkey *key,
{
ECDSA_SIG *esig = NULL;
BIGNUM *sig_r = NULL, *sig_s = NULL;
- int hash_alg;
- u_char digest[SSH_DIGEST_MAX_LENGTH];
- size_t hlen;
+ int hash_alg, len = 0;
int ret = SSH_ERR_INTERNAL_ERROR;
struct sshbuf *b = NULL, *sigbuf = NULL;
char *ktype = NULL;
+ unsigned char *sigb = NULL, *cp;
- if (key == NULL || key->ecdsa == NULL ||
+ if (key == NULL || key->pkey == NULL ||
sshkey_type_plain(key->type) != KEY_ECDSA ||
sig == NULL || siglen == 0)
return SSH_ERR_INVALID_ARGUMENT;
- if ((hash_alg = sshkey_ec_nid_to_hash_alg(key->ecdsa_nid)) == -1 ||
- (hlen = ssh_digest_bytes(hash_alg)) == 0)
+ if ((hash_alg = sshkey_ec_nid_to_hash_alg(key->ecdsa_nid)) == -1)
return SSH_ERR_INTERNAL_ERROR;
/* fetch signature */
@@ -334,6 +427,11 @@ ssh_ecdsa_verify(const struct sshkey *key,
ret = SSH_ERR_INVALID_FORMAT;
goto out;
}
+ if (sshbuf_len(sigbuf) != 0) {
+ ret = SSH_ERR_UNEXPECTED_TRAILING_DATA;
+ goto out;
+ }
+
if ((esig = ECDSA_SIG_new()) == NULL) {
ret = SSH_ERR_ALLOC_FAIL;
goto out;
@@ -344,28 +442,26 @@ ssh_ecdsa_verify(const struct sshkey *key,
}
sig_r = sig_s = NULL; /* transferred */
- if (sshbuf_len(sigbuf) != 0) {
- ret = SSH_ERR_UNEXPECTED_TRAILING_DATA;
+ if ((len = i2d_ECDSA_SIG(esig, NULL)) <= 0) {
+ len = 0;
+ ret = SSH_ERR_LIBCRYPTO_ERROR;
goto out;
}
- if ((ret = ssh_digest_memory(hash_alg, data, dlen,
- digest, sizeof(digest))) != 0)
- goto out;
-
- switch (ECDSA_do_verify(digest, hlen, esig, key->ecdsa)) {
- case 1:
- ret = 0;
- break;
- case 0:
- ret = SSH_ERR_SIGNATURE_INVALID;
+ if ((sigb = calloc(1, len)) == NULL) {
+ ret = SSH_ERR_ALLOC_FAIL;
goto out;
- default:
+ }
+ cp = sigb; /* ASN1_item_i2d increments the pointer past the object */
+ if (i2d_ECDSA_SIG(esig, &cp) != len) {
ret = SSH_ERR_LIBCRYPTO_ERROR;
goto out;
}
-
+ if ((ret = sshkey_pkey_digest_verify(key->pkey, hash_alg,
+ data, dlen, sigb, len)) != 0)
+ goto out;
+ /* success */
out:
- explicit_bzero(digest, sizeof(digest));
+ freezero(sigb, len);
sshbuf_free(sigbuf);
sshbuf_free(b);
ECDSA_SIG_free(esig);
diff --git a/ssh-keygen.0 b/ssh-keygen.0
index a731a7f..2e65a2b 100644
--- a/ssh-keygen.0
+++ b/ssh-keygen.0
@@ -319,12 +319,14 @@ DESCRIPTION
-t ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa
Specifies the type of key to create. The possible values are
- M-bM-^@M-^\ecdsaM-bM-^@M-^], M-bM-^@M-^\ecdsa-skM-bM-^@M-^], M-bM-^@M-^\ed25519M-bM-^@M-^], M-bM-^@M-^\ed25519-skM-bM-^@M-^], or M-bM-^@M-^\rsaM-bM-^@M-^].
+ M-bM-^@M-^\ecdsaM-bM-^@M-^], M-bM-^@M-^\ecdsa-skM-bM-^@M-^], M-bM-^@M-^\ed25519 (the default),M-bM-^@M-^] M-bM-^@M-^\ed25519-skM-bM-^@M-^], or
+ M-bM-^@M-^\rsaM-bM-^@M-^].
This flag may also be used to specify the desired signature type
when signing certificates using an RSA CA key. The available RSA
signature variants are M-bM-^@M-^\ssh-rsaM-bM-^@M-^] (SHA1 signatures, not
- recommended), M-bM-^@M-^\rsa-sha2-256M-bM-^@M-^], and M-bM-^@M-^\rsa-sha2-512M-bM-^@M-^] (the default).
+ recommended), M-bM-^@M-^\rsa-sha2-256M-bM-^@M-^], and M-bM-^@M-^\rsa-sha2-512M-bM-^@M-^] (the default for
+ RSA keys).
-U When used in combination with -s or -Y sign, this option
indicates that a CA key resides in a ssh-agent(1). See the
@@ -904,4 +906,4 @@ AUTHORS
created OpenSSH. Markus Friedl contributed the support for SSH protocol
versions 1.5 and 2.0.
-OpenBSD 7.5 June 17, 2024 OpenBSD 7.5
+OpenBSD 7.5 August 17, 2024 OpenBSD 7.5
diff --git a/ssh-keygen.1 b/ssh-keygen.1
index df6803f..06f0555 100644
--- a/ssh-keygen.1
+++ b/ssh-keygen.1
@@ -1,4 +1,4 @@
-.\" $OpenBSD: ssh-keygen.1,v 1.232 2024/06/17 13:50:18 naddy Exp $
+.\" $OpenBSD: ssh-keygen.1,v 1.233 2024/08/17 08:35:04 djm Exp $
.\"
.\" Author: Tatu Ylonen <ylo@cs.hut.fi>
.\" Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -35,7 +35,7 @@
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
-.Dd $Mdocdate: June 17 2024 $
+.Dd $Mdocdate: August 17 2024 $
.Dt SSH-KEYGEN 1
.Os
.Sh NAME
@@ -581,7 +581,7 @@ Specifies the type of key to create.
The possible values are
.Dq ecdsa ,
.Dq ecdsa-sk ,
-.Dq ed25519 ,
+.Dq ed25519 (the default),
.Dq ed25519-sk ,
or
.Dq rsa .
@@ -594,7 +594,7 @@ The available RSA signature variants are
.Dq rsa-sha2-256 ,
and
.Dq rsa-sha2-512
-(the default).
+(the default for RSA keys).
.It Fl U
When used in combination with
.Fl s
diff --git a/ssh-keygen.c b/ssh-keygen.c
index 97c6d13..8396c40 100644
--- a/ssh-keygen.c
+++ b/ssh-keygen.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-keygen.c,v 1.472 2024/01/11 01:45:36 djm Exp $ */
+/* $OpenBSD: ssh-keygen.c,v 1.475 2024/09/15 00:47:01 djm Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1994 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -261,7 +261,7 @@ ask_filename(struct passwd *pw, const char *prompt)
if (key_type_name == NULL)
name = _PATH_SSH_CLIENT_ID_ED25519;
else {
- switch (sshkey_type_from_name(key_type_name)) {
+ switch (sshkey_type_from_shortname(key_type_name)) {
#ifdef WITH_DSA
case KEY_DSA_CERT:
case KEY_DSA:
@@ -313,7 +313,7 @@ ask_filename(struct passwd *pw, const char *prompt)
static struct sshkey *
load_identity(const char *filename, char **commentp)
{
- char *pass;
+ char *prompt, *pass;
struct sshkey *prv;
int r;
@@ -325,8 +325,11 @@ load_identity(const char *filename, char **commentp)
fatal_r(r, "Load key \"%s\"", filename);
if (identity_passphrase)
pass = xstrdup(identity_passphrase);
- else
- pass = read_passphrase("Enter passphrase: ", RP_ALLOW_STDIN);
+ else {
+ xasprintf(&prompt, "Enter passphrase for \"%s\": ", filename);
+ pass = read_passphrase(prompt, RP_ALLOW_STDIN);
+ free(prompt);
+ }
r = sshkey_load_private(filename, pass, &prv, commentp);
freezero(pass, strlen(pass));
if (r != 0)
@@ -375,7 +378,8 @@ do_convert_to_pkcs8(struct sshkey *k)
{
switch (sshkey_type_plain(k->type)) {
case KEY_RSA:
- if (!PEM_write_RSA_PUBKEY(stdout, k->rsa))
+ if (!PEM_write_RSA_PUBKEY(stdout,
+ EVP_PKEY_get0_RSA(k->pkey)))
fatal("PEM_write_RSA_PUBKEY failed");
break;
#ifdef WITH_DSA
@@ -386,7 +390,8 @@ do_convert_to_pkcs8(struct sshkey *k)
#endif
#ifdef OPENSSL_HAS_ECC
case KEY_ECDSA:
- if (!PEM_write_EC_PUBKEY(stdout, k->ecdsa))
+ if (!PEM_write_EC_PUBKEY(stdout,
+ EVP_PKEY_get0_EC_KEY(k->pkey)))
fatal("PEM_write_EC_PUBKEY failed");
break;
#endif
@@ -401,7 +406,8 @@ do_convert_to_pem(struct sshkey *k)
{
switch (sshkey_type_plain(k->type)) {
case KEY_RSA:
- if (!PEM_write_RSAPublicKey(stdout, k->rsa))
+ if (!PEM_write_RSAPublicKey(stdout,
+ EVP_PKEY_get0_RSA(k->pkey)))
fatal("PEM_write_RSAPublicKey failed");
break;
#ifdef WITH_DSA
@@ -412,7 +418,8 @@ do_convert_to_pem(struct sshkey *k)
#endif
#ifdef OPENSSL_HAS_ECC
case KEY_ECDSA:
- if (!PEM_write_EC_PUBKEY(stdout, k->ecdsa))
+ if (!PEM_write_EC_PUBKEY(stdout,
+ EVP_PKEY_get0_EC_KEY(k->pkey)))
fatal("PEM_write_EC_PUBKEY failed");
break;
#endif
@@ -490,6 +497,8 @@ do_convert_private_ssh2(struct sshbuf *b)
#endif
BIGNUM *rsa_n = NULL, *rsa_e = NULL, *rsa_d = NULL;
BIGNUM *rsa_p = NULL, *rsa_q = NULL, *rsa_iqmp = NULL;
+ BIGNUM *rsa_dmp1 = NULL, *rsa_dmq1 = NULL;
+ RSA *rsa = NULL;
if ((r = sshbuf_get_u32(b, &magic)) != 0)
fatal_fr(r, "parse magic");
@@ -584,15 +593,25 @@ do_convert_private_ssh2(struct sshbuf *b)
buffer_get_bignum_bits(b, rsa_iqmp);
buffer_get_bignum_bits(b, rsa_q);
buffer_get_bignum_bits(b, rsa_p);
- if (!RSA_set0_key(key->rsa, rsa_n, rsa_e, rsa_d))
+ if ((r = ssh_rsa_complete_crt_parameters(rsa_d, rsa_p, rsa_q,
+ rsa_iqmp, &rsa_dmp1, &rsa_dmq1)) != 0)
+ fatal_fr(r, "generate RSA CRT parameters");
+ if ((key->pkey = EVP_PKEY_new()) == NULL)
+ fatal_f("EVP_PKEY_new failed");
+ if ((rsa = RSA_new()) == NULL)
+ fatal_f("RSA_new failed");
+ if (!RSA_set0_key(rsa, rsa_n, rsa_e, rsa_d))
fatal_f("RSA_set0_key failed");
rsa_n = rsa_e = rsa_d = NULL; /* transferred */
- if (!RSA_set0_factors(key->rsa, rsa_p, rsa_q))
+ if (!RSA_set0_factors(rsa, rsa_p, rsa_q))
fatal_f("RSA_set0_factors failed");
rsa_p = rsa_q = NULL; /* transferred */
- if ((r = ssh_rsa_complete_crt_parameters(key, rsa_iqmp)) != 0)
- fatal_fr(r, "generate RSA parameters");
- BN_clear_free(rsa_iqmp);
+ if (RSA_set0_crt_params(rsa, rsa_dmp1, rsa_dmq1, rsa_iqmp) != 1)
+ fatal_f("RSA_set0_crt_params failed");
+ rsa_dmp1 = rsa_dmq1 = rsa_iqmp = NULL;
+ if (EVP_PKEY_set1_RSA(key->pkey, rsa) != 1)
+ fatal_f("EVP_PKEY_set1_RSA failed");
+ RSA_free(rsa);
alg = "rsa-sha2-256";
break;
}
@@ -712,7 +731,8 @@ do_convert_from_pkcs8(struct sshkey **k, int *private)
if ((*k = sshkey_new(KEY_UNSPEC)) == NULL)
fatal("sshkey_new failed");
(*k)->type = KEY_RSA;
- (*k)->rsa = EVP_PKEY_get1_RSA(pubkey);
+ (*k)->pkey = pubkey;
+ pubkey = NULL;
break;
#ifdef WITH_DSA
case EVP_PKEY_DSA:
@@ -726,9 +746,11 @@ do_convert_from_pkcs8(struct sshkey **k, int *private)
case EVP_PKEY_EC:
if ((*k = sshkey_new(KEY_UNSPEC)) == NULL)
fatal("sshkey_new failed");
+ if (((*k)->ecdsa_nid = sshkey_ecdsa_fixup_group(pubkey)) == -1)
+ fatal("sshkey_ecdsa_fixup_group failed");
(*k)->type = KEY_ECDSA;
- (*k)->ecdsa = EVP_PKEY_get1_EC_KEY(pubkey);
- (*k)->ecdsa_nid = sshkey_ecdsa_key_to_nid((*k)->ecdsa);
+ (*k)->pkey = pubkey;
+ pubkey = NULL;
break;
#endif
default:
@@ -750,8 +772,12 @@ do_convert_from_pem(struct sshkey **k, int *private)
if ((rsa = PEM_read_RSAPublicKey(fp, NULL, NULL, NULL)) != NULL) {
if ((*k = sshkey_new(KEY_UNSPEC)) == NULL)
fatal("sshkey_new failed");
+ if (((*k)->pkey = EVP_PKEY_new()) == NULL)
+ fatal("EVP_PKEY_new failed");
(*k)->type = KEY_RSA;
- (*k)->rsa = rsa;
+ if (EVP_PKEY_set1_RSA((*k)->pkey, rsa) != 1)
+ fatal("EVP_PKEY_set1_RSA failed");
+ RSA_free(rsa);
fclose(fp);
return;
}
@@ -799,13 +825,15 @@ do_convert_from(struct passwd *pw)
#endif
#ifdef OPENSSL_HAS_ECC
case KEY_ECDSA:
- ok = PEM_write_ECPrivateKey(stdout, k->ecdsa, NULL,
- NULL, 0, NULL, NULL);
+ ok = PEM_write_ECPrivateKey(stdout,
+ EVP_PKEY_get0_EC_KEY(k->pkey), NULL, NULL, 0,
+ NULL, NULL);
break;
#endif
case KEY_RSA:
- ok = PEM_write_RSAPrivateKey(stdout, k->rsa, NULL,
- NULL, 0, NULL, NULL);
+ ok = PEM_write_RSAPrivateKey(stdout,
+ EVP_PKEY_get0_RSA(k->pkey), NULL, NULL, 0,
+ NULL, NULL);
break;
default:
fatal_f("unsupported key type %s", sshkey_type(k));
@@ -1115,7 +1143,7 @@ do_gen_all_hostkeys(struct passwd *pw)
}
printf("%s ", key_types[i].key_type_display);
fflush(stdout);
- type = sshkey_type_from_name(key_types[i].key_type);
+ type = sshkey_type_from_shortname(key_types[i].key_type);
if ((fd = mkstemp(prv_tmp)) == -1) {
error("Could not save your private key in %s: %s",
prv_tmp, strerror(errno));
@@ -1821,7 +1849,7 @@ do_ca_sign(struct passwd *pw, const char *ca_key_path, int prefer_agent,
free(tmp);
if (key_type_name != NULL) {
- if (sshkey_type_from_name(key_type_name) != ca->type) {
+ if (sshkey_type_from_shortname(key_type_name) != ca->type) {
fatal("CA key type %s doesn't match specified %s",
sshkey_ssh_name(ca), key_type_name);
}
@@ -3108,17 +3136,22 @@ read_check_passphrase(const char *prompt1, const char *prompt2,
}
static char *
-private_key_passphrase(void)
+private_key_passphrase(const char *path)
{
+ char *prompt, *ret;
+
if (identity_passphrase)
return xstrdup(identity_passphrase);
if (identity_new_passphrase)
return xstrdup(identity_new_passphrase);
- return read_check_passphrase(
- "Enter passphrase (empty for no passphrase): ",
+ xasprintf(&prompt, "Enter passphrase for \"%s\" "
+ "(empty for no passphrase): ", path);
+ ret = read_check_passphrase(prompt,
"Enter same passphrase again: ",
"Passphrases do not match. Try again.");
+ free(prompt);
+ return ret;
}
static char *
@@ -3214,7 +3247,7 @@ do_download_sk(const char *skprovider, const char *device)
/* Save the key with the application string as the comment */
if (pass == NULL)
- pass = private_key_passphrase();
+ pass = private_key_passphrase(path);
if ((r = sshkey_save_private(key, path, pass,
key->sk_application, private_key_format,
openssh_format_cipher, rounds)) != 0) {
@@ -3811,7 +3844,7 @@ main(int argc, char **argv)
if (key_type_name == NULL)
key_type_name = DEFAULT_KEY_TYPE_NAME;
- type = sshkey_type_from_name(key_type_name);
+ type = sshkey_type_from_shortname(key_type_name);
type_bits_valid(type, key_type_name, &bits);
if (!quiet)
@@ -3913,7 +3946,7 @@ main(int argc, char **argv)
exit(1);
/* Determine the passphrase for the private key */
- passphrase = private_key_passphrase();
+ passphrase = private_key_passphrase(identity_file);
if (identity_comment) {
strlcpy(comment, identity_comment, sizeof(comment));
} else {
diff --git a/ssh-keyscan.c b/ssh-keyscan.c
index 548eaab..f34e056 100644
--- a/ssh-keyscan.c
+++ b/ssh-keyscan.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-keyscan.c,v 1.158 2024/06/14 00:25:25 djm Exp $ */
+/* $OpenBSD: ssh-keyscan.c,v 1.161 2024/09/09 02:39:57 djm Exp $ */
/*
* Copyright 1995, 1996 by David Mazieres <dm@lcs.mit.edu>.
*
@@ -303,6 +303,7 @@ keygrab_ssh2(con *c)
#endif
c->c_ssh->kex->kex[KEX_C25519_SHA256] = kex_gen_client;
c->c_ssh->kex->kex[KEX_KEM_SNTRUP761X25519_SHA512] = kex_gen_client;
+ c->c_ssh->kex->kex[KEX_KEM_MLKEM768X25519_SHA256] = kex_gen_client;
ssh_set_verify_host_key_callback(c->c_ssh, key_print_wrapper);
/*
* do the key-exchange until an error occurs or until
@@ -751,7 +752,7 @@ main(int argc, char **argv)
get_keytypes = 0;
tname = strtok(optarg, ",");
while (tname) {
- int type = sshkey_type_from_name(tname);
+ int type = sshkey_type_from_shortname(tname);
switch (type) {
#ifdef WITH_DSA
diff --git a/ssh-pkcs11-client.c b/ssh-pkcs11-client.c
index 5fa8bf0..b8d1700 100644
--- a/ssh-pkcs11-client.c
+++ b/ssh-pkcs11-client.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-pkcs11-client.c,v 1.19 2023/12/18 14:46:56 djm Exp $ */
+/* $OpenBSD: ssh-pkcs11-client.c,v 1.20 2024/08/15 00:51:51 djm Exp $ */
/*
* Copyright (c) 2010 Markus Friedl. All rights reserved.
* Copyright (c) 2014 Pedro Martelletto. All rights reserved.
@@ -264,14 +264,17 @@ rsa_encrypt(int flen, const u_char *from, u_char *to, RSA *rsa, int padding)
debug3_f("signing with PKCS11 provider %s", helper->path);
if (padding != RSA_PKCS1_PADDING)
goto fail;
- key = sshkey_new(KEY_UNSPEC);
- if (key == NULL) {
+ if ((key = sshkey_new(KEY_UNSPEC)) == NULL) {
error_f("sshkey_new failed");
goto fail;
}
+ if ((key->pkey = EVP_PKEY_new()) == NULL ||
+ EVP_PKEY_set1_RSA(key->pkey, rsa) != 1) {
+ error_f("pkey setup failed");
+ goto fail;
+ }
+
key->type = KEY_RSA;
- RSA_up_ref(rsa);
- key->rsa = rsa;
if ((r = sshkey_to_blob(key, &blob, &blen)) != 0) {
error_fr(r, "encode key");
goto fail;
@@ -339,21 +342,22 @@ ecdsa_do_sign(const unsigned char *dgst, int dgst_len, const BIGNUM *inv,
if ((helper = helper_by_ec(ec)) == NULL || helper->fd == -1)
fatal_f("no helper for PKCS11 key");
debug3_f("signing with PKCS11 provider %s", helper->path);
- nid = sshkey_ecdsa_key_to_nid(ec);
- if (nid < 0) {
- error_f("couldn't get curve nid");
- goto fail;
- }
- key = sshkey_new(KEY_UNSPEC);
- if (key == NULL) {
+ if ((key = sshkey_new(KEY_UNSPEC)) == NULL) {
error_f("sshkey_new failed");
goto fail;
}
- key->ecdsa = ec;
+ if ((key->pkey = EVP_PKEY_new()) == NULL ||
+ EVP_PKEY_set1_EC_KEY(key->pkey, ec) != 1) {
+ error("pkey setup failed");
+ goto fail;
+ }
+ if ((nid = sshkey_ecdsa_pkey_to_nid(key->pkey)) < 0) {
+ error("couldn't get curve nid");
+ goto fail;
+ }
key->ecdsa_nid = nid;
key->type = KEY_ECDSA;
- EC_KEY_up_ref(ec);
if ((r = sshkey_to_blob(key, &blob, &blen)) != 0) {
error_fr(r, "encode key");
@@ -408,16 +412,31 @@ ecdsa_do_finish(EC_KEY *ec)
static void
wrap_key(struct helper *helper, struct sshkey *k)
{
+ RSA *rsa = NULL;
+ EC_KEY *ecdsa = NULL;
+
debug3_f("wrap %s for provider %s", sshkey_type(k), helper->path);
if (k->type == KEY_RSA) {
- RSA_set_method(k->rsa, helper->rsa_meth);
+ if ((rsa = EVP_PKEY_get1_RSA(k->pkey)) == NULL)
+ fatal_f("no RSA key");
+ if (RSA_set_method(rsa, helper->rsa_meth) != 1)
+ fatal_f("RSA_set_method failed");
if (helper->nrsa++ >= INT_MAX)
fatal_f("RSA refcount error");
+ if (EVP_PKEY_set1_RSA(k->pkey, rsa) != 1)
+ fatal_f("EVP_PKEY_set1_RSA failed");
+ RSA_free(rsa);
#if defined(OPENSSL_HAS_ECC) && defined(HAVE_EC_KEY_METHOD_NEW)
} else if (k->type == KEY_ECDSA) {
- EC_KEY_set_method(k->ecdsa, helper->ec_meth);
+ if ((ecdsa = EVP_PKEY_get1_EC_KEY(k->pkey)) == NULL)
+ fatal_f("no ECDSA key");
+ if (EC_KEY_set_method(ecdsa, helper->ec_meth) != 1)
+ fatal_f("EC_KEY_set_method failed");
if (helper->nec++ >= INT_MAX)
fatal_f("EC refcount error");
+ if (EVP_PKEY_set1_EC_KEY(k->pkey, ecdsa) != 1)
+ fatal_f("EVP_PKEY_set1_EC_KEY failed");
+ EC_KEY_free(ecdsa);
#endif
} else
fatal_f("unknown key type");
@@ -437,6 +456,10 @@ pkcs11_make_cert(const struct sshkey *priv,
struct helper *helper = NULL;
struct sshkey *ret;
int r;
+ RSA *rsa_priv = NULL, *rsa_cert = NULL;
+#if defined(OPENSSL_HAS_ECC) && defined(HAVE_EC_KEY_METHOD_NEW)
+ EC_KEY *ec_priv = NULL, *ec_cert = NULL;
+#endif
debug3_f("private key type %s cert type %s", sshkey_type(priv),
sshkey_type(certpub));
@@ -449,24 +472,42 @@ pkcs11_make_cert(const struct sshkey *priv,
}
*certprivp = NULL;
if (priv->type == KEY_RSA) {
- if ((helper = helper_by_rsa(priv->rsa)) == NULL ||
+ if ((rsa_priv = EVP_PKEY_get1_RSA(priv->pkey)) == NULL)
+ fatal_f("no RSA pkey");
+ if ((helper = helper_by_rsa(rsa_priv)) == NULL ||
helper->fd == -1)
fatal_f("no helper for PKCS11 RSA key");
if ((r = sshkey_from_private(priv, &ret)) != 0)
fatal_fr(r, "copy key");
- RSA_set_method(ret->rsa, helper->rsa_meth);
+ if ((rsa_cert = EVP_PKEY_get1_RSA(ret->pkey)) == NULL)
+ fatal_f("no RSA cert pkey");
+ if (RSA_set_method(rsa_cert, helper->rsa_meth) != 1)
+ fatal_f("RSA_set_method failed");
if (helper->nrsa++ >= INT_MAX)
fatal_f("RSA refcount error");
+ if (EVP_PKEY_set1_RSA(ret->pkey, rsa_cert) != 1)
+ fatal_f("EVP_PKEY_set1_RSA failed");
+ RSA_free(rsa_priv);
+ RSA_free(rsa_cert);
#if defined(OPENSSL_HAS_ECC) && defined(HAVE_EC_KEY_METHOD_NEW)
} else if (priv->type == KEY_ECDSA) {
- if ((helper = helper_by_ec(priv->ecdsa)) == NULL ||
+ if ((ec_priv = EVP_PKEY_get1_EC_KEY(priv->pkey)) == NULL)
+ fatal_f("no EC pkey");
+ if ((helper = helper_by_ec(ec_priv)) == NULL ||
helper->fd == -1)
fatal_f("no helper for PKCS11 EC key");
if ((r = sshkey_from_private(priv, &ret)) != 0)
fatal_fr(r, "copy key");
- EC_KEY_set_method(ret->ecdsa, helper->ec_meth);
+ if ((ec_cert = EVP_PKEY_get1_EC_KEY(ret->pkey)) == NULL)
+ fatal_f("no EC cert pkey");
+ if (EC_KEY_set_method(ec_cert, helper->ec_meth) != 1)
+ fatal_f("EC_KEY_set_method failed");
if (helper->nec++ >= INT_MAX)
fatal_f("EC refcount error");
+ if (EVP_PKEY_set1_EC_KEY(ret->pkey, ec_cert) != 1)
+ fatal_f("EVP_PKEY_set1_EC_KEY failed");
+ EC_KEY_free(ec_priv);
+ EC_KEY_free(ec_cert);
#endif
} else
fatal_f("unknown key type %s", sshkey_type(priv));
@@ -485,7 +526,7 @@ pkcs11_make_cert(const struct sshkey *priv,
static int
pkcs11_start_helper_methods(struct helper *helper)
{
- RSA_METHOD *rsa_meth;
+ RSA_METHOD *rsa_meth = NULL;
EC_KEY_METHOD *ec_meth = NULL;
#if defined(OPENSSL_HAS_ECC) && defined(HAVE_EC_KEY_METHOD_NEW)
int (*ec_init)(EC_KEY *key);
diff --git a/ssh-pkcs11-helper.c b/ssh-pkcs11-helper.c
index 5c3eaae..a8154f2 100644
--- a/ssh-pkcs11-helper.c
+++ b/ssh-pkcs11-helper.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-pkcs11-helper.c,v 1.26 2021/11/18 03:31:44 djm Exp $ */
+/* $OpenBSD: ssh-pkcs11-helper.c,v 1.27 2024/08/15 00:51:51 djm Exp $ */
/*
* Copyright (c) 2010 Markus Friedl. All rights reserved.
*
@@ -45,6 +45,9 @@
#ifdef ENABLE_PKCS11
#ifdef WITH_OPENSSL
+#include <openssl/evp.h>
+#include <openssl/ec.h>
+#include <openssl/rsa.h>
/* borrows code from sftp-server and ssh-agent */
@@ -185,10 +188,17 @@ static void
process_sign(void)
{
u_char *blob, *data, *signature = NULL;
- size_t blen, dlen, slen = 0;
- int r, ok = -1;
- struct sshkey *key, *found;
+ size_t blen, dlen;
+ u_int slen = 0;
+ int len, r, ok = -1;
+ struct sshkey *key = NULL, *found;
struct sshbuf *msg;
+#ifdef WITH_OPENSSL
+ RSA *rsa = NULL;
+#ifdef OPENSSL_HAS_ECC
+ EC_KEY *ecdsa = NULL;
+#endif /* OPENSSL_HAS_ECC */
+#endif /* WITH_OPENSSL */
/* XXX support SHA2 signature flags */
if ((r = sshbuf_get_string(iqueue, &blob, &blen)) != 0 ||
@@ -198,41 +208,47 @@ process_sign(void)
if ((r = sshkey_from_blob(blob, blen, &key)) != 0)
fatal_fr(r, "decode key");
- else {
- if ((found = lookup_key(key)) != NULL) {
+ if ((found = lookup_key(key)) == NULL)
+ goto reply;
+
+ /* XXX use pkey API properly for signing */
+ switch (key->type) {
#ifdef WITH_OPENSSL
- int ret;
-
- if (key->type == KEY_RSA) {
- slen = RSA_size(key->rsa);
- signature = xmalloc(slen);
- ret = RSA_private_encrypt(dlen, data, signature,
- found->rsa, RSA_PKCS1_PADDING);
- if (ret != -1) {
- slen = ret;
- ok = 0;
- }
+ case KEY_RSA:
+ if ((rsa = EVP_PKEY_get1_RSA(found->pkey)) == NULL)
+ fatal_f("no RSA in pkey");
+ if ((len = RSA_size(rsa)) < 0)
+ fatal_f("bad RSA length");
+ signature = xmalloc(len);
+ if ((len = RSA_private_encrypt(dlen, data, signature,
+ rsa, RSA_PKCS1_PADDING)) < 0) {
+ error_f("RSA_private_encrypt failed");
+ goto reply;
+ }
+ slen = (u_int)len;
+ break;
#ifdef OPENSSL_HAS_ECC
- } else if (key->type == KEY_ECDSA) {
- u_int xslen = ECDSA_size(key->ecdsa);
-
- signature = xmalloc(xslen);
- /* "The parameter type is ignored." */
- ret = ECDSA_sign(-1, data, dlen, signature,
- &xslen, found->ecdsa);
- if (ret != 0)
- ok = 0;
- else
- error_f("ECDSA_sign returned %d", ret);
- slen = xslen;
+ case KEY_ECDSA:
+ if ((ecdsa = EVP_PKEY_get1_EC_KEY(found->pkey)) == NULL)
+ fatal_f("no ECDSA in pkey");
+ if ((len = ECDSA_size(ecdsa)) < 0)
+ fatal_f("bad ECDSA length");
+ slen = (u_int)len;
+ signature = xmalloc(slen);
+ /* "The parameter type is ignored." */
+ if (!ECDSA_sign(-1, data, dlen, signature, &slen, ecdsa)) {
+ error_f("ECDSA_sign failed");
+ goto reply;
+ }
+ break;
#endif /* OPENSSL_HAS_ECC */
- } else
- error_f("don't know how to sign with key "
- "type %d", (int)key->type);
#endif /* WITH_OPENSSL */
- }
- sshkey_free(key);
+ default:
+ fatal_f("unsupported key type %d", key->type);
}
+ /* success */
+ ok = 0;
+ reply:
if ((msg = sshbuf_new()) == NULL)
fatal_f("sshbuf_new failed");
if (ok == 0) {
@@ -243,6 +259,11 @@ process_sign(void)
if ((r = sshbuf_put_u8(msg, SSH2_AGENT_FAILURE)) != 0)
fatal_fr(r, "compose failure response");
}
+ sshkey_free(key);
+ RSA_free(rsa);
+#if defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC)
+ EC_KEY_free(ecdsa);
+#endif
free(data);
free(blob);
free(signature);
diff --git a/ssh-pkcs11.c b/ssh-pkcs11.c
index 1e76e8b..fadf9c9 100644
--- a/ssh-pkcs11.c
+++ b/ssh-pkcs11.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-pkcs11.c,v 1.62 2024/04/02 12:22:38 deraadt Exp $ */
+/* $OpenBSD: ssh-pkcs11.c,v 1.63 2024/08/15 00:51:51 djm Exp $ */
/*
* Copyright (c) 2010 Markus Friedl. All rights reserved.
* Copyright (c) 2014 Pedro Martelletto. All rights reserved.
@@ -502,8 +502,10 @@ pkcs11_rsa_wrap(struct pkcs11_provider *provider, CK_ULONG slotidx,
memcpy(k11->keyid, keyid_attrib->pValue, k11->keyid_len);
}
- RSA_set_method(rsa, rsa_method);
- RSA_set_ex_data(rsa, rsa_idx, k11);
+ if (RSA_set_method(rsa, rsa_method) != 1)
+ fatal_f("RSA_set_method failed");
+ if (RSA_set_ex_data(rsa, rsa_idx, k11) != 1)
+ fatal_f("RSA_set_ex_data failed");
return (0);
}
@@ -615,8 +617,10 @@ pkcs11_ecdsa_wrap(struct pkcs11_provider *provider, CK_ULONG slotidx,
k11->keyid = xmalloc(k11->keyid_len);
memcpy(k11->keyid, keyid_attrib->pValue, k11->keyid_len);
}
- EC_KEY_set_method(ec, ec_key_method);
- EC_KEY_set_ex_data(ec, ec_key_idx, k11);
+ if (EC_KEY_set_method(ec, ec_key_method) != 1)
+ fatal_f("EC_KEY_set_method failed");
+ if (EC_KEY_set_ex_data(ec, ec_key_idx, k11) != 1)
+ fatal_f("EC_KEY_set_ex_data failed");
return (0);
}
@@ -803,11 +807,14 @@ pkcs11_fetch_ecdsa_pubkey(struct pkcs11_provider *p, CK_ULONG slotidx,
goto fail;
}
- key->ecdsa = ec;
+ EVP_PKEY_free(key->pkey);
+ if ((key->pkey = EVP_PKEY_new()) == NULL)
+ fatal("EVP_PKEY_new failed");
+ if (EVP_PKEY_set1_EC_KEY(key->pkey, ec) != 1)
+ fatal("EVP_PKEY_set1_EC_KEY failed");
key->ecdsa_nid = nid;
key->type = KEY_ECDSA;
key->flags |= SSHKEY_FLAG_EXT;
- ec = NULL; /* now owned by key */
fail:
for (i = 0; i < 3; i++)
@@ -899,10 +906,13 @@ pkcs11_fetch_rsa_pubkey(struct pkcs11_provider *p, CK_ULONG slotidx,
goto fail;
}
- key->rsa = rsa;
+ EVP_PKEY_free(key->pkey);
+ if ((key->pkey = EVP_PKEY_new()) == NULL)
+ fatal("EVP_PKEY_new failed");
+ if (EVP_PKEY_set1_RSA(key->pkey, rsa) != 1)
+ fatal("EVP_PKEY_set1_RSA failed");
key->type = KEY_RSA;
key->flags |= SSHKEY_FLAG_EXT;
- rsa = NULL; /* now owned by key */
fail:
for (i = 0; i < 3; i++)
@@ -1014,10 +1024,13 @@ pkcs11_fetch_x509_pubkey(struct pkcs11_provider *p, CK_ULONG slotidx,
goto out;
}
- key->rsa = rsa;
+ EVP_PKEY_free(key->pkey);
+ if ((key->pkey = EVP_PKEY_new()) == NULL)
+ fatal("EVP_PKEY_new failed");
+ if (EVP_PKEY_set1_RSA(key->pkey, rsa) != 1)
+ fatal("EVP_PKEY_set1_RSA failed");
key->type = KEY_RSA;
key->flags |= SSHKEY_FLAG_EXT;
- rsa = NULL; /* now owned by key */
#if defined(OPENSSL_HAS_ECC) && defined(HAVE_EC_KEY_METHOD_NEW)
} else if (EVP_PKEY_base_id(evp) == EVP_PKEY_EC) {
if (EVP_PKEY_get0_EC_KEY(evp) == NULL) {
@@ -1044,11 +1057,14 @@ pkcs11_fetch_x509_pubkey(struct pkcs11_provider *p, CK_ULONG slotidx,
goto out;
}
- key->ecdsa = ec;
+ EVP_PKEY_free(key->pkey);
+ if ((key->pkey = EVP_PKEY_new()) == NULL)
+ fatal("EVP_PKEY_new failed");
+ if (EVP_PKEY_set1_EC_KEY(key->pkey, ec) != 1)
+ fatal("EVP_PKEY_set1_EC_KEY failed");
key->ecdsa_nid = nid;
key->type = KEY_ECDSA;
key->flags |= SSHKEY_FLAG_EXT;
- ec = NULL; /* now owned by key */
#endif /* OPENSSL_HAS_ECC && HAVE_EC_KEY_METHOD_NEW */
} else {
error("unknown certificate key type");
diff --git a/ssh-rsa.c b/ssh-rsa.c
index be8f51e..3ad1fdd 100644
--- a/ssh-rsa.c
+++ b/ssh-rsa.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-rsa.c,v 1.79 2023/03/05 05:34:09 dtucker Exp $ */
+/* $OpenBSD: ssh-rsa.c,v 1.80 2024/08/15 00:51:51 djm Exp $ */
/*
* Copyright (c) 2000, 2003 Markus Friedl <markus@openbsd.org>
*
@@ -36,23 +36,18 @@
#include "openbsd-compat/openssl-compat.h"
-static int openssh_RSA_verify(int, u_char *, size_t, u_char *, size_t, RSA *);
-
static u_int
-ssh_rsa_size(const struct sshkey *key)
+ssh_rsa_size(const struct sshkey *k)
{
- const BIGNUM *rsa_n;
-
- if (key->rsa == NULL)
+ if (k->pkey == NULL)
return 0;
- RSA_get0_key(key->rsa, &rsa_n, NULL, NULL);
- return BN_num_bits(rsa_n);
+ return EVP_PKEY_bits(k->pkey);
}
static int
ssh_rsa_alloc(struct sshkey *k)
{
- if ((k->rsa = RSA_new()) == NULL)
+ if ((k->pkey = EVP_PKEY_new()) == NULL)
return SSH_ERR_ALLOC_FAIL;
return 0;
}
@@ -60,29 +55,16 @@ ssh_rsa_alloc(struct sshkey *k)
static void
ssh_rsa_cleanup(struct sshkey *k)
{
- RSA_free(k->rsa);
- k->rsa = NULL;
+ EVP_PKEY_free(k->pkey);
+ k->pkey = NULL;
}
static int
ssh_rsa_equal(const struct sshkey *a, const struct sshkey *b)
{
- const BIGNUM *rsa_e_a, *rsa_n_a;
- const BIGNUM *rsa_e_b, *rsa_n_b;
-
- if (a->rsa == NULL || b->rsa == NULL)
- return 0;
- RSA_get0_key(a->rsa, &rsa_n_a, &rsa_e_a, NULL);
- RSA_get0_key(b->rsa, &rsa_n_b, &rsa_e_b, NULL);
- if (rsa_e_a == NULL || rsa_e_b == NULL)
+ if (a->pkey == NULL || b->pkey == NULL)
return 0;
- if (rsa_n_a == NULL || rsa_n_b == NULL)
- return 0;
- if (BN_cmp(rsa_e_a, rsa_e_b) != 0)
- return 0;
- if (BN_cmp(rsa_n_a, rsa_n_b) != 0)
- return 0;
- return 1;
+ return EVP_PKEY_cmp(a->pkey, b->pkey) == 1;
}
static int
@@ -91,10 +73,14 @@ ssh_rsa_serialize_public(const struct sshkey *key, struct sshbuf *b,
{
int r;
const BIGNUM *rsa_n, *rsa_e;
+ const RSA *rsa;
- if (key->rsa == NULL)
+ if (key->pkey == NULL)
return SSH_ERR_INVALID_ARGUMENT;
- RSA_get0_key(key->rsa, &rsa_n, &rsa_e, NULL);
+ if ((rsa = EVP_PKEY_get0_RSA(key->pkey)) == NULL)
+ return SSH_ERR_LIBCRYPTO_ERROR;
+
+ RSA_get0_key(rsa, &rsa_n, &rsa_e, NULL);
if ((r = sshbuf_put_bignum2(b, rsa_e)) != 0 ||
(r = sshbuf_put_bignum2(b, rsa_n)) != 0)
return r;
@@ -108,10 +94,13 @@ ssh_rsa_serialize_private(const struct sshkey *key, struct sshbuf *b,
{
int r;
const BIGNUM *rsa_n, *rsa_e, *rsa_d, *rsa_iqmp, *rsa_p, *rsa_q;
+ const RSA *rsa;
- RSA_get0_key(key->rsa, &rsa_n, &rsa_e, &rsa_d);
- RSA_get0_factors(key->rsa, &rsa_p, &rsa_q);
- RSA_get0_crt_params(key->rsa, NULL, NULL, &rsa_iqmp);
+ if ((rsa = EVP_PKEY_get0_RSA(key->pkey)) == NULL)
+ return SSH_ERR_LIBCRYPTO_ERROR;
+ RSA_get0_key(rsa, &rsa_n, &rsa_e, &rsa_d);
+ RSA_get0_factors(rsa, &rsa_p, &rsa_q);
+ RSA_get0_crt_params(rsa, NULL, NULL, &rsa_iqmp);
if (!sshkey_is_cert(key)) {
/* Note: can't reuse ssh_rsa_serialize_public: e, n vs. n, e */
@@ -131,28 +120,36 @@ ssh_rsa_serialize_private(const struct sshkey *key, struct sshbuf *b,
static int
ssh_rsa_generate(struct sshkey *k, int bits)
{
- RSA *private = NULL;
- BIGNUM *f4 = NULL;
+ EVP_PKEY_CTX *ctx = NULL;
+ EVP_PKEY *res = NULL;
+
int ret = SSH_ERR_INTERNAL_ERROR;
if (bits < SSH_RSA_MINIMUM_MODULUS_SIZE ||
bits > SSHBUF_MAX_BIGNUM * 8)
return SSH_ERR_KEY_LENGTH;
- if ((private = RSA_new()) == NULL || (f4 = BN_new()) == NULL) {
+
+ if ((ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL)) == NULL) {
ret = SSH_ERR_ALLOC_FAIL;
goto out;
}
- if (!BN_set_word(f4, RSA_F4) ||
- !RSA_generate_key_ex(private, bits, f4, NULL)) {
+ if (EVP_PKEY_keygen_init(ctx) <= 0) {
+ ret = SSH_ERR_LIBCRYPTO_ERROR;
+ goto out;
+ }
+ if (EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, bits) <= 0) {
+ ret = SSH_ERR_KEY_LENGTH;
+ goto out;
+ }
+ if (EVP_PKEY_keygen(ctx, &res) <= 0 || res == NULL) {
ret = SSH_ERR_LIBCRYPTO_ERROR;
goto out;
}
- k->rsa = private;
- private = NULL;
+ /* success */
+ k->pkey = res;
ret = 0;
out:
- RSA_free(private);
- BN_free(f4);
+ EVP_PKEY_CTX_free(ctx);
return ret;
}
@@ -162,21 +159,33 @@ ssh_rsa_copy_public(const struct sshkey *from, struct sshkey *to)
const BIGNUM *rsa_n, *rsa_e;
BIGNUM *rsa_n_dup = NULL, *rsa_e_dup = NULL;
int r = SSH_ERR_INTERNAL_ERROR;
+ const RSA *rsa_from;
+ RSA *rsa_to = NULL;
- RSA_get0_key(from->rsa, &rsa_n, &rsa_e, NULL);
+ if ((rsa_from = EVP_PKEY_get0_RSA(from->pkey)) == NULL ||
+ (rsa_to = RSA_new()) == NULL)
+ return SSH_ERR_LIBCRYPTO_ERROR;
+
+ RSA_get0_key(rsa_from, &rsa_n, &rsa_e, NULL);
if ((rsa_n_dup = BN_dup(rsa_n)) == NULL ||
(rsa_e_dup = BN_dup(rsa_e)) == NULL) {
r = SSH_ERR_ALLOC_FAIL;
goto out;
}
- if (!RSA_set0_key(to->rsa, rsa_n_dup, rsa_e_dup, NULL)) {
+ if (!RSA_set0_key(rsa_to, rsa_n_dup, rsa_e_dup, NULL)) {
r = SSH_ERR_LIBCRYPTO_ERROR;
goto out;
}
rsa_n_dup = rsa_e_dup = NULL; /* transferred */
+
+ if (EVP_PKEY_set1_RSA(to->pkey, rsa_to) != 1) {
+ r = SSH_ERR_LIBCRYPTO_ERROR;
+ goto out;
+ }
/* success */
r = 0;
out:
+ RSA_free(rsa_to);
BN_clear_free(rsa_n_dup);
BN_clear_free(rsa_e_dup);
return r;
@@ -188,25 +197,34 @@ ssh_rsa_deserialize_public(const char *ktype, struct sshbuf *b,
{
int ret = SSH_ERR_INTERNAL_ERROR;
BIGNUM *rsa_n = NULL, *rsa_e = NULL;
+ RSA *rsa = NULL;
+
+ if ((rsa = RSA_new()) == NULL)
+ return SSH_ERR_LIBCRYPTO_ERROR;
if (sshbuf_get_bignum2(b, &rsa_e) != 0 ||
sshbuf_get_bignum2(b, &rsa_n) != 0) {
ret = SSH_ERR_INVALID_FORMAT;
goto out;
}
- if (!RSA_set0_key(key->rsa, rsa_n, rsa_e, NULL)) {
+ if (!RSA_set0_key(rsa, rsa_n, rsa_e, NULL)) {
ret = SSH_ERR_LIBCRYPTO_ERROR;
goto out;
}
rsa_n = rsa_e = NULL; /* transferred */
+ if (EVP_PKEY_set1_RSA(key->pkey, rsa) != 1) {
+ ret = SSH_ERR_LIBCRYPTO_ERROR;
+ goto out;
+ }
if ((ret = sshkey_check_rsa_length(key, 0)) != 0)
goto out;
#ifdef DEBUG_PK
- RSA_print_fp(stderr, key->rsa, 8);
+ RSA_print_fp(stderr, rsa, 8);
#endif
/* success */
ret = 0;
out:
+ RSA_free(rsa);
BN_clear_free(rsa_n);
BN_clear_free(rsa_e);
return ret;
@@ -219,13 +237,25 @@ ssh_rsa_deserialize_private(const char *ktype, struct sshbuf *b,
int r;
BIGNUM *rsa_n = NULL, *rsa_e = NULL, *rsa_d = NULL;
BIGNUM *rsa_iqmp = NULL, *rsa_p = NULL, *rsa_q = NULL;
+ BIGNUM *rsa_dmp1 = NULL, *rsa_dmq1 = NULL;
+ RSA *rsa = NULL;
- /* Note: can't reuse ssh_rsa_deserialize_public: e, n vs. n, e */
- if (!sshkey_is_cert(key)) {
+ if (sshkey_is_cert(key)) {
+ /* sshkey_private_deserialize already has pubkey from cert */
+ if ((rsa = EVP_PKEY_get1_RSA(key->pkey)) == NULL) {
+ r = SSH_ERR_LIBCRYPTO_ERROR;
+ goto out;
+ }
+ } else {
+ if ((rsa = RSA_new()) == NULL) {
+ r = SSH_ERR_LIBCRYPTO_ERROR;
+ goto out;
+ }
+ /* Note: can't reuse ssh_rsa_deserialize_public: e,n vs. n,e */
if ((r = sshbuf_get_bignum2(b, &rsa_n)) != 0 ||
(r = sshbuf_get_bignum2(b, &rsa_e)) != 0)
goto out;
- if (!RSA_set0_key(key->rsa, rsa_n, rsa_e, NULL)) {
+ if (!RSA_set0_key(rsa, rsa_n, rsa_e, NULL)) {
r = SSH_ERR_LIBCRYPTO_ERROR;
goto out;
}
@@ -236,33 +266,46 @@ ssh_rsa_deserialize_private(const char *ktype, struct sshbuf *b,
(r = sshbuf_get_bignum2(b, &rsa_p)) != 0 ||
(r = sshbuf_get_bignum2(b, &rsa_q)) != 0)
goto out;
- if (!RSA_set0_key(key->rsa, NULL, NULL, rsa_d)) {
+ if ((r = ssh_rsa_complete_crt_parameters(rsa_d, rsa_p, rsa_q,
+ rsa_iqmp, &rsa_dmp1, &rsa_dmq1)) != 0)
+ goto out;
+ if (!RSA_set0_key(rsa, NULL, NULL, rsa_d)) {
r = SSH_ERR_LIBCRYPTO_ERROR;
goto out;
}
rsa_d = NULL; /* transferred */
- if (!RSA_set0_factors(key->rsa, rsa_p, rsa_q)) {
+ if (!RSA_set0_factors(rsa, rsa_p, rsa_q)) {
r = SSH_ERR_LIBCRYPTO_ERROR;
goto out;
}
rsa_p = rsa_q = NULL; /* transferred */
- if ((r = sshkey_check_rsa_length(key, 0)) != 0)
+ if (!RSA_set0_crt_params(rsa, rsa_dmp1, rsa_dmq1, rsa_iqmp)) {
+ r = SSH_ERR_LIBCRYPTO_ERROR;
goto out;
- if ((r = ssh_rsa_complete_crt_parameters(key, rsa_iqmp)) != 0)
+ }
+ rsa_dmp1 = rsa_dmq1 = rsa_iqmp = NULL;
+ if (RSA_blinding_on(rsa, NULL) != 1) {
+ r = SSH_ERR_LIBCRYPTO_ERROR;
goto out;
- if (RSA_blinding_on(key->rsa, NULL) != 1) {
+ }
+ if (EVP_PKEY_set1_RSA(key->pkey, rsa) != 1) {
r = SSH_ERR_LIBCRYPTO_ERROR;
goto out;
}
+ if ((r = sshkey_check_rsa_length(key, 0)) != 0)
+ goto out;
/* success */
r = 0;
out:
+ RSA_free(rsa);
BN_clear_free(rsa_n);
BN_clear_free(rsa_e);
BN_clear_free(rsa_d);
BN_clear_free(rsa_p);
BN_clear_free(rsa_q);
BN_clear_free(rsa_iqmp);
+ BN_clear_free(rsa_dmp1);
+ BN_clear_free(rsa_dmq1);
return r;
}
@@ -317,45 +360,23 @@ rsa_hash_id_from_keyname(const char *alg)
return -1;
}
-static int
-rsa_hash_alg_nid(int type)
-{
- switch (type) {
- case SSH_DIGEST_SHA1:
- return NID_sha1;
- case SSH_DIGEST_SHA256:
- return NID_sha256;
- case SSH_DIGEST_SHA512:
- return NID_sha512;
- default:
- return -1;
- }
-}
-
int
-ssh_rsa_complete_crt_parameters(struct sshkey *key, const BIGNUM *iqmp)
+ssh_rsa_complete_crt_parameters(const BIGNUM *rsa_d, const BIGNUM *rsa_p,
+ const BIGNUM *rsa_q, const BIGNUM *rsa_iqmp, BIGNUM **rsa_dmp1,
+ BIGNUM **rsa_dmq1)
{
- const BIGNUM *rsa_p, *rsa_q, *rsa_d;
BIGNUM *aux = NULL, *d_consttime = NULL;
- BIGNUM *rsa_dmq1 = NULL, *rsa_dmp1 = NULL, *rsa_iqmp = NULL;
BN_CTX *ctx = NULL;
int r;
- if (key == NULL || key->rsa == NULL ||
- sshkey_type_plain(key->type) != KEY_RSA)
- return SSH_ERR_INVALID_ARGUMENT;
-
- RSA_get0_key(key->rsa, NULL, NULL, &rsa_d);
- RSA_get0_factors(key->rsa, &rsa_p, &rsa_q);
-
+ *rsa_dmq1 = *rsa_dmp1 = NULL;
if ((ctx = BN_CTX_new()) == NULL)
return SSH_ERR_ALLOC_FAIL;
if ((aux = BN_new()) == NULL ||
- (rsa_dmq1 = BN_new()) == NULL ||
- (rsa_dmp1 = BN_new()) == NULL)
+ (*rsa_dmq1 = BN_new()) == NULL ||
+ (*rsa_dmp1 = BN_new()) == NULL)
return SSH_ERR_ALLOC_FAIL;
- if ((d_consttime = BN_dup(rsa_d)) == NULL ||
- (rsa_iqmp = BN_dup(iqmp)) == NULL) {
+ if ((d_consttime = BN_dup(rsa_d)) == NULL) {
r = SSH_ERR_ALLOC_FAIL;
goto out;
}
@@ -363,25 +384,17 @@ ssh_rsa_complete_crt_parameters(struct sshkey *key, const BIGNUM *iqmp)
BN_set_flags(d_consttime, BN_FLG_CONSTTIME);
if ((BN_sub(aux, rsa_q, BN_value_one()) == 0) ||
- (BN_mod(rsa_dmq1, d_consttime, aux, ctx) == 0) ||
+ (BN_mod(*rsa_dmq1, d_consttime, aux, ctx) == 0) ||
(BN_sub(aux, rsa_p, BN_value_one()) == 0) ||
- (BN_mod(rsa_dmp1, d_consttime, aux, ctx) == 0)) {
+ (BN_mod(*rsa_dmp1, d_consttime, aux, ctx) == 0)) {
r = SSH_ERR_LIBCRYPTO_ERROR;
goto out;
}
- if (!RSA_set0_crt_params(key->rsa, rsa_dmp1, rsa_dmq1, rsa_iqmp)) {
- r = SSH_ERR_LIBCRYPTO_ERROR;
- goto out;
- }
- rsa_dmp1 = rsa_dmq1 = rsa_iqmp = NULL; /* transferred */
/* success */
r = 0;
out:
BN_clear_free(aux);
BN_clear_free(d_consttime);
- BN_clear_free(rsa_dmp1);
- BN_clear_free(rsa_dmq1);
- BN_clear_free(rsa_iqmp);
BN_CTX_free(ctx);
return r;
}
@@ -393,11 +406,10 @@ ssh_rsa_sign(struct sshkey *key,
const u_char *data, size_t datalen,
const char *alg, const char *sk_provider, const char *sk_pin, u_int compat)
{
- const BIGNUM *rsa_n;
- u_char digest[SSH_DIGEST_MAX_LENGTH], *sig = NULL;
- size_t slen = 0;
- u_int hlen, len;
- int nid, hash_alg, ret = SSH_ERR_INTERNAL_ERROR;
+ u_char *sig = NULL;
+ size_t diff, len = 0;
+ int slen = 0;
+ int hash_alg, ret = SSH_ERR_INTERNAL_ERROR;
struct sshbuf *b = NULL;
if (lenp != NULL)
@@ -409,41 +421,28 @@ ssh_rsa_sign(struct sshkey *key,
hash_alg = SSH_DIGEST_SHA1;
else
hash_alg = rsa_hash_id_from_keyname(alg);
- if (key == NULL || key->rsa == NULL || hash_alg == -1 ||
+
+ if (key == NULL || key->pkey == NULL || hash_alg == -1 ||
sshkey_type_plain(key->type) != KEY_RSA)
return SSH_ERR_INVALID_ARGUMENT;
- RSA_get0_key(key->rsa, &rsa_n, NULL, NULL);
- if (BN_num_bits(rsa_n) < SSH_RSA_MINIMUM_MODULUS_SIZE)
- return SSH_ERR_KEY_LENGTH;
- slen = RSA_size(key->rsa);
+ slen = EVP_PKEY_size(key->pkey);
if (slen <= 0 || slen > SSHBUF_MAX_BIGNUM)
return SSH_ERR_INVALID_ARGUMENT;
+ if (EVP_PKEY_bits(key->pkey) < SSH_RSA_MINIMUM_MODULUS_SIZE)
+ return SSH_ERR_KEY_LENGTH;
- /* hash the data */
- nid = rsa_hash_alg_nid(hash_alg);
- if ((hlen = ssh_digest_bytes(hash_alg)) == 0)
- return SSH_ERR_INTERNAL_ERROR;
- if ((ret = ssh_digest_memory(hash_alg, data, datalen,
- digest, sizeof(digest))) != 0)
- goto out;
-
- if ((sig = malloc(slen)) == NULL) {
- ret = SSH_ERR_ALLOC_FAIL;
- goto out;
- }
-
- if (RSA_sign(nid, digest, hlen, sig, &len, key->rsa) != 1) {
- ret = SSH_ERR_LIBCRYPTO_ERROR;
+ if ((ret = sshkey_pkey_digest_sign(key->pkey, hash_alg, &sig, &len,
+ data, datalen)) < 0)
goto out;
- }
- if (len < slen) {
- size_t diff = slen - len;
+ if (len < (size_t)slen) {
+ diff = slen - len;
memmove(sig + diff, sig, len);
explicit_bzero(sig, diff);
- } else if (len > slen) {
+ } else if (len > (size_t)slen) {
ret = SSH_ERR_INTERNAL_ERROR;
goto out;
}
+
/* encode signature */
if ((b = sshbuf_new()) == NULL) {
ret = SSH_ERR_ALLOC_FAIL;
@@ -464,7 +463,6 @@ ssh_rsa_sign(struct sshkey *key,
*lenp = len;
ret = 0;
out:
- explicit_bzero(digest, sizeof(digest));
freezero(sig, slen);
sshbuf_free(b);
return ret;
@@ -476,19 +474,17 @@ ssh_rsa_verify(const struct sshkey *key,
const u_char *data, size_t dlen, const char *alg, u_int compat,
struct sshkey_sig_details **detailsp)
{
- const BIGNUM *rsa_n;
char *sigtype = NULL;
int hash_alg, want_alg, ret = SSH_ERR_INTERNAL_ERROR;
- size_t len = 0, diff, modlen, hlen;
+ size_t len = 0, diff, modlen, rsasize;
struct sshbuf *b = NULL;
u_char digest[SSH_DIGEST_MAX_LENGTH], *osigblob, *sigblob = NULL;
- if (key == NULL || key->rsa == NULL ||
+ if (key == NULL || key->pkey == NULL ||
sshkey_type_plain(key->type) != KEY_RSA ||
sig == NULL || siglen == 0)
return SSH_ERR_INVALID_ARGUMENT;
- RSA_get0_key(key->rsa, &rsa_n, NULL, NULL);
- if (BN_num_bits(rsa_n) < SSH_RSA_MINIMUM_MODULUS_SIZE)
+ if (EVP_PKEY_bits(key->pkey) < SSH_RSA_MINIMUM_MODULUS_SIZE)
return SSH_ERR_KEY_LENGTH;
if ((b = sshbuf_from(sig, siglen)) == NULL)
@@ -524,7 +520,7 @@ ssh_rsa_verify(const struct sshkey *key,
goto out;
}
/* RSA_verify expects a signature of RSA_size */
- modlen = RSA_size(key->rsa);
+ modlen = EVP_PKEY_size(key->pkey);
if (len > modlen) {
ret = SSH_ERR_KEY_BITS_MISMATCH;
goto out;
@@ -540,16 +536,16 @@ ssh_rsa_verify(const struct sshkey *key,
explicit_bzero(sigblob, diff);
len = modlen;
}
- if ((hlen = ssh_digest_bytes(hash_alg)) == 0) {
- ret = SSH_ERR_INTERNAL_ERROR;
+
+ rsasize = EVP_PKEY_size(key->pkey);
+ if (rsasize <= 0 || rsasize > SSHBUF_MAX_BIGNUM ||
+ len == 0 || len > rsasize) {
+ ret = SSH_ERR_INVALID_ARGUMENT;
goto out;
}
- if ((ret = ssh_digest_memory(hash_alg, data, dlen,
- digest, sizeof(digest))) != 0)
- goto out;
+ ret = sshkey_pkey_digest_verify(key->pkey, hash_alg, data, dlen,
+ sigblob, len);
- ret = openssh_RSA_verify(hash_alg, digest, hlen, sigblob, len,
- key->rsa);
out:
freezero(sigblob, len);
free(sigtype);
@@ -558,125 +554,6 @@ ssh_rsa_verify(const struct sshkey *key,
return ret;
}
-/*
- * See:
- * http://www.rsasecurity.com/rsalabs/pkcs/pkcs-1/
- * ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1.asn
- */
-
-/*
- * id-sha1 OBJECT IDENTIFIER ::= { iso(1) identified-organization(3)
- * oiw(14) secsig(3) algorithms(2) 26 }
- */
-static const u_char id_sha1[] = {
- 0x30, 0x21, /* type Sequence, length 0x21 (33) */
- 0x30, 0x09, /* type Sequence, length 0x09 */
- 0x06, 0x05, /* type OID, length 0x05 */
- 0x2b, 0x0e, 0x03, 0x02, 0x1a, /* id-sha1 OID */
- 0x05, 0x00, /* NULL */
- 0x04, 0x14 /* Octet string, length 0x14 (20), followed by sha1 hash */
-};
-
-/*
- * See http://csrc.nist.gov/groups/ST/crypto_apps_infra/csor/algorithms.html
- * id-sha256 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16) us(840)
- * organization(1) gov(101) csor(3) nistAlgorithm(4) hashAlgs(2)
- * id-sha256(1) }
- */
-static const u_char id_sha256[] = {
- 0x30, 0x31, /* type Sequence, length 0x31 (49) */
- 0x30, 0x0d, /* type Sequence, length 0x0d (13) */
- 0x06, 0x09, /* type OID, length 0x09 */
- 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, /* id-sha256 */
- 0x05, 0x00, /* NULL */
- 0x04, 0x20 /* Octet string, length 0x20 (32), followed by sha256 hash */
-};
-
-/*
- * See http://csrc.nist.gov/groups/ST/crypto_apps_infra/csor/algorithms.html
- * id-sha512 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16) us(840)
- * organization(1) gov(101) csor(3) nistAlgorithm(4) hashAlgs(2)
- * id-sha256(3) }
- */
-static const u_char id_sha512[] = {
- 0x30, 0x51, /* type Sequence, length 0x51 (81) */
- 0x30, 0x0d, /* type Sequence, length 0x0d (13) */
- 0x06, 0x09, /* type OID, length 0x09 */
- 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03, /* id-sha512 */
- 0x05, 0x00, /* NULL */
- 0x04, 0x40 /* Octet string, length 0x40 (64), followed by sha512 hash */
-};
-
-static int
-rsa_hash_alg_oid(int hash_alg, const u_char **oidp, size_t *oidlenp)
-{
- switch (hash_alg) {
- case SSH_DIGEST_SHA1:
- *oidp = id_sha1;
- *oidlenp = sizeof(id_sha1);
- break;
- case SSH_DIGEST_SHA256:
- *oidp = id_sha256;
- *oidlenp = sizeof(id_sha256);
- break;
- case SSH_DIGEST_SHA512:
- *oidp = id_sha512;
- *oidlenp = sizeof(id_sha512);
- break;
- default:
- return SSH_ERR_INVALID_ARGUMENT;
- }
- return 0;
-}
-
-static int
-openssh_RSA_verify(int hash_alg, u_char *hash, size_t hashlen,
- u_char *sigbuf, size_t siglen, RSA *rsa)
-{
- size_t rsasize = 0, oidlen = 0, hlen = 0;
- int ret, len, oidmatch, hashmatch;
- const u_char *oid = NULL;
- u_char *decrypted = NULL;
-
- if ((ret = rsa_hash_alg_oid(hash_alg, &oid, &oidlen)) != 0)
- return ret;
- ret = SSH_ERR_INTERNAL_ERROR;
- hlen = ssh_digest_bytes(hash_alg);
- if (hashlen != hlen) {
- ret = SSH_ERR_INVALID_ARGUMENT;
- goto done;
- }
- rsasize = RSA_size(rsa);
- if (rsasize <= 0 || rsasize > SSHBUF_MAX_BIGNUM ||
- siglen == 0 || siglen > rsasize) {
- ret = SSH_ERR_INVALID_ARGUMENT;
- goto done;
- }
- if ((decrypted = malloc(rsasize)) == NULL) {
- ret = SSH_ERR_ALLOC_FAIL;
- goto done;
- }
- if ((len = RSA_public_decrypt(siglen, sigbuf, decrypted, rsa,
- RSA_PKCS1_PADDING)) < 0) {
- ret = SSH_ERR_LIBCRYPTO_ERROR;
- goto done;
- }
- if (len < 0 || (size_t)len != hlen + oidlen) {
- ret = SSH_ERR_INVALID_FORMAT;
- goto done;
- }
- oidmatch = timingsafe_bcmp(decrypted, oid, oidlen) == 0;
- hashmatch = timingsafe_bcmp(decrypted + oidlen, hash, hlen) == 0;
- if (!oidmatch || !hashmatch) {
- ret = SSH_ERR_SIGNATURE_INVALID;
- goto done;
- }
- ret = 0;
-done:
- freezero(decrypted, rsasize);
- return ret;
-}
-
static const struct sshkey_impl_funcs sshkey_rsa_funcs = {
/* .size = */ ssh_rsa_size,
/* .alloc = */ ssh_rsa_alloc,
diff --git a/ssh-sk.c b/ssh-sk.c
index d1c1880..a2a7d72 100644
--- a/ssh-sk.c
+++ b/ssh-sk.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-sk.c,v 1.40 2023/07/19 14:02:27 djm Exp $ */
+/* $OpenBSD: ssh-sk.c,v 1.41 2024/08/15 00:51:51 djm Exp $ */
/*
* Copyright (c) 2019 Google LLC
*
@@ -32,6 +32,7 @@
#if defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC)
#include <openssl/objects.h>
#include <openssl/ec.h>
+#include <openssl/evp.h>
#endif /* WITH_OPENSSL && OPENSSL_HAS_ECC */
#include "log.h"
@@ -207,7 +208,9 @@ sshsk_ecdsa_assemble(struct sk_enroll_response *resp, struct sshkey **keyp)
{
struct sshkey *key = NULL;
struct sshbuf *b = NULL;
+ EC_KEY *ecdsa = NULL;
EC_POINT *q = NULL;
+ const EC_GROUP *g = NULL;
int r;
*keyp = NULL;
@@ -217,8 +220,9 @@ sshsk_ecdsa_assemble(struct sk_enroll_response *resp, struct sshkey **keyp)
goto out;
}
key->ecdsa_nid = NID_X9_62_prime256v1;
- if ((key->ecdsa = EC_KEY_new_by_curve_name(key->ecdsa_nid)) == NULL ||
- (q = EC_POINT_new(EC_KEY_get0_group(key->ecdsa))) == NULL ||
+ if ((ecdsa = EC_KEY_new_by_curve_name(key->ecdsa_nid)) == NULL ||
+ (g = EC_KEY_get0_group(ecdsa)) == NULL ||
+ (q = EC_POINT_new(g)) == NULL ||
(b = sshbuf_new()) == NULL) {
error_f("allocation failed");
r = SSH_ERR_ALLOC_FAIL;
@@ -229,30 +233,41 @@ sshsk_ecdsa_assemble(struct sk_enroll_response *resp, struct sshkey **keyp)
error_fr(r, "sshbuf_put_string");
goto out;
}
- if ((r = sshbuf_get_ec(b, q, EC_KEY_get0_group(key->ecdsa))) != 0) {
+ if ((r = sshbuf_get_ec(b, q, g)) != 0) {
error_fr(r, "parse");
r = SSH_ERR_INVALID_FORMAT;
goto out;
}
- if (sshkey_ec_validate_public(EC_KEY_get0_group(key->ecdsa), q) != 0) {
+ if (sshkey_ec_validate_public(g, q) != 0) {
error("Authenticator returned invalid ECDSA key");
r = SSH_ERR_KEY_INVALID_EC_VALUE;
goto out;
}
- if (EC_KEY_set_public_key(key->ecdsa, q) != 1) {
+ if (EC_KEY_set_public_key(ecdsa, q) != 1) {
/* XXX assume it is a allocation error */
error_f("allocation failed");
r = SSH_ERR_ALLOC_FAIL;
goto out;
}
+ if ((key->pkey = EVP_PKEY_new()) == NULL) {
+ error_f("allocation failed");
+ r = SSH_ERR_ALLOC_FAIL;
+ goto out;
+ }
+ if (EVP_PKEY_set1_EC_KEY(key->pkey, ecdsa) != 1) {
+ error_f("Assigning EC_KEY failed");
+ r = SSH_ERR_LIBCRYPTO_ERROR;
+ goto out;
+ }
/* success */
*keyp = key;
key = NULL; /* transferred */
r = 0;
out:
- EC_POINT_free(q);
sshkey_free(key);
sshbuf_free(b);
+ EC_KEY_free(ecdsa);
+ EC_POINT_free(q);
return r;
}
#endif /* WITH_OPENSSL */
diff --git a/ssh.0 b/ssh.0
index 78863b1..497d816 100644
--- a/ssh.0
+++ b/ssh.0
@@ -234,7 +234,8 @@ DESCRIPTION
and passed to the master process. Valid commands are: M-bM-^@M-^\checkM-bM-^@M-^]
(check that the master process is running), M-bM-^@M-^\forwardM-bM-^@M-^] (request
forwardings without command execution), M-bM-^@M-^\cancelM-bM-^@M-^] (cancel
- forwardings), M-bM-^@M-^\exitM-bM-^@M-^] (request the master to exit), and M-bM-^@M-^\stopM-bM-^@M-^]
+ forwardings), M-bM-^@M-^\proxyM-bM-^@M-^] (connect to a running multiplexing master
+ in proxy mode), M-bM-^@M-^\exitM-bM-^@M-^] (request the master to exit), and M-bM-^@M-^\stopM-bM-^@M-^]
(request the master to stop accepting further multiplexing
requests).
@@ -1016,4 +1017,4 @@ AUTHORS
created OpenSSH. Markus Friedl contributed the support for SSH protocol
versions 1.5 and 2.0.
-OpenBSD 7.5 June 27, 2024 OpenBSD 7.5
+OpenBSD 7.5 July 18, 2024 OpenBSD 7.5
diff --git a/ssh.1 b/ssh.1
index f871ff4..710d3d4 100644
--- a/ssh.1
+++ b/ssh.1
@@ -33,8 +33,8 @@
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
-.\" $OpenBSD: ssh.1,v 1.442 2024/06/27 21:02:16 jmc Exp $
-.Dd $Mdocdate: June 27 2024 $
+.\" $OpenBSD: ssh.1,v 1.443 2024/07/18 01:47:27 djm Exp $
+.Dd $Mdocdate: July 18 2024 $
.Dt SSH 1
.Os
.Sh NAME
@@ -490,6 +490,8 @@ Valid commands are:
(request forwardings without command execution),
.Dq cancel
(cancel forwardings),
+.Dq proxy
+(connect to a running multiplexing master in proxy mode),
.Dq exit
(request the master to exit), and
.Dq stop
diff --git a/ssh_api.c b/ssh_api.c
index 4dcd266..5faaffd 100644
--- a/ssh_api.c
+++ b/ssh_api.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh_api.c,v 1.29 2024/05/17 00:30:24 djm Exp $ */
+/* $OpenBSD: ssh_api.c,v 1.31 2024/09/09 02:39:57 djm Exp $ */
/*
* Copyright (c) 2012 Markus Friedl. All rights reserved.
*
@@ -134,6 +134,7 @@ ssh_init(struct ssh **sshp, int is_server, struct kex_params *kex_params)
#endif /* WITH_OPENSSL */
ssh->kex->kex[KEX_C25519_SHA256] = kex_gen_server;
ssh->kex->kex[KEX_KEM_SNTRUP761X25519_SHA512] = kex_gen_server;
+ ssh->kex->kex[KEX_KEM_MLKEM768X25519_SHA256] = kex_gen_server;
ssh->kex->load_host_public_key=&_ssh_host_public_key;
ssh->kex->load_host_private_key=&_ssh_host_private_key;
ssh->kex->sign=&_ssh_host_key_sign;
@@ -152,6 +153,7 @@ ssh_init(struct ssh **sshp, int is_server, struct kex_params *kex_params)
#endif /* WITH_OPENSSL */
ssh->kex->kex[KEX_C25519_SHA256] = kex_gen_client;
ssh->kex->kex[KEX_KEM_SNTRUP761X25519_SHA512] = kex_gen_client;
+ ssh->kex->kex[KEX_KEM_MLKEM768X25519_SHA256] = kex_gen_client;
ssh->kex->verify_host_key =&_ssh_verify_host_key;
}
*sshp = ssh;
diff --git a/ssh_config.0 b/ssh_config.0
index ef6c093..abb4ac9 100644
--- a/ssh_config.0
+++ b/ssh_config.0
@@ -703,14 +703,15 @@ DESCRIPTION
Include
Include the specified configuration file(s). Multiple pathnames
- may be specified and each pathname may contain glob(7) wildcards
- and, for user configurations, shell-like M-bM-^@M-^X~M-bM-^@M-^Y references to user
- home directories. Wildcards will be expanded and processed in
- lexical order. Files without absolute paths are assumed to be in
- ~/.ssh if included in a user configuration file or /etc/ssh if
- included from the system configuration file. Include directive
- may appear inside a Match or Host block to perform conditional
- inclusion.
+ may be specified and each pathname may contain glob(7) wildcards,
+ tokens as described in the TOKENS section, environment variables
+ as described in the ENVIRONMENT VARIABLES section and, for user
+ configurations, shell-like M-bM-^@M-^X~M-bM-^@M-^Y references to user home
+ directories. Wildcards will be expanded and processed in lexical
+ order. Files without absolute paths are assumed to be in ~/.ssh
+ if included in a user configuration file or /etc/ssh if included
+ from the system configuration file. Include directive may appear
+ inside a Match or Host block to perform conditional inclusion.
IPQoS Specifies the IPv4 type-of-service or DSCP class for connections.
Accepted values are af11, af12, af13, af21, af22, af23, af31,
@@ -740,7 +741,7 @@ DESCRIPTION
KexAlgorithms
Specifies the permitted KEX (Key Exchange) algorithms that will
be used and their preference order. The selected algorithm will
- the the first algorithm in this list that the server also
+ be the first algorithm in this list that the server also
supports. Multiple algorithms must be comma-separated.
If the specified list begins with a M-bM-^@M-^X+M-bM-^@M-^Y character, then the
@@ -754,7 +755,8 @@ DESCRIPTION
The default is:
- sntrup761x25519-sha512@openssh.com,
+ sntrup761x25519-sha512,sntrup761x25519-sha512@openssh.com,
+ mlkem768x25519-sha256,
curve25519-sha256,curve25519-sha256@libssh.org,
ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,
diffie-hellman-group-exchange-sha256,
@@ -825,9 +827,9 @@ DESCRIPTION
LogVerbose
Specify one or more overrides to LogLevel. An override consists
- of a pattern lists that matches the source file, function and
- line number to force detailed logging for. For example, an
- override pattern of:
+ of one or more pattern lists that matches the source file,
+ function and line number to force detailed logging for. For
+ example, an override pattern of:
kex.c:*:1000,*:kex_exchange_identification():*,packet.c:*
@@ -1373,7 +1375,7 @@ TOKENS
%t The type of the server host key, e.g. ssh-ed25519.
%u The local username.
- CertificateFile, ControlPath, IdentityAgent, IdentityFile,
+ CertificateFile, ControlPath, IdentityAgent, IdentityFile, Include,
KnownHostsCommand, LocalForward, Match exec, RemoteCommand,
RemoteForward, RevokedHostKeys, and UserKnownHostsFile accept the tokens
%%, %C, %d, %h, %i, %j, %k, %L, %l, %n, %p, %r, and %u.
@@ -1401,9 +1403,9 @@ ENVIRONMENT VARIABLES
the setting for that keyword will be ignored.
The keywords CertificateFile, ControlPath, IdentityAgent, IdentityFile,
- KnownHostsCommand, and UserKnownHostsFile support environment variables.
- The keywords LocalForward and RemoteForward support environment variables
- only for Unix domain socket paths.
+ Include, KnownHostsCommand, and UserKnownHostsFile support environment
+ variables. The keywords LocalForward and RemoteForward support
+ environment variables only for Unix domain socket paths.
FILES
~/.ssh/config
@@ -1428,4 +1430,4 @@ AUTHORS
created OpenSSH. Markus Friedl contributed the support for SSH protocol
versions 1.5 and 2.0.
-OpenBSD 7.5 June 17, 2024 OpenBSD 7.5
+OpenBSD 7.5 September 9, 2024 OpenBSD 7.5
diff --git a/ssh_config.5 b/ssh_config.5
index 2e19022..7c7c5c5 100644
--- a/ssh_config.5
+++ b/ssh_config.5
@@ -33,8 +33,8 @@
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
-.\" $OpenBSD: ssh_config.5,v 1.396 2024/06/17 08:30:29 djm Exp $
-.Dd $Mdocdate: June 17 2024 $
+.\" $OpenBSD: ssh_config.5,v 1.402 2024/09/09 14:41:21 naddy Exp $
+.Dd $Mdocdate: September 9 2024 $
.Dt SSH_CONFIG 5
.Os
.Sh NAME
@@ -1182,7 +1182,12 @@ to unknown options that appear before it.
Include the specified configuration file(s).
Multiple pathnames may be specified and each pathname may contain
.Xr glob 7
-wildcards and, for user configurations, shell-like
+wildcards,
+tokens as described in the
+.Sx TOKENS
+section, environment variables as described in the
+.Sx ENVIRONMENT VARIABLES
+section and, for user configurations, shell-like
.Sq ~
references to user home directories.
Wildcards will be expanded and processed in lexical order.
@@ -1262,7 +1267,7 @@ and
.It Cm KexAlgorithms
Specifies the permitted KEX (Key Exchange) algorithms that will be used and
their preference order.
-The selected algorithm will the the first algorithm in this list that
+The selected algorithm will be the first algorithm in this list that
the server also supports.
Multiple algorithms must be comma-separated.
.Pp
@@ -1281,7 +1286,8 @@ default set.
.Pp
The default is:
.Bd -literal -offset indent
-sntrup761x25519-sha512@openssh.com,
+sntrup761x25519-sha512,sntrup761x25519-sha512@openssh.com,
+mlkem768x25519-sha256,
curve25519-sha256,curve25519-sha256@libssh.org,
ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,
diffie-hellman-group-exchange-sha256,
@@ -1382,8 +1388,8 @@ DEBUG and DEBUG1 are equivalent.
DEBUG2 and DEBUG3 each specify higher levels of verbose output.
.It Cm LogVerbose
Specify one or more overrides to LogLevel.
-An override consists of a pattern lists that matches the source file, function
-and line number to force detailed logging for.
+An override consists of one or more pattern lists that matches the
+source file, function and line number to force detailed logging for.
For example, an override pattern of:
.Bd -literal -offset indent
kex.c:*:1000,*:kex_exchange_identification():*,packet.c:*
@@ -2270,6 +2276,7 @@ The local username.
.Cm ControlPath ,
.Cm IdentityAgent ,
.Cm IdentityFile ,
+.Cm Include ,
.Cm KnownHostsCommand ,
.Cm LocalForward ,
.Cm Match exec ,
@@ -2318,6 +2325,7 @@ The keywords
.Cm ControlPath ,
.Cm IdentityAgent ,
.Cm IdentityFile ,
+.Cm Include ,
.Cm KnownHostsCommand ,
and
.Cm UserKnownHostsFile
diff --git a/sshbuf-getput-crypto.c b/sshbuf-getput-crypto.c
index af3f397..e7bffe2 100644
--- a/sshbuf-getput-crypto.c
+++ b/sshbuf-getput-crypto.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sshbuf-getput-crypto.c,v 1.11 2024/02/01 02:37:33 djm Exp $ */
+/* $OpenBSD: sshbuf-getput-crypto.c,v 1.12 2024/08/15 00:51:51 djm Exp $ */
/*
* Copyright (c) 2011 Damien Miller
*
@@ -176,5 +176,15 @@ sshbuf_put_eckey(struct sshbuf *buf, const EC_KEY *v)
return sshbuf_put_ec(buf, EC_KEY_get0_public_key(v),
EC_KEY_get0_group(v));
}
+
+int
+sshbuf_put_ec_pkey(struct sshbuf *buf, EVP_PKEY *pkey)
+{
+ const EC_KEY *ec;
+
+ if ((ec = EVP_PKEY_get0_EC_KEY(pkey)) == NULL)
+ return SSH_ERR_LIBCRYPTO_ERROR;
+ return sshbuf_put_eckey(buf, ec);
+}
#endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
diff --git a/sshbuf.c b/sshbuf.c
index d7f4e4a..1b714e5 100644
--- a/sshbuf.c
+++ b/sshbuf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sshbuf.c,v 1.19 2022/12/02 04:40:27 djm Exp $ */
+/* $OpenBSD: sshbuf.c,v 1.23 2024/08/14 15:42:18 tobias Exp $ */
/*
* Copyright (c) 2011 Damien Miller
*
@@ -57,6 +57,7 @@ sshbuf_check_sanity(const struct sshbuf *buf)
SSHBUF_TELL("sanity");
if (__predict_false(buf == NULL ||
(!buf->readonly && buf->d != buf->cd) ||
+ buf->parent == buf ||
buf->refcount < 1 || buf->refcount > SSHBUF_REFS_MAX ||
buf->cd == NULL ||
buf->max_size > SSHBUF_SIZE_MAX ||
@@ -93,7 +94,7 @@ sshbuf_new(void)
{
struct sshbuf *ret;
- if ((ret = calloc(sizeof(*ret), 1)) == NULL)
+ if ((ret = calloc(1, sizeof(*ret))) == NULL)
return NULL;
ret->alloc = SSHBUF_SIZE_INIT;
ret->max_size = SSHBUF_SIZE_MAX;
@@ -113,7 +114,7 @@ sshbuf_from(const void *blob, size_t len)
struct sshbuf *ret;
if (blob == NULL || len > SSHBUF_SIZE_MAX ||
- (ret = calloc(sizeof(*ret), 1)) == NULL)
+ (ret = calloc(1, sizeof(*ret))) == NULL)
return NULL;
ret->alloc = ret->size = ret->max_size = len;
ret->readonly = 1;
@@ -132,7 +133,8 @@ sshbuf_set_parent(struct sshbuf *child, struct sshbuf *parent)
if ((r = sshbuf_check_sanity(child)) != 0 ||
(r = sshbuf_check_sanity(parent)) != 0)
return r;
- if (child->parent != NULL && child->parent != parent)
+ if ((child->parent != NULL && child->parent != parent) ||
+ child == parent)
return SSH_ERR_INTERNAL_ERROR;
child->parent = parent;
child->parent->refcount++;
@@ -179,16 +181,14 @@ sshbuf_free(struct sshbuf *buf)
return;
/*
- * If we are a child, the free our parent to decrement its reference
+ * If we are a child, then free our parent to decrement its reference
* count and possibly free it.
*/
sshbuf_free(buf->parent);
buf->parent = NULL;
- if (!buf->readonly) {
- explicit_bzero(buf->d, buf->alloc);
- free(buf->d);
- }
+ if (!buf->readonly)
+ freezero(buf->d, buf->alloc);
freezero(buf, sizeof(*buf));
}
diff --git a/sshbuf.h b/sshbuf.h
index e2155f9..49c32af 100644
--- a/sshbuf.h
+++ b/sshbuf.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: sshbuf.h,v 1.28 2022/12/02 04:40:27 djm Exp $ */
+/* $OpenBSD: sshbuf.h,v 1.29 2024/08/15 00:51:51 djm Exp $ */
/*
* Copyright (c) 2011 Damien Miller
*
@@ -23,6 +23,7 @@
#include <stdio.h>
#ifdef WITH_OPENSSL
# include <openssl/bn.h>
+# include <openssl/evp.h>
# ifdef OPENSSL_HAS_ECC
# include <openssl/ec.h>
# endif /* OPENSSL_HAS_ECC */
@@ -223,6 +224,7 @@ int sshbuf_get_ec(struct sshbuf *buf, EC_POINT *v, const EC_GROUP *g);
int sshbuf_get_eckey(struct sshbuf *buf, EC_KEY *v);
int sshbuf_put_ec(struct sshbuf *buf, const EC_POINT *v, const EC_GROUP *g);
int sshbuf_put_eckey(struct sshbuf *buf, const EC_KEY *v);
+int sshbuf_put_ec_pkey(struct sshbuf *buf, EVP_PKEY *pkey);
# endif /* OPENSSL_HAS_ECC */
#endif /* WITH_OPENSSL */
diff --git a/sshconnect2.c b/sshconnect2.c
index e63bb5e..11fcdea 100644
--- a/sshconnect2.c
+++ b/sshconnect2.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sshconnect2.c,v 1.373 2024/05/17 06:38:00 jsg Exp $ */
+/* $OpenBSD: sshconnect2.c,v 1.375 2024/09/09 02:39:57 djm Exp $ */
/*
* Copyright (c) 2000 Markus Friedl. All rights reserved.
* Copyright (c) 2008 Damien Miller. All rights reserved.
@@ -274,6 +274,7 @@ ssh_kex2(struct ssh *ssh, char *host, struct sockaddr *hostaddr, u_short port,
#endif
ssh->kex->kex[KEX_C25519_SHA256] = kex_gen_client;
ssh->kex->kex[KEX_KEM_SNTRUP761X25519_SHA512] = kex_gen_client;
+ ssh->kex->kex[KEX_KEM_MLKEM768X25519_SHA256] = kex_gen_client;
ssh->kex->verify_host_key=&verify_host_key_callback;
ssh_dispatch_run_fatal(ssh, DISPATCH_BLOCK, &ssh->kex->done);
diff --git a/sshd-session.c b/sshd-session.c
index fe6ae7f..4b79b9b 100644
--- a/sshd-session.c
+++ b/sshd-session.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sshd-session.c,v 1.4 2024/06/26 23:16:52 deraadt Exp $ */
+/* $OpenBSD: sshd-session.c,v 1.9 2024/09/09 02:39:57 djm Exp $ */
/*
* SSH2 implementation:
* Privilege Separation:
@@ -214,7 +214,9 @@ grace_alarm_handler(int sig)
memset(&sa, 0, sizeof(sa));
sa.sa_handler = SIG_IGN;
sigfillset(&sa.sa_mask);
+#if defined(SA_RESTART)
sa.sa_flags = SA_RESTART;
+#endif
(void)sigaction(SIGTERM, &sa, NULL);
kill(0, SIGTERM);
}
@@ -817,7 +819,6 @@ check_ip_options(struct ssh *ssh)
fatal("Connection from %.100s port %d with IP opts: %.800s",
ssh_remote_ipaddr(ssh), ssh_remote_port(ssh), text);
}
- return;
#endif /* IP_OPTIONS */
}
@@ -881,6 +882,7 @@ main(int ac, char **av)
struct connection_info *connection_info = NULL;
sigset_t sigmask;
uint64_t timing_secret = 0;
+ struct itimerval itv;
sigemptyset(&sigmask);
sigprocmask(SIG_SETMASK, &sigmask, NULL);
@@ -1275,8 +1277,17 @@ main(int ac, char **av)
* are about to discover the bug.
*/
ssh_signal(SIGALRM, grace_alarm_handler);
- if (!debug_flag)
- alarm(options.login_grace_time);
+ if (!debug_flag && options.login_grace_time > 0) {
+ int ujitter = arc4random_uniform(4 * 1000000);
+
+ timerclear(&itv.it_interval);
+ itv.it_value.tv_sec = options.login_grace_time;
+ itv.it_value.tv_sec += ujitter / 1000000;
+ itv.it_value.tv_usec = ujitter % 1000000;
+
+ if (setitimer(ITIMER_REAL, &itv, NULL) == -1)
+ fatal("login grace time setitimer failed");
+ }
if ((r = kex_exchange_identification(ssh, -1,
options.version_addendum)) != 0)
@@ -1320,7 +1331,10 @@ main(int ac, char **av)
* Cancel the alarm we set to limit the time taken for
* authentication.
*/
- alarm(0);
+ timerclear(&itv.it_interval);
+ timerclear(&itv.it_value);
+ if (setitimer(ITIMER_REAL, &itv, NULL) == -1)
+ fatal("login grace time clear failed");
ssh_signal(SIGALRM, SIG_DFL);
authctxt->authenticated = 1;
if (startup_pipe != -1) {
@@ -1451,6 +1465,7 @@ do_ssh2_kex(struct ssh *ssh)
#endif
kex->kex[KEX_C25519_SHA256] = kex_gen_server;
kex->kex[KEX_KEM_SNTRUP761X25519_SHA512] = kex_gen_server;
+ kex->kex[KEX_KEM_MLKEM768X25519_SHA256] = kex_gen_server;
kex->load_host_public_key=&get_hostkey_public_by_type;
kex->load_host_private_key=&get_hostkey_private_by_type;
kex->host_key_index=&get_hostkey_index;
@@ -1488,13 +1503,13 @@ cleanup_exit(int i)
}
}
}
- /* Override default fatal exit value when auth was attempted */
- if (i == 255 && auth_attempted)
- _exit(EXIT_AUTH_ATTEMPTED);
#ifdef SSH_AUDIT_EVENTS
/* done after do_cleanup so it can cancel the PAM auth 'thread' */
if (the_active_state != NULL && mm_is_monitor())
audit_event(the_active_state, SSH_CONNECTION_ABANDON);
#endif
+ /* Override default fatal exit value when auth was attempted */
+ if (i == 255 && auth_attempted)
+ _exit(EXIT_AUTH_ATTEMPTED);
_exit(i);
}
diff --git a/sshd.0 b/sshd.0
index c7de2d3..2ece5c7 100644
--- a/sshd.0
+++ b/sshd.0
@@ -40,7 +40,9 @@ DESCRIPTION
The keywords are M-bM-^@M-^\addrM-bM-^@M-^], M-bM-^@M-^\userM-bM-^@M-^], M-bM-^@M-^\hostM-bM-^@M-^], M-bM-^@M-^\laddrM-bM-^@M-^], M-bM-^@M-^\lportM-bM-^@M-^], and
M-bM-^@M-^\rdomainM-bM-^@M-^] and correspond to source address, user, resolved source
host name, local address, local port number and routing domain
- respectively.
+ respectively. Additionally the M-bM-^@M-^\invalid-userM-bM-^@M-^] flag (which does
+ not take a value argument) may be specified to simulate a
+ connection from an unrecognised username.
-c host_certificate_file
Specifies a path to a certificate file to identify sshd during
@@ -682,4 +684,4 @@ AUTHORS
versions 1.5 and 2.0. Niels Provos and Markus Friedl contributed support
for privilege separation.
-OpenBSD 7.5 June 17, 2024 OpenBSD 7.5
+OpenBSD 7.5 September 15, 2024 OpenBSD 7.5
diff --git a/sshd.8 b/sshd.8
index c0f095c..08ebf53 100644
--- a/sshd.8
+++ b/sshd.8
@@ -33,8 +33,8 @@
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
-.\" $OpenBSD: sshd.8,v 1.326 2024/06/17 08:30:29 djm Exp $
-.Dd $Mdocdate: June 17 2024 $
+.\" $OpenBSD: sshd.8,v 1.327 2024/09/15 01:19:56 djm Exp $
+.Dd $Mdocdate: September 15 2024 $
.Dt SSHD 8
.Os
.Sh NAME
@@ -115,6 +115,10 @@ and
.Dq rdomain
and correspond to source address, user, resolved source host name,
local address, local port number and routing domain respectively.
+Additionally the
+.Dq invalid-user
+flag (which does not take a value argument) may be specified to simulate
+a connection from an unrecognised username.
.It Fl c Ar host_certificate_file
Specifies a path to a certificate file to identify
.Nm
diff --git a/sshd.c b/sshd.c
index ed54fc6..df76dc7 100644
--- a/sshd.c
+++ b/sshd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sshd.c,v 1.609 2024/06/27 23:01:15 djm Exp $ */
+/* $OpenBSD: sshd.c,v 1.612 2024/09/15 01:11:26 djm Exp $ */
/*
* Copyright (c) 2000, 2001, 2002 Markus Friedl. All rights reserved.
* Copyright (c) 2002 Niels Provos. All rights reserved.
@@ -262,7 +262,7 @@ child_register(int pipefd, int sockfd)
} else {
laddr = get_local_ipaddr(sockfd);
raddr = get_peer_ipaddr(sockfd);
- xasprintf(&child->id, "connection from %s to %s", laddr, raddr);
+ xasprintf(&child->id, "connection from %s to %s", raddr, laddr);
}
free(laddr);
free(raddr);
@@ -381,6 +381,13 @@ child_reap(struct early_child *child)
(long)child->pid, child->id,
child->early ? " (early)" : "");
break;
+ case EXIT_CONFIG_REFUSED:
+ penalty_type = SRCLIMIT_PENALTY_REFUSECONNECTION;
+ debug_f("preauth child %ld for %s prohibited by"
+ "RefuseConnection %s",
+ (long)child->pid, child->id,
+ child->early ? " (early)" : "");
+ break;
default:
penalty_type = SRCLIMIT_PENALTY_NOAUTH;
debug_f("preauth child %ld for %s exited "
@@ -1341,7 +1348,7 @@ main(int ac, char **av)
break;
}
}
- if (!test_flag && !do_dump_cfg && !path_absolute(av[0]))
+ if (!test_flag && !inetd_flag && !do_dump_cfg && !path_absolute(av[0]))
fatal("sshd requires execution with an absolute path");
closefrom(STDERR_FILENO + 1);
diff --git a/sshd_config.0 b/sshd_config.0
index 6883dda..f4a8f99 100644
--- a/sshd_config.0
+++ b/sshd_config.0
@@ -644,11 +644,14 @@ DESCRIPTION
ecdh-sha2-nistp256
ecdh-sha2-nistp384
ecdh-sha2-nistp521
+ mlkem768x25519-sha256
+ sntrup761x25519-sha512
sntrup761x25519-sha512@openssh.com
The default is:
- sntrup761x25519-sha512@openssh.com,
+ sntrup761x25519-sha512,sntrup761x25519-sha512@openssh.com,
+ mlkem768x25519-sha256,
curve25519-sha256,curve25519-sha256@libssh.org,
ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,
diffie-hellman-group-exchange-sha256,
@@ -690,9 +693,9 @@ DESCRIPTION
LogVerbose
Specify one or more overrides to LogLevel. An override consists
- of a pattern lists that matches the source file, function and
- line number to force detailed logging for. For example, an
- override pattern of:
+ of one or more pattern lists that matches the source file,
+ function and line number to force detailed logging for. For
+ example, an override pattern of:
kex.c:*:1000,*:kex_exchange_identification():*,packet.c:*
@@ -753,10 +756,12 @@ DESCRIPTION
the first instance of the keyword is applied.
The arguments to Match are one or more criteria-pattern pairs or
- the single token All which matches all criteria. The available
- criteria are User, Group, Host, LocalAddress, LocalPort, RDomain,
- and Address (with RDomain representing the rdomain(4) on which
- the connection was received).
+ one of the single token criteria: All, which matches all
+ criteria, or Invalid-User, which matches when the requested user-
+ name does not match any known account. The available criteria
+ are User, Group, Host, LocalAddress, LocalPort, RDomain, and
+ Address (with RDomain representing the rdomain(4) on which the
+ connection was received).
The match patterns may consist of single entries or comma-
separated lists and may use the wildcard and negation operators
@@ -787,10 +792,11 @@ DESCRIPTION
PAMServiceName, PasswordAuthentication, PermitEmptyPasswords,
PermitListen, PermitOpen, PermitRootLogin, PermitTTY,
PermitTunnel, PermitUserRC, PubkeyAcceptedAlgorithms,
- PubkeyAuthentication, PubkeyAuthOptions, RekeyLimit, RevokedKeys,
- RDomain, SetEnv, StreamLocalBindMask, StreamLocalBindUnlink,
- TrustedUserCAKeys, UnusedConnectionTimeout, X11DisplayOffset,
- X11Forwarding and X11UseLocalhost.
+ PubkeyAuthentication, PubkeyAuthOptions, RefuseConnection,
+ RekeyLimit, RevokedKeys, RDomain, SetEnv, StreamLocalBindMask,
+ StreamLocalBindUnlink, TrustedUserCAKeys,
+ UnusedConnectionTimeout, X11DisplayOffset, X11Forwarding and
+ X11UseLocalhost.
MaxAuthTries
Specifies the maximum number of authentication attempts permitted
@@ -833,7 +839,7 @@ DESCRIPTION
PasswordAuthentication
Specifies whether password authentication is allowed. The
- default is sshd.
+ default is yes.
PermitEmptyPasswords
When password authentication is allowed, it specifies whether the
@@ -950,8 +956,8 @@ DESCRIPTION
accumulated.
Penalties are enabled by default with the default settings listed
- below but may disabled using the off keyword. The defaults may
- be overridden by specifying one or more of the keywords below,
+ below but may disabled using the no keyword. The defaults may be
+ overridden by specifying one or more of the keywords below,
separated by whitespace. All keywords accept arguments, e.g.
"crash:2m".
@@ -964,6 +970,11 @@ DESCRIPTION
after making one or more unsuccessful authentication
attempts (default: 5s).
+ refuseconnection:duration
+ Specifies how long to refuse clients that were
+ administratively prohibited connection via the
+ RefuseConnection option (default: 10s).
+
noauth:duration
Specifies how long to refuse clients that disconnect
without attempting authentication (default: 1s). This
@@ -973,7 +984,7 @@ DESCRIPTION
grace-exceeded:duration
Specifies how long to refuse clients that fail to
- authenticate after LoginGraceTime (default: 20s).
+ authenticate after LoginGraceTime (default: 10s).
max:duration
Specifies the maximum time a particular source address
@@ -1089,6 +1100,13 @@ DESCRIPTION
Specifies whether public key authentication is allowed. The
default is yes.
+ RefuseConnection
+ Indicates that sshd(8) should unconditionally terminate the
+ connection. Additionally, a refuseconnection penalty may be
+ recorded against the source of the connection if
+ PerSourcePenalties are enabled. This option is only really
+ useful in a Match block.
+
RekeyLimit
Specifies the maximum amount of data that may be transmitted or
received before the session key is renegotiated, optionally
@@ -1390,4 +1408,4 @@ AUTHORS
versions 1.5 and 2.0. Niels Provos and Markus Friedl contributed support
for privilege separation.
-OpenBSD 7.5 June 24, 2024 OpenBSD 7.5
+OpenBSD 7.5 September 15, 2024 OpenBSD 7.5
diff --git a/sshd_config.5 b/sshd_config.5
index 1ab0f41..dbed44f 100644
--- a/sshd_config.5
+++ b/sshd_config.5
@@ -33,8 +33,8 @@
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
-.\" $OpenBSD: sshd_config.5,v 1.365 2024/06/24 06:59:39 jmc Exp $
-.Dd $Mdocdate: June 24 2024 $
+.\" $OpenBSD: sshd_config.5,v 1.374 2024/09/15 08:27:38 jmc Exp $
+.Dd $Mdocdate: September 15 2024 $
.Dt SSHD_CONFIG 5
.Os
.Sh NAME
@@ -1050,12 +1050,17 @@ ecdh-sha2-nistp384
.It
ecdh-sha2-nistp521
.It
+mlkem768x25519-sha256
+.It
+sntrup761x25519-sha512
+.It
sntrup761x25519-sha512@openssh.com
.El
.Pp
The default is:
.Bd -literal -offset indent
-sntrup761x25519-sha512@openssh.com,
+sntrup761x25519-sha512,sntrup761x25519-sha512@openssh.com,
+mlkem768x25519-sha256,
curve25519-sha256,curve25519-sha256@libssh.org,
ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,
diffie-hellman-group-exchange-sha256,
@@ -1133,8 +1138,8 @@ Logging with a DEBUG level violates the privacy of users and is not recommended.
.It Cm LogVerbose
Specify one or more overrides to
.Cm LogLevel .
-An override consists of a pattern lists that matches the source file, function
-and line number to force detailed logging for.
+An override consists of one or more pattern lists that matches the
+source file, function and line number to force detailed logging for.
For example, an override pattern of:
.Bd -literal -offset indent
kex.c:*:1000,*:kex_exchange_identification():*,packet.c:*
@@ -1232,9 +1237,11 @@ applied.
.Pp
The arguments to
.Cm Match
-are one or more criteria-pattern pairs or the single token
-.Cm All
-which matches all criteria.
+are one or more criteria-pattern pairs or one of the single token criteria:
+.Cm All ,
+which matches all criteria, or
+.Cm Invalid-User ,
+which matches when the requested user-name does not match any known account.
The available criteria are
.Cm User ,
.Cm Group ,
@@ -1319,6 +1326,7 @@ Available keywords are
.Cm PubkeyAcceptedAlgorithms ,
.Cm PubkeyAuthentication ,
.Cm PubkeyAuthOptions ,
+.Cm RefuseConnection ,
.Cm RekeyLimit ,
.Cm RevokedKeys ,
.Cm RDomain ,
@@ -1384,7 +1392,7 @@ The default is
.It Cm PasswordAuthentication
Specifies whether password authentication is allowed.
The default is
-.Cm sshd .
+.Cm yes .
.It Cm PermitEmptyPasswords
When password authentication is allowed, it specifies whether the
server allows login to accounts with empty password strings.
@@ -1586,7 +1594,7 @@ accumulated.
.Pp
Penalties are enabled by default with the default settings listed below
but may disabled using the
-.Cm off
+.Cm no
keyword.
The defaults may be overridden by specifying one or more of the keywords below,
separated by whitespace.
@@ -1599,6 +1607,11 @@ Specifies how long to refuse clients that cause a crash of
.It Cm authfail:duration
Specifies how long to refuse clients that disconnect after making one or more
unsuccessful authentication attempts (default: 5s).
+.It Cm refuseconnection:duration
+Specifies how long to refuse clients that were administratively prohibited
+connection via the
+.Cm RefuseConnection
+option (default: 10s).
.It Cm noauth:duration
Specifies how long to refuse clients that disconnect without attempting
authentication (default: 1s).
@@ -1608,7 +1621,7 @@ scanning tools such as
.It Cm grace-exceeded:duration
Specifies how long to refuse clients that fail to authenticate after
.Cm LoginGraceTime
-(default: 20s).
+(default: 10s).
.It Cm max:duration
Specifies the maximum time a particular source address range will be refused
access for (default: 10m).
@@ -1756,6 +1769,18 @@ options have any effect for other, non-FIDO, public key types.
Specifies whether public key authentication is allowed.
The default is
.Cm yes .
+.It Cm RefuseConnection
+Indicates that
+.Xr sshd 8
+should unconditionally terminate the connection.
+Additionally, a
+.Cm refuseconnection
+penalty may be recorded against the source of the connection if
+.Cm PerSourcePenalties
+are enabled.
+This option is only really useful in a
+.Cm Match
+block.
.It Cm RekeyLimit
Specifies the maximum amount of data that may be transmitted or received
before the session key is renegotiated, optionally followed by a maximum
diff --git a/sshkey.c b/sshkey.c
index d4356e7..1db8378 100644
--- a/sshkey.c
+++ b/sshkey.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sshkey.c,v 1.142 2024/01/11 01:45:36 djm Exp $ */
+/* $OpenBSD: sshkey.c,v 1.146 2024/09/04 05:33:34 djm Exp $ */
/*
* Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
* Copyright (c) 2008 Alexander von Gernler. All rights reserved.
@@ -28,6 +28,7 @@
#include "includes.h"
#include <sys/types.h>
+#include <sys/mman.h>
#include <netinet/in.h>
#ifdef WITH_OPENSSL
@@ -248,22 +249,36 @@ sshkey_ssh_name_plain(const struct sshkey *k)
k->ecdsa_nid);
}
-int
-sshkey_type_from_name(const char *name)
+static int
+type_from_name(const char *name, int allow_short)
{
int i;
const struct sshkey_impl *impl;
for (i = 0; keyimpls[i] != NULL; i++) {
impl = keyimpls[i];
+ if (impl->name != NULL && strcmp(name, impl->name) == 0)
+ return impl->type;
/* Only allow shortname matches for plain key types */
- if ((impl->name != NULL && strcmp(name, impl->name) == 0) ||
- (!impl->cert && strcasecmp(impl->shortname, name) == 0))
+ if (allow_short && !impl->cert && impl->shortname != NULL &&
+ strcasecmp(impl->shortname, name) == 0)
return impl->type;
}
return KEY_UNSPEC;
}
+int
+sshkey_type_from_name(const char *name)
+{
+ return type_from_name(name, 0);
+}
+
+int
+sshkey_type_from_shortname(const char *name)
+{
+ return type_from_name(name, 1);
+}
+
static int
key_type_is_ecdsa_variant(int type)
{
@@ -481,6 +496,98 @@ sshkey_type_certified(int type)
}
#ifdef WITH_OPENSSL
+static const EVP_MD *
+ssh_digest_to_md(int hash_alg)
+{
+ switch (hash_alg) {
+ case SSH_DIGEST_SHA1:
+ return EVP_sha1();
+ case SSH_DIGEST_SHA256:
+ return EVP_sha256();
+ case SSH_DIGEST_SHA384:
+ return EVP_sha384();
+ case SSH_DIGEST_SHA512:
+ return EVP_sha512();
+ }
+ return NULL;
+}
+
+int
+sshkey_pkey_digest_sign(EVP_PKEY *pkey, int hash_alg, u_char **sigp,
+ size_t *lenp, const u_char *data, size_t datalen)
+{
+ EVP_MD_CTX *ctx = NULL;
+ u_char *sig = NULL;
+ int ret;
+ size_t slen;
+ const EVP_MD *evpmd;
+
+ *sigp = NULL;
+ *lenp = 0;
+
+ slen = EVP_PKEY_size(pkey);
+ if (slen <= 0 || slen > SSHBUF_MAX_BIGNUM ||
+ (evpmd = ssh_digest_to_md(hash_alg)) == NULL)
+ return SSH_ERR_INVALID_ARGUMENT;
+
+ if ((sig = malloc(slen)) == NULL)
+ return SSH_ERR_ALLOC_FAIL;
+
+ if ((ctx = EVP_MD_CTX_new()) == NULL) {
+ ret = SSH_ERR_ALLOC_FAIL;
+ goto out;
+ }
+ if (EVP_DigestSignInit(ctx, NULL, evpmd, NULL, pkey) != 1 ||
+ EVP_DigestSign(ctx, sig, &slen, data, datalen) != 1) {
+ ret = SSH_ERR_LIBCRYPTO_ERROR;
+ goto out;
+ }
+
+ *sigp = sig;
+ *lenp = slen;
+ /* Now owned by the caller */
+ sig = NULL;
+ ret = 0;
+
+ out:
+ EVP_MD_CTX_free(ctx);
+ free(sig);
+ return ret;
+}
+
+int
+sshkey_pkey_digest_verify(EVP_PKEY *pkey, int hash_alg, const u_char *data,
+ size_t datalen, u_char *sigbuf, size_t siglen)
+{
+ EVP_MD_CTX *ctx = NULL;
+ int ret = SSH_ERR_INTERNAL_ERROR;
+ const EVP_MD *evpmd;
+
+ if ((evpmd = ssh_digest_to_md(hash_alg)) == NULL)
+ return SSH_ERR_INVALID_ARGUMENT;
+ if ((ctx = EVP_MD_CTX_new()) == NULL)
+ return SSH_ERR_ALLOC_FAIL;
+ if (EVP_DigestVerifyInit(ctx, NULL, evpmd, NULL, pkey) != 1) {
+ ret = SSH_ERR_LIBCRYPTO_ERROR;
+ goto out;
+ }
+ switch (EVP_DigestVerify(ctx, sigbuf, siglen, data, datalen)) {
+ case 1:
+ ret = 0;
+ break;
+ case 0:
+ ret = SSH_ERR_SIGNATURE_INVALID;
+ break;
+ default:
+ ret = SSH_ERR_LIBCRYPTO_ERROR;
+ break;
+ }
+
+ out:
+ EVP_MD_CTX_free(ctx);
+ return ret;
+}
+
/* XXX: these are really begging for a table-driven approach */
int
sshkey_curve_name_to_nid(const char *name)
@@ -647,6 +754,38 @@ sshkey_sk_cleanup(struct sshkey *k)
k->sk_key_handle = k->sk_reserved = NULL;
}
+#if defined(MAP_CONCEAL)
+# define PREKEY_MMAP_FLAG MAP_CONCEAL
+#elif defined(MAP_NOCORE)
+# define PREKEY_MMAP_FLAG MAP_NOCORE
+#else
+# define PREKEY_MMAP_FLAG 0
+#endif
+
+static int
+sshkey_prekey_alloc(u_char **prekeyp, size_t len)
+{
+ u_char *prekey;
+
+ *prekeyp = NULL;
+ if ((prekey = mmap(NULL, len, PROT_READ|PROT_WRITE,
+ MAP_ANON|MAP_PRIVATE|PREKEY_MMAP_FLAG, -1, 0)) == MAP_FAILED)
+ return SSH_ERR_SYSTEM_ERROR;
+#if defined(MADV_DONTDUMP) && !defined(MAP_CONCEAL) && !defined(MAP_NOCORE)
+ (void)madvise(prekey, len, MADV_DONTDUMP);
+#endif
+ *prekeyp = prekey;
+ return 0;
+}
+
+static void
+sshkey_prekey_free(void *prekey, size_t len)
+{
+ if (prekey == NULL)
+ return;
+ munmap(prekey, len);
+}
+
static void
sshkey_free_contents(struct sshkey *k)
{
@@ -660,7 +799,7 @@ sshkey_free_contents(struct sshkey *k)
if (sshkey_is_cert(k))
cert_free(k->cert);
freezero(k->shielded_private, k->shielded_len);
- freezero(k->shield_prekey, k->shield_prekey_len);
+ sshkey_prekey_free(k->shield_prekey, k->shield_prekey_len);
}
void
@@ -1331,14 +1470,12 @@ int
sshkey_check_rsa_length(const struct sshkey *k, int min_size)
{
#ifdef WITH_OPENSSL
- const BIGNUM *rsa_n;
int nbits;
- if (k == NULL || k->rsa == NULL ||
+ if (k == NULL || k->pkey == NULL ||
(k->type != KEY_RSA && k->type != KEY_RSA_CERT))
return 0;
- RSA_get0_key(k->rsa, &rsa_n, NULL, NULL);
- nbits = BN_num_bits(rsa_n);
+ nbits = EVP_PKEY_bits(k->pkey);
if (nbits < SSH_RSA_MINIMUM_MODULUS_SIZE ||
(min_size > 0 && nbits < min_size))
return SSH_ERR_KEY_LENGTH;
@@ -1346,53 +1483,26 @@ sshkey_check_rsa_length(const struct sshkey *k, int min_size)
return 0;
}
-#ifdef WITH_OPENSSL
-# ifdef OPENSSL_HAS_ECC
+#if defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC)
int
-sshkey_ecdsa_key_to_nid(EC_KEY *k)
+sshkey_ecdsa_key_to_nid(const EC_KEY *k)
{
- EC_GROUP *eg;
- int nids[] = {
- NID_X9_62_prime256v1,
- NID_secp384r1,
-# ifdef OPENSSL_HAS_NISTP521
- NID_secp521r1,
-# endif /* OPENSSL_HAS_NISTP521 */
- -1
- };
+ const EC_GROUP *g;
int nid;
- u_int i;
- const EC_GROUP *g = EC_KEY_get0_group(k);
- /*
- * The group may be stored in a ASN.1 encoded private key in one of two
- * ways: as a "named group", which is reconstituted by ASN.1 object ID
- * or explicit group parameters encoded into the key blob. Only the
- * "named group" case sets the group NID for us, but we can figure
- * it out for the other case by comparing against all the groups that
- * are supported.
- */
- if ((nid = EC_GROUP_get_curve_name(g)) > 0)
- return nid;
- for (i = 0; nids[i] != -1; i++) {
- if ((eg = EC_GROUP_new_by_curve_name(nids[i])) == NULL)
- return -1;
- if (EC_GROUP_cmp(g, eg, NULL) == 0)
- break;
- EC_GROUP_free(eg);
- }
- if (nids[i] != -1) {
- /* Use the group with the NID attached */
- EC_GROUP_set_asn1_flag(eg, OPENSSL_EC_NAMED_CURVE);
- if (EC_KEY_set_group(k, eg) != 1) {
- EC_GROUP_free(eg);
- return -1;
- }
- }
- return nids[i];
+ if (k == NULL || (g = EC_KEY_get0_group(k)) == NULL)
+ return -1;
+ if ((nid = EC_GROUP_get_curve_name(g)) <= 0)
+ return -1;
+ return nid;
}
-# endif /* OPENSSL_HAS_ECC */
-#endif /* WITH_OPENSSL */
+
+int
+sshkey_ecdsa_pkey_to_nid(EVP_PKEY *pkey)
+{
+ return sshkey_ecdsa_key_to_nid(EVP_PKEY_get0_EC_KEY(pkey));
+}
+#endif /* defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC) */
int
sshkey_generate(int type, u_int bits, struct sshkey **keyp)
@@ -1557,10 +1667,8 @@ sshkey_shield_private(struct sshkey *k)
}
/* Prepare a random pre-key, and from it an ephemeral key */
- if ((prekey = malloc(SSHKEY_SHIELD_PREKEY_LEN)) == NULL) {
- r = SSH_ERR_ALLOC_FAIL;
+ if ((r = sshkey_prekey_alloc(&prekey, SSHKEY_SHIELD_PREKEY_LEN)) != 0)
goto out;
- }
arc4random_buf(prekey, SSHKEY_SHIELD_PREKEY_LEN);
if ((r = ssh_digest_memory(SSHKEY_SHIELD_PREKEY_HASH,
prekey, SSHKEY_SHIELD_PREKEY_LEN,
@@ -1638,7 +1746,7 @@ sshkey_shield_private(struct sshkey *k)
explicit_bzero(keyiv, sizeof(keyiv));
explicit_bzero(&tmp, sizeof(tmp));
freezero(enc, enclen);
- freezero(prekey, SSHKEY_SHIELD_PREKEY_LEN);
+ sshkey_prekey_free(prekey, SSHKEY_SHIELD_PREKEY_LEN);
sshkey_free(kswap);
sshbuf_free(prvbuf);
return r;
@@ -3226,10 +3334,6 @@ sshkey_private_to_blob_pem_pkcs8(struct sshkey *key, struct sshbuf *buf,
r = SSH_ERR_ALLOC_FAIL;
goto out;
}
- if (format == SSHKEY_PRIVATE_PKCS8 && (pkey = EVP_PKEY_new()) == NULL) {
- r = SSH_ERR_ALLOC_FAIL;
- goto out;
- }
if ((r = sshkey_unshield_private(key)) != 0)
goto out;
@@ -3240,6 +3344,10 @@ sshkey_private_to_blob_pem_pkcs8(struct sshkey *key, struct sshbuf *buf,
success = PEM_write_bio_DSAPrivateKey(bio, key->dsa,
cipher, passphrase, len, NULL, NULL);
} else {
+ if ((pkey = EVP_PKEY_new()) == NULL) {
+ r = SSH_ERR_ALLOC_FAIL;
+ goto out;
+ }
success = EVP_PKEY_set1_DSA(pkey, key->dsa);
}
break;
@@ -3247,19 +3355,25 @@ sshkey_private_to_blob_pem_pkcs8(struct sshkey *key, struct sshbuf *buf,
#ifdef OPENSSL_HAS_ECC
case KEY_ECDSA:
if (format == SSHKEY_PRIVATE_PEM) {
- success = PEM_write_bio_ECPrivateKey(bio, key->ecdsa,
+ success = PEM_write_bio_ECPrivateKey(bio,
+ EVP_PKEY_get0_EC_KEY(key->pkey),
cipher, passphrase, len, NULL, NULL);
} else {
- success = EVP_PKEY_set1_EC_KEY(pkey, key->ecdsa);
+ pkey = key->pkey;
+ EVP_PKEY_up_ref(key->pkey);
+ success = 1;
}
break;
#endif
case KEY_RSA:
if (format == SSHKEY_PRIVATE_PEM) {
- success = PEM_write_bio_RSAPrivateKey(bio, key->rsa,
+ success = PEM_write_bio_RSAPrivateKey(bio,
+ EVP_PKEY_get0_RSA(key->pkey),
cipher, passphrase, len, NULL, NULL);
} else {
- success = EVP_PKEY_set1_RSA(pkey, key->rsa);
+ pkey = key->pkey;
+ EVP_PKEY_up_ref(key->pkey);
+ success = 1;
}
break;
default:
@@ -3428,6 +3542,8 @@ sshkey_parse_private_pem_fileblob(struct sshbuf *blob, int type,
struct sshkey *prv = NULL;
BIO *bio = NULL;
int r;
+ RSA *rsa = NULL;
+ EC_KEY *ecdsa = NULL;
if (keyp != NULL)
*keyp = NULL;
@@ -3461,15 +3577,21 @@ sshkey_parse_private_pem_fileblob(struct sshbuf *blob, int type,
r = SSH_ERR_ALLOC_FAIL;
goto out;
}
- prv->rsa = EVP_PKEY_get1_RSA(pk);
+ if ((rsa = EVP_PKEY_get1_RSA(pk)) == NULL) {
+ r = SSH_ERR_LIBCRYPTO_ERROR;
+ goto out;
+ }
prv->type = KEY_RSA;
#ifdef DEBUG_PK
- RSA_print_fp(stderr, prv->rsa, 8);
+ RSA_print_fp(stderr, rsa, 8);
#endif
- if (RSA_blinding_on(prv->rsa, NULL) != 1) {
+ if (RSA_blinding_on(rsa, NULL) != 1 ||
+ EVP_PKEY_set1_RSA(pk, rsa) != 1) {
r = SSH_ERR_LIBCRYPTO_ERROR;
goto out;
}
+ EVP_PKEY_up_ref(pk);
+ prv->pkey = pk;
if ((r = sshkey_check_rsa_length(prv, 0)) != 0)
goto out;
#ifdef WITH_DSA
@@ -3492,21 +3614,25 @@ sshkey_parse_private_pem_fileblob(struct sshbuf *blob, int type,
r = SSH_ERR_ALLOC_FAIL;
goto out;
}
- prv->ecdsa = EVP_PKEY_get1_EC_KEY(pk);
+ if ((prv->ecdsa_nid = sshkey_ecdsa_fixup_group(pk)) == -1 ||
+ (ecdsa = EVP_PKEY_get1_EC_KEY(pk)) == NULL) {
+ r = SSH_ERR_LIBCRYPTO_ERROR;
+ goto out;
+ }
prv->type = KEY_ECDSA;
- prv->ecdsa_nid = sshkey_ecdsa_key_to_nid(prv->ecdsa);
- if (prv->ecdsa_nid == -1 ||
- sshkey_curve_nid_to_name(prv->ecdsa_nid) == NULL ||
- sshkey_ec_validate_public(EC_KEY_get0_group(prv->ecdsa),
- EC_KEY_get0_public_key(prv->ecdsa)) != 0 ||
- sshkey_ec_validate_private(prv->ecdsa) != 0) {
+ if (sshkey_curve_nid_to_name(prv->ecdsa_nid) == NULL ||
+ sshkey_ec_validate_public(EC_KEY_get0_group(ecdsa),
+ EC_KEY_get0_public_key(ecdsa)) != 0 ||
+ sshkey_ec_validate_private(ecdsa) != 0) {
r = SSH_ERR_INVALID_FORMAT;
goto out;
}
-# ifdef DEBUG_PK
- if (prv != NULL && prv->ecdsa != NULL)
- sshkey_dump_ec_key(prv->ecdsa);
-# endif
+ EVP_PKEY_up_ref(pk);
+ prv->pkey = pk;
+#ifdef DEBUG_PK
+ if (prv != NULL && prv->pkey != NULL)
+ sshkey_dump_ec_key(EVP_PKEY_get0_EC_KEY(prv->pkey));
+#endif
#endif /* OPENSSL_HAS_ECC */
#ifdef OPENSSL_HAS_ED25519
} else if (EVP_PKEY_base_id(pk) == EVP_PKEY_ED25519 &&
@@ -3541,9 +3667,9 @@ sshkey_parse_private_pem_fileblob(struct sshbuf *blob, int type,
/* Append the public key to our private key */
memcpy(prv->ed25519_sk + (ED25519_SK_SZ - ED25519_PK_SZ),
prv->ed25519_pk, ED25519_PK_SZ);
-# ifdef DEBUG_PK
+#ifdef DEBUG_PK
sshbuf_dump_data(prv->ed25519_sk, ED25519_SK_SZ, stderr);
-# endif
+#endif
#endif /* OPENSSL_HAS_ED25519 */
} else {
r = SSH_ERR_INVALID_FORMAT;
@@ -3557,6 +3683,10 @@ sshkey_parse_private_pem_fileblob(struct sshbuf *blob, int type,
out:
BIO_free(bio);
EVP_PKEY_free(pk);
+ RSA_free(rsa);
+#ifdef OPENSSL_HAS_ECC
+ EC_KEY_free(ecdsa);
+#endif
sshkey_free(prv);
return r;
}
diff --git a/sshkey.h b/sshkey.h
index 32933bb..d0cdea0 100644
--- a/sshkey.h
+++ b/sshkey.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: sshkey.h,v 1.63 2024/05/17 06:42:04 jsg Exp $ */
+/* $OpenBSD: sshkey.h,v 1.65 2024/09/04 05:33:34 djm Exp $ */
/*
* Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
@@ -31,6 +31,7 @@
#ifdef WITH_OPENSSL
#include <openssl/rsa.h>
#include <openssl/dsa.h>
+#include <openssl/evp.h>
# ifdef OPENSSL_HAS_ECC
# include <openssl/ec.h>
# include <openssl/ecdsa.h>
@@ -47,6 +48,7 @@
# define EC_KEY void
# define EC_GROUP void
# define EC_POINT void
+# define EVP_PKEY void
#define SSH_OPENSSL_VERSION "without OpenSSL"
#endif /* WITH_OPENSSL */
@@ -125,13 +127,12 @@ struct sshkey_cert {
struct sshkey {
int type;
int flags;
- /* KEY_RSA */
- RSA *rsa;
/* KEY_DSA */
DSA *dsa;
/* KEY_ECDSA and KEY_ECDSA_SK */
int ecdsa_nid; /* NID of curve */
- EC_KEY *ecdsa;
+ /* libcrypto-backed keys */
+ EVP_PKEY *pkey;
/* KEY_ED25519 and KEY_ED25519_SK */
u_char *ed25519_sk;
u_char *ed25519_pk;
@@ -223,6 +224,7 @@ int sshkey_shield_private(struct sshkey *);
int sshkey_unshield_private(struct sshkey *);
int sshkey_type_from_name(const char *);
+int sshkey_type_from_shortname(const char *);
int sshkey_is_cert(const struct sshkey *);
int sshkey_is_sk(const struct sshkey *);
int sshkey_type_is_cert(int);
@@ -258,7 +260,8 @@ int sshkey_curve_name_to_nid(const char *);
const char * sshkey_curve_nid_to_name(int);
u_int sshkey_curve_nid_to_bits(int);
int sshkey_ecdsa_bits_to_nid(int);
-int sshkey_ecdsa_key_to_nid(EC_KEY *);
+int sshkey_ecdsa_key_to_nid(const EC_KEY *);
+int sshkey_ecdsa_pkey_to_nid(EVP_PKEY *);
int sshkey_ec_nid_to_hash_alg(int nid);
int sshkey_ec_validate_public(const EC_GROUP *, const EC_POINT *);
int sshkey_ec_validate_private(const EC_KEY *);
@@ -287,6 +290,12 @@ int sshkey_check_sigtype(const u_char *, size_t, const char *);
const char *sshkey_sigalg_by_name(const char *);
int sshkey_get_sigtype(const u_char *, size_t, char **);
+/* Signing and verification backend for libcrypto-backed keys */
+int sshkey_pkey_digest_sign(EVP_PKEY*, int, u_char **,
+ size_t *, const u_char *, size_t);
+int sshkey_pkey_digest_verify(EVP_PKEY *, int, const u_char *,
+ size_t, u_char *, size_t);
+
/* for debug */
void sshkey_dump_ec_point(const EC_GROUP *, const EC_POINT *);
void sshkey_dump_ec_key(const EC_KEY *);
@@ -310,7 +319,8 @@ int sshkey_parse_pubkey_from_private_fileblob_type(struct sshbuf *blob,
int sshkey_check_rsa_length(const struct sshkey *, int);
/* XXX should be internal, but used by ssh-keygen */
-int ssh_rsa_complete_crt_parameters(struct sshkey *, const BIGNUM *);
+int ssh_rsa_complete_crt_parameters(const BIGNUM *, const BIGNUM *,
+ const BIGNUM *, const BIGNUM *, BIGNUM **, BIGNUM **);
/* stateful keys (e.g. XMSS) */
int sshkey_set_filename(struct sshkey *, const char *);
@@ -321,6 +331,10 @@ int sshkey_private_serialize_maxsign(struct sshkey *key,
void sshkey_sig_details_free(struct sshkey_sig_details *);
+#ifdef WITH_OPENSSL
+int sshkey_ecdsa_fixup_group(EVP_PKEY *k); /* ssh-ecdsa.c */
+#endif
+
#ifdef SSHKEY_INTERNAL
int sshkey_sk_fields_equal(const struct sshkey *a, const struct sshkey *b);
void sshkey_sk_cleanup(struct sshkey *k);
@@ -341,6 +355,7 @@ int check_rsa_length(const RSA *rsa); /* XXX remove */
# undef EC_KEY
# undef EC_GROUP
# undef EC_POINT
+# undef EVP_PKEY
#elif !defined(OPENSSL_HAS_ECC)
# undef EC_KEY
# undef EC_GROUP
diff --git a/version.h b/version.h
index 81b7645..8c7e37e 100644
--- a/version.h
+++ b/version.h
@@ -1,6 +1,6 @@
-/* $OpenBSD: version.h,v 1.102 2024/07/01 04:31:59 djm Exp $ */
+/* $OpenBSD: version.h,v 1.103 2024/09/19 22:17:44 djm Exp $ */
-#define SSH_VERSION "OpenSSH_9.8"
+#define SSH_VERSION "OpenSSH_9.9"
#define SSH_PORTABLE "p1"
#define SSH_RELEASE SSH_VERSION SSH_PORTABLE