summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.depend182
-rw-r--r--.skipped-commit-ids7
-rw-r--r--ChangeLog4925
-rw-r--r--INSTALL20
-rw-r--r--Makefile.in101
-rw-r--r--PROTOCOL14
-rw-r--r--PROTOCOL.certkeys8
-rw-r--r--README20
-rw-r--r--README.privsep4
-rw-r--r--auth-options.c1216
-rw-r--r--auth-options.h108
-rw-r--r--auth-pam.c25
-rw-r--r--auth-pam.h4
-rw-r--r--auth-passwd.c30
-rw-r--r--auth-sia.c4
-rw-r--r--auth.c351
-rw-r--r--auth.h34
-rw-r--r--auth2-hostbased.c10
-rw-r--r--auth2-none.c4
-rw-r--r--auth2-passwd.c4
-rw-r--r--auth2-pubkey.c618
-rw-r--r--auth2.c17
-rw-r--r--authfd.c43
-rw-r--r--authfd.h7
-rw-r--r--authfile.c8
-rw-r--r--bitmap.c1
-rw-r--r--bitmap.h1
-rw-r--r--blocks.c248
-rw-r--r--channels.c84
-rw-r--r--cipher.c21
-rw-r--r--clientloop.c57
-rw-r--r--clientloop.h4
-rw-r--r--compat.c73
-rw-r--r--compat.h28
-rw-r--r--config.h.in72
-rwxr-xr-xconfigure716
-rw-r--r--configure.ac217
-rw-r--r--contrib/aix/README1
-rwxr-xr-xcontrib/aix/buildbff.sh1
-rwxr-xr-xcontrib/aix/inventory.sh1
-rw-r--r--contrib/cygwin/Makefile11
-rw-r--r--contrib/findssl.sh2
-rw-r--r--contrib/redhat/openssh.spec69
-rwxr-xr-xcontrib/redhat/sshd.init1
-rwxr-xr-xcontrib/redhat/sshd.init.old17
-rw-r--r--contrib/suse/openssh.spec2
-rw-r--r--crypto_api.h10
-rw-r--r--debian/.git-dpm17
-rw-r--r--debian/changelog113
-rw-r--r--debian/control1
-rw-r--r--debian/patches/auth-log-verbosity.patch120
-rw-r--r--debian/patches/authorized-keys-man-symlink.patch6
-rw-r--r--debian/patches/debian-banner.patch38
-rw-r--r--debian/patches/debian-config.patch28
-rw-r--r--debian/patches/dnssec-sshfp.patch8
-rw-r--r--debian/patches/doc-hash-tab-completion.patch6
-rw-r--r--debian/patches/fix-regress-putty-transfer.patch37
-rw-r--r--debian/patches/gnome-ssh-askpass2-icon.patch2
-rw-r--r--debian/patches/gssapi.patch152
-rw-r--r--debian/patches/keepalive-extensions.patch20
-rw-r--r--debian/patches/mention-ssh-keygen-on-keychange.patch8
-rw-r--r--debian/patches/no-dsa-host-key-by-default.patch83
-rw-r--r--debian/patches/no-openssl-version-status.patch2
-rw-r--r--debian/patches/openbsd-docs.patch22
-rw-r--r--debian/patches/package-versioning.patch14
-rw-r--r--debian/patches/permitopen-argument-handling.patch51
-rw-r--r--debian/patches/restore-authorized_keys2.patch4
-rw-r--r--debian/patches/restore-tcp-wrappers.patch26
-rw-r--r--debian/patches/scp-quoting.patch6
-rw-r--r--debian/patches/seccomp-getuid-geteuid.patch2
-rw-r--r--debian/patches/seccomp-s390-flock-ipc.patch2
-rw-r--r--debian/patches/seccomp-s390-ioctl-ep11-crypto.patch2
-rw-r--r--debian/patches/selinux-role.patch74
-rw-r--r--debian/patches/series4
-rw-r--r--debian/patches/shell-path.patch8
-rw-r--r--debian/patches/ssh-agent-setgid.patch2
-rw-r--r--debian/patches/ssh-argv0.patch6
-rw-r--r--debian/patches/ssh-vulnkey-compat.patch8
-rw-r--r--debian/patches/syslog-level-silent.patch6
-rw-r--r--debian/patches/systemd-readiness.patch12
-rw-r--r--debian/patches/user-group-modes.patch32
-rw-r--r--defines.h24
-rw-r--r--dh.c11
-rw-r--r--dns.c7
-rw-r--r--dns.h5
-rw-r--r--entropy.c4
-rwxr-xr-xfixprogs72
-rw-r--r--hash.c83
-rwxr-xr-xinstall-sh682
-rw-r--r--kex.c14
-rw-r--r--kexc25519c.c4
-rw-r--r--kexc25519s.c2
-rw-r--r--kexdhc.c10
-rw-r--r--kexdhs.c8
-rw-r--r--kexecdhc.c19
-rw-r--r--kexecdhs.c14
-rw-r--r--kexgexc.c16
-rw-r--r--kexgexs.c8
-rw-r--r--key.c17
-rw-r--r--key.h3
-rw-r--r--krl.c4
-rw-r--r--loginrec.c6
-rw-r--r--md5crypt.c4
-rw-r--r--mdoc2man.awk2
-rw-r--r--misc.c696
-rw-r--r--misc.h21
-rwxr-xr-xmkinstalldirs2
-rw-r--r--moduli836
-rw-r--r--moduli.c6
-rw-r--r--monitor.c116
-rw-r--r--monitor_wrap.c56
-rw-r--r--monitor_wrap.h13
-rw-r--r--opacket.c1
-rw-r--r--opacket.h1
-rw-r--r--openbsd-compat/Makefile.in81
-rw-r--r--openbsd-compat/bsd-cray.c816
-rw-r--r--openbsd-compat/bsd-cray.h59
-rw-r--r--openbsd-compat/bsd-flock.c81
-rw-r--r--openbsd-compat/bsd-getpagesize.c2
-rw-r--r--openbsd-compat/bsd-malloc.c2
-rw-r--r--openbsd-compat/bsd-misc.c81
-rw-r--r--openbsd-compat/bsd-misc.h34
-rw-r--r--openbsd-compat/bsd-openpty.c25
-rw-r--r--openbsd-compat/bsd-signal.c62
-rw-r--r--openbsd-compat/bsd-signal.h39
-rw-r--r--openbsd-compat/bsd-statvfs.c8
-rw-r--r--openbsd-compat/bsd-statvfs.h3
-rw-r--r--openbsd-compat/freezero.c4
-rw-r--r--openbsd-compat/openbsd-compat.h14
-rw-r--r--openbsd-compat/port-aix.c4
-rw-r--r--openbsd-compat/port-linux.c9
-rw-r--r--openbsd-compat/port-net.c (renamed from openbsd-compat/port-tun.c)101
-rw-r--r--openbsd-compat/port-net.h (renamed from openbsd-compat/port-tun.h)16
-rw-r--r--openbsd-compat/port-uw.c4
-rw-r--r--openbsd-compat/readpassphrase.c8
-rw-r--r--openbsd-compat/regress/Makefile.in2
-rw-r--r--openbsd-compat/strndup.c43
-rw-r--r--openbsd-compat/strnlen.c2
-rwxr-xr-xopensshd.init.in4
-rw-r--r--packet.c32
-rw-r--r--packet.h5
-rw-r--r--pathnames.h4
-rw-r--r--readconf.c76
-rw-r--r--readconf.h4
-rw-r--r--regress/Makefile5
-rw-r--r--regress/README.regress2
-rw-r--r--regress/agent-getpeereid.sh3
-rw-r--r--regress/agent-ptrace.sh2
-rw-r--r--regress/agent.sh144
-rw-r--r--regress/allow-deny-users.sh1
-rw-r--r--regress/authinfo.sh4
-rw-r--r--regress/cert-userkey.sh5
-rw-r--r--regress/cfgmatch.sh6
-rw-r--r--regress/connect-uri.sh29
-rw-r--r--regress/forward-control.sh29
-rw-r--r--regress/key-options.sh68
-rw-r--r--regress/keys-command.sh2
-rw-r--r--regress/keytype.sh14
-rw-r--r--regress/limit-keytype.sh9
-rw-r--r--regress/misc/fuzz-harness/sig_fuzz.cc12
-rw-r--r--regress/misc/kexfuzz/Makefile32
-rw-r--r--regress/misc/kexfuzz/README2
-rw-r--r--[-rwxr-xr-x]regress/modpipe.c0
-rw-r--r--regress/netcat.c7
-rw-r--r--regress/proxy-connect.sh30
-rw-r--r--regress/putty-ciphers.sh2
-rw-r--r--regress/putty-kex.sh2
-rw-r--r--regress/putty-transfer.sh6
-rw-r--r--regress/scp-uri.sh70
-rw-r--r--regress/sftp-chroot.sh7
-rw-r--r--regress/sftp-uri.sh63
-rw-r--r--regress/sftp.sh6
-rw-r--r--regress/sshd-log-wrapper.sh2
-rw-r--r--regress/test-exec.sh6
-rw-r--r--regress/unittests/Makefile3
-rw-r--r--regress/unittests/Makefile.inc16
-rw-r--r--regress/unittests/authopt/testdata/all_permit.cert1
-rw-r--r--regress/unittests/authopt/testdata/bad_sourceaddr.cert1
-rw-r--r--regress/unittests/authopt/testdata/force_command.cert1
-rw-r--r--regress/unittests/authopt/testdata/host.cert1
-rw-r--r--regress/unittests/authopt/testdata/mktestdata.sh48
-rw-r--r--regress/unittests/authopt/testdata/no_agentfwd.cert1
-rw-r--r--regress/unittests/authopt/testdata/no_permit.cert1
-rw-r--r--regress/unittests/authopt/testdata/no_portfwd.cert1
-rw-r--r--regress/unittests/authopt/testdata/no_pty.cert1
-rw-r--r--regress/unittests/authopt/testdata/no_user_rc.cert1
-rw-r--r--regress/unittests/authopt/testdata/no_x11fwd.cert1
-rw-r--r--regress/unittests/authopt/testdata/only_agentfwd.cert1
-rw-r--r--regress/unittests/authopt/testdata/only_portfwd.cert1
-rw-r--r--regress/unittests/authopt/testdata/only_pty.cert1
-rw-r--r--regress/unittests/authopt/testdata/only_user_rc.cert1
-rw-r--r--regress/unittests/authopt/testdata/only_x11fwd.cert1
-rw-r--r--regress/unittests/authopt/testdata/sourceaddr.cert1
-rw-r--r--regress/unittests/authopt/testdata/unknown_critical.cert1
-rw-r--r--regress/unittests/authopt/tests.c573
-rw-r--r--regress/unittests/bitmap/Makefile6
-rw-r--r--regress/unittests/conversion/Makefile7
-rw-r--r--regress/unittests/hostkeys/Makefile15
-rw-r--r--regress/unittests/kex/Makefile19
-rw-r--r--regress/unittests/match/Makefile8
-rw-r--r--regress/unittests/sshbuf/Makefile12
-rw-r--r--regress/unittests/sshkey/Makefile15
-rw-r--r--regress/unittests/sshkey/test_fuzz.c6
-rw-r--r--regress/unittests/sshkey/test_sshkey.c8
-rw-r--r--regress/unittests/test_helper/test_helper.c14
-rw-r--r--regress/unittests/test_helper/test_helper.h4
-rw-r--r--regress/unittests/utf8/Makefile6
-rw-r--r--regress/yes-head.sh2
-rw-r--r--scp.019
-rw-r--r--scp.145
-rw-r--r--scp.c222
-rw-r--r--servconf.c561
-rw-r--r--servconf.h77
-rw-r--r--serverloop.c82
-rw-r--r--session.c120
-rw-r--r--sftp-client.c20
-rw-r--r--sftp.067
-rw-r--r--sftp.192
-rw-r--r--sftp.c88
-rw-r--r--ssh-add.c74
-rw-r--r--ssh-agent.c64
-rw-r--r--ssh-dss.c87
-rw-r--r--ssh-ecdsa.c8
-rw-r--r--ssh-keygen.033
-rw-r--r--ssh-keygen.129
-rw-r--r--ssh-keygen.c98
-rw-r--r--ssh-keyscan.080
-rw-r--r--ssh-keyscan.1102
-rw-r--r--ssh-keyscan.c38
-rw-r--r--ssh-keysign.c7
-rw-r--r--ssh-pkcs11-client.c5
-rw-r--r--ssh-pkcs11-helper.c183
-rw-r--r--ssh-pkcs11.c5
-rw-r--r--ssh-rsa.c57
-rw-r--r--ssh-xmss.c192
-rw-r--r--ssh.050
-rw-r--r--ssh.157
-rw-r--r--ssh.c344
-rw-r--r--ssh_config.053
-rw-r--r--ssh_config.552
-rw-r--r--sshconnect.c197
-rw-r--r--sshconnect.h4
-rw-r--r--sshconnect2.c99
-rw-r--r--sshd.031
-rw-r--r--sshd.837
-rw-r--r--sshd.c218
-rw-r--r--sshd_config2
-rw-r--r--sshd_config.076
-rw-r--r--sshd_config.579
-rw-r--r--sshkey-xmss.c1055
-rw-r--r--sshkey-xmss.h56
-rw-r--r--sshkey.c743
-rw-r--r--sshkey.h45
-rw-r--r--sshpty.c25
-rw-r--r--ttymodes.c13
-rw-r--r--umac.c194
-rw-r--r--umac128.c10
-rw-r--r--version.h4
-rw-r--r--xmss_commons.c36
-rw-r--r--xmss_commons.h21
-rw-r--r--xmss_fast.c1106
-rw-r--r--xmss_fast.h111
-rw-r--r--xmss_hash.c140
-rw-r--r--xmss_hash.h22
-rw-r--r--xmss_hash_address.c66
-rw-r--r--xmss_hash_address.h40
-rw-r--r--xmss_wots.c192
-rw-r--r--xmss_wots.h64
268 files changed, 15283 insertions, 8478 deletions
diff --git a/.depend b/.depend
new file mode 100644
index 000000000..0893a87ab
--- /dev/null
+++ b/.depend
@@ -0,0 +1,182 @@
1# DO NOT DELETE
2
3addrmatch.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h match.h log.h
4atomicio.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h atomicio.h
5audit-bsm.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
6audit-linux.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
7audit.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
8auth-bsdauth.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
9auth-krb5.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h ssh.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h log.h misc.h servconf.h uidswap.h key.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h
10auth-options.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h ssherr.h log.h misc.h sshkey.h match.h ssh2.h auth-options.h
11auth-pam.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
12auth-passwd.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h log.h misc.h servconf.h key.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-options.h
13auth-rhosts.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h uidswap.h pathnames.h log.h misc.h key.h sshkey.h servconf.h canohost.h hostfile.h auth.h auth-pam.h audit.h loginrec.h
14auth-shadow.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
15auth-sia.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
16auth-skey.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
17auth.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h match.h groupaccess.h log.h misc.h servconf.h key.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-options.h canohost.h uidswap.h packet.h openbsd-compat/sys-queue.h
18auth.o: dispatch.h opacket.h authfile.h monitor_wrap.h ssherr.h compat.h channels.h
19auth2-chall.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h ssh2.h key.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h log.h misc.h servconf.h
20auth2-gss.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
21auth2-hostbased.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h log.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h canohost.h
22auth2-hostbased.o: monitor_wrap.h pathnames.h ssherr.h match.h
23auth2-kbdint.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h key.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h log.h misc.h servconf.h
24auth2-none.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h atomicio.h xmalloc.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h log.h misc.h servconf.h compat.h ssh2.h ssherr.h
25auth2-none.o: monitor_wrap.h
26auth2-passwd.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h ssherr.h log.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h monitor_wrap.h misc.h servconf.h
27auth2-pubkey.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h ssh.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h log.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h pathnames.h uidswap.h
28auth2-pubkey.o: auth-options.h canohost.h monitor_wrap.h authfile.h match.h ssherr.h channels.h session.h
29auth2.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h atomicio.h xmalloc.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h log.h misc.h servconf.h compat.h key.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h pathnames.h
30auth2.o: monitor_wrap.h ssherr.h
31authfd.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h ssh.h sshkey.h authfd.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h compat.h log.h atomicio.h misc.h ssherr.h
32authfile.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h ssh.h log.h authfile.h misc.h atomicio.h sshkey.h ssherr.h krl.h
33bitmap.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h bitmap.h
34bufaux.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h log.h ssherr.h
35bufbn.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
36bufec.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h log.h ssherr.h
37buffer.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h log.h ssherr.h
38canohost.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h log.h canohost.h misc.h
39chacha.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h chacha.h
40channels.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h ssherr.h packet.h dispatch.h opacket.h log.h misc.h channels.h compat.h canohost.h key.h sshkey.h authfd.h pathnames.h
41cipher-aes.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h openbsd-compat/openssl-compat.h
42cipher-aesctr.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h cipher-aesctr.h rijndael.h
43cipher-chachapoly.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h log.h ssherr.h cipher-chachapoly.h chacha.h poly1305.h
44cipher-ctr.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
45cipher.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h misc.h ssherr.h digest.h openbsd-compat/openssl-compat.h
46cleanup.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h log.h
47clientloop.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h packet.h dispatch.h opacket.h compat.h channels.h key.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h
48clientloop.o: kex.h mac.h myproposal.h log.h misc.h readconf.h clientloop.h sshconnect.h authfd.h atomicio.h sshpty.h match.h msg.h ssherr.h hostfile.h
49compat.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h compat.h log.h match.h kex.h mac.h key.h sshkey.h
50crc32.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h crc32.h
51dh.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
52digest-libc.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h ssherr.h digest.h
53digest-openssl.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
54dispatch.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h ssh2.h log.h dispatch.h packet.h openbsd-compat/sys-queue.h opacket.h compat.h ssherr.h
55dns.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h sshkey.h ssherr.h dns.h log.h digest.h
56ed25519.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h crypto_api.h ge25519.h fe25519.h sc25519.h
57entropy.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
58fatal.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h log.h
59fe25519.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h fe25519.h crypto_api.h
60ge25519.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h fe25519.h crypto_api.h sc25519.h ge25519.h ge25519_base.data
61groupaccess.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h groupaccess.h match.h log.h
62gss-genr.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
63gss-serv-krb5.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
64gss-serv.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
65hash.o: crypto_api.h 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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h digest.h log.h ssherr.h
66hmac.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h digest.h hmac.h
67hostfile.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h match.h sshkey.h hostfile.h log.h misc.h ssherr.h digest.h hmac.h
68kex.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h key.h log.h match.h misc.h
69kex.o: monitor.h ssherr.h digest.h
70kexc25519.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h ssh2.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h key.h log.h digest.h ssherr.h
71kexc25519c.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h key.h log.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h ssh2.h digest.h ssherr.h
72kexc25519s.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h digest.h kex.h mac.h key.h log.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h ssh2.h ssherr.h
73kexdh.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
74kexdhc.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
75kexdhs.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
76kexecdh.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
77kexecdhc.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
78kexecdhs.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
79kexgex.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
80kexgexc.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
81kexgexs.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
82key.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h key.h sshkey.h compat.h ssherr.h log.h authfile.h
83krl.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h ssherr.h sshkey.h authfile.h misc.h log.h digest.h bitmap.h krl.h
84log.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h log.h
85loginrec.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h key.h sshkey.h hostfile.h ssh.h loginrec.h log.h atomicio.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h canohost.h auth.h auth-pam.h audit.h
86logintest.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h loginrec.h
87mac.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h digest.h hmac.h umac.h mac.h misc.h ssherr.h openbsd-compat/openssl-compat.h
88match.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h match.h misc.h
89md5crypt.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
90misc.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h misc.h log.h ssh.h ssherr.h uidswap.h
91moduli.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
92monitor.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h atomicio.h xmalloc.h ssh.h key.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h cipher.h cipher-chachapoly.h chacha.h poly1305.h
93monitor.o: cipher-aesctr.h rijndael.h kex.h mac.h dh.h packet.h dispatch.h opacket.h auth-options.h sshpty.h channels.h session.h sshlogin.h canohost.h log.h misc.h servconf.h monitor.h monitor_wrap.h monitor_fdpass.h compat.h ssh2.h authfd.h match.h ssherr.h
94monitor_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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h log.h monitor_fdpass.h
95monitor_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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h ssh.h key.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h hostfile.h auth.h auth-pam.h audit.h
96monitor_wrap.o: loginrec.h auth-options.h packet.h dispatch.h opacket.h log.h monitor.h monitor_wrap.h atomicio.h monitor_fdpass.h misc.h channels.h session.h servconf.h ssherr.h
97msg.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h ssherr.h log.h atomicio.h msg.h misc.h
98mux.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h log.h ssh.h ssh2.h pathnames.h misc.h match.h channels.h msg.h packet.h dispatch.h opacket.h monitor_fdpass.h sshpty.h key.h sshkey.h readconf.h clientloop.h
99mux.o: ssherr.h
100nchan.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h ssh2.h ssherr.h packet.h dispatch.h opacket.h channels.h compat.h log.h
101opacket.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h ssherr.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h log.h
102packet.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h key.h sshkey.h xmalloc.h crc32.h compat.h ssh2.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h digest.h log.h canohost.h misc.h
103packet.o: channels.h ssh.h packet.h dispatch.h opacket.h ssherr.h
104platform-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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
105platform-pledge.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
106platform-tracing.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h log.h
107platform.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h log.h misc.h servconf.h key.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h
108poly1305.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h poly1305.h
109progressmeter.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h progressmeter.h atomicio.h misc.h
110readconf.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h openbsd-compat/glob.h xmalloc.h ssh.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h pathnames.h log.h sshkey.h misc.h readconf.h match.h kex.h mac.h key.h
111readconf.o: uidswap.h myproposal.h digest.h
112readpass.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h misc.h pathnames.h log.h ssh.h uidswap.h
113rijndael.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h rijndael.h
114sandbox-capsicum.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
115sandbox-darwin.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
116sandbox-null.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
117sandbox-pledge.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
118sandbox-rlimit.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
119sandbox-seccomp-filter.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
120sandbox-solaris.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
121sandbox-systrace.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
122sc25519.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h sc25519.h crypto_api.h
123scp.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h ssh.h atomicio.h pathnames.h log.h misc.h progressmeter.h utf8.h
124servconf.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h ssh.h log.h misc.h servconf.h compat.h pathnames.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h key.h sshkey.h kex.h mac.h
125servconf.o: match.h channels.h groupaccess.h canohost.h packet.h dispatch.h opacket.h hostfile.h auth.h auth-pam.h audit.h loginrec.h myproposal.h digest.h
126serverloop.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h packet.h dispatch.h opacket.h log.h misc.h servconf.h canohost.h sshpty.h channels.h compat.h ssh2.h key.h sshkey.h cipher.h cipher-chachapoly.h chacha.h
127serverloop.o: poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h hostfile.h auth.h auth-pam.h audit.h loginrec.h session.h auth-options.h serverloop.h ssherr.h
128session.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshpty.h packet.h dispatch.h opacket.h match.h uidswap.h compat.h channels.h key.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h
129session.o: cipher-aesctr.h rijndael.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-options.h authfd.h pathnames.h log.h misc.h servconf.h sshlogin.h serverloop.h canohost.h session.h kex.h mac.h monitor_wrap.h sftp.h atomicio.h
130sftp-client.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h ssherr.h log.h atomicio.h progressmeter.h misc.h utf8.h sftp.h sftp-common.h sftp-client.h openbsd-compat/glob.h
131sftp-common.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h ssherr.h log.h misc.h sftp.h sftp-common.h
132sftp-glob.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h sftp.h sftp-common.h sftp-client.h openbsd-compat/glob.h
133sftp-server-main.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h log.h sftp.h misc.h xmalloc.h
134sftp-server.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h ssherr.h log.h misc.h match.h uidswap.h sftp.h sftp-common.h
135sftp.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h log.h pathnames.h misc.h utf8.h sftp.h ssherr.h sftp-common.h sftp-client.h openbsd-compat/glob.h
136ssh-add.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h openbsd-compat/openssl-compat.h xmalloc.h ssh.h log.h sshkey.h authfd.h authfile.h pathnames.h misc.h ssherr.h digest.h
137ssh-agent.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h ssh.h sshkey.h authfd.h compat.h log.h misc.h digest.h ssherr.h match.h
138ssh-dss.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
139ssh-ecdsa.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
140ssh-ed25519.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h crypto_api.h log.h sshkey.h ssherr.h ssh.h
141ssh-keygen.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h sshkey.h authfile.h uuencode.h pathnames.h log.h misc.h match.h hostfile.h dns.h ssh.h ssh2.h ssherr.h ssh-pkcs11.h atomicio.h krl.h digest.h utf8.h authfd.h
142ssh-keyscan.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h ssh.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h key.h compat.h myproposal.h packet.h dispatch.h
143ssh-keyscan.o: opacket.h log.h atomicio.h misc.h hostfile.h ssherr.h ssh_api.h ssh2.h dns.h
144ssh-keysign.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h log.h sshkey.h ssh.h ssh2.h misc.h authfile.h msg.h canohost.h pathnames.h readconf.h uidswap.h ssherr.h
145ssh-pkcs11-client.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
146ssh-pkcs11-helper.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h log.h misc.h sshkey.h authfd.h ssh-pkcs11.h ssherr.h
147ssh-pkcs11.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
148ssh-rsa.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
149ssh-xmss.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
150ssh.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h openbsd-compat/openssl-compat.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h canohost.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h digest.h packet.h
151ssh.o: dispatch.h opacket.h channels.h key.h sshkey.h authfd.h authfile.h pathnames.h clientloop.h log.h misc.h readconf.h sshconnect.h kex.h mac.h sshpty.h match.h msg.h uidswap.h version.h ssherr.h myproposal.h utf8.h
152ssh_api.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h ssh_api.h openbsd-compat/sys-queue.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h key.h ssh.h ssh2.h packet.h dispatch.h opacket.h compat.h
153ssh_api.o: log.h authfile.h misc.h version.h myproposal.h ssherr.h
154sshbuf-getput-basic.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h ssherr.h
155sshbuf-getput-crypto.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h ssherr.h
156sshbuf-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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h ssherr.h
157sshbuf.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h ssherr.h misc.h
158sshconnect.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h key.h sshkey.h hostfile.h ssh.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h uidswap.h compat.h sshconnect.h log.h misc.h readconf.h atomicio.h dns.h monitor_fdpass.h
159sshconnect.o: ssh2.h version.h authfile.h ssherr.h authfd.h
160sshconnect2.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h packet.h dispatch.h opacket.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h key.h sshkey.h kex.h mac.h
161sshconnect2.o: myproposal.h sshconnect.h authfile.h dh.h authfd.h log.h misc.h readconf.h match.h canohost.h msg.h pathnames.h uidswap.h hostfile.h ssherr.h utf8.h
162sshd.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshpty.h packet.h dispatch.h opacket.h log.h misc.h match.h servconf.h uidswap.h compat.h cipher.h cipher-chachapoly.h
163sshd.o: chacha.h poly1305.h cipher-aesctr.h rijndael.h digest.h key.h sshkey.h kex.h mac.h myproposal.h authfile.h pathnames.h atomicio.h canohost.h hostfile.h auth.h auth-pam.h audit.h loginrec.h authfd.h msg.h channels.h session.h monitor.h monitor_wrap.h ssh-sandbox.h auth-options.h version.h ssherr.h
164ssherr.o: ssherr.h
165sshkey-xmss.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
166sshkey.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h crypto_api.h ssh2.h ssherr.h misc.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h digest.h sshkey.h sshkey-xmss.h match.h xmss_fast.h
167sshlogin.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h loginrec.h log.h misc.h servconf.h
168sshpty.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h sshpty.h log.h misc.h
169sshtty.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h sshpty.h
170ttymodes.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h log.h compat.h ttymodes.h
171uidswap.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h log.h uidswap.h xmalloc.h
172umac.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h umac.h misc.h rijndael.h
173umac128.o: umac.c 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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h umac.h misc.h rijndael.h
174utf8.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h utf8.h
175uuencode.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h uuencode.h
176verify.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h crypto_api.h
177xmalloc.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h xmalloc.h log.h
178xmss_commons.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
179xmss_fast.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
180xmss_hash.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
181xmss_hash_address.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
182xmss_wots.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/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.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 buffer.h sshbuf.h
diff --git a/.skipped-commit-ids b/.skipped-commit-ids
index 7c03c9db8..b51baf90d 100644
--- a/.skipped-commit-ids
+++ b/.skipped-commit-ids
@@ -1,3 +1,10 @@
15317f294d63a876bfc861e19773b1575f96f027d remove libssh from makefiles
2a337e886a49f96701ccbc4832bed086a68abfa85 Makefile changes
3f2c9feb26963615c4fece921906cf72e248b61ee more Makefile
4fa728823ba21c4b45212750e1d3a4b2086fd1a62 more Makefile refactoring
5
6Old upstream tree:
7
1321065a95a7ccebdd5fd08482a1e19afbf524e35 Update DH groups 8321065a95a7ccebdd5fd08482a1e19afbf524e35 Update DH groups
2d4f699a421504df35254cf1c6f1a7c304fb907ca Remove 1k bit groups 9d4f699a421504df35254cf1c6f1a7c304fb907ca Remove 1k bit groups
3aafe246655b53b52bc32c8a24002bc262f4230f7 Remove intermediate moduli 10aafe246655b53b52bc32c8a24002bc262f4230f7 Remove intermediate moduli
diff --git a/ChangeLog b/ChangeLog
index e008ec9f3..bb729917c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,2689 @@
1commit a0349a1cc4a18967ad1dbff5389bcdf9da098814
2Author: Damien Miller <djm@mindrot.org>
3Date: Mon Apr 2 15:38:28 2018 +1000
4
5 update versions in .spec files
6
7commit 816ad38f79792f5617e3913be306ddb27e91091c
8Author: Damien Miller <djm@mindrot.org>
9Date: Mon Apr 2 15:38:20 2018 +1000
10
11 update version number
12
13commit 2c71ca1dd1efe458cb7dee3f8a1a566f913182c2
14Author: Darren Tucker <dtucker@dtucker.net>
15Date: Fri Mar 30 18:23:07 2018 +1100
16
17 Disable native strndup and strnlen on AIX.
18
19 On at least some revisions of AIX, strndup returns unterminated strings
20 under some conditions, apparently because strnlen returns incorrect
21 values in those cases. Disable both on AIX and use the replacements
22 from openbsd-compat. Fixes problem with ECDSA keys there, ok djm.
23
24commit 6b5a17bc14e896e3904dc58d889b58934cfacd24
25Author: Darren Tucker <dtucker@dtucker.net>
26Date: Mon Mar 26 13:12:44 2018 +1100
27
28 Include ssh_api.h for struct ssh.
29
30 struct ssh is needed by implementations of sys_auth_passwd() that were
31 converted in commit bba02a50. Needed to fix build on AIX, I assume for
32 the other platforms too (although it should be harmless if not needed).
33
34commit bc3f80e4d191b8e48650045dfa8a682cd3aabd4d
35Author: Darren Tucker <dtucker@dtucker.net>
36Date: Mon Mar 26 12:58:09 2018 +1100
37
38 Remove UNICOS code missed during removal.
39
40 Fixes compile error on AIX.
41
42commit 9d57762c24882e2f000a21a0ffc8c5908a1fa738
43Author: markus@openbsd.org <markus@openbsd.org>
44Date: Sat Mar 24 19:29:03 2018 +0000
45
46 upstream: openssh-7.7
47
48 OpenBSD-Commit-ID: 274e614352460b9802c905f38fb5ea7ed5db3d41
49
50commit 4b7d8acdbbceef247dc035e611e577174ed8a87e
51Author: Damien Miller <djm@mindrot.org>
52Date: Mon Mar 26 09:37:02 2018 +1100
53
54 Remove authinfo.sh test dependency on printenv
55
56 Some platforms lack printenv in the default $PATH.
57 Reported by Tom G. Christensen
58
59commit 4afeaf3dcb7dc70efd98fcfcb0ed28a6b40b820e
60Author: Tim Rice <tim@multitalents.net>
61Date: Sun Mar 25 10:00:21 2018 -0700
62
63 Use libiaf on all sysv5 systems
64
65commit bba02a5094b3db228ceac41cb4bfca165d0735f3
66Author: Tim Rice <tim@multitalents.net>
67Date: Sun Mar 25 09:17:33 2018 -0700
68
69 modified: auth-sia.c
70 modified: openbsd-compat/port-aix.c
71 modified: openbsd-compat/port-uw.c
72
73 propogate changes to auth-passwd.c in commit
74 7c856857607112a3dfe6414696bf4c7ab7fb0cb3 to other providers
75 of sys_auth_passwd()
76
77commit d7a7a39168bdfe273587bf85d779d60569100a3f
78Author: markus@openbsd.org <markus@openbsd.org>
79Date: Sat Mar 24 19:29:03 2018 +0000
80
81 upstream: openssh-7.7
82
83 OpenBSD-Commit-ID: 274e614352460b9802c905f38fb5ea7ed5db3d41
84
85commit 9efcaaac314c611c6c0326e8bac5b486c424bbd2
86Author: markus@openbsd.org <markus@openbsd.org>
87Date: Sat Mar 24 19:28:43 2018 +0000
88
89 upstream: fix bogus warning when signing cert keys using agent;
90
91 from djm; ok deraadt dtucker
92
93 OpenBSD-Commit-ID: 12e50836ba2040042383a8b71e12d7ea06e9633d
94
95commit 393436024d2e4b4c7a01f9cfa5854e7437896d11
96Author: Darren Tucker <dtucker@dtucker.net>
97Date: Sun Mar 25 09:40:46 2018 +1100
98
99 Replace /dev/stdin with "-".
100
101 For some reason sftp -b doesn't work with /dev/stdin on Cygwin, as noted
102 and suggested by vinschen at redhat.com.
103
104commit b5974de1a1d419e316ffb6524b1b277dda2f3b49
105Author: Darren Tucker <dtucker@dtucker.net>
106Date: Fri Mar 23 13:21:14 2018 +1100
107
108 Provide $OBJ to paths in PuTTY interop tests.
109
110commit dc31e79454e9b9140b33ad380565fdb59b9c4f33
111Author: dtucker@openbsd.org <dtucker@openbsd.org>
112Date: Fri Mar 16 09:06:31 2018 +0000
113
114 upstream: Tell puttygen to use /dev/urandom instead of /dev/random. On
115
116 OpenBSD they are both non-blocking, but on many other -portable platforms it
117 blocks, stalling tests.
118
119 OpenBSD-Regress-ID: 397d0d4c719c353f24d79f5b14775e0cfdf0e1cc
120
121commit cb1f94431ef319cd48618b8b771b58739a8210cf
122Author: markus@openbsd.org <markus@openbsd.org>
123Date: Thu Mar 22 07:06:11 2018 +0000
124
125 upstream: ssh/xmss: fix build; ok djm@
126
127 OpenBSD-Commit-ID: c9374ca41d4497f1c673ab681cc33f6e7c5dd186
128
129commit 27979da9e4074322611355598f69175b9ff10d39
130Author: markus@openbsd.org <markus@openbsd.org>
131Date: Thu Mar 22 07:05:48 2018 +0000
132
133 upstream: ssh/xmss: fix deserialize for certs; ok djm@
134
135 OpenBSD-Commit-ID: f44c41636c16ec83502039828beaf521c057dddc
136
137commit c6cb2565c9285eb54fa9dfbb3890f5464aff410f
138Author: Darren Tucker <dtucker@dtucker.net>
139Date: Thu Mar 22 17:00:28 2018 +1100
140
141 Save $? before case statement.
142
143 In some shells (FreeBSD 9, ash) the case statement resets $?, so save
144 for later testing.
145
146commit 4c4e7f783b43b264c247233acb887ee10ed4ce4d
147Author: djm@openbsd.org <djm@openbsd.org>
148Date: Wed Mar 14 05:35:40 2018 +0000
149
150 upstream: rename recently-added "valid-before" key restriction to
151
152 "expiry-time" as the former is confusing wrt similar terminology in X.509;
153 pointed out by jsing@
154
155 OpenBSD-Regress-ID: ac8b41dbfd90cffd525d58350c327195b0937793
156
157commit 500396b204c58e78ad9d081516a365a9f28dc3fd
158Author: djm@openbsd.org <djm@openbsd.org>
159Date: Mon Mar 12 00:56:03 2018 +0000
160
161 upstream: check valid-before option in authorized_keys
162
163 OpenBSD-Regress-ID: 7e1e4a84f7f099a290e5a4cbf4196f90ff2d7e11
164
165commit a76b5d26c2a51d7dd7a5164e683ab3f4419be215
166Author: djm@openbsd.org <djm@openbsd.org>
167Date: Mon Mar 12 00:54:04 2018 +0000
168
169 upstream: explicitly specify RSA/SHA-2 keytype here too
170
171 OpenBSD-Regress-ID: 74d7b24e8c72c27af6b481198344eb077e993a62
172
173commit 3a43297ce29d37c64e37c7e21282cb219e28d3d1
174Author: djm@openbsd.org <djm@openbsd.org>
175Date: Mon Mar 12 00:52:57 2018 +0000
176
177 upstream: exlicitly include RSA/SHA-2 keytypes in
178
179 PubkeyAcceptedKeyTypes here
180
181 OpenBSD-Regress-ID: 954d19e0032a74e31697fb1dc7e7d3d1b2d65fe9
182
183commit 037fdc1dc2d68e1d43f9c9e2586c02cabc8f7cc8
184Author: jmc@openbsd.org <jmc@openbsd.org>
185Date: Wed Mar 14 06:56:20 2018 +0000
186
187 upstream: sort expiry-time;
188
189 OpenBSD-Commit-ID: 8c7d82ee1e63e26ceb2b3d3a16514019f984f6bf
190
191commit abc0fa38c9bc136871f28e452c3465c3051fc785
192Author: djm@openbsd.org <djm@openbsd.org>
193Date: Wed Mar 14 05:35:40 2018 +0000
194
195 upstream: rename recently-added "valid-before" key restriction to
196
197 "expiry-time" as the former is confusing wrt similar terminology in X.509;
198 pointed out by jsing@
199
200 OpenBSD-Commit-ID: 376939466a1f562f3950a22314bc6505733aaae6
201
202commit bf0fbf2b11a44f06a64b620af7d01ff171c28e13
203Author: djm@openbsd.org <djm@openbsd.org>
204Date: Mon Mar 12 00:52:01 2018 +0000
205
206 upstream: add valid-before="[time]" authorized_keys option. A
207
208 simple way of giving a key an expiry date. ok markus@
209
210 OpenBSD-Commit-ID: 1793b4dd5184fa87f42ed33c7b0f4f02bc877947
211
212commit fbd733ab7adc907118a6cf56c08ed90c7000043f
213Author: Darren Tucker <dtucker@dtucker.net>
214Date: Mon Mar 12 19:17:26 2018 +1100
215
216 Add AC_LANG_PROGRAM to AC_COMPILE_IFELSE.
217
218 The recently added MIPS ABI tests need AC_LANG_PROGRAM to prevent
219 warnings from autoconf. Pointed out by klausz at haus-gisela.de.
220
221commit c7c458e8261b04d161763cd333d74e7a5842e917
222Author: djm@openbsd.org <djm@openbsd.org>
223Date: Wed Mar 7 23:53:08 2018 +0000
224
225 upstream: revert recent strdelim() change, it causes problems with
226
227 some configs.
228
229 revision 1.124
230 date: 2018/03/02 03:02:11; author: djm; state: Exp; lines: +19 -8; commitid: nNRsCijZiGG6SUTT;
231 Allow escaped quotes \" and \' in ssh_config and sshd_config quotes
232 option strings. bz#1596 ok markus@
233
234 OpenBSD-Commit-ID: 59c40b1b81206d713c06b49d8477402c86babda5
235
236commit 0bcd871ccdf3baf2b642509ba4773d5be067cfa2
237Author: jmc@openbsd.org <jmc@openbsd.org>
238Date: Mon Mar 5 07:03:18 2018 +0000
239
240 upstream: move the input format details to -f; remove the output
241
242 format details and point to sshd(8), where it is documented;
243
244 ok dtucker
245
246 OpenBSD-Commit-ID: 95f17e47dae02a6ac7329708c8c893d4cad0004a
247
248commit 45011511a09e03493568506ce32f4891a174a3bd
249Author: Vicente Olivert Riera <Vincent.Riera@imgtec.com>
250Date: Tue Jun 20 16:42:28 2017 +0100
251
252 configure.ac: properly set seccomp_audit_arch for MIPS64
253
254 Currently seccomp_audit_arch is set to AUDIT_ARCH_MIPS64 or
255 AUDIT_ARCH_MIPSEL64 (depending on the endinness) when openssh is built
256 for MIPS64. However, that's only valid for n64 ABI. The right macros for
257 n32 ABI defined in seccomp.h are AUDIT_ARCH_MIPS64N32 and
258 AUDIT_ARCH_MIPSEL64N32, for big and little endian respectively.
259
260 Because of that an sshd built for MIPS64 n32 rejects connection attempts
261 and the output of strace reveals that the problem is related to seccomp
262 audit:
263
264 [pid 194] prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, {len=57,
265 filter=0x555d5da0}) = 0
266 [pid 194] write(7, "\0\0\0]\0\0\0\5\0\0\0Ulist_hostkey_types: "..., 97) = ?
267 [pid 193] <... poll resumed> ) = 2 ([{fd=5, revents=POLLIN|POLLHUP},
268 {fd=6, revents=POLLHUP}])
269 [pid 194] +++ killed by SIGSYS +++
270
271 This patch fixes that problem by setting the right value to
272 seccomp_audit_arch taking into account the MIPS64 ABI.
273
274 Signed-off-by: Vicente Olivert Riera <Vincent.Riera@imgtec.com>
275
276commit 580086704c31de91dc7ba040a28e416bf1fefbca
277Author: Vicente Olivert Riera <Vincent.Riera@imgtec.com>
278Date: Tue Jun 20 16:42:11 2017 +0100
279
280 configure.ac: detect MIPS ABI
281
282 Signed-off-by: Vicente Olivert Riera <Vincent.Riera@imgtec.com>
283
284commit cd4e937aa701f70366cd5b5969af525dff6fdf15
285Author: Alan Yee <alyee@ucsd.edu>
286Date: Wed Mar 7 15:12:14 2018 -0800
287
288 Use https URLs for links that support it.
289
290commit c0a0c3fc4a76b682db22146b28ddc46566db1ce9
291Author: Darren Tucker <dtucker@dtucker.net>
292Date: Mon Mar 5 20:03:07 2018 +1100
293
294 Disable UTMPX on SunOS4.
295
296commit 58fd4c5c0140f6636227ca7acbb149ab0c2509b9
297Author: Darren Tucker <dtucker@dtucker.net>
298Date: Mon Mar 5 19:28:08 2018 +1100
299
300 Check for and work around buggy fflush(NULL).
301
302 Some really old platforms (eg SunOS4) segfault on fflush(NULL) so check
303 for and work around. With klausz at haus-gisela.de.
304
305commit 71e48bc7945f867029e50e06c665c66aed6d3c64
306Author: Darren Tucker <dtucker@dtucker.net>
307Date: Mon Mar 5 10:22:32 2018 +1100
308
309 Remove extra XMSS #endif
310
311 Extra #endif breaks compile with -DWITH_XMSS. Pointed out by Jack
312 Schmidt via github.
313
314commit 055e09e2212ff52067786bf6d794ca9512ff7f0c
315Author: dtucker@openbsd.org <dtucker@openbsd.org>
316Date: Sat Mar 3 06:37:53 2018 +0000
317
318 upstream: Update RSA minimum modulus size to 1024. sshkey.h rev 1.18
319
320 bumped the minimum from 768 to 1024, update man page accordingly.
321
322 OpenBSD-Commit-ID: 27563ab4e866cd2aac40a5247876f6787c08a338
323
324commit 7e4fadd3248d6bb7d39d6688c76a613d35d2efc1
325Author: djm@openbsd.org <djm@openbsd.org>
326Date: Sun Mar 4 01:46:48 2018 +0000
327
328 upstream: for the pty control tests, just check that the PTY path
329
330 points to something in /dev (rather than checking the device node itself);
331 makes life easier for portable, where systems with dynamic ptys can delete
332 nodes before we get around to testing their existence.
333
334 OpenBSD-Regress-ID: b1e455b821e62572bccd98102f8dd9d09bb94994
335
336commit 13ef4cf53f24753fe920832b990b25c9c9cd0530
337Author: Darren Tucker <dtucker@dtucker.net>
338Date: Sat Mar 3 16:21:20 2018 +1100
339
340 Update PAM password change to new opts API.
341
342commit 33561e68e0b27366cb769295a077aabc6a49d2a1
343Author: Darren Tucker <dtucker@dtucker.net>
344Date: Sat Mar 3 14:56:09 2018 +1100
345
346 Add strndup for platforms that need it.
347
348 Some platforms don't have strndup, which includes Solaris 10, NetBSD 3
349 and FreeBSD 6.
350
351commit e8a17feba95eef424303fb94441008f6c5347aaf
352Author: Darren Tucker <dtucker@dtucker.net>
353Date: Sat Mar 3 14:49:07 2018 +1100
354
355 Flatten and alphabetize object file lists.
356
357 This will make maintenance and changes easier. "no objection" tim@
358
359commit de1920d743d295f50e6905e5957c4172c038e8eb
360Author: djm@openbsd.org <djm@openbsd.org>
361Date: Sat Mar 3 03:16:17 2018 +0000
362
363 upstream: unit tests for new authorized_keys options API
364
365 OpenBSD-Regress-ID: 820f9ec9c6301f6ca330ad4052d85f0e67d0bdc1
366
367commit dc3e92df17556dc5b0ab19cee8dcb2a6ba348717
368Author: djm@openbsd.org <djm@openbsd.org>
369Date: Fri Mar 2 02:53:27 2018 +0000
370
371 upstream: fix testing of pty option, include positive test and
372
373 testing of restrict keyword
374
375 OpenBSD-Regress-ID: 4268f27c2706a0a95e725d9518c5bcbec9814c6d
376
377commit 3d1edd1ebbc0aabea8bbe61903060f37137f7c61
378Author: djm@openbsd.org <djm@openbsd.org>
379Date: Fri Mar 2 02:51:55 2018 +0000
380
381 upstream: better testing for port-forwarding and restrict flags in
382
383 authorized_keys
384
385 OpenBSD-Regress-ID: ee771df8955f2735df54746872c6228aff381daa
386
387commit 7c856857607112a3dfe6414696bf4c7ab7fb0cb3
388Author: djm@openbsd.org <djm@openbsd.org>
389Date: Sat Mar 3 03:15:51 2018 +0000
390
391 upstream: switch over to the new authorized_keys options API and
392
393 remove the legacy one.
394
395 Includes a fairly big refactor of auth2-pubkey.c to retain less state
396 between key file lines.
397
398 feedback and ok markus@
399
400 OpenBSD-Commit-ID: dece6cae0f47751b9892080eb13d6625599573df
401
402commit 90c4bec8b5f9ec4c003ae4abdf13fc7766f00c8b
403Author: djm@openbsd.org <djm@openbsd.org>
404Date: Sat Mar 3 03:06:02 2018 +0000
405
406 upstream: Introduce a new API for handling authorized_keys options.
407
408 This API parses options to a dedicated structure rather than the old API's
409 approach of setting global state. It also includes support for merging
410 options, e.g. from authorized_keys, authorized_principals and/or
411 certificates.
412
413 feedback and ok markus@
414
415 OpenBSD-Commit-ID: 98badda102cd575210d7802943e93a34232c80a2
416
417commit 26074380767e639ef89321610e146ae11016b385
418Author: djm@openbsd.org <djm@openbsd.org>
419Date: Sat Mar 3 03:01:50 2018 +0000
420
421 upstream: warn when the agent returns a signature type that was
422
423 different to what was requested. This might happen when an old/non-OpenSSH
424 agent is asked to make a rsa-sha2-256/512 signature but only supports
425 ssh-rsa. bz#2799 feedback and ok markus@
426
427 OpenBSD-Commit-ID: 760c0f9438c5c58abc16b5f98008ff2d95cb13ce
428
429commit f493d2b0b66fb003ed29f31dd66ff1aeb64be1fc
430Author: jmc@openbsd.org <jmc@openbsd.org>
431Date: Fri Mar 2 21:40:15 2018 +0000
432
433 upstream: apply a lick of paint; tweaks/ok dtucker
434
435 OpenBSD-Commit-ID: 518a6736338045e0037f503c21027d958d05e703
436
437commit 713d9cb510e0e7759398716cbe6dcf43e574be71
438Author: djm@openbsd.org <djm@openbsd.org>
439Date: Fri Mar 2 03:02:11 2018 +0000
440
441 upstream: Allow escaped quotes \" and \' in ssh_config and
442
443 sshd_config quotes option strings. bz#1596 ok markus@
444
445 OpenBSD-Commit-ID: dd3a29fc2dc905e8780198e5a6a30b096de1a1cb
446
447commit 94b4e2d29afaaaef89a95289b16c18bf5627f7cd
448Author: djm@openbsd.org <djm@openbsd.org>
449Date: Fri Mar 2 02:08:03 2018 +0000
450
451 upstream: refactor sshkey_read() to make it a little more, err,
452
453 readable. ok markus
454
455 OpenBSD-Commit-ID: 2e9247b5762fdac3b6335dc606d3822121714c28
456
457commit 5886b92968b360623491699247caddfb77a74d80
458Author: markus@openbsd.org <markus@openbsd.org>
459Date: Thu Mar 1 20:32:16 2018 +0000
460
461 upstream: missing #ifdef for _PATH_HOST_XMSS_KEY_FILE; report by
462
463 jmc@
464
465 OpenBSD-Commit-ID: 9039cb69a3f9886bfef096891a9e7fcbd620280b
466
467commit 3b36bed3d26f17f6a2b7e036e01777770fe1bcd4
468Author: dtucker@openbsd.org <dtucker@openbsd.org>
469Date: Mon Feb 26 12:14:53 2018 +0000
470
471 upstream: Remove unneeded (local) include. ok markus@
472
473 OpenBSD-Commit-ID: 132812dd2296b1caa8cb07d2408afc28e4e60f93
474
475commit 27b9f3950e0289e225b57b7b880a8f1859dcd70b
476Author: dtucker@openbsd.org <dtucker@openbsd.org>
477Date: Mon Feb 26 03:56:44 2018 +0000
478
479 upstream: Add $OpenBSD$ markers to xmss files to help keep synced
480
481 with portable. ok djm@.
482
483 OpenBSD-Commit-ID: 5233a27aafd1dfadad4b957225f95ae51eb365c1
484
485commit afd830847a82ebbd5aeab05bad6d2c8ce74df1cd
486Author: dtucker@openbsd.org <dtucker@openbsd.org>
487Date: Mon Feb 26 03:03:05 2018 +0000
488
489 upstream: Add newline at end of file to prevent compiler warnings.
490
491 OpenBSD-Commit-ID: 52f247d4eafe840c7c14c8befa71a760a8eeb063
492
493commit 941e0d3e9bb8d5e4eb70cc694441445faf037c84
494Author: Darren Tucker <dtucker@dtucker.net>
495Date: Wed Feb 28 19:59:35 2018 +1100
496
497 Add WITH_XMSS, move to prevent conflicts.
498
499 Add #ifdef WITH_XMSS to ssh-xmss.c, move it in the other files to after
500 includes.h so it's less likely to conflict and will pick up WITH_XMSS if
501 added to config.h.
502
503commit a10d8552d0d2438da4ed539275abcbf557d1e7a8
504Author: Darren Tucker <dtucker@dtucker.net>
505Date: Tue Feb 27 14:45:17 2018 +1100
506
507 Conditionally compile XMSS code.
508
509 The XMSS code is currently experimental and, unlike the rest of OpenSSH
510 cannot currently be compiled with a c89 compiler.
511
512commit 146c3bd28c8dbee9c4b06465d9c9facab96b1e9b
513Author: Darren Tucker <dtucker@dtucker.net>
514Date: Mon Feb 26 12:51:29 2018 +1100
515
516 Check dlopen has RTLD_NOW before enabling pkcs11.
517
518commit 1323f120d06a26074c4d154fcbe7f49bcad3d741
519Author: Darren Tucker <dtucker@dtucker.net>
520Date: Tue Feb 27 08:41:25 2018 +1100
521
522 Check for attributes on prototype args.
523
524 Some compilers (gcc 2.9.53, 3.0 and probably others, see gcc bug #3481)
525 do not accept __attribute__ on function pointer prototype args. Check for
526 this and hide them if they're not accepted.
527
528commit f0b245b0439e600fab782d19e97980e9f2c2533c
529Author: Darren Tucker <dtucker@dtucker.net>
530Date: Mon Feb 26 11:43:48 2018 +1100
531
532 Check if HAVE_DECL_BZERO correctly.
533
534commit c7ef4a399155e1621a532cc5e08e6fa773658dd4
535Author: Darren Tucker <dtucker@dtucker.net>
536Date: Mon Feb 26 17:42:56 2018 +1100
537
538 Wrap <stdint.h> in #ifdef HAVE_STDINT_H.
539
540commit ac53ce46cf8165cbda7f57ee045f9f32e1e92b31
541Author: Darren Tucker <dtucker@dtucker.net>
542Date: Mon Feb 26 16:24:23 2018 +1100
543
544 Replace $(CURDIR) with $(PWD).
545
546 The former doesn't work on Solaris or BSDs.
547
548commit 534b2680a15d14e7e60274d5b29b812d44cc5a44
549Author: Darren Tucker <dtucker@dtucker.net>
550Date: Mon Feb 26 14:51:59 2018 +1100
551
552 Comment out hexdump().
553
554 Nothing currently uses them but they cause conflicts on at least
555 FreeBSD, possibly others. ok djm@
556
557commit 5aea4aa522f61bb2f34c3055a7de203909dfae77
558Author: Darren Tucker <dtucker@dtucker.net>
559Date: Mon Feb 26 14:39:14 2018 +1100
560
561 typo: missing ;
562
563commit cd3ab57f9b388f8b1abf601dc4d78ff82d83b75e
564Author: Darren Tucker <dtucker@dtucker.net>
565Date: Mon Feb 26 14:37:06 2018 +1100
566
567 Hook up flock() compat code.
568
569 Also a couple of minor changes: fail if we can't lock instead of
570 silently succeeding, and apply a couple of minor style fixes.
571
572commit b087998d1ba90dd1ddb6bfdb17873dc3e7392798
573Author: Darren Tucker <dtucker@dtucker.net>
574Date: Mon Feb 26 14:27:02 2018 +1100
575
576 Import flock() compat from NetBSD.
577
578 From NetBSD's src/trunk/tools/compat/flock.c, no OpenSSH changes yet.
579
580commit 89212533dde6798324e835b1499084658df4579e
581Author: Darren Tucker <dtucker@dtucker.net>
582Date: Mon Feb 26 12:32:14 2018 +1100
583
584 Fix breakage when REGRESSTMP not set.
585
586 BUILDDIR is not set where used for REGRESSTMP, use make's CURDIR
587 instead. Pointed out by djm@.
588
589commit f885474137df4b89498c0b8834c2ac72c47aa4bd
590Author: Damien Miller <djm@mindrot.org>
591Date: Mon Feb 26 12:18:14 2018 +1100
592
593 XMSS-related files get includes.h
594
595commit 612faa34c72e421cdc9e63f624526bae62d557cc
596Author: Damien Miller <djm@mindrot.org>
597Date: Mon Feb 26 12:17:55 2018 +1100
598
599 object files end with .o - not .c
600
601commit bda709b8e13d3eef19e69c2d1684139e3af728f5
602Author: Damien Miller <djm@mindrot.org>
603Date: Mon Feb 26 12:17:22 2018 +1100
604
605 avoid inclusion of deprecated selinux/flask.h
606
607 Use string_to_security_class() instead.
608
609commit 2e396439365c4ca352cac222717d09b14f8a0dfd
610Author: Damien Miller <djm@mindrot.org>
611Date: Mon Feb 26 11:48:27 2018 +1100
612
613 updatedepend
614
615commit 1b11ea7c58cd5c59838b5fa574cd456d6047b2d4
616Author: markus@openbsd.org <markus@openbsd.org>
617Date: Fri Feb 23 15:58:37 2018 +0000
618
619 upstream: Add experimental support for PQC XMSS keys (Extended
620
621 Hash-Based Signatures) The code is not compiled in by default (see WITH_XMSS
622 in Makefile.inc) Joint work with stefan-lukas_gazdag at genua.eu See
623 https://tools.ietf.org/html/draft-irtf-cfrg-xmss-hash-based-signatures-12 ok
624 djm@
625
626 OpenBSD-Commit-ID: ef3eccb96762a5d6f135d7daeef608df7776a7ac
627
628commit 7d330a1ac02076de98cfc8fda05353d57b603755
629Author: jmc@openbsd.org <jmc@openbsd.org>
630Date: Fri Feb 23 07:38:09 2018 +0000
631
632 upstream: some cleanup for BindInterface and ssh-keyscan;
633
634 OpenBSD-Commit-ID: 1a719ebeae22a166adf05bea5009add7075acc8c
635
636commit c7b5a47e3b9db9a0f0198f9c90c705f6307afc2b
637Author: Darren Tucker <dtucker@dtucker.net>
638Date: Sun Feb 25 23:55:41 2018 +1100
639
640 Invert sense of getpgrp test.
641
642 AC_FUNC_GETPGRP tests if getpgrp(0) works, which it does if it's not
643 declared. Instead, test if the zero-arg version we want to use works.
644
645commit b39593a6de5290650a01adf8699c6460570403c2
646Author: Darren Tucker <dtucker@dtucker.net>
647Date: Sun Feb 25 13:25:15 2018 +1100
648
649 Add no-op getsid implmentation.
650
651commit 11057564eb6ab8fd987de50c3d7f394c6f6632b7
652Author: Darren Tucker <dtucker@dtucker.net>
653Date: Sun Feb 25 11:22:57 2018 +1100
654
655 bsd-statvfs: include sys/vfs.h, check for f_flags.
656
657commit e9dede06e5bc582a4aeb5b1cd5a7a640d7de3609
658Author: Darren Tucker <dtucker@dtucker.net>
659Date: Sun Feb 25 10:20:31 2018 +1100
660
661 Handle calloc(0,x) where different from malloc.
662
663 Configure assumes that if malloc(0) returns null then calloc(0,n)
664 also does. On some old platforms (SunOS4) malloc behaves as expected
665 (as determined by AC_FUNC_MALLOC) but calloc doesn't. Test for this
666 at configure time and activate the replacement function if found, plus
667 handle this case in rpl_calloc.
668
669commit 2eb4041493fd2635ffdc64a852d02b38c4955e0b
670Author: Darren Tucker <dtucker@dtucker.net>
671Date: Sat Feb 24 21:06:48 2018 +1100
672
673 Add prototype for readv if needed.
674
675commit 6c8c9a615b6d31db8a87bc25033f053d5b0a831e
676Author: Darren Tucker <dtucker@dtucker.net>
677Date: Sat Feb 24 20:46:37 2018 +1100
678
679 Check for raise and supply if needed.
680
681commit a9004425a032d7a7141a5437cfabfd02431e2a74
682Author: Darren Tucker <dtucker@dtucker.net>
683Date: Sat Feb 24 20:25:22 2018 +1100
684
685 Check for bzero and supply if needed.
686
687 Since explicit_bzero uses it via an indirect it needs to be a function
688 not just a macro.
689
690commit 1a348359e4d2876203b5255941bae348557f4f54
691Author: djm@openbsd.org <djm@openbsd.org>
692Date: Fri Feb 23 05:14:05 2018 +0000
693
694 upstream: Add ssh-keyscan -D option to make it print its results in
695
696 SSHFP format bz#2821, ok dtucker@
697
698 OpenBSD-Commit-ID: 831446b582e0f298ca15c9d99c415c899e392221
699
700commit 3e19fb976a47b44b3d7c4f8355269f7f2c5dd82c
701Author: dtucker@openbsd.org <dtucker@openbsd.org>
702Date: Fri Feb 23 04:18:46 2018 +0000
703
704 upstream: Add missing braces.
705
706 Caught by the tinderbox's -Werror=misleading-indentation, ok djm@
707
708 OpenBSD-Commit-ID: d44656af594c3b2366eb87d6abcef83e1c88a6ca
709
710commit b59162da99399d89bd57f71c170c0003c55b1583
711Author: Darren Tucker <dtucker@dtucker.net>
712Date: Fri Feb 23 15:20:42 2018 +1100
713
714 Check for ifaddrs.h for BindInterface.
715
716 BindInterface required getifaddr and friends so disable if not available
717 (eg Solaris 10). We should be able to add support for some systems with
718 a bit more work but this gets the building again.
719
720commit a8dd6fe0aa10b6866830b4688a73ef966f0aed88
721Author: Damien Miller <djm@mindrot.org>
722Date: Fri Feb 23 14:19:11 2018 +1100
723
724 space before tab in previous
725
726commit b5e9263c7704247f9624c8f5c458e9181fcdbc09
727Author: dtucker@openbsd.org <dtucker@openbsd.org>
728Date: Fri Feb 9 03:40:22 2018 +0000
729
730 upstream: Replace fatal with exit in the case that we do not have
731
732 $SUDO set. Prevents test failures when neither sudo nor doas are configured.
733
734 OpenBSD-Regress-ID: 6a0464decc4f8ac7d6eded556a032b0fc521bc7b
735
736commit 3e9d3192ad43758ef761c5b0aa3ac5ccf8121ef2
737Author: Darren Tucker <dtucker@dtucker.net>
738Date: Fri Feb 23 14:10:53 2018 +1100
739
740 Use portable syntax for REGRESSTMP.
741
742commit 73282b61187883a2b2bb48e087fdda1d751d6059
743Author: djm@openbsd.org <djm@openbsd.org>
744Date: Fri Feb 23 03:03:00 2018 +0000
745
746 upstream: unbreak interop test after SSHv1 purge; patch from Colin
747
748 Watson via bz#2823
749
750 OpenBSD-Regress-ID: 807d30a597756ed6612bdf46dfebca74f49cb31a
751
752commit f8985dde5f46aedade0373365cbf86ed3f1aead2
753Author: dtucker@openbsd.org <dtucker@openbsd.org>
754Date: Fri Feb 9 03:42:57 2018 +0000
755
756 upstream: Skip sftp-chroot test when SUDO not set instead of
757
758 fatal().
759
760 OpenBSD-Regress-ID: cd4b5f1109b0dc09af4e5ea7d4968c43fbcbde88
761
762commit df88551c02d4e3445c44ff67ba8757cff718609a
763Author: dtucker@openbsd.org <dtucker@openbsd.org>
764Date: Fri Feb 9 03:40:22 2018 +0000
765
766 upstream: Replace fatal with exit in the case that we do not have
767
768 $SUDO set. Prevents test failures when neither sudo nor doas are configured.
769
770 OpenBSD-Regress-ID: 6a0464decc4f8ac7d6eded556a032b0fc521bc7b
771
772commit 3b252c20b19f093e87363de197f1100b79705dd3
773Author: djm@openbsd.org <djm@openbsd.org>
774Date: Thu Feb 8 08:46:20 2018 +0000
775
776 upstream: some helpers to check verbose/quiet mode
777
778 OpenBSD-Regress-ID: e736aac39e563f5360a0935080a71d5fdcb976de
779
780commit ac2e3026bbee1367e4cda34765d1106099be3287
781Author: djm@openbsd.org <djm@openbsd.org>
782Date: Fri Feb 23 02:34:33 2018 +0000
783
784 upstream: Add BindInterface ssh_config directive and -B
785
786 command-line argument to ssh(1) that directs it to bind its outgoing
787 connection to the address of the specified network interface.
788
789 BindInterface prefers to use addresses that aren't loopback or link-
790 local, but will fall back to those if no other addresses of the
791 required family are available on that interface.
792
793 Based on patch by Mike Manning in bz#2820, ok dtucker@
794
795 OpenBSD-Commit-ID: c5064d285c2851f773dd736a2c342aa384fbf713
796
797commit fcdb9d777839a3fa034b3bc3067ba8c1f6886679
798Author: djm@openbsd.org <djm@openbsd.org>
799Date: Mon Feb 19 00:55:02 2018 +0000
800
801 upstream: emphasise that the hostkey rotation may send key types
802
803 that the client may not support, and that the client should simply disregard
804 such keys (this is what ssh does already).
805
806 OpenBSD-Commit-ID: 65f8ffbc32ac8d12be8f913d7c0ea55bef8622bf
807
808commit ce066f688dc166506c082dac41ca686066e3de5f
809Author: Darren Tucker <dtucker@dtucker.net>
810Date: Thu Feb 22 20:45:09 2018 +1100
811
812 Add headers for sys/audit.h.
813
814 On some older platforms (at least sunos4, probably others) sys/audit.h
815 requires some other headers. Patch from klausz at haus-gisela.de.
816
817commit 3fd2d2291a695c96a54269deae079bacce6e3fb9
818Author: Darren Tucker <dtucker@dtucker.net>
819Date: Mon Feb 19 18:37:40 2018 +1100
820
821 Add REGRESSTMP make var override.
822
823 Defaults to original location ($srcdir/regress) but allows overriding
824 if desired, eg a directory in /tmp.
825
826commit f8338428588f3ecb5243c86336eccaa28809f97e
827Author: Darren Tucker <dtucker@dtucker.net>
828Date: Sun Feb 18 15:53:15 2018 +1100
829
830 Remove now-unused check for getrusage.
831
832 getrusage was used in ssh-rand-helper but that's now long gone.
833 Patch from klauszh at haus-gisela.de.
834
835commit 8570177195f6a4b3173c0a25484a83641ee3faa6
836Author: dtucker@openbsd.org <dtucker@openbsd.org>
837Date: Fri Feb 16 04:43:11 2018 +0000
838
839 upstream: Don't send IUTF8 to servers that don't like them.
840
841 Some SSH servers eg "ConfD" drop the connection if the client sends the
842 new IUTF8 (RFC8160) terminal mode even if it's not set. Add a bug bit
843 for such servers and avoid sending IUTF8 to them. ok djm@
844
845 OpenBSD-Commit-ID: 26425855402d870c3c0a90491e72e2a8a342ceda
846
847commit f6dc2ba3c9d12be53057b9371f5109ec553a399f
848Author: Darren Tucker <dtucker@dtucker.net>
849Date: Fri Feb 16 17:32:28 2018 +1100
850
851 freezero should check for NULL.
852
853commit 680321f3eb46773883111e234b3c262142ff7c5b
854Author: djm@openbsd.org <djm@openbsd.org>
855Date: Fri Feb 16 02:40:45 2018 +0000
856
857 upstream: Mention recent DH KEX methods:
858
859 diffie-hellman-group14-sha256
860 diffie-hellman-group16-sha512
861 diffie-hellman-group18-sha512
862
863 From Jakub Jelen via bz#2826
864
865 OpenBSD-Commit-ID: 51bf769f06e55447f4bfa7306949e62d2401907a
866
867commit 88c50a5ae20902715f0fca306bb9c38514f71679
868Author: djm@openbsd.org <djm@openbsd.org>
869Date: Fri Feb 16 02:32:40 2018 +0000
870
871 upstream: stop loading DSA keys by default, remove sshd_config
872
873 stanza and manpage bits; from Colin Watson via bz#2662, ok dtucker@
874
875 OpenBSD-Commit-ID: d33a849f481684ff655c140f5eb1b4acda8c5c09
876
877commit d2b3db2860c962927def39a52f67f1c23f7b201a
878Author: jsing@openbsd.org <jsing@openbsd.org>
879Date: Wed Feb 14 16:27:24 2018 +0000
880
881 upstream: Ensure that D mod (P-1) and D mod (Q-1) are calculated in
882
883 constant time.
884
885 This avoids a potential side channel timing leak.
886
887 ok djm@ markus@
888
889 OpenBSD-Commit-ID: 71ff3c16be03290e63d8edab8fac053d8a82968c
890
891commit 4270efad7048535b4f250f493d70f9acfb201593
892Author: jsing@openbsd.org <jsing@openbsd.org>
893Date: Wed Feb 14 16:03:32 2018 +0000
894
895 upstream: Some obvious freezero() conversions.
896
897 This also zeros an ed25519_pk when it was not being zeroed previously.
898
899 ok djm@ dtucker@
900
901 OpenBSD-Commit-ID: 5c196a3c85c23ac0bd9b11bcadaedd90b7a2ce82
902
903commit affa6ba67ffccc30b85d6e98f36eb5afd9386882
904Author: Darren Tucker <dtucker@dtucker.net>
905Date: Thu Feb 15 22:32:04 2018 +1100
906
907 Remove execute bit from modpipe.c.
908
909commit 9879dca438526ae6dfd656fecb26b0558c29c731
910Author: Darren Tucker <dtucker@dtucker.net>
911Date: Thu Feb 15 22:26:16 2018 +1100
912
913 Update prngd link to point to sourceforge.
914
915commit b6973fa5152b1a0bafd2417b7c3ad96f6e87d014
916Author: Darren Tucker <dtucker@dtucker.net>
917Date: Thu Feb 15 22:22:38 2018 +1100
918
919 Remove references to UNICOS.
920
921commit f1ca487940449f0b64f38f1da575078257609966
922Author: Darren Tucker <dtucker@dtucker.net>
923Date: Thu Feb 15 22:18:37 2018 +1100
924
925 Remove extra newline.
926
927commit 6d4e980f3cf27f409489cf89cd46c21501b13731
928Author: Darren Tucker <dtucker@dtucker.net>
929Date: Thu Feb 15 22:16:54 2018 +1100
930
931 OpenSSH's builtin entropy gathering is long gone.
932
933commit 389125b25d1a1d7f22e907463b7e8eca74af79ea
934Author: Darren Tucker <dtucker@dtucker.net>
935Date: Thu Feb 15 21:43:01 2018 +1100
936
937 Replace remaining mysignal() with signal().
938
939 These seem to have been missed during the replacement of mysignal
940 with #define signal in commit 5ade9ab. Both include the requisite
941 headers to pick up the #define.
942
943commit 265d88d4e61e352de6791733c8b29fa3d7d0c26d
944Author: Darren Tucker <dtucker@dtucker.net>
945Date: Thu Feb 15 20:06:19 2018 +1100
946
947 Remove remaining now-obsolete cvs $Ids.
948
949commit 015749e9b1d2f6e14733466d19ba72f014d0845c
950Author: Darren Tucker <dtucker@dtucker.net>
951Date: Thu Feb 15 17:01:54 2018 +1100
952
953 Regenerate dependencies after UNICOS removal.
954
955commit ddc0f3814881ea279a6b6d4d98e03afc60ae1ed7
956Author: Darren Tucker <dtucker@dtucker.net>
957Date: Tue Feb 13 09:10:46 2018 +1100
958
959 Remove UNICOS support.
960
961 The code required to support it is quite invasive to the mainline
962 code that is synced with upstream and is an ongoing maintenance burden.
963 Both the hardware and software are literal museum pieces these days and
964 we could not find anyone still running OpenSSH on one.
965
966commit 174bed686968494723e6db881208cc4dac0d020f
967Author: Darren Tucker <dtucker@dtucker.net>
968Date: Tue Feb 13 18:12:47 2018 +1100
969
970 Retpoline linker flag only needed for linking.
971
972commit 075e258c2cc41e1d7f3ea2d292c5342091728d40
973Author: Darren Tucker <dtucker@dtucker.net>
974Date: Tue Feb 13 17:36:43 2018 +1100
975
976 Default PidFile is sshd.pid not ssh.pid.
977
978commit 49f3c0ec47730ea264e2bd1e6ece11167d6384df
979Author: Darren Tucker <dtucker@dtucker.net>
980Date: Tue Feb 13 16:27:09 2018 +1100
981
982 Remove assigned-to-but-never-used variable.
983
984 'p' was removed in previous change but I neglected to remove the
985 otherwise-unused assignment to it.
986
987commit b8bbff3b3fc823bf80c5ab226c94f13cb887d5b1
988Author: djm@openbsd.org <djm@openbsd.org>
989Date: Tue Feb 13 03:36:56 2018 +0000
990
991 upstream: remove space before tab
992
993 OpenBSD-Commit-ID: 674edd214d0a7332dd4623c9cf8117301b012890
994
995commit 05046d907c211cb9b4cd21b8eff9e7a46cd6c5ab
996Author: dtucker@openbsd.org <dtucker@openbsd.org>
997Date: Sun Feb 11 21:16:56 2018 +0000
998
999 upstream Don't reset signal handlers inside handlers.
1000
1001 The signal handlers from the original ssh1 code on which OpenSSH
1002 is based assume unreliable signals and reinstall their handlers.
1003 Since OpenBSD (and pretty much every current system) has reliable
1004 signals this is not needed. In the unlikely even that -portable
1005 is still being used on such systems we will deal with it in the
1006 compat layer. ok deraadt@
1007
1008 OpenBSD-Commit-ID: f53a1015cb6908431b92116130d285d71589612c
1009
1010commit 3c51143c639ac686687c7acf9b373b8c08195ffb
1011Author: Darren Tucker <dtucker@dtucker.net>
1012Date: Tue Feb 13 09:07:29 2018 +1100
1013
1014 Whitespace sync with upstream.
1015
1016commit 19edfd4af746bedf0df17f01953ba8c6d3186eb7
1017Author: Darren Tucker <dtucker@dtucker.net>
1018Date: Tue Feb 13 08:25:46 2018 +1100
1019
1020 Whitespace sync with upstream.
1021
1022commit fbfa6f980d7460b3e12b0ce88ed3b6018edf4711
1023Author: Darren Tucker <dtucker@dtucker.net>
1024Date: Sun Feb 11 21:25:11 2018 +1300
1025
1026 Move signal compat code into bsd-signal.{c,h}
1027
1028commit 24d2a33bd3bf5170700bfdd8675498aa09a79eab
1029Author: Darren Tucker <dtucker@dtucker.net>
1030Date: Sun Feb 11 21:20:39 2018 +1300
1031
1032 Include headers for linux/if.h.
1033
1034 Prevents configure-time "present but cannot be compiled" warning.
1035
1036commit bc02181c24fc551aab85eb2cff0f90380928ef43
1037Author: Darren Tucker <dtucker@dtucker.net>
1038Date: Sun Feb 11 19:45:47 2018 +1300
1039
1040 Fix test for -z,retpolineplt linker flag.
1041
1042commit 3377df00ea3fece5293db85fe63baef33bf5152e
1043Author: Darren Tucker <dtucker@dtucker.net>
1044Date: Sun Feb 11 09:32:37 2018 +1100
1045
1046 Add checks for Spectre v2 mitigation (retpoline)
1047
1048 This adds checks for gcc and clang flags for mitigations for Spectre
1049 variant 2, ie "retpoline". It'll automatically enabled if the compiler
1050 supports it as part of toolchain hardening flag. ok djm@
1051
1052commit d9e5cf078ea5380da6df767bb1773802ec557ef0
1053Author: djm@openbsd.org <djm@openbsd.org>
1054Date: Sat Feb 10 09:25:34 2018 +0000
1055
1056 upstream commit
1057
1058 constify some private key-related functions; based on
1059 https://github.com/openssh/openssh-portable/pull/56 by Vincent Brillault
1060
1061 OpenBSD-Commit-ID: dcb94a41834a15f4d00275cb5051616fdc4c988c
1062
1063commit a7c38215d564bf98e8e9eb40c1079e3adf686f15
1064Author: djm@openbsd.org <djm@openbsd.org>
1065Date: Sat Feb 10 09:03:54 2018 +0000
1066
1067 upstream commit
1068
1069 Mention ServerAliveTimeout in context of TCPKeepAlives;
1070 prompted by Christoph Anton Mitterer via github
1071
1072 OpenBSD-Commit-ID: f0cf1b5bd3f1fbf41d71c88d75d93afc1c880ca2
1073
1074commit 62562ceae61e4f7cf896566592bb840216e71061
1075Author: djm@openbsd.org <djm@openbsd.org>
1076Date: Sat Feb 10 06:54:38 2018 +0000
1077
1078 upstream commit
1079
1080 clarify IgnoreUserKnownHosts; based on github PR from
1081 Christoph Anton Mitterer.
1082
1083 OpenBSD-Commit-ID: 4fff2c17620c342fb2f1f9c2d2e679aab3e589c3
1084
1085commit 4f011daa4cada6450fa810f7563b8968639bb562
1086Author: djm@openbsd.org <djm@openbsd.org>
1087Date: Sat Feb 10 06:40:28 2018 +0000
1088
1089 upstream commit
1090
1091 Shorter, more accurate explanation of
1092 NoHostAuthenticationForLocalhost without the confusing example. Prompted by
1093 Christoph Anton Mitterer via github and bz#2293.
1094
1095 OpenBSD-Commit-ID: 19dc96bea25b80d78d416b581fb8506f1e7b76df
1096
1097commit 77e05394af21d3f5faa0c09ed3855e4505a5cf9f
1098Author: djm@openbsd.org <djm@openbsd.org>
1099Date: Sat Feb 10 06:15:12 2018 +0000
1100
1101 upstream commit
1102
1103 Disable RemoteCommand and RequestTTY in the ssh session
1104 started by scp. sftp is already doing this. From Camden Narzt via github; ok
1105 dtucker
1106
1107 OpenBSD-Commit-ID: 59e2611141c0b2ee579c6866e8eb9d7d8217bc6b
1108
1109commit ca613249a00b64b2eea9f52d3834b55c28cf2862
1110Author: djm@openbsd.org <djm@openbsd.org>
1111Date: Sat Feb 10 05:48:46 2018 +0000
1112
1113 upstream commit
1114
1115 Refuse to create a certificate with an unusable number of
1116 principals; Prompted by gdestuynder via github
1117
1118 OpenBSD-Commit-ID: 8cfae2451e8f07810e3e2546dfdcce66984cbd29
1119
1120commit b56ac069d46b6f800de34e1e935f98d050731d14
1121Author: djm@openbsd.org <djm@openbsd.org>
1122Date: Sat Feb 10 05:43:26 2018 +0000
1123
1124 upstream commit
1125
1126 fatal if we're unable to write all the public key; previously
1127 we would silently ignore errors writing the comment and terminating newline.
1128 Prompted by github PR from WillerZ; ok dtucker
1129
1130 OpenBSD-Commit-ID: 18fbfcfd4e8c6adbc84820039b64d70906e49831
1131
1132commit cdb10bd431f9f6833475c27e9a82ebb36fdb12db
1133Author: Darren Tucker <dtucker@dtucker.net>
1134Date: Sat Feb 10 11:18:38 2018 +1100
1135
1136 Add changelog entry for binary strip change.
1137
1138commit fbddd91897cfaf456bfc2081f39fb4a2208a0ebf
1139Author: Darren Tucker <dtucker@dtucker.net>
1140Date: Sat Feb 10 11:14:54 2018 +1100
1141
1142 Remove unused variables.
1143
1144commit 937d96587df99c16c611d828cded292fa474a32b
1145Author: Darren Tucker <dtucker@dtucker.net>
1146Date: Sat Feb 10 11:12:45 2018 +1100
1147
1148 Don't strip binaries so debuginfo gets built.
1149
1150 Tell install not to strip binaries during package creation so that the
1151 debuginfo package can be built.
1152
1153commit eb0865f330f59c889ec92696b97bd397090e720c
1154Author: Darren Tucker <dtucker@dtucker.net>
1155Date: Sat Feb 10 10:33:11 2018 +1100
1156
1157 Fix bogus dates in changelog.
1158
1159commit 7fbde1b34c1f6c9ca9e9d10805ba1e5e4538e165
1160Author: Darren Tucker <dtucker@dtucker.net>
1161Date: Sat Feb 10 10:25:15 2018 +1100
1162
1163 Remove SSH1 from description.
1164
1165commit 9c34a76f099c4e0634bf6ecc2f40ce93925402c4
1166Author: Darren Tucker <dtucker@dtucker.net>
1167Date: Sat Feb 10 10:19:16 2018 +1100
1168
1169 Add support for compat-openssl10 build dep.
1170
1171commit 04f4e8193cb5a5a751fcc356bd6656291fec539e
1172Author: Darren Tucker <dtucker@dtucker.net>
1173Date: Sat Feb 10 09:57:04 2018 +1100
1174
1175 Add leading zero so it'll work when rhel not set.
1176
1177 When rhel is not set it will error out with "bad if". Add leading zero
1178 as per https://fedoraproject.org/wiki/Packaging:DistTag so it'll work
1179 on non-RHEL.
1180
1181commit 12abd67a6af28476550807a443b38def2076bb92
1182Author: Darren Tucker <dtucker@dtucker.net>
1183Date: Sat Feb 10 09:56:34 2018 +1100
1184
1185 Update openssl-devel dependency.
1186
1187commit b33e7645f8813719d7f9173fef24463c8833ebb3
1188Author: nkadel <nkadel@gmail.com>
1189Date: Sun Nov 16 18:19:58 2014 -0500
1190
1191 Add mandir with-mandir' for RHEL 5 compatibility.
1192
1193 Activate '--mandir' and '--with-mandir' settings in setup for RHEL
1194 5 compatibility.
1195
1196commit 94f8bf360eb0162e39ddf39d69925c2e93511e40
1197Author: nkadel <nkadel@gmail.com>
1198Date: Sun Nov 16 18:18:51 2014 -0500
1199
1200 Discard 'K5DIR' reporting.
1201
1202 It does not work inside 'mock' build environment.
1203
1204commit bb7e54dbaf34b70b3e57acf7982f3a2136c94ee5
1205Author: nkadel <nkadel@gmail.com>
1206Date: Sun Nov 16 18:17:15 2014 -0500
1207
1208 Add 'dist' to 'rel' for OS specific RPM names.
1209
1210commit 87346f1f57f71150a9b8c7029d8c210e27027716
1211Author: nkadel <nkadel@gmail.com>
1212Date: Sun Nov 16 14:17:38 2014 -0500
1213
1214 Add openssh-devel >= 0.9.8f for redhat spec file.
1215
1216commit bec1478d710866d3c1b119343a35567a8fc71ec3
1217Author: nkadel <nkadel@gmail.com>
1218Date: Sun Nov 16 13:10:24 2014 -0500
1219
1220 Enhance BuildRequires for openssh-x11-askpass.
1221
1222commit 3104fcbdd3c70aefcb0cdc3ee24948907db8dc8f
1223Author: nkadel <nkadel@gmail.com>
1224Date: Sun Nov 16 13:04:14 2014 -0500
1225
1226 Always include x11-ssh-askpass SRPM.
1227
1228 Always include x11-ssh-askpass tarball in redhat SRPM, even if unused.
1229
1230commit c61d0d038d58eebc365f31830be6e04ce373ad1b
1231Author: Damien Miller <djm@mindrot.org>
1232Date: Sat Feb 10 09:43:12 2018 +1100
1233
1234 this is long unused; prompted by dtucker@
1235
1236commit 745771fb788e41bb7cdad34e5555bf82da3af7ed
1237Author: dtucker@openbsd.org <dtucker@openbsd.org>
1238Date: Fri Feb 9 02:37:36 2018 +0000
1239
1240 upstream commit
1241
1242 Remove unused sKerberosTgtPassing from enum. From
1243 calestyo via github pull req #11, ok djm@
1244
1245 OpenBSD-Commit-ID: 1008f8870865a7c4968b7aed402a0a9e3e5b9540
1246
1247commit 1f385f55332db830b0ae22a7663b98279ca2d657
1248Author: dtucker@openbsd.org <dtucker@openbsd.org>
1249Date: Thu Feb 8 04:12:32 2018 +0000
1250
1251 upstream commit
1252
1253 Rename struct umac_ctx to umac128_ctx too. In portable
1254 some linkers complain about two symbols with the same name having differing
1255 sizes. ok djm@
1256
1257 OpenBSD-Commit-ID: cbebf8bdd3310a9795b4939a1e112cfe24061ca3
1258
1259commit f1f047fb031c0081dbc8738f05bf5d4cc47acadf
1260Author: dtucker@openbsd.org <dtucker@openbsd.org>
1261Date: Wed Feb 7 22:52:45 2018 +0000
1262
1263 upstream commit
1264
1265 ssh_free checks for and handles NULL args, remove NULL
1266 checks from remaining callers. ok djm@
1267
1268 OpenBSD-Commit-ID: bb926825c53724c069df68a93a2597f9192f7e7b
1269
1270commit aee49b2a89b6b323c80dd3b431bd486e51f94c8c
1271Author: Darren Tucker <dtucker@dtucker.net>
1272Date: Thu Feb 8 12:36:22 2018 +1100
1273
1274 Set SO_REUSEADDR in regression test netcat.
1275
1276 Sometimes multiplex tests fail on Solaris with "netcat: local_listen:
1277 Address already in use" which is likely due to previous invocations
1278 leaving the port in TIME_WAIT. Set SO_REUSEADDR (in addition to
1279 SO_REUSEPORT which is alread set on platforms that support it). ok djm@
1280
1281commit 1749991c55bab716877b7c687cbfbf19189ac6f1
1282Author: jsing@openbsd.org <jsing@openbsd.org>
1283Date: Wed Feb 7 05:17:56 2018 +0000
1284
1285 upstream commit
1286
1287 Convert some explicit_bzero()/free() calls to freezero().
1288
1289 ok deraadt@ dtucker@
1290
1291 OpenBSD-Commit-ID: f566ab99149650ebe58b1d4b946ea726c3829609
1292
1293commit 94ec2b69d403f4318b7a0d9b17f8bc3efbf4d0d2
1294Author: jsing@openbsd.org <jsing@openbsd.org>
1295Date: Wed Feb 7 05:15:49 2018 +0000
1296
1297 upstream commit
1298
1299 Remove some #ifdef notyet code from OpenSSL 0.9.8 days.
1300
1301 These functions have never appeared in OpenSSL and are likely never to do
1302 so.
1303
1304 "kill it with fire" djm@
1305
1306 OpenBSD-Commit-ID: fee9560e283fd836efc2631ef381658cc673d23e
1307
1308commit 7cd31632e3a6607170ed0c9ed413a7ded5b9b377
1309Author: jsing@openbsd.org <jsing@openbsd.org>
1310Date: Wed Feb 7 02:06:50 2018 +0000
1311
1312 upstream commit
1313
1314 Remove all guards for calls to OpenSSL free functions -
1315 all of these functions handle NULL, from at least OpenSSL 1.0.1g onwards.
1316
1317 Prompted by dtucker@ asking about guards for RSA_free(), when looking at
1318 openssh-portable pr#84 on github.
1319
1320 ok deraadt@ dtucker@
1321
1322 OpenBSD-Commit-ID: 954f1c51b94297d0ae1f749271e184141e0cadae
1323
1324commit 3c000d57d46882eb736c6563edfc4995915c24a2
1325Author: Darren Tucker <dtucker@dtucker.net>
1326Date: Wed Feb 7 09:19:38 2018 +1100
1327
1328 Remove obsolete "Smartcard support" message
1329
1330 The configure checks that populated $SCARD_MSG were removed in commits
1331 7ea845e4 and d8f60022 when the smartcard support was replaced with
1332 PKCS#11.
1333
1334commit 3e615090de0ce36a833d811e01c28aec531247c4
1335Author: dtucker@openbsd.org <dtucker@openbsd.org>
1336Date: Tue Feb 6 06:01:54 2018 +0000
1337
1338 upstream commit
1339
1340 Replace "trojan horse" with the correct term (MITM).
1341 From maikel at predikkta.com via bz#2822, ok markus@
1342
1343 OpenBSD-Commit-ID: e86ac64c512057c89edfadb43302ac0aa81a6c53
1344
1345commit 3484380110d437c50e17f87d18544286328c75cb
1346Author: tb@openbsd.org <tb@openbsd.org>
1347Date: Mon Feb 5 05:37:46 2018 +0000
1348
1349 upstream commit
1350
1351 Add a couple of non-negativity checks to avoid close(-1).
1352
1353 ok djm
1354
1355 OpenBSD-Commit-ID: 4701ce0b37161c891c838d0931305f1d37a50880
1356
1357commit 5069320be93c8b2a6584b9f944c86f60c2b04e48
1358Author: tb@openbsd.org <tb@openbsd.org>
1359Date: Mon Feb 5 05:36:49 2018 +0000
1360
1361 upstream commit
1362
1363 The file descriptors for socket, stdin, stdout and stderr
1364 aren't necessarily distinct, so check if they are the same to avoid closing
1365 the same fd several times.
1366
1367 ok djm
1368
1369 OpenBSD-Commit-ID: 60d71fd22e9a32f5639d4ba6e25a2f417fc36ac1
1370
1371commit 2b428f90ea1b21d7a7c68ec1ee334253b3f9324d
1372Author: djm@openbsd.org <djm@openbsd.org>
1373Date: Mon Feb 5 04:02:53 2018 +0000
1374
1375 upstream commit
1376
1377 I accidentially a word
1378
1379 OpenBSD-Commit-ID: 4547ee713fa941da861e83ae7a3e6432f915e14a
1380
1381commit 130283d5c2545ff017c2162dc1258c5354e29399
1382Author: djm@openbsd.org <djm@openbsd.org>
1383Date: Thu Jan 25 03:34:43 2018 +0000
1384
1385 upstream commit
1386
1387 certificate options are case-sensitive; fix case on one
1388 that had it wrong.
1389
1390 move a badly-place sentence to a less bad place
1391
1392 OpenBSD-Commit-ID: 231e516bba860699a1eece6d48532d825f5f747b
1393
1394commit 89f09ee68730337015bf0c3f138504494a34e9a6
1395Author: Damien Miller <djm@mindrot.org>
1396Date: Wed Jan 24 12:20:44 2018 +1100
1397
1398 crypto_api.h needs includes.h
1399
1400commit c9c1bba06ad1c7cad8548549a68c071bd807af60
1401Author: stsp@openbsd.org <stsp@openbsd.org>
1402Date: Tue Jan 23 20:00:58 2018 +0000
1403
1404 upstream commit
1405
1406 Fix a logic bug in sshd_exchange_identification which
1407 prevented clients using major protocol version 2 from connecting to the
1408 server. ok millert@
1409
1410 OpenBSD-Commit-ID: 8668dec04586e27f1c0eb039ef1feb93d80a5ee9
1411
1412commit a60c5dcfa2538ffc94dc5b5adb3db5b6ed905bdb
1413Author: stsp@openbsd.org <stsp@openbsd.org>
1414Date: Tue Jan 23 18:33:49 2018 +0000
1415
1416 upstream commit
1417
1418 Add missing braces; fixes 'write: Socket is not
1419 connected' error in ssh. ok deraadt@
1420
1421 OpenBSD-Commit-ID: db73a3a9e147722d410866cac34d43ed52e1ad24
1422
1423commit 20d53ac283e1c60245ea464bdedd015ed9b38f4a
1424Author: Damien Miller <djm@mindrot.org>
1425Date: Tue Jan 23 16:49:43 2018 +1100
1426
1427 rebuild depends
1428
1429commit 552ea155be44f9c439c1f9f0c38f9e593428f838
1430Author: Damien Miller <djm@mindrot.org>
1431Date: Tue Jan 23 16:49:22 2018 +1100
1432
1433 one SSH_BUG_BANNER instance that got away
1434
1435commit 14b5c635d1190633b23ac3372379517fb645b0c2
1436Author: djm@openbsd.org <djm@openbsd.org>
1437Date: Tue Jan 23 05:27:21 2018 +0000
1438
1439 upstream commit
1440
1441 Drop compatibility hacks for some ancient SSH
1442 implementations, including ssh.com <=2.* and OpenSSH <= 3.*.
1443
1444 These versions were all released in or before 2001 and predate the
1445 final SSH RFCs. The hacks in question aren't necessary for RFC-
1446 compliant SSH implementations.
1447
1448 ok markus@
1449
1450 OpenBSD-Commit-ID: 4be81c67db57647f907f4e881fb9341448606138
1451
1452commit 7c77991f5de5d8475cbeb7cbb06d0c7d1611d7bb
1453Author: djm@openbsd.org <djm@openbsd.org>
1454Date: Tue Jan 23 05:17:04 2018 +0000
1455
1456 upstream commit
1457
1458 try harder to preserve errno during
1459 ssh_connect_direct() to make the final error message possibly accurate;
1460 bz#2814, ok dtucker@
1461
1462 OpenBSD-Commit-ID: 57de882cb47381c319b04499fef845dd0c2b46ca
1463
1464commit 9e9c4a7e57b96ab29fe6d7545ed09d2e5bddbdec
1465Author: djm@openbsd.org <djm@openbsd.org>
1466Date: Tue Jan 23 05:12:12 2018 +0000
1467
1468 upstream commit
1469
1470 unbreak support for clients that advertise a protocol
1471 version of "1.99" (indicating both v2 and v1 support). Busted by me during
1472 SSHv1 purge in r1.358; bz2810, ok dtucker
1473
1474 OpenBSD-Commit-ID: e8f9c2bee11afc16c872bb79d6abe9c555bd0e4b
1475
1476commit fc21ea97968264ad9bb86b13fedaaec8fd3bf97d
1477Author: djm@openbsd.org <djm@openbsd.org>
1478Date: Tue Jan 23 05:06:25 2018 +0000
1479
1480 upstream commit
1481
1482 don't attempt to force hostnames that are addresses to
1483 lowercase, but instead canonicalise them through getnameinfo/getaddrinfo to
1484 remove ambiguities (e.g. ::0001 => ::1) before they are matched against
1485 known_hosts; bz#2763, ok dtucker@
1486
1487 OpenBSD-Commit-ID: ba0863ff087e61e5c65efdbe53be3cb92c9aefa0
1488
1489commit d6364f6fb1a3d753d7ca9bf15b2adce961324513
1490Author: djm@openbsd.org <djm@openbsd.org>
1491Date: Tue Jan 23 05:01:15 2018 +0000
1492
1493 upstream commit
1494
1495 avoid modifying pw->pw_passwd; let endpwent() clean up
1496 for us, but keep a scrubbed copy; bz2777, ok dtucker@
1497
1498 OpenBSD-Commit-ID: 715afc0f59c6b82c4929a73279199ed241ce0752
1499
1500commit a69bbb07cd6fb4dfb9bdcacd370ab26d0a2b4215
1501Author: naddy@openbsd.org <naddy@openbsd.org>
1502Date: Sat Jan 13 00:24:09 2018 +0000
1503
1504 upstream commit
1505
1506 clarify authorship; prodded by and ok markus@
1507
1508 OpenBSD-Commit-ID: e1938eee58c89b064befdabe232835fa83bb378c
1509
1510commit 04214b30be3d3e73a01584db4e040d5ccbaaddd4
1511Author: markus@openbsd.org <markus@openbsd.org>
1512Date: Mon Jan 8 15:37:21 2018 +0000
1513
1514 upstream commit
1515
1516 group shared source files (e.g. SRCS_KEX) and allow
1517 compilation w/o OPENSSL ok djm@
1518
1519 OpenBSD-Commit-ID: fa728823ba21c4b45212750e1d3a4b2086fd1a62
1520
1521commit 25cf9105b849932fc3b141590c009e704f2eeba6
1522Author: markus@openbsd.org <markus@openbsd.org>
1523Date: Mon Jan 8 15:21:49 2018 +0000
1524
1525 upstream commit
1526
1527 move subprocess() so scp/sftp do not need uidswap.o; ok
1528 djm@
1529
1530 OpenBSD-Commit-ID: 6601b8360388542c2e5fef0f4085f8e54750bea8
1531
1532commit b0d34132b3ca26fe94013f01d7b92101e70b68bb
1533Author: markus@openbsd.org <markus@openbsd.org>
1534Date: Mon Jan 8 15:18:46 2018 +0000
1535
1536 upstream commit
1537
1538 switch ssh-pkcs11-helper to new API; ok djm@
1539
1540 OpenBSD-Commit-ID: e0c0ed2a568e25b1d2024f3e630f3fea837c2a42
1541
1542commit ec4a9831184c0c6ed5f7f0cfff01ede5455465a3
1543Author: markus@openbsd.org <markus@openbsd.org>
1544Date: Mon Jan 8 15:15:36 2018 +0000
1545
1546 upstream commit
1547
1548 split client/server kex; only ssh-keygen needs
1549 uuencode.o; only scp/sftp use progressmeter.o; ok djm@
1550
1551 OpenBSD-Commit-ID: f2c9feb26963615c4fece921906cf72e248b61ee
1552
1553commit ec77efeea06ac62ee1d76fe0b3225f3000775a9e
1554Author: markus@openbsd.org <markus@openbsd.org>
1555Date: Mon Jan 8 15:15:17 2018 +0000
1556
1557 upstream commit
1558
1559 only ssh-keygen needs uuencode.o; only scp/sftp use
1560 progressmeter.o
1561
1562 OpenBSD-Commit-ID: a337e886a49f96701ccbc4832bed086a68abfa85
1563
1564commit 25aae35d3d6ee86a8c4c0b1896acafc1eab30172
1565Author: markus@openbsd.org <markus@openbsd.org>
1566Date: Mon Jan 8 15:14:44 2018 +0000
1567
1568 upstream commit
1569
1570 uuencode.h is not used
1571
1572 OpenBSD-Commit-ID: 238eb4659f3c119904326b9e94a5e507a912796c
1573
1574commit 4f29309c4cb19bcb1774931db84cacc414f17d29
1575Author: Damien Miller <djm@mindrot.org>
1576Date: Wed Jan 3 19:50:43 2018 +1100
1577
1578 unbreak fuzz harness
1579
1580commit f6b50bf84dc0b61f22c887c00423e0ea7644e844
1581Author: djm@openbsd.org <djm@openbsd.org>
1582Date: Thu Dec 21 05:46:35 2017 +0000
1583
1584 upstream commit
1585
1586 another libssh casualty
1587
1588 OpenBSD-Regress-ID: 839b970560246de23e7c50215095fb527a5a83ec
1589
1590commit 5fb4fb5a0158318fb8ed7dbb32f3869bbf221f13
1591Author: djm@openbsd.org <djm@openbsd.org>
1592Date: Thu Dec 21 03:01:49 2017 +0000
1593
1594 upstream commit
1595
1596 missed one (unbreak after ssh/lib removal)
1597
1598 OpenBSD-Regress-ID: cfdd132143131769e2d2455e7892b5d55854c322
1599
1600commit e6c4134165d05447009437a96e7201276688807f
1601Author: djm@openbsd.org <djm@openbsd.org>
1602Date: Thu Dec 21 00:41:22 2017 +0000
1603
1604 upstream commit
1605
1606 unbreak unit tests after removal of src/usr.bin/ssh/lib
1607
1608 OpenBSD-Regress-ID: 3a79760494147b20761cbd2bd5c20e86c63dc8f9
1609
1610commit d45d69f2a937cea215c7f0424e5a4677b6d8c7fe
1611Author: djm@openbsd.org <djm@openbsd.org>
1612Date: Thu Dec 21 00:00:28 2017 +0000
1613
1614 upstream commit
1615
1616 revert stricter key type / signature type checking in
1617 userauth path; too much software generates inconsistent messages, so we need
1618 a better plan.
1619
1620 OpenBSD-Commit-ID: 4a44ddc991c803c4ecc8f1ad40e0ab4d22e1c519
1621
1622commit c5a6cbdb79752f7e761074abdb487953ea6db671
1623Author: djm@openbsd.org <djm@openbsd.org>
1624Date: Tue Dec 19 00:49:30 2017 +0000
1625
1626 upstream commit
1627
1628 explicitly test all key types and their certificate
1629 counterparts
1630
1631 refactor a little
1632
1633 OpenBSD-Regress-ID: e9ecd5580821b9ef8b7106919c6980d8e45ca8c4
1634
1635commit f689adb7a370b5572612d88be9837ca9aea75447
1636Author: dtucker@openbsd.org <dtucker@openbsd.org>
1637Date: Mon Dec 11 11:41:56 2017 +0000
1638
1639 upstream commit
1640
1641 use cmp in a loop instead of diff -N to compare
1642 directories. The former works on more platforms for Portable.
1643
1644 OpenBSD-Regress-ID: c3aa72807f9c488e8829a26ae50fe5bcc5b57099
1645
1646commit 748dd8e5de332b24c40f4b3bbedb902acb048c98
1647Author: Damien Miller <djm@mindrot.org>
1648Date: Tue Dec 19 16:17:59 2017 +1100
1649
1650 remove blocks.c from Makefile
1651
1652commit 278856320520e851063b06cef6ef1c60d4c5d652
1653Author: djm@openbsd.org <djm@openbsd.org>
1654Date: Tue Dec 19 00:24:34 2017 +0000
1655
1656 upstream commit
1657
1658 include signature type and CA key (if applicable) in some
1659 debug messages
1660
1661 OpenBSD-Commit-ID: b71615cc20e78cec7105bb6e940c03ce9ae414a5
1662
1663commit 7860731ef190b52119fa480f8064ab03c44a120a
1664Author: djm@openbsd.org <djm@openbsd.org>
1665Date: Mon Dec 18 23:16:23 2017 +0000
1666
1667 upstream commit
1668
1669 unbreak hostkey rotation; attempting to sign with a
1670 desired signature algorithm of kex->hostkey_alg is incorrect when the key
1671 type isn't capable of making those signatures. ok markus@
1672
1673 OpenBSD-Commit-ID: 35ae46864e1f5859831ec0d115ee5ea50953a906
1674
1675commit 966ef478339ad5e631fb684d2a8effe846ce3fd4
1676Author: djm@openbsd.org <djm@openbsd.org>
1677Date: Mon Dec 18 23:14:34 2017 +0000
1678
1679 upstream commit
1680
1681 log mismatched RSA signature types; ok markus@
1682
1683 OpenBSD-Commit-ID: 381bddfcc1e297a42292222f3bcb5ac2b7ea2418
1684
1685commit 349ecd4da3a985359694a74635748009be6baca6
1686Author: djm@openbsd.org <djm@openbsd.org>
1687Date: Mon Dec 18 23:13:42 2017 +0000
1688
1689 upstream commit
1690
1691 pass kex->hostkey_alg and kex->hostkey_nid from pre-auth
1692 to post-auth unpriviledged child processes; ok markus@
1693
1694 OpenBSD-Commit-ID: 4a35bc7af0a5f8a232d1361f79f4ebc376137302
1695
1696commit c9e37a8725c083441dd34a8a53768aa45c3c53fe
1697Author: millert@openbsd.org <millert@openbsd.org>
1698Date: Mon Dec 18 17:28:54 2017 +0000
1699
1700 upstream commit
1701
1702 Add helper function for uri handing in scp where a
1703 missing path simply means ".". Also fix exit code and add warnings when an
1704 invalid uri is encountered. OK otto@
1705
1706 OpenBSD-Commit-ID: 47dcf872380586dabf7fcc6e7baf5f8ad508ae1a
1707
1708commit 04c7e28f83062dc42f2380d1bb3a6bf0190852c0
1709Author: djm@openbsd.org <djm@openbsd.org>
1710Date: Mon Dec 18 02:25:15 2017 +0000
1711
1712 upstream commit
1713
1714 pass negotiated signing algorithm though to
1715 sshkey_verify() and check that the negotiated algorithm matches the type in
1716 the signature (only matters for RSA SHA1/SHA2 sigs). ok markus@
1717
1718 OpenBSD-Commit-ID: 735fb15bf4adc060d3bee9d047a4bcaaa81b1af9
1719
1720commit 931c78dfd7fe30669681a59e536bbe66535f3ee9
1721Author: djm@openbsd.org <djm@openbsd.org>
1722Date: Mon Dec 18 02:22:29 2017 +0000
1723
1724 upstream commit
1725
1726 sshkey_sigtype() function to return the type of a
1727 signature; ok markus@
1728
1729 OpenBSD-Commit-ID: d3772b065ad6eed97285589bfb544befed9032e8
1730
1731commit 4cdc5956f2fcc9e9078938db833142dc07d8f523
1732Author: naddy@openbsd.org <naddy@openbsd.org>
1733Date: Thu Dec 14 21:07:39 2017 +0000
1734
1735 upstream commit
1736
1737 Replace ED25519's private SHA-512 implementation with a
1738 call to the regular digest code. This speeds up compilation considerably. ok
1739 markus@
1740
1741 OpenBSD-Commit-ID: fcce8c3bcfe7389462a28228f63c823e80ade41c
1742
1743commit 012e5cb839faf76549e3b6101b192fe1a74d367e
1744Author: naddy@openbsd.org <naddy@openbsd.org>
1745Date: Tue Dec 12 15:06:12 2017 +0000
1746
1747 upstream commit
1748
1749 Create a persistent umac128.c source file: #define the
1750 output size and the name of the entry points for UMAC-128 before including
1751 umac.c. Idea from FreeBSD. ok dtucker@
1752
1753 OpenBSD-Commit-ID: 463cfacfa07cb8060a4d4961e63dca307bf3f4b1
1754
1755commit b35addfb4cd3b5cdb56a2a489d38e940ada926c7
1756Author: Darren Tucker <dtucker@zip.com.au>
1757Date: Mon Dec 11 16:23:28 2017 +1100
1758
1759 Update .depend with empty config.h
1760
1761commit 2d96f28246938e0ca474a939d8ac82ecd0de27e3
1762Author: Darren Tucker <dtucker@zip.com.au>
1763Date: Mon Dec 11 16:21:55 2017 +1100
1764
1765 Ensure config.h is always in dependencies.
1766
1767 Put an empty config.h into the dependency list to ensure that it's
1768 always listed and consistent.
1769
1770commit ac4987a55ee5d4dcc8e87f7ae7c1f87be7257d71
1771Author: deraadt@openbsd.org <deraadt@openbsd.org>
1772Date: Sun Dec 10 19:37:57 2017 +0000
1773
1774 upstream commit
1775
1776 ssh/lib hasn't worked towards our code-sharing goals for
1777 a quit while, perhaps it is too verbose? Change each */Makefile to
1778 specifying exactly what sources that program requires, compiling it seperate.
1779 Maybe we'll iterate by sorting those into seperatable chunks, splitting up
1780 files which contain common code + server/client specific code, or whatnot.
1781 But this isn't one step, or we'd have done it a long time ago.. ok dtucker
1782 markus djm
1783
1784 OpenBSD-Commit-ID: 5317f294d63a876bfc861e19773b1575f96f027d
1785
1786commit 48c23a39a8f1069a57264dd826f6c90aa12778d5
1787Author: dtucker@openbsd.org <dtucker@openbsd.org>
1788Date: Sun Dec 10 05:55:29 2017 +0000
1789
1790 upstream commit
1791
1792 Put remote client info back into the ClientAlive
1793 connection termination message. Based in part on diff from lars.nooden at
1794 gmail, ok djm
1795
1796 OpenBSD-Commit-ID: 80a0f619a29bbf2f32eb5297a69978a0e05d0ee0
1797
1798commit aabd75ec76575c1b17232e6526a644097cd798e5
1799Author: deraadt@openbsd.org <deraadt@openbsd.org>
1800Date: Fri Dec 8 03:45:52 2017 +0000
1801
1802 upstream commit
1803
1804 time_t printing needs %lld and (long long) casts ok djm
1805
1806 OpenBSD-Commit-ID: 4a93bc2b0d42a39b8f8de8bb74d07ad2e5e83ef7
1807
1808commit fd4eeeec16537870bd40d04836c7906ec141c17d
1809Author: djm@openbsd.org <djm@openbsd.org>
1810Date: Fri Dec 8 02:14:33 2017 +0000
1811
1812 upstream commit
1813
1814 fix ordering in previous to ensure errno isn't clobbered
1815 before logging.
1816
1817 OpenBSD-Commit-ID: e260bc1e145a9690dcb0d5aa9460c7b96a0c8ab2
1818
1819commit 155072fdb0d938015df828836beb2f18a294ab8a
1820Author: djm@openbsd.org <djm@openbsd.org>
1821Date: Fri Dec 8 02:13:02 2017 +0000
1822
1823 upstream commit
1824
1825 for some reason unix_listener() logged most errors twice
1826 with each message containing only some of the useful information; merge these
1827
1828 OpenBSD-Commit-ID: 1978a7594a9470c0dddcd719586066311b7c9a4a
1829
1830commit 79c0e1d29959304e5a49af1dbc58b144628c09f3
1831Author: Darren Tucker <dtucker@zip.com.au>
1832Date: Mon Dec 11 14:38:33 2017 +1100
1833
1834 Add autogenerated dependency info to Makefile.
1835
1836 Adds a .depend file containing dependency information generated by
1837 makedepend, which is appended to the generated Makefile by configure.
1838
1839 You can regen the file with "make -f Makefile.in depend" if necessary,
1840 but we'll be looking at some way to automatically keep this up to date.
1841
1842 "no objection" djm@
1843
1844commit f001de8fbf7f3faddddd8efd03df18e57601f7eb
1845Author: Darren Tucker <dtucker@zip.com.au>
1846Date: Mon Dec 11 13:42:51 2017 +1100
1847
1848 Fix pasto in ldns handling.
1849
1850 When ldns-config is not found, configure would check the wrong variable.
1851 ok djm@
1852
1853commit c5bfe83f67cb64e71cf2fe0d1500f6904b0099ee
1854Author: Darren Tucker <dtucker@zip.com.au>
1855Date: Sat Dec 9 10:12:23 2017 +1100
1856
1857 Portable switched to git so s/CVS/git/.
1858
1859commit bb82e61a40a4ee52e4eb904caaee2c27b763ab5b
1860Author: Darren Tucker <dtucker@zip.com.au>
1861Date: Sat Dec 9 08:06:00 2017 +1100
1862
1863 Remove now-used check for perl.
1864
1865commit e0ce54c0b9ca3a9388f9c50f4fa6cc25c28a3240
1866Author: djm@openbsd.org <djm@openbsd.org>
1867Date: Wed Dec 6 05:06:21 2017 +0000
1868
1869 upstream commit
1870
1871 don't accept junk after "yes" or "no" responses to
1872 hostkey prompts. bz#2803 reported by Maksim Derbasov; ok dtucker@
1873
1874 OpenBSD-Commit-ID: e1b159fb2253be973ce25eb7a7be26e6f967717c
1875
1876commit 609d96b3d58475a15b2eb6b3d463f2c5d8e510c0
1877Author: dtucker@openbsd.org <dtucker@openbsd.org>
1878Date: Tue Dec 5 23:59:47 2017 +0000
1879
1880 upstream commit
1881
1882 Replace atoi and strtol conversions for integer arguments
1883 to config keywords with a checking wrapper around strtonum. This will
1884 prevent and flag invalid and negative arguments to these keywords. ok djm@
1885
1886 OpenBSD-Commit-ID: 99ae3981f3d608a219ccb8d2fff635ae52c17998
1887
1888commit 168ecec13f9d7cb80c07df3bf7d414f4e4165e84
1889Author: dtucker@openbsd.org <dtucker@openbsd.org>
1890Date: Tue Dec 5 23:56:07 2017 +0000
1891
1892 upstream commit
1893
1894 Add missing break for rdomain. Prevents spurious
1895 "Deprecated option" warnings. ok djm@
1896
1897 OpenBSD-Commit-ID: ba28a675d39bb04a974586241c3cba71a9c6099a
1898
1899commit 927f8514ceffb1af380a5f63ab4d3f7709b1b198
1900Author: djm@openbsd.org <djm@openbsd.org>
1901Date: Tue Dec 5 01:30:19 2017 +0000
1902
1903 upstream commit
1904
1905 include the addr:port in bind/listen failure messages
1906
1907 OpenBSD-Commit-ID: fdadb69fe1b38692608809cf0376b71c2c28e58e
1908
1909commit a8c89499543e2d889629c4e5e8dcf47a655cf889
1910Author: dtucker@openbsd.org <dtucker@openbsd.org>
1911Date: Wed Nov 29 05:49:54 2017 +0000
1912
1913 upstream commit
1914
1915 Import updated moduli.
1916
1917 OpenBSD-Commit-ID: 524d210f982af6007aa936ca7f4c977f4d32f38a
1918
1919commit 3dde09ab38c8e1cfc28252be473541a81bc57097
1920Author: dtucker@openbsd.org <dtucker@openbsd.org>
1921Date: Tue Nov 28 21:10:22 2017 +0000
1922
1923 upstream commit
1924
1925 Have sftp print a warning about shell cleanliness when
1926 decoding the first packet fails, which is usually caused by shells polluting
1927 stdout of non-interactive starups. bz#2800, ok markus@ deraadt@.
1928
1929 OpenBSD-Commit-ID: 88d6a9bf3470f9324b76ba1cbd53e50120f685b5
1930
1931commit 6c8a246437f612ada8541076be2414846d767319
1932Author: Darren Tucker <dtucker@zip.com.au>
1933Date: Fri Dec 1 17:11:47 2017 +1100
1934
1935 Replace mkinstalldirs with mkdir -p.
1936
1937 Check for MIKDIR_P and use it instead of mkinstalldirs. Should fix "mkdir:
1938 cannot create directory:... File exists" during "make install".
1939 Patch from eb at emlix.com.
1940
1941commit 3058dd78d2e43ed0f82ad8eab8bb04b043a72023
1942Author: Darren Tucker <dtucker@zip.com.au>
1943Date: Fri Dec 1 17:07:08 2017 +1100
1944
1945 Pull in newer install-sh from autoconf-2.69.
1946
1947 Suggested by eb at emlix.com
1948
1949commit 79226e5413c5b0fda3511351a8511ff457e306d8
1950Author: Darren Tucker <dtucker@zip.com.au>
1951Date: Fri Dec 1 16:55:35 2017 +1100
1952
1953 Remove RSA1 host key generation.
1954
1955 SSH1 support is now gone, remove SSH1 key generation.
1956 Patch from eb at emlix.com.
1957
1958commit 2937dd02c572a12f33d5c334d518f6cbe0b645eb
1959Author: djm@openbsd.org <djm@openbsd.org>
1960Date: Tue Nov 28 06:09:38 2017 +0000
1961
1962 upstream commit
1963
1964 more whitespace errors
1965
1966 OpenBSD-Commit-ID: 5e11c125378327b648940b90145e0d98beb05abb
1967
1968commit 7f257bf3fd3a759f31098960cbbd1453fafc4164
1969Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
1970Date: Tue Nov 28 06:04:51 2017 +0000
1971
1972 upstream commit
1973
1974 whitespace at EOL
1975
1976 OpenBSD-Commit-ID: 76d3965202b22d59c2784a8df3a8bfa5ee67b96a
1977
1978commit 5db6fbf1438b108e5df3e79a1b4de544373bc2d4
1979Author: dtucker@openbsd.org@openbsd.org <dtucker@openbsd.org@openbsd.org>
1980Date: Sat Nov 25 06:46:22 2017 +0000
1981
1982 upstream commit
1983
1984 Add monotime_ts and monotime_tv that return monotonic
1985 timespec and timeval respectively. Replace calls to gettimeofday() in packet
1986 timing with monotime_tv so that the callers will work over a clock step.
1987 Should prevent integer overflow during clock steps reported by wangle6 at
1988 huawei.com. "I like" markus@
1989
1990 OpenBSD-Commit-ID: 74d684264814ff806f197948b87aa732cb1b0b8a
1991
1992commit 2d638e986085bdf1a40310ed6e2307463db96ea0
1993Author: dtucker@openbsd.org@openbsd.org <dtucker@openbsd.org@openbsd.org>
1994Date: Sat Nov 25 05:58:47 2017 +0000
1995
1996 upstream commit
1997
1998 Remove get_current_time() and replace with calls to
1999 monotime_double() which uses CLOCK_MONOTONIC and works over clock steps. "I
2000 like" markus@
2001
2002 OpenBSD-Commit-ID: 3ad2f7d2414e2cfcaef99877a7a5b0baf2242952
2003
2004commit ba460acae48a36ef749cb23068f968f4d5d90a24
2005Author: Darren Tucker <dtucker@zip.com.au>
2006Date: Fri Nov 24 16:24:31 2017 +1100
2007
2008 Include string.h for explicit_bzero.
2009
2010commit a65655fb1a12b77fb22f9e71559b9d73030ec8ff
2011Author: Damien Miller <djm@mindrot.org>
2012Date: Fri Nov 24 10:23:47 2017 +1100
2013
2014 fix incorrect range of OpenSSL versions supported
2015
2016 Pointed out by Solar Designer
2017
2018commit 83a1e5dbec52d05775174f368e0c44b08619a308
2019Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2020Date: Wed Nov 15 02:10:16 2017 +0000
2021
2022 upstream commit
2023
2024 downgrade a couple more request parsing errors from
2025 process-fatal to just returning failure, making them consistent with the
2026 others that were already like that.
2027
2028 OpenBSD-Commit-ID: c111461f7a626690a2d53018ef26557b34652918
2029
2030commit 93c68a8f3da8e5e6acdc3396f54d73919165e242
2031Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2032Date: Wed Nov 15 00:13:40 2017 +0000
2033
2034 upstream commit
2035
2036 fix regression in 7.6: failure to parse a signature request
2037 message shouldn't be fatal to the process, just the request. Reported by Ron
2038 Frederick
2039
2040 OpenBSD-Commit-ID: e5d01b3819caa1a2ad51fc57d6ded43f48bbcc05
2041
2042commit 548d3a66feb64c405733932a6b1abeaf7198fa71
2043Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2044Date: Tue Nov 14 00:45:29 2017 +0000
2045
2046 upstream commit
2047
2048 fix problem in configuration parsing when in config dump mode
2049 (sshd -T) without providing a full connection specification (sshd -T -C ...)
2050
2051 spotted by bluhm@
2052
2053 OpenBSD-Commit-ID: 7125faf5740eaa9d3a2f25400a0bc85e94e28b8f
2054
2055commit 33edb6ebdc2f81ebed1bceadacdfb8910b64fb88
2056Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2057Date: Fri Nov 3 05:18:44 2017 +0000
2058
2059 upstream commit
2060
2061 reuse parse_multistate for parse_flag (yes/no arguments).
2062 Saves a few lines of code and makes the parser more consistent wrt case-
2063 sensitivity. bz#2664 ok dtucker@
2064
2065 OpenBSD-Commit-ID: b2ad1b6086858d5db71c7b11e5a74dba6d60efef
2066
2067commit d52131a98316e76c0caa348f09bf6f7b9b01a1b9
2068Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2069Date: Fri Nov 3 05:14:04 2017 +0000
2070
2071 upstream commit
2072
2073 allow certificate validity intervals that specify only a
2074 start or stop time (we already support specifying both or neither)
2075
2076 OpenBSD-Commit-ID: 9be486545603c003030bdb5c467d1318b46b4e42
2077
2078commit fbe8e7ac94c2fa380421a9205a8bc966549c2f91
2079Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2080Date: Fri Nov 3 03:46:52 2017 +0000
2081
2082 upstream commit
2083
2084 allow "cd" and "lcd" commands with no explicit path
2085 argument. lcd will change to the local user's home directory as usual. cd
2086 will change to the starting directory for session (because the protocol
2087 offers no way to obtain the remote user's home directory). bz#2760 ok
2088 dtucker@
2089
2090 OpenBSD-Commit-ID: 15333f5087cee8c1ed1330cac1bd0a3e6a767393
2091
2092commit 0208a48517b5e8e8b091f32fa4addcd67c31ca9e
2093Author: dtucker@openbsd.org@openbsd.org <dtucker@openbsd.org@openbsd.org>
2094Date: Fri Nov 3 03:18:53 2017 +0000
2095
2096 upstream commit
2097
2098 When doing a config test with sshd -T, only require the
2099 attributes that are actually used in Match criteria rather than (an
2100 incomplete list of) all criteria. ok djm@, man page help jmc@
2101
2102 OpenBSD-Commit-ID: b4e773c4212d3dea486d0259ae977551aab2c1fc
2103
2104commit c357eed5a52cd2f4ff358b17e30e3f9a800644da
2105Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2106Date: Fri Nov 3 02:32:19 2017 +0000
2107
2108 upstream commit
2109
2110 typos in ECDSA certificate names; bz#2787 reported by
2111 Mike Gerow
2112
2113 OpenBSD-Commit-ID: 824938b6aba1b31321324ba1f56c05f84834b163
2114
2115commit ecbf005b8fd80b81d0c61dfc1e96fe3da6099395
2116Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2117Date: Fri Nov 3 02:29:17 2017 +0000
2118
2119 upstream commit
2120
2121 Private keys in PEM format have been encrypted by AES-128 for
2122 a while (not 3DES). bz#2788 reported by Calum Mackay
2123
2124 OpenBSD-Commit-ID: bd33da7acbbb3c882f0a0ee56007a35ce0d8a11a
2125
2126commit 81c9ccdbf6ddbf9bfbd6f1f775a5a7c13e47e185
2127Author: Darren Tucker <dtucker@zip.com.au>
2128Date: Fri Nov 3 14:52:51 2017 +1100
2129
2130 Check for linux/if.h when enabling rdomain.
2131
2132 musl libc doesn't seem to have linux/if.h, so check for its presence
2133 before enabling rdomain support on Linux.
2134
2135commit fa1b834cce41a1ce3e6a8d57fb67ef18c9dd803f
2136Author: Darren Tucker <dtucker@zip.com.au>
2137Date: Fri Nov 3 14:09:45 2017 +1100
2138
2139 Add headers for sys/sysctl.h and net/route.h
2140
2141 On at least older OpenBSDs, sys/sysctl.h and net/route.h require
2142 sys/types and, in the case of sys/sysctl.h, sys/param.h for MAXLOGNAME.
2143
2144commit 41bff4da21fcd8a7c6a83a7e0f92b018f904f6fb
2145Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2146Date: Fri Nov 3 02:22:41 2017 +0000
2147
2148 upstream commit
2149
2150 avoid unused variable warnings for !WITH_OPENSSL; patch from
2151 Marcus Folkesson
2152
2153 OpenBSD-Commit-ID: c01d27a3f907acdc3dd4ea48170fac3ba236d229
2154
2155commit 6b373e4635a7470baa94253dd1dc8953663da9e8
2156Author: Marcus Folkesson <marcus.folkesson@gmail.com>
2157Date: Sat Oct 28 19:48:39 2017 +0200
2158
2159 only enable functions in dh.c when openssl is used
2160
2161 Signed-off-by: Marcus Folkesson <marcus.folkesson@gmail.com>
2162
2163commit 939b30ba23848b572e15bf92f0f1a3d9cf3acc2b
2164Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2165Date: Wed Nov 1 00:04:15 2017 +0000
2166
2167 upstream commit
2168
2169 fix broken stdout in ControlPersist mode, introduced by me in
2170 r1.467 and reported by Alf Schlichting
2171
2172 OpenBSD-Commit-ID: 3750a16e02108fc25f747e4ebcedb7123c1ef509
2173
2174commit f21455a084f9cc3942cf1bde64055a4916849fed
2175Author: Darren Tucker <dtucker@zip.com.au>
2176Date: Tue Oct 31 10:09:33 2017 +1100
2177
2178 Include includes.h for HAVE_GETPAGESIZE.
2179
2180 The configure script checks for getpagesize() and sets HAVE_GETPAGESIZE in
2181 config.h, but bsd-getpagesize.c forgot to include includes.h (which
2182 indirectly includes config.h) so the checks always fails, causing linker
2183 issues when linking statically on systems with getpagesize().
2184
2185 Patch from Peter Korsgaard <peter at korsgaard.com>
2186
2187commit f2ad63c0718b93ac1d1e85f53fee33b06eef86b5
2188Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2189Date: Mon Oct 30 22:01:52 2017 +0000
2190
2191 upstream commit
2192
2193 whitespace at EOL
2194
2195 OpenBSD-Regress-ID: f4b5df99b28c6f63478deb916c6ed0e794685f07
2196
2197commit c6415b1f8f1d0c2735564371647fd6a177fb9a3e
2198Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2199Date: Mon Oct 30 21:59:43 2017 +0000
2200
2201 upstream commit
2202
2203 whitespace at EOL
2204
2205 OpenBSD-Regress-ID: 19b1394393deee4c8a2114a3b7d18189f27a15cd
2206
2207commit e4d4ddbbba0e585ca3ec3a455430750b4622a6d3
2208Author: millert@openbsd.org@openbsd.org <millert@openbsd.org@openbsd.org>
2209Date: Wed Oct 25 20:08:36 2017 +0000
2210
2211 upstream commit
2212
2213 Use printenv to test whether an SSH_USER_AUTH is set
2214 instead of using $SSH_USER_AUTH. The latter won't work with csh which treats
2215 unknown variables as an error when expanding them. OK markus@
2216
2217 OpenBSD-Regress-ID: f601e878dd8b71aa40381573dde3a8f567e6f2d1
2218
2219commit 116b1b439413a724ebb3320633a64dd0f3ee1fe7
2220Author: millert@openbsd.org@openbsd.org <millert@openbsd.org@openbsd.org>
2221Date: Tue Oct 24 19:33:32 2017 +0000
2222
2223 upstream commit
2224
2225 Add tests for URI parsing. OK markus@
2226
2227 OpenBSD-Regress-ID: 5d1df19874f3b916d1a2256a905526e17a98bd3b
2228
2229commit dbe0662e9cd482593a4a8bf58c6481bfe8a747a4
2230Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2231Date: Fri Oct 27 01:57:06 2017 +0000
2232
2233 upstream commit
2234
2235 whitespace at EOL
2236
2237 OpenBSD-Commit-ID: c95549cf5a07d56ea11aaff818415118720214f6
2238
2239commit d2135474344335a7c6ee643b6ade6db400fa76ee
2240Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2241Date: Fri Oct 27 01:01:17 2017 +0000
2242
2243 upstream commit
2244
2245 whitespace at EOL (lots)
2246
2247 OpenBSD-Commit-ID: 757257dd44116794ee1b5a45c6724973de181747
2248
2249commit b77c29a07f5a02c7c1998701c73d92bde7ae1608
2250Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2251Date: Fri Oct 27 00:18:41 2017 +0000
2252
2253 upstream commit
2254
2255 improve printing of rdomain on accept() a little
2256
2257 OpenBSD-Commit-ID: 5da58db2243606899cedaa646c70201b2d12247a
2258
2259commit 68d3bbb2e6dfbf117c46e942142795b2cdd0274b
2260Author: jmc@openbsd.org@openbsd.org <jmc@openbsd.org@openbsd.org>
2261Date: Thu Oct 26 06:44:01 2017 +0000
2262
2263 upstream commit
2264
2265 mark up the rdomain keyword;
2266
2267 OpenBSD-Commit-ID: 1b597d0ad0ad20e94dbd61ca066057e6f6313b8a
2268
2269commit 0b2e2896b9d0d6cfb59e9ec8271085296bd4e99b
2270Author: jmc@openbsd.org@openbsd.org <jmc@openbsd.org@openbsd.org>
2271Date: Wed Oct 25 06:19:46 2017 +0000
2272
2273 upstream commit
2274
2275 tweak the uri text, specifically removing some markup to
2276 make it a bit more readable;
2277
2278 issue reported by - and diff ok - millert
2279
2280 OpenBSD-Commit-ID: 8b56a20208040b2d0633536fd926e992de37ef3f
2281
2282commit 7530e77bdc9415386d2a8ea3d086e8b611b2ba40
2283Author: jmc@openbsd.org@openbsd.org <jmc@openbsd.org@openbsd.org>
2284Date: Wed Oct 25 06:18:06 2017 +0000
2285
2286 upstream commit
2287
2288 simplify macros in previous, and some minor tweaks;
2289
2290 OpenBSD-Commit-ID: 6efeca3d8b095b76e21b484607d9cc67ac9a11ca
2291
2292commit eb9c582b710dc48976b48eb2204218f6863bae9a
2293Author: Damien Miller <djm@mindrot.org>
2294Date: Tue Oct 31 00:46:29 2017 +1100
2295
2296 Switch upstream git repository.
2297
2298 Previously portable OpenSSH has synced against a conversion of OpenBSD's
2299 CVS repository made using the git cvsimport tool, but this has become
2300 increasingly unreliable.
2301
2302 As of this commit, portable OpenSSH now tracks a conversion of the
2303 OpenBSD CVS upstream made using the excellent cvs2gitdump tool from
2304 YASUOKA Masahiko: https://github.com/yasuoka/cvs2gitdump
2305
2306 cvs2gitdump is considerably more reliable than gitcvsimport and the old
2307 version of cvsps that it uses under the hood, and is the same tool used
2308 to export the entire OpenBSD repository to git (so we know it can cope
2309 with future growth).
2310
2311 These new conversions are mirrored at github, so interested parties can
2312 match portable OpenSSH commits to their upstream counterparts.
2313
2314 https://github.com/djmdjm/openbsd-openssh-src
2315 https://github.com/djmdjm/openbsd-openssh-regress
2316
2317 An unfortunate side effect of switching upstreams is that we must have
2318 a flag day, across which the upstream commit IDs will be inconsistent.
2319 The old commit IDs are recorded with the tags "Upstream-ID" for main
2320 directory commits and "Upstream-Regress-ID" for regress commits.
2321
2322 To make it clear that the commit IDs do not refer to the same
2323 things, the new repository will instead use "OpenBSD-ID" and
2324 "OpenBSD-Regress-ID" tags instead.
2325
2326 Apart from being a longwinded explanation of what is going on, this
2327 commit message also serves to synchronise our tools with the state of
2328 the tree, which happens to be:
2329
2330 OpenBSD-ID: 9c43a9968c7929613284ea18e9fb92e4e2a8e4c1
2331 OpenBSD-Regress-ID: b33b385719420bf3bc57d664feda6f699c147fef
2332
2333commit 2de5c6b53bf063ac698596ef4e23d8e3099656ea
2334Author: Damien Miller <djm@mindrot.org>
2335Date: Fri Oct 27 08:42:33 2017 +1100
2336
2337 fix rdomain compilation errors
2338
2339commit 6bd5b569fd6dfd5e8c8af20bbc41e45c2d6462ab
2340Author: Damien Miller <djm@mindrot.org>
2341Date: Wed Oct 25 14:15:42 2017 +1100
2342
2343 autoconf glue to enable Linux VRF
2344
2345commit 97c5aaf925d61641d599071abb56012cde265978
2346Author: Damien Miller <djm@mindrot.org>
2347Date: Wed Oct 25 14:09:56 2017 +1100
2348
2349 basic valid_rdomain() implementation for Linux
2350
2351commit ce1cca39d7935dd394080ce2df62f5ce5b51f485
2352Author: Damien Miller <djm@mindrot.org>
2353Date: Wed Oct 25 13:47:59 2017 +1100
2354
2355 implement get/set_rdomain() for Linux
2356
2357 Not enabled, pending implementation of valid_rdomain() and autoconf glue
2358
2359commit 6eee79f9b8d4a3b113b698383948a119acb82415
2360Author: Damien Miller <djm@mindrot.org>
2361Date: Wed Oct 25 13:22:29 2017 +1100
2362
2363 stubs for rdomain replacement functions
2364
2365commit f5594f939f844bbb688313697d6676238da355b3
2366Author: Damien Miller <djm@mindrot.org>
2367Date: Wed Oct 25 13:13:57 2017 +1100
2368
2369 rename port-tun.[ch] => port-net.[ch]
2370
2371 Ahead of adding rdomain support
2372
2373commit d685e5a31feea35fb99e1a31a70b3c60a7f2a0eb
2374Author: djm@openbsd.org <djm@openbsd.org>
2375Date: Wed Oct 25 02:10:39 2017 +0000
2376
2377 upstream commit
2378
2379 uninitialised variable in PermitTunnel printing code
2380
2381 Upstream-ID: f04dc33e42855704e116b8da61095ecc71bc9e9a
2382
2383commit 43c29bb7cfd46bbbc61e0ffa61a11e74d49a712f
2384Author: Damien Miller <djm@mindrot.org>
2385Date: Wed Oct 25 13:10:59 2017 +1100
2386
2387 provide hooks and fallbacks for rdomain support
2388
2389commit 3235473bc8e075fad7216b7cd62fcd2b0320ea04
2390Author: Damien Miller <djm@mindrot.org>
2391Date: Wed Oct 25 11:25:43 2017 +1100
2392
2393 check for net/route.h and sys/sysctl.h
2394
2395commit 4d5456c7de108e17603a0920c4d15bca87244921
2396Author: djm@openbsd.org <djm@openbsd.org>
2397Date: Wed Oct 25 00:21:37 2017 +0000
2398
2399 upstream commit
2400
2401 transfer ownership of stdout to the session channel by
2402 dup2'ing /dev/null to fd 1. This allows propagation of remote stdout close to
2403 the local side; reported by David Newall, ok markus@
2404
2405 Upstream-ID: 8d9ac18a11d89e6b0415f0cbf67b928ac67f0e79
2406
2407commit 68af80e6fdeaeb79432209db614386ff0f37e75f
2408Author: djm@openbsd.org <djm@openbsd.org>
2409Date: Wed Oct 25 00:19:47 2017 +0000
2410
2411 upstream commit
2412
2413 add a "rdomain" criteria for the sshd_config Match
2414 keyword to allow conditional configuration that depends on which rdomain(4) a
2415 connection was recevied on. ok markus@
2416
2417 Upstream-ID: 27d8fd5a3f1bae18c9c6e533afdf99bff887a4fb
2418
2419commit 35eb33fb957979e3fcbe6ea0eaee8bf4a217421a
2420Author: djm@openbsd.org <djm@openbsd.org>
2421Date: Wed Oct 25 00:17:08 2017 +0000
2422
2423 upstream commit
2424
2425 add sshd_config RDomain keyword to place sshd and the
2426 subsequent user session (including the shell and any TCP/IP forwardings) into
2427 the specified rdomain(4)
2428
2429 ok markus@
2430
2431 Upstream-ID: be2358e86346b5cacf20d90f59f980b87d1af0f5
2432
2433commit acf559e1cffbd1d6167cc1742729fc381069f06b
2434Author: djm@openbsd.org <djm@openbsd.org>
2435Date: Wed Oct 25 00:15:35 2017 +0000
2436
2437 upstream commit
2438
2439 Add optional rdomain qualifier to sshd_config's
2440 ListenAddress option to allow listening on a different rdomain(4), e.g.
2441
2442 ListenAddress 0.0.0.0 rdomain 4
2443
2444 Upstream-ID: 24b6622c376feeed9e9be8b9605e593695ac9091
2445
2446commit b9903ee8ee8671b447fc260c2bee3761e26c7227
2447Author: millert@openbsd.org <millert@openbsd.org>
2448Date: Tue Oct 24 19:41:45 2017 +0000
2449
2450 upstream commit
2451
2452 Kill dead store and some spaces vs. tabs indent in
2453 parse_user_host_path(). Noticed by markus@
2454
2455 Upstream-ID: 114fec91dadf9af46c7c94fd40fc630ea2de8200
2456
2457commit 0869627e00f4ee2a038cb62d7bd9ffad405e1800
2458Author: jmc@openbsd.org <jmc@openbsd.org>
2459Date: Tue Oct 24 06:27:42 2017 +0000
2460
2461 upstream commit
2462
2463 tweak previous; ok djm
2464
2465 Upstream-ID: 7d913981ab315296be1f759c67b6e17aea38fca9
2466
2467commit e3fa20e2e58fdc88a0e842358778f2de448b771b
2468Author: Damien Miller <djm@mindrot.org>
2469Date: Mon Oct 23 16:25:24 2017 +1100
2470
2471 avoid -Wsign-compare warning in argv copying
2472
2473commit b7548b12a6b2b4abf4d057192c353147e0abba08
2474Author: djm@openbsd.org <djm@openbsd.org>
2475Date: Mon Oct 23 05:08:00 2017 +0000
2476
2477 upstream commit
2478
2479 Expose devices allocated for tun/tap forwarding.
2480
2481 At the client, the device may be obtained from a new %T expansion
2482 for LocalCommand.
2483
2484 At the server, the allocated devices will be listed in a
2485 SSH_TUNNEL variable exposed to the environment of any user sessions
2486 started after the tunnel forwarding was established.
2487
2488 ok markus
2489
2490 Upstream-ID: e61e53f8ae80566e9ddc0d67a5df5bdf2f3c9f9e
2491
2492commit 887669ef032d63cf07f53cada216fa8a0c9a7d72
2493Author: millert@openbsd.org <millert@openbsd.org>
2494Date: Sat Oct 21 23:06:24 2017 +0000
2495
2496 upstream commit
2497
2498 Add URI support to ssh, sftp and scp. For example
2499 ssh://user@host or sftp://user@host/path. The connection parameters
2500 described in draft-ietf-secsh-scp-sftp-ssh-uri-04 are not implemented since
2501 the ssh fingerprint format in the draft uses md5 with no way to specify the
2502 hash function type. OK djm@
2503
2504 Upstream-ID: 4ba3768b662d6722de59e6ecb00abf2d4bf9cacc
2505
2506commit d27bff293cfeb2252f4c7a58babe5ad3262c6c98
2507Author: Damien Miller <djm@mindrot.org>
2508Date: Fri Oct 20 13:22:00 2017 +1100
2509
2510 Fix missed RCSID merges
2511
2512commit d3b6aeb546242c9e61721225ac4387d416dd3d5e
2513Author: djm@openbsd.org <djm@openbsd.org>
2514Date: Fri Oct 20 02:13:41 2017 +0000
2515
2516 upstream commit
2517
2518 more RCSIDs
2519
2520 Upstream-Regress-ID: 1aecbe3f8224793f0ec56741a86d619830eb33be
2521
2522commit b011edbb32e41aaab01386ce4c0efcc9ff681c4a
2523Author: djm@openbsd.org <djm@openbsd.org>
2524Date: Fri Oct 20 01:56:39 2017 +0000
2525
2526 upstream commit
2527
2528 add RCSIDs to these; they make syncing portable a bit
2529 easier
2530
2531 Upstream-ID: 56cb7021faea599736dd7e7f09c2e714425b1e68
2532
2533commit 6eb27597781dccaf0ec2b80107a9f0592a0cb464
2534Author: Damien Miller <djm@mindrot.org>
2535Date: Fri Oct 20 12:54:15 2017 +1100
2536
2537 upstream commit
2538
2539 Apply missing commit 1.11 to kexc25519s.c
2540
2541 Upstream-ID: 5f020e23a1ee6c3597af1f91511e68552cdf15e8
2542
2543commit 6f72280553cb6918859ebcacc717f2d2fafc1a27
2544Author: Damien Miller <djm@mindrot.org>
2545Date: Fri Oct 20 12:52:50 2017 +1100
2546
2547 upstream commit
2548
2549 Apply missing commit 1.127 to servconf.h
2550
2551 Upstream-ID: f14c4bac74a2b7cf1e3cff6bea5c447f192a7d15
2552
2553commit bb3e16ab25cb911238c2eb7455f9cf490cb143cc
2554Author: jmc@openbsd.org <jmc@openbsd.org>
2555Date: Wed Oct 18 05:36:59 2017 +0000
2556
2557 upstream commit
2558
2559 remove unused Pp;
2560
2561 Upstream-ID: 8ad26467f1f6a40be887234085a8e01a61a00550
2562
2563commit 05b69e99570553c8e1eafb895b1fbf1d098d2e14
2564Author: djm@openbsd.org <djm@openbsd.org>
2565Date: Wed Oct 18 02:49:44 2017 +0000
2566
2567 upstream commit
2568
2569 In the description of pattern-lists, clarify negated
2570 matches by explicitly stating that a negated match will never yield a
2571 positive result, and that at least one positive term in the pattern-list must
2572 match. bz#1918
2573
2574 Upstream-ID: 652d2f9d993f158fc5f83cef4a95cd9d95ae6a14
2575
2576commit eb80e26a15c10bc65fed8b8cdb476819a713c0fd
2577Author: djm@openbsd.org <djm@openbsd.org>
2578Date: Fri Oct 13 21:13:54 2017 +0000
2579
2580 upstream commit
2581
2582 log debug messages sent to peer; ok deraadt markus
2583
2584 Upstream-ID: 3b4fdc0a06ea5083f61d96e20043000f477103d9
2585
2586commit 071325f458d615d7740da5c1c1d5a8b68a0b4605
2587Author: jmc@openbsd.org <jmc@openbsd.org>
2588Date: Fri Oct 13 16:50:45 2017 +0000
2589
2590 upstream commit
2591
2592 trim permitrootlogin description somewhat, to avoid
2593 ambiguity; original diff from walter alejandro iglesias, tweaked by sthen and
2594 myself
2595
2596 ok sthen schwarze deraadt
2597
2598 Upstream-ID: 1749418b2bc073f3fdd25fe21f8263c3637fe5d2
2599
2600commit 10727487becb897a15f658e0cb2d05466236e622
2601Author: djm@openbsd.org <djm@openbsd.org>
2602Date: Fri Oct 13 06:45:18 2017 +0000
2603
2604 upstream commit
2605
2606 mention SSH_USER_AUTH in the list of environment
2607 variables
2608
2609 Upstream-ID: 1083397c3ee54b4933121ab058c70a0fc6383691
2610
2611commit 224f193d6a4b57e7a0cb2b9ecd3b6c54d721d8c2
2612Author: djm@openbsd.org <djm@openbsd.org>
2613Date: Fri Oct 13 06:24:51 2017 +0000
2614
2615 upstream commit
2616
2617 BIO_get_mem_data() is supposed to take a char* as pointer
2618 argument, so don't pass it a const char*
2619
2620 Upstream-ID: 1ccd91eb7f4dd4f0fa812d4f956987cd00b5f6ec
2621
2622commit cfa46825b5ef7097373ed8e31b01a4538a8db565
2623Author: benno@openbsd.org <benno@openbsd.org>
2624Date: Mon Oct 9 20:12:51 2017 +0000
2625
2626 upstream commit
2627
2628 clarify the order in which config statements are used. ok
2629 jmc@ djm@
2630
2631 Upstream-ID: e37e27bb6bbac71315e22cb9690fd8a556a501ed
2632
2633commit dceabc7ad7ebc7769c8214a1647af64c9a1d92e5
2634Author: djm@openbsd.org <djm@openbsd.org>
2635Date: Thu Oct 5 15:52:03 2017 +0000
2636
2637 upstream commit
2638
2639 replace statically-sized arrays in ServerOptions with
2640 dynamic ones managed by xrecallocarray, removing some arbitrary (though
2641 large) limits and saving a bit of memory; "much nicer" markus@
2642
2643 Upstream-ID: 1732720b2f478fe929d6687ac7b0a97ff2efe9d2
2644
2645commit 2b4f3ab050c2aaf6977604dd037041372615178d
2646Author: jmc@openbsd.org <jmc@openbsd.org>
2647Date: Thu Oct 5 12:56:50 2017 +0000
2648
2649 upstream commit
2650
2651 %C is hashed; from klemens nanni ok markus
2652
2653 Upstream-ID: 6ebed7b2e1b6ee5402a67875d74f5e2859d8f998
2654
2655commit a66714508b86d6814e9055fefe362d9fe4d49ab3
2656Author: djm@openbsd.org <djm@openbsd.org>
2657Date: Wed Oct 4 18:50:23 2017 +0000
2658
2659 upstream commit
2660
2661 exercise PermitOpen a little more thoroughly
2662
2663 Upstream-Regress-ID: f41592334e227a4c1f9a983044522de4502d5eac
2664
2665commit 609ecc8e57eb88e2eac976bd3cae7f7889aaeff6
2666Author: dtucker@openbsd.org <dtucker@openbsd.org>
2667Date: Tue Sep 26 22:39:25 2017 +0000
2668
2669 upstream commit
2670
2671 UsePrivilegeSeparation is gone, stop trying to test it.
2672
2673 Upstream-Regress-ID: 796a5057cfd79456a20ea935cc53f6eb80ace191
2674
2675commit 69bda0228861f3dacd4fb3d28b60ce9d103d254b
2676Author: djm@openbsd.org <djm@openbsd.org>
2677Date: Wed Oct 4 18:49:30 2017 +0000
2678
2679 upstream commit
2680
2681 fix (another) problem in PermitOpen introduced during the
2682 channels.c refactor: the third and subsequent arguments to PermitOpen were
2683 being silently ignored; ok markus@
2684
2685 Upstream-ID: 067c89f1f53cbc381628012ba776d6861e6782fd
2686
1commit 66bf74a92131b7effe49fb0eefe5225151869dc5 2687commit 66bf74a92131b7effe49fb0eefe5225151869dc5
2Author: djm@openbsd.org <djm@openbsd.org> 2688Author: djm@openbsd.org <djm@openbsd.org>
3Date: Mon Oct 2 19:33:20 2017 +0000 2689Date: Mon Oct 2 19:33:20 2017 +0000
@@ -7110,2242 +9796,3 @@ Author: Darren Tucker <dtucker@zip.com.au>
7110Date: Mon Apr 4 11:07:59 2016 +1000 9796Date: Mon Apr 4 11:07:59 2016 +1000
7111 9797
7112 Fix configure-time warnings for openssl test. 9798 Fix configure-time warnings for openssl test.
7113
7114commit 95687f5831ae680f7959446d8ae4b52452ee05dd
7115Author: djm@openbsd.org <djm@openbsd.org>
7116Date: Fri Apr 1 02:34:10 2016 +0000
7117
7118 upstream commit
7119
7120 whitespace at EOL
7121
7122 Upstream-ID: 40ae2203d07cb14e0a89e1a0d4c6120ee8fd8c3a
7123
7124commit fdfbf4580de09d84a974211715e14f88a5704b8e
7125Author: dtucker@openbsd.org <dtucker@openbsd.org>
7126Date: Thu Mar 31 05:24:06 2016 +0000
7127
7128 upstream commit
7129
7130 Remove fallback from moduli to "primes" file that was
7131 deprecated in 2001 and fix log messages referring to primes file. Based on
7132 patch from xnox at ubuntu.com via bz#2559. "kill it" deraadt@
7133
7134 Upstream-ID: 0d4f8c70e2fa7431a83b95f8ca81033147ba8713
7135
7136commit 0235a5fa67fcac51adb564cba69011a535f86f6b
7137Author: djm@openbsd.org <djm@openbsd.org>
7138Date: Thu Mar 17 17:19:43 2016 +0000
7139
7140 upstream commit
7141
7142 UseDNS affects ssh hostname processing in authorized_keys,
7143 not known_hosts; bz#2554 reported by jjelen AT redhat.com
7144
7145 Upstream-ID: c1c1bb895dde46095fc6d81d8653703928437591
7146
7147commit 8c4739338f5e379d05b19d6e544540114965f07e
7148Author: Darren Tucker <dtucker@zip.com.au>
7149Date: Tue Mar 15 09:24:43 2016 +1100
7150
7151 Don't call Solaris setproject() with UsePAM=yes.
7152
7153 When Solaris Projects are enabled along with PAM setting the project
7154 is PAM's responsiblity. bz#2425, based on patch from
7155 brent.paulson at gmail.com.
7156
7157commit cff26f373c58457a32cb263e212cfff53fca987b
7158Author: Damien Miller <djm@mindrot.org>
7159Date: Tue Mar 15 04:30:21 2016 +1100
7160
7161 remove slogin from *.spec
7162
7163commit c38905ba391434834da86abfc988a2b8b9b62477
7164Author: djm@openbsd.org <djm@openbsd.org>
7165Date: Mon Mar 14 16:20:54 2016 +0000
7166
7167 upstream commit
7168
7169 unbreak authentication using lone certificate keys in
7170 ssh-agent: when attempting pubkey auth with a certificate, if no separate
7171 private key is found among the keys then try with the certificate key itself.
7172
7173 bz#2550 reported by Peter Moody
7174
7175 Upstream-ID: f939cd76d68e6a9a3d1711b5a943d6ed1e623966
7176
7177commit 4b4bfb01cd40b9ddb948e6026ddd287cc303d871
7178Author: djm@openbsd.org <djm@openbsd.org>
7179Date: Thu Mar 10 11:47:57 2016 +0000
7180
7181 upstream commit
7182
7183 sanitise characters destined for xauth reported by
7184 github.com/tintinweb feedback and ok deraadt and markus
7185
7186 Upstream-ID: 18ad8d0d74cbd2ea3306a16595a306ee356aa261
7187
7188commit 732b463d37221722b1206f43aa59563766a6a968
7189Author: Darren Tucker <dtucker@zip.com.au>
7190Date: Mon Mar 14 16:04:23 2016 +1100
7191
7192 Pass supported malloc options to connect-privsep.
7193
7194 This allows us to activate only the supported options during the malloc
7195 option portion of the connect-privsep test.
7196
7197commit d29c5b9b3e9f27394ca97a364ed4bb4a55a59744
7198Author: Darren Tucker <dtucker@zip.com.au>
7199Date: Mon Mar 14 09:30:58 2016 +1100
7200
7201 Remove leftover roaming.h file.
7202
7203 Pointed out by des at des.no.
7204
7205commit 8ff20ec95f4377021ed5e9b2331320f5c5a34cea
7206Author: Darren Tucker <dtucker@zip.com.au>
7207Date: Mon Mar 14 09:24:03 2016 +1100
7208
7209 Quote variables that may contain whitespace.
7210
7211 The variable $L_TMP_ID_FILE needs to be surrounded by quotes in order to
7212 survive paths containing whitespace. bz#2551, from Corinna Vinschen via
7213 Philip Hands.
7214
7215commit 627824480c01f0b24541842c7206ab9009644d02
7216Author: Darren Tucker <dtucker@zip.com.au>
7217Date: Fri Mar 11 14:47:41 2016 +1100
7218
7219 Include priv.h for priv_set_t.
7220
7221 From alex at cooperi.net.
7222
7223commit e960051f9a264f682c4d2fefbeecffcfc66b0ddf
7224Author: Darren Tucker <dtucker@zip.com.au>
7225Date: Wed Mar 9 13:14:18 2016 +1100
7226
7227 Wrap stdint.h inside #ifdef HAVE_STDINT_H.
7228
7229commit 2c48bd344d2c4b5e08dae9aea5ff44fc19a5e363
7230Author: Darren Tucker <dtucker@zip.com.au>
7231Date: Wed Mar 9 12:46:50 2016 +1100
7232
7233 Add compat to monotime_double().
7234
7235 Apply all of the portability changes in monotime() to monotime() double.
7236 Fixes build on at least older FreeBSD systems.
7237
7238commit 7b40ef6c2eef40c339f6ea8920cb8a44838e10c9
7239Author: Damien Miller <djm@mindrot.org>
7240Date: Tue Mar 8 14:12:58 2016 -0800
7241
7242 make a regress-binaries target
7243
7244 Easier to build all the regression/unit test binaries in one pass
7245 than going through all of ${REGRESS_BINARIES}
7246
7247commit c425494d6b6181beb54a1b3763ef9e944fd3c214
7248Author: Damien Miller <djm@mindrot.org>
7249Date: Tue Mar 8 14:03:54 2016 -0800
7250
7251 unbreak kexfuzz for -Werror without __bounded__
7252
7253commit 3ed9218c336607846563daea5d5ab4f701f4e042
7254Author: Damien Miller <djm@mindrot.org>
7255Date: Tue Mar 8 14:01:29 2016 -0800
7256
7257 unbreak PAM after canohost refactor
7258
7259commit 885fb2a44ff694f01e4f6470f803629e11f62961
7260Author: Darren Tucker <dtucker@zip.com.au>
7261Date: Tue Mar 8 11:58:43 2016 +1100
7262
7263 auth_get_canonical_hostname in portable code.
7264
7265 "refactor canohost.c" replaced get_canonical_hostname, this makes the
7266 same change to some portable-specific code.
7267
7268commit 95767262caa6692eff1e1565be1f5cb297949a89
7269Author: djm@openbsd.org <djm@openbsd.org>
7270Date: Mon Mar 7 19:02:43 2016 +0000
7271
7272 upstream commit
7273
7274 refactor canohost.c: move functions that cache results closer
7275 to the places that use them (authn and session code). After this, no state is
7276 cached in canohost.c
7277
7278 feedback and ok markus@
7279
7280 Upstream-ID: 5f2e4df88d4803fc8ec59ec53629105e23ce625e
7281
7282commit af0bb38ffd1f2c4f9f43b0029be2efe922815255
7283Author: Damien Miller <djm@mindrot.org>
7284Date: Fri Mar 4 15:11:55 2016 +1100
7285
7286 hook unittests/misc/kexfuzz into build
7287
7288commit 331b8e07ee5bcbdca12c11cc8f51a7e8de09b248
7289Author: dtucker@openbsd.org <dtucker@openbsd.org>
7290Date: Fri Mar 4 02:48:06 2016 +0000
7291
7292 upstream commit
7293
7294 Filter debug messages out of log before picking the last
7295 two lines. Should prevent problems if any more debug output is added late in
7296 the connection.
7297
7298 Upstream-Regress-ID: 345d0a9589c381e7d640a4ead06cfaadf4db1363
7299
7300commit 0892edaa3ce623381d3a7635544cbc69b31cf9cb
7301Author: djm@openbsd.org <djm@openbsd.org>
7302Date: Fri Mar 4 02:30:36 2016 +0000
7303
7304 upstream commit
7305
7306 add KEX fuzzer harness; ok deraadt@
7307
7308 Upstream-Regress-ID: 3df5242d30551b12b828aa9ba4a4cec0846be8d1
7309
7310commit ae2562c47d41b68dbb00240fd6dd60bed205367a
7311Author: dtucker@openbsd.org <dtucker@openbsd.org>
7312Date: Thu Mar 3 00:46:53 2016 +0000
7313
7314 upstream commit
7315
7316 Look back 3 lines for possible error messages. Changes
7317 to the code mean that "Bad packet length" errors are 3 lines back instead of
7318 the previous two, which meant we didn't skip some offsets that we intended
7319 to.
7320
7321 Upstream-Regress-ID: 24f36912740a634d509a3144ebc8eb7c09b9c684
7322
7323commit 988e429d903acfb298bfddfd75e7994327adfed0
7324Author: djm@openbsd.org <djm@openbsd.org>
7325Date: Fri Mar 4 03:35:44 2016 +0000
7326
7327 upstream commit
7328
7329 fix ClientAliveInterval when a time-based RekeyLimit is
7330 set; previously keepalive packets were not being sent. bz#2252 report and
7331 analysis by Christian Wittenhorst and Garrett Lee feedback and ok dtucker@
7332
7333 Upstream-ID: d48f9deadd35fdacdd5106b41bb07630ddd4aa81
7334
7335commit 8ef04d7a94bcdb8b0085fdd2a79a844b7d40792d
7336Author: dtucker@openbsd.org <dtucker@openbsd.org>
7337Date: Wed Mar 2 22:43:52 2016 +0000
7338
7339 upstream commit
7340
7341 Improve accuracy of reported transfer speeds by waiting
7342 for the ack from the other end. Pointed out by mmcc@, ok deraadt@ markus@
7343
7344 Upstream-ID: 99f1cf15c9a8f161086b814d414d862795ae153d
7345
7346commit b8d4eafe29684fe4f5bb587f7eab948e6ed62723
7347Author: dtucker@openbsd.org <dtucker@openbsd.org>
7348Date: Wed Mar 2 22:42:40 2016 +0000
7349
7350 upstream commit
7351
7352 Improve precision of progressmeter for sftp and scp by
7353 storing sub-second timestamps. Pointed out by mmcc@, ok deraadt@ markus@
7354
7355 Upstream-ID: 38fd83a3d83dbf81c8ff7b5d1302382fe54970ab
7356
7357commit 18f64b969c70ed00e74b9d8e50359dbe698ce4c0
7358Author: jca@openbsd.org <jca@openbsd.org>
7359Date: Mon Feb 29 20:22:36 2016 +0000
7360
7361 upstream commit
7362
7363 Print ssize_t with %zd; ok deraadt@ mmcc@
7364
7365 Upstream-ID: 0590313bbb013ff6692298c98f7e0be349d124bd
7366
7367commit 6e7f68ce38130c794ec1fb8d2a6091fbe982628d
7368Author: djm@openbsd.org <djm@openbsd.org>
7369Date: Sun Feb 28 22:27:00 2016 +0000
7370
7371 upstream commit
7372
7373 rearrange DH public value tests to be a little more clear
7374
7375 rearrange DH private value generation to explain rationale more
7376 clearly and include an extra sanity check.
7377
7378 ok deraadt
7379
7380 Upstream-ID: 9ad8a07e1a12684e1b329f9bd88941b249d4b2ad
7381
7382commit 2ed17aa34008bdfc8db674315adc425a0712be11
7383Author: Darren Tucker <dtucker@zip.com.au>
7384Date: Tue Mar 1 15:24:20 2016 +1100
7385
7386 Import updated moduli file from OpenBSD.
7387
7388 Note that 1.5k bit groups have been removed.
7389
7390commit 72b061d4ba0f909501c595d709ea76e06b01e5c9
7391Author: Darren Tucker <dtucker@zip.com.au>
7392Date: Fri Feb 26 14:40:04 2016 +1100
7393
7394 Add a note about using xlc on AIX.
7395
7396commit fd4e4f2416baa2e6565ea49d52aade296bad3e28
7397Author: Darren Tucker <dtucker@zip.com.au>
7398Date: Wed Feb 24 10:44:25 2016 +1100
7399
7400 Skip PrintLastLog in config dump mode.
7401
7402 When DISABLE_LASTLOG is set, do not try to include PrintLastLog in the
7403 config dump since it'll be reported as UNKNOWN.
7404
7405commit 99135c764fa250801da5ec3b8d06cbd0111caae8
7406Author: Damien Miller <djm@mindrot.org>
7407Date: Tue Feb 23 20:17:23 2016 +1100
7408
7409 update spec/README versions ahead of release
7410
7411commit b86a334aaaa4d1e643eb1fd71f718573d6d948b5
7412Author: Damien Miller <djm@mindrot.org>
7413Date: Tue Feb 23 20:16:53 2016 +1100
7414
7415 put back portable patchlevel to p1
7416
7417commit 555dd35ff176847e3c6bd068ba2e8db4022eb24f
7418Author: djm@openbsd.org <djm@openbsd.org>
7419Date: Tue Feb 23 09:14:34 2016 +0000
7420
7421 upstream commit
7422
7423 openssh-7.2
7424
7425 Upstream-ID: 9db776b26014147fc907ece8460ef2bcb0f11e78
7426
7427commit 1acc058d0a7913838c830ed998a1a1fb5b7864bf
7428Author: Damien Miller <djm@mindrot.org>
7429Date: Tue Feb 23 16:12:13 2016 +1100
7430
7431 Disable tests where fs perms are incorrect
7432
7433 Some tests have strict requirements on the filesystem permissions
7434 for certain files and directories. This adds a regress/check-perm
7435 tool that copies the relevant logic from sshd to exactly test
7436 the paths in question. This lets us skip tests when the local
7437 filesystem doesn't conform to our expectations rather than
7438 continuing and failing the test run.
7439
7440 ok dtucker@
7441
7442commit 39f303b1f36d934d8410b05625f25c7bcb75db4d
7443Author: Damien Miller <djm@mindrot.org>
7444Date: Tue Feb 23 12:56:59 2016 +1100
7445
7446 fix sandbox on OSX Lion
7447
7448 sshd was failing with:
7449
7450 ssh_sandbox_child: sandbox_init: dlopen(/usr/lib/libsandbox.1.dylib, 261):cw
7451 image not found [preauth]
7452
7453 caused by chroot before sandboxing. Avoid by explicitly linking libsandbox
7454 to sshd. Spotted by Darren.
7455
7456commit 0d1451a32c7436e6d3d482351e776bc5e7824ce4
7457Author: djm@openbsd.org <djm@openbsd.org>
7458Date: Tue Feb 23 01:34:14 2016 +0000
7459
7460 upstream commit
7461
7462 fix spurious error message when incorrect passphrase
7463 entered for keys; reported by espie@ ok deraadt@
7464
7465 Upstream-ID: 58b2e46e63ed6912ed1ee780bd3bd8560f9a5899
7466
7467commit 09d87d79741beb85768b5e788d7dfdf4bc3543dc
7468Author: sobrado@openbsd.org <sobrado@openbsd.org>
7469Date: Sat Feb 20 23:06:23 2016 +0000
7470
7471 upstream commit
7472
7473 set ssh(1) protocol version to 2 only.
7474
7475 ok djm@
7476
7477 Upstream-ID: e168daf9d27d7e392e3c9923826bd8e87b2b3a10
7478
7479commit 9262e07826ba5eebf8423f7ac9e47ec488c47869
7480Author: sobrado@openbsd.org <sobrado@openbsd.org>
7481Date: Sat Feb 20 23:02:39 2016 +0000
7482
7483 upstream commit
7484
7485 add missing ~/.ssh/id_ecdsa and ~/.ssh/id_ed25519 to
7486 IdentityFile.
7487
7488 ok djm@
7489
7490 Upstream-ID: 6ce99466312e4ae7708017c3665e3edb976f70cf
7491
7492commit c12f0fdce8f985fca8d71829fd64c5b89dc777f5
7493Author: sobrado@openbsd.org <sobrado@openbsd.org>
7494Date: Sat Feb 20 23:01:46 2016 +0000
7495
7496 upstream commit
7497
7498 AddressFamily defaults to any.
7499
7500 ok djm@
7501
7502 Upstream-ID: 0d94aa06a4b889bf57a7f631c45ba36d24c13e0c
7503
7504commit 907091acb188b1057d50c2158f74c3ecf1c2302b
7505Author: Darren Tucker <dtucker@zip.com.au>
7506Date: Fri Feb 19 09:05:39 2016 +1100
7507
7508 Make Solaris privs code build on older systems.
7509
7510 Not all systems with Solaris privs have priv_basicset so factor that
7511 out and provide backward compatibility code. Similarly, not all have
7512 PRIV_NET_ACCESS so wrap that in #ifdef. Based on code from
7513 alex at cooperi.net and djm@ with help from carson at taltos.org and
7514 wieland at purdue.edu.
7515
7516commit 292a8dee14e5e67dcd1b49ba5c7b9023e8420d59
7517Author: djm@openbsd.org <djm@openbsd.org>
7518Date: Wed Feb 17 22:20:14 2016 +0000
7519
7520 upstream commit
7521
7522 rekey refactor broke SSH1; spotted by Tom G. Christensen
7523
7524 Upstream-ID: 43f0d57928cc077c949af0bfa71ef574dcb58243
7525
7526commit 3a13cb543df9919aec2fc6b75f3dd3802facaeca
7527Author: djm@openbsd.org <djm@openbsd.org>
7528Date: Wed Feb 17 08:57:34 2016 +0000
7529
7530 upstream commit
7531
7532 rsa-sha2-512,rsa-sha2-256 cannot be selected explicitly
7533 in *KeyTypes options yet. Remove them from the lists of algorithms for now.
7534 committing on behalf of markus@ ok djm@
7535
7536 Upstream-ID: c6e8820eb8e610ac21551832c0c89684a9a51bb7
7537
7538commit a685ae8d1c24fb7c712c55a4f3280ee76f5f1e4b
7539Author: jmc@openbsd.org <jmc@openbsd.org>
7540Date: Wed Feb 17 07:38:19 2016 +0000
7541
7542 upstream commit
7543
7544 since these pages now clearly tell folks to avoid v1,
7545 normalise the docs from a v2 perspective (i.e. stop pointing out which bits
7546 are v2 only);
7547
7548 ok/tweaks djm ok markus
7549
7550 Upstream-ID: eb474f8c36fb6a532dc05c282f7965e38dcfa129
7551
7552commit c5c3f3279a0e4044b8de71b70d3570d692d0f29d
7553Author: djm@openbsd.org <djm@openbsd.org>
7554Date: Wed Feb 17 05:29:04 2016 +0000
7555
7556 upstream commit
7557
7558 make sandboxed privilege separation the default, not just
7559 for new installs; "absolutely" deraadt@
7560
7561 Upstream-ID: 5221ef3b927d2df044e9aa3f5db74ae91743f69b
7562
7563commit eb3f7337a651aa01d5dec019025e6cdc124ed081
7564Author: jmc@openbsd.org <jmc@openbsd.org>
7565Date: Tue Feb 16 07:47:54 2016 +0000
7566
7567 upstream commit
7568
7569 no need to state that protocol 2 is the default twice;
7570
7571 Upstream-ID: b1e4c36b0c2e12e338e5b66e2978f2ac953b95eb
7572
7573commit e7901efa9b24e5b0c7e74f2c5520d47eead4d005
7574Author: djm@openbsd.org <djm@openbsd.org>
7575Date: Tue Feb 16 05:11:04 2016 +0000
7576
7577 upstream commit
7578
7579 Replace list of ciphers and MACs adjacent to -1/-2 flag
7580 descriptions in ssh(1) with a strong recommendation not to use protocol 1.
7581 Add a similar warning to the Protocol option descriptions in ssh_config(5)
7582 and sshd_config(5);
7583
7584 prompted by and ok mmcc@
7585
7586 Upstream-ID: 961f99e5437d50e636feca023978950a232ead5e
7587
7588commit 5a0fcb77287342e2fc2ba1cee79b6af108973dc2
7589Author: djm@openbsd.org <djm@openbsd.org>
7590Date: Tue Feb 16 03:37:48 2016 +0000
7591
7592 upstream commit
7593
7594 add a "Close session" log entry (at loglevel=verbose) to
7595 correspond to the existing "Starting session" one. Also include the session
7596 id number to make multiplexed sessions more apparent.
7597
7598 feedback and ok dtucker@
7599
7600 Upstream-ID: e72d2ac080e02774376325136e532cb24c2e617c
7601
7602commit 624fd395b559820705171f460dd33d67743d13d6
7603Author: djm@openbsd.org <djm@openbsd.org>
7604Date: Wed Feb 17 02:24:17 2016 +0000
7605
7606 upstream commit
7607
7608 include bad $SSH_CONNECTION in failure output
7609
7610 Upstream-Regress-ID: b22d72edfde78c403aaec2b9c9753ef633cc0529
7611
7612commit 60d860e54b4f199e5e89963b1c086981309753cb
7613Author: Darren Tucker <dtucker@zip.com.au>
7614Date: Wed Feb 17 13:37:09 2016 +1100
7615
7616 Rollback addition of va_start.
7617
7618 va_start was added in 0f754e29dd3760fc0b172c1220f18b753fb0957e, however
7619 it has the wrong number of args and it's not usable in non-variadic
7620 functions anyway so it breaks things (for example Solaris 2.6 as
7621 reported by Tom G. Christensen).i ok djm@
7622
7623commit 2fee909c3cee2472a98b26eb82696297b81e0d38
7624Author: Darren Tucker <dtucker@zip.com.au>
7625Date: Wed Feb 17 09:48:15 2016 +1100
7626
7627 Look for gethostbyname in libresolv and libnsl.
7628
7629 Should fix build problem on Solaris 2.6 reported by Tom G. Christensen.
7630
7631commit 5ac712d81a84396aab441a272ec429af5b738302
7632Author: Damien Miller <djm@mindrot.org>
7633Date: Tue Feb 16 10:45:02 2016 +1100
7634
7635 make existing ssh_malloc_init only for __OpenBSD__
7636
7637commit 24c9bded569d9f2449ded73f92fb6d12db7a9eec
7638Author: djm@openbsd.org <djm@openbsd.org>
7639Date: Mon Feb 15 23:32:37 2016 +0000
7640
7641 upstream commit
7642
7643 memleak of algorithm name in mm_answer_sign; reported by
7644 Jakub Jelen
7645
7646 Upstream-ID: ccd742cd25952240ebd23d7d4d6b605862584d08
7647
7648commit ffb1e7e896139a42ceb78676f637658f44612411
7649Author: dtucker@openbsd.org <dtucker@openbsd.org>
7650Date: Mon Feb 15 09:47:49 2016 +0000
7651
7652 upstream commit
7653
7654 Add a function to enable security-related malloc_options.
7655 With and ok deraadt@, something similar has been in the snaps for a while.
7656
7657 Upstream-ID: 43a95523b832b7f3b943d2908662191110c380ed
7658
7659commit ef39e8c0497ff0564990a4f9e8b7338b3ba3507c
7660Author: Damien Miller <djm@mindrot.org>
7661Date: Tue Feb 16 10:34:39 2016 +1100
7662
7663 sync ssh-copy-id with upstream 783ef08b0a75
7664
7665commit d2d772f55b19bb0e8d03c2fe1b9bb176d9779efd
7666Author: djm@openbsd.org <djm@openbsd.org>
7667Date: Fri Feb 12 00:20:30 2016 +0000
7668
7669 upstream commit
7670
7671 avoid fatal() for PKCS11 tokens that present empty key IDs
7672 bz#1773, ok markus@
7673
7674 Upstream-ID: 044a764fee526f2c4a9d530bd10695422d01fc54
7675
7676commit e4c918a6c721410792b287c9fd21356a1bed5805
7677Author: djm@openbsd.org <djm@openbsd.org>
7678Date: Thu Feb 11 02:56:32 2016 +0000
7679
7680 upstream commit
7681
7682 sync crypto algorithm lists in ssh_config(5) and
7683 sshd_config(5) with current reality. bz#2527
7684
7685 Upstream-ID: d7fd1b6c1ed848d866236bcb1d7049d2bb9b2ff6
7686
7687commit e30cabfa4ab456a30b3224f7f545f1bdfc4a2517
7688Author: djm@openbsd.org <djm@openbsd.org>
7689Date: Thu Feb 11 02:21:34 2016 +0000
7690
7691 upstream commit
7692
7693 fix regression in openssh-6.8 sftp client: existing
7694 destination directories would incorrectly terminate recursive uploads;
7695 bz#2528
7696
7697 Upstream-ID: 3306be469f41f26758e3d447987ac6d662623e18
7698
7699commit 714e367226ded4dc3897078be48b961637350b05
7700Author: djm@openbsd.org <djm@openbsd.org>
7701Date: Tue Feb 9 05:30:04 2016 +0000
7702
7703 upstream commit
7704
7705 turn off more old crypto in the client: hmac-md5, ripemd,
7706 truncated HMACs, RC4, blowfish. ok markus@ dtucker@
7707
7708 Upstream-ID: 96aa11c2c082be45267a690c12f1d2aae6acd46e
7709
7710commit 5a622844ff7f78dcb75e223399f9ef0977e8d0a3
7711Author: djm@openbsd.org <djm@openbsd.org>
7712Date: Mon Feb 8 23:40:12 2016 +0000
7713
7714 upstream commit
7715
7716 don't attempt to percent_expand() already-canonicalised
7717 addresses, avoiding unnecessary failures when attempting to connect to scoped
7718 IPv6 addresses (that naturally contain '%' characters)
7719
7720 Upstream-ID: f24569cffa1a7cbde5f08dc739a72f4d78aa5c6a
7721
7722commit 19bcf2ea2d17413f2d9730dd2a19575ff86b9b6a
7723Author: djm@openbsd.org <djm@openbsd.org>
7724Date: Mon Feb 8 10:57:07 2016 +0000
7725
7726 upstream commit
7727
7728 refactor activation of rekeying
7729
7730 This makes automatic rekeying internal to the packet code (previously
7731 the server and client loops needed to assist). In doing to it makes
7732 application of rekey limits more accurate by accounting for packets
7733 about to be sent as well as packets queued during rekeying events
7734 themselves.
7735
7736 Based on a patch from dtucker@ which was in turn based on a patch
7737 Aleksander Adamowski in bz#2521; ok markus@
7738
7739 Upstream-ID: a441227fd64f9739850ca97b4cf794202860fcd8
7740
7741commit 603ba41179e4b53951c7b90ee95b6ef3faa3f15d
7742Author: naddy@openbsd.org <naddy@openbsd.org>
7743Date: Fri Feb 5 13:28:19 2016 +0000
7744
7745 upstream commit
7746
7747 Only check errno if read() has returned an error. EOF is
7748 not an error. This fixes a problem where the mux master would sporadically
7749 fail to notice that the client had exited. ok mikeb@ djm@
7750
7751 Upstream-ID: 3c2dadc21fac6ef64665688aac8a75fffd57ae53
7752
7753commit 56d7dac790693ce420d225119283bc355cff9185
7754Author: jsg@openbsd.org <jsg@openbsd.org>
7755Date: Fri Feb 5 04:31:21 2016 +0000
7756
7757 upstream commit
7758
7759 avoid an uninitialised value when NumberOfPasswordPrompts
7760 is 0 ok markus@ djm@
7761
7762 Upstream-ID: 11b068d83c2865343aeb46acf1e9eec00f829b6b
7763
7764commit deae7d52d59c5019c528f977360d87fdda15d20b
7765Author: djm@openbsd.org <djm@openbsd.org>
7766Date: Fri Feb 5 03:07:06 2016 +0000
7767
7768 upstream commit
7769
7770 mention internal DH-GEX fallback groups; bz#2302
7771
7772 Upstream-ID: e7b395fcca3122cd825515f45a2e41c9a157e09e
7773
7774commit cac3b6665f884d46192c0dc98a64112e8b11a766
7775Author: djm@openbsd.org <djm@openbsd.org>
7776Date: Fri Feb 5 02:37:56 2016 +0000
7777
7778 upstream commit
7779
7780 better description for MaxSessions; bz#2531
7781
7782 Upstream-ID: e2c0d74ee185cd1a3e9d4ca1f1b939b745b354da
7783
7784commit 5ef4b0fdcc7a239577a754829b50022b91ab4712
7785Author: Damien Miller <djm@mindrot.org>
7786Date: Wed Jan 27 17:45:56 2016 +1100
7787
7788 avoid FreeBSD RCS Id in comment
7789
7790 Change old $FreeBSD version string in comment so it doesn't
7791 become an RCS ident downstream; requested by des AT des.no
7792
7793commit 696d12683c90d20a0a9c5f4275fc916b7011fb04
7794Author: djm@openbsd.org <djm@openbsd.org>
7795Date: Thu Feb 4 23:43:48 2016 +0000
7796
7797 upstream commit
7798
7799 printf argument casts to avoid warnings on strict
7800 compilers
7801
7802 Upstream-ID: 7b9f6712cef01865ad29070262d366cf13587c9c
7803
7804commit 5658ef2501e785fbbdf5de2dc33b1ff7a4dca73a
7805Author: millert@openbsd.org <millert@openbsd.org>
7806Date: Mon Feb 1 21:18:17 2016 +0000
7807
7808 upstream commit
7809
7810 Avoid ugly "DISPLAY "(null)" invalid; disabling X11
7811 forwarding" message when DISPLAY is not set. This could also result in a
7812 crash on systems with a printf that doesn't handle NULL. OK djm@
7813
7814 Upstream-ID: 20ee0cfbda678a247264c20ed75362042b90b412
7815
7816commit 537f88ec7bcf40bd444ac5584c707c5588c55c43
7817Author: dtucker@openbsd.org <dtucker@openbsd.org>
7818Date: Fri Jan 29 05:18:15 2016 +0000
7819
7820 upstream commit
7821
7822 Add regression test for RekeyLimit parsing of >32bit values
7823 (4G and 8G).
7824
7825 Upstream-Regress-ID: 548390350c62747b6234f522a99c319eee401328
7826
7827commit 4c6cb8330460f94e6c7ae28a364236d4188156a3
7828Author: dtucker@openbsd.org <dtucker@openbsd.org>
7829Date: Fri Jan 29 23:04:46 2016 +0000
7830
7831 upstream commit
7832
7833 Remove leftover roaming dead code. ok djm markus.
7834
7835 Upstream-ID: 13d1f9c8b65a5109756bcfd3b74df949d53615be
7836
7837commit 28136471809806d6246ef41e4341467a39fe2f91
7838Author: djm@openbsd.org <djm@openbsd.org>
7839Date: Fri Jan 29 05:46:01 2016 +0000
7840
7841 upstream commit
7842
7843 include packet type of non-data packets in debug3 output;
7844 ok markus dtucker
7845
7846 Upstream-ID: 034eaf639acc96459b9c5ce782db9fcd8bd02d41
7847
7848commit 6fd6e28daccafaa35f02741036abe64534c361a1
7849Author: dtucker@openbsd.org <dtucker@openbsd.org>
7850Date: Fri Jan 29 03:31:03 2016 +0000
7851
7852 upstream commit
7853
7854 Revert "account for packets buffered but not yet
7855 processed" change as it breaks for very small RekeyLimit values due to
7856 continuous rekeying. ok djm@
7857
7858 Upstream-ID: 7e03f636cb45ab60db18850236ccf19079182a19
7859
7860commit 921ff00b0ac429666fb361d2d6cb1c8fff0006cb
7861Author: dtucker@openbsd.org <dtucker@openbsd.org>
7862Date: Fri Jan 29 02:54:45 2016 +0000
7863
7864 upstream commit
7865
7866 Allow RekeyLimits in excess of 4G up to 2**63 bits
7867 (limited by the return type of scan_scaled). Part of bz#2521, ok djm.
7868
7869 Upstream-ID: 13bea82be566b9704821b1ea05bf7804335c7979
7870
7871commit c0060a65296f01d4634f274eee184c0e93ba0f23
7872Author: dtucker@openbsd.org <dtucker@openbsd.org>
7873Date: Fri Jan 29 02:42:46 2016 +0000
7874
7875 upstream commit
7876
7877 Account for packets buffered but not yet processed when
7878 computing whether or not it is time to perform rekeying. bz#2521, based
7879 loosely on a patch from olo at fb.com, ok djm@
7880
7881 Upstream-ID: 67e268b547f990ed220f3cb70a5624d9bda12b8c
7882
7883commit 44cf930e670488c85c9efeb373fa5f4b455692ac
7884Author: djm@openbsd.org <djm@openbsd.org>
7885Date: Wed Jan 27 06:44:58 2016 +0000
7886
7887 upstream commit
7888
7889 change old $FreeBSD version string in comment so it doesn't
7890 become an RCS ident downstream; requested by des AT des.no
7891
7892 Upstream-ID: 8ca558c01f184e596b45e4fc8885534b2c864722
7893
7894commit ebacd377769ac07d1bf3c75169644336056b7060
7895Author: djm@openbsd.org <djm@openbsd.org>
7896Date: Wed Jan 27 00:53:12 2016 +0000
7897
7898 upstream commit
7899
7900 make the debug messages a bit more useful here
7901
7902 Upstream-ID: 478ccd4e897e0af8486b294aa63aa3f90ab78d64
7903
7904commit 458abc2934e82034c5c281336d8dc0f910aecad3
7905Author: jsg@openbsd.org <jsg@openbsd.org>
7906Date: Sat Jan 23 05:31:35 2016 +0000
7907
7908 upstream commit
7909
7910 Zero a stack buffer with explicit_bzero() instead of
7911 memset() when returning from client_loop() for consistency with
7912 buffer_free()/sshbuf_free().
7913
7914 ok dtucker@ deraadt@ djm@
7915
7916 Upstream-ID: bc9975b2095339811c3b954694d7d15ea5c58f66
7917
7918commit 65a3c0dacbc7dbb75ddb6a70ebe22d8de084d0b0
7919Author: dtucker@openbsd.org <dtucker@openbsd.org>
7920Date: Wed Jan 20 09:22:39 2016 +0000
7921
7922 upstream commit
7923
7924 Include sys/time.h for gettimeofday. From sortie at
7925 maxsi.org.
7926
7927 Upstream-ID: 6ed0c33b836d9de0a664cd091e86523ecaa2fb3b
7928
7929commit fc77ccdc2ce6d5d06628b8da5048a6a5f6ffca5a
7930Author: markus@openbsd.org <markus@openbsd.org>
7931Date: Thu Jan 14 22:56:56 2016 +0000
7932
7933 upstream commit
7934
7935 fd leaks; report Qualys Security Advisory team; ok
7936 deraadt@
7937
7938 Upstream-ID: 4ec0f12b9d8fa202293c9effa115464185aa071d
7939
7940commit a306863831c57ec5fad918687cc5d289ee8e2635
7941Author: markus@openbsd.org <markus@openbsd.org>
7942Date: Thu Jan 14 16:17:39 2016 +0000
7943
7944 upstream commit
7945
7946 remove roaming support; ok djm@
7947
7948 Upstream-ID: 2cab8f4b197bc95776fb1c8dc2859dad0c64dc56
7949
7950commit 6ef49e83e30688504552ac10875feabd5521565f
7951Author: deraadt@openbsd.org <deraadt@openbsd.org>
7952Date: Thu Jan 14 14:34:34 2016 +0000
7953
7954 upstream commit
7955
7956 Disable experimental client-side roaming support. Server
7957 side was disabled/gutted for years already, but this aspect was surprisingly
7958 forgotten. Thanks for report from Qualys
7959
7960 Upstream-ID: 2328004b58f431a554d4c1bf67f5407eae3389df
7961
7962commit 8d7b523b96d3be180572d9d338cedaafc0570f60
7963Author: Damien Miller <djm@mindrot.org>
7964Date: Thu Jan 14 11:08:19 2016 +1100
7965
7966 bump version numbers
7967
7968commit 8c3d512a1fac8b9c83b4d0c9c3f2376290bd84ca
7969Author: Damien Miller <djm@mindrot.org>
7970Date: Thu Jan 14 11:04:04 2016 +1100
7971
7972 openssh-7.1p2
7973
7974commit e6c85f8889c5c9eb04796fdb76d2807636b9eef5
7975Author: Damien Miller <djm@mindrot.org>
7976Date: Fri Jan 15 01:30:36 2016 +1100
7977
7978 forcibly disable roaming support in the client
7979
7980commit ed4ce82dbfa8a3a3c8ea6fa0db113c71e234416c
7981Author: djm@openbsd.org <djm@openbsd.org>
7982Date: Wed Jan 13 23:04:47 2016 +0000
7983
7984 upstream commit
7985
7986 eliminate fallback from untrusted X11 forwarding to trusted
7987 forwarding when the X server disables the SECURITY extension; Reported by
7988 Thomas Hoger; ok deraadt@
7989
7990 Upstream-ID: f76195bd2064615a63ef9674a0e4096b0713f938
7991
7992commit 9a728cc918fad67c8a9a71201088b1e150340ba4
7993Author: djm@openbsd.org <djm@openbsd.org>
7994Date: Tue Jan 12 23:42:54 2016 +0000
7995
7996 upstream commit
7997
7998 use explicit_bzero() more liberally in the buffer code; ok
7999 deraadt
8000
8001 Upstream-ID: 0ece37069fd66bc6e4f55eb1321f93df372b65bf
8002
8003commit 4626cbaf78767fc8e9c86dd04785386c59ae0839
8004Author: Damien Miller <djm@mindrot.org>
8005Date: Fri Jan 8 14:24:56 2016 +1100
8006
8007 Support Illumos/Solaris fine-grained privileges
8008
8009 Includes a pre-auth privsep sandbox and several pledge()
8010 emulations. bz#2511, patch by Alex Wilson.
8011
8012 ok dtucker@
8013
8014commit 422d1b3ee977ff4c724b597fb2e437d38fc8de9d
8015Author: djm@openbsd.org <djm@openbsd.org>
8016Date: Thu Dec 31 00:33:52 2015 +0000
8017
8018 upstream commit
8019
8020 fix three bugs in KRL code related to (unused) signature
8021 support: verification length was being incorrectly calculated, multiple
8022 signatures were being incorrectly processed and a NULL dereference that
8023 occurred when signatures were verified. Reported by Carl Jackson
8024
8025 Upstream-ID: e705e97ad3ccce84291eaa651708dd1b9692576b
8026
8027commit 6074c84bf95d00f29cc7d5d3cd3798737851aa1a
8028Author: djm@openbsd.org <djm@openbsd.org>
8029Date: Wed Dec 30 23:46:14 2015 +0000
8030
8031 upstream commit
8032
8033 unused prototype
8034
8035 Upstream-ID: f3eef4389d53ed6c0d5c77dcdcca3060c745da97
8036
8037commit 6213f0e180e54122bb1ba928e11c784e2b4e5380
8038Author: guenther@openbsd.org <guenther@openbsd.org>
8039Date: Sat Dec 26 20:51:35 2015 +0000
8040
8041 upstream commit
8042
8043 Use pread/pwrite instead separate lseek+read/write for
8044 lastlog. Cast to off_t before multiplication to avoid truncation on ILP32
8045
8046 ok kettenis@ mmcc@
8047
8048 Upstream-ID: fc40092568cd195719ddf1a00aa0742340d616cf
8049
8050commit d7d2bc95045a43dd56ea696cc1d030ac9d77e81f
8051Author: semarie@openbsd.org <semarie@openbsd.org>
8052Date: Sat Dec 26 07:46:03 2015 +0000
8053
8054 upstream commit
8055
8056 adjust pledge promises for ControlMaster: when using
8057 "ask" or "autoask", the process will use ssh-askpass for asking confirmation.
8058
8059 problem found by halex@
8060
8061 ok halex@
8062
8063 Upstream-ID: 38a58b30ae3eef85051c74d3c247216ec0735f80
8064
8065commit 271df8185d9689b3fb0523f58514481b858f6843
8066Author: djm@openbsd.org <djm@openbsd.org>
8067Date: Sun Dec 13 22:42:23 2015 +0000
8068
8069 upstream commit
8070
8071 unbreak connections with peers that set
8072 first_kex_follows; fix from Matt Johnston va bz#2515
8073
8074 Upstream-ID: decc88ec4fc7515594fdb42b04aa03189a44184b
8075
8076commit 43849a47c5f8687699eafbcb5604f6b9c395179f
8077Author: doug@openbsd.org <doug@openbsd.org>
8078Date: Fri Dec 11 17:41:37 2015 +0000
8079
8080 upstream commit
8081
8082 Add "id" to ssh-agent pledge for subprocess support.
8083
8084 Found the hard way by Jan Johansson when using ssh-agent with X. Also,
8085 rearranged proc/exec and retval to match other pledge calls in the tree.
8086
8087 ok djm@
8088
8089 Upstream-ID: 914255f6850e5e7fa830a2de6c38605333b584db
8090
8091commit 52d7078421844b2f88329f5be3de370b0a938636
8092Author: mmcc@openbsd.org <mmcc@openbsd.org>
8093Date: Fri Dec 11 04:21:11 2015 +0000
8094
8095 upstream commit
8096
8097 Remove NULL-checks before sshbuf_free().
8098
8099 ok djm@
8100
8101 Upstream-ID: 5ebed00ed5f9f03b119a345085e8774565466917
8102
8103commit a4b9e0f4e4a6980a0eb8072f76ea611cab5b77e7
8104Author: djm@openbsd.org <djm@openbsd.org>
8105Date: Fri Dec 11 03:24:25 2015 +0000
8106
8107 upstream commit
8108
8109 include remote port number in a few more messages; makes
8110 tying log messages together into a session a bit easier; bz#2503 ok dtucker@
8111
8112 Upstream-ID: 9300dc354015f7a7368d94a8ff4a4266a69d237e
8113
8114commit 6091c362e89079397e68744ae30df121b0a72c07
8115Author: djm@openbsd.org <djm@openbsd.org>
8116Date: Fri Dec 11 03:20:09 2015 +0000
8117
8118 upstream commit
8119
8120 don't try to load SSHv1 private key when compiled without
8121 SSHv1 support. From Iain Morgan bz#2505
8122
8123 Upstream-ID: 8b8e7b02a448cf5e5635979df2d83028f58868a7
8124
8125commit cce6a36bb95e81fa8bfb46daf22eabcf13afc352
8126Author: djm@openbsd.org <djm@openbsd.org>
8127Date: Fri Dec 11 03:19:09 2015 +0000
8128
8129 upstream commit
8130
8131 use SSH_MAX_PUBKEY_BYTES consistently as buffer size when
8132 reading key files. Increase it to match the size of the buffers already being
8133 used.
8134
8135 Upstream-ID: 1b60586b484b55a947d99a0b32bd25e0ced56fae
8136
8137commit 89540b6de025b80404a0cb8418c06377f3f98848
8138Author: mmcc@openbsd.org <mmcc@openbsd.org>
8139Date: Fri Dec 11 02:31:47 2015 +0000
8140
8141 upstream commit
8142
8143 Remove NULL-checks before sshkey_free().
8144
8145 ok djm@
8146
8147 Upstream-ID: 3e35afe8a25e021216696b5d6cde7f5d2e5e3f52
8148
8149commit 79394ed6d74572c2d2643d73937dad33727fc240
8150Author: dtucker@openbsd.org <dtucker@openbsd.org>
8151Date: Fri Dec 11 02:29:03 2015 +0000
8152
8153 upstream commit
8154
8155 fflush stdout so that output is seen even when running in
8156 debug mode when output may otherwise not be flushed. Patch from dustin at
8157 null-ptr.net.
8158
8159 Upstream-ID: b0c6b4cd2cdb01d7e9eefbffdc522e35b5bc4acc
8160
8161commit ee607cccb6636eb543282ba90e0677b0604d8b7a
8162Author: Darren Tucker <dtucker@zip.com.au>
8163Date: Tue Dec 15 15:23:49 2015 +1100
8164
8165 Increase robustness of redhat/openssh.spec
8166
8167 - remove configure --with-rsh, because this option isn't supported anymore
8168 - replace last occurrence of BuildPreReq by BuildRequires
8169 - update grep statement to query the krb5 include directory
8170
8171 Patch from CarstenGrohmann via github, ok djm.
8172
8173commit b5fa0cd73555b991a543145603658d7088ec6b60
8174Author: Darren Tucker <dtucker@zip.com.au>
8175Date: Tue Dec 15 15:10:32 2015 +1100
8176
8177 Allow --without-ssl-engine with --without-openssl
8178
8179 Patch from Mike Frysinger via github.
8180
8181commit c1d7e546f6029024f3257cc25c92f2bddf163125
8182Author: Darren Tucker <dtucker@zip.com.au>
8183Date: Tue Dec 15 14:27:09 2015 +1100
8184
8185 Include openssl crypto.h for SSLeay.
8186
8187 Patch from doughdemon via github.
8188
8189commit c6f5f01651526e88c00d988ce59d71f481ebac62
8190Author: Darren Tucker <dtucker@zip.com.au>
8191Date: Tue Dec 15 13:59:12 2015 +1100
8192
8193 Add sys/time.h for gettimeofday.
8194
8195 Should allow it it compile with MUSL libc. Based on patch from
8196 doughdemon via github.
8197
8198commit 39736be06c7498ef57d6970f2d85cf066ae57c82
8199Author: djm@openbsd.org <djm@openbsd.org>
8200Date: Fri Dec 11 02:20:28 2015 +0000
8201
8202 upstream commit
8203
8204 correct error messages; from Tomas Kuthan bz#2507
8205
8206 Upstream-ID: 7454a0affeab772398052954c79300aa82077093
8207
8208commit 94141b7ade24afceeb6762a3f99e09e47a6c42b6
8209Author: mmcc@openbsd.org <mmcc@openbsd.org>
8210Date: Fri Dec 11 00:20:04 2015 +0000
8211
8212 upstream commit
8213
8214 Pass (char *)NULL rather than (char *)0 to execl and
8215 execlp.
8216
8217 ok dtucker@
8218
8219 Upstream-ID: 56c955106cbddba86c3dd9bbf786ac0d1b361492
8220
8221commit d59ce08811bf94111c2f442184cf7d1257ffae24
8222Author: mmcc@openbsd.org <mmcc@openbsd.org>
8223Date: Thu Dec 10 17:08:40 2015 +0000
8224
8225 upstream commit
8226
8227 Remove NULL-checks before free().
8228
8229 ok dtucker@
8230
8231 Upstream-ID: e3d3cb1ce900179906af36517b5eea0fb15e6ef8
8232
8233commit 8e56dd46cb37879c73bce2d6032cf5e7f82d5a71
8234Author: mmcc@openbsd.org <mmcc@openbsd.org>
8235Date: Thu Dec 10 07:01:35 2015 +0000
8236
8237 upstream commit
8238
8239 Fix a couple "the the" typos. ok dtucker@
8240
8241 Upstream-ID: ec364c5af32031f013001fd28d1bd3dfacfe9a72
8242
8243commit 6262a0522ddc2c0f2e9358dcb68d59b46e9c533e
8244Author: markus@openbsd.org <markus@openbsd.org>
8245Date: Mon Dec 7 20:04:09 2015 +0000
8246
8247 upstream commit
8248
8249 stricter encoding type checks for ssh-rsa; ok djm@
8250
8251 Upstream-ID: 8cca7c787599a5e8391e184d0b4f36fdc3665650
8252
8253commit d86a3ba7af160c13496102aed861ae48a4297072
8254Author: Damien Miller <djm@mindrot.org>
8255Date: Wed Dec 9 09:18:45 2015 +1100
8256
8257 Don't set IPV6_V6ONLY on OpenBSD
8258
8259 It isn't necessary and runs afoul of pledge(2) restrictions.
8260
8261commit da98c11d03d819a15429d8fff9688acd7505439f
8262Author: djm@openbsd.org <djm@openbsd.org>
8263Date: Mon Dec 7 02:20:46 2015 +0000
8264
8265 upstream commit
8266
8267 basic unit tests for rsa-sha2-* signature types
8268
8269 Upstream-Regress-ID: 7dc4b9db809d578ff104d591b4d86560c3598d3c
8270
8271commit 3da893fdec9936dd2c23739cdb3c0c9d4c59fca0
8272Author: markus@openbsd.org <markus@openbsd.org>
8273Date: Sat Dec 5 20:53:21 2015 +0000
8274
8275 upstream commit
8276
8277 prefer rsa-sha2-512 over -256 for hostkeys, too; noticed
8278 by naddy@
8279
8280 Upstream-ID: 685f55f7ec566a8caca587750672723a0faf3ffe
8281
8282commit 8b56e59714d87181505e4678f0d6d39955caf10e
8283Author: tobias@openbsd.org <tobias@openbsd.org>
8284Date: Fri Dec 4 21:51:06 2015 +0000
8285
8286 upstream commit
8287
8288 Properly handle invalid %-format by calling fatal.
8289
8290 ok deraadt, djm
8291
8292 Upstream-ID: 5692bce7d9f6eaa9c488cb93d3b55e758bef1eac
8293
8294commit 76c9fbbe35aabc1db977fb78e827644345e9442e
8295Author: markus@openbsd.org <markus@openbsd.org>
8296Date: Fri Dec 4 16:41:28 2015 +0000
8297
8298 upstream commit
8299
8300 implement SHA2-{256,512} for RSASSA-PKCS1-v1_5 signatures
8301 (user and host auth) based on draft-rsa-dsa-sha2-256-03.txt and
8302 draft-ssh-ext-info-04.txt; with & ok djm@
8303
8304 Upstream-ID: cf82ce532b2733e5c4b34bb7b7c94835632db309
8305
8306commit 6064a8b8295cb5a17b5ebcfade53053377714f40
8307Author: djm@openbsd.org <djm@openbsd.org>
8308Date: Fri Dec 4 00:24:55 2015 +0000
8309
8310 upstream commit
8311
8312 clean up agent_fd handling; properly initialise it to -1
8313 and make tests consistent
8314
8315 ok markus@
8316
8317 Upstream-ID: ac9554323d5065745caf17b5e37cb0f0d4825707
8318
8319commit b91926a97620f3e51761c271ba57aa5db790f48d
8320Author: semarie@openbsd.org <semarie@openbsd.org>
8321Date: Thu Dec 3 17:00:18 2015 +0000
8322
8323 upstream commit
8324
8325 pledges ssh client: - mux client: which is used when
8326 ControlMaster is in use. will end with "stdio proc tty" (proc is to
8327 permit sending SIGWINCH to mux master on window resize)
8328
8329 - client loop: several levels of pledging depending of your used options
8330
8331 ok deraadt@
8332
8333 Upstream-ID: 21676155a700e51f2ce911e33538e92a2cd1d94b
8334
8335commit bcce47466bbc974636f588b5e4a9a18ae386f64a
8336Author: doug@openbsd.org <doug@openbsd.org>
8337Date: Wed Dec 2 08:30:50 2015 +0000
8338
8339 upstream commit
8340
8341 Add "cpath" to the ssh-agent pledge so the cleanup
8342 handler can unlink().
8343
8344 ok djm@
8345
8346 Upstream-ID: 9e632991d48241d56db645602d381253a3d8c29d
8347
8348commit a90d001543f46716b6590c6dcc681d5f5322f8cf
8349Author: djm@openbsd.org <djm@openbsd.org>
8350Date: Wed Dec 2 08:00:58 2015 +0000
8351
8352 upstream commit
8353
8354 ssh-agent pledge needs proc for askpass; spotted by todd@
8355
8356 Upstream-ID: 349aa261b29cc0e7de47ef56167769c432630b2a
8357
8358commit d952162b3c158a8f23220587bb6c8fcda75da551
8359Author: djm@openbsd.org <djm@openbsd.org>
8360Date: Tue Dec 1 23:29:24 2015 +0000
8361
8362 upstream commit
8363
8364 basic pledge() for ssh-agent, more refinement needed
8365
8366 Upstream-ID: 5b5b03c88162fce549e45e1b6dd833f20bbb5e13
8367
8368commit f0191d7c8e76e30551084b79341886d9bb38e453
8369Author: Damien Miller <djm@mindrot.org>
8370Date: Mon Nov 30 10:53:25 2015 +1100
8371
8372 Revert "stub for pledge(2) for systems that lack it"
8373
8374 This reverts commit 14c887c8393adde2d9fd437d498be30f8c98535c.
8375
8376 dtucker beat me to it :/
8377
8378commit 6283cc72eb0e49a3470d30e07ca99a1ba9e89676
8379Author: Damien Miller <djm@mindrot.org>
8380Date: Mon Nov 30 10:37:03 2015 +1100
8381
8382 revert 7d4c7513: bring back S/Key prototypes
8383
8384 (but leave RCSID changes)
8385
8386commit 14c887c8393adde2d9fd437d498be30f8c98535c
8387Author: Damien Miller <djm@mindrot.org>
8388Date: Mon Nov 30 09:45:29 2015 +1100
8389
8390 stub for pledge(2) for systems that lack it
8391
8392commit 452c0b6af5d14c37553e30059bf74456012493f3
8393Author: djm@openbsd.org <djm@openbsd.org>
8394Date: Sun Nov 29 22:18:37 2015 +0000
8395
8396 upstream commit
8397
8398 pledge, better fatal() messages; feedback deraadt@
8399
8400 Upstream-ID: 3e00f6ccfe2b9a7a2d1dbba5409586180801488f
8401
8402commit 6da413c085dba37127687b2617a415602505729b
8403Author: deraadt@openbsd.org <deraadt@openbsd.org>
8404Date: Sat Nov 28 06:50:52 2015 +0000
8405
8406 upstream commit
8407
8408 do not leak temp file if there is no known_hosts file
8409 from craig leres, ok djm
8410
8411 Upstream-ID: c820497fd5574844c782e79405c55860f170e426
8412
8413commit 3ddd15e1b63a4d4f06c8ab16fbdd8a5a61764f16
8414Author: Darren Tucker <dtucker@zip.com.au>
8415Date: Mon Nov 30 07:23:53 2015 +1100
8416
8417 Add a null implementation of pledge.
8418
8419 Fixes builds on almost everything.
8420
8421commit b1d6b3971ef256a08692efc409fc9ada719111cc
8422Author: djm@openbsd.org <djm@openbsd.org>
8423Date: Sat Nov 28 06:41:03 2015 +0000
8424
8425 upstream commit
8426
8427 don't include port number in tcpip-forward replies for
8428 requests that don't allocate a port; bz#2509 diagnosed by Ron Frederick ok
8429 markus
8430
8431 Upstream-ID: 77efad818addb61ec638b5a2362f1554e21a970a
8432
8433commit 9080bd0b9cf10d0f13b1f642f20cb84285cb8d65
8434Author: deraadt@openbsd.org <deraadt@openbsd.org>
8435Date: Fri Nov 27 00:49:31 2015 +0000
8436
8437 upstream commit
8438
8439 pledge "stdio rpath wpath cpath fattr tty proc exec"
8440 except for the -p option (which sadly has insane semantics...) ok semarie
8441 dtucker
8442
8443 Upstream-ID: 8854bbd58279abe00f6c33f8094bdc02c8c65059
8444
8445commit 4d90625b229cf6b3551d81550a9861897509a65f
8446Author: halex@openbsd.org <halex@openbsd.org>
8447Date: Fri Nov 20 23:04:01 2015 +0000
8448
8449 upstream commit
8450
8451 allow comment change for all supported formats
8452
8453 ok djm@
8454
8455 Upstream-ID: 5fc477cf2f119b2d44aa9c683af16cb00bb3744b
8456
8457commit 8ca915fc761519dd1f7766a550ec597a81db5646
8458Author: djm@openbsd.org <djm@openbsd.org>
8459Date: Fri Nov 20 01:45:29 2015 +0000
8460
8461 upstream commit
8462
8463 add cast to make -Werror clean
8464
8465 Upstream-ID: 288db4f8f810bd475be01320c198250a04ff064d
8466
8467commit ac9473580dcd401f8281305af98635cdaae9bf96
8468Author: Damien Miller <djm@mindrot.org>
8469Date: Fri Nov 20 12:35:41 2015 +1100
8470
8471 fix multiple authentication using S/Key w/ privsep
8472
8473 bz#2502, patch from Kevin Korb and feandil_
8474
8475commit 88b6fcdeb87a2fb76767854d9eb15006662dca57
8476Author: djm@openbsd.org <djm@openbsd.org>
8477Date: Thu Nov 19 08:23:27 2015 +0000
8478
8479 upstream commit
8480
8481 ban ConnectionAttempts=0, it makes no sense and would cause
8482 ssh_connect_direct() to print an uninitialised stack variable; bz#2500
8483 reported by dvw AT phas.ubc.ca
8484
8485 Upstream-ID: 32b5134c608270583a90b93a07b3feb3cbd5f7d5
8486
8487commit 964ab3ee7a8f96bdbc963d5b5a91933d6045ebe7
8488Author: djm@openbsd.org <djm@openbsd.org>
8489Date: Thu Nov 19 01:12:32 2015 +0000
8490
8491 upstream commit
8492
8493 trailing whitespace
8494
8495 Upstream-ID: 31fe0ad7c4d08e87f1d69c79372f5e3c5cd79051
8496
8497commit f96516d052dbe38561f6b92b0e4365d8e24bb686
8498Author: djm@openbsd.org <djm@openbsd.org>
8499Date: Thu Nov 19 01:09:38 2015 +0000
8500
8501 upstream commit
8502
8503 print host certificate contents at debug level
8504
8505 Upstream-ID: 39354cdd8a2b32b308fd03f98645f877f540f00d
8506
8507commit 499cf36fecd6040e30e2912dd25655bc574739a7
8508Author: djm@openbsd.org <djm@openbsd.org>
8509Date: Thu Nov 19 01:08:55 2015 +0000
8510
8511 upstream commit
8512
8513 move the certificate validity formatting code to
8514 sshkey.[ch]
8515
8516 Upstream-ID: f05f7c78fab20d02ff1d5ceeda533ef52e8fe523
8517
8518commit bcb7bc77bbb1535d1008c7714085556f3065d99d
8519Author: djm@openbsd.org <djm@openbsd.org>
8520Date: Wed Nov 18 08:37:28 2015 +0000
8521
8522 upstream commit
8523
8524 fix "ssh-keygen -l" of private key, broken in support for
8525 multiple plain keys on stdin
8526
8527 Upstream-ID: 6b3132d2c62d03d0bad6f2bcd7e2d8b7dab5cd9d
8528
8529commit 259adb6179e23195c8f6913635ea71040d1ccd63
8530Author: millert@openbsd.org <millert@openbsd.org>
8531Date: Mon Nov 16 23:47:52 2015 +0000
8532
8533 upstream commit
8534
8535 Replace remaining calls to index(3) with strchr(3). OK
8536 jca@ krw@
8537
8538 Upstream-ID: 33837d767a0cf1db1489b96055f9e330bc0bab6d
8539
8540commit c56a255162c2166884539c0a1f7511575325b477
8541Author: djm@openbsd.org <djm@openbsd.org>
8542Date: Mon Nov 16 22:53:07 2015 +0000
8543
8544 upstream commit
8545
8546 Allow fingerprinting from standard input "ssh-keygen -lf
8547 -"
8548
8549 Support fingerprinting multiple plain keys in a file and authorized_keys
8550 files too (bz#1319)
8551
8552 ok markus@
8553
8554 Upstream-ID: 903f8b4502929d6ccf53509e4e07eae084574b77
8555
8556commit 5b4010d9b923cf1b46c9c7b1887c013c2967e204
8557Author: djm@openbsd.org <djm@openbsd.org>
8558Date: Mon Nov 16 22:51:05 2015 +0000
8559
8560 upstream commit
8561
8562 always call privsep_preauth_child() regardless of whether
8563 sshd was started by root; it does important priming before sandboxing and
8564 failing to call it could result in sandbox violations later; ok markus@
8565
8566 Upstream-ID: c8a6d0d56c42f3faab38460dc917ca0d1705d383
8567
8568commit 3a9f84b58b0534bbb485f1eeab75665e2d03371f
8569Author: djm@openbsd.org <djm@openbsd.org>
8570Date: Mon Nov 16 22:50:01 2015 +0000
8571
8572 upstream commit
8573
8574 improve sshkey_read() semantics; only update *cpp when a
8575 key is successfully read; ok markus@
8576
8577 Upstream-ID: f371e78e8f4fab366cf69a42bdecedaed5d1b089
8578
8579commit db6f8dc5dd5655b59368efd074994d4568bc3556
8580Author: logan@openbsd.org <logan@openbsd.org>
8581Date: Mon Nov 16 06:13:04 2015 +0000
8582
8583 upstream commit
8584
8585 1) Use xcalloc() instead of xmalloc() to check for
8586 potential overflow. (Feedback from both mmcc@ and djm@) 2) move set_size
8587 just before the for loop. (suggested by djm@)
8588
8589 OK djm@
8590
8591 Upstream-ID: 013534c308187284756c3141f11d2c0f33c47213
8592
8593commit 383f10fb84a0fee3c01f9d97594f3e22aa3cd5e0
8594Author: djm@openbsd.org <djm@openbsd.org>
8595Date: Mon Nov 16 00:30:02 2015 +0000
8596
8597 upstream commit
8598
8599 Add a new authorized_keys option "restrict" that
8600 includes all current and future key restrictions (no-*-forwarding, etc). Also
8601 add permissive versions of the existing restrictions, e.g. "no-pty" -> "pty".
8602 This simplifies the task of setting up restricted keys and ensures they are
8603 maximally-restricted, regardless of any permissions we might implement in the
8604 future.
8605
8606 Example:
8607
8608 restrict,pty,command="nethack" ssh-ed25519 AAAAC3NzaC1lZDI1...
8609
8610 Idea from Jann Horn; ok markus@
8611
8612 Upstream-ID: 04ceb9d448e46e67e13887a7ae5ea45b4f1719d0
8613
8614commit e41a071f7bda6af1fb3f081bed0151235fa61f15
8615Author: jmc@openbsd.org <jmc@openbsd.org>
8616Date: Sun Nov 15 23:58:04 2015 +0000
8617
8618 upstream commit
8619
8620 correct section number for ssh-agent;
8621
8622 Upstream-ID: 44be72fd8bcc167635c49b357b1beea8d5674bd6
8623
8624commit 1a11670286acddcc19f5eff0966c380831fc4638
8625Author: jmc@openbsd.org <jmc@openbsd.org>
8626Date: Sun Nov 15 23:54:15 2015 +0000
8627
8628 upstream commit
8629
8630 do not confuse mandoc by presenting "Dd";
8631
8632 Upstream-ID: 1470fce171c47b60bbc7ecd0fc717a442c2cfe65
8633
8634commit f361df474c49a097bfcf16d1b7b5c36fcd844b4b
8635Author: jcs@openbsd.org <jcs@openbsd.org>
8636Date: Sun Nov 15 22:26:49 2015 +0000
8637
8638 upstream commit
8639
8640 Add an AddKeysToAgent client option which can be set to
8641 'yes', 'no', 'ask', or 'confirm', and defaults to 'no'. When enabled, a
8642 private key that is used during authentication will be added to ssh-agent if
8643 it is running (with confirmation enabled if set to 'confirm').
8644
8645 Initial version from Joachim Schipper many years ago.
8646
8647 ok markus@
8648
8649 Upstream-ID: a680db2248e8064ec55f8be72d539458c987d5f4
8650
8651commit d87063d9baf5479b6e813d47dfb694a97df6f6f5
8652Author: djm@openbsd.org <djm@openbsd.org>
8653Date: Fri Nov 13 04:39:35 2015 +0000
8654
8655 upstream commit
8656
8657 send SSH2_MSG_UNIMPLEMENTED replies to unexpected
8658 messages during KEX; bz#2949, ok dtucker@
8659
8660 Upstream-ID: 2b3abdff344d53c8d505f45c83a7b12e84935786
8661
8662commit 9fd04681a1e9b0af21e08ff82eb674cf0a499bfc
8663Author: djm@openbsd.org <djm@openbsd.org>
8664Date: Fri Nov 13 04:38:06 2015 +0000
8665
8666 upstream commit
8667
8668 Support "none" as an argument for sshd_config
8669 ForceCommand and ChrootDirectory. Useful inside Match blocks to override a
8670 global default. bz#2486 ok dtucker@
8671
8672 Upstream-ID: 7ef478d6592bc7db5c7376fc33b4443e63dccfa5
8673
8674commit 94bc0b72c29e511cbbc5772190d43282e5acfdfe
8675Author: djm@openbsd.org <djm@openbsd.org>
8676Date: Fri Nov 13 04:34:15 2015 +0000
8677
8678 upstream commit
8679
8680 support multiple certificates (one per line) and
8681 reading from standard input (using "-f -") for "ssh-keygen -L"; ok dtucker@
8682
8683 Upstream-ID: ecbadeeef3926e5be6281689b7250a32a80e88db
8684
8685commit b6b9108f5b561c83612cb97ece4134eb59fde071
8686Author: djm@openbsd.org <djm@openbsd.org>
8687Date: Fri Nov 13 02:57:46 2015 +0000
8688
8689 upstream commit
8690
8691 list a couple more options usable in Match blocks;
8692 bz#2489
8693
8694 Upstream-ID: e4d03f39d254db4c0cc54101921bb89fbda19879
8695
8696commit a7994b3f5a5a5a33b52b0a6065d08e888f0a99fb
8697Author: djm@openbsd.org <djm@openbsd.org>
8698Date: Wed Nov 11 04:56:39 2015 +0000
8699
8700 upstream commit
8701
8702 improve PEEK/POKE macros: better casts, don't multiply
8703 evaluate arguments; ok deraadt@
8704
8705 Upstream-ID: 9a1889e19647615ededbbabab89064843ba92d3e
8706
8707commit 7d4c7513a7f209cb303a608ac6e46b3f1dfc11ec
8708Author: djm@openbsd.org <djm@openbsd.org>
8709Date: Wed Nov 11 01:48:01 2015 +0000
8710
8711 upstream commit
8712
8713 remove prototypes for long-gone s/key support; ok
8714 dtucker@
8715
8716 Upstream-ID: db5bed3c57118af986490ab23d399df807359a79
8717
8718commit 07889c75926c040b8e095949c724e66af26441cb
8719Author: Damien Miller <djm@mindrot.org>
8720Date: Sat Nov 14 18:44:49 2015 +1100
8721
8722 read back from libcrypto RAND when privdropping
8723
8724 makes certain libcrypto implementations cache a /dev/urandom fd
8725 in preparation of sandboxing. Based on patch by Greg Hartman.
8726
8727commit 1560596f44c01bb0cef977816410950ed17b8ecd
8728Author: Darren Tucker <dtucker@zip.com.au>
8729Date: Tue Nov 10 11:14:47 2015 +1100
8730
8731 Fix compiler warnings in the openssl header check.
8732
8733 Noted by Austin English.
8734
8735commit e72a8575ffe1d8adff42c9abe9ca36938acc036b
8736Author: jmc@openbsd.org <jmc@openbsd.org>
8737Date: Sun Nov 8 23:24:03 2015 +0000
8738
8739 upstream commit
8740
8741 -c before -H, in SYNOPSIS and usage();
8742
8743 Upstream-ID: 25e8c58a69e1f37fcd54ac2cd1699370acb5e404
8744
8745commit 3a424cdd21db08c7b0ded902f97b8f02af5aa485
8746Author: djm@openbsd.org <djm@openbsd.org>
8747Date: Sun Nov 8 22:30:20 2015 +0000
8748
8749 upstream commit
8750
8751 Add "ssh-keyscan -c ..." flag to allow fetching
8752 certificates instead of plain keys; ok markus@
8753
8754 Upstream-ID: 0947e2177dba92339eced9e49d3c5bf7dda69f82
8755
8756commit 69fead5d7cdaa73bdece9fcba80f8e8e70b90346
8757Author: jmc@openbsd.org <jmc@openbsd.org>
8758Date: Sun Nov 8 22:08:38 2015 +0000
8759
8760 upstream commit
8761
8762 remove slogin links; ok deraadt markus djm
8763
8764 Upstream-ID: 39ba08548acde4c54f2d4520c202c2a863a3c730
8765
8766commit 2fecfd486bdba9f51b3a789277bb0733ca36e1c0
8767Author: djm@openbsd.org <djm@openbsd.org>
8768Date: Sun Nov 8 21:59:11 2015 +0000
8769
8770 upstream commit
8771
8772 fix OOB read in packet code caused by missing return
8773 statement found by Ben Hawkes; ok markus@ deraadt@
8774
8775 Upstream-ID: a3e3a85434ebfa0690d4879091959591f30efc62
8776
8777commit 5e288923a303ca672b686908320bc5368ebec6e6
8778Author: mmcc@openbsd.org <mmcc@openbsd.org>
8779Date: Fri Nov 6 00:31:41 2015 +0000
8780
8781 upstream commit
8782
8783 1. rlogin and rsh are long gone 2. protocol version isn't
8784 of core relevance here, and v1 is going away
8785
8786 ok markus@, deraadt@
8787
8788 Upstream-ID: 8b46bc94cf1ca7c8c1a75b1c958b2bb38d7579c8
8789
8790commit 8b29008bbe97f33381d9b4b93fcfa304168d0286
8791Author: jmc@openbsd.org <jmc@openbsd.org>
8792Date: Thu Nov 5 09:48:05 2015 +0000
8793
8794 upstream commit
8795
8796 "commandline" -> "command line", since there are so few
8797 examples of the former in the pages, so many of the latter, and in some of
8798 these pages we had multiple spellings;
8799
8800 prompted by tj
8801
8802 Upstream-ID: 78459d59bff74223f8139d9001ccd56fc4310659
8803
8804commit 996b24cebf20077fbe5db07b3a2c20c2d9db736e
8805Author: Darren Tucker <dtucker@zip.com.au>
8806Date: Thu Oct 29 20:57:34 2015 +1100
8807
8808 (re)wrap SYS_sendsyslog in ifdef.
8809
8810 Replace ifdef that went missing in commit
8811 c61b42f2678f21f05653ac2d3d241b48ab5d59ac. Fixes build on older
8812 OpenBSDs.
8813
8814commit b67e2e76fcf1ae7c802eb27ca927e16c91a513ff
8815Author: djm@openbsd.org <djm@openbsd.org>
8816Date: Thu Oct 29 08:05:17 2015 +0000
8817
8818 upstream commit
8819
8820 regress test for "PubkeyAcceptedKeyTypes +..." inside a
8821 Match block
8822
8823 Upstream-Regress-ID: 246c37ed64a2e5704d4c158ccdca1ff700e10647
8824
8825commit abd9dbc3c0d8c8c7561347cfa22166156e78c077
8826Author: dtucker@openbsd.org <dtucker@openbsd.org>
8827Date: Mon Oct 26 02:50:58 2015 +0000
8828
8829 upstream commit
8830
8831 Fix typo certopt->certopts in shell variable. This would
8832 cause the test to hang at a host key prompt if you have an A or CNAME for
8833 "proxy" in your local domain.
8834
8835 Upstream-Regress-ID: 6ea03bcd39443a83c89e2c5606392ceb9585836a
8836
8837commit ed08510d38aef930a061ae30d10f2a9cf233bafa
8838Author: djm@openbsd.org <djm@openbsd.org>
8839Date: Thu Oct 29 08:05:01 2015 +0000
8840
8841 upstream commit
8842
8843 Fix "PubkeyAcceptedKeyTypes +..." inside a Match block;
8844 ok dtucker@
8845
8846 Upstream-ID: 853662c4036730b966aab77684390c47b9738c69
8847
8848commit a4aef3ed29071719b2af82fdf1ac3c2514f82bc5
8849Author: djm@openbsd.org <djm@openbsd.org>
8850Date: Tue Oct 27 08:54:52 2015 +0000
8851
8852 upstream commit
8853
8854 fix execv arguments in a way less likely to cause grief
8855 for -portable; ok dtucker@
8856
8857 Upstream-ID: 5902bf0ea0371f39f1300698dc3b8e4105fc0fc5
8858
8859commit 63d188175accea83305e89fafa011136ff3d96ad
8860Author: djm@openbsd.org <djm@openbsd.org>
8861Date: Tue Oct 27 01:44:45 2015 +0000
8862
8863 upstream commit
8864
8865 log certificate serial in verbose() messages to match the
8866 main auth success/fail message; ok dtucker@
8867
8868 Upstream-ID: dfc48b417c320b97c36ff351d303c142f2186288
8869
8870commit 2aaba0cfd560ecfe92aa50c00750e6143842cf1f
8871Author: djm@openbsd.org <djm@openbsd.org>
8872Date: Tue Oct 27 00:49:53 2015 +0000
8873
8874 upstream commit
8875
8876 avoid de-const warning & shrink; ok dtucker@
8877
8878 Upstream-ID: 69a85ef94832378952a22c172009cbf52aaa11db
8879
8880commit 03239c18312b9bab7d1c3b03062c61e8bbc1ca6e
8881Author: dtucker@openbsd.org <dtucker@openbsd.org>
8882Date: Sun Oct 25 23:42:00 2015 +0000
8883
8884 upstream commit
8885
8886 Expand tildes in filenames passed to -i before checking
8887 whether or not the identity file exists. This means that if the shell
8888 doesn't do the expansion (eg because the option and filename were given as a
8889 single argument) then we'll still add the key. bz#2481, ok markus@
8890
8891 Upstream-ID: db1757178a14ac519e9a3e1a2dbd21113cb3bfc6
8892
8893commit 97e184e508dd33c37860c732c0eca3fc57698b40
8894Author: dtucker@openbsd.org <dtucker@openbsd.org>
8895Date: Sun Oct 25 23:14:03 2015 +0000
8896
8897 upstream commit
8898
8899 Do not prepend "exec" to the shell command run by "Match
8900 exec" in a config file. It's an unnecessary optimization from repurposed
8901 ProxyCommand code and prevents some things working with some shells.
8902 bz#2471, pointed out by res at qoxp.net. ok markus@
8903
8904 Upstream-ID: a1ead25ae336bfa15fb58d8c6b5589f85b4c33a3
8905
8906commit 8db134e7f457bcb069ec72bc4ee722e2af557c69
8907Author: Darren Tucker <dtucker@zip.com.au>
8908Date: Thu Oct 29 10:48:23 2015 +1100
8909
8910 Prevent name collisions with system glob (bz#2463)
8911
8912 Move glob.h from includes.h to the only caller (sftp) and override the
8913 names for the symbols. This prevents name collisions with the system glob
8914 in the case where something other than ssh uses it (eg kerberos). With
8915 jjelen at redhat.com, ok djm@
8916
8917commit 86c10dbbef6a5800d2431a66cf7f41a954bb62b5
8918Author: dtucker@openbsd.org <dtucker@openbsd.org>
8919Date: Fri Oct 23 02:22:01 2015 +0000
8920
8921 upstream commit
8922
8923 Update expected group sizes to match recent code changes.
8924
8925 Upstream-Regress-ID: 0004f0ea93428969fe75bcfff0d521c553977794
8926
8927commit 9ada37d36003a77902e90a3214981e417457cf13
8928Author: djm@openbsd.org <djm@openbsd.org>
8929Date: Sat Oct 24 22:56:19 2015 +0000
8930
8931 upstream commit
8932
8933 fix keyscan output for multiple hosts/addrs on one line
8934 when host hashing or a non standard port is in use; bz#2479 ok dtucker@
8935
8936 Upstream-ID: 5321dabfaeceba343da3c8a8b5754c6f4a0a307b
8937
8938commit 44fc7cd7dcef6c52c6b7e9ff830dfa32879bd319
8939Author: djm@openbsd.org <djm@openbsd.org>
8940Date: Sat Oct 24 22:52:22 2015 +0000
8941
8942 upstream commit
8943
8944 skip "Could not chdir to home directory" message when
8945 chrooted
8946
8947 patch from Christian Hesse in bz#2485 ok dtucker@
8948
8949 Upstream-ID: 86783c1953da426dff5b03b03ce46e699d9e5431
8950
8951commit a820a8618ec44735dabc688fab96fba38ad66bb2
8952Author: sthen@openbsd.org <sthen@openbsd.org>
8953Date: Sat Oct 24 08:34:09 2015 +0000
8954
8955 upstream commit
8956
8957 Handle the split of tun(4) "link0" into tap(4) in ssh
8958 tun-forwarding. Adapted from portable (using separate devices for this is the
8959 normal case in most OS). ok djm@
8960
8961 Upstream-ID: 90facf4c59ce73d6741db1bc926e578ef465cd39
8962
8963commit 66d2e229baa9fe57b868c373b05f7ff3bb20055b
8964Author: gsoares@openbsd.org <gsoares@openbsd.org>
8965Date: Wed Oct 21 11:33:03 2015 +0000
8966
8967 upstream commit
8968
8969 fix memory leak in error path ok djm@
8970
8971 Upstream-ID: dd2f402b0a0029b755df029fc7f0679e1365ce35
8972
8973commit 7d6c0362039ceacdc1366b5df29ad5d2693c13e5
8974Author: mmcc@openbsd.org <mmcc@openbsd.org>
8975Date: Tue Oct 20 23:24:25 2015 +0000
8976
8977 upstream commit
8978
8979 Compare pointers to NULL rather than 0.
8980
8981 ok djm@
8982
8983 Upstream-ID: 21616cfea27eda65a06e772cc887530b9a1a27f8
8984
8985commit f98a09cacff7baad8748c9aa217afd155a4d493f
8986Author: mmcc@openbsd.org <mmcc@openbsd.org>
8987Date: Tue Oct 20 03:36:35 2015 +0000
8988
8989 upstream commit
8990
8991 Replace a function-local allocation with stack memory.
8992
8993 ok djm@
8994
8995 Upstream-ID: c09fbbab637053a2ab9f33ca142b4e20a4c5a17e
8996
8997commit ac908c1eeacccfa85659594d92428659320fd57e
8998Author: Damien Miller <djm@mindrot.org>
8999Date: Thu Oct 22 09:35:24 2015 +1100
9000
9001 turn off PrintLastLog when --disable-lastlog
9002
9003 bz#2278 from Brent Paulson
9004
9005commit b56deb847f4a0115a8bf488bf6ee8524658162fd
9006Author: djm@openbsd.org <djm@openbsd.org>
9007Date: Fri Oct 16 22:32:22 2015 +0000
9008
9009 upstream commit
9010
9011 increase the minimum modulus that we will send or accept in
9012 diffie-hellman-group-exchange to 2048 bits; ok markus@
9013
9014 Upstream-ID: 06dce7a24c17b999a0f5fadfe95de1ed6a1a9b6a
9015
9016commit 5ee0063f024bf5b3f3ffb275b8cd20055d62b4b9
9017Author: djm@openbsd.org <djm@openbsd.org>
9018Date: Fri Oct 16 18:40:49 2015 +0000
9019
9020 upstream commit
9021
9022 better handle anchored FQDNs (e.g. 'cvs.openbsd.org.') in
9023 hostname canonicalisation - treat them as already canonical and remove the
9024 trailing '.' before matching ssh_config; ok markus@
9025
9026 Upstream-ID: f7619652e074ac3febe8363f19622aa4853b679a
9027
9028commit e92c499a75477ecfe94dd7b4aed89f20b1fac5a7
9029Author: mmcc@openbsd.org <mmcc@openbsd.org>
9030Date: Fri Oct 16 17:07:24 2015 +0000
9031
9032 upstream commit
9033
9034 0 -> NULL when comparing with a char*.
9035
9036 ok dtucker@, djm@.
9037
9038 Upstream-ID: a928e9c21c0a9020727d99738ff64027c1272300
9039
9040commit b1d38a3cc6fe349feb8d16a5f520ef12d1de7cb2
9041Author: djm@openbsd.org <djm@openbsd.org>
9042Date: Thu Oct 15 23:51:40 2015 +0000
9043
9044 upstream commit
9045
9046 fix some signed/unsigned integer type mismatches in
9047 format strings; reported by Nicholas Lemonias
9048
9049 Upstream-ID: 78cd55420a0eef68c4095bdfddd1af84afe5f95c
9050
9051commit 1a2663a15d356bb188196b6414b4c50dc12fd42b
9052Author: djm@openbsd.org <djm@openbsd.org>
9053Date: Thu Oct 15 23:08:23 2015 +0000
9054
9055 upstream commit
9056
9057 argument to sshkey_from_private() and sshkey_demote()
9058 can't be NULL
9059
9060 Upstream-ID: 0111245b1641d387977a9b38da15916820a5fd1f
9061
9062commit 0f754e29dd3760fc0b172c1220f18b753fb0957e
9063Author: Damien Miller <djm@mindrot.org>
9064Date: Fri Oct 16 10:53:14 2015 +1100
9065
9066 need va_copy before va_start
9067
9068 reported by Nicholas Lemonias
9069
9070commit eb6c50d82aa1f0d3fc95f5630ea69761e918bfcd
9071Author: Damien Miller <djm@mindrot.org>
9072Date: Thu Oct 15 15:48:28 2015 -0700
9073
9074 fix compilation on systems without SYMLOOP_MAX
9075
9076commit fafe1d84a210fb3dae7744f268059cc583db8c12
9077Author: Damien Miller <djm@mindrot.org>
9078Date: Wed Oct 14 09:22:15 2015 -0700
9079
9080 s/SANDBOX_TAME/SANDBOX_PLEDGE/g
9081
9082commit 8f22911027ff6c17d7226d232ccd20727f389310
9083Author: Damien Miller <djm@mindrot.org>
9084Date: Wed Oct 14 08:28:19 2015 +1100
9085
9086 upstream commit
9087
9088 revision 1.20
9089 date: 2015/10/13 20:55:37; author: millert; state: Exp; lines: +2 -2; commitid: X39sl5ay1czgFIgp;
9090 In rev 1.15 the sizeof argument was fixed in a strlcat() call but
9091 the truncation check immediately following it was not updated to
9092 match. Not an issue in practice since the buffers are the same
9093 size. OK deraadt@
9094
9095commit 23fa695bb735f54f04d46123662609edb6c76767
9096Author: Damien Miller <djm@mindrot.org>
9097Date: Wed Oct 14 08:27:51 2015 +1100
9098
9099 upstream commit
9100
9101 revision 1.19
9102 date: 2015/01/16 16:48:51; author: deraadt; state: Exp; lines: +3 -3; commitid: 0DYulI8hhujBHMcR;
9103 Move to the <limits.h> universe.
9104 review by millert, binary checking process with doug, concept with guenther
9105
9106commit c71be375a69af00c2d0a0c24d8752bec12d8fd1b
9107Author: Damien Miller <djm@mindrot.org>
9108Date: Wed Oct 14 08:27:08 2015 +1100
9109
9110 upstream commit
9111
9112 revision 1.18
9113 date: 2014/10/19 03:56:28; author: doug; state: Exp; lines: +9 -9; commitid: U6QxmtbXrGoc02S5;
9114 Revert last commit due to changed semantics found by make release.
9115
9116commit c39ad23b06e9aecc3ff788e92f787a08472905b1
9117Author: Damien Miller <djm@mindrot.org>
9118Date: Wed Oct 14 08:26:24 2015 +1100
9119
9120 upstream commit
9121
9122 revision 1.17
9123 date: 2014/10/18 20:43:52; author: doug; state: Exp; lines: +10 -10; commitid: I74hI1tVZtsspKEt;
9124 Better POSIX compliance in realpath(3).
9125
9126 millert@ made changes to realpath.c based on FreeBSD's version. I merged
9127 Todd's changes into dl_realpath.c.
9128
9129 ok millert@, guenther@
9130
9131commit e929a43f957dbd1254aca2aaf85c8c00cbfc25f4
9132Author: Damien Miller <djm@mindrot.org>
9133Date: Wed Oct 14 08:25:55 2015 +1100
9134
9135 upstream commit
9136
9137 revision 1.16
9138 date: 2013/04/05 12:59:54; author: kurt; state: Exp; lines: +3 -1;
9139 - Add comments regarding copies of these files also in libexec/ld.so
9140 okay guenther@
9141
9142commit 5225db68e58a1048cb17f0e36e0d33bc4a8fc410
9143Author: Damien Miller <djm@mindrot.org>
9144Date: Wed Oct 14 08:25:32 2015 +1100
9145
9146 upstream commit
9147
9148 revision 1.15
9149 date: 2012/09/13 15:39:05; author: deraadt; state: Exp; lines: +2 -2;
9150 specify the bounds of the dst to strlcat (both values were static and
9151 equal, but it is more correct)
9152 from Michal Mazurek
9153
9154commit 7365fe5b4859de2305e40ea132da3823830fa710
9155Author: Damien Miller <djm@mindrot.org>
9156Date: Wed Oct 14 08:25:09 2015 +1100
9157
9158 upstream commit
9159
9160 revision 1.14
9161 date: 2011/07/24 21:03:00; author: miod; state: Exp; lines: +35 -13;
9162 Recent Single Unix will malloc memory if the second argument of realpath()
9163 is NULL, and third-party software is starting to rely upon this.
9164 Adapted from FreeBSD via Jona Joachim (jaj ; hcl-club , .lu), with minor
9165 tweaks from nicm@ and yours truly.
9166
9167commit e679c09cd1951f963793aa3d9748d1c3fdcf808f
9168Author: djm@openbsd.org <djm@openbsd.org>
9169Date: Tue Oct 13 16:15:21 2015 +0000
9170
9171 upstream commit
9172
9173 apply PubkeyAcceptedKeyTypes filtering earlier, so all
9174 skipped keys are noted before pubkey authentication starts. ok dtucker@
9175
9176 Upstream-ID: ba4f52f54268a421a2a5f98bb375403f4cb044b8
9177
9178commit 179c353f564ec7ada64b87730b25fb41107babd7
9179Author: djm@openbsd.org <djm@openbsd.org>
9180Date: Tue Oct 13 00:21:27 2015 +0000
9181
9182 upstream commit
9183
9184 free the correct IV length, don't assume it's always the
9185 cipher blocksize; ok dtucker@
9186
9187 Upstream-ID: c260d9e5ec73628d9ff4b067fbb060eff5a7d298
9188
9189commit 2539dce2a049a8f6bb0d44cac51f07ad48e691d3
9190Author: deraadt@openbsd.org <deraadt@openbsd.org>
9191Date: Fri Oct 9 01:37:08 2015 +0000
9192
9193 upstream commit
9194
9195 Change all tame callers to namechange to pledge(2).
9196
9197 Upstream-ID: 17e654fc27ceaf523c60f4ffd9ec7ae4e7efc7f2
9198
9199commit 9846a2f4067383bb76b4e31a9d2303e0a9c13a73
9200Author: Damien Miller <djm@mindrot.org>
9201Date: Thu Oct 8 04:30:48 2015 +1100
9202
9203 hook tame(2) sandbox up to build
9204
9205 OpenBSD only for now
9206
9207commit 0c46bbe68b70bdf0d6d20588e5847e71f3739fe6
9208Author: djm@openbsd.org <djm@openbsd.org>
9209Date: Wed Oct 7 15:59:12 2015 +0000
9210
9211 upstream commit
9212
9213 include PubkeyAcceptedKeyTypes in ssh -G config dump
9214
9215 Upstream-ID: 6c097ce6ffebf6fe393fb7988b5d152a5d6b36bb
9216
9217commit bdcb73fb7641b1cf73c0065d1a0dd57b1e8b778e
9218Author: sobrado@openbsd.org <sobrado@openbsd.org>
9219Date: Wed Oct 7 14:45:30 2015 +0000
9220
9221 upstream commit
9222
9223 UsePrivilegeSeparation defaults to sandbox now.
9224
9225 ok djm@
9226
9227 Upstream-ID: bff136c38bcae89df82e044d2f42de21e1ad914f
9228
9229commit 2905d6f99c837bb699b6ebc61711b19acd030709
9230Author: djm@openbsd.org <djm@openbsd.org>
9231Date: Wed Oct 7 00:54:06 2015 +0000
9232
9233 upstream commit
9234
9235 don't try to change tun device flags if they are already
9236 what we need; makes it possible to use tun/tap networking as non- root user
9237 if device permissions and interface flags are pre-established; based on patch
9238 by Ossi Herrala
9239
9240 Upstream-ID: 89099ac4634cd477b066865acf54cb230780fd21
9241
9242commit 0dc74512bdb105b048883f07de538b37e5e024d4
9243Author: Damien Miller <djm@mindrot.org>
9244Date: Mon Oct 5 18:33:05 2015 -0700
9245
9246 unbreak merge botch
9247
9248commit fdd020e86439afa7f537e2429d29d4b744c94331
9249Author: djm@openbsd.org <djm@openbsd.org>
9250Date: Tue Oct 6 01:20:59 2015 +0000
9251
9252 upstream commit
9253
9254 adapt to recent sshkey_parse_private_fileblob() API
9255 change
9256
9257 Upstream-Regress-ID: 5c0d818da511e33e0abf6a92a31bd7163b7ad988
9258
9259commit 21ae8ee3b630b0925f973db647a1b9aa5fcdd4c5
9260Author: djm@openbsd.org <djm@openbsd.org>
9261Date: Thu Sep 24 07:15:39 2015 +0000
9262
9263 upstream commit
9264
9265 fix command-line option to match what was actually
9266 committed
9267
9268 Upstream-Regress-ID: 3e8c24a2044e8afd37e7ce17b69002ca817ac699
9269
9270commit e14ac43b75e68f1ffbd3e1a5e44143c8ae578dcd
9271Author: djm@openbsd.org <djm@openbsd.org>
9272Date: Thu Sep 24 06:16:53 2015 +0000
9273
9274 upstream commit
9275
9276 regress test for CertificateFile; patch from Meghana Bhat
9277 via bz#2436
9278
9279 Upstream-Regress-ID: e7a6e980cbe0f8081ba2e83de40d06c17be8bd25
9280
9281commit 905b054ed24e0d5b4ef226ebf2c8bfc02ae6d4ad
9282Author: djm@openbsd.org <djm@openbsd.org>
9283Date: Mon Oct 5 17:11:21 2015 +0000
9284
9285 upstream commit
9286
9287 some more bzero->explicit_bzero, from Michael McConville
9288
9289 Upstream-ID: 17f19545685c33327db2efdc357c1c9225ff00d0
9290
9291commit b007159a0acdbcf65814b3ee05dbe2cf4ea46011
9292Author: deraadt@openbsd.org <deraadt@openbsd.org>
9293Date: Fri Oct 2 15:52:55 2015 +0000
9294
9295 upstream commit
9296
9297 fix email
9298
9299 Upstream-ID: 72150f2d54b94de14ebef1ea054ef974281bf834
9300
9301commit b19e1b4ab11884c4f62aee9f8ab53127a4732658
9302Author: deraadt@openbsd.org <deraadt@openbsd.org>
9303Date: Fri Oct 2 01:39:52 2015 +0000
9304
9305 upstream commit
9306
9307 a sandbox using tame ok djm
9308
9309 Upstream-ID: 4ca24e47895e72f5daaa02f3e3d3e5ca2d820fa3
9310
9311commit c61b42f2678f21f05653ac2d3d241b48ab5d59ac
9312Author: deraadt@openbsd.org <deraadt@openbsd.org>
9313Date: Fri Oct 2 01:39:26 2015 +0000
9314
9315 upstream commit
9316
9317 re-order system calls in order of risk, ok i'll be
9318 honest, ordered this way they look like tame... ok djm
9319
9320 Upstream-ID: 42a1e6d251fd8be13c8262bee026059ae6328813
9321
9322commit c5f7c0843cb6e6074a93c8ac34e49ce33a6f5546
9323Author: jmc@openbsd.org <jmc@openbsd.org>
9324Date: Fri Sep 25 18:19:54 2015 +0000
9325
9326 upstream commit
9327
9328 some certificatefile tweaks; ok djm
9329
9330 Upstream-ID: 0e5a7852c28c05fc193419cc7e50e64c1c535af0
9331
9332commit 4e44a79a07d4b88b6a4e5e8c1bed5f58c841b1b8
9333Author: djm@openbsd.org <djm@openbsd.org>
9334Date: Thu Sep 24 06:15:11 2015 +0000
9335
9336 upstream commit
9337
9338 add ssh_config CertificateFile option to explicitly list
9339 a certificate; patch from Meghana Bhat on bz#2436; ok markus@
9340
9341 Upstream-ID: 58648ec53c510b41c1f46d8fe293aadc87229ab8
9342
9343commit e3cbb06ade83c72b640a53728d362bbefa0008e2
9344Author: sobrado@openbsd.org <sobrado@openbsd.org>
9345Date: Tue Sep 22 08:33:23 2015 +0000
9346
9347 upstream commit
9348
9349 fix two typos.
9350
9351 Upstream-ID: 424402c0d8863a11b51749bacd7f8d932083b709
diff --git a/INSTALL b/INSTALL
index e4865bbb4..7f552bf76 100644
--- a/INSTALL
+++ b/INSTALL
@@ -13,7 +13,7 @@ OpenSSL)
13Zlib 1.1.4 or 1.2.1.2 or greater (earlier 1.2.x versions have problems): 13Zlib 1.1.4 or 1.2.1.2 or greater (earlier 1.2.x versions have problems):
14http://www.gzip.org/zlib/ 14http://www.gzip.org/zlib/
15 15
16libcrypto (LibreSSL or OpenSSL >= 0.9.8f < 1.1.0) 16libcrypto (LibreSSL or OpenSSL >= 1.0.1 < 1.1.0)
17LibreSSL http://www.libressl.org/ ; or 17LibreSSL http://www.libressl.org/ ; or
18OpenSSL http://www.openssl.org/ 18OpenSSL http://www.openssl.org/
19 19
@@ -91,7 +91,7 @@ http://nlnetlabs.nl/projects/ldns/
91Autoconf: 91Autoconf:
92 92
93If you modify configure.ac or configure doesn't exist (eg if you checked 93If you modify configure.ac or configure doesn't exist (eg if you checked
94the code out of CVS yourself) then you will need autoconf-2.69 to rebuild 94the code out of git yourself) then you will need autoconf-2.69 to rebuild
95the automatically generated files by running "autoreconf". Earlier 95the automatically generated files by running "autoreconf". Earlier
96versions may also work but this is not guaranteed. 96versions may also work but this is not guaranteed.
97 97
@@ -103,6 +103,13 @@ Native BSM support is known to exist in Solaris from at least 2.5.1,
103FreeBSD 6.1 and OS X. Alternatively, you may use the OpenBSM 103FreeBSD 6.1 and OS X. Alternatively, you may use the OpenBSM
104implementation (http://www.openbsm.org). 104implementation (http://www.openbsm.org).
105 105
106makedepend:
107
108https://www.x.org/archive/individual/util/
109
110If you are making significant changes to the code you may need to rebuild
111the dependency (.depend) file using "make depend", which requires the
112"makedepend" tool from the X11 distribution.
106 113
1072. Building / Installation 1142. Building / Installation
108-------------------------- 115--------------------------
@@ -162,13 +169,11 @@ also be enabled in sshd_config (refer to the UsePAM directive).
162 169
163--with-prngd-socket=/some/file allows you to enable EGD or PRNGD 170--with-prngd-socket=/some/file allows you to enable EGD or PRNGD
164support and to specify a PRNGd socket. Use this if your Unix lacks 171support and to specify a PRNGd socket. Use this if your Unix lacks
165/dev/random and you don't want to use OpenSSH's builtin entropy 172/dev/random.
166collection support.
167 173
168--with-prngd-port=portnum allows you to enable EGD or PRNGD support 174--with-prngd-port=portnum allows you to enable EGD or PRNGD support
169and to specify a EGD localhost TCP port. Use this if your Unix lacks 175and to specify a EGD localhost TCP port. Use this if your Unix lacks
170/dev/random and you don't want to use OpenSSH's builtin entropy 176/dev/random.
171collection support.
172 177
173--with-lastlog=FILE will specify the location of the lastlog file. 178--with-lastlog=FILE will specify the location of the lastlog file.
174./configure searches a few locations for lastlog, but may not find 179./configure searches a few locations for lastlog, but may not find
@@ -204,8 +209,7 @@ created.
204--with-xauth=PATH specifies the location of the xauth binary 209--with-xauth=PATH specifies the location of the xauth binary
205 210
206--with-ssl-dir=DIR allows you to specify where your Libre/OpenSSL 211--with-ssl-dir=DIR allows you to specify where your Libre/OpenSSL
207libraries 212libraries are installed.
208are installed.
209 213
210--with-ssl-engine enables Libre/OpenSSL's (hardware) ENGINE support 214--with-ssl-engine enables Libre/OpenSSL's (hardware) ENGINE support
211 215
diff --git a/Makefile.in b/Makefile.in
index 08b989a4d..1afb4f798 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,5 +1,3 @@
1# $Id: Makefile.in,v 1.365 2014/08/30 06:23:07 djm Exp $
2
3# uncomment if you run a non bourne compatable shell. Ie. csh 1# uncomment if you run a non bourne compatable shell. Ie. csh
4#SHELL = @SH@ 2#SHELL = @SH@
5 3
@@ -54,16 +52,25 @@ AR=@AR@
54AWK=@AWK@ 52AWK=@AWK@
55RANLIB=@RANLIB@ 53RANLIB=@RANLIB@
56INSTALL=@INSTALL@ 54INSTALL=@INSTALL@
57PERL=@PERL@
58SED=@SED@ 55SED=@SED@
59ENT=@ENT@ 56ENT=@ENT@
60XAUTH_PATH=@XAUTH_PATH@ 57XAUTH_PATH=@XAUTH_PATH@
61LDFLAGS=-L. -Lopenbsd-compat/ @LDFLAGS@ 58LDFLAGS=-L. -Lopenbsd-compat/ @LDFLAGS@
62EXEEXT=@EXEEXT@ 59EXEEXT=@EXEEXT@
63MANFMT=@MANFMT@ 60MANFMT=@MANFMT@
61MKDIR_P=@MKDIR_P@
64 62
65TARGETS=ssh$(EXEEXT) sshd$(EXEEXT) ssh-add$(EXEEXT) ssh-keygen$(EXEEXT) ssh-keyscan${EXEEXT} ssh-keysign${EXEEXT} ssh-pkcs11-helper$(EXEEXT) ssh-agent$(EXEEXT) scp$(EXEEXT) sftp-server$(EXEEXT) sftp$(EXEEXT) 63TARGETS=ssh$(EXEEXT) sshd$(EXEEXT) ssh-add$(EXEEXT) ssh-keygen$(EXEEXT) ssh-keyscan${EXEEXT} ssh-keysign${EXEEXT} ssh-pkcs11-helper$(EXEEXT) ssh-agent$(EXEEXT) scp$(EXEEXT) sftp-server$(EXEEXT) sftp$(EXEEXT)
66 64
65XMSS_OBJS=\
66 ssh-xmss.o \
67 sshkey-xmss.o \
68 xmss_commons.o \
69 xmss_fast.o \
70 xmss_hash.o \
71 xmss_hash_address.o \
72 xmss_wots.o
73
67LIBOPENSSH_OBJS=\ 74LIBOPENSSH_OBJS=\
68 ssh_api.o \ 75 ssh_api.o \
69 ssherr.o \ 76 ssherr.o \
@@ -73,7 +80,8 @@ LIBOPENSSH_OBJS=\
73 sshbuf-misc.o \ 80 sshbuf-misc.o \
74 sshbuf-getput-crypto.o \ 81 sshbuf-getput-crypto.o \
75 krl.o \ 82 krl.o \
76 bitmap.o 83 bitmap.o \
84 ${XMSS_OBJS}
77 85
78LIBSSH_OBJS=${LIBOPENSSH_OBJS} \ 86LIBSSH_OBJS=${LIBOPENSSH_OBJS} \
79 authfd.o authfile.o bufaux.o bufbn.o bufec.o buffer.o \ 87 authfd.o authfile.o bufaux.o bufbn.o bufec.o buffer.o \
@@ -88,7 +96,7 @@ LIBSSH_OBJS=${LIBOPENSSH_OBJS} \
88 ssh-pkcs11.o smult_curve25519_ref.o \ 96 ssh-pkcs11.o smult_curve25519_ref.o \
89 poly1305.o chacha.o cipher-chachapoly.o \ 97 poly1305.o chacha.o cipher-chachapoly.o \
90 ssh-ed25519.o digest-openssl.o digest-libc.o hmac.o \ 98 ssh-ed25519.o digest-openssl.o digest-libc.o hmac.o \
91 sc25519.o ge25519.o fe25519.o ed25519.o verify.o hash.o blocks.o \ 99 sc25519.o ge25519.o fe25519.o ed25519.o verify.o hash.o \
92 kex.o kexdh.o kexgex.o kexecdh.o kexc25519.o \ 100 kex.o kexdh.o kexgex.o kexecdh.o kexc25519.o \
93 kexdhc.o kexgexc.o kexecdhc.o kexc25519c.o \ 101 kexdhc.o kexgexc.o kexecdhc.o kexc25519c.o \
94 kexdhs.o kexgexs.o kexecdhs.o kexc25519s.o \ 102 kexdhs.o kexgexs.o kexecdhs.o kexc25519s.o \
@@ -219,13 +227,6 @@ $(CONFIGFILES): $(CONFIGFILES_IN)
219moduli: 227moduli:
220 echo 228 echo
221 229
222# special case target for umac128
223umac128.o: umac.c
224 $(CC) $(CFLAGS) $(CPPFLAGS) -o umac128.o -c $(srcdir)/umac.c \
225 -DUMAC_OUTPUT_LEN=16 -Dumac_new=umac128_new \
226 -Dumac_update=umac128_update -Dumac_final=umac128_final \
227 -Dumac_delete=umac128_delete -Dumac_ctx=umac128_ctx
228
229clean: regressclean 230clean: regressclean
230 rm -f *.o *.a $(TARGETS) logintest config.cache config.log 231 rm -f *.o *.a $(TARGETS) logintest config.cache config.log
231 rm -f *.out core survey 232 rm -f *.out core survey
@@ -299,9 +300,21 @@ catman-do:
299 >$$base.0 ; \ 300 >$$base.0 ; \
300 done 301 done
301 302
302distprep: catman-do 303depend: depend-rebuild
304 rm -f .depend.bak
305
306depend-rebuild:
307 rm -f config.h
308 touch config.h
309 makedepend -w1000 -Y. -f .depend *.c 2>/dev/null
310 rm -f config.h
311
312depend-check: depend-rebuild
313 cmp .depend .depend.bak || (echo .depend stale && exit 1)
314
315distprep: catman-do depend-check
303 $(AUTORECONF) 316 $(AUTORECONF)
304 -rm -rf autom4te.cache 317 -rm -rf autom4te.cache .depend.bak
305 318
306install: $(CONFIGFILES) $(MANPAGES) $(TARGETS) install-files install-sysconf host-key check-config 319install: $(CONFIGFILES) $(MANPAGES) $(TARGETS) install-files install-sysconf host-key check-config
307install-nokeys: $(CONFIGFILES) $(MANPAGES) $(TARGETS) install-files install-sysconf 320install-nokeys: $(CONFIGFILES) $(MANPAGES) $(TARGETS) install-files install-sysconf
@@ -311,14 +324,13 @@ check-config:
311 -$(DESTDIR)$(sbindir)/sshd -t -f $(DESTDIR)$(sysconfdir)/sshd_config 324 -$(DESTDIR)$(sbindir)/sshd -t -f $(DESTDIR)$(sysconfdir)/sshd_config
312 325
313install-files: 326install-files:
314 $(srcdir)/mkinstalldirs $(DESTDIR)$(bindir) 327 $(MKDIR_P) $(DESTDIR)$(bindir)
315 $(srcdir)/mkinstalldirs $(DESTDIR)$(sbindir) 328 $(MKDIR_P) $(DESTDIR)$(sbindir)
316 $(srcdir)/mkinstalldirs $(DESTDIR)$(mandir) 329 $(MKDIR_P) $(DESTDIR)$(mandir)/$(mansubdir)1
317 $(srcdir)/mkinstalldirs $(DESTDIR)$(mandir)/$(mansubdir)1 330 $(MKDIR_P) $(DESTDIR)$(mandir)/$(mansubdir)5
318 $(srcdir)/mkinstalldirs $(DESTDIR)$(mandir)/$(mansubdir)5 331 $(MKDIR_P) $(DESTDIR)$(mandir)/$(mansubdir)8
319 $(srcdir)/mkinstalldirs $(DESTDIR)$(mandir)/$(mansubdir)8 332 $(MKDIR_P) $(DESTDIR)$(libexecdir)
320 $(srcdir)/mkinstalldirs $(DESTDIR)$(libexecdir) 333 $(MKDIR_P) -m 0755 $(DESTDIR)$(PRIVSEP_PATH)
321 (umask 022 ; $(srcdir)/mkinstalldirs $(DESTDIR)$(PRIVSEP_PATH))
322 $(INSTALL) -m 0755 $(STRIP_OPT) ssh$(EXEEXT) $(DESTDIR)$(bindir)/ssh$(EXEEXT) 334 $(INSTALL) -m 0755 $(STRIP_OPT) ssh$(EXEEXT) $(DESTDIR)$(bindir)/ssh$(EXEEXT)
323 $(INSTALL) -m 0755 $(STRIP_OPT) scp$(EXEEXT) $(DESTDIR)$(bindir)/scp$(EXEEXT) 335 $(INSTALL) -m 0755 $(STRIP_OPT) scp$(EXEEXT) $(DESTDIR)$(bindir)/scp$(EXEEXT)
324 $(INSTALL) -m 0755 $(STRIP_OPT) ssh-add$(EXEEXT) $(DESTDIR)$(bindir)/ssh-add$(EXEEXT) 336 $(INSTALL) -m 0755 $(STRIP_OPT) ssh-add$(EXEEXT) $(DESTDIR)$(bindir)/ssh-add$(EXEEXT)
@@ -347,9 +359,7 @@ install-files:
347 $(INSTALL) -m 644 ssh-pkcs11-helper.8.out $(DESTDIR)$(mandir)/$(mansubdir)8/ssh-pkcs11-helper.8 359 $(INSTALL) -m 644 ssh-pkcs11-helper.8.out $(DESTDIR)$(mandir)/$(mansubdir)8/ssh-pkcs11-helper.8
348 360
349install-sysconf: 361install-sysconf:
350 if [ ! -d $(DESTDIR)$(sysconfdir) ]; then \ 362 $(MKDIR_P) $(DESTDIR)$(sysconfdir)
351 $(srcdir)/mkinstalldirs $(DESTDIR)$(sysconfdir); \
352 fi
353 @if [ ! -f $(DESTDIR)$(sysconfdir)/ssh_config ]; then \ 363 @if [ ! -f $(DESTDIR)$(sysconfdir)/ssh_config ]; then \
354 $(INSTALL) -m 644 ssh_config.out $(DESTDIR)$(sysconfdir)/ssh_config; \ 364 $(INSTALL) -m 644 ssh_config.out $(DESTDIR)$(sysconfdir)/ssh_config; \
355 else \ 365 else \
@@ -377,9 +387,6 @@ host-key: ssh-keygen$(EXEEXT)
377 fi 387 fi
378 388
379host-key-force: ssh-keygen$(EXEEXT) ssh$(EXEEXT) 389host-key-force: ssh-keygen$(EXEEXT) ssh$(EXEEXT)
380 if ./ssh -Q protocol-version | grep '^1$$' >/dev/null; then \
381 ./ssh-keygen -t rsa1 -f $(DESTDIR)$(sysconfdir)/ssh_host_key -N ""; \
382 fi
383 ./ssh-keygen -t dsa -f $(DESTDIR)$(sysconfdir)/ssh_host_dsa_key -N "" 390 ./ssh-keygen -t dsa -f $(DESTDIR)$(sysconfdir)/ssh_host_dsa_key -N ""
384 ./ssh-keygen -t rsa -f $(DESTDIR)$(sysconfdir)/ssh_host_rsa_key -N "" 391 ./ssh-keygen -t rsa -f $(DESTDIR)$(sysconfdir)/ssh_host_rsa_key -N ""
385 ./ssh-keygen -t ed25519 -f $(DESTDIR)$(sysconfdir)/ssh_host_ed25519_key -N "" 392 ./ssh-keygen -t ed25519 -f $(DESTDIR)$(sysconfdir)/ssh_host_ed25519_key -N ""
@@ -423,28 +430,16 @@ uninstall:
423 -rm -f $(DESTDIR)$(mandir)/$(mansubdir)8/ssh-pkcs11-helper.8 430 -rm -f $(DESTDIR)$(mandir)/$(mansubdir)8/ssh-pkcs11-helper.8
424 431
425regress-prep: 432regress-prep:
426 [ -d `pwd`/regress ] || mkdir -p `pwd`/regress 433 $(MKDIR_P) `pwd`/regress/unittests/test_helper
427 [ -d `pwd`/regress/unittests ] || mkdir -p `pwd`/regress/unittests 434 $(MKDIR_P) `pwd`/regress/unittests/sshbuf
428 [ -d `pwd`/regress/unittests/test_helper ] || \ 435 $(MKDIR_P) `pwd`/regress/unittests/sshkey
429 mkdir -p `pwd`/regress/unittests/test_helper 436 $(MKDIR_P) `pwd`/regress/unittests/bitmap
430 [ -d `pwd`/regress/unittests/sshbuf ] || \ 437 $(MKDIR_P) `pwd`/regress/unittests/conversion
431 mkdir -p `pwd`/regress/unittests/sshbuf 438 $(MKDIR_P) `pwd`/regress/unittests/hostkeys
432 [ -d `pwd`/regress/unittests/sshkey ] || \ 439 $(MKDIR_P) `pwd`/regress/unittests/kex
433 mkdir -p `pwd`/regress/unittests/sshkey 440 $(MKDIR_P) `pwd`/regress/unittests/match
434 [ -d `pwd`/regress/unittests/bitmap ] || \ 441 $(MKDIR_P) `pwd`/regress/unittests/utf8
435 mkdir -p `pwd`/regress/unittests/bitmap 442 $(MKDIR_P) `pwd`/regress/misc/kexfuzz
436 [ -d `pwd`/regress/unittests/conversion ] || \
437 mkdir -p `pwd`/regress/unittests/conversion
438 [ -d `pwd`/regress/unittests/hostkeys ] || \
439 mkdir -p `pwd`/regress/unittests/hostkeys
440 [ -d `pwd`/regress/unittests/kex ] || \
441 mkdir -p `pwd`/regress/unittests/kex
442 [ -d `pwd`/regress/unittests/match ] || \
443 mkdir -p `pwd`/regress/unittests/match
444 [ -d `pwd`/regress/unittests/utf8 ] || \
445 mkdir -p `pwd`/regress/unittests/utf8
446 [ -d `pwd`/regress/misc/kexfuzz ] || \
447 mkdir -p `pwd`/regress/misc/kexfuzz
448 [ -f `pwd`/regress/Makefile ] || \ 443 [ -f `pwd`/regress/Makefile ] || \
449 ln -s `cd $(srcdir) && pwd`/regress/Makefile `pwd`/regress/Makefile 444 ln -s `cd $(srcdir) && pwd`/regress/Makefile `pwd`/regress/Makefile
450 445
@@ -584,6 +579,8 @@ regress-binaries: regress/modpipe$(EXEEXT) \
584 regress/unittests/utf8/test_utf8$(EXEEXT) \ 579 regress/unittests/utf8/test_utf8$(EXEEXT) \
585 regress/misc/kexfuzz/kexfuzz$(EXEEXT) 580 regress/misc/kexfuzz/kexfuzz$(EXEEXT)
586 581
582REGRESSTMP = "$(PWD)/regress"
583
587tests interop-tests t-exec unit: regress-prep regress-binaries $(TARGETS) 584tests interop-tests t-exec unit: regress-prep regress-binaries $(TARGETS)
588 BUILDDIR=`pwd`; \ 585 BUILDDIR=`pwd`; \
589 TEST_SSH_SCP="$${BUILDDIR}/scp"; \ 586 TEST_SSH_SCP="$${BUILDDIR}/scp"; \
@@ -607,7 +604,7 @@ tests interop-tests t-exec unit: regress-prep regress-binaries $(TARGETS)
607 .OBJDIR="$${BUILDDIR}/regress" \ 604 .OBJDIR="$${BUILDDIR}/regress" \
608 .CURDIR="`pwd`" \ 605 .CURDIR="`pwd`" \
609 BUILDDIR="$${BUILDDIR}" \ 606 BUILDDIR="$${BUILDDIR}" \
610 OBJ="$${BUILDDIR}/regress/" \ 607 OBJ="$(REGRESSTMP)" \
611 PATH="$${BUILDDIR}:$${PATH}" \ 608 PATH="$${BUILDDIR}:$${PATH}" \
612 TEST_ENV=MALLOC_OPTIONS="@TEST_MALLOC_OPTIONS@" \ 609 TEST_ENV=MALLOC_OPTIONS="@TEST_MALLOC_OPTIONS@" \
613 TEST_MALLOC_OPTIONS="@TEST_MALLOC_OPTIONS@" \ 610 TEST_MALLOC_OPTIONS="@TEST_MALLOC_OPTIONS@" \
@@ -652,3 +649,5 @@ package: $(CONFIGFILES) $(MANPAGES) $(TARGETS)
652 if [ "@MAKE_PACKAGE_SUPPORTED@" = yes ]; then \ 649 if [ "@MAKE_PACKAGE_SUPPORTED@" = yes ]; then \
653 sh buildpkg.sh; \ 650 sh buildpkg.sh; \
654 fi 651 fi
652
653# @DEPEND@
diff --git a/PROTOCOL b/PROTOCOL
index 4e9e87575..b1fc00691 100644
--- a/PROTOCOL
+++ b/PROTOCOL
@@ -295,10 +295,14 @@ has completed.
295 string[] hostkeys 295 string[] hostkeys
296 296
297Upon receiving this message, a client should check which of the 297Upon receiving this message, a client should check which of the
298supplied host keys are present in known_hosts. For keys that are 298supplied host keys are present in known_hosts.
299not present, it should send a "hostkeys-prove@openssh.com" message 299
300to request the server prove ownership of the private half of the 300Note that the server may send key types that the client does not
301key. 301support. The client should disgregard such keys if they are received.
302
303If the client identifies any keys that are not present for the host,
304it should send a "hostkeys-prove@openssh.com" message to request the
305server prove ownership of the private half of the key.
302 306
303 byte SSH_MSG_GLOBAL_REQUEST 307 byte SSH_MSG_GLOBAL_REQUEST
304 string "hostkeys-prove-00@openssh.com" 308 string "hostkeys-prove-00@openssh.com"
@@ -454,4 +458,4 @@ respond with a SSH_FXP_STATUS message.
454This extension is advertised in the SSH_FXP_VERSION hello with version 458This extension is advertised in the SSH_FXP_VERSION hello with version
455"1". 459"1".
456 460
457$OpenBSD: PROTOCOL,v 1.31 2017/05/26 01:40:07 djm Exp $ 461$OpenBSD: PROTOCOL,v 1.32 2018/02/19 00:55:02 djm Exp $
diff --git a/PROTOCOL.certkeys b/PROTOCOL.certkeys
index 42aa8c2a1..64cb18700 100644
--- a/PROTOCOL.certkeys
+++ b/PROTOCOL.certkeys
@@ -100,9 +100,9 @@ DSA certificate
100 100
101ECDSA certificate 101ECDSA certificate
102 102
103 string "ecdsa-sha2-nistp256-v01@openssh.com" | 103 string "ecdsa-sha2-nistp256-cert-v01@openssh.com" |
104 "ecdsa-sha2-nistp384-v01@openssh.com" | 104 "ecdsa-sha2-nistp384-cert-v01@openssh.com" |
105 "ecdsa-sha2-nistp521-v01@openssh.com" 105 "ecdsa-sha2-nistp521-cert-v01@openssh.com"
106 string nonce 106 string nonce
107 string curve 107 string curve
108 string public_key 108 string public_key
@@ -291,4 +291,4 @@ permit-user-rc empty Flag indicating that execution of
291 of this script will not be permitted if 291 of this script will not be permitted if
292 this option is not present. 292 this option is not present.
293 293
294$OpenBSD: PROTOCOL.certkeys,v 1.12 2017/05/31 04:29:44 djm Exp $ 294$OpenBSD: PROTOCOL.certkeys,v 1.13 2017/11/03 02:32:19 djm Exp $
diff --git a/README b/README
index 103d43e9b..fb8e21743 100644
--- a/README
+++ b/README
@@ -1,11 +1,11 @@
1See https://www.openssh.com/releasenotes.html#7.6p1 for the release notes. 1See https://www.openssh.com/releasenotes.html#7.7p1 for the release notes.
2 2
3Please read https://www.openssh.com/report.html for bug reporting 3Please read https://www.openssh.com/report.html for bug reporting
4instructions and note that we do not use Github for bug reporting or 4instructions and note that we do not use Github for bug reporting or
5patch/pull-request management. 5patch/pull-request management.
6 6
7- A Japanese translation of this document and of the release notes is 7- A Japanese translation of this document and of the release notes is
8- available at http://www.unixuser.org/~haruyama/security/openssh/index.html 8- available at https://www.unixuser.org/~haruyama/security/openssh/index.html
9- Thanks to HARUYAMA Seigo <haruyama@unixuser.org> 9- Thanks to HARUYAMA Seigo <haruyama@unixuser.org>
10 10
11This is the port of OpenBSD's excellent OpenSSH[0] to Linux and other 11This is the port of OpenBSD's excellent OpenSSH[0] to Linux and other
@@ -22,7 +22,7 @@ This port consists of the re-introduction of autoconf support, PAM
22support, EGD[1]/PRNGD[2] support and replacements for OpenBSD library 22support, EGD[1]/PRNGD[2] support and replacements for OpenBSD library
23functions that are (regrettably) absent from other unices. This port 23functions that are (regrettably) absent from other unices. This port
24has been best tested on AIX, Cygwin, HP-UX, Linux, MacOS/X, 24has been best tested on AIX, Cygwin, HP-UX, Linux, MacOS/X,
25NetBSD, OpenBSD, OpenServer, Solaris, Unicos, and UnixWare. 25NetBSD, OpenBSD, OpenServer, Solaris and UnixWare.
26 26
27This version actively tracks changes in the OpenBSD CVS repository. 27This version actively tracks changes in the OpenBSD CVS repository.
28 28
@@ -56,11 +56,11 @@ References -
56 56
57[0] https://www.openssh.com/ 57[0] https://www.openssh.com/
58[1] http://www.lothar.com/tech/crypto/ 58[1] http://www.lothar.com/tech/crypto/
59[2] http://www.aet.tu-cottbus.de/personen/jaenicke/postfix_tls/prngd.html 59[2] http://prngd.sourceforge.net/
60[3] http://www.gzip.org/zlib/ 60[3] https://www.zlib.net/
61[4] http://www.openssl.org/ 61[4] https://www.openssl.org/
62[5] http://www.openpam.org 62[5] https://www.openpam.org
63 http://www.kernel.org/pub/linux/libs/pam/ 63 https://www.kernel.org/pub/linux/libs/pam/
64 (PAM also is standard on Solaris and HP-UX 11) 64 (PAM also is standard on Solaris and HP-UX 11)
65[6] http://thrysoee.dk/editline/ (portable version) 65[6] https://thrysoee.dk/editline/ (portable version)
66[7] http://man.openbsd.org/style.9 66[7] https://man.openbsd.org/style.9
diff --git a/README.privsep b/README.privsep
index 2120544c7..460e90565 100644
--- a/README.privsep
+++ b/README.privsep
@@ -34,8 +34,8 @@ privsep user and chroot directory:
34PAM-enabled OpenSSH is known to function with privsep on AIX, FreeBSD, 34PAM-enabled OpenSSH is known to function with privsep on AIX, FreeBSD,
35HP-UX (including Trusted Mode), Linux, NetBSD and Solaris. 35HP-UX (including Trusted Mode), Linux, NetBSD and Solaris.
36 36
37On Cygwin, Tru64 Unix, OpenServer, and Unicos only the pre-authentication 37On Cygwin, Tru64 Unix and OpenServer only the pre-authentication part
38part of privsep is supported. Post-authentication privsep is disabled 38of privsep is supported. Post-authentication privsep is disabled
39automatically (so you won't see the additional process mentioned below). 39automatically (so you won't see the additional process mentioned below).
40 40
41Note that for a normal interactive login with a shell, enabling privsep 41Note that for a normal interactive login with a shell, enabling privsep
diff --git a/auth-options.c b/auth-options.c
index ccdd0b20a..b528c197a 100644
--- a/auth-options.c
+++ b/auth-options.c
@@ -1,13 +1,18 @@
1/* $OpenBSD: auth-options.c,v 1.74 2017/09/12 06:32:07 djm Exp $ */ 1/* $OpenBSD: auth-options.c,v 1.78 2018/03/14 05:35:40 djm Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Copyright (c) 2018 Damien Miller <djm@mindrot.org>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 *
5 * All rights reserved 5 * Permission to use, copy, modify, and distribute this software for any
6 * As far as I am concerned, the code I have written for this software 6 * purpose with or without fee is hereby granted, provided that the above
7 * can be used freely for any purpose. Any derived versions of this 7 * copyright notice and this permission notice appear in all copies.
8 * software must be clearly marked as such, and if the derived work is 8 *
9 * incompatible with the protocol description in the RFC file, it must be 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * called by a name other than "ssh" or "Secure Shell". 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
11 */ 16 */
12 17
13#include "includes.h" 18#include "includes.h"
@@ -19,99 +24,33 @@
19#include <string.h> 24#include <string.h>
20#include <stdio.h> 25#include <stdio.h>
21#include <stdarg.h> 26#include <stdarg.h>
27#include <ctype.h>
28#include <limits.h>
22 29
23#include "openbsd-compat/sys-queue.h" 30#include "openbsd-compat/sys-queue.h"
24 31
25#include "key.h" /* XXX for typedef */
26#include "buffer.h" /* XXX for typedef */
27#include "xmalloc.h" 32#include "xmalloc.h"
28#include "match.h"
29#include "ssherr.h" 33#include "ssherr.h"
30#include "log.h" 34#include "log.h"
31#include "canohost.h"
32#include "packet.h"
33#include "sshbuf.h" 35#include "sshbuf.h"
34#include "misc.h" 36#include "misc.h"
35#include "channels.h"
36#include "servconf.h"
37#include "sshkey.h" 37#include "sshkey.h"
38#include "match.h"
39#include "ssh2.h"
38#include "auth-options.h" 40#include "auth-options.h"
39#include "hostfile.h"
40#include "auth.h"
41
42/* Flags set authorized_keys flags */
43int no_port_forwarding_flag = 0;
44int no_agent_forwarding_flag = 0;
45int no_x11_forwarding_flag = 0;
46int no_pty_flag = 0;
47int no_user_rc = 0;
48int key_is_cert_authority = 0;
49
50/* "command=" option. */
51char *forced_command = NULL;
52
53/* "environment=" options. */
54struct envstring *custom_environment = NULL;
55
56/* "tunnel=" option. */
57int forced_tun_device = -1;
58
59/* "principals=" option. */
60char *authorized_principals = NULL;
61
62/* Throttle log messages. */
63int logged_from_hostip = 0;
64int logged_cert_hostip = 0;
65
66extern ServerOptions options;
67
68/* XXX refactor to be stateless */
69
70void
71auth_start_parse_options(void)
72{
73 logged_from_hostip = 0;
74 logged_cert_hostip = 0;
75}
76
77void
78auth_clear_options(void)
79{
80 struct ssh *ssh = active_state; /* XXX */
81
82 no_agent_forwarding_flag = 0;
83 no_port_forwarding_flag = 0;
84 no_pty_flag = 0;
85 no_x11_forwarding_flag = 0;
86 no_user_rc = 0;
87 key_is_cert_authority = 0;
88 while (custom_environment) {
89 struct envstring *ce = custom_environment;
90 custom_environment = ce->next;
91 free(ce->s);
92 free(ce);
93 }
94 free(forced_command);
95 forced_command = NULL;
96 free(authorized_principals);
97 authorized_principals = NULL;
98 forced_tun_device = -1;
99 channel_clear_permitted_opens(ssh);
100}
101 41
102/* 42/*
103 * Match flag 'opt' in *optsp, and if allow_negate is set then also match 43 * Match flag 'opt' in *optsp, and if allow_negate is set then also match
104 * 'no-opt'. Returns -1 if option not matched, 1 if option matches or 0 44 * 'no-opt'. Returns -1 if option not matched, 1 if option matches or 0
105 * if negated option matches. 45 * if negated option matches.
106 * If the option or negated option matches, then *optsp is updated to 46 * If the option or negated option matches, then *optsp is updated to
107 * point to the first character after the option and, if 'msg' is not NULL 47 * point to the first character after the option.
108 * then a message based on it added via auth_debug_add().
109 */ 48 */
110static int 49static int
111match_flag(const char *opt, int allow_negate, char **optsp, const char *msg) 50opt_flag(const char *opt, int allow_negate, const char **optsp)
112{ 51{
113 size_t opt_len = strlen(opt); 52 size_t opt_len = strlen(opt);
114 char *opts = *optsp; 53 const char *opts = *optsp;
115 int negate = 0; 54 int negate = 0;
116 55
117 if (allow_negate && strncasecmp(opts, "no-", 3) == 0) { 56 if (allow_negate && strncasecmp(opts, "no-", 3) == 0) {
@@ -120,371 +59,92 @@ match_flag(const char *opt, int allow_negate, char **optsp, const char *msg)
120 } 59 }
121 if (strncasecmp(opts, opt, opt_len) == 0) { 60 if (strncasecmp(opts, opt, opt_len) == 0) {
122 *optsp = opts + opt_len; 61 *optsp = opts + opt_len;
123 if (msg != NULL) {
124 auth_debug_add("%s %s.", msg,
125 negate ? "disabled" : "enabled");
126 }
127 return negate ? 0 : 1; 62 return negate ? 0 : 1;
128 } 63 }
129 return -1; 64 return -1;
130} 65}
131 66
132/* 67static char *
133 * return 1 if access is granted, 0 if not. 68opt_dequote(const char **sp, const char **errstrp)
134 * side effect: sets key option flags
135 * XXX remove side effects; fill structure instead.
136 */
137int
138auth_parse_options(struct passwd *pw, char *opts, const char *file,
139 u_long linenum)
140{ 69{
141 struct ssh *ssh = active_state; /* XXX */ 70 const char *s = *sp;
142 const char *cp; 71 char *ret;
143 int i, r; 72 size_t i;
144 73
145 /* reset options */ 74 *errstrp = NULL;
146 auth_clear_options(); 75 if (*s != '"') {
76 *errstrp = "missing start quote";
77 return NULL;
78 }
79 s++;
80 if ((ret = malloc(strlen((s)) + 1)) == NULL) {
81 *errstrp = "memory allocation failed";
82 return NULL;
83 }
84 for (i = 0; *s != '\0' && *s != '"';) {
85 if (s[0] == '\\' && s[1] == '"')
86 s++;
87 ret[i++] = *s++;
88 }
89 if (*s == '\0') {
90 *errstrp = "missing end quote";
91 free(ret);
92 return NULL;
93 }
94 ret[i] = '\0';
95 s++;
96 *sp = s;
97 return ret;
98}
147 99
148 if (!opts) 100static int
101opt_match(const char **opts, const char *term)
102{
103 if (strncasecmp((*opts), term, strlen(term)) == 0 &&
104 (*opts)[strlen(term)] == '=') {
105 *opts += strlen(term) + 1;
149 return 1; 106 return 1;
150
151 while (*opts && *opts != ' ' && *opts != '\t') {
152 if ((r = match_flag("cert-authority", 0, &opts, NULL)) != -1) {
153 key_is_cert_authority = r;
154 goto next_option;
155 }
156 if ((r = match_flag("restrict", 0, &opts, NULL)) != -1) {
157 auth_debug_add("Key is restricted.");
158 no_port_forwarding_flag = 1;
159 no_agent_forwarding_flag = 1;
160 no_x11_forwarding_flag = 1;
161 no_pty_flag = 1;
162 no_user_rc = 1;
163 goto next_option;
164 }
165 if ((r = match_flag("port-forwarding", 1, &opts,
166 "Port forwarding")) != -1) {
167 no_port_forwarding_flag = r != 1;
168 goto next_option;
169 }
170 if ((r = match_flag("agent-forwarding", 1, &opts,
171 "Agent forwarding")) != -1) {
172 no_agent_forwarding_flag = r != 1;
173 goto next_option;
174 }
175 if ((r = match_flag("x11-forwarding", 1, &opts,
176 "X11 forwarding")) != -1) {
177 no_x11_forwarding_flag = r != 1;
178 goto next_option;
179 }
180 if ((r = match_flag("pty", 1, &opts,
181 "PTY allocation")) != -1) {
182 no_pty_flag = r != 1;
183 goto next_option;
184 }
185 if ((r = match_flag("user-rc", 1, &opts,
186 "User rc execution")) != -1) {
187 no_user_rc = r != 1;
188 goto next_option;
189 }
190 cp = "command=\"";
191 if (strncasecmp(opts, cp, strlen(cp)) == 0) {
192 opts += strlen(cp);
193 free(forced_command);
194 forced_command = xmalloc(strlen(opts) + 1);
195 i = 0;
196 while (*opts) {
197 if (*opts == '"')
198 break;
199 if (*opts == '\\' && opts[1] == '"') {
200 opts += 2;
201 forced_command[i++] = '"';
202 continue;
203 }
204 forced_command[i++] = *opts++;
205 }
206 if (!*opts) {
207 debug("%.100s, line %lu: missing end quote",
208 file, linenum);
209 auth_debug_add("%.100s, line %lu: missing end quote",
210 file, linenum);
211 free(forced_command);
212 forced_command = NULL;
213 goto bad_option;
214 }
215 forced_command[i] = '\0';
216 auth_debug_add("Forced command.");
217 opts++;
218 goto next_option;
219 }
220 cp = "principals=\"";
221 if (strncasecmp(opts, cp, strlen(cp)) == 0) {
222 opts += strlen(cp);
223 free(authorized_principals);
224 authorized_principals = xmalloc(strlen(opts) + 1);
225 i = 0;
226 while (*opts) {
227 if (*opts == '"')
228 break;
229 if (*opts == '\\' && opts[1] == '"') {
230 opts += 2;
231 authorized_principals[i++] = '"';
232 continue;
233 }
234 authorized_principals[i++] = *opts++;
235 }
236 if (!*opts) {
237 debug("%.100s, line %lu: missing end quote",
238 file, linenum);
239 auth_debug_add("%.100s, line %lu: missing end quote",
240 file, linenum);
241 free(authorized_principals);
242 authorized_principals = NULL;
243 goto bad_option;
244 }
245 authorized_principals[i] = '\0';
246 auth_debug_add("principals: %.900s",
247 authorized_principals);
248 opts++;
249 goto next_option;
250 }
251 cp = "environment=\"";
252 if (strncasecmp(opts, cp, strlen(cp)) == 0) {
253 char *s;
254 struct envstring *new_envstring;
255
256 opts += strlen(cp);
257 s = xmalloc(strlen(opts) + 1);
258 i = 0;
259 while (*opts) {
260 if (*opts == '"')
261 break;
262 if (*opts == '\\' && opts[1] == '"') {
263 opts += 2;
264 s[i++] = '"';
265 continue;
266 }
267 s[i++] = *opts++;
268 }
269 if (!*opts) {
270 debug("%.100s, line %lu: missing end quote",
271 file, linenum);
272 auth_debug_add("%.100s, line %lu: missing end quote",
273 file, linenum);
274 free(s);
275 goto bad_option;
276 }
277 s[i] = '\0';
278 opts++;
279 if (options.permit_user_env) {
280 auth_debug_add("Adding to environment: "
281 "%.900s", s);
282 debug("Adding to environment: %.900s", s);
283 new_envstring = xcalloc(1,
284 sizeof(*new_envstring));
285 new_envstring->s = s;
286 new_envstring->next = custom_environment;
287 custom_environment = new_envstring;
288 s = NULL;
289 }
290 free(s);
291 goto next_option;
292 }
293 cp = "from=\"";
294 if (strncasecmp(opts, cp, strlen(cp)) == 0) {
295 const char *remote_ip = ssh_remote_ipaddr(ssh);
296 const char *remote_host = auth_get_canonical_hostname(
297 ssh, options.use_dns);
298 char *patterns = xmalloc(strlen(opts) + 1);
299
300 opts += strlen(cp);
301 i = 0;
302 while (*opts) {
303 if (*opts == '"')
304 break;
305 if (*opts == '\\' && opts[1] == '"') {
306 opts += 2;
307 patterns[i++] = '"';
308 continue;
309 }
310 patterns[i++] = *opts++;
311 }
312 if (!*opts) {
313 debug("%.100s, line %lu: missing end quote",
314 file, linenum);
315 auth_debug_add("%.100s, line %lu: missing end quote",
316 file, linenum);
317 free(patterns);
318 goto bad_option;
319 }
320 patterns[i] = '\0';
321 opts++;
322 switch (match_host_and_ip(remote_host, remote_ip,
323 patterns)) {
324 case 1:
325 free(patterns);
326 /* Host name matches. */
327 goto next_option;
328 case -1:
329 debug("%.100s, line %lu: invalid criteria",
330 file, linenum);
331 auth_debug_add("%.100s, line %lu: "
332 "invalid criteria", file, linenum);
333 /* FALLTHROUGH */
334 case 0:
335 free(patterns);
336 if (!logged_from_hostip) {
337 logit("Authentication tried for %.100s with "
338 "correct key but not from a permitted "
339 "host (host=%.200s, ip=%.200s).",
340 pw->pw_name, remote_host, remote_ip);
341 logged_from_hostip = 1;
342 }
343 auth_debug_add("Your host '%.200s' is not "
344 "permitted to use this key for login.",
345 remote_host);
346 break;
347 }
348 /* deny access */
349 return 0;
350 }
351 cp = "permitopen=\"";
352 if (strncasecmp(opts, cp, strlen(cp)) == 0) {
353 char *host, *p;
354 int port;
355 char *patterns = xmalloc(strlen(opts) + 1);
356
357 opts += strlen(cp);
358 i = 0;
359 while (*opts) {
360 if (*opts == '"')
361 break;
362 if (*opts == '\\' && opts[1] == '"') {
363 opts += 2;
364 patterns[i++] = '"';
365 continue;
366 }
367 patterns[i++] = *opts++;
368 }
369 if (!*opts) {
370 debug("%.100s, line %lu: missing end quote",
371 file, linenum);
372 auth_debug_add("%.100s, line %lu: missing "
373 "end quote", file, linenum);
374 free(patterns);
375 goto bad_option;
376 }
377 patterns[i] = '\0';
378 opts++;
379 p = patterns;
380 /* XXX - add streamlocal support */
381 host = hpdelim(&p);
382 if (host == NULL || strlen(host) >= NI_MAXHOST) {
383 debug("%.100s, line %lu: Bad permitopen "
384 "specification <%.100s>", file, linenum,
385 patterns);
386 auth_debug_add("%.100s, line %lu: "
387 "Bad permitopen specification", file,
388 linenum);
389 free(patterns);
390 goto bad_option;
391 }
392 host = cleanhostname(host);
393 if (p == NULL || (port = permitopen_port(p)) < 0) {
394 debug("%.100s, line %lu: Bad permitopen port "
395 "<%.100s>", file, linenum, p ? p : "");
396 auth_debug_add("%.100s, line %lu: "
397 "Bad permitopen port", file, linenum);
398 free(patterns);
399 goto bad_option;
400 }
401 if ((options.allow_tcp_forwarding & FORWARD_LOCAL) != 0)
402 channel_add_permitted_opens(ssh, host, port);
403 free(patterns);
404 goto next_option;
405 }
406 cp = "tunnel=\"";
407 if (strncasecmp(opts, cp, strlen(cp)) == 0) {
408 char *tun = NULL;
409 opts += strlen(cp);
410 tun = xmalloc(strlen(opts) + 1);
411 i = 0;
412 while (*opts) {
413 if (*opts == '"')
414 break;
415 tun[i++] = *opts++;
416 }
417 if (!*opts) {
418 debug("%.100s, line %lu: missing end quote",
419 file, linenum);
420 auth_debug_add("%.100s, line %lu: missing end quote",
421 file, linenum);
422 free(tun);
423 forced_tun_device = -1;
424 goto bad_option;
425 }
426 tun[i] = '\0';
427 forced_tun_device = a2tun(tun, NULL);
428 free(tun);
429 if (forced_tun_device == SSH_TUNID_ERR) {
430 debug("%.100s, line %lu: invalid tun device",
431 file, linenum);
432 auth_debug_add("%.100s, line %lu: invalid tun device",
433 file, linenum);
434 forced_tun_device = -1;
435 goto bad_option;
436 }
437 auth_debug_add("Forced tun device: %d", forced_tun_device);
438 opts++;
439 goto next_option;
440 }
441next_option:
442 /*
443 * Skip the comma, and move to the next option
444 * (or break out if there are no more).
445 */
446 if (!*opts)
447 fatal("Bugs in auth-options.c option processing.");
448 if (*opts == ' ' || *opts == '\t')
449 break; /* End of options. */
450 if (*opts != ',')
451 goto bad_option;
452 opts++;
453 /* Process the next option. */
454 } 107 }
108 return 0;
109}
455 110
456 /* grant access */ 111static int
457 return 1; 112dup_strings(char ***dstp, size_t *ndstp, char **src, size_t nsrc)
113{
114 char **dst;
115 size_t i, j;
458 116
459bad_option: 117 *dstp = NULL;
460 logit("Bad options in %.100s file, line %lu: %.50s", 118 *ndstp = 0;
461 file, linenum, opts); 119 if (nsrc == 0)
462 auth_debug_add("Bad options in %.100s file, line %lu: %.50s", 120 return 0;
463 file, linenum, opts);
464 121
465 /* deny access */ 122 if ((dst = calloc(nsrc, sizeof(*src))) == NULL)
123 return -1;
124 for (i = 0; i < nsrc; i++) {
125 if ((dst[i] = strdup(src[i])) == NULL) {
126 for (j = 0; j < i; j++)
127 free(dst[j]);
128 free(dst);
129 return -1;
130 }
131 }
132 /* success */
133 *dstp = dst;
134 *ndstp = nsrc;
466 return 0; 135 return 0;
467} 136}
468 137
469#define OPTIONS_CRITICAL 1 138#define OPTIONS_CRITICAL 1
470#define OPTIONS_EXTENSIONS 2 139#define OPTIONS_EXTENSIONS 2
471static int 140static int
472parse_option_list(struct sshbuf *oblob, struct passwd *pw, 141cert_option_list(struct sshauthopt *opts, struct sshbuf *oblob,
473 u_int which, int crit, 142 u_int which, int crit)
474 int *cert_no_port_forwarding_flag,
475 int *cert_no_agent_forwarding_flag,
476 int *cert_no_x11_forwarding_flag,
477 int *cert_no_pty_flag,
478 int *cert_no_user_rc,
479 char **cert_forced_command,
480 int *cert_source_address_done)
481{ 143{
482 struct ssh *ssh = active_state; /* XXX */
483 char *command, *allowed; 144 char *command, *allowed;
484 const char *remote_ip;
485 char *name = NULL; 145 char *name = NULL;
486 struct sshbuf *c = NULL, *data = NULL; 146 struct sshbuf *c = NULL, *data = NULL;
487 int r, ret = -1, result, found; 147 int r, ret = -1, found;
488 148
489 if ((c = sshbuf_fromb(oblob)) == NULL) { 149 if ((c = sshbuf_fromb(oblob)) == NULL) {
490 error("%s: sshbuf_fromb failed", __func__); 150 error("%s: sshbuf_fromb failed", __func__);
@@ -505,21 +165,21 @@ parse_option_list(struct sshbuf *oblob, struct passwd *pw,
505 found = 0; 165 found = 0;
506 if ((which & OPTIONS_EXTENSIONS) != 0) { 166 if ((which & OPTIONS_EXTENSIONS) != 0) {
507 if (strcmp(name, "permit-X11-forwarding") == 0) { 167 if (strcmp(name, "permit-X11-forwarding") == 0) {
508 *cert_no_x11_forwarding_flag = 0; 168 opts->permit_x11_forwarding_flag = 1;
509 found = 1; 169 found = 1;
510 } else if (strcmp(name, 170 } else if (strcmp(name,
511 "permit-agent-forwarding") == 0) { 171 "permit-agent-forwarding") == 0) {
512 *cert_no_agent_forwarding_flag = 0; 172 opts->permit_agent_forwarding_flag = 1;
513 found = 1; 173 found = 1;
514 } else if (strcmp(name, 174 } else if (strcmp(name,
515 "permit-port-forwarding") == 0) { 175 "permit-port-forwarding") == 0) {
516 *cert_no_port_forwarding_flag = 0; 176 opts->permit_port_forwarding_flag = 1;
517 found = 1; 177 found = 1;
518 } else if (strcmp(name, "permit-pty") == 0) { 178 } else if (strcmp(name, "permit-pty") == 0) {
519 *cert_no_pty_flag = 0; 179 opts->permit_pty_flag = 1;
520 found = 1; 180 found = 1;
521 } else if (strcmp(name, "permit-user-rc") == 0) { 181 } else if (strcmp(name, "permit-user-rc") == 0) {
522 *cert_no_user_rc = 0; 182 opts->permit_user_rc = 1;
523 found = 1; 183 found = 1;
524 } 184 }
525 } 185 }
@@ -531,13 +191,13 @@ parse_option_list(struct sshbuf *oblob, struct passwd *pw,
531 "section: %s", name, ssh_err(r)); 191 "section: %s", name, ssh_err(r));
532 goto out; 192 goto out;
533 } 193 }
534 if (*cert_forced_command != NULL) { 194 if (opts->force_command != NULL) {
535 error("Certificate has multiple " 195 error("Certificate has multiple "
536 "force-command options"); 196 "force-command options");
537 free(command); 197 free(command);
538 goto out; 198 goto out;
539 } 199 }
540 *cert_forced_command = command; 200 opts->force_command = command;
541 found = 1; 201 found = 1;
542 } 202 }
543 if (strcmp(name, "source-address") == 0) { 203 if (strcmp(name, "source-address") == 0) {
@@ -547,41 +207,19 @@ parse_option_list(struct sshbuf *oblob, struct passwd *pw,
547 "section: %s", name, ssh_err(r)); 207 "section: %s", name, ssh_err(r));
548 goto out; 208 goto out;
549 } 209 }
550 if ((*cert_source_address_done)++) { 210 if (opts->required_from_host_cert != NULL) {
551 error("Certificate has multiple " 211 error("Certificate has multiple "
552 "source-address options"); 212 "source-address options");
553 free(allowed); 213 free(allowed);
554 goto out; 214 goto out;
555 } 215 }
556 remote_ip = ssh_remote_ipaddr(ssh); 216 /* Check syntax */
557 result = addr_match_cidr_list(remote_ip, 217 if (addr_match_cidr_list(NULL, allowed) == -1) {
558 allowed);
559 free(allowed);
560 switch (result) {
561 case 1:
562 /* accepted */
563 break;
564 case 0:
565 /* no match */
566 if (!logged_cert_hostip) {
567 logit("Authentication tried for %.100s "
568 "with valid certificate but not "
569 "from a permitted host "
570 "(ip=%.200s).", pw->pw_name,
571 remote_ip);
572 logged_cert_hostip = 1;
573 }
574 auth_debug_add("Your address '%.200s' "
575 "is not permitted to use this "
576 "certificate for login.",
577 remote_ip);
578 goto out;
579 case -1:
580 default:
581 error("Certificate source-address " 218 error("Certificate source-address "
582 "contents invalid"); 219 "contents invalid");
583 goto out; 220 goto out;
584 } 221 }
222 opts->required_from_host_cert = allowed;
585 found = 1; 223 found = 1;
586 } 224 }
587 } 225 }
@@ -607,74 +245,628 @@ parse_option_list(struct sshbuf *oblob, struct passwd *pw,
607 ret = 0; 245 ret = 0;
608 246
609 out: 247 out:
610 if (ret != 0 &&
611 cert_forced_command != NULL &&
612 *cert_forced_command != NULL) {
613 free(*cert_forced_command);
614 *cert_forced_command = NULL;
615 }
616 free(name); 248 free(name);
617 sshbuf_free(data); 249 sshbuf_free(data);
618 sshbuf_free(c); 250 sshbuf_free(c);
619 return ret; 251 return ret;
620} 252}
621 253
254struct sshauthopt *
255sshauthopt_new(void)
256{
257 struct sshauthopt *ret;
258
259 if ((ret = calloc(1, sizeof(*ret))) == NULL)
260 return NULL;
261 ret->force_tun_device = -1;
262 return ret;
263}
264
265void
266sshauthopt_free(struct sshauthopt *opts)
267{
268 size_t i;
269
270 if (opts == NULL)
271 return;
272
273 free(opts->cert_principals);
274 free(opts->force_command);
275 free(opts->required_from_host_cert);
276 free(opts->required_from_host_keys);
277
278 for (i = 0; i < opts->nenv; i++)
279 free(opts->env[i]);
280 free(opts->env);
281
282 for (i = 0; i < opts->npermitopen; i++)
283 free(opts->permitopen[i]);
284 free(opts->permitopen);
285
286 explicit_bzero(opts, sizeof(*opts));
287 free(opts);
288}
289
290struct sshauthopt *
291sshauthopt_new_with_keys_defaults(void)
292{
293 struct sshauthopt *ret = NULL;
294
295 if ((ret = sshauthopt_new()) == NULL)
296 return NULL;
297
298 /* Defaults for authorized_keys flags */
299 ret->permit_port_forwarding_flag = 1;
300 ret->permit_agent_forwarding_flag = 1;
301 ret->permit_x11_forwarding_flag = 1;
302 ret->permit_pty_flag = 1;
303 ret->permit_user_rc = 1;
304 return ret;
305}
306
307struct sshauthopt *
308sshauthopt_parse(const char *opts, const char **errstrp)
309{
310 char **oarray, *opt, *cp, *tmp, *host;
311 int r;
312 struct sshauthopt *ret = NULL;
313 const char *errstr = "unknown error";
314 uint64_t valid_before;
315
316 if (errstrp != NULL)
317 *errstrp = NULL;
318 if ((ret = sshauthopt_new_with_keys_defaults()) == NULL)
319 goto alloc_fail;
320
321 if (opts == NULL)
322 return ret;
323
324 while (*opts && *opts != ' ' && *opts != '\t') {
325 /* flag options */
326 if ((r = opt_flag("restrict", 0, &opts)) != -1) {
327 ret->restricted = 1;
328 ret->permit_port_forwarding_flag = 0;
329 ret->permit_agent_forwarding_flag = 0;
330 ret->permit_x11_forwarding_flag = 0;
331 ret->permit_pty_flag = 0;
332 ret->permit_user_rc = 0;
333 } else if ((r = opt_flag("cert-authority", 0, &opts)) != -1) {
334 ret->cert_authority = r;
335 } else if ((r = opt_flag("port-forwarding", 1, &opts)) != -1) {
336 ret->permit_port_forwarding_flag = r == 1;
337 } else if ((r = opt_flag("agent-forwarding", 1, &opts)) != -1) {
338 ret->permit_agent_forwarding_flag = r == 1;
339 } else if ((r = opt_flag("x11-forwarding", 1, &opts)) != -1) {
340 ret->permit_x11_forwarding_flag = r == 1;
341 } else if ((r = opt_flag("pty", 1, &opts)) != -1) {
342 ret->permit_pty_flag = r == 1;
343 } else if ((r = opt_flag("user-rc", 1, &opts)) != -1) {
344 ret->permit_user_rc = r == 1;
345 } else if (opt_match(&opts, "command")) {
346 if (ret->force_command != NULL) {
347 errstr = "multiple \"command\" clauses";
348 goto fail;
349 }
350 ret->force_command = opt_dequote(&opts, &errstr);
351 if (ret->force_command == NULL)
352 goto fail;
353 } else if (opt_match(&opts, "principals")) {
354 if (ret->cert_principals != NULL) {
355 errstr = "multiple \"principals\" clauses";
356 goto fail;
357 }
358 ret->cert_principals = opt_dequote(&opts, &errstr);
359 if (ret->cert_principals == NULL)
360 goto fail;
361 } else if (opt_match(&opts, "from")) {
362 if (ret->required_from_host_keys != NULL) {
363 errstr = "multiple \"from\" clauses";
364 goto fail;
365 }
366 ret->required_from_host_keys = opt_dequote(&opts,
367 &errstr);
368 if (ret->required_from_host_keys == NULL)
369 goto fail;
370 } else if (opt_match(&opts, "expiry-time")) {
371 if ((opt = opt_dequote(&opts, &errstr)) == NULL)
372 goto fail;
373 if (parse_absolute_time(opt, &valid_before) != 0 ||
374 valid_before == 0) {
375 free(opt);
376 errstr = "invalid expires time";
377 goto fail;
378 }
379 free(opt);
380 if (ret->valid_before == 0 ||
381 valid_before < ret->valid_before)
382 ret->valid_before = valid_before;
383 } else if (opt_match(&opts, "environment")) {
384 if (ret->nenv > INT_MAX) {
385 errstr = "too many environment strings";
386 goto fail;
387 }
388 if ((opt = opt_dequote(&opts, &errstr)) == NULL)
389 goto fail;
390 /* env name must be alphanumeric and followed by '=' */
391 if ((tmp = strchr(opt, '=')) == NULL) {
392 free(opt);
393 errstr = "invalid environment string";
394 goto fail;
395 }
396 for (cp = opt; cp < tmp; cp++) {
397 if (!isalnum((u_char)*cp)) {
398 free(opt);
399 errstr = "invalid environment string";
400 goto fail;
401 }
402 }
403 /* Append it. */
404 oarray = ret->env;
405 if ((ret->env = recallocarray(ret->env, ret->nenv,
406 ret->nenv + 1, sizeof(*ret->env))) == NULL) {
407 free(opt);
408 ret->env = oarray; /* put it back for cleanup */
409 goto alloc_fail;
410 }
411 ret->env[ret->nenv++] = opt;
412 } else if (opt_match(&opts, "permitopen")) {
413 if (ret->npermitopen > INT_MAX) {
414 errstr = "too many permitopens";
415 goto fail;
416 }
417 if ((opt = opt_dequote(&opts, &errstr)) == NULL)
418 goto fail;
419 if ((tmp = strdup(opt)) == NULL) {
420 free(opt);
421 goto alloc_fail;
422 }
423 cp = tmp;
424 /* validate syntax of permitopen before recording it. */
425 host = hpdelim(&cp);
426 if (host == NULL || strlen(host) >= NI_MAXHOST) {
427 free(tmp);
428 free(opt);
429 errstr = "invalid permitopen hostname";
430 goto fail;
431 }
432 /*
433 * don't want to use permitopen_port to avoid
434 * dependency on channels.[ch] here.
435 */
436 if (cp == NULL ||
437 (strcmp(cp, "*") != 0 && a2port(cp) <= 0)) {
438 free(tmp);
439 free(opt);
440 errstr = "invalid permitopen port";
441 goto fail;
442 }
443 /* XXX - add streamlocal support */
444 free(tmp);
445 /* Record it */
446 oarray = ret->permitopen;
447 if ((ret->permitopen = recallocarray(ret->permitopen,
448 ret->npermitopen, ret->npermitopen + 1,
449 sizeof(*ret->permitopen))) == NULL) {
450 free(opt);
451 ret->permitopen = oarray;
452 goto alloc_fail;
453 }
454 ret->permitopen[ret->npermitopen++] = opt;
455 } else if (opt_match(&opts, "tunnel")) {
456 if ((opt = opt_dequote(&opts, &errstr)) == NULL)
457 goto fail;
458 ret->force_tun_device = a2tun(opt, NULL);
459 free(opt);
460 if (ret->force_tun_device == SSH_TUNID_ERR) {
461 errstr = "invalid tun device";
462 goto fail;
463 }
464 }
465 /*
466 * Skip the comma, and move to the next option
467 * (or break out if there are no more).
468 */
469 if (*opts == '\0' || *opts == ' ' || *opts == '\t')
470 break; /* End of options. */
471 /* Anything other than a comma is an unknown option */
472 if (*opts != ',') {
473 errstr = "unknown key option";
474 goto fail;
475 }
476 opts++;
477 if (*opts == '\0') {
478 errstr = "unexpected end-of-options";
479 goto fail;
480 }
481 }
482
483 /* success */
484 if (errstrp != NULL)
485 *errstrp = NULL;
486 return ret;
487
488alloc_fail:
489 errstr = "memory allocation failed";
490fail:
491 sshauthopt_free(ret);
492 if (errstrp != NULL)
493 *errstrp = errstr;
494 return NULL;
495}
496
497struct sshauthopt *
498sshauthopt_from_cert(struct sshkey *k)
499{
500 struct sshauthopt *ret;
501
502 if (k == NULL || !sshkey_type_is_cert(k->type) || k->cert == NULL ||
503 k->cert->type != SSH2_CERT_TYPE_USER)
504 return NULL;
505
506 if ((ret = sshauthopt_new()) == NULL)
507 return NULL;
508
509 /* Handle options and critical extensions separately */
510 if (cert_option_list(ret, k->cert->critical,
511 OPTIONS_CRITICAL, 1) == -1) {
512 sshauthopt_free(ret);
513 return NULL;
514 }
515 if (cert_option_list(ret, k->cert->extensions,
516 OPTIONS_EXTENSIONS, 0) == -1) {
517 sshauthopt_free(ret);
518 return NULL;
519 }
520 /* success */
521 return ret;
522}
523
622/* 524/*
623 * Set options from critical certificate options. These supersede user key 525 * Merges "additional" options to "primary" and returns the result.
624 * options so this must be called after auth_parse_options(). 526 * NB. Some options from primary have primacy.
625 */ 527 */
626int 528struct sshauthopt *
627auth_cert_options(struct sshkey *k, struct passwd *pw, const char **reason) 529sshauthopt_merge(const struct sshauthopt *primary,
530 const struct sshauthopt *additional, const char **errstrp)
628{ 531{
629 int cert_no_port_forwarding_flag = 1; 532 struct sshauthopt *ret;
630 int cert_no_agent_forwarding_flag = 1; 533 const char *errstr = "internal error";
631 int cert_no_x11_forwarding_flag = 1; 534 const char *tmp;
632 int cert_no_pty_flag = 1; 535
633 int cert_no_user_rc = 1; 536 if (errstrp != NULL)
634 char *cert_forced_command = NULL; 537 *errstrp = NULL;
635 int cert_source_address_done = 0; 538
636 539 if ((ret = sshauthopt_new()) == NULL)
637 *reason = "invalid certificate options"; 540 goto alloc_fail;
638 541
639 /* Separate options and extensions for v01 certs */ 542 /* cert_authority and cert_principals are cleared in result */
640 if (parse_option_list(k->cert->critical, pw, 543
641 OPTIONS_CRITICAL, 1, NULL, NULL, NULL, NULL, NULL, 544 /* Prefer access lists from primary. */
642 &cert_forced_command, 545 /* XXX err is both set and mismatch? */
643 &cert_source_address_done) == -1) 546 tmp = primary->required_from_host_cert;
644 return -1; 547 if (tmp == NULL)
645 if (parse_option_list(k->cert->extensions, pw, 548 tmp = additional->required_from_host_cert;
646 OPTIONS_EXTENSIONS, 0, 549 if (tmp != NULL && (ret->required_from_host_cert = strdup(tmp)) == NULL)
647 &cert_no_port_forwarding_flag, 550 goto alloc_fail;
648 &cert_no_agent_forwarding_flag, 551 tmp = primary->required_from_host_keys;
649 &cert_no_x11_forwarding_flag, 552 if (tmp == NULL)
650 &cert_no_pty_flag, 553 tmp = additional->required_from_host_keys;
651 &cert_no_user_rc, 554 if (tmp != NULL && (ret->required_from_host_keys = strdup(tmp)) == NULL)
652 NULL, NULL) == -1) 555 goto alloc_fail;
653 return -1; 556
557 /* force_tun_device, permitopen and environment prefer the primary. */
558 ret->force_tun_device = primary->force_tun_device;
559 if (ret->force_tun_device == -1)
560 ret->force_tun_device = additional->force_tun_device;
561 if (primary->nenv > 0) {
562 if (dup_strings(&ret->env, &ret->nenv,
563 primary->env, primary->nenv) != 0)
564 goto alloc_fail;
565 } else if (additional->nenv) {
566 if (dup_strings(&ret->env, &ret->nenv,
567 additional->env, additional->nenv) != 0)
568 goto alloc_fail;
569 }
570 if (primary->npermitopen > 0) {
571 if (dup_strings(&ret->permitopen, &ret->npermitopen,
572 primary->permitopen, primary->npermitopen) != 0)
573 goto alloc_fail;
574 } else if (additional->npermitopen > 0) {
575 if (dup_strings(&ret->permitopen, &ret->npermitopen,
576 additional->permitopen, additional->npermitopen) != 0)
577 goto alloc_fail;
578 }
579
580 /* Flags are logical-AND (i.e. must be set in both for permission) */
581#define OPTFLAG(x) ret->x = (primary->x == 1) && (additional->x == 1)
582 OPTFLAG(permit_port_forwarding_flag);
583 OPTFLAG(permit_agent_forwarding_flag);
584 OPTFLAG(permit_x11_forwarding_flag);
585 OPTFLAG(permit_pty_flag);
586 OPTFLAG(permit_user_rc);
587#undef OPTFLAG
588
589 /* Earliest expiry time should win */
590 if (primary->valid_before != 0)
591 ret->valid_before = primary->valid_before;
592 if (additional->valid_before != 0 &&
593 additional->valid_before < ret->valid_before)
594 ret->valid_before = additional->valid_before;
654 595
655 no_port_forwarding_flag |= cert_no_port_forwarding_flag;
656 no_agent_forwarding_flag |= cert_no_agent_forwarding_flag;
657 no_x11_forwarding_flag |= cert_no_x11_forwarding_flag;
658 no_pty_flag |= cert_no_pty_flag;
659 no_user_rc |= cert_no_user_rc;
660 /* 596 /*
661 * Only permit both CA and key option forced-command if they match. 597 * When both multiple forced-command are specified, only
662 * Otherwise refuse the certificate. 598 * proceed if they are identical, otherwise fail.
663 */ 599 */
664 if (cert_forced_command != NULL && forced_command != NULL) { 600 if (primary->force_command != NULL &&
665 if (strcmp(forced_command, cert_forced_command) == 0) { 601 additional->force_command != NULL) {
666 free(forced_command); 602 if (strcmp(primary->force_command,
667 forced_command = cert_forced_command; 603 additional->force_command) == 0) {
604 /* ok */
605 ret->force_command = strdup(primary->force_command);
606 if (ret->force_command == NULL)
607 goto alloc_fail;
668 } else { 608 } else {
669 *reason = "certificate and key options forced command " 609 errstr = "forced command options do not match";
670 "do not match"; 610 goto fail;
671 free(cert_forced_command); 611 }
672 return -1; 612 } else if (primary->force_command != NULL) {
613 if ((ret->force_command = strdup(
614 primary->force_command)) == NULL)
615 goto alloc_fail;
616 } else if (additional->force_command != NULL) {
617 if ((ret->force_command = strdup(
618 additional->force_command)) == NULL)
619 goto alloc_fail;
620 }
621 /* success */
622 if (errstrp != NULL)
623 *errstrp = NULL;
624 return ret;
625
626 alloc_fail:
627 errstr = "memory allocation failed";
628 fail:
629 if (errstrp != NULL)
630 *errstrp = errstr;
631 sshauthopt_free(ret);
632 return NULL;
633}
634
635/*
636 * Copy options
637 */
638struct sshauthopt *
639sshauthopt_copy(const struct sshauthopt *orig)
640{
641 struct sshauthopt *ret;
642
643 if ((ret = sshauthopt_new()) == NULL)
644 return NULL;
645
646#define OPTSCALAR(x) ret->x = orig->x
647 OPTSCALAR(permit_port_forwarding_flag);
648 OPTSCALAR(permit_agent_forwarding_flag);
649 OPTSCALAR(permit_x11_forwarding_flag);
650 OPTSCALAR(permit_pty_flag);
651 OPTSCALAR(permit_user_rc);
652 OPTSCALAR(restricted);
653 OPTSCALAR(cert_authority);
654 OPTSCALAR(force_tun_device);
655 OPTSCALAR(valid_before);
656#undef OPTSCALAR
657#define OPTSTRING(x) \
658 do { \
659 if (orig->x != NULL && (ret->x = strdup(orig->x)) == NULL) { \
660 sshauthopt_free(ret); \
661 return NULL; \
662 } \
663 } while (0)
664 OPTSTRING(cert_principals);
665 OPTSTRING(force_command);
666 OPTSTRING(required_from_host_cert);
667 OPTSTRING(required_from_host_keys);
668#undef OPTSTRING
669
670 if (dup_strings(&ret->env, &ret->nenv, orig->env, orig->nenv) != 0 ||
671 dup_strings(&ret->permitopen, &ret->npermitopen,
672 orig->permitopen, orig->npermitopen) != 0) {
673 sshauthopt_free(ret);
674 return NULL;
675 }
676 return ret;
677}
678
679static int
680serialise_array(struct sshbuf *m, char **a, size_t n)
681{
682 struct sshbuf *b;
683 size_t i;
684 int r;
685
686 if (n > INT_MAX)
687 return SSH_ERR_INTERNAL_ERROR;
688
689 if ((b = sshbuf_new()) == NULL) {
690 return SSH_ERR_ALLOC_FAIL;
691 }
692 for (i = 0; i < n; i++) {
693 if ((r = sshbuf_put_cstring(b, a[i])) != 0) {
694 sshbuf_free(b);
695 return r;
673 } 696 }
674 } else if (cert_forced_command != NULL) 697 }
675 forced_command = cert_forced_command; 698 if ((r = sshbuf_put_u32(m, n)) != 0 ||
699 (r = sshbuf_put_stringb(m, b)) != 0) {
700 sshbuf_free(b);
701 return r;
702 }
676 /* success */ 703 /* success */
677 *reason = NULL;
678 return 0; 704 return 0;
679} 705}
680 706
707static int
708deserialise_array(struct sshbuf *m, char ***ap, size_t *np)
709{
710 char **a = NULL;
711 size_t i, n = 0;
712 struct sshbuf *b = NULL;
713 u_int tmp;
714 int r = SSH_ERR_INTERNAL_ERROR;
715
716 if ((r = sshbuf_get_u32(m, &tmp)) != 0 ||
717 (r = sshbuf_froms(m, &b)) != 0)
718 goto out;
719 if (tmp > INT_MAX) {
720 r = SSH_ERR_INVALID_FORMAT;
721 goto out;
722 }
723 n = tmp;
724 if (n > 0 && (a = calloc(n, sizeof(*a))) == NULL) {
725 r = SSH_ERR_ALLOC_FAIL;
726 goto out;
727 }
728 for (i = 0; i < n; i++) {
729 if ((r = sshbuf_get_cstring(b, &a[i], NULL)) != 0)
730 goto out;
731 }
732 /* success */
733 r = 0;
734 *ap = a;
735 a = NULL;
736 *np = n;
737 n = 0;
738 out:
739 for (i = 0; i < n; i++)
740 free(a[i]);
741 free(a);
742 sshbuf_free(b);
743 return r;
744}
745
746static int
747serialise_nullable_string(struct sshbuf *m, const char *s)
748{
749 int r;
750
751 if ((r = sshbuf_put_u8(m, s == NULL)) != 0 ||
752 (r = sshbuf_put_cstring(m, s)) != 0)
753 return r;
754 return 0;
755}
756
757static int
758deserialise_nullable_string(struct sshbuf *m, char **sp)
759{
760 int r;
761 u_char flag;
762
763 *sp = NULL;
764 if ((r = sshbuf_get_u8(m, &flag)) != 0 ||
765 (r = sshbuf_get_cstring(m, flag ? NULL : sp, NULL)) != 0)
766 return r;
767 return 0;
768}
769
770int
771sshauthopt_serialise(const struct sshauthopt *opts, struct sshbuf *m,
772 int untrusted)
773{
774 int r = SSH_ERR_INTERNAL_ERROR;
775
776 /* Flag and simple integer options */
777 if ((r = sshbuf_put_u8(m, opts->permit_port_forwarding_flag)) != 0 ||
778 (r = sshbuf_put_u8(m, opts->permit_agent_forwarding_flag)) != 0 ||
779 (r = sshbuf_put_u8(m, opts->permit_x11_forwarding_flag)) != 0 ||
780 (r = sshbuf_put_u8(m, opts->permit_pty_flag)) != 0 ||
781 (r = sshbuf_put_u8(m, opts->permit_user_rc)) != 0 ||
782 (r = sshbuf_put_u8(m, opts->restricted)) != 0 ||
783 (r = sshbuf_put_u8(m, opts->cert_authority)) != 0 ||
784 (r = sshbuf_put_u64(m, opts->valid_before)) != 0)
785 return r;
786
787 /* tunnel number can be negative to indicate "unset" */
788 if ((r = sshbuf_put_u8(m, opts->force_tun_device == -1)) != 0 ||
789 (r = sshbuf_put_u32(m, (opts->force_tun_device < 0) ?
790 0 : (u_int)opts->force_tun_device)) != 0)
791 return r;
792
793 /* String options; these may be NULL */
794 if ((r = serialise_nullable_string(m,
795 untrusted ? "yes" : opts->cert_principals)) != 0 ||
796 (r = serialise_nullable_string(m,
797 untrusted ? "true" : opts->force_command)) != 0 ||
798 (r = serialise_nullable_string(m,
799 untrusted ? NULL : opts->required_from_host_cert)) != 0 ||
800 (r = serialise_nullable_string(m,
801 untrusted ? NULL : opts->required_from_host_keys)) != 0)
802 return r;
803
804 /* Array options */
805 if ((r = serialise_array(m, opts->env,
806 untrusted ? 0 : opts->nenv)) != 0 ||
807 (r = serialise_array(m, opts->permitopen,
808 untrusted ? 0 : opts->npermitopen)) != 0)
809 return r;
810
811 /* success */
812 return 0;
813}
814
815int
816sshauthopt_deserialise(struct sshbuf *m, struct sshauthopt **optsp)
817{
818 struct sshauthopt *opts = NULL;
819 int r = SSH_ERR_INTERNAL_ERROR;
820 u_char f;
821 u_int tmp;
822
823 if ((opts = calloc(1, sizeof(*opts))) == NULL)
824 return SSH_ERR_ALLOC_FAIL;
825
826#define OPT_FLAG(x) \
827 do { \
828 if ((r = sshbuf_get_u8(m, &f)) != 0) \
829 goto out; \
830 opts->x = f; \
831 } while (0)
832 OPT_FLAG(permit_port_forwarding_flag);
833 OPT_FLAG(permit_agent_forwarding_flag);
834 OPT_FLAG(permit_x11_forwarding_flag);
835 OPT_FLAG(permit_pty_flag);
836 OPT_FLAG(permit_user_rc);
837 OPT_FLAG(restricted);
838 OPT_FLAG(cert_authority);
839#undef OPT_FLAG
840
841 if ((r = sshbuf_get_u64(m, &opts->valid_before)) != 0)
842 goto out;
843
844 /* tunnel number can be negative to indicate "unset" */
845 if ((r = sshbuf_get_u8(m, &f)) != 0 ||
846 (r = sshbuf_get_u32(m, &tmp)) != 0)
847 goto out;
848 opts->force_tun_device = f ? -1 : (int)tmp;
849
850 /* String options may be NULL */
851 if ((r = deserialise_nullable_string(m, &opts->cert_principals)) != 0 ||
852 (r = deserialise_nullable_string(m, &opts->force_command)) != 0 ||
853 (r = deserialise_nullable_string(m,
854 &opts->required_from_host_cert)) != 0 ||
855 (r = deserialise_nullable_string(m,
856 &opts->required_from_host_keys)) != 0)
857 goto out;
858
859 /* Array options */
860 if ((r = deserialise_array(m, &opts->env, &opts->nenv)) != 0 ||
861 (r = deserialise_array(m,
862 &opts->permitopen, &opts->npermitopen)) != 0)
863 goto out;
864
865 /* success */
866 r = 0;
867 *optsp = opts;
868 opts = NULL;
869 out:
870 sshauthopt_free(opts);
871 return r;
872}
diff --git a/auth-options.h b/auth-options.h
index 4de0f14dc..bf59b30be 100644
--- a/auth-options.h
+++ b/auth-options.h
@@ -1,41 +1,91 @@
1/* $OpenBSD: auth-options.h,v 1.23 2017/05/31 10:54:00 markus Exp $ */ 1/* $OpenBSD: auth-options.h,v 1.26 2018/03/12 00:52:01 djm Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Copyright (c) 2018 Damien Miller <djm@mindrot.org>
5 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
6 * All rights reserved
7 * 5 *
8 * As far as I am concerned, the code I have written for this software 6 * Permission to use, copy, modify, and distribute this software for any
9 * can be used freely for any purpose. Any derived versions of this 7 * purpose with or without fee is hereby granted, provided that the above
10 * software must be clearly marked as such, and if the derived work is 8 * copyright notice and this permission notice appear in all copies.
11 * incompatible with the protocol description in the RFC file, it must be 9 *
12 * called by a name other than "ssh" or "Secure Shell". 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
13 */ 17 */
14 18
15#ifndef AUTH_OPTIONS_H 19#ifndef AUTH_OPTIONS_H
16#define AUTH_OPTIONS_H 20#define AUTH_OPTIONS_H
17 21
18/* Linked list of custom environment strings */ 22struct passwd;
19struct envstring { 23struct sshkey;
20 struct envstring *next; 24
21 char *s; 25/*
26 * sshauthopt represents key options parsed from authorized_keys or
27 * from certificate extensions/options.
28 */
29struct sshauthopt {
30 /* Feature flags */
31 int permit_port_forwarding_flag;
32 int permit_agent_forwarding_flag;
33 int permit_x11_forwarding_flag;
34 int permit_pty_flag;
35 int permit_user_rc;
36
37 /* "restrict" keyword was invoked */
38 int restricted;
39
40 /* key/principal expiry date */
41 uint64_t valid_before;
42
43 /* Certificate-related options */
44 int cert_authority;
45 char *cert_principals;
46
47 int force_tun_device;
48 char *force_command;
49
50 /* Custom environment */
51 size_t nenv;
52 char **env;
53
54 /* Permitted port forwardings */
55 size_t npermitopen;
56 char **permitopen;
57
58 /*
59 * Permitted host/addresses (comma-separated)
60 * Caller must check source address matches both lists (if present).
61 */
62 char *required_from_host_cert;
63 char *required_from_host_keys;
22}; 64};
23 65
24/* Flags that may be set in authorized_keys options. */ 66struct sshauthopt *sshauthopt_new(void);
25extern int no_port_forwarding_flag; 67struct sshauthopt *sshauthopt_new_with_keys_defaults(void);
26extern int no_agent_forwarding_flag; 68void sshauthopt_free(struct sshauthopt *opts);
27extern int no_x11_forwarding_flag; 69struct sshauthopt *sshauthopt_copy(const struct sshauthopt *orig);
28extern int no_pty_flag; 70int sshauthopt_serialise(const struct sshauthopt *opts, struct sshbuf *m, int);
29extern int no_user_rc; 71int sshauthopt_deserialise(struct sshbuf *m, struct sshauthopt **opts);
30extern char *forced_command; 72
31extern struct envstring *custom_environment; 73/*
32extern int forced_tun_device; 74 * Parse authorized_keys options. Returns an options structure on success
33extern int key_is_cert_authority; 75 * or NULL on failure. Will set errstr on failure.
34extern char *authorized_principals; 76 */
35 77struct sshauthopt *sshauthopt_parse(const char *s, const char **errstr);
36void auth_start_parse_options(void); 78
37int auth_parse_options(struct passwd *, char *, const char *, u_long); 79/*
38void auth_clear_options(void); 80 * Parse certification options to a struct sshauthopt.
39int auth_cert_options(struct sshkey *, struct passwd *, const char **); 81 * Returns options on success or NULL on failure.
82 */
83struct sshauthopt *sshauthopt_from_cert(struct sshkey *k);
84
85/*
86 * Merge key options.
87 */
88struct sshauthopt *sshauthopt_merge(const struct sshauthopt *primary,
89 const struct sshauthopt *additional, const char **errstrp);
40 90
41#endif 91#endif
diff --git a/auth-pam.c b/auth-pam.c
index de29c04c9..00ba87775 100644
--- a/auth-pam.c
+++ b/auth-pam.c
@@ -287,18 +287,27 @@ sshpam_chauthtok_ruid(pam_handle_t *pamh, int flags)
287void 287void
288sshpam_password_change_required(int reqd) 288sshpam_password_change_required(int reqd)
289{ 289{
290 extern struct sshauthopt *auth_opts;
291 static int saved_port, saved_agent, saved_x11;
292
290 debug3("%s %d", __func__, reqd); 293 debug3("%s %d", __func__, reqd);
291 if (sshpam_authctxt == NULL) 294 if (sshpam_authctxt == NULL)
292 fatal("%s: PAM authctxt not initialized", __func__); 295 fatal("%s: PAM authctxt not initialized", __func__);
293 sshpam_authctxt->force_pwchange = reqd; 296 sshpam_authctxt->force_pwchange = reqd;
294 if (reqd) { 297 if (reqd) {
295 no_port_forwarding_flag |= 2; 298 saved_port = auth_opts->permit_port_forwarding_flag;
296 no_agent_forwarding_flag |= 2; 299 saved_agent = auth_opts->permit_agent_forwarding_flag;
297 no_x11_forwarding_flag |= 2; 300 saved_x11 = auth_opts->permit_x11_forwarding_flag;
301 auth_opts->permit_port_forwarding_flag = 0;
302 auth_opts->permit_agent_forwarding_flag = 0;
303 auth_opts->permit_x11_forwarding_flag = 0;
298 } else { 304 } else {
299 no_port_forwarding_flag &= ~2; 305 if (saved_port)
300 no_agent_forwarding_flag &= ~2; 306 auth_opts->permit_port_forwarding_flag = saved_port;
301 no_x11_forwarding_flag &= ~2; 307 if (saved_agent)
308 auth_opts->permit_agent_forwarding_flag = saved_agent;
309 if (saved_x11)
310 auth_opts->permit_x11_forwarding_flag = saved_x11;
302 } 311 }
303} 312}
304 313
@@ -1077,7 +1086,7 @@ do_pam_chauthtok(void)
1077} 1086}
1078 1087
1079void 1088void
1080do_pam_session(void) 1089do_pam_session(struct ssh *ssh)
1081{ 1090{
1082 debug3("PAM: opening session"); 1091 debug3("PAM: opening session");
1083 1092
@@ -1093,7 +1102,7 @@ do_pam_session(void)
1093 sshpam_session_open = 1; 1102 sshpam_session_open = 1;
1094 else { 1103 else {
1095 sshpam_session_open = 0; 1104 sshpam_session_open = 0;
1096 disable_forwarding(); 1105 auth_restrict_session(ssh);
1097 error("PAM: pam_open_session(): %s", 1106 error("PAM: pam_open_session(): %s",
1098 pam_strerror(sshpam_handle, sshpam_err)); 1107 pam_strerror(sshpam_handle, sshpam_err));
1099 } 1108 }
diff --git a/auth-pam.h b/auth-pam.h
index c47b442e4..419860745 100644
--- a/auth-pam.h
+++ b/auth-pam.h
@@ -25,10 +25,12 @@
25#include "includes.h" 25#include "includes.h"
26#ifdef USE_PAM 26#ifdef USE_PAM
27 27
28struct ssh;
29
28void start_pam(Authctxt *); 30void start_pam(Authctxt *);
29void finish_pam(void); 31void finish_pam(void);
30u_int do_pam_account(void); 32u_int do_pam_account(void);
31void do_pam_session(void); 33void do_pam_session(struct ssh *);
32void do_pam_setcred(int ); 34void do_pam_setcred(int );
33void do_pam_chauthtok(void); 35void do_pam_chauthtok(void);
34int do_pam_putenv(char *, char *); 36int do_pam_putenv(char *, char *);
diff --git a/auth-passwd.c b/auth-passwd.c
index 996c2cf71..6097fdd24 100644
--- a/auth-passwd.c
+++ b/auth-passwd.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: auth-passwd.c,v 1.45 2016/07/21 01:39:35 dtucker Exp $ */ 1/* $OpenBSD: auth-passwd.c,v 1.46 2018/03/03 03:15:51 djm Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -68,22 +68,15 @@ extern login_cap_t *lc;
68 68
69#define MAX_PASSWORD_LEN 1024 69#define MAX_PASSWORD_LEN 1024
70 70
71void
72disable_forwarding(void)
73{
74 no_port_forwarding_flag = 1;
75 no_agent_forwarding_flag = 1;
76 no_x11_forwarding_flag = 1;
77}
78
79/* 71/*
80 * Tries to authenticate the user using password. Returns true if 72 * Tries to authenticate the user using password. Returns true if
81 * authentication succeeds. 73 * authentication succeeds.
82 */ 74 */
83int 75int
84auth_password(Authctxt *authctxt, const char *password) 76auth_password(struct ssh *ssh, const char *password)
85{ 77{
86 struct passwd * pw = authctxt->pw; 78 Authctxt *authctxt = ssh->authctxt;
79 struct passwd *pw = authctxt->pw;
87 int result, ok = authctxt->valid; 80 int result, ok = authctxt->valid;
88#if defined(USE_SHADOW) && defined(HAS_SHADOW_EXPIRE) 81#if defined(USE_SHADOW) && defined(HAS_SHADOW_EXPIRE)
89 static int expire_checked = 0; 82 static int expire_checked = 0;
@@ -128,9 +121,9 @@ auth_password(Authctxt *authctxt, const char *password)
128 authctxt->force_pwchange = 1; 121 authctxt->force_pwchange = 1;
129 } 122 }
130#endif 123#endif
131 result = sys_auth_passwd(authctxt, password); 124 result = sys_auth_passwd(ssh, password);
132 if (authctxt->force_pwchange) 125 if (authctxt->force_pwchange)
133 disable_forwarding(); 126 auth_restrict_session(ssh);
134 return (result && ok); 127 return (result && ok);
135} 128}
136 129
@@ -170,19 +163,19 @@ warn_expiry(Authctxt *authctxt, auth_session_t *as)
170} 163}
171 164
172int 165int
173sys_auth_passwd(Authctxt *authctxt, const char *password) 166sys_auth_passwd(struct ssh *ssh, const char *password)
174{ 167{
175 struct passwd *pw = authctxt->pw; 168 Authctxt *authctxt = ssh->authctxt;
176 auth_session_t *as; 169 auth_session_t *as;
177 static int expire_checked = 0; 170 static int expire_checked = 0;
178 171
179 as = auth_usercheck(pw->pw_name, authctxt->style, "auth-ssh", 172 as = auth_usercheck(authctxt->pw->pw_name, authctxt->style, "auth-ssh",
180 (char *)password); 173 (char *)password);
181 if (as == NULL) 174 if (as == NULL)
182 return (0); 175 return (0);
183 if (auth_getstate(as) & AUTH_PWEXPIRED) { 176 if (auth_getstate(as) & AUTH_PWEXPIRED) {
184 auth_close(as); 177 auth_close(as);
185 disable_forwarding(); 178 auth_restrict_session(ssh);
186 authctxt->force_pwchange = 1; 179 authctxt->force_pwchange = 1;
187 return (1); 180 return (1);
188 } else { 181 } else {
@@ -195,8 +188,9 @@ sys_auth_passwd(Authctxt *authctxt, const char *password)
195} 188}
196#elif !defined(CUSTOM_SYS_AUTH_PASSWD) 189#elif !defined(CUSTOM_SYS_AUTH_PASSWD)
197int 190int
198sys_auth_passwd(Authctxt *authctxt, const char *password) 191sys_auth_passwd(struct ssh *ssh, const char *password)
199{ 192{
193 Authctxt *authctxt = ssh->authctxt;
200 struct passwd *pw = authctxt->pw; 194 struct passwd *pw = authctxt->pw;
201 char *encrypted_password, *salt = NULL; 195 char *encrypted_password, *salt = NULL;
202 196
diff --git a/auth-sia.c b/auth-sia.c
index a9e1c258c..7c97f03e5 100644
--- a/auth-sia.c
+++ b/auth-sia.c
@@ -36,6 +36,7 @@
36#include <string.h> 36#include <string.h>
37 37
38#include "ssh.h" 38#include "ssh.h"
39#include "ssh_api.h"
39#include "key.h" 40#include "key.h"
40#include "hostfile.h" 41#include "hostfile.h"
41#include "auth.h" 42#include "auth.h"
@@ -50,11 +51,12 @@ extern int saved_argc;
50extern char **saved_argv; 51extern char **saved_argv;
51 52
52int 53int
53sys_auth_passwd(Authctxt *authctxt, const char *pass) 54sys_auth_passwd(struct ssh *ssh, const char *pass)
54{ 55{
55 int ret; 56 int ret;
56 SIAENTITY *ent = NULL; 57 SIAENTITY *ent = NULL;
57 const char *host; 58 const char *host;
59 Authctxt *authctxt = ssh->authctxt;
58 60
59 host = get_canonical_hostname(options.use_dns); 61 host = get_canonical_hostname(options.use_dns);
60 62
diff --git a/auth.c b/auth.c
index 68a1e4a76..68b9fe795 100644
--- a/auth.c
+++ b/auth.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: auth.c,v 1.124 2017/09/12 06:32:07 djm Exp $ */ 1/* $OpenBSD: auth.c,v 1.127 2018/03/12 00:52:01 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * 4 *
@@ -28,6 +28,7 @@
28#include <sys/types.h> 28#include <sys/types.h>
29#include <sys/stat.h> 29#include <sys/stat.h>
30#include <sys/socket.h> 30#include <sys/socket.h>
31#include <sys/wait.h>
31 32
32#include <netinet/in.h> 33#include <netinet/in.h>
33 34
@@ -73,12 +74,14 @@
73#include "authfile.h" 74#include "authfile.h"
74#include "ssherr.h" 75#include "ssherr.h"
75#include "compat.h" 76#include "compat.h"
77#include "channels.h"
76 78
77/* import */ 79/* import */
78extern ServerOptions options; 80extern ServerOptions options;
79extern int use_privsep; 81extern int use_privsep;
80extern Buffer loginmsg; 82extern Buffer loginmsg;
81extern struct passwd *privsep_pw; 83extern struct passwd *privsep_pw;
84extern struct sshauthopt *auth_opts;
82 85
83/* Debugging messages */ 86/* Debugging messages */
84Buffer auth_debug; 87Buffer auth_debug;
@@ -385,10 +388,8 @@ auth_maxtries_exceeded(Authctxt *authctxt)
385 * Check whether root logins are disallowed. 388 * Check whether root logins are disallowed.
386 */ 389 */
387int 390int
388auth_root_allowed(const char *method) 391auth_root_allowed(struct ssh *ssh, const char *method)
389{ 392{
390 struct ssh *ssh = active_state; /* XXX */
391
392 switch (options.permit_root_login) { 393 switch (options.permit_root_login) {
393 case PERMIT_YES: 394 case PERMIT_YES:
394 return 1; 395 return 1;
@@ -400,7 +401,7 @@ auth_root_allowed(const char *method)
400 return 1; 401 return 1;
401 break; 402 break;
402 case PERMIT_FORCED_ONLY: 403 case PERMIT_FORCED_ONLY:
403 if (forced_command) { 404 if (auth_opts->force_command != NULL) {
404 logit("Root login accepted for forced command."); 405 logit("Root login accepted for forced command.");
405 return 1; 406 return 1;
406 } 407 }
@@ -747,3 +748,343 @@ auth_get_canonical_hostname(struct ssh *ssh, int use_dns)
747 return dnsname; 748 return dnsname;
748 } 749 }
749} 750}
751
752/*
753 * Runs command in a subprocess wuth a minimal environment.
754 * Returns pid on success, 0 on failure.
755 * The child stdout and stderr maybe captured, left attached or sent to
756 * /dev/null depending on the contents of flags.
757 * "tag" is prepended to log messages.
758 * NB. "command" is only used for logging; the actual command executed is
759 * av[0].
760 */
761pid_t
762subprocess(const char *tag, struct passwd *pw, const char *command,
763 int ac, char **av, FILE **child, u_int flags)
764{
765 FILE *f = NULL;
766 struct stat st;
767 int fd, devnull, p[2], i;
768 pid_t pid;
769 char *cp, errmsg[512];
770 u_int envsize;
771 char **child_env;
772
773 if (child != NULL)
774 *child = NULL;
775
776 debug3("%s: %s command \"%s\" running as %s (flags 0x%x)", __func__,
777 tag, command, pw->pw_name, flags);
778
779 /* Check consistency */
780 if ((flags & SSH_SUBPROCESS_STDOUT_DISCARD) != 0 &&
781 (flags & SSH_SUBPROCESS_STDOUT_CAPTURE) != 0) {
782 error("%s: inconsistent flags", __func__);
783 return 0;
784 }
785 if (((flags & SSH_SUBPROCESS_STDOUT_CAPTURE) == 0) != (child == NULL)) {
786 error("%s: inconsistent flags/output", __func__);
787 return 0;
788 }
789
790 /*
791 * If executing an explicit binary, then verify the it exists
792 * and appears safe-ish to execute
793 */
794 if (*av[0] != '/') {
795 error("%s path is not absolute", tag);
796 return 0;
797 }
798 temporarily_use_uid(pw);
799 if (stat(av[0], &st) < 0) {
800 error("Could not stat %s \"%s\": %s", tag,
801 av[0], strerror(errno));
802 restore_uid();
803 return 0;
804 }
805 if (safe_path(av[0], &st, NULL, 0, errmsg, sizeof(errmsg)) != 0) {
806 error("Unsafe %s \"%s\": %s", tag, av[0], errmsg);
807 restore_uid();
808 return 0;
809 }
810 /* Prepare to keep the child's stdout if requested */
811 if (pipe(p) != 0) {
812 error("%s: pipe: %s", tag, strerror(errno));
813 restore_uid();
814 return 0;
815 }
816 restore_uid();
817
818 switch ((pid = fork())) {
819 case -1: /* error */
820 error("%s: fork: %s", tag, strerror(errno));
821 close(p[0]);
822 close(p[1]);
823 return 0;
824 case 0: /* child */
825 /* Prepare a minimal environment for the child. */
826 envsize = 5;
827 child_env = xcalloc(sizeof(*child_env), envsize);
828 child_set_env(&child_env, &envsize, "PATH", _PATH_STDPATH);
829 child_set_env(&child_env, &envsize, "USER", pw->pw_name);
830 child_set_env(&child_env, &envsize, "LOGNAME", pw->pw_name);
831 child_set_env(&child_env, &envsize, "HOME", pw->pw_dir);
832 if ((cp = getenv("LANG")) != NULL)
833 child_set_env(&child_env, &envsize, "LANG", cp);
834
835 for (i = 0; i < NSIG; i++)
836 signal(i, SIG_DFL);
837
838 if ((devnull = open(_PATH_DEVNULL, O_RDWR)) == -1) {
839 error("%s: open %s: %s", tag, _PATH_DEVNULL,
840 strerror(errno));
841 _exit(1);
842 }
843 if (dup2(devnull, STDIN_FILENO) == -1) {
844 error("%s: dup2: %s", tag, strerror(errno));
845 _exit(1);
846 }
847
848 /* Set up stdout as requested; leave stderr in place for now. */
849 fd = -1;
850 if ((flags & SSH_SUBPROCESS_STDOUT_CAPTURE) != 0)
851 fd = p[1];
852 else if ((flags & SSH_SUBPROCESS_STDOUT_DISCARD) != 0)
853 fd = devnull;
854 if (fd != -1 && dup2(fd, STDOUT_FILENO) == -1) {
855 error("%s: dup2: %s", tag, strerror(errno));
856 _exit(1);
857 }
858 closefrom(STDERR_FILENO + 1);
859
860 /* Don't use permanently_set_uid() here to avoid fatal() */
861 if (setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) != 0) {
862 error("%s: setresgid %u: %s", tag, (u_int)pw->pw_gid,
863 strerror(errno));
864 _exit(1);
865 }
866 if (setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid) != 0) {
867 error("%s: setresuid %u: %s", tag, (u_int)pw->pw_uid,
868 strerror(errno));
869 _exit(1);
870 }
871 /* stdin is pointed to /dev/null at this point */
872 if ((flags & SSH_SUBPROCESS_STDOUT_DISCARD) != 0 &&
873 dup2(STDIN_FILENO, STDERR_FILENO) == -1) {
874 error("%s: dup2: %s", tag, strerror(errno));
875 _exit(1);
876 }
877
878 execve(av[0], av, child_env);
879 error("%s exec \"%s\": %s", tag, command, strerror(errno));
880 _exit(127);
881 default: /* parent */
882 break;
883 }
884
885 close(p[1]);
886 if ((flags & SSH_SUBPROCESS_STDOUT_CAPTURE) == 0)
887 close(p[0]);
888 else if ((f = fdopen(p[0], "r")) == NULL) {
889 error("%s: fdopen: %s", tag, strerror(errno));
890 close(p[0]);
891 /* Don't leave zombie child */
892 kill(pid, SIGTERM);
893 while (waitpid(pid, NULL, 0) == -1 && errno == EINTR)
894 ;
895 return 0;
896 }
897 /* Success */
898 debug3("%s: %s pid %ld", __func__, tag, (long)pid);
899 if (child != NULL)
900 *child = f;
901 return pid;
902}
903
904/* These functions link key/cert options to the auth framework */
905
906/* Log sshauthopt options locally and (optionally) for remote transmission */
907void
908auth_log_authopts(const char *loc, const struct sshauthopt *opts, int do_remote)
909{
910 int do_env = options.permit_user_env && opts->nenv > 0;
911 int do_permitopen = opts->npermitopen > 0 &&
912 (options.allow_tcp_forwarding & FORWARD_LOCAL) != 0;
913 size_t i;
914 char msg[1024], buf[64];
915
916 snprintf(buf, sizeof(buf), "%d", opts->force_tun_device);
917 /* Try to keep this alphabetically sorted */
918 snprintf(msg, sizeof(msg), "key options:%s%s%s%s%s%s%s%s%s%s%s%s",
919 opts->permit_agent_forwarding_flag ? " agent-forwarding" : "",
920 opts->force_command == NULL ? "" : " command",
921 do_env ? " environment" : "",
922 opts->valid_before == 0 ? "" : "expires",
923 do_permitopen ? " permitopen" : "",
924 opts->permit_port_forwarding_flag ? " port-forwarding" : "",
925 opts->cert_principals == NULL ? "" : " principals",
926 opts->permit_pty_flag ? " pty" : "",
927 opts->force_tun_device == -1 ? "" : " tun=",
928 opts->force_tun_device == -1 ? "" : buf,
929 opts->permit_user_rc ? " user-rc" : "",
930 opts->permit_x11_forwarding_flag ? " x11-forwarding" : "");
931
932 debug("%s: %s", loc, msg);
933 if (do_remote)
934 auth_debug_add("%s: %s", loc, msg);
935
936 if (options.permit_user_env) {
937 for (i = 0; i < opts->nenv; i++) {
938 debug("%s: environment: %s", loc, opts->env[i]);
939 if (do_remote) {
940 auth_debug_add("%s: environment: %s",
941 loc, opts->env[i]);
942 }
943 }
944 }
945
946 /* Go into a little more details for the local logs. */
947 if (opts->valid_before != 0) {
948 format_absolute_time(opts->valid_before, buf, sizeof(buf));
949 debug("%s: expires at %s", loc, buf);
950 }
951 if (opts->cert_principals != NULL) {
952 debug("%s: authorized principals: \"%s\"",
953 loc, opts->cert_principals);
954 }
955 if (opts->force_command != NULL)
956 debug("%s: forced command: \"%s\"", loc, opts->force_command);
957 if ((options.allow_tcp_forwarding & FORWARD_LOCAL) != 0) {
958 for (i = 0; i < opts->npermitopen; i++) {
959 debug("%s: permitted open: %s",
960 loc, opts->permitopen[i]);
961 }
962 }
963}
964
965/* Activate a new set of key/cert options; merging with what is there. */
966int
967auth_activate_options(struct ssh *ssh, struct sshauthopt *opts)
968{
969 struct sshauthopt *old = auth_opts;
970 const char *emsg = NULL;
971
972 debug("%s: setting new authentication options", __func__);
973 if ((auth_opts = sshauthopt_merge(old, opts, &emsg)) == NULL) {
974 error("Inconsistent authentication options: %s", emsg);
975 return -1;
976 }
977 return 0;
978}
979
980/* Disable forwarding, etc for the session */
981void
982auth_restrict_session(struct ssh *ssh)
983{
984 struct sshauthopt *restricted;
985
986 debug("%s: restricting session", __func__);
987
988 /* A blank sshauthopt defaults to permitting nothing */
989 restricted = sshauthopt_new();
990 restricted->restricted = 1;
991
992 if (auth_activate_options(ssh, restricted) != 0)
993 fatal("%s: failed to restrict session", __func__);
994 sshauthopt_free(restricted);
995}
996
997int
998auth_authorise_keyopts(struct ssh *ssh, struct passwd *pw,
999 struct sshauthopt *opts, int allow_cert_authority, const char *loc)
1000{
1001 const char *remote_ip = ssh_remote_ipaddr(ssh);
1002 const char *remote_host = auth_get_canonical_hostname(ssh,
1003 options.use_dns);
1004 time_t now = time(NULL);
1005 char buf[64];
1006
1007 /*
1008 * Check keys/principals file expiry time.
1009 * NB. validity interval in certificate is handled elsewhere.
1010 */
1011 if (opts->valid_before && now > 0 &&
1012 opts->valid_before < (uint64_t)now) {
1013 format_absolute_time(opts->valid_before, buf, sizeof(buf));
1014 debug("%s: entry expired at %s", loc, buf);
1015 auth_debug_add("%s: entry expired at %s", loc, buf);
1016 return -1;
1017 }
1018 /* Consistency checks */
1019 if (opts->cert_principals != NULL && !opts->cert_authority) {
1020 debug("%s: principals on non-CA key", loc);
1021 auth_debug_add("%s: principals on non-CA key", loc);
1022 /* deny access */
1023 return -1;
1024 }
1025 /* cert-authority flag isn't valid in authorized_principals files */
1026 if (!allow_cert_authority && opts->cert_authority) {
1027 debug("%s: cert-authority flag invalid here", loc);
1028 auth_debug_add("%s: cert-authority flag invalid here", loc);
1029 /* deny access */
1030 return -1;
1031 }
1032
1033 /* Perform from= checks */
1034 if (opts->required_from_host_keys != NULL) {
1035 switch (match_host_and_ip(remote_host, remote_ip,
1036 opts->required_from_host_keys )) {
1037 case 1:
1038 /* Host name matches. */
1039 break;
1040 case -1:
1041 default:
1042 debug("%s: invalid from criteria", loc);
1043 auth_debug_add("%s: invalid from criteria", loc);
1044 /* FALLTHROUGH */
1045 case 0:
1046 logit("%s: Authentication tried for %.100s with "
1047 "correct key but not from a permitted "
1048 "host (host=%.200s, ip=%.200s, required=%.200s).",
1049 loc, pw->pw_name, remote_host, remote_ip,
1050 opts->required_from_host_keys);
1051 auth_debug_add("%s: Your host '%.200s' is not "
1052 "permitted to use this key for login.",
1053 loc, remote_host);
1054 /* deny access */
1055 return -1;
1056 }
1057 }
1058 /* Check source-address restriction from certificate */
1059 if (opts->required_from_host_cert != NULL) {
1060 switch (addr_match_cidr_list(remote_ip,
1061 opts->required_from_host_cert)) {
1062 case 1:
1063 /* accepted */
1064 break;
1065 case -1:
1066 default:
1067 /* invalid */
1068 error("%s: Certificate source-address invalid",
1069 loc);
1070 /* FALLTHROUGH */
1071 case 0:
1072 logit("%s: Authentication tried for %.100s with valid "
1073 "certificate but not from a permitted source "
1074 "address (%.200s).", loc, pw->pw_name, remote_ip);
1075 auth_debug_add("%s: Your address '%.200s' is not "
1076 "permitted to use this certificate for login.",
1077 loc, remote_ip);
1078 return -1;
1079 }
1080 }
1081 /*
1082 *
1083 * XXX this is spammy. We should report remotely only for keys
1084 * that are successful in actual auth attempts, and not PK_OK
1085 * tests.
1086 */
1087 auth_log_authopts(loc, opts, 1);
1088
1089 return 0;
1090}
diff --git a/auth.h b/auth.h
index 27a1a88ec..15ba7073e 100644
--- a/auth.h
+++ b/auth.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: auth.h,v 1.93 2017/08/18 05:36:45 djm Exp $ */ 1/* $OpenBSD: auth.h,v 1.95 2018/03/03 03:15:51 djm Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2000 Markus Friedl. All rights reserved. 4 * Copyright (c) 2000 Markus Friedl. All rights reserved.
@@ -42,9 +42,11 @@
42#include <krb5.h> 42#include <krb5.h>
43#endif 43#endif
44 44
45struct passwd;
45struct ssh; 46struct ssh;
46struct sshkey;
47struct sshbuf; 47struct sshbuf;
48struct sshkey;
49struct sshauthopt;
48 50
49typedef struct Authctxt Authctxt; 51typedef struct Authctxt Authctxt;
50typedef struct Authmethod Authmethod; 52typedef struct Authmethod Authmethod;
@@ -129,11 +131,12 @@ struct KbdintDevice
129int 131int
130auth_rhosts2(struct passwd *, const char *, const char *, const char *); 132auth_rhosts2(struct passwd *, const char *, const char *, const char *);
131 133
132int auth_password(Authctxt *, const char *); 134int auth_password(struct ssh *, const char *);
133 135
134int hostbased_key_allowed(struct passwd *, const char *, char *, 136int hostbased_key_allowed(struct passwd *, const char *, char *,
135 struct sshkey *); 137 struct sshkey *);
136int user_key_allowed(struct passwd *, struct sshkey *, int); 138int user_key_allowed(struct ssh *, struct passwd *, struct sshkey *, int,
139 struct sshauthopt **);
137int auth2_key_already_used(Authctxt *, const struct sshkey *); 140int auth2_key_already_used(Authctxt *, const struct sshkey *);
138 141
139/* 142/*
@@ -164,14 +167,12 @@ int auth_shadow_pwexpired(Authctxt *);
164#include "audit.h" 167#include "audit.h"
165void remove_kbdint_device(const char *); 168void remove_kbdint_device(const char *);
166 169
167void disable_forwarding(void);
168
169void do_authentication2(Authctxt *); 170void do_authentication2(Authctxt *);
170 171
171void auth_log(Authctxt *, int, int, const char *, const char *); 172void auth_log(Authctxt *, int, int, const char *, const char *);
172void auth_maxtries_exceeded(Authctxt *) __attribute__((noreturn)); 173void auth_maxtries_exceeded(Authctxt *) __attribute__((noreturn));
173void userauth_finish(struct ssh *, int, const char *, const char *); 174void userauth_finish(struct ssh *, int, const char *, const char *);
174int auth_root_allowed(const char *); 175int auth_root_allowed(struct ssh *, const char *);
175 176
176void userauth_send_banner(const char *); 177void userauth_send_banner(const char *);
177 178
@@ -215,14 +216,29 @@ int get_hostkey_index(struct sshkey *, int, struct ssh *);
215int sshd_hostkey_sign(struct sshkey *, struct sshkey *, u_char **, 216int sshd_hostkey_sign(struct sshkey *, struct sshkey *, u_char **,
216 size_t *, const u_char *, size_t, const char *, u_int); 217 size_t *, const u_char *, size_t, const char *, u_int);
217 218
219/* Key / cert options linkage to auth layer */
220const struct sshauthopt *auth_options(struct ssh *);
221int auth_activate_options(struct ssh *, struct sshauthopt *);
222void auth_restrict_session(struct ssh *);
223int auth_authorise_keyopts(struct ssh *, struct passwd *pw,
224 struct sshauthopt *, int, const char *);
225void auth_log_authopts(const char *, const struct sshauthopt *, int);
226
218/* debug messages during authentication */ 227/* debug messages during authentication */
219void auth_debug_add(const char *fmt,...) __attribute__((format(printf, 1, 2))); 228void auth_debug_add(const char *fmt,...)
229 __attribute__((format(printf, 1, 2)));
220void auth_debug_send(void); 230void auth_debug_send(void);
221void auth_debug_reset(void); 231void auth_debug_reset(void);
222 232
223struct passwd *fakepw(void); 233struct passwd *fakepw(void);
224 234
225int sys_auth_passwd(Authctxt *, const char *); 235#define SSH_SUBPROCESS_STDOUT_DISCARD (1) /* Discard stdout */
236#define SSH_SUBPROCESS_STDOUT_CAPTURE (1<<1) /* Redirect stdout */
237#define SSH_SUBPROCESS_STDERR_DISCARD (1<<2) /* Discard stderr */
238pid_t subprocess(const char *, struct passwd *,
239 const char *, int, char **, FILE **, u_int flags);
240
241int sys_auth_passwd(struct ssh *, const char *);
226 242
227#define SKEY_PROMPT "\nS/Key Password: " 243#define SKEY_PROMPT "\nS/Key Password: "
228 244
diff --git a/auth2-hostbased.c b/auth2-hostbased.c
index 92758b38c..8996f7e05 100644
--- a/auth2-hostbased.c
+++ b/auth2-hostbased.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: auth2-hostbased.c,v 1.31 2017/06/24 06:34:38 djm Exp $ */ 1/* $OpenBSD: auth2-hostbased.c,v 1.33 2018/01/23 05:27:21 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * 4 *
@@ -62,7 +62,7 @@ userauth_hostbased(struct ssh *ssh)
62 Authctxt *authctxt = ssh->authctxt; 62 Authctxt *authctxt = ssh->authctxt;
63 struct sshbuf *b; 63 struct sshbuf *b;
64 struct sshkey *key = NULL; 64 struct sshkey *key = NULL;
65 char *pkalg, *cuser, *chost, *service; 65 char *pkalg, *cuser, *chost;
66 u_char *pkblob, *sig; 66 u_char *pkblob, *sig;
67 size_t alen, blen, slen; 67 size_t alen, blen, slen;
68 int r, pktype, authenticated = 0; 68 int r, pktype, authenticated = 0;
@@ -118,15 +118,13 @@ userauth_hostbased(struct ssh *ssh)
118 goto done; 118 goto done;
119 } 119 }
120 120
121 service = ssh->compat & SSH_BUG_HBSERVICE ? "ssh-userauth" :
122 authctxt->service;
123 if ((b = sshbuf_new()) == NULL) 121 if ((b = sshbuf_new()) == NULL)
124 fatal("%s: sshbuf_new failed", __func__); 122 fatal("%s: sshbuf_new failed", __func__);
125 /* reconstruct packet */ 123 /* reconstruct packet */
126 if ((r = sshbuf_put_string(b, session_id2, session_id2_len)) != 0 || 124 if ((r = sshbuf_put_string(b, session_id2, session_id2_len)) != 0 ||
127 (r = sshbuf_put_u8(b, SSH2_MSG_USERAUTH_REQUEST)) != 0 || 125 (r = sshbuf_put_u8(b, SSH2_MSG_USERAUTH_REQUEST)) != 0 ||
128 (r = sshbuf_put_cstring(b, authctxt->user)) != 0 || 126 (r = sshbuf_put_cstring(b, authctxt->user)) != 0 ||
129 (r = sshbuf_put_cstring(b, service)) != 0 || 127 (r = sshbuf_put_cstring(b, authctxt->service)) != 0 ||
130 (r = sshbuf_put_cstring(b, "hostbased")) != 0 || 128 (r = sshbuf_put_cstring(b, "hostbased")) != 0 ||
131 (r = sshbuf_put_string(b, pkalg, alen)) != 0 || 129 (r = sshbuf_put_string(b, pkalg, alen)) != 0 ||
132 (r = sshbuf_put_string(b, pkblob, blen)) != 0 || 130 (r = sshbuf_put_string(b, pkblob, blen)) != 0 ||
@@ -144,7 +142,7 @@ userauth_hostbased(struct ssh *ssh)
144 authenticated = 0; 142 authenticated = 0;
145 if (PRIVSEP(hostbased_key_allowed(authctxt->pw, cuser, chost, key)) && 143 if (PRIVSEP(hostbased_key_allowed(authctxt->pw, cuser, chost, key)) &&
146 PRIVSEP(sshkey_verify(key, sig, slen, 144 PRIVSEP(sshkey_verify(key, sig, slen,
147 sshbuf_ptr(b), sshbuf_len(b), ssh->compat)) == 0) 145 sshbuf_ptr(b), sshbuf_len(b), pkalg, ssh->compat)) == 0)
148 authenticated = 1; 146 authenticated = 1;
149 147
150 auth2_record_key(authctxt, authenticated, key); 148 auth2_record_key(authctxt, authenticated, key);
diff --git a/auth2-none.c b/auth2-none.c
index 35d25fa63..8d4e9bb8c 100644
--- a/auth2-none.c
+++ b/auth2-none.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: auth2-none.c,v 1.20 2017/05/30 14:29:59 markus Exp $ */ 1/* $OpenBSD: auth2-none.c,v 1.21 2018/03/03 03:15:51 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * 4 *
@@ -68,7 +68,7 @@ userauth_none(struct ssh *ssh)
68 if ((r = sshpkt_get_end(ssh)) != 0) 68 if ((r = sshpkt_get_end(ssh)) != 0)
69 fatal("%s: %s", __func__, ssh_err(r)); 69 fatal("%s: %s", __func__, ssh_err(r));
70 if (options.permit_empty_passwd && options.password_authentication) 70 if (options.permit_empty_passwd && options.password_authentication)
71 return (PRIVSEP(auth_password(ssh->authctxt, ""))); 71 return (PRIVSEP(auth_password(ssh, "")));
72 return (0); 72 return (0);
73} 73}
74 74
diff --git a/auth2-passwd.c b/auth2-passwd.c
index 5f7ba3244..445016aec 100644
--- a/auth2-passwd.c
+++ b/auth2-passwd.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: auth2-passwd.c,v 1.14 2017/05/30 14:29:59 markus Exp $ */ 1/* $OpenBSD: auth2-passwd.c,v 1.15 2018/03/03 03:15:51 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * 4 *
@@ -63,7 +63,7 @@ userauth_passwd(struct ssh *ssh)
63 63
64 if (change) 64 if (change)
65 logit("password change not supported"); 65 logit("password change not supported");
66 else if (PRIVSEP(auth_password(ssh->authctxt, password)) == 1) 66 else if (PRIVSEP(auth_password(ssh, password)) == 1)
67 authenticated = 1; 67 authenticated = 1;
68 explicit_bzero(password, len); 68 explicit_bzero(password, len);
69 free(password); 69 free(password);
diff --git a/auth2-pubkey.c b/auth2-pubkey.c
index 43f880b6b..8024b1d6a 100644
--- a/auth2-pubkey.c
+++ b/auth2-pubkey.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: auth2-pubkey.c,v 1.71 2017/09/07 23:48:09 djm Exp $ */ 1/* $OpenBSD: auth2-pubkey.c,v 1.77 2018/03/03 03:15:51 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * 4 *
@@ -73,42 +73,39 @@ extern ServerOptions options;
73extern u_char *session_id2; 73extern u_char *session_id2;
74extern u_int session_id2_len; 74extern u_int session_id2_len;
75 75
76static char *
77format_key(const struct sshkey *key)
78{
79 char *ret, *fp = sshkey_fingerprint(key,
80 options.fingerprint_hash, SSH_FP_DEFAULT);
81
82 xasprintf(&ret, "%s %s", sshkey_type(key), fp);
83 free(fp);
84 return ret;
85}
86
76static int 87static int
77userauth_pubkey(struct ssh *ssh) 88userauth_pubkey(struct ssh *ssh)
78{ 89{
79 Authctxt *authctxt = ssh->authctxt; 90 Authctxt *authctxt = ssh->authctxt;
91 struct passwd *pw = authctxt->pw;
80 struct sshbuf *b; 92 struct sshbuf *b;
81 struct sshkey *key = NULL; 93 struct sshkey *key = NULL;
82 char *pkalg, *userstyle = NULL, *fp = NULL; 94 char *pkalg, *userstyle = NULL, *key_s = NULL, *ca_s = NULL;
83 u_char *pkblob, *sig, have_sig; 95 u_char *pkblob, *sig, have_sig;
84 size_t blen, slen; 96 size_t blen, slen;
85 int r, pktype; 97 int r, pktype;
86 int authenticated = 0; 98 int authenticated = 0;
99 struct sshauthopt *authopts = NULL;
87 100
88 if (!authctxt->valid) { 101 if (!authctxt->valid) {
89 debug2("%s: disabled because of invalid user", __func__); 102 debug2("%s: disabled because of invalid user", __func__);
90 return 0; 103 return 0;
91 } 104 }
92 if ((r = sshpkt_get_u8(ssh, &have_sig)) != 0) 105 if ((r = sshpkt_get_u8(ssh, &have_sig)) != 0 ||
93 fatal("%s: sshpkt_get_u8 failed: %s", __func__, ssh_err(r)); 106 (r = sshpkt_get_cstring(ssh, &pkalg, NULL)) != 0 ||
94 if (ssh->compat & SSH_BUG_PKAUTH) { 107 (r = sshpkt_get_string(ssh, &pkblob, &blen)) != 0)
95 debug2("%s: SSH_BUG_PKAUTH", __func__); 108 fatal("%s: parse request failed: %s", __func__, ssh_err(r));
96 if ((b = sshbuf_new()) == NULL)
97 fatal("%s: sshbuf_new failed", __func__);
98 /* no explicit pkalg given */
99 /* so we have to extract the pkalg from the pkblob */
100 /* XXX use sshbuf_from() */
101 if ((r = sshpkt_get_string(ssh, &pkblob, &blen)) != 0 ||
102 (r = sshbuf_put(b, pkblob, blen)) != 0 ||
103 (r = sshbuf_get_cstring(b, &pkalg, NULL)) != 0)
104 fatal("%s: failed: %s", __func__, ssh_err(r));
105 sshbuf_free(b);
106 } else {
107 if ((r = sshpkt_get_cstring(ssh, &pkalg, NULL)) != 0 ||
108 (r = sshpkt_get_string(ssh, &pkblob, &blen)) != 0)
109 fatal("%s: sshpkt_get_cstring failed: %s",
110 __func__, ssh_err(r));
111 }
112 pktype = sshkey_type_from_name(pkalg); 109 pktype = sshkey_type_from_name(pkalg);
113 if (pktype == KEY_UNSPEC) { 110 if (pktype == KEY_UNSPEC) {
114 /* this is perfectly legal */ 111 /* this is perfectly legal */
@@ -135,7 +132,6 @@ userauth_pubkey(struct ssh *ssh)
135 "signature scheme"); 132 "signature scheme");
136 goto done; 133 goto done;
137 } 134 }
138 fp = sshkey_fingerprint(key, options.fingerprint_hash, SSH_FP_DEFAULT);
139 if (auth2_key_already_used(authctxt, key)) { 135 if (auth2_key_already_used(authctxt, key)) {
140 logit("refusing previously-used %s key", sshkey_type(key)); 136 logit("refusing previously-used %s key", sshkey_type(key));
141 goto done; 137 goto done;
@@ -147,9 +143,15 @@ userauth_pubkey(struct ssh *ssh)
147 goto done; 143 goto done;
148 } 144 }
149 145
146 key_s = format_key(key);
147 if (sshkey_is_cert(key))
148 ca_s = format_key(key->cert->signature_key);
149
150 if (have_sig) { 150 if (have_sig) {
151 debug3("%s: have signature for %s %s", 151 debug3("%s: have %s signature for %s%s%s",
152 __func__, sshkey_type(key), fp); 152 __func__, pkalg, key_s,
153 ca_s == NULL ? "" : " CA ",
154 ca_s == NULL ? "" : ca_s);
153 if ((r = sshpkt_get_string(ssh, &sig, &slen)) != 0 || 155 if ((r = sshpkt_get_string(ssh, &sig, &slen)) != 0 ||
154 (r = sshpkt_get_end(ssh)) != 0) 156 (r = sshpkt_get_end(ssh)) != 0)
155 fatal("%s: %s", __func__, ssh_err(r)); 157 fatal("%s: %s", __func__, ssh_err(r));
@@ -172,22 +174,11 @@ userauth_pubkey(struct ssh *ssh)
172 authctxt->style ? authctxt->style : ""); 174 authctxt->style ? authctxt->style : "");
173 if ((r = sshbuf_put_u8(b, SSH2_MSG_USERAUTH_REQUEST)) != 0 || 175 if ((r = sshbuf_put_u8(b, SSH2_MSG_USERAUTH_REQUEST)) != 0 ||
174 (r = sshbuf_put_cstring(b, userstyle)) != 0 || 176 (r = sshbuf_put_cstring(b, userstyle)) != 0 ||
175 (r = sshbuf_put_cstring(b, ssh->compat & SSH_BUG_PKSERVICE ? 177 (r = sshbuf_put_cstring(b, authctxt->service)) != 0 ||
176 "ssh-userauth" : authctxt->service)) != 0) 178 (r = sshbuf_put_cstring(b, "publickey")) != 0 ||
177 fatal("%s: build packet failed: %s", 179 (r = sshbuf_put_u8(b, have_sig)) != 0 ||
178 __func__, ssh_err(r)); 180 (r = sshbuf_put_cstring(b, pkalg) != 0) ||
179 if (ssh->compat & SSH_BUG_PKAUTH) { 181 (r = sshbuf_put_string(b, pkblob, blen)) != 0)
180 if ((r = sshbuf_put_u8(b, have_sig)) != 0)
181 fatal("%s: build packet failed: %s",
182 __func__, ssh_err(r));
183 } else {
184 if ((r = sshbuf_put_cstring(b, "publickey")) != 0 ||
185 (r = sshbuf_put_u8(b, have_sig)) != 0 ||
186 (r = sshbuf_put_cstring(b, pkalg) != 0))
187 fatal("%s: build packet failed: %s",
188 __func__, ssh_err(r));
189 }
190 if ((r = sshbuf_put_string(b, pkblob, blen)) != 0)
191 fatal("%s: build packet failed: %s", 182 fatal("%s: build packet failed: %s",
192 __func__, ssh_err(r)); 183 __func__, ssh_err(r));
193#ifdef DEBUG_PK 184#ifdef DEBUG_PK
@@ -196,17 +187,20 @@ userauth_pubkey(struct ssh *ssh)
196 187
197 /* test for correct signature */ 188 /* test for correct signature */
198 authenticated = 0; 189 authenticated = 0;
199 if (PRIVSEP(user_key_allowed(authctxt->pw, key, 1)) && 190 if (PRIVSEP(user_key_allowed(ssh, pw, key, 1, &authopts)) &&
200 PRIVSEP(sshkey_verify(key, sig, slen, sshbuf_ptr(b), 191 PRIVSEP(sshkey_verify(key, sig, slen, sshbuf_ptr(b),
201 sshbuf_len(b), ssh->compat)) == 0) { 192 sshbuf_len(b), NULL, ssh->compat)) == 0) {
202 authenticated = 1; 193 authenticated = 1;
203 } 194 }
204 sshbuf_free(b); 195 sshbuf_free(b);
205 free(sig); 196 free(sig);
206 auth2_record_key(authctxt, authenticated, key); 197 auth2_record_key(authctxt, authenticated, key);
207 } else { 198 } else {
208 debug("%s: test whether pkalg/pkblob are acceptable for %s %s", 199 debug("%s: test pkalg %s pkblob %s%s%s",
209 __func__, sshkey_type(key), fp); 200 __func__, pkalg, key_s,
201 ca_s == NULL ? "" : " CA ",
202 ca_s == NULL ? "" : ca_s);
203
210 if ((r = sshpkt_get_end(ssh)) != 0) 204 if ((r = sshpkt_get_end(ssh)) != 0)
211 fatal("%s: %s", __func__, ssh_err(r)); 205 fatal("%s: %s", __func__, ssh_err(r));
212 206
@@ -218,7 +212,7 @@ userauth_pubkey(struct ssh *ssh)
218 * if a user is not allowed to login. is this an 212 * if a user is not allowed to login. is this an
219 * issue? -markus 213 * issue? -markus
220 */ 214 */
221 if (PRIVSEP(user_key_allowed(authctxt->pw, key, 0))) { 215 if (PRIVSEP(user_key_allowed(ssh, pw, key, 0, NULL))) {
222 if ((r = sshpkt_start(ssh, SSH2_MSG_USERAUTH_PK_OK)) 216 if ((r = sshpkt_start(ssh, SSH2_MSG_USERAUTH_PK_OK))
223 != 0 || 217 != 0 ||
224 (r = sshpkt_put_cstring(ssh, pkalg)) != 0 || 218 (r = sshpkt_put_cstring(ssh, pkalg)) != 0 ||
@@ -229,15 +223,20 @@ userauth_pubkey(struct ssh *ssh)
229 authctxt->postponed = 1; 223 authctxt->postponed = 1;
230 } 224 }
231 } 225 }
232 if (authenticated != 1)
233 auth_clear_options();
234done: 226done:
227 if (authenticated == 1 && auth_activate_options(ssh, authopts) != 0) {
228 debug("%s: key options inconsistent with existing", __func__);
229 authenticated = 0;
230 }
235 debug2("%s: authenticated %d pkalg %s", __func__, authenticated, pkalg); 231 debug2("%s: authenticated %d pkalg %s", __func__, authenticated, pkalg);
232
233 sshauthopt_free(authopts);
236 sshkey_free(key); 234 sshkey_free(key);
237 free(userstyle); 235 free(userstyle);
238 free(pkalg); 236 free(pkalg);
239 free(pkblob); 237 free(pkblob);
240 free(fp); 238 free(key_s);
239 free(ca_s);
241 return authenticated; 240 return authenticated;
242} 241}
243 242
@@ -261,19 +260,77 @@ match_principals_option(const char *principal_list, struct sshkey_cert *cert)
261 return 0; 260 return 0;
262} 261}
263 262
263/*
264 * Process a single authorized_principals format line. Returns 0 and sets
265 * authoptsp is principal is authorised, -1 otherwise. "loc" is used as a
266 * log preamble for file/line information.
267 */
268static int
269check_principals_line(struct ssh *ssh, char *cp, const struct sshkey_cert *cert,
270 const char *loc, struct sshauthopt **authoptsp)
271{
272 u_int i, found = 0;
273 char *ep, *line_opts;
274 const char *reason = NULL;
275 struct sshauthopt *opts = NULL;
276
277 if (authoptsp != NULL)
278 *authoptsp = NULL;
279
280 /* Trim trailing whitespace. */
281 ep = cp + strlen(cp) - 1;
282 while (ep > cp && (*ep == '\n' || *ep == ' ' || *ep == '\t'))
283 *ep-- = '\0';
284
285 /*
286 * If the line has internal whitespace then assume it has
287 * key options.
288 */
289 line_opts = NULL;
290 if ((ep = strrchr(cp, ' ')) != NULL ||
291 (ep = strrchr(cp, '\t')) != NULL) {
292 for (; *ep == ' ' || *ep == '\t'; ep++)
293 ;
294 line_opts = cp;
295 cp = ep;
296 }
297 if ((opts = sshauthopt_parse(line_opts, &reason)) == NULL) {
298 debug("%s: bad principals options: %s", loc, reason);
299 auth_debug_add("%s: bad principals options: %s", loc, reason);
300 return -1;
301 }
302 /* Check principals in cert against those on line */
303 for (i = 0; i < cert->nprincipals; i++) {
304 if (strcmp(cp, cert->principals[i]) != 0)
305 continue;
306 debug3("%s: matched principal \"%.100s\"",
307 loc, cert->principals[i]);
308 found = 1;
309 }
310 if (found && authoptsp != NULL) {
311 *authoptsp = opts;
312 opts = NULL;
313 }
314 sshauthopt_free(opts);
315 return found ? 0 : -1;
316}
317
264static int 318static int
265process_principals(FILE *f, const char *file, struct passwd *pw, 319process_principals(struct ssh *ssh, FILE *f, const char *file,
266 const struct sshkey_cert *cert) 320 const struct sshkey_cert *cert, struct sshauthopt **authoptsp)
267{ 321{
268 char line[SSH_MAX_PUBKEY_BYTES], *cp, *ep, *line_opts; 322 char loc[256], line[SSH_MAX_PUBKEY_BYTES], *cp, *ep;
269 u_long linenum = 0; 323 u_long linenum = 0;
270 u_int i, found_principal = 0; 324 u_int found_principal = 0;
325
326 if (authoptsp != NULL)
327 *authoptsp = NULL;
271 328
272 auth_start_parse_options();
273 while (read_keyfile_line(f, file, line, sizeof(line), &linenum) != -1) { 329 while (read_keyfile_line(f, file, line, sizeof(line), &linenum) != -1) {
274 /* Always consume entire input */ 330 /* Always consume entire input */
275 if (found_principal) 331 if (found_principal)
276 continue; 332 continue;
333
277 /* Skip leading whitespace. */ 334 /* Skip leading whitespace. */
278 for (cp = line; *cp == ' ' || *cp == '\t'; cp++) 335 for (cp = line; *cp == ' ' || *cp == '\t'; cp++)
279 ; 336 ;
@@ -282,50 +339,33 @@ process_principals(FILE *f, const char *file, struct passwd *pw,
282 *ep = '\0'; 339 *ep = '\0';
283 if (!*cp || *cp == '\n') 340 if (!*cp || *cp == '\n')
284 continue; 341 continue;
285 /* Trim trailing whitespace. */ 342
286 ep = cp + strlen(cp) - 1; 343 snprintf(loc, sizeof(loc), "%.200s:%lu", file, linenum);
287 while (ep > cp && (*ep == '\n' || *ep == ' ' || *ep == '\t')) 344 if (check_principals_line(ssh, cp, cert, loc, authoptsp) == 0)
288 *ep-- = '\0'; 345 found_principal = 1;
289 /*
290 * If the line has internal whitespace then assume it has
291 * key options.
292 */
293 line_opts = NULL;
294 if ((ep = strrchr(cp, ' ')) != NULL ||
295 (ep = strrchr(cp, '\t')) != NULL) {
296 for (; *ep == ' ' || *ep == '\t'; ep++)
297 ;
298 line_opts = cp;
299 cp = ep;
300 }
301 for (i = 0; i < cert->nprincipals; i++) {
302 if (strcmp(cp, cert->principals[i]) == 0) {
303 debug3("%s:%lu: matched principal \"%.100s\"",
304 file, linenum, cert->principals[i]);
305 if (auth_parse_options(pw, line_opts,
306 file, linenum) != 1)
307 continue;
308 found_principal = 1;
309 continue;
310 }
311 }
312 } 346 }
313 return found_principal; 347 return found_principal;
314} 348}
315 349
350/* XXX remove pw args here and elsewhere once ssh->authctxt is guaranteed */
351
316static int 352static int
317match_principals_file(char *file, struct passwd *pw, struct sshkey_cert *cert) 353match_principals_file(struct ssh *ssh, struct passwd *pw, char *file,
354 struct sshkey_cert *cert, struct sshauthopt **authoptsp)
318{ 355{
319 FILE *f; 356 FILE *f;
320 int success; 357 int success;
321 358
359 if (authoptsp != NULL)
360 *authoptsp = NULL;
361
322 temporarily_use_uid(pw); 362 temporarily_use_uid(pw);
323 debug("trying authorized principals file %s", file); 363 debug("trying authorized principals file %s", file);
324 if ((f = auth_openprincipals(file, pw, options.strict_modes)) == NULL) { 364 if ((f = auth_openprincipals(file, pw, options.strict_modes)) == NULL) {
325 restore_uid(); 365 restore_uid();
326 return 0; 366 return 0;
327 } 367 }
328 success = process_principals(f, file, pw, cert); 368 success = process_principals(ssh, f, file, cert, authoptsp);
329 fclose(f); 369 fclose(f);
330 restore_uid(); 370 restore_uid();
331 return success; 371 return success;
@@ -336,12 +376,13 @@ match_principals_file(char *file, struct passwd *pw, struct sshkey_cert *cert)
336 * returns 1 if the principal is allowed or 0 otherwise. 376 * returns 1 if the principal is allowed or 0 otherwise.
337 */ 377 */
338static int 378static int
339match_principals_command(struct passwd *user_pw, const struct sshkey *key) 379match_principals_command(struct ssh *ssh, struct passwd *user_pw,
380 const struct sshkey *key, struct sshauthopt **authoptsp)
340{ 381{
382 struct passwd *runas_pw = NULL;
341 const struct sshkey_cert *cert = key->cert; 383 const struct sshkey_cert *cert = key->cert;
342 FILE *f = NULL; 384 FILE *f = NULL;
343 int r, ok, found_principal = 0; 385 int r, ok, found_principal = 0;
344 struct passwd *pw;
345 int i, ac = 0, uid_swapped = 0; 386 int i, ac = 0, uid_swapped = 0;
346 pid_t pid; 387 pid_t pid;
347 char *tmp, *username = NULL, *command = NULL, **av = NULL; 388 char *tmp, *username = NULL, *command = NULL, **av = NULL;
@@ -349,6 +390,8 @@ match_principals_command(struct passwd *user_pw, const struct sshkey *key)
349 char serial_s[16]; 390 char serial_s[16];
350 void (*osigchld)(int); 391 void (*osigchld)(int);
351 392
393 if (authoptsp != NULL)
394 *authoptsp = NULL;
352 if (options.authorized_principals_command == NULL) 395 if (options.authorized_principals_command == NULL)
353 return 0; 396 return 0;
354 if (options.authorized_principals_command_user == NULL) { 397 if (options.authorized_principals_command_user == NULL) {
@@ -366,8 +409,8 @@ match_principals_command(struct passwd *user_pw, const struct sshkey *key)
366 /* Prepare and verify the user for the command */ 409 /* Prepare and verify the user for the command */
367 username = percent_expand(options.authorized_principals_command_user, 410 username = percent_expand(options.authorized_principals_command_user,
368 "u", user_pw->pw_name, (char *)NULL); 411 "u", user_pw->pw_name, (char *)NULL);
369 pw = getpwnam(username); 412 runas_pw = getpwnam(username);
370 if (pw == NULL) { 413 if (runas_pw == NULL) {
371 error("AuthorizedPrincipalsCommandUser \"%s\" not found: %s", 414 error("AuthorizedPrincipalsCommandUser \"%s\" not found: %s",
372 username, strerror(errno)); 415 username, strerror(errno));
373 goto out; 416 goto out;
@@ -425,15 +468,15 @@ match_principals_command(struct passwd *user_pw, const struct sshkey *key)
425 /* Prepare a printable command for logs, etc. */ 468 /* Prepare a printable command for logs, etc. */
426 command = argv_assemble(ac, av); 469 command = argv_assemble(ac, av);
427 470
428 if ((pid = subprocess("AuthorizedPrincipalsCommand", pw, command, 471 if ((pid = subprocess("AuthorizedPrincipalsCommand", runas_pw, command,
429 ac, av, &f, 472 ac, av, &f,
430 SSH_SUBPROCESS_STDOUT_CAPTURE|SSH_SUBPROCESS_STDERR_DISCARD)) == 0) 473 SSH_SUBPROCESS_STDOUT_CAPTURE|SSH_SUBPROCESS_STDERR_DISCARD)) == 0)
431 goto out; 474 goto out;
432 475
433 uid_swapped = 1; 476 uid_swapped = 1;
434 temporarily_use_uid(pw); 477 temporarily_use_uid(runas_pw);
435 478
436 ok = process_principals(f, "(command)", pw, cert); 479 ok = process_principals(ssh, f, "(command)", cert, authoptsp);
437 480
438 fclose(f); 481 fclose(f);
439 f = NULL; 482 f = NULL;
@@ -460,133 +503,225 @@ match_principals_command(struct passwd *user_pw, const struct sshkey *key)
460 free(keytext); 503 free(keytext);
461 return found_principal; 504 return found_principal;
462} 505}
506
507static void
508skip_space(char **cpp)
509{
510 char *cp;
511
512 for (cp = *cpp; *cp == ' ' || *cp == '\t'; cp++)
513 ;
514 *cpp = cp;
515}
516
517/*
518 * Advanced *cpp past the end of key options, defined as the first unquoted
519 * whitespace character. Returns 0 on success or -1 on failure (e.g.
520 * unterminated quotes).
521 */
522static int
523advance_past_options(char **cpp)
524{
525 char *cp = *cpp;
526 int quoted = 0;
527
528 for (; *cp && (quoted || (*cp != ' ' && *cp != '\t')); cp++) {
529 if (*cp == '\\' && cp[1] == '"')
530 cp++; /* Skip both */
531 else if (*cp == '"')
532 quoted = !quoted;
533 }
534 *cpp = cp;
535 /* return failure for unterminated quotes */
536 return (*cp == '\0' && quoted) ? -1 : 0;
537}
538
539/*
540 * Check a single line of an authorized_keys-format file. Returns 0 if key
541 * matches, -1 otherwise. Will return key/cert options via *authoptsp
542 * on success. "loc" is used as file/line location in log messages.
543 */
544static int
545check_authkey_line(struct ssh *ssh, struct passwd *pw, struct sshkey *key,
546 char *cp, const char *loc, struct sshauthopt **authoptsp)
547{
548 int want_keytype = sshkey_is_cert(key) ? KEY_UNSPEC : key->type;
549 struct sshkey *found = NULL;
550 struct sshauthopt *keyopts = NULL, *certopts = NULL, *finalopts = NULL;
551 char *key_options = NULL, *fp = NULL;
552 const char *reason = NULL;
553 int ret = -1;
554
555 if (authoptsp != NULL)
556 *authoptsp = NULL;
557
558 if ((found = sshkey_new(want_keytype)) == NULL) {
559 debug3("%s: keytype %d failed", __func__, want_keytype);
560 goto out;
561 }
562
563 /* XXX djm: peek at key type in line and skip if unwanted */
564
565 if (sshkey_read(found, &cp) != 0) {
566 /* no key? check for options */
567 debug2("%s: check options: '%s'", loc, cp);
568 key_options = cp;
569 if (advance_past_options(&cp) != 0) {
570 reason = "invalid key option string";
571 goto fail_reason;
572 }
573 skip_space(&cp);
574 if (sshkey_read(found, &cp) != 0) {
575 /* still no key? advance to next line*/
576 debug2("%s: advance: '%s'", loc, cp);
577 goto out;
578 }
579 }
580 /* Parse key options now; we need to know if this is a CA key */
581 if ((keyopts = sshauthopt_parse(key_options, &reason)) == NULL) {
582 debug("%s: bad key options: %s", loc, reason);
583 auth_debug_add("%s: bad key options: %s", loc, reason);
584 goto out;
585 }
586 /* Ignore keys that don't match or incorrectly marked as CAs */
587 if (sshkey_is_cert(key)) {
588 /* Certificate; check signature key against CA */
589 if (!sshkey_equal(found, key->cert->signature_key) ||
590 !keyopts->cert_authority)
591 goto out;
592 } else {
593 /* Plain key: check it against key found in file */
594 if (!sshkey_equal(found, key) || keyopts->cert_authority)
595 goto out;
596 }
597
598 /* We have a candidate key, perform authorisation checks */
599 if ((fp = sshkey_fingerprint(found,
600 options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL)
601 fatal("%s: fingerprint failed", __func__);
602
603 debug("%s: matching %s found: %s %s", loc,
604 sshkey_is_cert(key) ? "CA" : "key", sshkey_type(found), fp);
605
606 if (auth_authorise_keyopts(ssh, pw, keyopts,
607 sshkey_is_cert(key), loc) != 0) {
608 reason = "Refused by key options";
609 goto fail_reason;
610 }
611 /* That's all we need for plain keys. */
612 if (!sshkey_is_cert(key)) {
613 verbose("Accepted key %s %s found at %s",
614 sshkey_type(found), fp, loc);
615 finalopts = keyopts;
616 keyopts = NULL;
617 goto success;
618 }
619
620 /*
621 * Additional authorisation for certificates.
622 */
623
624 /* Parse and check options present in certificate */
625 if ((certopts = sshauthopt_from_cert(key)) == NULL) {
626 reason = "Invalid certificate options";
627 goto fail_reason;
628 }
629 if (auth_authorise_keyopts(ssh, pw, certopts, 0, loc) != 0) {
630 reason = "Refused by certificate options";
631 goto fail_reason;
632 }
633 if ((finalopts = sshauthopt_merge(keyopts, certopts, &reason)) == NULL)
634 goto fail_reason;
635
636 /*
637 * If the user has specified a list of principals as
638 * a key option, then prefer that list to matching
639 * their username in the certificate principals list.
640 */
641 if (keyopts->cert_principals != NULL &&
642 !match_principals_option(keyopts->cert_principals, key->cert)) {
643 reason = "Certificate does not contain an authorized principal";
644 goto fail_reason;
645 }
646 if (sshkey_cert_check_authority(key, 0, 0,
647 keyopts->cert_principals == NULL ? pw->pw_name : NULL, &reason) != 0)
648 goto fail_reason;
649
650 verbose("Accepted certificate ID \"%s\" (serial %llu) "
651 "signed by CA %s %s found at %s",
652 key->cert->key_id,
653 (unsigned long long)key->cert->serial,
654 sshkey_type(found), fp, loc);
655
656 success:
657 if (finalopts == NULL)
658 fatal("%s: internal error: missing options", __func__);
659 if (authoptsp != NULL) {
660 *authoptsp = finalopts;
661 finalopts = NULL;
662 }
663 /* success */
664 ret = 0;
665 goto out;
666
667 fail_reason:
668 error("%s", reason);
669 auth_debug_add("%s", reason);
670 out:
671 free(fp);
672 sshauthopt_free(keyopts);
673 sshauthopt_free(certopts);
674 sshauthopt_free(finalopts);
675 sshkey_free(found);
676 return ret;
677}
678
463/* 679/*
464 * Checks whether key is allowed in authorized_keys-format file, 680 * Checks whether key is allowed in authorized_keys-format file,
465 * returns 1 if the key is allowed or 0 otherwise. 681 * returns 1 if the key is allowed or 0 otherwise.
466 */ 682 */
467static int 683static int
468check_authkeys_file(FILE *f, char *file, struct sshkey *key, struct passwd *pw) 684check_authkeys_file(struct ssh *ssh, struct passwd *pw, FILE *f,
685 char *file, struct sshkey *key, struct sshauthopt **authoptsp)
469{ 686{
470 char line[SSH_MAX_PUBKEY_BYTES]; 687 char *cp, line[SSH_MAX_PUBKEY_BYTES], loc[256];
471 int found_key = 0; 688 int found_key = 0;
472 u_long linenum = 0; 689 u_long linenum = 0;
473 struct sshkey *found = NULL;
474 690
475 auth_start_parse_options(); 691 if (authoptsp != NULL)
476 while (read_keyfile_line(f, file, line, sizeof(line), &linenum) != -1) { 692 *authoptsp = NULL;
477 char *cp, *key_options = NULL, *fp = NULL;
478 const char *reason = NULL;
479 693
694 while (read_keyfile_line(f, file, line, sizeof(line), &linenum) != -1) {
480 /* Always consume entire file */ 695 /* Always consume entire file */
481 if (found_key) 696 if (found_key)
482 continue; 697 continue;
483 if (found != NULL)
484 sshkey_free(found);
485 found = sshkey_new(sshkey_is_cert(key) ? KEY_UNSPEC : key->type);
486 if (found == NULL)
487 goto done;
488 auth_clear_options();
489 698
490 /* Skip leading whitespace, empty and comment lines. */ 699 /* Skip leading whitespace, empty and comment lines. */
491 for (cp = line; *cp == ' ' || *cp == '\t'; cp++) 700 cp = line;
492 ; 701 skip_space(&cp);
493 if (!*cp || *cp == '\n' || *cp == '#') 702 if (!*cp || *cp == '\n' || *cp == '#')
494 continue; 703 continue;
495 704 snprintf(loc, sizeof(loc), "%.200s:%lu", file, linenum);
496 if (sshkey_read(found, &cp) != 0) { 705 if (check_authkey_line(ssh, pw, key, cp, loc, authoptsp) == 0)
497 /* no key? check if there are options for this key */
498 int quoted = 0;
499 debug2("user_key_allowed: check options: '%s'", cp);
500 key_options = cp;
501 for (; *cp && (quoted || (*cp != ' ' && *cp != '\t')); cp++) {
502 if (*cp == '\\' && cp[1] == '"')
503 cp++; /* Skip both */
504 else if (*cp == '"')
505 quoted = !quoted;
506 }
507 /* Skip remaining whitespace. */
508 for (; *cp == ' ' || *cp == '\t'; cp++)
509 ;
510 if (sshkey_read(found, &cp) != 0) {
511 debug2("user_key_allowed: advance: '%s'", cp);
512 /* still no key? advance to next line*/
513 continue;
514 }
515 }
516 if (sshkey_is_cert(key)) {
517 if (!sshkey_equal(found, key->cert->signature_key))
518 continue;
519 if (auth_parse_options(pw, key_options, file,
520 linenum) != 1)
521 continue;
522 if (!key_is_cert_authority)
523 continue;
524 if ((fp = sshkey_fingerprint(found,
525 options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL)
526 continue;
527 debug("matching CA found: file %s, line %lu, %s %s",
528 file, linenum, sshkey_type(found), fp);
529 /*
530 * If the user has specified a list of principals as
531 * a key option, then prefer that list to matching
532 * their username in the certificate principals list.
533 */
534 if (authorized_principals != NULL &&
535 !match_principals_option(authorized_principals,
536 key->cert)) {
537 reason = "Certificate does not contain an "
538 "authorized principal";
539 fail_reason:
540 free(fp);
541 error("%s", reason);
542 auth_debug_add("%s", reason);
543 continue;
544 }
545 if (sshkey_cert_check_authority(key, 0, 0,
546 authorized_principals == NULL ? pw->pw_name : NULL,
547 &reason) != 0)
548 goto fail_reason;
549 if (auth_cert_options(key, pw, &reason) != 0)
550 goto fail_reason;
551 verbose("Accepted certificate ID \"%s\" (serial %llu) "
552 "signed by %s CA %s via %s", key->cert->key_id,
553 (unsigned long long)key->cert->serial,
554 sshkey_type(found), fp, file);
555 free(fp);
556 found_key = 1;
557 break;
558 } else if (sshkey_equal(found, key)) {
559 if (auth_parse_options(pw, key_options, file,
560 linenum) != 1)
561 continue;
562 if (key_is_cert_authority)
563 continue;
564 if ((fp = sshkey_fingerprint(found,
565 options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL)
566 continue;
567 debug("matching key found: file %s, line %lu %s %s",
568 file, linenum, sshkey_type(found), fp);
569 free(fp);
570 found_key = 1; 706 found_key = 1;
571 continue;
572 }
573 } 707 }
574 done:
575 if (found != NULL)
576 sshkey_free(found);
577 if (!found_key)
578 debug2("key not found");
579 return found_key; 708 return found_key;
580} 709}
581 710
582/* Authenticate a certificate key against TrustedUserCAKeys */ 711/* Authenticate a certificate key against TrustedUserCAKeys */
583static int 712static int
584user_cert_trusted_ca(struct passwd *pw, struct sshkey *key) 713user_cert_trusted_ca(struct ssh *ssh, struct passwd *pw, struct sshkey *key,
714 struct sshauthopt **authoptsp)
585{ 715{
586 char *ca_fp, *principals_file = NULL; 716 char *ca_fp, *principals_file = NULL;
587 const char *reason; 717 const char *reason;
718 struct sshauthopt *principals_opts = NULL, *cert_opts = NULL;
719 struct sshauthopt *final_opts = NULL;
588 int r, ret = 0, found_principal = 0, use_authorized_principals; 720 int r, ret = 0, found_principal = 0, use_authorized_principals;
589 721
722 if (authoptsp != NULL)
723 *authoptsp = NULL;
724
590 if (!sshkey_is_cert(key) || options.trusted_user_ca_keys == NULL) 725 if (!sshkey_is_cert(key) || options.trusted_user_ca_keys == NULL)
591 return 0; 726 return 0;
592 727
@@ -607,37 +742,69 @@ user_cert_trusted_ca(struct passwd *pw, struct sshkey *key)
607 * against the username. 742 * against the username.
608 */ 743 */
609 if ((principals_file = authorized_principals_file(pw)) != NULL) { 744 if ((principals_file = authorized_principals_file(pw)) != NULL) {
610 if (match_principals_file(principals_file, pw, key->cert)) 745 if (match_principals_file(ssh, pw, principals_file,
746 key->cert, &principals_opts))
611 found_principal = 1; 747 found_principal = 1;
612 } 748 }
613 /* Try querying command if specified */ 749 /* Try querying command if specified */
614 if (!found_principal && match_principals_command(pw, key)) 750 if (!found_principal && match_principals_command(ssh, pw, key,
751 &principals_opts))
615 found_principal = 1; 752 found_principal = 1;
616 /* If principals file or command is specified, then require a match */ 753 /* If principals file or command is specified, then require a match */
617 use_authorized_principals = principals_file != NULL || 754 use_authorized_principals = principals_file != NULL ||
618 options.authorized_principals_command != NULL; 755 options.authorized_principals_command != NULL;
619 if (!found_principal && use_authorized_principals) { 756 if (!found_principal && use_authorized_principals) {
620 reason = "Certificate does not contain an authorized principal"; 757 reason = "Certificate does not contain an authorized principal";
621 fail_reason: 758 goto fail_reason;
622 error("%s", reason);
623 auth_debug_add("%s", reason);
624 goto out;
625 } 759 }
760 if (use_authorized_principals && principals_opts == NULL)
761 fatal("%s: internal error: missing principals_opts", __func__);
626 if (sshkey_cert_check_authority(key, 0, 1, 762 if (sshkey_cert_check_authority(key, 0, 1,
627 use_authorized_principals ? NULL : pw->pw_name, &reason) != 0) 763 use_authorized_principals ? NULL : pw->pw_name, &reason) != 0)
628 goto fail_reason; 764 goto fail_reason;
629 auth_start_parse_options(); 765
630 if (auth_cert_options(key, pw, &reason) != 0) 766 /* Check authority from options in key and from principals file/cmd */
767 if ((cert_opts = sshauthopt_from_cert(key)) == NULL) {
768 reason = "Invalid certificate options";
769 goto fail_reason;
770 }
771 if (auth_authorise_keyopts(ssh, pw, cert_opts, 0, "cert") != 0) {
772 reason = "Refused by certificate options";
631 goto fail_reason; 773 goto fail_reason;
774 }
775 if (principals_opts == NULL) {
776 final_opts = cert_opts;
777 cert_opts = NULL;
778 } else {
779 if (auth_authorise_keyopts(ssh, pw, principals_opts, 0,
780 "principals") != 0) {
781 reason = "Refused by certificate principals options";
782 goto fail_reason;
783 }
784 if ((final_opts = sshauthopt_merge(principals_opts,
785 cert_opts, &reason)) == NULL) {
786 fail_reason:
787 error("%s", reason);
788 auth_debug_add("%s", reason);
789 goto out;
790 }
791 }
632 792
793 /* Success */
633 verbose("Accepted certificate ID \"%s\" (serial %llu) signed by " 794 verbose("Accepted certificate ID \"%s\" (serial %llu) signed by "
634 "%s CA %s via %s", key->cert->key_id, 795 "%s CA %s via %s", key->cert->key_id,
635 (unsigned long long)key->cert->serial, 796 (unsigned long long)key->cert->serial,
636 sshkey_type(key->cert->signature_key), ca_fp, 797 sshkey_type(key->cert->signature_key), ca_fp,
637 options.trusted_user_ca_keys); 798 options.trusted_user_ca_keys);
799 if (authoptsp != NULL) {
800 *authoptsp = final_opts;
801 final_opts = NULL;
802 }
638 ret = 1; 803 ret = 1;
639
640 out: 804 out:
805 sshauthopt_free(principals_opts);
806 sshauthopt_free(cert_opts);
807 sshauthopt_free(final_opts);
641 free(principals_file); 808 free(principals_file);
642 free(ca_fp); 809 free(ca_fp);
643 return ret; 810 return ret;
@@ -648,17 +815,22 @@ user_cert_trusted_ca(struct passwd *pw, struct sshkey *key)
648 * returns 1 if the key is allowed or 0 otherwise. 815 * returns 1 if the key is allowed or 0 otherwise.
649 */ 816 */
650static int 817static int
651user_key_allowed2(struct passwd *pw, struct sshkey *key, char *file) 818user_key_allowed2(struct ssh *ssh, struct passwd *pw, struct sshkey *key,
819 char *file, struct sshauthopt **authoptsp)
652{ 820{
653 FILE *f; 821 FILE *f;
654 int found_key = 0; 822 int found_key = 0;
655 823
824 if (authoptsp != NULL)
825 *authoptsp = NULL;
826
656 /* Temporarily use the user's uid. */ 827 /* Temporarily use the user's uid. */
657 temporarily_use_uid(pw); 828 temporarily_use_uid(pw);
658 829
659 debug("trying public key file %s", file); 830 debug("trying public key file %s", file);
660 if ((f = auth_openkeyfile(file, pw, options.strict_modes)) != NULL) { 831 if ((f = auth_openkeyfile(file, pw, options.strict_modes)) != NULL) {
661 found_key = check_authkeys_file(f, file, key, pw); 832 found_key = check_authkeys_file(ssh, pw, f, file,
833 key, authoptsp);
662 fclose(f); 834 fclose(f);
663 } 835 }
664 836
@@ -671,17 +843,20 @@ user_key_allowed2(struct passwd *pw, struct sshkey *key, char *file)
671 * returns 1 if the key is allowed or 0 otherwise. 843 * returns 1 if the key is allowed or 0 otherwise.
672 */ 844 */
673static int 845static int
674user_key_command_allowed2(struct passwd *user_pw, struct sshkey *key) 846user_key_command_allowed2(struct ssh *ssh, struct passwd *user_pw,
847 struct sshkey *key, struct sshauthopt **authoptsp)
675{ 848{
849 struct passwd *runas_pw = NULL;
676 FILE *f = NULL; 850 FILE *f = NULL;
677 int r, ok, found_key = 0; 851 int r, ok, found_key = 0;
678 struct passwd *pw;
679 int i, uid_swapped = 0, ac = 0; 852 int i, uid_swapped = 0, ac = 0;
680 pid_t pid; 853 pid_t pid;
681 char *username = NULL, *key_fp = NULL, *keytext = NULL; 854 char *username = NULL, *key_fp = NULL, *keytext = NULL;
682 char *tmp, *command = NULL, **av = NULL; 855 char *tmp, *command = NULL, **av = NULL;
683 void (*osigchld)(int); 856 void (*osigchld)(int);
684 857
858 if (authoptsp != NULL)
859 *authoptsp = NULL;
685 if (options.authorized_keys_command == NULL) 860 if (options.authorized_keys_command == NULL)
686 return 0; 861 return 0;
687 if (options.authorized_keys_command_user == NULL) { 862 if (options.authorized_keys_command_user == NULL) {
@@ -698,8 +873,8 @@ user_key_command_allowed2(struct passwd *user_pw, struct sshkey *key)
698 /* Prepare and verify the user for the command */ 873 /* Prepare and verify the user for the command */
699 username = percent_expand(options.authorized_keys_command_user, 874 username = percent_expand(options.authorized_keys_command_user,
700 "u", user_pw->pw_name, (char *)NULL); 875 "u", user_pw->pw_name, (char *)NULL);
701 pw = getpwnam(username); 876 runas_pw = getpwnam(username);
702 if (pw == NULL) { 877 if (runas_pw == NULL) {
703 error("AuthorizedKeysCommandUser \"%s\" not found: %s", 878 error("AuthorizedKeysCommandUser \"%s\" not found: %s",
704 username, strerror(errno)); 879 username, strerror(errno));
705 goto out; 880 goto out;
@@ -757,15 +932,16 @@ user_key_command_allowed2(struct passwd *user_pw, struct sshkey *key)
757 xasprintf(&command, "%s %s", av[0], av[1]); 932 xasprintf(&command, "%s %s", av[0], av[1]);
758 } 933 }
759 934
760 if ((pid = subprocess("AuthorizedKeysCommand", pw, command, 935 if ((pid = subprocess("AuthorizedKeysCommand", runas_pw, command,
761 ac, av, &f, 936 ac, av, &f,
762 SSH_SUBPROCESS_STDOUT_CAPTURE|SSH_SUBPROCESS_STDERR_DISCARD)) == 0) 937 SSH_SUBPROCESS_STDOUT_CAPTURE|SSH_SUBPROCESS_STDERR_DISCARD)) == 0)
763 goto out; 938 goto out;
764 939
765 uid_swapped = 1; 940 uid_swapped = 1;
766 temporarily_use_uid(pw); 941 temporarily_use_uid(runas_pw);
767 942
768 ok = check_authkeys_file(f, options.authorized_keys_command, key, pw); 943 ok = check_authkeys_file(ssh, user_pw, f,
944 options.authorized_keys_command, key, authoptsp);
769 945
770 fclose(f); 946 fclose(f);
771 f = NULL; 947 f = NULL;
@@ -795,10 +971,14 @@ user_key_command_allowed2(struct passwd *user_pw, struct sshkey *key)
795 * Check whether key authenticates and authorises the user. 971 * Check whether key authenticates and authorises the user.
796 */ 972 */
797int 973int
798user_key_allowed(struct passwd *pw, struct sshkey *key, int auth_attempt) 974user_key_allowed(struct ssh *ssh, struct passwd *pw, struct sshkey *key,
975 int auth_attempt, struct sshauthopt **authoptsp)
799{ 976{
800 u_int success, i; 977 u_int success, i;
801 char *file; 978 char *file;
979 struct sshauthopt *opts = NULL;
980 if (authoptsp != NULL)
981 *authoptsp = NULL;
802 982
803 if (auth_key_is_revoked(key)) 983 if (auth_key_is_revoked(key))
804 return 0; 984 return 0;
@@ -806,25 +986,31 @@ user_key_allowed(struct passwd *pw, struct sshkey *key, int auth_attempt)
806 auth_key_is_revoked(key->cert->signature_key)) 986 auth_key_is_revoked(key->cert->signature_key))
807 return 0; 987 return 0;
808 988
809 success = user_cert_trusted_ca(pw, key); 989 if ((success = user_cert_trusted_ca(ssh, pw, key, &opts)) != 0)
810 if (success) 990 goto out;
811 return success; 991 sshauthopt_free(opts);
992 opts = NULL;
812 993
813 success = user_key_command_allowed2(pw, key); 994 if ((success = user_key_command_allowed2(ssh, pw, key, &opts)) != 0)
814 if (success > 0) 995 goto out;
815 return success; 996 sshauthopt_free(opts);
997 opts = NULL;
816 998
817 for (i = 0; !success && i < options.num_authkeys_files; i++) { 999 for (i = 0; !success && i < options.num_authkeys_files; i++) {
818
819 if (strcasecmp(options.authorized_keys_files[i], "none") == 0) 1000 if (strcasecmp(options.authorized_keys_files[i], "none") == 0)
820 continue; 1001 continue;
821 file = expand_authorized_keys( 1002 file = expand_authorized_keys(
822 options.authorized_keys_files[i], pw); 1003 options.authorized_keys_files[i], pw);
823 1004 success = user_key_allowed2(ssh, pw, key, file, &opts);
824 success = user_key_allowed2(pw, key, file);
825 free(file); 1005 free(file);
826 } 1006 }
827 1007
1008 out:
1009 if (success && authoptsp != NULL) {
1010 *authoptsp = opts;
1011 opts = NULL;
1012 }
1013 sshauthopt_free(opts);
828 return success; 1014 return success;
829} 1015}
830 1016
diff --git a/auth2.c b/auth2.c
index 1f9ec6327..be5e9f15f 100644
--- a/auth2.c
+++ b/auth2.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: auth2.c,v 1.143 2017/06/24 06:34:38 djm Exp $ */ 1/* $OpenBSD: auth2.c,v 1.145 2018/03/03 03:15:51 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * 4 *
@@ -140,9 +140,6 @@ auth2_read_banner(void)
140void 140void
141userauth_send_banner(const char *msg) 141userauth_send_banner(const char *msg)
142{ 142{
143 if (datafellows & SSH_BUG_BANNER)
144 return;
145
146 packet_start(SSH2_MSG_USERAUTH_BANNER); 143 packet_start(SSH2_MSG_USERAUTH_BANNER);
147 packet_put_cstring(msg); 144 packet_put_cstring(msg);
148 packet_put_cstring(""); /* language, unused */ 145 packet_put_cstring(""); /* language, unused */
@@ -155,7 +152,7 @@ userauth_banner(void)
155{ 152{
156 char *banner = NULL; 153 char *banner = NULL;
157 154
158 if (options.banner == NULL || (datafellows & SSH_BUG_BANNER) != 0) 155 if (options.banner == NULL)
159 return; 156 return;
160 157
161 if ((banner = PRIVSEP(auth2_read_banner())) == NULL) 158 if ((banner = PRIVSEP(auth2_read_banner())) == NULL)
@@ -321,7 +318,7 @@ userauth_finish(struct ssh *ssh, int authenticated, const char *method,
321 318
322 /* Special handling for root */ 319 /* Special handling for root */
323 if (authenticated && authctxt->pw->pw_uid == 0 && 320 if (authenticated && authctxt->pw->pw_uid == 0 &&
324 !auth_root_allowed(method)) { 321 !auth_root_allowed(ssh, method)) {
325 authenticated = 0; 322 authenticated = 0;
326#ifdef SSH_AUDIT_EVENTS 323#ifdef SSH_AUDIT_EVENTS
327 PRIVSEP(audit_event(SSH_LOGIN_ROOT_DENIED)); 324 PRIVSEP(audit_event(SSH_LOGIN_ROOT_DENIED));
@@ -360,13 +357,6 @@ userauth_finish(struct ssh *ssh, int authenticated, const char *method,
360 } 357 }
361#endif 358#endif
362 359
363#ifdef _UNICOS
364 if (authenticated && cray_access_denied(authctxt->user)) {
365 authenticated = 0;
366 fatal("Access denied for user %s.", authctxt->user);
367 }
368#endif /* _UNICOS */
369
370 if (authenticated == 1) { 360 if (authenticated == 1) {
371 /* turn off userauth */ 361 /* turn off userauth */
372 ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_REQUEST, &dispatch_protocol_ignore); 362 ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_REQUEST, &dispatch_protocol_ignore);
@@ -377,7 +367,6 @@ userauth_finish(struct ssh *ssh, int authenticated, const char *method,
377 authctxt->success = 1; 367 authctxt->success = 1;
378 ssh_packet_set_log_preamble(ssh, "user %s", authctxt->user); 368 ssh_packet_set_log_preamble(ssh, "user %s", authctxt->user);
379 } else { 369 } else {
380
381 /* Allow initial try of "none" auth without failure penalty */ 370 /* Allow initial try of "none" auth without failure penalty */
382 if (!partial && !authctxt->server_caused_failure && 371 if (!partial && !authctxt->server_caused_failure &&
383 (authctxt->attempt > 1 || strcmp(method, "none") != 0)) 372 (authctxt->attempt > 1 || strcmp(method, "none") != 0))
diff --git a/authfd.c b/authfd.c
index a460fa350..1eff7ba94 100644
--- a/authfd.c
+++ b/authfd.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: authfd.c,v 1.105 2017/07/01 13:50:45 djm Exp $ */ 1/* $OpenBSD: authfd.c,v 1.108 2018/02/23 15:58:37 markus Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -129,7 +129,7 @@ ssh_request_reply(int sock, struct sshbuf *request, struct sshbuf *reply)
129 129
130 /* Get the length of the message, and format it in the buffer. */ 130 /* Get the length of the message, and format it in the buffer. */
131 len = sshbuf_len(request); 131 len = sshbuf_len(request);
132 put_u32(buf, len); 132 POKE_U32(buf, len);
133 133
134 /* Send the length and then the packet to the agent. */ 134 /* Send the length and then the packet to the agent. */
135 if (atomicio(vwrite, sock, buf, 4) != 4 || 135 if (atomicio(vwrite, sock, buf, 4) != 4 ||
@@ -144,7 +144,7 @@ ssh_request_reply(int sock, struct sshbuf *request, struct sshbuf *reply)
144 return SSH_ERR_AGENT_COMMUNICATION; 144 return SSH_ERR_AGENT_COMMUNICATION;
145 145
146 /* Extract the length, and check it for sanity. */ 146 /* Extract the length, and check it for sanity. */
147 len = get_u32(buf); 147 len = PEEK_U32(buf);
148 if (len > MAX_AGENT_REPLY_LEN) 148 if (len > MAX_AGENT_REPLY_LEN)
149 return SSH_ERR_INVALID_FORMAT; 149 return SSH_ERR_INVALID_FORMAT;
150 150
@@ -353,8 +353,6 @@ ssh_agent_sign(int sock, const struct sshkey *key,
353 353
354 if (datalen > SSH_KEY_MAX_SIGN_DATA_SIZE) 354 if (datalen > SSH_KEY_MAX_SIGN_DATA_SIZE)
355 return SSH_ERR_INVALID_ARGUMENT; 355 return SSH_ERR_INVALID_ARGUMENT;
356 if (compat & SSH_BUG_SIGBLOB)
357 flags |= SSH_AGENT_OLD_SIGNATURE;
358 if ((msg = sshbuf_new()) == NULL) 356 if ((msg = sshbuf_new()) == NULL)
359 return SSH_ERR_ALLOC_FAIL; 357 return SSH_ERR_ALLOC_FAIL;
360 if ((r = sshkey_to_blob(key, &blob, &blen)) != 0) 358 if ((r = sshkey_to_blob(key, &blob, &blen)) != 0)
@@ -393,19 +391,7 @@ ssh_agent_sign(int sock, const struct sshkey *key,
393 391
394 392
395static int 393static int
396ssh_encode_identity_ssh2(struct sshbuf *b, struct sshkey *key, 394encode_constraints(struct sshbuf *m, u_int life, u_int confirm, u_int maxsign)
397 const char *comment)
398{
399 int r;
400
401 if ((r = sshkey_private_serialize(key, b)) != 0 ||
402 (r = sshbuf_put_cstring(b, comment)) != 0)
403 return r;
404 return 0;
405}
406
407static int
408encode_constraints(struct sshbuf *m, u_int life, u_int confirm)
409{ 395{
410 int r; 396 int r;
411 397
@@ -418,6 +404,11 @@ encode_constraints(struct sshbuf *m, u_int life, u_int confirm)
418 if ((r = sshbuf_put_u8(m, SSH_AGENT_CONSTRAIN_CONFIRM)) != 0) 404 if ((r = sshbuf_put_u8(m, SSH_AGENT_CONSTRAIN_CONFIRM)) != 0)
419 goto out; 405 goto out;
420 } 406 }
407 if (maxsign != 0) {
408 if ((r = sshbuf_put_u8(m, SSH_AGENT_CONSTRAIN_MAXSIGN)) != 0 ||
409 (r = sshbuf_put_u32(m, maxsign)) != 0)
410 goto out;
411 }
421 r = 0; 412 r = 0;
422 out: 413 out:
423 return r; 414 return r;
@@ -428,11 +419,11 @@ encode_constraints(struct sshbuf *m, u_int life, u_int confirm)
428 * This call is intended only for use by ssh-add(1) and like applications. 419 * This call is intended only for use by ssh-add(1) and like applications.
429 */ 420 */
430int 421int
431ssh_add_identity_constrained(int sock, struct sshkey *key, const char *comment, 422ssh_add_identity_constrained(int sock, const struct sshkey *key,
432 u_int life, u_int confirm) 423 const char *comment, u_int life, u_int confirm, u_int maxsign)
433{ 424{
434 struct sshbuf *msg; 425 struct sshbuf *msg;
435 int r, constrained = (life || confirm); 426 int r, constrained = (life || confirm || maxsign);
436 u_char type; 427 u_char type;
437 428
438 if ((msg = sshbuf_new()) == NULL) 429 if ((msg = sshbuf_new()) == NULL)
@@ -449,11 +440,15 @@ ssh_add_identity_constrained(int sock, struct sshkey *key, const char *comment,
449#endif 440#endif
450 case KEY_ED25519: 441 case KEY_ED25519:
451 case KEY_ED25519_CERT: 442 case KEY_ED25519_CERT:
443 case KEY_XMSS:
444 case KEY_XMSS_CERT:
452 type = constrained ? 445 type = constrained ?
453 SSH2_AGENTC_ADD_ID_CONSTRAINED : 446 SSH2_AGENTC_ADD_ID_CONSTRAINED :
454 SSH2_AGENTC_ADD_IDENTITY; 447 SSH2_AGENTC_ADD_IDENTITY;
455 if ((r = sshbuf_put_u8(msg, type)) != 0 || 448 if ((r = sshbuf_put_u8(msg, type)) != 0 ||
456 (r = ssh_encode_identity_ssh2(msg, key, comment)) != 0) 449 (r = sshkey_private_serialize_maxsign(key, msg, maxsign,
450 NULL)) != 0 ||
451 (r = sshbuf_put_cstring(msg, comment)) != 0)
457 goto out; 452 goto out;
458 break; 453 break;
459 default: 454 default:
@@ -461,7 +456,7 @@ ssh_add_identity_constrained(int sock, struct sshkey *key, const char *comment,
461 goto out; 456 goto out;
462 } 457 }
463 if (constrained && 458 if (constrained &&
464 (r = encode_constraints(msg, life, confirm)) != 0) 459 (r = encode_constraints(msg, life, confirm, maxsign)) != 0)
465 goto out; 460 goto out;
466 if ((r = ssh_request_reply(sock, msg, msg)) != 0) 461 if ((r = ssh_request_reply(sock, msg, msg)) != 0)
467 goto out; 462 goto out;
@@ -539,7 +534,7 @@ ssh_update_card(int sock, int add, const char *reader_id, const char *pin,
539 (r = sshbuf_put_cstring(msg, pin)) != 0) 534 (r = sshbuf_put_cstring(msg, pin)) != 0)
540 goto out; 535 goto out;
541 if (constrained && 536 if (constrained &&
542 (r = encode_constraints(msg, life, confirm)) != 0) 537 (r = encode_constraints(msg, life, confirm, 0)) != 0)
543 goto out; 538 goto out;
544 if ((r = ssh_request_reply(sock, msg, msg)) != 0) 539 if ((r = ssh_request_reply(sock, msg, msg)) != 0)
545 goto out; 540 goto out;
diff --git a/authfd.h b/authfd.h
index 43abf85da..ab954ffc0 100644
--- a/authfd.h
+++ b/authfd.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: authfd.h,v 1.41 2017/06/28 01:09:22 djm Exp $ */ 1/* $OpenBSD: authfd.h,v 1.43 2018/02/23 15:58:37 markus Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -29,8 +29,8 @@ void ssh_close_authentication_socket(int sock);
29int ssh_lock_agent(int sock, int lock, const char *password); 29int ssh_lock_agent(int sock, int lock, const char *password);
30int ssh_fetch_identitylist(int sock, struct ssh_identitylist **idlp); 30int ssh_fetch_identitylist(int sock, struct ssh_identitylist **idlp);
31void ssh_free_identitylist(struct ssh_identitylist *idl); 31void ssh_free_identitylist(struct ssh_identitylist *idl);
32int ssh_add_identity_constrained(int sock, struct sshkey *key, 32int ssh_add_identity_constrained(int sock, const struct sshkey *key,
33 const char *comment, u_int life, u_int confirm); 33 const char *comment, u_int life, u_int confirm, u_int maxsign);
34int ssh_remove_identity(int sock, struct sshkey *key); 34int ssh_remove_identity(int sock, struct sshkey *key);
35int ssh_update_card(int sock, int add, const char *reader_id, 35int ssh_update_card(int sock, int add, const char *reader_id,
36 const char *pin, u_int life, u_int confirm); 36 const char *pin, u_int life, u_int confirm);
@@ -77,6 +77,7 @@ int ssh_agent_sign(int sock, const struct sshkey *key,
77 77
78#define SSH_AGENT_CONSTRAIN_LIFETIME 1 78#define SSH_AGENT_CONSTRAIN_LIFETIME 1
79#define SSH_AGENT_CONSTRAIN_CONFIRM 2 79#define SSH_AGENT_CONSTRAIN_CONFIRM 2
80#define SSH_AGENT_CONSTRAIN_MAXSIGN 3
80 81
81/* extended failure messages */ 82/* extended failure messages */
82#define SSH2_AGENT_FAILURE 30 83#define SSH2_AGENT_FAILURE 30
diff --git a/authfile.c b/authfile.c
index d09b700d2..57dcd808c 100644
--- a/authfile.c
+++ b/authfile.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: authfile.c,v 1.127 2017/07/01 13:50:45 djm Exp $ */ 1/* $OpenBSD: authfile.c,v 1.128 2018/02/23 15:58:37 markus Exp $ */
2/* 2/*
3 * Copyright (c) 2000, 2013 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000, 2013 Markus Friedl. All rights reserved.
4 * 4 *
@@ -191,6 +191,8 @@ sshkey_load_private_type(int type, const char *filename, const char *passphrase,
191 *perm_ok = 1; 191 *perm_ok = 1;
192 192
193 r = sshkey_load_private_type_fd(fd, type, passphrase, keyp, commentp); 193 r = sshkey_load_private_type_fd(fd, type, passphrase, keyp, commentp);
194 if (r == 0 && keyp && *keyp)
195 r = sshkey_set_filename(*keyp, filename);
194 out: 196 out:
195 close(fd); 197 close(fd);
196 return r; 198 return r;
@@ -249,6 +251,9 @@ sshkey_load_private(const char *filename, const char *passphrase,
249 (r = sshkey_parse_private_fileblob(buffer, passphrase, keyp, 251 (r = sshkey_parse_private_fileblob(buffer, passphrase, keyp,
250 commentp)) != 0) 252 commentp)) != 0)
251 goto out; 253 goto out;
254 if (keyp && *keyp &&
255 (r = sshkey_set_filename(*keyp, filename)) != 0)
256 goto out;
252 r = 0; 257 r = 0;
253 out: 258 out:
254 close(fd); 259 close(fd);
@@ -397,6 +402,7 @@ sshkey_load_private_cert(int type, const char *filename, const char *passphrase,
397 case KEY_ECDSA: 402 case KEY_ECDSA:
398#endif /* WITH_OPENSSL */ 403#endif /* WITH_OPENSSL */
399 case KEY_ED25519: 404 case KEY_ED25519:
405 case KEY_XMSS:
400 case KEY_UNSPEC: 406 case KEY_UNSPEC:
401 break; 407 break;
402 default: 408 default:
diff --git a/bitmap.c b/bitmap.c
index 5089b0407..5ecfe68b8 100644
--- a/bitmap.c
+++ b/bitmap.c
@@ -1,3 +1,4 @@
1/* $OpenBSD: bitmap.c,v 1.9 2017/10/20 01:56:39 djm Exp $ */
1/* 2/*
2 * Copyright (c) 2015 Damien Miller <djm@mindrot.org> 3 * Copyright (c) 2015 Damien Miller <djm@mindrot.org>
3 * 4 *
diff --git a/bitmap.h b/bitmap.h
index c1bb1741a..336e90b06 100644
--- a/bitmap.h
+++ b/bitmap.h
@@ -1,3 +1,4 @@
1/* $OpenBSD: bitmap.h,v 1.2 2017/10/20 01:56:39 djm Exp $ */
1/* 2/*
2 * Copyright (c) 2015 Damien Miller <djm@mindrot.org> 3 * Copyright (c) 2015 Damien Miller <djm@mindrot.org>
3 * 4 *
diff --git a/blocks.c b/blocks.c
deleted file mode 100644
index ad93fe509..000000000
--- a/blocks.c
+++ /dev/null
@@ -1,248 +0,0 @@
1/* $OpenBSD: blocks.c,v 1.3 2013/12/09 11:03:45 markus Exp $ */
2
3/*
4 * Public Domain, Author: Daniel J. Bernstein
5 * Copied from nacl-20110221/crypto_hashblocks/sha512/ref/blocks.c
6 */
7
8#include "includes.h"
9
10#include "crypto_api.h"
11
12typedef unsigned long long uint64;
13
14static uint64 load_bigendian(const unsigned char *x)
15{
16 return
17 (uint64) (x[7]) \
18 | (((uint64) (x[6])) << 8) \
19 | (((uint64) (x[5])) << 16) \
20 | (((uint64) (x[4])) << 24) \
21 | (((uint64) (x[3])) << 32) \
22 | (((uint64) (x[2])) << 40) \
23 | (((uint64) (x[1])) << 48) \
24 | (((uint64) (x[0])) << 56)
25 ;
26}
27
28static void store_bigendian(unsigned char *x,uint64 u)
29{
30 x[7] = u; u >>= 8;
31 x[6] = u; u >>= 8;
32 x[5] = u; u >>= 8;
33 x[4] = u; u >>= 8;
34 x[3] = u; u >>= 8;
35 x[2] = u; u >>= 8;
36 x[1] = u; u >>= 8;
37 x[0] = u;
38}
39
40#define SHR(x,c) ((x) >> (c))
41#define ROTR(x,c) (((x) >> (c)) | ((x) << (64 - (c))))
42
43#define Ch(x,y,z) ((x & y) ^ (~x & z))
44#define Maj(x,y,z) ((x & y) ^ (x & z) ^ (y & z))
45#define Sigma0(x) (ROTR(x,28) ^ ROTR(x,34) ^ ROTR(x,39))
46#define Sigma1(x) (ROTR(x,14) ^ ROTR(x,18) ^ ROTR(x,41))
47#define sigma0(x) (ROTR(x, 1) ^ ROTR(x, 8) ^ SHR(x,7))
48#define sigma1(x) (ROTR(x,19) ^ ROTR(x,61) ^ SHR(x,6))
49
50#define M(w0,w14,w9,w1) w0 = sigma1(w14) + w9 + sigma0(w1) + w0;
51
52#define EXPAND \
53 M(w0 ,w14,w9 ,w1 ) \
54 M(w1 ,w15,w10,w2 ) \
55 M(w2 ,w0 ,w11,w3 ) \
56 M(w3 ,w1 ,w12,w4 ) \
57 M(w4 ,w2 ,w13,w5 ) \
58 M(w5 ,w3 ,w14,w6 ) \
59 M(w6 ,w4 ,w15,w7 ) \
60 M(w7 ,w5 ,w0 ,w8 ) \
61 M(w8 ,w6 ,w1 ,w9 ) \
62 M(w9 ,w7 ,w2 ,w10) \
63 M(w10,w8 ,w3 ,w11) \
64 M(w11,w9 ,w4 ,w12) \
65 M(w12,w10,w5 ,w13) \
66 M(w13,w11,w6 ,w14) \
67 M(w14,w12,w7 ,w15) \
68 M(w15,w13,w8 ,w0 )
69
70#define F(w,k) \
71 T1 = h + Sigma1(e) + Ch(e,f,g) + k + w; \
72 T2 = Sigma0(a) + Maj(a,b,c); \
73 h = g; \
74 g = f; \
75 f = e; \
76 e = d + T1; \
77 d = c; \
78 c = b; \
79 b = a; \
80 a = T1 + T2;
81
82int crypto_hashblocks_sha512(unsigned char *statebytes,const unsigned char *in,unsigned long long inlen)
83{
84 uint64 state[8];
85 uint64 a;
86 uint64 b;
87 uint64 c;
88 uint64 d;
89 uint64 e;
90 uint64 f;
91 uint64 g;
92 uint64 h;
93 uint64 T1;
94 uint64 T2;
95
96 a = load_bigendian(statebytes + 0); state[0] = a;
97 b = load_bigendian(statebytes + 8); state[1] = b;
98 c = load_bigendian(statebytes + 16); state[2] = c;
99 d = load_bigendian(statebytes + 24); state[3] = d;
100 e = load_bigendian(statebytes + 32); state[4] = e;
101 f = load_bigendian(statebytes + 40); state[5] = f;
102 g = load_bigendian(statebytes + 48); state[6] = g;
103 h = load_bigendian(statebytes + 56); state[7] = h;
104
105 while (inlen >= 128) {
106 uint64 w0 = load_bigendian(in + 0);
107 uint64 w1 = load_bigendian(in + 8);
108 uint64 w2 = load_bigendian(in + 16);
109 uint64 w3 = load_bigendian(in + 24);
110 uint64 w4 = load_bigendian(in + 32);
111 uint64 w5 = load_bigendian(in + 40);
112 uint64 w6 = load_bigendian(in + 48);
113 uint64 w7 = load_bigendian(in + 56);
114 uint64 w8 = load_bigendian(in + 64);
115 uint64 w9 = load_bigendian(in + 72);
116 uint64 w10 = load_bigendian(in + 80);
117 uint64 w11 = load_bigendian(in + 88);
118 uint64 w12 = load_bigendian(in + 96);
119 uint64 w13 = load_bigendian(in + 104);
120 uint64 w14 = load_bigendian(in + 112);
121 uint64 w15 = load_bigendian(in + 120);
122
123 F(w0 ,0x428a2f98d728ae22ULL)
124 F(w1 ,0x7137449123ef65cdULL)
125 F(w2 ,0xb5c0fbcfec4d3b2fULL)
126 F(w3 ,0xe9b5dba58189dbbcULL)
127 F(w4 ,0x3956c25bf348b538ULL)
128 F(w5 ,0x59f111f1b605d019ULL)
129 F(w6 ,0x923f82a4af194f9bULL)
130 F(w7 ,0xab1c5ed5da6d8118ULL)
131 F(w8 ,0xd807aa98a3030242ULL)
132 F(w9 ,0x12835b0145706fbeULL)
133 F(w10,0x243185be4ee4b28cULL)
134 F(w11,0x550c7dc3d5ffb4e2ULL)
135 F(w12,0x72be5d74f27b896fULL)
136 F(w13,0x80deb1fe3b1696b1ULL)
137 F(w14,0x9bdc06a725c71235ULL)
138 F(w15,0xc19bf174cf692694ULL)
139
140 EXPAND
141
142 F(w0 ,0xe49b69c19ef14ad2ULL)
143 F(w1 ,0xefbe4786384f25e3ULL)
144 F(w2 ,0x0fc19dc68b8cd5b5ULL)
145 F(w3 ,0x240ca1cc77ac9c65ULL)
146 F(w4 ,0x2de92c6f592b0275ULL)
147 F(w5 ,0x4a7484aa6ea6e483ULL)
148 F(w6 ,0x5cb0a9dcbd41fbd4ULL)
149 F(w7 ,0x76f988da831153b5ULL)
150 F(w8 ,0x983e5152ee66dfabULL)
151 F(w9 ,0xa831c66d2db43210ULL)
152 F(w10,0xb00327c898fb213fULL)
153 F(w11,0xbf597fc7beef0ee4ULL)
154 F(w12,0xc6e00bf33da88fc2ULL)
155 F(w13,0xd5a79147930aa725ULL)
156 F(w14,0x06ca6351e003826fULL)
157 F(w15,0x142929670a0e6e70ULL)
158
159 EXPAND
160
161 F(w0 ,0x27b70a8546d22ffcULL)
162 F(w1 ,0x2e1b21385c26c926ULL)
163 F(w2 ,0x4d2c6dfc5ac42aedULL)
164 F(w3 ,0x53380d139d95b3dfULL)
165 F(w4 ,0x650a73548baf63deULL)
166 F(w5 ,0x766a0abb3c77b2a8ULL)
167 F(w6 ,0x81c2c92e47edaee6ULL)
168 F(w7 ,0x92722c851482353bULL)
169 F(w8 ,0xa2bfe8a14cf10364ULL)
170 F(w9 ,0xa81a664bbc423001ULL)
171 F(w10,0xc24b8b70d0f89791ULL)
172 F(w11,0xc76c51a30654be30ULL)
173 F(w12,0xd192e819d6ef5218ULL)
174 F(w13,0xd69906245565a910ULL)
175 F(w14,0xf40e35855771202aULL)
176 F(w15,0x106aa07032bbd1b8ULL)
177
178 EXPAND
179
180 F(w0 ,0x19a4c116b8d2d0c8ULL)
181 F(w1 ,0x1e376c085141ab53ULL)
182 F(w2 ,0x2748774cdf8eeb99ULL)
183 F(w3 ,0x34b0bcb5e19b48a8ULL)
184 F(w4 ,0x391c0cb3c5c95a63ULL)
185 F(w5 ,0x4ed8aa4ae3418acbULL)
186 F(w6 ,0x5b9cca4f7763e373ULL)
187 F(w7 ,0x682e6ff3d6b2b8a3ULL)
188 F(w8 ,0x748f82ee5defb2fcULL)
189 F(w9 ,0x78a5636f43172f60ULL)
190 F(w10,0x84c87814a1f0ab72ULL)
191 F(w11,0x8cc702081a6439ecULL)
192 F(w12,0x90befffa23631e28ULL)
193 F(w13,0xa4506cebde82bde9ULL)
194 F(w14,0xbef9a3f7b2c67915ULL)
195 F(w15,0xc67178f2e372532bULL)
196
197 EXPAND
198
199 F(w0 ,0xca273eceea26619cULL)
200 F(w1 ,0xd186b8c721c0c207ULL)
201 F(w2 ,0xeada7dd6cde0eb1eULL)
202 F(w3 ,0xf57d4f7fee6ed178ULL)
203 F(w4 ,0x06f067aa72176fbaULL)
204 F(w5 ,0x0a637dc5a2c898a6ULL)
205 F(w6 ,0x113f9804bef90daeULL)
206 F(w7 ,0x1b710b35131c471bULL)
207 F(w8 ,0x28db77f523047d84ULL)
208 F(w9 ,0x32caab7b40c72493ULL)
209 F(w10,0x3c9ebe0a15c9bebcULL)
210 F(w11,0x431d67c49c100d4cULL)
211 F(w12,0x4cc5d4becb3e42b6ULL)
212 F(w13,0x597f299cfc657e2aULL)
213 F(w14,0x5fcb6fab3ad6faecULL)
214 F(w15,0x6c44198c4a475817ULL)
215
216 a += state[0];
217 b += state[1];
218 c += state[2];
219 d += state[3];
220 e += state[4];
221 f += state[5];
222 g += state[6];
223 h += state[7];
224
225 state[0] = a;
226 state[1] = b;
227 state[2] = c;
228 state[3] = d;
229 state[4] = e;
230 state[5] = f;
231 state[6] = g;
232 state[7] = h;
233
234 in += 128;
235 inlen -= 128;
236 }
237
238 store_bigendian(statebytes + 0,state[0]);
239 store_bigendian(statebytes + 8,state[1]);
240 store_bigendian(statebytes + 16,state[2]);
241 store_bigendian(statebytes + 24,state[3]);
242 store_bigendian(statebytes + 32,state[4]);
243 store_bigendian(statebytes + 40,state[5]);
244 store_bigendian(statebytes + 48,state[6]);
245 store_bigendian(statebytes + 56,state[7]);
246
247 return inlen;
248}
diff --git a/channels.c b/channels.c
index 83442be06..bdee1f386 100644
--- a/channels.c
+++ b/channels.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: channels.c,v 1.375 2017/09/24 13:45:34 djm Exp $ */ 1/* $OpenBSD: channels.c,v 1.379 2018/02/05 05:36:49 tb Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -436,10 +436,15 @@ channel_close_fd(struct ssh *ssh, int *fdp)
436static void 436static void
437channel_close_fds(struct ssh *ssh, Channel *c) 437channel_close_fds(struct ssh *ssh, Channel *c)
438{ 438{
439 int sock = c->sock, rfd = c->rfd, wfd = c->wfd, efd = c->efd;
440
439 channel_close_fd(ssh, &c->sock); 441 channel_close_fd(ssh, &c->sock);
440 channel_close_fd(ssh, &c->rfd); 442 if (rfd != sock)
441 channel_close_fd(ssh, &c->wfd); 443 channel_close_fd(ssh, &c->rfd);
442 channel_close_fd(ssh, &c->efd); 444 if (wfd != sock && wfd != rfd)
445 channel_close_fd(ssh, &c->wfd);
446 if (efd != sock && efd != rfd && efd != wfd)
447 channel_close_fd(ssh, &c->efd);
443} 448}
444 449
445static void 450static void
@@ -1582,13 +1587,8 @@ channel_post_x11_listener(struct ssh *ssh, Channel *c,
1582 SSH_CHANNEL_OPENING, newsock, newsock, -1, 1587 SSH_CHANNEL_OPENING, newsock, newsock, -1,
1583 c->local_window_max, c->local_maxpacket, 0, buf, 1); 1588 c->local_window_max, c->local_maxpacket, 0, buf, 1);
1584 open_preamble(ssh, __func__, nc, "x11"); 1589 open_preamble(ssh, __func__, nc, "x11");
1585 if ((r = sshpkt_put_cstring(ssh, remote_ipaddr)) != 0) { 1590 if ((r = sshpkt_put_cstring(ssh, remote_ipaddr)) != 0 ||
1586 fatal("%s: channel %i: reply %s", __func__, 1591 (r = sshpkt_put_u32(ssh, remote_port)) != 0) {
1587 c->self, ssh_err(r));
1588 }
1589 if ((datafellows & SSH_BUG_X11FWD) != 0)
1590 debug2("channel %d: ssh2 x11 bug compat mode", nc->self);
1591 else if ((r = sshpkt_put_u32(ssh, remote_port)) != 0) {
1592 fatal("%s: channel %i: reply %s", __func__, 1592 fatal("%s: channel %i: reply %s", __func__,
1593 c->self, ssh_err(r)); 1593 c->self, ssh_err(r));
1594 } 1594 }
@@ -1668,19 +1668,6 @@ port_open_helper(struct ssh *ssh, Channel *c, char *rtype)
1668 free(local_ipaddr); 1668 free(local_ipaddr);
1669} 1669}
1670 1670
1671static void
1672channel_set_reuseaddr(int fd)
1673{
1674 int on = 1;
1675
1676 /*
1677 * Set socket options.
1678 * Allow local port reuse in TIME_WAIT.
1679 */
1680 if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1)
1681 error("setsockopt SO_REUSEADDR fd %d: %s", fd, strerror(errno));
1682}
1683
1684void 1671void
1685channel_set_x11_refuse_time(struct ssh *ssh, u_int refuse_time) 1672channel_set_x11_refuse_time(struct ssh *ssh, u_int refuse_time)
1686{ 1673{
@@ -1837,15 +1824,13 @@ channel_post_connecting(struct ssh *ssh, Channel *c,
1837 if ((r = sshpkt_start(ssh, 1824 if ((r = sshpkt_start(ssh,
1838 SSH2_MSG_CHANNEL_OPEN_FAILURE)) != 0 || 1825 SSH2_MSG_CHANNEL_OPEN_FAILURE)) != 0 ||
1839 (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || 1826 (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 ||
1840 (r = sshpkt_put_u32(ssh, SSH2_OPEN_CONNECT_FAILED)) 1827 (r = sshpkt_put_u32(ssh,
1841 != 0) 1828 SSH2_OPEN_CONNECT_FAILED)) != 0 ||
1842 fatal("%s: channel %i: failure: %s", __func__, 1829 (r = sshpkt_put_cstring(ssh, strerror(err))) != 0 ||
1843 c->self, ssh_err(r)); 1830 (r = sshpkt_put_cstring(ssh, "")) != 0) {
1844 if ((datafellows & SSH_BUG_OPENFAILURE) == 0 &&
1845 ((r = sshpkt_put_cstring(ssh, strerror(err))) != 0 ||
1846 (r = sshpkt_put_cstring(ssh, "")) != 0))
1847 fatal("%s: channel %i: failure: %s", __func__, 1831 fatal("%s: channel %i: failure: %s", __func__,
1848 c->self, ssh_err(r)); 1832 c->self, ssh_err(r));
1833 }
1849 if ((r = sshpkt_send(ssh)) != 0) 1834 if ((r = sshpkt_send(ssh)) != 0)
1850 fatal("%s: channel %i: %s", __func__, c->self, 1835 fatal("%s: channel %i: %s", __func__, c->self,
1851 ssh_err(r)); 1836 ssh_err(r));
@@ -3123,13 +3108,11 @@ channel_input_open_failure(int type, u_int32_t seq, struct ssh *ssh)
3123 error("%s: reason: %s", __func__, ssh_err(r)); 3108 error("%s: reason: %s", __func__, ssh_err(r));
3124 packet_disconnect("Invalid open failure message"); 3109 packet_disconnect("Invalid open failure message");
3125 } 3110 }
3126 if ((datafellows & SSH_BUG_OPENFAILURE) == 0) { 3111 /* skip language */
3127 /* skip language */ 3112 if ((r = sshpkt_get_cstring(ssh, &msg, NULL)) != 0 ||
3128 if ((r = sshpkt_get_cstring(ssh, &msg, NULL)) != 0 || 3113 (r = sshpkt_get_string_direct(ssh, NULL, NULL)) != 0) {
3129 (r = sshpkt_get_string_direct(ssh, NULL, NULL)) != 0) { 3114 error("%s: message/lang: %s", __func__, ssh_err(r));
3130 error("%s: message/lang: %s", __func__, ssh_err(r)); 3115 packet_disconnect("Invalid open failure message");
3131 packet_disconnect("Invalid open failure message");
3132 }
3133 } 3116 }
3134 ssh_packet_check_eom(ssh); 3117 ssh_packet_check_eom(ssh);
3135 logit("channel %d: open failed: %s%s%s", c->self, 3118 logit("channel %d: open failed: %s%s%s", c->self,
@@ -3364,11 +3347,12 @@ channel_setup_fwd_listener_tcpip(struct ssh *ssh, int type,
3364 sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); 3347 sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
3365 if (sock < 0) { 3348 if (sock < 0) {
3366 /* this is no error since kernel may not support ipv6 */ 3349 /* this is no error since kernel may not support ipv6 */
3367 verbose("socket: %.100s", strerror(errno)); 3350 verbose("socket [%s]:%s: %.100s", ntop, strport,
3351 strerror(errno));
3368 continue; 3352 continue;
3369 } 3353 }
3370 3354
3371 channel_set_reuseaddr(sock); 3355 set_reuseaddr(sock);
3372 if (ai->ai_family == AF_INET6) 3356 if (ai->ai_family == AF_INET6)
3373 sock_set_v6only(sock); 3357 sock_set_v6only(sock);
3374 3358
@@ -3382,9 +3366,11 @@ channel_setup_fwd_listener_tcpip(struct ssh *ssh, int type,
3382 * already bound 3366 * already bound
3383 */ 3367 */
3384 if (!ai->ai_next) 3368 if (!ai->ai_next)
3385 error("bind: %.100s", strerror(errno)); 3369 error("bind [%s]:%s: %.100s",
3370 ntop, strport, strerror(errno));
3386 else 3371 else
3387 verbose("bind: %.100s", strerror(errno)); 3372 verbose("bind [%s]:%s: %.100s",
3373 ntop, strport, strerror(errno));
3388 3374
3389 close(sock); 3375 close(sock);
3390 continue; 3376 continue;
@@ -3392,6 +3378,8 @@ channel_setup_fwd_listener_tcpip(struct ssh *ssh, int type,
3392 /* Start listening for connections on the socket. */ 3378 /* Start listening for connections on the socket. */
3393 if (listen(sock, SSH_LISTEN_BACKLOG) < 0) { 3379 if (listen(sock, SSH_LISTEN_BACKLOG) < 0) {
3394 error("listen: %.100s", strerror(errno)); 3380 error("listen: %.100s", strerror(errno));
3381 error("listen [%s]:%s: %.100s", ntop, strport,
3382 strerror(errno));
3395 close(sock); 3383 close(sock);
3396 continue; 3384 continue;
3397 } 3385 }
@@ -3672,15 +3660,9 @@ static const char *
3672channel_rfwd_bind_host(const char *listen_host) 3660channel_rfwd_bind_host(const char *listen_host)
3673{ 3661{
3674 if (listen_host == NULL) { 3662 if (listen_host == NULL) {
3675 if (datafellows & SSH_BUG_RFWD_ADDR) 3663 return "localhost";
3676 return "127.0.0.1";
3677 else
3678 return "localhost";
3679 } else if (*listen_host == '\0' || strcmp(listen_host, "*") == 0) { 3664 } else if (*listen_host == '\0' || strcmp(listen_host, "*") == 0) {
3680 if (datafellows & SSH_BUG_RFWD_ADDR) 3665 return "";
3681 return "0.0.0.0";
3682 else
3683 return "";
3684 } else 3666 } else
3685 return listen_host; 3667 return listen_host;
3686} 3668}
@@ -4439,7 +4421,7 @@ x11_create_display_inet(struct ssh *ssh, int x11_display_offset,
4439 if (ai->ai_family == AF_INET6) 4421 if (ai->ai_family == AF_INET6)
4440 sock_set_v6only(sock); 4422 sock_set_v6only(sock);
4441 if (x11_use_localhost) 4423 if (x11_use_localhost)
4442 channel_set_reuseaddr(sock); 4424 set_reuseaddr(sock);
4443 if (bind(sock, ai->ai_addr, ai->ai_addrlen) < 0) { 4425 if (bind(sock, ai->ai_addr, ai->ai_addrlen) < 0) {
4444 debug2("%s: bind port %d: %.100s", __func__, 4426 debug2("%s: bind port %d: %.100s", __func__,
4445 port, strerror(errno)); 4427 port, strerror(errno));
diff --git a/cipher.c b/cipher.c
index c3cd5dcf4..578763616 100644
--- a/cipher.c
+++ b/cipher.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: cipher.c,v 1.107 2017/05/07 23:12:57 djm Exp $ */ 1/* $OpenBSD: cipher.c,v 1.111 2018/02/23 15:58:37 markus Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -310,8 +310,7 @@ cipher_init(struct sshcipher_ctx **ccp, const struct sshcipher *cipher,
310 } else { 310 } else {
311 if (cc != NULL) { 311 if (cc != NULL) {
312#ifdef WITH_OPENSSL 312#ifdef WITH_OPENSSL
313 if (cc->evp != NULL) 313 EVP_CIPHER_CTX_free(cc->evp);
314 EVP_CIPHER_CTX_free(cc->evp);
315#endif /* WITH_OPENSSL */ 314#endif /* WITH_OPENSSL */
316 explicit_bzero(cc, sizeof(*cc)); 315 explicit_bzero(cc, sizeof(*cc));
317 free(cc); 316 free(cc);
@@ -402,7 +401,7 @@ cipher_get_length(struct sshcipher_ctx *cc, u_int *plenp, u_int seqnr,
402 cp, len); 401 cp, len);
403 if (len < 4) 402 if (len < 4)
404 return SSH_ERR_MESSAGE_INCOMPLETE; 403 return SSH_ERR_MESSAGE_INCOMPLETE;
405 *plenp = get_u32(cp); 404 *plenp = PEEK_U32(cp);
406 return 0; 405 return 0;
407} 406}
408 407
@@ -416,10 +415,8 @@ cipher_free(struct sshcipher_ctx *cc)
416 else if ((cc->cipher->flags & CFLAG_AESCTR) != 0) 415 else if ((cc->cipher->flags & CFLAG_AESCTR) != 0)
417 explicit_bzero(&cc->ac_ctx, sizeof(cc->ac_ctx)); 416 explicit_bzero(&cc->ac_ctx, sizeof(cc->ac_ctx));
418#ifdef WITH_OPENSSL 417#ifdef WITH_OPENSSL
419 if (cc->evp != NULL) { 418 EVP_CIPHER_CTX_free(cc->evp);
420 EVP_CIPHER_CTX_free(cc->evp); 419 cc->evp = NULL;
421 cc->evp = NULL;
422 }
423#endif 420#endif
424 explicit_bzero(cc, sizeof(*cc)); 421 explicit_bzero(cc, sizeof(*cc));
425 free(cc); 422 free(cc);
@@ -449,9 +446,9 @@ cipher_get_keyiv_len(const struct sshcipher_ctx *cc)
449int 446int
450cipher_get_keyiv(struct sshcipher_ctx *cc, u_char *iv, u_int len) 447cipher_get_keyiv(struct sshcipher_ctx *cc, u_char *iv, u_int len)
451{ 448{
452 const struct sshcipher *c = cc->cipher;
453#ifdef WITH_OPENSSL 449#ifdef WITH_OPENSSL
454 int evplen; 450 const struct sshcipher *c = cc->cipher;
451 int evplen;
455#endif 452#endif
456 453
457 if ((cc->cipher->flags & CFLAG_CHACHAPOLY) != 0) { 454 if ((cc->cipher->flags & CFLAG_CHACHAPOLY) != 0) {
@@ -494,9 +491,9 @@ cipher_get_keyiv(struct sshcipher_ctx *cc, u_char *iv, u_int len)
494int 491int
495cipher_set_keyiv(struct sshcipher_ctx *cc, const u_char *iv) 492cipher_set_keyiv(struct sshcipher_ctx *cc, const u_char *iv)
496{ 493{
497 const struct sshcipher *c = cc->cipher;
498#ifdef WITH_OPENSSL 494#ifdef WITH_OPENSSL
499 int evplen = 0; 495 const struct sshcipher *c = cc->cipher;
496 int evplen = 0;
500#endif 497#endif
501 498
502 if ((cc->cipher->flags & CFLAG_CHACHAPOLY) != 0) 499 if ((cc->cipher->flags & CFLAG_CHACHAPOLY) != 0)
diff --git a/clientloop.c b/clientloop.c
index 0010b8337..ef803e985 100644
--- a/clientloop.c
+++ b/clientloop.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: clientloop.c,v 1.305 2017/09/19 04:24:22 djm Exp $ */ 1/* $OpenBSD: clientloop.c,v 1.311 2018/02/11 21:16:56 dtucker Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -214,7 +214,6 @@ static void
214window_change_handler(int sig) 214window_change_handler(int sig)
215{ 215{
216 received_window_change_signal = 1; 216 received_window_change_signal = 1;
217 signal(SIGWINCH, window_change_handler);
218} 217}
219 218
220/* 219/*
@@ -230,19 +229,6 @@ signal_handler(int sig)
230} 229}
231 230
232/* 231/*
233 * Returns current time in seconds from Jan 1, 1970 with the maximum
234 * available resolution.
235 */
236
237static double
238get_current_time(void)
239{
240 struct timeval tv;
241 gettimeofday(&tv, NULL);
242 return (double) tv.tv_sec + (double) tv.tv_usec / 1000000.0;
243}
244
245/*
246 * Sets control_persist_exit_time to the absolute time when the 232 * Sets control_persist_exit_time to the absolute time when the
247 * backgrounded control master should exit due to expiry of the 233 * backgrounded control master should exit due to expiry of the
248 * ControlPersist timeout. Sets it to 0 if we are not a backgrounded 234 * ControlPersist timeout. Sets it to 0 if we are not a backgrounded
@@ -1260,7 +1246,7 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg,
1260 fatal("%s pledge(): %s", __func__, strerror(errno)); 1246 fatal("%s pledge(): %s", __func__, strerror(errno));
1261 } 1247 }
1262 1248
1263 start_time = get_current_time(); 1249 start_time = monotime_double();
1264 1250
1265 /* Initialize variables. */ 1251 /* Initialize variables. */
1266 last_was_cr = 1; 1252 last_was_cr = 1;
@@ -1458,7 +1444,7 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg,
1458 buffer_free(&stderr_buffer); 1444 buffer_free(&stderr_buffer);
1459 1445
1460 /* Report bytes transferred, and transfer rates. */ 1446 /* Report bytes transferred, and transfer rates. */
1461 total_time = get_current_time() - start_time; 1447 total_time = monotime_double() - start_time;
1462 packet_get_bytes(&ibytes, &obytes); 1448 packet_get_bytes(&ibytes, &obytes);
1463 verbose("Transferred: sent %llu, received %llu bytes, in %.1f seconds", 1449 verbose("Transferred: sent %llu, received %llu bytes, in %.1f seconds",
1464 (unsigned long long)obytes, (unsigned long long)ibytes, total_time); 1450 (unsigned long long)obytes, (unsigned long long)ibytes, total_time);
@@ -1567,12 +1553,7 @@ client_request_x11(struct ssh *ssh, const char *request_type, int rchan)
1567 return NULL; 1553 return NULL;
1568 } 1554 }
1569 originator = packet_get_string(NULL); 1555 originator = packet_get_string(NULL);
1570 if (datafellows & SSH_BUG_X11FWD) { 1556 originator_port = packet_get_int();
1571 debug2("buggy server: x11 request w/o originator_port");
1572 originator_port = 0;
1573 } else {
1574 originator_port = packet_get_int();
1575 }
1576 packet_check_eom(); 1557 packet_check_eom();
1577 /* XXX check permission */ 1558 /* XXX check permission */
1578 debug("client_request_x11: request from %s %d", originator, 1559 debug("client_request_x11: request from %s %d", originator,
@@ -1614,12 +1595,13 @@ client_request_agent(struct ssh *ssh, const char *request_type, int rchan)
1614 return c; 1595 return c;
1615} 1596}
1616 1597
1617int 1598char *
1618client_request_tun_fwd(struct ssh *ssh, int tun_mode, 1599client_request_tun_fwd(struct ssh *ssh, int tun_mode,
1619 int local_tun, int remote_tun) 1600 int local_tun, int remote_tun)
1620{ 1601{
1621 Channel *c; 1602 Channel *c;
1622 int fd; 1603 int fd;
1604 char *ifname = NULL;
1623 1605
1624 if (tun_mode == SSH_TUNMODE_NO) 1606 if (tun_mode == SSH_TUNMODE_NO)
1625 return 0; 1607 return 0;
@@ -1627,10 +1609,11 @@ client_request_tun_fwd(struct ssh *ssh, int tun_mode,
1627 debug("Requesting tun unit %d in mode %d", local_tun, tun_mode); 1609 debug("Requesting tun unit %d in mode %d", local_tun, tun_mode);
1628 1610
1629 /* Open local tunnel device */ 1611 /* Open local tunnel device */
1630 if ((fd = tun_open(local_tun, tun_mode)) == -1) { 1612 if ((fd = tun_open(local_tun, tun_mode, &ifname)) == -1) {
1631 error("Tunnel device open failed."); 1613 error("Tunnel device open failed.");
1632 return -1; 1614 return NULL;
1633 } 1615 }
1616 debug("Tunnel forwarding using interface %s", ifname);
1634 1617
1635 c = channel_new(ssh, "tun", SSH_CHANNEL_OPENING, fd, fd, -1, 1618 c = channel_new(ssh, "tun", SSH_CHANNEL_OPENING, fd, fd, -1,
1636 CHAN_TCP_WINDOW_DEFAULT, CHAN_TCP_PACKET_DEFAULT, 0, "tun", 1); 1619 CHAN_TCP_WINDOW_DEFAULT, CHAN_TCP_PACKET_DEFAULT, 0, "tun", 1);
@@ -1651,7 +1634,7 @@ client_request_tun_fwd(struct ssh *ssh, int tun_mode,
1651 packet_put_int(remote_tun); 1634 packet_put_int(remote_tun);
1652 packet_send(); 1635 packet_send();
1653 1636
1654 return 0; 1637 return ifname;
1655} 1638}
1656 1639
1657/* XXXX move to generic input handler */ 1640/* XXXX move to generic input handler */
@@ -1702,10 +1685,8 @@ client_input_channel_open(int type, u_int32_t seq, struct ssh *ssh)
1702 packet_start(SSH2_MSG_CHANNEL_OPEN_FAILURE); 1685 packet_start(SSH2_MSG_CHANNEL_OPEN_FAILURE);
1703 packet_put_int(rchan); 1686 packet_put_int(rchan);
1704 packet_put_int(SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED); 1687 packet_put_int(SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED);
1705 if (!(datafellows & SSH_BUG_OPENFAILURE)) { 1688 packet_put_cstring("open failed");
1706 packet_put_cstring("open failed"); 1689 packet_put_cstring("");
1707 packet_put_cstring("");
1708 }
1709 packet_send(); 1690 packet_send();
1710 } 1691 }
1711 free(ctype); 1692 free(ctype);
@@ -1917,7 +1898,7 @@ client_global_hostkeys_private_confirm(struct ssh *ssh, int type,
1917 struct hostkeys_update_ctx *ctx = (struct hostkeys_update_ctx *)_ctx; 1898 struct hostkeys_update_ctx *ctx = (struct hostkeys_update_ctx *)_ctx;
1918 size_t i, ndone; 1899 size_t i, ndone;
1919 struct sshbuf *signdata; 1900 struct sshbuf *signdata;
1920 int r; 1901 int r, kexsigtype, use_kexsigtype;
1921 const u_char *sig; 1902 const u_char *sig;
1922 size_t siglen; 1903 size_t siglen;
1923 1904
@@ -1929,6 +1910,9 @@ client_global_hostkeys_private_confirm(struct ssh *ssh, int type,
1929 hostkeys_update_ctx_free(ctx); 1910 hostkeys_update_ctx_free(ctx);
1930 return; 1911 return;
1931 } 1912 }
1913 kexsigtype = sshkey_type_plain(
1914 sshkey_type_from_name(ssh->kex->hostkey_alg));
1915
1932 if ((signdata = sshbuf_new()) == NULL) 1916 if ((signdata = sshbuf_new()) == NULL)
1933 fatal("%s: sshbuf_new failed", __func__); 1917 fatal("%s: sshbuf_new failed", __func__);
1934 /* Don't want to accidentally accept an unbound signature */ 1918 /* Don't want to accidentally accept an unbound signature */
@@ -1957,8 +1941,15 @@ client_global_hostkeys_private_confirm(struct ssh *ssh, int type,
1957 __func__, ssh_err(r)); 1941 __func__, ssh_err(r));
1958 goto out; 1942 goto out;
1959 } 1943 }
1944 /*
1945 * For RSA keys, prefer to use the signature type negotiated
1946 * during KEX to the default (SHA1).
1947 */
1948 use_kexsigtype = kexsigtype == KEY_RSA &&
1949 sshkey_type_plain(ctx->keys[i]->type) == KEY_RSA;
1960 if ((r = sshkey_verify(ctx->keys[i], sig, siglen, 1950 if ((r = sshkey_verify(ctx->keys[i], sig, siglen,
1961 sshbuf_ptr(signdata), sshbuf_len(signdata), 0)) != 0) { 1951 sshbuf_ptr(signdata), sshbuf_len(signdata),
1952 use_kexsigtype ? ssh->kex->hostkey_alg : NULL, 0)) != 0) {
1962 error("%s: server gave bad signature for %s key %zu", 1953 error("%s: server gave bad signature for %s key %zu",
1963 __func__, sshkey_type(ctx->keys[i]), i); 1954 __func__, sshkey_type(ctx->keys[i]), i);
1964 goto out; 1955 goto out;
diff --git a/clientloop.h b/clientloop.h
index a1975ccc8..8d1f0bff6 100644
--- a/clientloop.h
+++ b/clientloop.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: clientloop.h,v 1.34 2017/09/12 06:32:07 djm Exp $ */ 1/* $OpenBSD: clientloop.h,v 1.35 2017/10/23 05:08:00 djm Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -46,7 +46,7 @@ int client_x11_get_proto(struct ssh *, const char *, const char *,
46void client_global_request_reply_fwd(int, u_int32_t, void *); 46void client_global_request_reply_fwd(int, u_int32_t, void *);
47void client_session2_setup(struct ssh *, int, int, int, 47void client_session2_setup(struct ssh *, int, int, int,
48 const char *, struct termios *, int, Buffer *, char **); 48 const char *, struct termios *, int, Buffer *, char **);
49int client_request_tun_fwd(struct ssh *, int, int, int); 49char *client_request_tun_fwd(struct ssh *, int, int, int);
50void client_stop_mux(void); 50void client_stop_mux(void);
51 51
52/* Escape filter for protocol 2 sessions */ 52/* Escape filter for protocol 2 sessions */
diff --git a/compat.c b/compat.c
index d82135e2b..861e9e21f 100644
--- a/compat.c
+++ b/compat.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: compat.c,v 1.104 2017/07/25 09:22:25 dtucker Exp $ */ 1/* $OpenBSD: compat.c,v 1.106 2018/02/16 04:43:11 dtucker Exp $ */
2/* 2/*
3 * Copyright (c) 1999, 2000, 2001, 2002 Markus Friedl. All rights reserved. 3 * Copyright (c) 1999, 2000, 2001, 2002 Markus Friedl. All rights reserved.
4 * 4 *
@@ -50,83 +50,20 @@ compat_datafellows(const char *version)
50 char *pat; 50 char *pat;
51 int bugs; 51 int bugs;
52 } check[] = { 52 } check[] = {
53 { "OpenSSH-2.0*,"
54 "OpenSSH-2.1*,"
55 "OpenSSH_2.1*,"
56 "OpenSSH_2.2*", SSH_OLD_SESSIONID|SSH_BUG_BANNER|
57 SSH_OLD_DHGEX|SSH_BUG_NOREKEY|
58 SSH_BUG_EXTEOF|SSH_OLD_FORWARD_ADDR},
59 { "OpenSSH_2.3.0*", SSH_BUG_BANNER|SSH_BUG_BIGENDIANAES|
60 SSH_OLD_DHGEX|SSH_BUG_NOREKEY|
61 SSH_BUG_EXTEOF|SSH_OLD_FORWARD_ADDR},
62 { "OpenSSH_2.3.*", SSH_BUG_BIGENDIANAES|SSH_OLD_DHGEX|
63 SSH_BUG_NOREKEY|SSH_BUG_EXTEOF|
64 SSH_OLD_FORWARD_ADDR},
65 { "OpenSSH_2.5.0p1*,"
66 "OpenSSH_2.5.1p1*",
67 SSH_BUG_BIGENDIANAES|SSH_OLD_DHGEX|
68 SSH_BUG_NOREKEY|SSH_BUG_EXTEOF|
69 SSH_OLD_FORWARD_ADDR},
70 { "OpenSSH_2.5.0*,"
71 "OpenSSH_2.5.1*,"
72 "OpenSSH_2.5.2*", SSH_OLD_DHGEX|SSH_BUG_NOREKEY|
73 SSH_BUG_EXTEOF|SSH_OLD_FORWARD_ADDR},
74 { "OpenSSH_2.5.3*", SSH_BUG_NOREKEY|SSH_BUG_EXTEOF|
75 SSH_OLD_FORWARD_ADDR},
76 { "OpenSSH_2.*," 53 { "OpenSSH_2.*,"
77 "OpenSSH_3.0*," 54 "OpenSSH_3.0*,"
78 "OpenSSH_3.1*", SSH_BUG_EXTEOF|SSH_OLD_FORWARD_ADDR}, 55 "OpenSSH_3.1*", SSH_BUG_EXTEOF|SSH_OLD_FORWARD_ADDR},
79 { "OpenSSH_3.*", SSH_OLD_FORWARD_ADDR }, 56 { "OpenSSH_3.*", SSH_OLD_FORWARD_ADDR },
80 { "Sun_SSH_1.0*", SSH_BUG_NOREKEY|SSH_BUG_EXTEOF}, 57 { "Sun_SSH_1.0*", SSH_BUG_NOREKEY|SSH_BUG_EXTEOF},
81 { "OpenSSH_4*", 0 }, 58 { "OpenSSH_2*,"
59 "OpenSSH_3*,"
60 "OpenSSH_4*", 0 },
82 { "OpenSSH_5*", SSH_NEW_OPENSSH|SSH_BUG_DYNAMIC_RPORT}, 61 { "OpenSSH_5*", SSH_NEW_OPENSSH|SSH_BUG_DYNAMIC_RPORT},
83 { "OpenSSH_6.6.1*", SSH_NEW_OPENSSH}, 62 { "OpenSSH_6.6.1*", SSH_NEW_OPENSSH},
84 { "OpenSSH_6.5*," 63 { "OpenSSH_6.5*,"
85 "OpenSSH_6.6*", SSH_NEW_OPENSSH|SSH_BUG_CURVE25519PAD}, 64 "OpenSSH_6.6*", SSH_NEW_OPENSSH|SSH_BUG_CURVE25519PAD},
86 { "OpenSSH*", SSH_NEW_OPENSSH }, 65 { "OpenSSH*", SSH_NEW_OPENSSH },
87 { "*MindTerm*", 0 }, 66 { "*MindTerm*", 0 },
88 { "2.1.0*", SSH_BUG_SIGBLOB|SSH_BUG_HMAC|
89 SSH_OLD_SESSIONID|SSH_BUG_DEBUG|
90 SSH_BUG_RSASIGMD5|SSH_BUG_HBSERVICE|
91 SSH_BUG_FIRSTKEX },
92 { "2.1 *", SSH_BUG_SIGBLOB|SSH_BUG_HMAC|
93 SSH_OLD_SESSIONID|SSH_BUG_DEBUG|
94 SSH_BUG_RSASIGMD5|SSH_BUG_HBSERVICE|
95 SSH_BUG_FIRSTKEX },
96 { "2.0.13*,"
97 "2.0.14*,"
98 "2.0.15*,"
99 "2.0.16*,"
100 "2.0.17*,"
101 "2.0.18*,"
102 "2.0.19*", SSH_BUG_SIGBLOB|SSH_BUG_HMAC|
103 SSH_OLD_SESSIONID|SSH_BUG_DEBUG|
104 SSH_BUG_PKSERVICE|SSH_BUG_X11FWD|
105 SSH_BUG_PKOK|SSH_BUG_RSASIGMD5|
106 SSH_BUG_HBSERVICE|SSH_BUG_OPENFAILURE|
107 SSH_BUG_DUMMYCHAN|SSH_BUG_FIRSTKEX },
108 { "2.0.11*,"
109 "2.0.12*", SSH_BUG_SIGBLOB|SSH_BUG_HMAC|
110 SSH_OLD_SESSIONID|SSH_BUG_DEBUG|
111 SSH_BUG_PKSERVICE|SSH_BUG_X11FWD|
112 SSH_BUG_PKAUTH|SSH_BUG_PKOK|
113 SSH_BUG_RSASIGMD5|SSH_BUG_OPENFAILURE|
114 SSH_BUG_DUMMYCHAN|SSH_BUG_FIRSTKEX },
115 { "2.0.*", SSH_BUG_SIGBLOB|SSH_BUG_HMAC|
116 SSH_OLD_SESSIONID|SSH_BUG_DEBUG|
117 SSH_BUG_PKSERVICE|SSH_BUG_X11FWD|
118 SSH_BUG_PKAUTH|SSH_BUG_PKOK|
119 SSH_BUG_RSASIGMD5|SSH_BUG_OPENFAILURE|
120 SSH_BUG_DERIVEKEY|SSH_BUG_DUMMYCHAN|
121 SSH_BUG_FIRSTKEX },
122 { "2.2.0*,"
123 "2.3.0*", SSH_BUG_HMAC|SSH_BUG_DEBUG|
124 SSH_BUG_RSASIGMD5|SSH_BUG_FIRSTKEX },
125 { "2.3.*", SSH_BUG_DEBUG|SSH_BUG_RSASIGMD5|
126 SSH_BUG_FIRSTKEX },
127 { "2.4", SSH_OLD_SESSIONID }, /* Van Dyke */
128 { "2.*", SSH_BUG_DEBUG|SSH_BUG_FIRSTKEX|
129 SSH_BUG_RFWD_ADDR },
130 { "3.0.*", SSH_BUG_DEBUG }, 67 { "3.0.*", SSH_BUG_DEBUG },
131 { "3.0 SecureCRT*", SSH_OLD_SESSIONID }, 68 { "3.0 SecureCRT*", SSH_OLD_SESSIONID },
132 { "1.7 SecureFX*", SSH_OLD_SESSIONID }, 69 { "1.7 SecureFX*", SSH_OLD_SESSIONID },
@@ -189,6 +126,8 @@ compat_datafellows(const char *version)
189 "WinSCP_release_5.7.3," 126 "WinSCP_release_5.7.3,"
190 "WinSCP_release_5.7.4", 127 "WinSCP_release_5.7.4",
191 SSH_OLD_DHGEX }, 128 SSH_OLD_DHGEX },
129 { "ConfD-*",
130 SSH_BUG_UTF8TTYMODE },
192 { NULL, 0 } 131 { NULL, 0 }
193 }; 132 };
194 133
diff --git a/compat.h b/compat.h
index 2e7830f1b..4fee3495a 100644
--- a/compat.h
+++ b/compat.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: compat.h,v 1.49 2017/04/30 23:13:25 djm Exp $ */ 1/* $OpenBSD: compat.h,v 1.51 2018/02/16 04:43:11 dtucker Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 1999, 2000, 2001 Markus Friedl. All rights reserved. 4 * Copyright (c) 1999, 2000, 2001 Markus Friedl. All rights reserved.
@@ -32,31 +32,31 @@
32#define SSH_PROTO_1_PREFERRED 0x02 32#define SSH_PROTO_1_PREFERRED 0x02
33#define SSH_PROTO_2 0x04 33#define SSH_PROTO_2 0x04
34 34
35#define SSH_BUG_SIGBLOB 0x00000001 35#define SSH_BUG_UTF8TTYMODE 0x00000001
36#define SSH_BUG_PKSERVICE 0x00000002 36/* #define unused 0x00000002 */
37#define SSH_BUG_HMAC 0x00000004 37/* #define unused 0x00000004 */
38#define SSH_BUG_X11FWD 0x00000008 38/* #define unused 0x00000008 */
39#define SSH_OLD_SESSIONID 0x00000010 39#define SSH_OLD_SESSIONID 0x00000010
40#define SSH_BUG_PKAUTH 0x00000020 40/* #define unused 0x00000020 */
41#define SSH_BUG_DEBUG 0x00000040 41#define SSH_BUG_DEBUG 0x00000040
42#define SSH_BUG_BANNER 0x00000080 42/* #define unused 0x00000080 */
43#define SSH_BUG_IGNOREMSG 0x00000100 43#define SSH_BUG_IGNOREMSG 0x00000100
44#define SSH_BUG_PKOK 0x00000200 44/* #define unused 0x00000200 */
45#define SSH_BUG_PASSWORDPAD 0x00000400 45#define SSH_BUG_PASSWORDPAD 0x00000400
46#define SSH_BUG_SCANNER 0x00000800 46#define SSH_BUG_SCANNER 0x00000800
47#define SSH_BUG_BIGENDIANAES 0x00001000 47#define SSH_BUG_BIGENDIANAES 0x00001000
48#define SSH_BUG_RSASIGMD5 0x00002000 48#define SSH_BUG_RSASIGMD5 0x00002000
49#define SSH_OLD_DHGEX 0x00004000 49#define SSH_OLD_DHGEX 0x00004000
50#define SSH_BUG_NOREKEY 0x00008000 50#define SSH_BUG_NOREKEY 0x00008000
51#define SSH_BUG_HBSERVICE 0x00010000 51/* #define unused 0x00010000 */
52#define SSH_BUG_OPENFAILURE 0x00020000 52/* #define unused 0x00020000 */
53#define SSH_BUG_DERIVEKEY 0x00040000 53/* #define unused 0x00040000 */
54#define SSH_BUG_DUMMYCHAN 0x00100000 54/* #define unused 0x00100000 */
55#define SSH_BUG_EXTEOF 0x00200000 55#define SSH_BUG_EXTEOF 0x00200000
56#define SSH_BUG_PROBE 0x00400000 56#define SSH_BUG_PROBE 0x00400000
57#define SSH_BUG_FIRSTKEX 0x00800000 57/* #define unused 0x00800000 */
58#define SSH_OLD_FORWARD_ADDR 0x01000000 58#define SSH_OLD_FORWARD_ADDR 0x01000000
59#define SSH_BUG_RFWD_ADDR 0x02000000 59/* #define unused 0x02000000 */
60#define SSH_NEW_OPENSSH 0x04000000 60#define SSH_NEW_OPENSSH 0x04000000
61#define SSH_BUG_DYNAMIC_RPORT 0x08000000 61#define SSH_BUG_DYNAMIC_RPORT 0x08000000
62#define SSH_BUG_CURVE25519PAD 0x10000000 62#define SSH_BUG_CURVE25519PAD 0x10000000
diff --git a/config.h.in b/config.h.in
index 0b244fd5f..4c9545c78 100644
--- a/config.h.in
+++ b/config.h.in
@@ -34,9 +34,6 @@
34/* Define if you system's inet_ntoa is busted (e.g. Irix gcc issue) */ 34/* Define if you system's inet_ntoa is busted (e.g. Irix gcc issue) */
35#undef BROKEN_INET_NTOA 35#undef BROKEN_INET_NTOA
36 36
37/* ia_uinfo routines not supported by OS yet */
38#undef BROKEN_LIBIAF
39
40/* Define if your struct dirent expects you to allocate extra space for d_name 37/* Define if your struct dirent expects you to allocate extra space for d_name
41 */ 38 */
42#undef BROKEN_ONE_BYTE_DIRENT_D_NAME 39#undef BROKEN_ONE_BYTE_DIRENT_D_NAME
@@ -75,6 +72,12 @@
75/* Define if your snprintf is busted */ 72/* Define if your snprintf is busted */
76#undef BROKEN_SNPRINTF 73#undef BROKEN_SNPRINTF
77 74
75/* strndup broken, see APAR IY61211 */
76#undef BROKEN_STRNDUP
77
78/* strnlen broken, see APAR IY62551 */
79#undef BROKEN_STRNLEN
80
78/* strnvis detected broken */ 81/* strnvis detected broken */
79#undef BROKEN_STRNVIS 82#undef BROKEN_STRNVIS
80 83
@@ -132,6 +135,9 @@
132/* Enable for PKCS#11 support */ 135/* Enable for PKCS#11 support */
133#undef ENABLE_PKCS11 136#undef ENABLE_PKCS11
134 137
138/* define if fflush(NULL) does not work */
139#undef FFLUSH_NULL_BUG
140
135/* File names may not contain backslash characters */ 141/* File names may not contain backslash characters */
136#undef FILESYSTEM_NO_BACKSLASH 142#undef FILESYSTEM_NO_BACKSLASH
137 143
@@ -141,7 +147,7 @@
141/* fsid_t has member __val */ 147/* fsid_t has member __val */
142#undef FSID_HAS___VAL 148#undef FSID_HAS___VAL
143 149
144/* Define to 1 if the `getpgrp' function requires zero arguments. */ 150/* getpgrp takes one arg */
145#undef GETPGRP_VOID 151#undef GETPGRP_VOID
146 152
147/* Conflicting defs for getspnam */ 153/* Conflicting defs for getspnam */
@@ -252,7 +258,10 @@
252/* Define to 1 if you have the <bstring.h> header file. */ 258/* Define to 1 if you have the <bstring.h> header file. */
253#undef HAVE_BSTRING_H 259#undef HAVE_BSTRING_H
254 260
255/* calloc(x, 0) returns NULL */ 261/* Define to 1 if you have the `bzero' function. */
262#undef HAVE_BZERO
263
264/* calloc(0, x) returns NULL */
256#undef HAVE_CALLOC 265#undef HAVE_CALLOC
257 266
258/* Define to 1 if you have the `cap_rights_limit' function. */ 267/* Define to 1 if you have the `cap_rights_limit' function. */
@@ -299,6 +308,10 @@
299 don't. */ 308 don't. */
300#undef HAVE_DECL_AUTHENTICATE 309#undef HAVE_DECL_AUTHENTICATE
301 310
311/* Define to 1 if you have the declaration of `bzero', and to 0 if you don't.
312 */
313#undef HAVE_DECL_BZERO
314
302/* Define to 1 if you have the declaration of `GLOB_NOMATCH', and to 0 if you 315/* Define to 1 if you have the declaration of `GLOB_NOMATCH', and to 0 if you
303 don't. */ 316 don't. */
304#undef HAVE_DECL_GLOB_NOMATCH 317#undef HAVE_DECL_GLOB_NOMATCH
@@ -347,6 +360,10 @@
347 don't. */ 360 don't. */
348#undef HAVE_DECL_PASSWDEXPIRED 361#undef HAVE_DECL_PASSWDEXPIRED
349 362
363/* Define to 1 if you have the declaration of `readv', and to 0 if you don't.
364 */
365#undef HAVE_DECL_READV
366
350/* Define to 1 if you have the declaration of `setauthdb', and to 0 if you 367/* Define to 1 if you have the declaration of `setauthdb', and to 0 if you
351 don't. */ 368 don't. */
352#undef HAVE_DECL_SETAUTHDB 369#undef HAVE_DECL_SETAUTHDB
@@ -466,6 +483,9 @@
466/* Define to 1 if you have the <floatingpoint.h> header file. */ 483/* Define to 1 if you have the <floatingpoint.h> header file. */
467#undef HAVE_FLOATINGPOINT_H 484#undef HAVE_FLOATINGPOINT_H
468 485
486/* Define to 1 if you have the `flock' function. */
487#undef HAVE_FLOCK
488
469/* Define to 1 if you have the `fmt_scaled' function. */ 489/* Define to 1 if you have the `fmt_scaled' function. */
470#undef HAVE_FMT_SCALED 490#undef HAVE_FMT_SCALED
471 491
@@ -553,12 +573,12 @@
553/* Define if getrrsetbyname() exists */ 573/* Define if getrrsetbyname() exists */
554#undef HAVE_GETRRSETBYNAME 574#undef HAVE_GETRRSETBYNAME
555 575
556/* Define to 1 if you have the `getrusage' function. */
557#undef HAVE_GETRUSAGE
558
559/* Define to 1 if you have the `getseuserbyname' function. */ 576/* Define to 1 if you have the `getseuserbyname' function. */
560#undef HAVE_GETSEUSERBYNAME 577#undef HAVE_GETSEUSERBYNAME
561 578
579/* Define to 1 if you have the `getsid' function. */
580#undef HAVE_GETSID
581
562/* Define to 1 if you have the `gettimeofday' function. */ 582/* Define to 1 if you have the `gettimeofday' function. */
563#undef HAVE_GETTIMEOFDAY 583#undef HAVE_GETTIMEOFDAY
564 584
@@ -640,6 +660,9 @@
640/* Define if you have ut_id in utmpx.h */ 660/* Define if you have ut_id in utmpx.h */
641#undef HAVE_ID_IN_UTMPX 661#undef HAVE_ID_IN_UTMPX
642 662
663/* Define to 1 if you have the <ifaddrs.h> header file. */
664#undef HAVE_IFADDRS_H
665
643/* Define to 1 if you have the `inet_aton' function. */ 666/* Define to 1 if you have the `inet_aton' function. */
644#undef HAVE_INET_ATON 667#undef HAVE_INET_ATON
645 668
@@ -821,6 +844,9 @@
821/* Define to 1 if you have the <net/if_tun.h> header file. */ 844/* Define to 1 if you have the <net/if_tun.h> header file. */
822#undef HAVE_NET_IF_TUN_H 845#undef HAVE_NET_IF_TUN_H
823 846
847/* Define to 1 if you have the <net/route.h> header file. */
848#undef HAVE_NET_ROUTE_H
849
824/* Define if you are on NeXT */ 850/* Define if you are on NeXT */
825#undef HAVE_NEXT 851#undef HAVE_NEXT
826 852
@@ -903,6 +929,9 @@
903/* Define to 1 if you have the `pututxline' function. */ 929/* Define to 1 if you have the `pututxline' function. */
904#undef HAVE_PUTUTXLINE 930#undef HAVE_PUTUTXLINE
905 931
932/* Define to 1 if you have the `raise' function. */
933#undef HAVE_RAISE
934
906/* Define to 1 if you have the `readpassphrase' function. */ 935/* Define to 1 if you have the `readpassphrase' function. */
907#undef HAVE_READPASSPHRASE 936#undef HAVE_READPASSPHRASE
908 937
@@ -1120,6 +1149,9 @@
1120/* Define to 1 if you have the `strmode' function. */ 1149/* Define to 1 if you have the `strmode' function. */
1121#undef HAVE_STRMODE 1150#undef HAVE_STRMODE
1122 1151
1152/* Define to 1 if you have the `strndup' function. */
1153#undef HAVE_STRNDUP
1154
1123/* Define to 1 if you have the `strnlen' function. */ 1155/* Define to 1 if you have the `strnlen' function. */
1124#undef HAVE_STRNLEN 1156#undef HAVE_STRNLEN
1125 1157
@@ -1174,6 +1206,9 @@
1174/* define if you have struct sockaddr_storage data type */ 1206/* define if you have struct sockaddr_storage data type */
1175#undef HAVE_STRUCT_SOCKADDR_STORAGE 1207#undef HAVE_STRUCT_SOCKADDR_STORAGE
1176 1208
1209/* Define to 1 if `f_flags' is a member of `struct statfs'. */
1210#undef HAVE_STRUCT_STATFS_F_FLAGS
1211
1177/* Define to 1 if `st_blksize' is a member of `struct stat'. */ 1212/* Define to 1 if `st_blksize' is a member of `struct stat'. */
1178#undef HAVE_STRUCT_STAT_ST_BLKSIZE 1213#undef HAVE_STRUCT_STAT_ST_BLKSIZE
1179 1214
@@ -1219,6 +1254,12 @@
1219/* Define if your system defines sys_errlist[] */ 1254/* Define if your system defines sys_errlist[] */
1220#undef HAVE_SYS_ERRLIST 1255#undef HAVE_SYS_ERRLIST
1221 1256
1257/* Define to 1 if you have the <sys/file.h> header file. */
1258#undef HAVE_SYS_FILE_H
1259
1260/* Define to 1 if you have the <sys/label.h> header file. */
1261#undef HAVE_SYS_LABEL_H
1262
1222/* Define to 1 if you have the <sys/mman.h> header file. */ 1263/* Define to 1 if you have the <sys/mman.h> header file. */
1223#undef HAVE_SYS_MMAN_H 1264#undef HAVE_SYS_MMAN_H
1224 1265
@@ -1264,6 +1305,9 @@
1264/* Define to 1 if you have the <sys/strtio.h> header file. */ 1305/* Define to 1 if you have the <sys/strtio.h> header file. */
1265#undef HAVE_SYS_STRTIO_H 1306#undef HAVE_SYS_STRTIO_H
1266 1307
1308/* Define to 1 if you have the <sys/sysctl.h> header file. */
1309#undef HAVE_SYS_SYSCTL_H
1310
1267/* Force use of sys/syslog.h on Ultrix */ 1311/* Force use of sys/syslog.h on Ultrix */
1268#undef HAVE_SYS_SYSLOG_H 1312#undef HAVE_SYS_SYSLOG_H
1269 1313
@@ -1282,6 +1326,9 @@
1282/* Define to 1 if you have the <sys/un.h> header file. */ 1326/* Define to 1 if you have the <sys/un.h> header file. */
1283#undef HAVE_SYS_UN_H 1327#undef HAVE_SYS_UN_H
1284 1328
1329/* Define to 1 if you have the <sys/vfs.h> header file. */
1330#undef HAVE_SYS_VFS_H
1331
1285/* Define to 1 if you have the `tcgetpgrp' function. */ 1332/* Define to 1 if you have the `tcgetpgrp' function. */
1286#undef HAVE_TCGETPGRP 1333#undef HAVE_TCGETPGRP
1287 1334
@@ -1496,12 +1543,12 @@
1496/* Need setpgrp to acquire controlling tty */ 1543/* Need setpgrp to acquire controlling tty */
1497#undef NEED_SETPGRP 1544#undef NEED_SETPGRP
1498 1545
1546/* compiler does not accept __attribute__ on protoype args */
1547#undef NO_ATTRIBUTE_ON_PROTOTYPE_ARGS
1548
1499/* compiler does not accept __attribute__ on return types */ 1549/* compiler does not accept __attribute__ on return types */
1500#undef NO_ATTRIBUTE_ON_RETURN_TYPE 1550#undef NO_ATTRIBUTE_ON_RETURN_TYPE
1501 1551
1502/* Define if you don't want to use lastlog in session.c */
1503#undef NO_SSH_LASTLOG
1504
1505/* Define to disable UID restoration test */ 1552/* Define to disable UID restoration test */
1506#undef NO_UID_RESTORATION_TEST 1553#undef NO_UID_RESTORATION_TEST
1507 1554
@@ -1681,6 +1728,9 @@
1681/* syslog_r function is safe to use in in a signal handler */ 1728/* syslog_r function is safe to use in in a signal handler */
1682#undef SYSLOG_R_SAFE_IN_SIGHAND 1729#undef SYSLOG_R_SAFE_IN_SIGHAND
1683 1730
1731/* Support routing domains using Linux VRF */
1732#undef SYS_RDOMAIN_LINUX
1733
1684/* Support passwords > 8 chars */ 1734/* Support passwords > 8 chars */
1685#undef UNIXWARE_LONG_PASSWORDS 1735#undef UNIXWARE_LONG_PASSWORDS
1686 1736
diff --git a/configure b/configure
index b2c2c3b91..5f5536fa4 100755
--- a/configure
+++ b/configure
@@ -624,6 +624,7 @@ ac_includes_default="\
624#endif" 624#endif"
625 625
626ac_subst_vars='LTLIBOBJS 626ac_subst_vars='LTLIBOBJS
627DEPEND
627UNSUPPORTED_ALGORITHMS 628UNSUPPORTED_ALGORITHMS
628TEST_MALLOC_OPTIONS 629TEST_MALLOC_OPTIONS
629TEST_SSH_UTF8 630TEST_SSH_UTF8
@@ -663,11 +664,11 @@ SH
663TEST_MINUS_S_SH 664TEST_MINUS_S_SH
664ENT 665ENT
665SED 666SED
666PERL
667KILL 667KILL
668CAT 668CAT
669ac_ct_AR 669ac_ct_AR
670AR 670AR
671MKDIR_P
671INSTALL_DATA 672INSTALL_DATA
672INSTALL_SCRIPT 673INSTALL_SCRIPT
673INSTALL_PROGRAM 674INSTALL_PROGRAM
@@ -1473,7 +1474,7 @@ Optional Packages:
1473 --with-superuser-path= Specify different path for super-user 1474 --with-superuser-path= Specify different path for super-user
1474 --with-4in6 Check for and convert IPv4 in IPv6 mapped addresses 1475 --with-4in6 Check for and convert IPv4 in IPv6 mapped addresses
1475 --with-bsd-auth Enable BSD auth support 1476 --with-bsd-auth Enable BSD auth support
1476 --with-pid-dir=PATH Specify location of ssh.pid file 1477 --with-pid-dir=PATH Specify location of sshd.pid file
1477 --with-lastlog=FILE|DIR specify lastlog location common locations 1478 --with-lastlog=FILE|DIR specify lastlog location common locations
1478 1479
1479Some influential environment variables: 1480Some influential environment variables:
@@ -4564,6 +4565,48 @@ $as_echo "$ac_cv_path_EGREP" >&6; }
4564 EGREP="$ac_cv_path_EGREP" 4565 EGREP="$ac_cv_path_EGREP"
4565 4566
4566 4567
4568{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
4569$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
4570if test -z "$MKDIR_P"; then
4571 if ${ac_cv_path_mkdir+:} false; then :
4572 $as_echo_n "(cached) " >&6
4573else
4574 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
4575for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
4576do
4577 IFS=$as_save_IFS
4578 test -z "$as_dir" && as_dir=.
4579 for ac_prog in mkdir gmkdir; do
4580 for ac_exec_ext in '' $ac_executable_extensions; do
4581 as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
4582 case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
4583 'mkdir (GNU coreutils) '* | \
4584 'mkdir (coreutils) '* | \
4585 'mkdir (fileutils) '4.1*)
4586 ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
4587 break 3;;
4588 esac
4589 done
4590 done
4591 done
4592IFS=$as_save_IFS
4593
4594fi
4595
4596 test -d ./--version && rmdir ./--version
4597 if test "${ac_cv_path_mkdir+set}" = set; then
4598 MKDIR_P="$ac_cv_path_mkdir -p"
4599 else
4600 # As a last resort, use the slow shell script. Don't cache a
4601 # value for MKDIR_P within a source directory, because that will
4602 # break other packages using the cache if that directory is
4603 # removed, or if the value is a relative name.
4604 MKDIR_P="$ac_install_sh -d"
4605 fi
4606fi
4607{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
4608$as_echo "$MKDIR_P" >&6; }
4609
4567if test -n "$ac_tool_prefix"; then 4610if test -n "$ac_tool_prefix"; then
4568 for ac_prog in ar 4611 for ac_prog in ar
4569 do 4612 do
@@ -4744,51 +4787,6 @@ $as_echo "no" >&6; }
4744fi 4787fi
4745 4788
4746 4789
4747for ac_prog in perl5 perl
4748do
4749 # Extract the first word of "$ac_prog", so it can be a program name with args.
4750set dummy $ac_prog; ac_word=$2
4751{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
4752$as_echo_n "checking for $ac_word... " >&6; }
4753if ${ac_cv_path_PERL+:} false; then :
4754 $as_echo_n "(cached) " >&6
4755else
4756 case $PERL in
4757 [\\/]* | ?:[\\/]*)
4758 ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
4759 ;;
4760 *)
4761 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
4762for as_dir in $PATH
4763do
4764 IFS=$as_save_IFS
4765 test -z "$as_dir" && as_dir=.
4766 for ac_exec_ext in '' $ac_executable_extensions; do
4767 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
4768 ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
4769 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
4770 break 2
4771 fi
4772done
4773 done
4774IFS=$as_save_IFS
4775
4776 ;;
4777esac
4778fi
4779PERL=$ac_cv_path_PERL
4780if test -n "$PERL"; then
4781 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
4782$as_echo "$PERL" >&6; }
4783else
4784 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
4785$as_echo "no" >&6; }
4786fi
4787
4788
4789 test -n "$PERL" && break
4790done
4791
4792# Extract the first word of "sed", so it can be a program name with args. 4790# Extract the first word of "sed", so it can be a program name with args.
4793set dummy sed; ac_word=$2 4791set dummy sed; ac_word=$2
4794{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 4792{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -4829,7 +4827,6 @@ $as_echo "no" >&6; }
4829fi 4827fi
4830 4828
4831 4829
4832
4833# Extract the first word of "ent", so it can be a program name with args. 4830# Extract the first word of "ent", so it can be a program name with args.
4834set dummy ent; ac_word=$2 4831set dummy ent; ac_word=$2
4835{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 4832{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -6223,6 +6220,172 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
6223} 6220}
6224 if test "x$use_toolchain_hardening" = "x1"; then 6221 if test "x$use_toolchain_hardening" = "x1"; then
6225 { 6222 {
6223 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports compile flag -mfunction-return=thunk" >&5
6224$as_echo_n "checking if $CC supports compile flag -mfunction-return=thunk... " >&6; }
6225 saved_CFLAGS="$CFLAGS"
6226 CFLAGS="$CFLAGS $WERROR -mfunction-return=thunk"
6227 _define_flag=""
6228 test "x$_define_flag" = "x" && _define_flag="-mfunction-return=thunk"
6229 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
6230/* end confdefs.h. */
6231
6232#include <stdlib.h>
6233#include <stdio.h>
6234int main(int argc, char **argv) {
6235 /* Some math to catch -ftrapv problems in the toolchain */
6236 int i = 123 * argc, j = 456 + argc, k = 789 - argc;
6237 float l = i * 2.1;
6238 double m = l / 0.5;
6239 long long int n = argc * 12345LL, o = 12345LL * (long long int)argc;
6240 printf("%d %d %d %f %f %lld %lld\n", i, j, k, l, m, n, o);
6241 exit(0);
6242}
6243
6244_ACEOF
6245if ac_fn_c_try_compile "$LINENO"; then :
6246
6247if `grep -i "unrecognized option" conftest.err >/dev/null`
6248then
6249 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
6250$as_echo "no" >&6; }
6251 CFLAGS="$saved_CFLAGS"
6252else
6253 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
6254$as_echo "yes" >&6; }
6255 CFLAGS="$saved_CFLAGS $_define_flag"
6256fi
6257else
6258 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
6259$as_echo "no" >&6; }
6260 CFLAGS="$saved_CFLAGS"
6261
6262fi
6263rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
6264} # gcc
6265 {
6266 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports compile flag -mindirect-branch=thunk" >&5
6267$as_echo_n "checking if $CC supports compile flag -mindirect-branch=thunk... " >&6; }
6268 saved_CFLAGS="$CFLAGS"
6269 CFLAGS="$CFLAGS $WERROR -mindirect-branch=thunk"
6270 _define_flag=""
6271 test "x$_define_flag" = "x" && _define_flag="-mindirect-branch=thunk"
6272 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
6273/* end confdefs.h. */
6274
6275#include <stdlib.h>
6276#include <stdio.h>
6277int main(int argc, char **argv) {
6278 /* Some math to catch -ftrapv problems in the toolchain */
6279 int i = 123 * argc, j = 456 + argc, k = 789 - argc;
6280 float l = i * 2.1;
6281 double m = l / 0.5;
6282 long long int n = argc * 12345LL, o = 12345LL * (long long int)argc;
6283 printf("%d %d %d %f %f %lld %lld\n", i, j, k, l, m, n, o);
6284 exit(0);
6285}
6286
6287_ACEOF
6288if ac_fn_c_try_compile "$LINENO"; then :
6289
6290if `grep -i "unrecognized option" conftest.err >/dev/null`
6291then
6292 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
6293$as_echo "no" >&6; }
6294 CFLAGS="$saved_CFLAGS"
6295else
6296 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
6297$as_echo "yes" >&6; }
6298 CFLAGS="$saved_CFLAGS $_define_flag"
6299fi
6300else
6301 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
6302$as_echo "no" >&6; }
6303 CFLAGS="$saved_CFLAGS"
6304
6305fi
6306rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
6307} # gcc
6308 {
6309 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports compile flag -mretpoline" >&5
6310$as_echo_n "checking if $CC supports compile flag -mretpoline... " >&6; }
6311 saved_CFLAGS="$CFLAGS"
6312 CFLAGS="$CFLAGS $WERROR -mretpoline"
6313 _define_flag=""
6314 test "x$_define_flag" = "x" && _define_flag="-mretpoline"
6315 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
6316/* end confdefs.h. */
6317
6318#include <stdlib.h>
6319#include <stdio.h>
6320int main(int argc, char **argv) {
6321 /* Some math to catch -ftrapv problems in the toolchain */
6322 int i = 123 * argc, j = 456 + argc, k = 789 - argc;
6323 float l = i * 2.1;
6324 double m = l / 0.5;
6325 long long int n = argc * 12345LL, o = 12345LL * (long long int)argc;
6326 printf("%d %d %d %f %f %lld %lld\n", i, j, k, l, m, n, o);
6327 exit(0);
6328}
6329
6330_ACEOF
6331if ac_fn_c_try_compile "$LINENO"; then :
6332
6333if `grep -i "unrecognized option" conftest.err >/dev/null`
6334then
6335 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
6336$as_echo "no" >&6; }
6337 CFLAGS="$saved_CFLAGS"
6338else
6339 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
6340$as_echo "yes" >&6; }
6341 CFLAGS="$saved_CFLAGS $_define_flag"
6342fi
6343else
6344 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
6345$as_echo "no" >&6; }
6346 CFLAGS="$saved_CFLAGS"
6347
6348fi
6349rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
6350} # clang
6351 {
6352 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $LD supports link flag -Wl,-z,retpolineplt" >&5
6353$as_echo_n "checking if $LD supports link flag -Wl,-z,retpolineplt... " >&6; }
6354 saved_LDFLAGS="$LDFLAGS"
6355 LDFLAGS="$LDFLAGS $WERROR -Wl,-z,retpolineplt"
6356 _define_flag=""
6357 test "x$_define_flag" = "x" && _define_flag="-Wl,-z,retpolineplt"
6358 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
6359/* end confdefs.h. */
6360
6361#include <stdlib.h>
6362#include <stdio.h>
6363int main(int argc, char **argv) {
6364 /* Some math to catch -ftrapv problems in the toolchain */
6365 int i = 123 * argc, j = 456 + argc, k = 789 - argc;
6366 float l = i * 2.1;
6367 double m = l / 0.5;
6368 long long int n = argc * 12345LL, o = 12345LL * (long long int)argc;
6369 long long p = n * o;
6370 printf("%d %d %d %f %f %lld %lld %lld\n", i, j, k, l, m, n, o, p);
6371 exit(0);
6372}
6373
6374_ACEOF
6375if ac_fn_c_try_link "$LINENO"; then :
6376 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
6377$as_echo "yes" >&6; }
6378 LDFLAGS="$saved_LDFLAGS $_define_flag"
6379else
6380 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
6381$as_echo "no" >&6; }
6382 LDFLAGS="$saved_LDFLAGS"
6383
6384fi
6385rm -f core conftest.err conftest.$ac_objext \
6386 conftest$ac_exeext conftest.$ac_ext
6387}
6388 {
6226 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports compile flag -D_FORTIFY_SOURCE=2" >&5 6389 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports compile flag -D_FORTIFY_SOURCE=2" >&5
6227$as_echo_n "checking if $CC supports compile flag -D_FORTIFY_SOURCE=2... " >&6; } 6390$as_echo_n "checking if $CC supports compile flag -D_FORTIFY_SOURCE=2... " >&6; }
6228 saved_CFLAGS="$CFLAGS" 6391 saved_CFLAGS="$CFLAGS"
@@ -6591,6 +6754,34 @@ $as_echo "#define NO_ATTRIBUTE_ON_RETURN_TYPE 1" >>confdefs.h
6591fi 6754fi
6592rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext 6755rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
6593 6756
6757{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler allows __attribute__ prototype args" >&5
6758$as_echo_n "checking if compiler allows __attribute__ prototype args... " >&6; }
6759cat confdefs.h - <<_ACEOF >conftest.$ac_ext
6760/* end confdefs.h. */
6761
6762#include <stdlib.h>
6763typedef void foo(const char *, ...) __attribute__((format(printf, 1, 2)));
6764int
6765main ()
6766{
6767 exit(0);
6768 ;
6769 return 0;
6770}
6771_ACEOF
6772if ac_fn_c_try_compile "$LINENO"; then :
6773 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
6774$as_echo "yes" >&6; }
6775else
6776 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
6777$as_echo "no" >&6; }
6778
6779$as_echo "#define NO_ATTRIBUTE_ON_PROTOTYPE_ARGS 1" >>confdefs.h
6780
6781
6782fi
6783rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
6784
6594if test "x$no_attrib_nonnull" != "x1" ; then 6785if test "x$no_attrib_nonnull" != "x1" ; then
6595 6786
6596$as_echo "#define HAVE_ATTRIBUTE__NONNULL__ 1" >>confdefs.h 6787$as_echo "#define HAVE_ATTRIBUTE__NONNULL__ 1" >>confdefs.h
@@ -6717,6 +6908,7 @@ for ac_header in \
6717 glob.h \ 6908 glob.h \
6718 ia.h \ 6909 ia.h \
6719 iaf.h \ 6910 iaf.h \
6911 ifaddrs.h \
6720 inttypes.h \ 6912 inttypes.h \
6721 langinfo.h \ 6913 langinfo.h \
6722 limits.h \ 6914 limits.h \
@@ -6740,12 +6932,13 @@ for ac_header in \
6740 stdint.h \ 6932 stdint.h \
6741 string.h \ 6933 string.h \
6742 strings.h \ 6934 strings.h \
6743 sys/audit.h \
6744 sys/bitypes.h \ 6935 sys/bitypes.h \
6745 sys/bsdtty.h \ 6936 sys/bsdtty.h \
6746 sys/cdefs.h \ 6937 sys/cdefs.h \
6747 sys/dir.h \ 6938 sys/dir.h \
6939 sys/file.h \
6748 sys/mman.h \ 6940 sys/mman.h \
6941 sys/label.h \
6749 sys/ndir.h \ 6942 sys/ndir.h \
6750 sys/poll.h \ 6943 sys/poll.h \
6751 sys/prctl.h \ 6944 sys/prctl.h \
@@ -6760,6 +6953,7 @@ for ac_header in \
6760 sys/sysmacros.h \ 6953 sys/sysmacros.h \
6761 sys/time.h \ 6954 sys/time.h \
6762 sys/timers.h \ 6955 sys/timers.h \
6956 sys/vfs.h \
6763 time.h \ 6957 time.h \
6764 tmpdir.h \ 6958 tmpdir.h \
6765 ttyent.h \ 6959 ttyent.h \
@@ -6786,6 +6980,32 @@ fi
6786done 6980done
6787 6981
6788 6982
6983# On some platforms (eg SunOS4) sys/audit.h requires sys/[time|types|label.h]
6984# to be included first.
6985for ac_header in sys/audit.h
6986do :
6987 ac_fn_c_check_header_compile "$LINENO" "sys/audit.h" "ac_cv_header_sys_audit_h" "
6988#ifdef HAVE_SYS_TIME_H
6989# include <sys/time.h>
6990#endif
6991#ifdef HAVE_SYS_TYPES_H
6992# include <sys/types.h>
6993#endif
6994#ifdef HAVE_SYS_LABEL_H
6995# include <sys/label.h>
6996#endif
6997
6998"
6999if test "x$ac_cv_header_sys_audit_h" = xyes; then :
7000 cat >>confdefs.h <<_ACEOF
7001#define HAVE_SYS_AUDIT_H 1
7002_ACEOF
7003
7004fi
7005
7006done
7007
7008
6789# sys/capsicum.h requires sys/types.h 7009# sys/capsicum.h requires sys/types.h
6790for ac_header in sys/capsicum.h 7010for ac_header in sys/capsicum.h
6791do : 7011do :
@@ -6805,6 +7025,29 @@ fi
6805done 7025done
6806 7026
6807 7027
7028# net/route.h requires sys/socket.h and sys/types.h.
7029# sys/sysctl.h also requires sys/param.h
7030for ac_header in net/route.h sys/sysctl.h
7031do :
7032 as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
7033ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "
7034#ifdef HAVE_SYS_TYPES_H
7035# include <sys/types.h>
7036#endif
7037#include <sys/param.h>
7038#include <sys/socket.h>
7039
7040"
7041if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
7042 cat >>confdefs.h <<_ACEOF
7043#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
7044_ACEOF
7045
7046fi
7047
7048done
7049
7050
6808# lastlog.h requires sys/time.h to be included first on Solaris 7051# lastlog.h requires sys/time.h to be included first on Solaris
6809for ac_header in lastlog.h 7052for ac_header in lastlog.h
6810do : 7053do :
@@ -7185,6 +7428,12 @@ $as_echo "#define PTY_ZEROREAD 1" >>confdefs.h
7185 7428
7186$as_echo "#define PLATFORM_SYS_DIR_UID 2" >>confdefs.h 7429$as_echo "#define PLATFORM_SYS_DIR_UID 2" >>confdefs.h
7187 7430
7431
7432$as_echo "#define BROKEN_STRNDUP 1" >>confdefs.h
7433
7434
7435$as_echo "#define BROKEN_STRNLEN 1" >>confdefs.h
7436
7188 ;; 7437 ;;
7189*-*-android*) 7438*-*-android*)
7190 7439
@@ -7695,6 +7944,19 @@ $as_echo "#define SSH_TUN_COMPAT_AF 1" >>confdefs.h
7695$as_echo "#define SSH_TUN_PREPEND_AF 1" >>confdefs.h 7944$as_echo "#define SSH_TUN_PREPEND_AF 1" >>confdefs.h
7696 7945
7697 fi 7946 fi
7947 ac_fn_c_check_header_compile "$LINENO" "linux/if.h" "ac_cv_header_linux_if_h" "
7948#ifdef HAVE_SYS_TYPES_H
7949# include <sys/types.H>
7950#endif
7951
7952"
7953if test "x$ac_cv_header_linux_if_h" = xyes; then :
7954
7955$as_echo "#define SYS_RDOMAIN_LINUX 1" >>confdefs.h
7956
7957fi
7958
7959
7698 for ac_header in linux/seccomp.h linux/filter.h linux/audit.h 7960 for ac_header in linux/seccomp.h linux/filter.h linux/audit.h
7699do : 7961do :
7700 as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` 7962 as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
@@ -7709,6 +7971,75 @@ fi
7709 7971
7710done 7972done
7711 7973
7974 # Obtain MIPS ABI
7975 case "$host" in
7976 mips*)
7977 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
7978/* end confdefs.h. */
7979
7980#if _MIPS_SIM != _ABIO32
7981#error
7982#endif
7983
7984int
7985main ()
7986{
7987
7988 ;
7989 return 0;
7990}
7991_ACEOF
7992if ac_fn_c_try_compile "$LINENO"; then :
7993 mips_abi="o32"
7994else
7995 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
7996/* end confdefs.h. */
7997
7998#if _MIPS_SIM != _ABIN32
7999#error
8000#endif
8001
8002int
8003main ()
8004{
8005
8006 ;
8007 return 0;
8008}
8009_ACEOF
8010if ac_fn_c_try_compile "$LINENO"; then :
8011 mips_abi="n32"
8012else
8013 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
8014/* end confdefs.h. */
8015
8016#if _MIPS_SIM != _ABI64
8017#error
8018#endif
8019
8020int
8021main ()
8022{
8023
8024 ;
8025 return 0;
8026}
8027_ACEOF
8028if ac_fn_c_try_compile "$LINENO"; then :
8029 mips_abi="n64"
8030else
8031 as_fn_error $? "unknown MIPS ABI" "$LINENO" 5
8032
8033fi
8034rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
8035
8036fi
8037rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
8038
8039fi
8040rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
8041 ;;
8042 esac
7712 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for seccomp architecture" >&5 8043 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for seccomp architecture" >&5
7713$as_echo_n "checking for seccomp architecture... " >&6; } 8044$as_echo_n "checking for seccomp architecture... " >&6; }
7714 seccomp_audit_arch= 8045 seccomp_audit_arch=
@@ -7744,10 +8075,24 @@ $as_echo_n "checking for seccomp architecture... " >&6; }
7744 seccomp_audit_arch=AUDIT_ARCH_MIPSEL 8075 seccomp_audit_arch=AUDIT_ARCH_MIPSEL
7745 ;; 8076 ;;
7746 mips64-*) 8077 mips64-*)
7747 seccomp_audit_arch=AUDIT_ARCH_MIPS64 8078 case "$mips_abi" in
8079 "n32")
8080 seccomp_audit_arch=AUDIT_ARCH_MIPS64N32
8081 ;;
8082 "n64")
8083 seccomp_audit_arch=AUDIT_ARCH_MIPS64
8084 ;;
8085 esac
7748 ;; 8086 ;;
7749 mips64el-*) 8087 mips64el-*)
7750 seccomp_audit_arch=AUDIT_ARCH_MIPSEL64 8088 case "$mips_abi" in
8089 "n32")
8090 seccomp_audit_arch=AUDIT_ARCH_MIPSEL64N32
8091 ;;
8092 "n64")
8093 seccomp_audit_arch=AUDIT_ARCH_MIPSEL64
8094 ;;
8095 esac
7751 ;; 8096 ;;
7752 esac 8097 esac
7753 if test "x$seccomp_audit_arch" != "x" ; then 8098 if test "x$seccomp_audit_arch" != "x" ; then
@@ -8102,6 +8447,9 @@ done
8102 conf_lastlog_location=/var/adm/lastlog 8447 conf_lastlog_location=/var/adm/lastlog
8103 $as_echo "#define USE_PIPES 1" >>confdefs.h 8448 $as_echo "#define USE_PIPES 1" >>confdefs.h
8104 8449
8450
8451$as_echo "#define DISABLE_UTMPX 1" >>confdefs.h
8452
8105 ;; 8453 ;;
8106*-ncr-sysv*) 8454*-ncr-sysv*)
8107 LIBS="$LIBS -lc89" 8455 LIBS="$LIBS -lc89"
@@ -8260,12 +8608,10 @@ $as_echo "#define UNIXWARE_LONG_PASSWORDS 1" >>confdefs.h
8260 $as_echo "#define BROKEN_TCGETATTR_ICANON 1" >>confdefs.h 8608 $as_echo "#define BROKEN_TCGETATTR_ICANON 1" >>confdefs.h
8261 8609
8262 TEST_SHELL=$SHELL # let configure find us a capable shell 8610 TEST_SHELL=$SHELL # let configure find us a capable shell
8611 check_for_libcrypt_later=1
8263 case "$host" in 8612 case "$host" in
8264 *-*-sysv5SCO_SV*) # SCO OpenServer 6.x 8613 *-*-sysv5SCO_SV*) # SCO OpenServer 6.x
8265 maildir=/var/spool/mail 8614 maildir=/var/spool/mail
8266
8267$as_echo "#define BROKEN_LIBIAF 1" >>confdefs.h
8268
8269 $as_echo "#define BROKEN_UPDWTMPX 1" >>confdefs.h 8615 $as_echo "#define BROKEN_UPDWTMPX 1" >>confdefs.h
8270 8616
8271 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getluid in -lprot" >&5 8617 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getluid in -lprot" >&5
@@ -8318,17 +8664,12 @@ _ACEOF
8318fi 8664fi
8319done 8665done
8320 8666
8321 $as_echo "#define HAVE_SECUREWARE 1" >>confdefs.h
8322
8323 $as_echo "#define DISABLE_SHADOW 1" >>confdefs.h
8324
8325 8667
8326fi 8668fi
8327 8669
8328 ;; 8670 ;;
8329 *) $as_echo "#define LOCKED_PASSWD_STRING \"*LK*\"" >>confdefs.h 8671 *) $as_echo "#define LOCKED_PASSWD_STRING \"*LK*\"" >>confdefs.h
8330 8672
8331 check_for_libcrypt_later=1
8332 ;; 8673 ;;
8333 esac 8674 esac
8334 ;; 8675 ;;
@@ -8383,58 +8724,6 @@ done
8383 TEST_SHELL=$SHELL # let configure find us a capable shell 8724 TEST_SHELL=$SHELL # let configure find us a capable shell
8384 SKIP_DISABLE_LASTLOG_DEFINE=yes 8725 SKIP_DISABLE_LASTLOG_DEFINE=yes
8385 ;; 8726 ;;
8386*-*-unicosmk*)
8387
8388$as_echo "#define NO_SSH_LASTLOG 1" >>confdefs.h
8389
8390 $as_echo "#define SETEUID_BREAKS_SETUID 1" >>confdefs.h
8391
8392 $as_echo "#define BROKEN_SETREUID 1" >>confdefs.h
8393
8394 $as_echo "#define BROKEN_SETREGID 1" >>confdefs.h
8395
8396 $as_echo "#define USE_PIPES 1" >>confdefs.h
8397
8398 $as_echo "#define DISABLE_FD_PASSING 1" >>confdefs.h
8399
8400 LDFLAGS="$LDFLAGS"
8401 LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm"
8402 MANTYPE=cat
8403 ;;
8404*-*-unicosmp*)
8405 $as_echo "#define SETEUID_BREAKS_SETUID 1" >>confdefs.h
8406
8407 $as_echo "#define BROKEN_SETREUID 1" >>confdefs.h
8408
8409 $as_echo "#define BROKEN_SETREGID 1" >>confdefs.h
8410
8411 $as_echo "#define WITH_ABBREV_NO_TTY 1" >>confdefs.h
8412
8413 $as_echo "#define USE_PIPES 1" >>confdefs.h
8414
8415 $as_echo "#define DISABLE_FD_PASSING 1" >>confdefs.h
8416
8417 LDFLAGS="$LDFLAGS"
8418 LIBS="$LIBS -lgen -lacid -ldb"
8419 MANTYPE=cat
8420 ;;
8421*-*-unicos*)
8422 $as_echo "#define SETEUID_BREAKS_SETUID 1" >>confdefs.h
8423
8424 $as_echo "#define BROKEN_SETREUID 1" >>confdefs.h
8425
8426 $as_echo "#define BROKEN_SETREGID 1" >>confdefs.h
8427
8428 $as_echo "#define USE_PIPES 1" >>confdefs.h
8429
8430 $as_echo "#define DISABLE_FD_PASSING 1" >>confdefs.h
8431
8432 $as_echo "#define NO_SSH_LASTLOG 1" >>confdefs.h
8433
8434 LDFLAGS="$LDFLAGS -Wl,-Dmsglevel=334:fatal"
8435 LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm"
8436 MANTYPE=cat
8437 ;;
8438*-dec-osf*) 8727*-dec-osf*)
8439 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Digital Unix SIA" >&5 8728 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Digital Unix SIA" >&5
8440$as_echo_n "checking for Digital Unix SIA... " >&6; } 8729$as_echo_n "checking for Digital Unix SIA... " >&6; }
@@ -9874,7 +10163,43 @@ fi
9874 10163
9875 10164
9876# autoconf doesn't have AC_FUNC_CALLOC so fake it if malloc returns NULL; 10165# autoconf doesn't have AC_FUNC_CALLOC so fake it if malloc returns NULL;
9877if test "x$ac_cv_func_malloc_0_nonnull" != "xyes"; then 10166{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if calloc(0, N) returns non-null" >&5
10167$as_echo_n "checking if calloc(0, N) returns non-null... " >&6; }
10168if test "$cross_compiling" = yes; then :
10169 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cross compiling: assuming same as malloc" >&5
10170$as_echo "$as_me: WARNING: cross compiling: assuming same as malloc" >&2;}
10171 func_calloc_0_nonnull="$ac_cv_func_malloc_0_nonnull"
10172
10173else
10174 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
10175/* end confdefs.h. */
10176 #include <stdlib.h>
10177int
10178main ()
10179{
10180 void *p = calloc(0, 1); exit(p == NULL);
10181
10182 ;
10183 return 0;
10184}
10185_ACEOF
10186if ac_fn_c_try_run "$LINENO"; then :
10187 func_calloc_0_nonnull=yes
10188else
10189 func_calloc_0_nonnull=no
10190fi
10191rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
10192 conftest.$ac_objext conftest.beam conftest.$ac_ext
10193fi
10194
10195{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $func_calloc_0_nonnull" >&5
10196$as_echo "$func_calloc_0_nonnull" >&6; }
10197
10198if test "x$func_calloc_0_nonnull" == "xyes"; then
10199
10200$as_echo "#define HAVE_CALLOC 1" >>confdefs.h
10201
10202else
9878 10203
9879$as_echo "#define HAVE_CALLOC 0" >>confdefs.h 10204$as_echo "#define HAVE_CALLOC 0" >>confdefs.h
9880 10205
@@ -10256,7 +10581,7 @@ else
10256 LDNSCONFIG="$ac_cv_path_LDNSCONFIG" 10581 LDNSCONFIG="$ac_cv_path_LDNSCONFIG"
10257fi 10582fi
10258 10583
10259 if test "x$PKGCONFIG" = "xno"; then 10584 if test "x$LDNSCONFIG" = "xno"; then
10260 CPPFLAGS="$CPPFLAGS -I${withval}/include" 10585 CPPFLAGS="$CPPFLAGS -I${withval}/include"
10261 LDFLAGS="$LDFLAGS -L${withval}/lib" 10586 LDFLAGS="$LDFLAGS -L${withval}/lib"
10262 LIBS="-lldns $LIBS" 10587 LIBS="-lldns $LIBS"
@@ -10833,6 +11158,7 @@ for ac_func in \
10833 bcrypt_pbkdf \ 11158 bcrypt_pbkdf \
10834 bindresvport_sa \ 11159 bindresvport_sa \
10835 blf_enc \ 11160 blf_enc \
11161 bzero \
10836 cap_rights_limit \ 11162 cap_rights_limit \
10837 clock \ 11163 clock \
10838 closefrom \ 11164 closefrom \
@@ -10843,6 +11169,7 @@ for ac_func in \
10843 explicit_bzero \ 11169 explicit_bzero \
10844 fchmod \ 11170 fchmod \
10845 fchown \ 11171 fchown \
11172 flock \
10846 freeaddrinfo \ 11173 freeaddrinfo \
10847 freezero \ 11174 freezero \
10848 fstatfs \ 11175 fstatfs \
@@ -10857,9 +11184,9 @@ for ac_func in \
10857 getpeereid \ 11184 getpeereid \
10858 getpeerucred \ 11185 getpeerucred \
10859 getpgid \ 11186 getpgid \
10860 getpgrp \
10861 _getpty \ 11187 _getpty \
10862 getrlimit \ 11188 getrlimit \
11189 getsid \
10863 getttyent \ 11190 getttyent \
10864 glob \ 11191 glob \
10865 group_from_gid \ 11192 group_from_gid \
@@ -10881,6 +11208,7 @@ for ac_func in \
10881 poll \ 11208 poll \
10882 prctl \ 11209 prctl \
10883 pstat \ 11210 pstat \
11211 raise \
10884 readpassphrase \ 11212 readpassphrase \
10885 reallocarray \ 11213 reallocarray \
10886 recvmsg \ 11214 recvmsg \
@@ -10915,6 +11243,7 @@ for ac_func in \
10915 strlcat \ 11243 strlcat \
10916 strlcpy \ 11244 strlcpy \
10917 strmode \ 11245 strmode \
11246 strndup \
10918 strnlen \ 11247 strnlen \
10919 strnvis \ 11248 strnvis \
10920 strptime \ 11249 strptime \
@@ -10949,6 +11278,18 @@ fi
10949done 11278done
10950 11279
10951 11280
11281ac_fn_c_check_decl "$LINENO" "bzero" "ac_cv_have_decl_bzero" "$ac_includes_default"
11282if test "x$ac_cv_have_decl_bzero" = xyes; then :
11283 ac_have_decl=1
11284else
11285 ac_have_decl=0
11286fi
11287
11288cat >>confdefs.h <<_ACEOF
11289#define HAVE_DECL_BZERO $ac_have_decl
11290_ACEOF
11291
11292
10952for ac_func in mblen mbtowc nl_langinfo wcwidth 11293for ac_func in mblen mbtowc nl_langinfo wcwidth
10953do : 11294do :
10954 as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` 11295 as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
@@ -11090,9 +11431,15 @@ $as_echo "$ac_cv_search_dlopen" >&6; }
11090ac_res=$ac_cv_search_dlopen 11431ac_res=$ac_cv_search_dlopen
11091if test "$ac_res" != no; then : 11432if test "$ac_res" != no; then :
11092 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" 11433 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
11434 ac_fn_c_check_decl "$LINENO" "RTLD_NOW" "ac_cv_have_decl_RTLD_NOW" "#include <dlfcn.h>
11435
11436"
11437if test "x$ac_cv_have_decl_RTLD_NOW" = xyes; then :
11093 11438
11094$as_echo "#define ENABLE_PKCS11 /**/" >>confdefs.h 11439$as_echo "#define ENABLE_PKCS11 /**/" >>confdefs.h
11095 11440
11441fi
11442
11096 11443
11097fi 11444fi
11098 11445
@@ -11258,21 +11605,6 @@ $as_echo "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h
11258fi 11605fi
11259 11606
11260 11607
11261ac_fn_c_check_decl "$LINENO" "getrusage" "ac_cv_have_decl_getrusage" "$ac_includes_default"
11262if test "x$ac_cv_have_decl_getrusage" = xyes; then :
11263 for ac_func in getrusage
11264do :
11265 ac_fn_c_check_func "$LINENO" "getrusage" "ac_cv_func_getrusage"
11266if test "x$ac_cv_func_getrusage" = xyes; then :
11267 cat >>confdefs.h <<_ACEOF
11268#define HAVE_GETRUSAGE 1
11269_ACEOF
11270
11271fi
11272done
11273
11274fi
11275
11276ac_fn_c_check_decl "$LINENO" "strsep" "ac_cv_have_decl_strsep" " 11608ac_fn_c_check_decl "$LINENO" "strsep" "ac_cv_have_decl_strsep" "
11277#ifdef HAVE_STRING_H 11609#ifdef HAVE_STRING_H
11278# include <string.h> 11610# include <string.h>
@@ -11365,6 +11697,21 @@ cat >>confdefs.h <<_ACEOF
11365_ACEOF 11697_ACEOF
11366 11698
11367 11699
11700ac_fn_c_check_decl "$LINENO" "readv" "ac_cv_have_decl_readv" "
11701#include <sys/types.h>
11702#include <sys/uio.h>
11703#include <unistd.h>
11704
11705"
11706if test "x$ac_cv_have_decl_readv" = xyes; then :
11707 ac_have_decl=1
11708else
11709 ac_have_decl=0
11710fi
11711
11712cat >>confdefs.h <<_ACEOF
11713#define HAVE_DECL_READV $ac_have_decl
11714_ACEOF
11368ac_fn_c_check_decl "$LINENO" "writev" "ac_cv_have_decl_writev" " 11715ac_fn_c_check_decl "$LINENO" "writev" "ac_cv_have_decl_writev" "
11369#include <sys/types.h> 11716#include <sys/types.h>
11370#include <sys/uio.h> 11717#include <sys/uio.h>
@@ -11655,6 +12002,39 @@ fi
11655done 12002done
11656 12003
11657 12004
12005{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fflush(NULL)" >&5
12006$as_echo_n "checking for working fflush(NULL)... " >&6; }
12007if test "$cross_compiling" = yes; then :
12008 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cross compiling: assuming working" >&5
12009$as_echo "$as_me: WARNING: cross compiling: assuming working" >&2;}
12010
12011else
12012 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
12013/* end confdefs.h. */
12014#include <stdio.h>
12015int
12016main ()
12017{
12018fflush(NULL); exit(0);
12019 ;
12020 return 0;
12021}
12022_ACEOF
12023if ac_fn_c_try_run "$LINENO"; then :
12024 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
12025$as_echo "yes" >&6; }
12026else
12027 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
12028$as_echo "no" >&6; }
12029
12030$as_echo "#define FFLUSH_NULL_BUG 1" >>confdefs.h
12031
12032fi
12033rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
12034 conftest.$ac_objext conftest.beam conftest.$ac_ext
12035fi
12036
12037
11658for ac_func in gettimeofday time 12038for ac_func in gettimeofday time
11659do : 12039do :
11660 as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` 12040 as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
@@ -12396,38 +12776,45 @@ fi
12396 12776
12397fi 12777fi
12398 12778
12399{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getpgrp requires zero arguments" >&5 12779for ac_func in getpgrp
12400$as_echo_n "checking whether getpgrp requires zero arguments... " >&6; } 12780do :
12401if ${ac_cv_func_getpgrp_void+:} false; then : 12781 ac_fn_c_check_func "$LINENO" "getpgrp" "ac_cv_func_getpgrp"
12402 $as_echo_n "(cached) " >&6 12782if test "x$ac_cv_func_getpgrp" = xyes; then :
12403else 12783 cat >>confdefs.h <<_ACEOF
12404 # Use it with a single arg. 12784#define HAVE_GETPGRP 1
12405cat confdefs.h - <<_ACEOF >conftest.$ac_ext 12785_ACEOF
12786
12787 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getpgrp accepts zero args" >&5
12788$as_echo_n "checking if getpgrp accepts zero args... " >&6; }
12789 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
12406/* end confdefs.h. */ 12790/* end confdefs.h. */
12407$ac_includes_default 12791$ac_includes_default
12408int 12792int
12409main () 12793main ()
12410{ 12794{
12411getpgrp (0); 12795 getpgrp();
12412 ; 12796 ;
12413 return 0; 12797 return 0;
12414} 12798}
12415_ACEOF 12799_ACEOF
12416if ac_fn_c_try_compile "$LINENO"; then : 12800if ac_fn_c_try_compile "$LINENO"; then :
12417 ac_cv_func_getpgrp_void=no 12801 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
12802$as_echo "yes" >&6; }
12803
12804$as_echo "#define GETPGRP_VOID 1" >>confdefs.h
12805
12418else 12806else
12419 ac_cv_func_getpgrp_void=yes 12807 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
12420fi 12808$as_echo "no" >&6; }
12421rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
12422 12809
12423fi 12810$as_echo "#define GETPGRP_VOID 0" >>confdefs.h
12424{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_getpgrp_void" >&5
12425$as_echo "$ac_cv_func_getpgrp_void" >&6; }
12426if test $ac_cv_func_getpgrp_void = yes; then
12427 12811
12428$as_echo "#define GETPGRP_VOID 1" >>confdefs.h
12429 12812
12430fi 12813fi
12814rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
12815
12816fi
12817done
12431 12818
12432 12819
12433# Search for OpenSSL 12820# Search for OpenSSL
@@ -15193,6 +15580,33 @@ _ACEOF
15193fi 15580fi
15194 15581
15195 15582
15583ac_fn_c_check_member "$LINENO" "struct statfs" "f_flags" "ac_cv_member_struct_statfs_f_flags" "
15584#include <sys/types.h>
15585#ifdef HAVE_SYS_BITYPES_H
15586#include <sys/bitypes.h>
15587#endif
15588#ifdef HAVE_SYS_STATFS_H
15589#include <sys/statfs.h>
15590#endif
15591#ifdef HAVE_SYS_STATVFS_H
15592#include <sys/statvfs.h>
15593#endif
15594#ifdef HAVE_SYS_VFS_H
15595#include <sys/vfs.h>
15596#endif
15597
15598"
15599if test "x$ac_cv_member_struct_statfs_f_flags" = xyes; then :
15600
15601cat >>confdefs.h <<_ACEOF
15602#define HAVE_STRUCT_STATFS_F_FLAGS 1
15603_ACEOF
15604
15605
15606fi
15607
15608
15609
15196ac_fn_c_check_type "$LINENO" "in_addr_t" "ac_cv_type_in_addr_t" "#include <sys/types.h> 15610ac_fn_c_check_type "$LINENO" "in_addr_t" "ac_cv_type_in_addr_t" "#include <sys/types.h>
15197#include <netinet/in.h> 15611#include <netinet/in.h>
15198" 15612"
@@ -19272,6 +19686,8 @@ TEST_MALLOC_OPTIONS=$TEST_MALLOC_OPTIONS
19272 19686
19273UNSUPPORTED_ALGORITHMS=$unsupported_algorithms 19687UNSUPPORTED_ALGORITHMS=$unsupported_algorithms
19274 19688
19689DEPEND=$(cat $srcdir/.depend)
19690
19275 19691
19276CFLAGS="${CFLAGS} ${CFLAGS_AFTER}" 19692CFLAGS="${CFLAGS} ${CFLAGS_AFTER}"
19277LDFLAGS="${LDFLAGS} ${LDFLAGS_AFTER}" 19693LDFLAGS="${LDFLAGS} ${LDFLAGS_AFTER}"
@@ -19859,6 +20275,7 @@ gives unlimited permission to copy, distribute and modify it."
19859ac_pwd='$ac_pwd' 20275ac_pwd='$ac_pwd'
19860srcdir='$srcdir' 20276srcdir='$srcdir'
19861INSTALL='$INSTALL' 20277INSTALL='$INSTALL'
20278MKDIR_P='$MKDIR_P'
19862AWK='$AWK' 20279AWK='$AWK'
19863test -n "\$AWK" || AWK=awk 20280test -n "\$AWK" || AWK=awk
19864_ACEOF 20281_ACEOF
@@ -20426,6 +20843,11 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
20426 [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; 20843 [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
20427 *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; 20844 *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
20428 esac 20845 esac
20846 ac_MKDIR_P=$MKDIR_P
20847 case $MKDIR_P in
20848 [\\/$]* | ?:[\\/]* ) ;;
20849 */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
20850 esac
20429_ACEOF 20851_ACEOF
20430 20852
20431cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 20853cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
@@ -20480,6 +20902,7 @@ s&@builddir@&$ac_builddir&;t t
20480s&@abs_builddir@&$ac_abs_builddir&;t t 20902s&@abs_builddir@&$ac_abs_builddir&;t t
20481s&@abs_top_builddir@&$ac_abs_top_builddir&;t t 20903s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
20482s&@INSTALL@&$ac_INSTALL&;t t 20904s&@INSTALL@&$ac_INSTALL&;t t
20905s&@MKDIR_P@&$ac_MKDIR_P&;t t
20483$ac_datarootdir_hack 20906$ac_datarootdir_hack
20484" 20907"
20485eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ 20908eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
@@ -20607,7 +21030,6 @@ echo " PAM support: $PAM_MSG"
20607echo " OSF SIA support: $SIA_MSG" 21030echo " OSF SIA support: $SIA_MSG"
20608echo " KerberosV support: $KRB5_MSG" 21031echo " KerberosV support: $KRB5_MSG"
20609echo " SELinux support: $SELINUX_MSG" 21032echo " SELinux support: $SELINUX_MSG"
20610echo " Smartcard support: $SCARD_MSG"
20611echo " S/KEY support: $SKEY_MSG" 21033echo " S/KEY support: $SKEY_MSG"
20612echo " MD5 password support: $MD5_MSG" 21034echo " MD5 password support: $MD5_MSG"
20613echo " libedit support: $LIBEDIT_MSG" 21035echo " libedit support: $LIBEDIT_MSG"
diff --git a/configure.ac b/configure.ac
index 483a9038c..eac143b4d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,3 @@
1# $Id: configure.ac,v 1.583 2014/08/26 20:32:01 djm Exp $
2# 1#
3# Copyright (c) 1999-2004 Damien Miller 2# Copyright (c) 1999-2004 Damien Miller
4# 3#
@@ -30,12 +29,11 @@ AC_PROG_CPP
30AC_PROG_RANLIB 29AC_PROG_RANLIB
31AC_PROG_INSTALL 30AC_PROG_INSTALL
32AC_PROG_EGREP 31AC_PROG_EGREP
32AC_PROG_MKDIR_P
33AC_CHECK_TOOLS([AR], [ar]) 33AC_CHECK_TOOLS([AR], [ar])
34AC_PATH_PROG([CAT], [cat]) 34AC_PATH_PROG([CAT], [cat])
35AC_PATH_PROG([KILL], [kill]) 35AC_PATH_PROG([KILL], [kill])
36AC_PATH_PROGS([PERL], [perl5 perl])
37AC_PATH_PROG([SED], [sed]) 36AC_PATH_PROG([SED], [sed])
38AC_SUBST([PERL])
39AC_PATH_PROG([ENT], [ent]) 37AC_PATH_PROG([ENT], [ent])
40AC_SUBST([ENT]) 38AC_SUBST([ENT])
41AC_PATH_PROG([TEST_MINUS_S_SH], [bash]) 39AC_PATH_PROG([TEST_MINUS_S_SH], [bash])
@@ -164,6 +162,10 @@ if test "$GCC" = "yes" || test "$GCC" = "egcs"; then
164 OSSH_CHECK_CFLAG_COMPILE([-Wunused-result], [-Wno-unused-result]) 162 OSSH_CHECK_CFLAG_COMPILE([-Wunused-result], [-Wno-unused-result])
165 OSSH_CHECK_CFLAG_COMPILE([-fno-strict-aliasing]) 163 OSSH_CHECK_CFLAG_COMPILE([-fno-strict-aliasing])
166 if test "x$use_toolchain_hardening" = "x1"; then 164 if test "x$use_toolchain_hardening" = "x1"; then
165 OSSH_CHECK_CFLAG_COMPILE([-mfunction-return=thunk]) # gcc
166 OSSH_CHECK_CFLAG_COMPILE([-mindirect-branch=thunk]) # gcc
167 OSSH_CHECK_CFLAG_COMPILE([-mretpoline]) # clang
168 OSSH_CHECK_LDFLAG_LINK([-Wl,-z,retpolineplt])
167 OSSH_CHECK_CFLAG_COMPILE([-D_FORTIFY_SOURCE=2]) 169 OSSH_CHECK_CFLAG_COMPILE([-D_FORTIFY_SOURCE=2])
168 OSSH_CHECK_LDFLAG_LINK([-Wl,-z,relro]) 170 OSSH_CHECK_LDFLAG_LINK([-Wl,-z,relro])
169 OSSH_CHECK_LDFLAG_LINK([-Wl,-z,now]) 171 OSSH_CHECK_LDFLAG_LINK([-Wl,-z,now])
@@ -263,6 +265,18 @@ __attribute__((__unused__)) static void foo(void){return;}]],
263 [compiler does not accept __attribute__ on return types]) ] 265 [compiler does not accept __attribute__ on return types]) ]
264) 266)
265 267
268AC_MSG_CHECKING([if compiler allows __attribute__ prototype args])
269AC_COMPILE_IFELSE(
270 [AC_LANG_PROGRAM([[
271#include <stdlib.h>
272typedef void foo(const char *, ...) __attribute__((format(printf, 1, 2)));]],
273 [[ exit(0); ]])],
274 [ AC_MSG_RESULT([yes]) ],
275 [ AC_MSG_RESULT([no])
276 AC_DEFINE(NO_ATTRIBUTE_ON_PROTOTYPE_ARGS, 1,
277 [compiler does not accept __attribute__ on protoype args]) ]
278)
279
266if test "x$no_attrib_nonnull" != "x1" ; then 280if test "x$no_attrib_nonnull" != "x1" ; then
267 AC_DEFINE([HAVE_ATTRIBUTE__NONNULL__], [1], [Have attribute nonnull]) 281 AC_DEFINE([HAVE_ATTRIBUTE__NONNULL__], [1], [Have attribute nonnull])
268fi 282fi
@@ -363,6 +377,7 @@ AC_CHECK_HEADERS([ \
363 glob.h \ 377 glob.h \
364 ia.h \ 378 ia.h \
365 iaf.h \ 379 iaf.h \
380 ifaddrs.h \
366 inttypes.h \ 381 inttypes.h \
367 langinfo.h \ 382 langinfo.h \
368 limits.h \ 383 limits.h \
@@ -386,12 +401,13 @@ AC_CHECK_HEADERS([ \
386 stdint.h \ 401 stdint.h \
387 string.h \ 402 string.h \
388 strings.h \ 403 strings.h \
389 sys/audit.h \
390 sys/bitypes.h \ 404 sys/bitypes.h \
391 sys/bsdtty.h \ 405 sys/bsdtty.h \
392 sys/cdefs.h \ 406 sys/cdefs.h \
393 sys/dir.h \ 407 sys/dir.h \
408 sys/file.h \
394 sys/mman.h \ 409 sys/mman.h \
410 sys/label.h \
395 sys/ndir.h \ 411 sys/ndir.h \
396 sys/poll.h \ 412 sys/poll.h \
397 sys/prctl.h \ 413 sys/prctl.h \
@@ -406,6 +422,7 @@ AC_CHECK_HEADERS([ \
406 sys/sysmacros.h \ 422 sys/sysmacros.h \
407 sys/time.h \ 423 sys/time.h \
408 sys/timers.h \ 424 sys/timers.h \
425 sys/vfs.h \
409 time.h \ 426 time.h \
410 tmpdir.h \ 427 tmpdir.h \
411 ttyent.h \ 428 ttyent.h \
@@ -420,6 +437,20 @@ AC_CHECK_HEADERS([ \
420 wchar.h \ 437 wchar.h \
421]) 438])
422 439
440# On some platforms (eg SunOS4) sys/audit.h requires sys/[time|types|label.h]
441# to be included first.
442AC_CHECK_HEADERS([sys/audit.h], [], [], [
443#ifdef HAVE_SYS_TIME_H
444# include <sys/time.h>
445#endif
446#ifdef HAVE_SYS_TYPES_H
447# include <sys/types.h>
448#endif
449#ifdef HAVE_SYS_LABEL_H
450# include <sys/label.h>
451#endif
452])
453
423# sys/capsicum.h requires sys/types.h 454# sys/capsicum.h requires sys/types.h
424AC_CHECK_HEADERS([sys/capsicum.h], [], [], [ 455AC_CHECK_HEADERS([sys/capsicum.h], [], [], [
425#ifdef HAVE_SYS_TYPES_H 456#ifdef HAVE_SYS_TYPES_H
@@ -427,6 +458,16 @@ AC_CHECK_HEADERS([sys/capsicum.h], [], [], [
427#endif 458#endif
428]) 459])
429 460
461# net/route.h requires sys/socket.h and sys/types.h.
462# sys/sysctl.h also requires sys/param.h
463AC_CHECK_HEADERS([net/route.h sys/sysctl.h], [], [], [
464#ifdef HAVE_SYS_TYPES_H
465# include <sys/types.h>
466#endif
467#include <sys/param.h>
468#include <sys/socket.h>
469])
470
430# lastlog.h requires sys/time.h to be included first on Solaris 471# lastlog.h requires sys/time.h to be included first on Solaris
431AC_CHECK_HEADERS([lastlog.h], [], [], [ 472AC_CHECK_HEADERS([lastlog.h], [], [], [
432#ifdef HAVE_SYS_TIME_H 473#ifdef HAVE_SYS_TIME_H
@@ -562,6 +603,8 @@ case "$host" in
562 [AIX 5.2 and 5.3 (and presumably newer) require this]) 603 [AIX 5.2 and 5.3 (and presumably newer) require this])
563 AC_DEFINE([PTY_ZEROREAD], [1], [read(1) can return 0 for a non-closed fd]) 604 AC_DEFINE([PTY_ZEROREAD], [1], [read(1) can return 0 for a non-closed fd])
564 AC_DEFINE([PLATFORM_SYS_DIR_UID], 2, [System dirs owned by bin (uid 2)]) 605 AC_DEFINE([PLATFORM_SYS_DIR_UID], 2, [System dirs owned by bin (uid 2)])
606 AC_DEFINE([BROKEN_STRNDUP], 1, [strndup broken, see APAR IY61211])
607 AC_DEFINE([BROKEN_STRNLEN], 1, [strnlen broken, see APAR IY62551])
565 ;; 608 ;;
566*-*-android*) 609*-*-android*)
567 AC_DEFINE([DISABLE_UTMP], [1], [Define if you don't want to use utmp]) 610 AC_DEFINE([DISABLE_UTMP], [1], [Define if you don't want to use utmp])
@@ -793,8 +836,36 @@ main() { if (NSVersionOfRunTimeLibrary("System") >= (60 << 16))
793 AC_DEFINE([SSH_TUN_PREPEND_AF], [1], 836 AC_DEFINE([SSH_TUN_PREPEND_AF], [1],
794 [Prepend the address family to IP tunnel traffic]) 837 [Prepend the address family to IP tunnel traffic])
795 fi 838 fi
839 AC_CHECK_HEADER([linux/if.h],
840 AC_DEFINE([SYS_RDOMAIN_LINUX], [1],
841 [Support routing domains using Linux VRF]), [], [
842#ifdef HAVE_SYS_TYPES_H
843# include <sys/types.H>
844#endif
845 ])
796 AC_CHECK_HEADERS([linux/seccomp.h linux/filter.h linux/audit.h], [], 846 AC_CHECK_HEADERS([linux/seccomp.h linux/filter.h linux/audit.h], [],
797 [], [#include <linux/types.h>]) 847 [], [#include <linux/types.h>])
848 # Obtain MIPS ABI
849 case "$host" in
850 mips*)
851 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
852#if _MIPS_SIM != _ABIO32
853#error
854#endif
855 ]])],[mips_abi="o32"],[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
856#if _MIPS_SIM != _ABIN32
857#error
858#endif
859 ]])],[mips_abi="n32"],[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
860#if _MIPS_SIM != _ABI64
861#error
862#endif
863 ]])],[mips_abi="n64"],[AC_MSG_ERROR([unknown MIPS ABI])
864 ])
865 ])
866 ])
867 ;;
868 esac
798 AC_MSG_CHECKING([for seccomp architecture]) 869 AC_MSG_CHECKING([for seccomp architecture])
799 seccomp_audit_arch= 870 seccomp_audit_arch=
800 case "$host" in 871 case "$host" in
@@ -829,10 +900,24 @@ main() { if (NSVersionOfRunTimeLibrary("System") >= (60 << 16))
829 seccomp_audit_arch=AUDIT_ARCH_MIPSEL 900 seccomp_audit_arch=AUDIT_ARCH_MIPSEL
830 ;; 901 ;;
831 mips64-*) 902 mips64-*)
832 seccomp_audit_arch=AUDIT_ARCH_MIPS64 903 case "$mips_abi" in
904 "n32")
905 seccomp_audit_arch=AUDIT_ARCH_MIPS64N32
906 ;;
907 "n64")
908 seccomp_audit_arch=AUDIT_ARCH_MIPS64
909 ;;
910 esac
833 ;; 911 ;;
834 mips64el-*) 912 mips64el-*)
835 seccomp_audit_arch=AUDIT_ARCH_MIPSEL64 913 case "$mips_abi" in
914 "n32")
915 seccomp_audit_arch=AUDIT_ARCH_MIPSEL64N32
916 ;;
917 "n64")
918 seccomp_audit_arch=AUDIT_ARCH_MIPSEL64
919 ;;
920 esac
836 ;; 921 ;;
837 esac 922 esac
838 if test "x$seccomp_audit_arch" != "x" ; then 923 if test "x$seccomp_audit_arch" != "x" ; then
@@ -983,6 +1068,7 @@ mips-sony-bsd|mips-sony-newsos4)
983 conf_wtmp_location=/var/adm/wtmp 1068 conf_wtmp_location=/var/adm/wtmp
984 conf_lastlog_location=/var/adm/lastlog 1069 conf_lastlog_location=/var/adm/lastlog
985 AC_DEFINE([USE_PIPES]) 1070 AC_DEFINE([USE_PIPES])
1071 AC_DEFINE([DISABLE_UTMPX], [1], [no utmpx])
986 ;; 1072 ;;
987*-ncr-sysv*) 1073*-ncr-sysv*)
988 LIBS="$LIBS -lc89" 1074 LIBS="$LIBS -lc89"
@@ -1031,20 +1117,16 @@ mips-sony-bsd|mips-sony-newsos4)
1031 AC_DEFINE([PASSWD_NEEDS_USERNAME]) 1117 AC_DEFINE([PASSWD_NEEDS_USERNAME])
1032 AC_DEFINE([BROKEN_TCGETATTR_ICANON]) 1118 AC_DEFINE([BROKEN_TCGETATTR_ICANON])
1033 TEST_SHELL=$SHELL # let configure find us a capable shell 1119 TEST_SHELL=$SHELL # let configure find us a capable shell
1120 check_for_libcrypt_later=1
1034 case "$host" in 1121 case "$host" in
1035 *-*-sysv5SCO_SV*) # SCO OpenServer 6.x 1122 *-*-sysv5SCO_SV*) # SCO OpenServer 6.x
1036 maildir=/var/spool/mail 1123 maildir=/var/spool/mail
1037 AC_DEFINE([BROKEN_LIBIAF], [1],
1038 [ia_uinfo routines not supported by OS yet])
1039 AC_DEFINE([BROKEN_UPDWTMPX]) 1124 AC_DEFINE([BROKEN_UPDWTMPX])
1040 AC_CHECK_LIB([prot], [getluid], [ LIBS="$LIBS -lprot" 1125 AC_CHECK_LIB([prot], [getluid], [ LIBS="$LIBS -lprot"
1041 AC_CHECK_FUNCS([getluid setluid], , , [-lprot]) 1126 AC_CHECK_FUNCS([getluid setluid], , , [-lprot])
1042 AC_DEFINE([HAVE_SECUREWARE])
1043 AC_DEFINE([DISABLE_SHADOW])
1044 ], , ) 1127 ], , )
1045 ;; 1128 ;;
1046 *) AC_DEFINE([LOCKED_PASSWD_STRING], ["*LK*"]) 1129 *) AC_DEFINE([LOCKED_PASSWD_STRING], ["*LK*"])
1047 check_for_libcrypt_later=1
1048 ;; 1130 ;;
1049 esac 1131 esac
1050 ;; 1132 ;;
@@ -1077,40 +1159,6 @@ mips-sony-bsd|mips-sony-newsos4)
1077 TEST_SHELL=$SHELL # let configure find us a capable shell 1159 TEST_SHELL=$SHELL # let configure find us a capable shell
1078 SKIP_DISABLE_LASTLOG_DEFINE=yes 1160 SKIP_DISABLE_LASTLOG_DEFINE=yes
1079 ;; 1161 ;;
1080*-*-unicosmk*)
1081 AC_DEFINE([NO_SSH_LASTLOG], [1],
1082 [Define if you don't want to use lastlog in session.c])
1083 AC_DEFINE([SETEUID_BREAKS_SETUID])
1084 AC_DEFINE([BROKEN_SETREUID])
1085 AC_DEFINE([BROKEN_SETREGID])
1086 AC_DEFINE([USE_PIPES])
1087 AC_DEFINE([DISABLE_FD_PASSING])
1088 LDFLAGS="$LDFLAGS"
1089 LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm"
1090 MANTYPE=cat
1091 ;;
1092*-*-unicosmp*)
1093 AC_DEFINE([SETEUID_BREAKS_SETUID])
1094 AC_DEFINE([BROKEN_SETREUID])
1095 AC_DEFINE([BROKEN_SETREGID])
1096 AC_DEFINE([WITH_ABBREV_NO_TTY])
1097 AC_DEFINE([USE_PIPES])
1098 AC_DEFINE([DISABLE_FD_PASSING])
1099 LDFLAGS="$LDFLAGS"
1100 LIBS="$LIBS -lgen -lacid -ldb"
1101 MANTYPE=cat
1102 ;;
1103*-*-unicos*)
1104 AC_DEFINE([SETEUID_BREAKS_SETUID])
1105 AC_DEFINE([BROKEN_SETREUID])
1106 AC_DEFINE([BROKEN_SETREGID])
1107 AC_DEFINE([USE_PIPES])
1108 AC_DEFINE([DISABLE_FD_PASSING])
1109 AC_DEFINE([NO_SSH_LASTLOG])
1110 LDFLAGS="$LDFLAGS -Wl,-Dmsglevel=334:fatal"
1111 LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm"
1112 MANTYPE=cat
1113 ;;
1114*-dec-osf*) 1162*-dec-osf*)
1115 AC_MSG_CHECKING([for Digital Unix SIA]) 1163 AC_MSG_CHECKING([for Digital Unix SIA])
1116 no_osfsia="" 1164 no_osfsia=""
@@ -1361,8 +1409,23 @@ AC_FUNC_STRFTIME
1361AC_FUNC_MALLOC 1409AC_FUNC_MALLOC
1362AC_FUNC_REALLOC 1410AC_FUNC_REALLOC
1363# autoconf doesn't have AC_FUNC_CALLOC so fake it if malloc returns NULL; 1411# autoconf doesn't have AC_FUNC_CALLOC so fake it if malloc returns NULL;
1364if test "x$ac_cv_func_malloc_0_nonnull" != "xyes"; then 1412AC_MSG_CHECKING([if calloc(0, N) returns non-null])
1365 AC_DEFINE(HAVE_CALLOC, 0, [calloc(x, 0) returns NULL]) 1413AC_RUN_IFELSE(
1414 [AC_LANG_PROGRAM(
1415 [[ #include <stdlib.h> ]],
1416 [[ void *p = calloc(0, 1); exit(p == NULL); ]]
1417 )],
1418 [ func_calloc_0_nonnull=yes ],
1419 [ func_calloc_0_nonnull=no ],
1420 [ AC_MSG_WARN([cross compiling: assuming same as malloc])
1421 func_calloc_0_nonnull="$ac_cv_func_malloc_0_nonnull"]
1422)
1423AC_MSG_RESULT([$func_calloc_0_nonnull])
1424
1425if test "x$func_calloc_0_nonnull" == "xyes"; then
1426 AC_DEFINE(HAVE_CALLOC, 1, [calloc(0, x) returns non-null])
1427else
1428 AC_DEFINE(HAVE_CALLOC, 0, [calloc(0, x) returns NULL])
1366 AC_DEFINE(calloc, rpl_calloc, 1429 AC_DEFINE(calloc, rpl_calloc,
1367 [Define to rpl_calloc if the replacement function should be used.]) 1430 [Define to rpl_calloc if the replacement function should be used.])
1368fi 1431fi
@@ -1567,7 +1630,7 @@ AC_ARG_WITH(ldns,
1567 ldns="" 1630 ldns=""
1568 if test "x$withval" = "xyes" ; then 1631 if test "x$withval" = "xyes" ; then
1569 AC_PATH_TOOL([LDNSCONFIG], [ldns-config], [no]) 1632 AC_PATH_TOOL([LDNSCONFIG], [ldns-config], [no])
1570 if test "x$PKGCONFIG" = "xno"; then 1633 if test "x$LDNSCONFIG" = "xno"; then
1571 CPPFLAGS="$CPPFLAGS -I${withval}/include" 1634 CPPFLAGS="$CPPFLAGS -I${withval}/include"
1572 LDFLAGS="$LDFLAGS -L${withval}/lib" 1635 LDFLAGS="$LDFLAGS -L${withval}/lib"
1573 LIBS="-lldns $LIBS" 1636 LIBS="-lldns $LIBS"
@@ -1775,6 +1838,7 @@ AC_CHECK_FUNCS([ \
1775 bcrypt_pbkdf \ 1838 bcrypt_pbkdf \
1776 bindresvport_sa \ 1839 bindresvport_sa \
1777 blf_enc \ 1840 blf_enc \
1841 bzero \
1778 cap_rights_limit \ 1842 cap_rights_limit \
1779 clock \ 1843 clock \
1780 closefrom \ 1844 closefrom \
@@ -1785,6 +1849,7 @@ AC_CHECK_FUNCS([ \
1785 explicit_bzero \ 1849 explicit_bzero \
1786 fchmod \ 1850 fchmod \
1787 fchown \ 1851 fchown \
1852 flock \
1788 freeaddrinfo \ 1853 freeaddrinfo \
1789 freezero \ 1854 freezero \
1790 fstatfs \ 1855 fstatfs \
@@ -1799,9 +1864,9 @@ AC_CHECK_FUNCS([ \
1799 getpeereid \ 1864 getpeereid \
1800 getpeerucred \ 1865 getpeerucred \
1801 getpgid \ 1866 getpgid \
1802 getpgrp \
1803 _getpty \ 1867 _getpty \
1804 getrlimit \ 1868 getrlimit \
1869 getsid \
1805 getttyent \ 1870 getttyent \
1806 glob \ 1871 glob \
1807 group_from_gid \ 1872 group_from_gid \
@@ -1823,6 +1888,7 @@ AC_CHECK_FUNCS([ \
1823 poll \ 1888 poll \
1824 prctl \ 1889 prctl \
1825 pstat \ 1890 pstat \
1891 raise \
1826 readpassphrase \ 1892 readpassphrase \
1827 reallocarray \ 1893 reallocarray \
1828 recvmsg \ 1894 recvmsg \
@@ -1857,6 +1923,7 @@ AC_CHECK_FUNCS([ \
1857 strlcat \ 1923 strlcat \
1858 strlcpy \ 1924 strlcpy \
1859 strmode \ 1925 strmode \
1926 strndup \
1860 strnlen \ 1927 strnlen \
1861 strnvis \ 1928 strnvis \
1862 strptime \ 1929 strptime \
@@ -1880,6 +1947,8 @@ AC_CHECK_FUNCS([ \
1880 warn \ 1947 warn \
1881]) 1948])
1882 1949
1950AC_CHECK_DECLS([bzero])
1951
1883dnl Wide character support. 1952dnl Wide character support.
1884AC_CHECK_FUNCS([mblen mbtowc nl_langinfo wcwidth]) 1953AC_CHECK_FUNCS([mblen mbtowc nl_langinfo wcwidth])
1885 1954
@@ -1922,7 +1991,10 @@ AC_ARG_ENABLE([pkcs11],
1922if test "x$openssl" = "xyes" && test "x$disable_pkcs11" = "x"; then 1991if test "x$openssl" = "xyes" && test "x$disable_pkcs11" = "x"; then
1923 # PKCS#11 support requires dlopen() and co 1992 # PKCS#11 support requires dlopen() and co
1924 AC_SEARCH_LIBS([dlopen], [dl], 1993 AC_SEARCH_LIBS([dlopen], [dl],
1925 [AC_DEFINE([ENABLE_PKCS11], [], [Enable for PKCS#11 support])] 1994 AC_CHECK_DECL([RTLD_NOW],
1995 AC_DEFINE([ENABLE_PKCS11], [], [Enable for PKCS#11 support]),
1996 [], [#include <dlfcn.h>]
1997 )
1926 ) 1998 )
1927fi 1999fi
1928 2000
@@ -1949,7 +2021,6 @@ AC_SEARCH_LIBS([clock_gettime], [rt],
1949 [AC_DEFINE([HAVE_CLOCK_GETTIME], [1], [Have clock_gettime])]) 2021 [AC_DEFINE([HAVE_CLOCK_GETTIME], [1], [Have clock_gettime])])
1950 2022
1951dnl Make sure prototypes are defined for these before using them. 2023dnl Make sure prototypes are defined for these before using them.
1952AC_CHECK_DECL([getrusage], [AC_CHECK_FUNCS([getrusage])])
1953AC_CHECK_DECL([strsep], 2024AC_CHECK_DECL([strsep],
1954 [AC_CHECK_FUNCS([strsep])], 2025 [AC_CHECK_FUNCS([strsep])],
1955 [], 2026 [],
@@ -1985,7 +2056,7 @@ AC_CHECK_DECLS([O_NONBLOCK], , ,
1985#endif 2056#endif
1986 ]) 2057 ])
1987 2058
1988AC_CHECK_DECLS([writev], , , [ 2059AC_CHECK_DECLS([readv, writev], , , [
1989#include <sys/types.h> 2060#include <sys/types.h>
1990#include <sys/uio.h> 2061#include <sys/uio.h>
1991#include <unistd.h> 2062#include <unistd.h>
@@ -2102,6 +2173,16 @@ AC_CHECK_FUNCS([realpath], [
2102 ) 2173 )
2103]) 2174])
2104 2175
2176AC_MSG_CHECKING([for working fflush(NULL)])
2177AC_RUN_IFELSE(
2178 [AC_LANG_PROGRAM([[#include <stdio.h>]], [[fflush(NULL); exit(0);]])],
2179 AC_MSG_RESULT([yes]),
2180 [AC_MSG_RESULT([no])
2181 AC_DEFINE([FFLUSH_NULL_BUG], [1],
2182 [define if fflush(NULL) does not work])],
2183 AC_MSG_WARN([cross compiling: assuming working])
2184)
2185
2105dnl Checks for time functions 2186dnl Checks for time functions
2106AC_CHECK_FUNCS([gettimeofday time]) 2187AC_CHECK_FUNCS([gettimeofday time])
2107dnl Checks for utmp functions 2188dnl Checks for utmp functions
@@ -2473,7 +2554,16 @@ static void sighandler(int sig) { _exit(1); }
2473 ) 2554 )
2474fi 2555fi
2475 2556
2476AC_FUNC_GETPGRP 2557AC_CHECK_FUNCS([getpgrp],[
2558 AC_MSG_CHECKING([if getpgrp accepts zero args])
2559 AC_COMPILE_IFELSE(
2560 [AC_LANG_PROGRAM([[$ac_includes_default]], [[ getpgrp(); ]])],
2561 [ AC_MSG_RESULT([yes])
2562 AC_DEFINE([GETPGRP_VOID], [1], [getpgrp takes zero args])],
2563 [ AC_MSG_RESULT([no])
2564 AC_DEFINE([GETPGRP_VOID], [0], [getpgrp takes one arg])]
2565 )
2566])
2477 2567
2478# Search for OpenSSL 2568# Search for OpenSSL
2479saved_CPPFLAGS="$CPPFLAGS" 2569saved_CPPFLAGS="$CPPFLAGS"
@@ -3721,6 +3811,23 @@ AC_CHECK_TYPES([fsblkcnt_t, fsfilcnt_t], , , [
3721#endif 3811#endif
3722]) 3812])
3723 3813
3814AC_CHECK_MEMBERS([struct statfs.f_flags], [], [], [[
3815#include <sys/types.h>
3816#ifdef HAVE_SYS_BITYPES_H
3817#include <sys/bitypes.h>
3818#endif
3819#ifdef HAVE_SYS_STATFS_H
3820#include <sys/statfs.h>
3821#endif
3822#ifdef HAVE_SYS_STATVFS_H
3823#include <sys/statvfs.h>
3824#endif
3825#ifdef HAVE_SYS_VFS_H
3826#include <sys/vfs.h>
3827#endif
3828]])
3829
3830
3724AC_CHECK_TYPES([in_addr_t, in_port_t], , , 3831AC_CHECK_TYPES([in_addr_t, in_port_t], , ,
3725[#include <sys/types.h> 3832[#include <sys/types.h>
3726#include <netinet/in.h>]) 3833#include <netinet/in.h>])
@@ -4858,7 +4965,7 @@ if test ! -d $piddir ; then
4858fi 4965fi
4859 4966
4860AC_ARG_WITH([pid-dir], 4967AC_ARG_WITH([pid-dir],
4861 [ --with-pid-dir=PATH Specify location of ssh.pid file], 4968 [ --with-pid-dir=PATH Specify location of sshd.pid file],
4862 [ 4969 [
4863 if test -n "$withval" && test "x$withval" != "xno" && \ 4970 if test -n "$withval" && test "x$withval" != "xno" && \
4864 test "x${withval}" != "xyes"; then 4971 test "x${withval}" != "xyes"; then
@@ -5159,6 +5266,7 @@ AC_SUBST([TEST_SSH_IPV6], [$TEST_SSH_IPV6])
5159AC_SUBST([TEST_SSH_UTF8], [$TEST_SSH_UTF8]) 5266AC_SUBST([TEST_SSH_UTF8], [$TEST_SSH_UTF8])
5160AC_SUBST([TEST_MALLOC_OPTIONS], [$TEST_MALLOC_OPTIONS]) 5267AC_SUBST([TEST_MALLOC_OPTIONS], [$TEST_MALLOC_OPTIONS])
5161AC_SUBST([UNSUPPORTED_ALGORITHMS], [$unsupported_algorithms]) 5268AC_SUBST([UNSUPPORTED_ALGORITHMS], [$unsupported_algorithms])
5269AC_SUBST([DEPEND], [$(cat $srcdir/.depend)])
5162 5270
5163CFLAGS="${CFLAGS} ${CFLAGS_AFTER}" 5271CFLAGS="${CFLAGS} ${CFLAGS_AFTER}"
5164LDFLAGS="${LDFLAGS} ${LDFLAGS_AFTER}" 5272LDFLAGS="${LDFLAGS} ${LDFLAGS_AFTER}"
@@ -5210,7 +5318,6 @@ echo " PAM support: $PAM_MSG"
5210echo " OSF SIA support: $SIA_MSG" 5318echo " OSF SIA support: $SIA_MSG"
5211echo " KerberosV support: $KRB5_MSG" 5319echo " KerberosV support: $KRB5_MSG"
5212echo " SELinux support: $SELINUX_MSG" 5320echo " SELinux support: $SELINUX_MSG"
5213echo " Smartcard support: $SCARD_MSG"
5214echo " S/KEY support: $SKEY_MSG" 5321echo " S/KEY support: $SKEY_MSG"
5215echo " TCP Wrappers support: $TCPW_MSG" 5322echo " TCP Wrappers support: $TCPW_MSG"
5216echo " MD5 password support: $MD5_MSG" 5323echo " MD5 password support: $MD5_MSG"
diff --git a/contrib/aix/README b/contrib/aix/README
index 4a11ae703..1aa591978 100644
--- a/contrib/aix/README
+++ b/contrib/aix/README
@@ -47,4 +47,3 @@ you get to keep both pieces.
47 - Darren Tucker (dtucker at zip dot com dot au) 47 - Darren Tucker (dtucker at zip dot com dot au)
48 2002/03/01 48 2002/03/01
49 49
50$Id: README,v 1.4 2003/08/25 05:01:04 dtucker Exp $
diff --git a/contrib/aix/buildbff.sh b/contrib/aix/buildbff.sh
index 81d8cc301..00b384dc7 100755
--- a/contrib/aix/buildbff.sh
+++ b/contrib/aix/buildbff.sh
@@ -1,7 +1,6 @@
1#!/bin/sh 1#!/bin/sh
2# 2#
3# buildbff.sh: Create AIX SMIT-installable OpenSSH packages 3# buildbff.sh: Create AIX SMIT-installable OpenSSH packages
4# $Id: buildbff.sh,v 1.13 2011/05/05 03:48:41 djm Exp $
5# 4#
6# Author: Darren Tucker (dtucker at zip dot com dot au) 5# Author: Darren Tucker (dtucker at zip dot com dot au)
7# This file is placed in the public domain and comes with absolutely 6# This file is placed in the public domain and comes with absolutely
diff --git a/contrib/aix/inventory.sh b/contrib/aix/inventory.sh
index e2641e79c..7d76f4971 100755
--- a/contrib/aix/inventory.sh
+++ b/contrib/aix/inventory.sh
@@ -1,7 +1,6 @@
1#!/bin/sh 1#!/bin/sh
2# 2#
3# inventory.sh 3# inventory.sh
4# $Id: inventory.sh,v 1.6 2003/11/21 12:48:56 djm Exp $
5# 4#
6# Originally written by Ben Lindstrom, modified by Darren Tucker to use perl 5# Originally written by Ben Lindstrom, modified by Darren Tucker to use perl
7# This file is placed into the public domain. 6# This file is placed into the public domain.
diff --git a/contrib/cygwin/Makefile b/contrib/cygwin/Makefile
index a0261f48d..4b78cd950 100644
--- a/contrib/cygwin/Makefile
+++ b/contrib/cygwin/Makefile
@@ -13,6 +13,7 @@ defaultsdir=$(sysconfdir)/defaults/etc
13inetdefdir=$(defaultsdir)/inetd.d 13inetdefdir=$(defaultsdir)/inetd.d
14PRIVSEP_PATH=/var/empty 14PRIVSEP_PATH=/var/empty
15INSTALL=/usr/bin/install -c 15INSTALL=/usr/bin/install -c
16MKDIR_P=$(srcdir)/mkinstalldirs
16 17
17DESTDIR= 18DESTDIR=
18 19
@@ -23,7 +24,7 @@ all:
23 @echo 24 @echo
24 25
25move-config-files: $(DESTDIR)$(sysconfdir)/ssh_config $(DESTDIR)$(sysconfdir)/sshd_config 26move-config-files: $(DESTDIR)$(sysconfdir)/ssh_config $(DESTDIR)$(sysconfdir)/sshd_config
26 $(srcdir)/mkinstalldirs $(DESTDIR)$(defaultsdir) 27 $(MKDIR_P) $(DESTDIR)$(defaultsdir)
27 mv $(DESTDIR)$(sysconfdir)/ssh_config $(DESTDIR)$(defaultsdir) 28 mv $(DESTDIR)$(sysconfdir)/ssh_config $(DESTDIR)$(defaultsdir)
28 mv $(DESTDIR)$(sysconfdir)/sshd_config $(DESTDIR)$(defaultsdir) 29 mv $(DESTDIR)$(sysconfdir)/sshd_config $(DESTDIR)$(defaultsdir)
29 30
@@ -31,11 +32,11 @@ remove-empty-dir:
31 rm -rf $(DESTDIR)$(PRIVSEP_PATH) 32 rm -rf $(DESTDIR)$(PRIVSEP_PATH)
32 33
33install-inetd-config: 34install-inetd-config:
34 $(srcdir)/mkinstalldirs $(DESTDIR)$(inetdefdir) 35 $(MKDIR_P) $(DESTDIR)$(inetdefdir)
35 $(INSTALL) -m 644 sshd-inetd $(DESTDIR)$(inetdefdir)/sshd-inetd 36 $(INSTALL) -m 644 sshd-inetd $(DESTDIR)$(inetdefdir)/sshd-inetd
36 37
37install-sshdoc: 38install-sshdoc:
38 $(srcdir)/mkinstalldirs $(DESTDIR)$(sshdocdir) 39 $(MKDIR_P) $(DESTDIR)$(sshdocdir)
39 -$(INSTALL) -m 644 $(srcdir)/CREDITS $(DESTDIR)$(sshdocdir)/CREDITS 40 -$(INSTALL) -m 644 $(srcdir)/CREDITS $(DESTDIR)$(sshdocdir)/CREDITS
40 -$(INSTALL) -m 644 $(srcdir)/ChangeLog $(DESTDIR)$(sshdocdir)/ChangeLog 41 -$(INSTALL) -m 644 $(srcdir)/ChangeLog $(DESTDIR)$(sshdocdir)/ChangeLog
41 -$(INSTALL) -m 644 $(srcdir)/LICENCE $(DESTDIR)$(sshdocdir)/LICENCE 42 -$(INSTALL) -m 644 $(srcdir)/LICENCE $(DESTDIR)$(sshdocdir)/LICENCE
@@ -52,13 +53,13 @@ install-sshdoc:
52 -$(INSTALL) -m 644 $(srcdir)/TODO $(DESTDIR)$(sshdocdir)/TODO 53 -$(INSTALL) -m 644 $(srcdir)/TODO $(DESTDIR)$(sshdocdir)/TODO
53 54
54install-cygwindoc: README 55install-cygwindoc: README
55 $(srcdir)/mkinstalldirs $(DESTDIR)$(cygdocdir) 56 $(MKDIR_P) $(DESTDIR)$(cygdocdir)
56 $(INSTALL) -m 644 README $(DESTDIR)$(cygdocdir)/openssh.README 57 $(INSTALL) -m 644 README $(DESTDIR)$(cygdocdir)/openssh.README
57 58
58install-doc: install-sshdoc install-cygwindoc 59install-doc: install-sshdoc install-cygwindoc
59 60
60install-scripts: ssh-host-config ssh-user-config 61install-scripts: ssh-host-config ssh-user-config
61 $(srcdir)/mkinstalldirs $(DESTDIR)$(bindir) 62 $(MKDIR_P) $(DESTDIR)$(bindir)
62 $(INSTALL) -m 755 ssh-host-config $(DESTDIR)$(bindir)/ssh-host-config 63 $(INSTALL) -m 755 ssh-host-config $(DESTDIR)$(bindir)/ssh-host-config
63 $(INSTALL) -m 755 ssh-user-config $(DESTDIR)$(bindir)/ssh-user-config 64 $(INSTALL) -m 755 ssh-user-config $(DESTDIR)$(bindir)/ssh-user-config
64 65
diff --git a/contrib/findssl.sh b/contrib/findssl.sh
index 263fd2644..95a0d66df 100644
--- a/contrib/findssl.sh
+++ b/contrib/findssl.sh
@@ -1,7 +1,5 @@
1#!/bin/sh 1#!/bin/sh
2# 2#
3# $Id: findssl.sh,v 1.4 2007/02/19 11:44:25 dtucker Exp $
4#
5# findssl.sh 3# findssl.sh
6# Search for all instances of OpenSSL headers and libraries 4# Search for all instances of OpenSSL headers and libraries
7# and print their versions. 5# and print their versions.
diff --git a/contrib/redhat/openssh.spec b/contrib/redhat/openssh.spec
index a96a36e49..a0d5e2071 100644
--- a/contrib/redhat/openssh.spec
+++ b/contrib/redhat/openssh.spec
@@ -1,5 +1,5 @@
1%define ver 7.6p1 1%define ver 7.7p1
2%define rel 1 2%define rel 1%{?dist}
3 3
4# OpenSSH privilege separation requires a user & group ID 4# OpenSSH privilege separation requires a user & group ID
5%define sshd_uid 74 5%define sshd_uid 74
@@ -23,8 +23,19 @@
23# Use GTK2 instead of GNOME in gnome-ssh-askpass 23# Use GTK2 instead of GNOME in gnome-ssh-askpass
24%define gtk2 1 24%define gtk2 1
25 25
26# Is this build for RHL 6.x? 26# Use build6x options for older RHEL builds
27# RHEL 7 not yet supported
28%if 0%{?rhel} > 6
27%define build6x 0 29%define build6x 0
30%else
31%define build6x 1
32%endif
33
34%if 0%{?fedora} >= 26
35%define compat_openssl 1
36%else
37%define compat_openssl 0
38%endif
28 39
29# Do we want kerberos5 support (1=yes 0=no) 40# Do we want kerberos5 support (1=yes 0=no)
30%define kerberos5 1 41%define kerberos5 1
@@ -64,7 +75,7 @@
64%define kerberos5 0 75%define kerberos5 0
65%endif 76%endif
66 77
67Summary: The OpenSSH implementation of SSH protocol versions 1 and 2. 78Summary: The OpenSSH implementation of SSH protocol version 2.
68Name: openssh 79Name: openssh
69Version: %{ver} 80Version: %{ver}
70%if %{rescue} 81%if %{rescue}
@@ -74,9 +85,7 @@ Release: %{rel}
74%endif 85%endif
75URL: https://www.openssh.com/portable.html 86URL: https://www.openssh.com/portable.html
76Source0: https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-%{version}.tar.gz 87Source0: https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-%{version}.tar.gz
77%if ! %{no_x11_askpass}
78Source1: http://www.jmknoble.net/software/x11-ssh-askpass/x11-ssh-askpass-%{aversion}.tar.gz 88Source1: http://www.jmknoble.net/software/x11-ssh-askpass/x11-ssh-askpass-%{aversion}.tar.gz
79%endif
80License: BSD 89License: BSD
81Group: Applications/Internet 90Group: Applications/Internet
82BuildRoot: %{_tmppath}/%{name}-%{version}-buildroot 91BuildRoot: %{_tmppath}/%{name}-%{version}-buildroot
@@ -86,7 +95,13 @@ PreReq: initscripts >= 5.00
86%else 95%else
87Requires: initscripts >= 5.20 96Requires: initscripts >= 5.20
88%endif 97%endif
89BuildRequires: perl, openssl-devel 98BuildRequires: perl
99%if %{compat_openssl}
100BuildRequires: compat-openssl10-devel
101%else
102BuildRequires: openssl-devel >= 1.0.1
103BuildRequires: openssl-devel < 1.1
104%endif
90BuildRequires: /bin/login 105BuildRequires: /bin/login
91%if ! %{build6x} 106%if ! %{build6x}
92BuildRequires: glibc-devel, pam 107BuildRequires: glibc-devel, pam
@@ -95,6 +110,12 @@ BuildRequires: /usr/include/security/pam_appl.h
95%endif 110%endif
96%if ! %{no_x11_askpass} 111%if ! %{no_x11_askpass}
97BuildRequires: /usr/include/X11/Xlib.h 112BuildRequires: /usr/include/X11/Xlib.h
113# Xt development tools
114BuildRequires: libXt-devel
115# Provides xmkmf
116BuildRequires: imake
117# Rely on relatively recent gtk
118BuildRequires: gtk2-devel
98%endif 119%endif
99%if ! %{no_gnome_askpass} 120%if ! %{no_gnome_askpass}
100BuildRequires: pkgconfig 121BuildRequires: pkgconfig
@@ -183,11 +204,6 @@ environment.
183CFLAGS="$RPM_OPT_FLAGS -Os"; export CFLAGS 204CFLAGS="$RPM_OPT_FLAGS -Os"; export CFLAGS
184%endif 205%endif
185 206
186%if %{kerberos5}
187K5DIR=`rpm -ql krb5-devel | grep 'include/krb5\.h' | sed 's,\/include\/krb5.h,,'`
188echo K5DIR=$K5DIR
189%endif
190
191%configure \ 207%configure \
192 --sysconfdir=%{_sysconfdir}/ssh \ 208 --sysconfdir=%{_sysconfdir}/ssh \
193 --libexecdir=%{_libexecdir}/openssh \ 209 --libexecdir=%{_libexecdir}/openssh \
@@ -196,6 +212,9 @@ echo K5DIR=$K5DIR
196 --with-superuser-path=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin \ 212 --with-superuser-path=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin \
197 --with-privsep-path=%{_var}/empty/sshd \ 213 --with-privsep-path=%{_var}/empty/sshd \
198 --with-md5-passwords \ 214 --with-md5-passwords \
215 --mandir=%{_mandir} \
216 --with-mantype=man \
217 --disable-strip \
199%if %{scard} 218%if %{scard}
200 --with-smartcard \ 219 --with-smartcard \
201%endif 220%endif
@@ -262,12 +281,12 @@ install -m644 contrib/redhat/sshd.pam $RPM_BUILD_ROOT/etc/pam.d/sshd
262install -m755 contrib/redhat/sshd.init $RPM_BUILD_ROOT/etc/rc.d/init.d/sshd 281install -m755 contrib/redhat/sshd.init $RPM_BUILD_ROOT/etc/rc.d/init.d/sshd
263 282
264%if ! %{no_x11_askpass} 283%if ! %{no_x11_askpass}
265install -s x11-ssh-askpass-%{aversion}/x11-ssh-askpass $RPM_BUILD_ROOT%{_libexecdir}/openssh/x11-ssh-askpass 284install x11-ssh-askpass-%{aversion}/x11-ssh-askpass $RPM_BUILD_ROOT%{_libexecdir}/openssh/x11-ssh-askpass
266ln -s x11-ssh-askpass $RPM_BUILD_ROOT%{_libexecdir}/openssh/ssh-askpass 285ln -s x11-ssh-askpass $RPM_BUILD_ROOT%{_libexecdir}/openssh/ssh-askpass
267%endif 286%endif
268 287
269%if ! %{no_gnome_askpass} 288%if ! %{no_gnome_askpass}
270install -s contrib/gnome-ssh-askpass $RPM_BUILD_ROOT%{_libexecdir}/openssh/gnome-ssh-askpass 289install contrib/gnome-ssh-askpass $RPM_BUILD_ROOT%{_libexecdir}/openssh/gnome-ssh-askpass
271%endif 290%endif
272 291
273%if ! %{scard} 292%if ! %{scard}
@@ -391,7 +410,7 @@ fi
391%doc x11-ssh-askpass-%{aversion}/README 410%doc x11-ssh-askpass-%{aversion}/README
392%doc x11-ssh-askpass-%{aversion}/ChangeLog 411%doc x11-ssh-askpass-%{aversion}/ChangeLog
393%doc x11-ssh-askpass-%{aversion}/SshAskpass*.ad 412%doc x11-ssh-askpass-%{aversion}/SshAskpass*.ad
394%attr(0755,root,root) %{_libexecdir}/openssh/ssh-askpass 413%{_libexecdir}/openssh/ssh-askpass
395%attr(0755,root,root) %{_libexecdir}/openssh/x11-ssh-askpass 414%attr(0755,root,root) %{_libexecdir}/openssh/x11-ssh-askpass
396%endif 415%endif
397 416
@@ -403,6 +422,22 @@ fi
403%endif 422%endif
404 423
405%changelog 424%changelog
425* Sat Feb 10 2018 Darren Tucker <dtucker@dtucker.net>
426- Update openssl-devel dependency to match current requirements.
427- Handle Fedora >=6 openssl 1.0 compat libs.
428- Remove SSH1 from description.
429- Don't strip binaries at build time so that debuginfo package can be
430 created.
431
432* Sun Nov 16 2014 Nico Kadel-Garcia <nakdel@gmail.com>
433- Add '--mandir' and '--with-mantype' for RHEL 5 compatibility
434- Add 'dist' option to 'ver' so package names reflect OS at build time
435- Always include x11-ssh-askpass tarball in SRPM
436- Add openssh-x11-aspass BuildRequires for libXT-devel, imake, gtk2-devel
437- Discard 'K5DIR' reporting, not usable inside 'mock' for RHEL 5 compatibility
438- Discard obsolete '--with-rsh' configure option
439- Update openssl-devel dependency to 0.9.8f, as found in autoconf
440
406* Wed Jul 14 2010 Tim Rice <tim@multitalents.net> 441* Wed Jul 14 2010 Tim Rice <tim@multitalents.net>
407- test for skip_x11_askpass (line 77) should have been for no_x11_askpass 442- test for skip_x11_askpass (line 77) should have been for no_x11_askpass
408 443
@@ -414,7 +449,7 @@ fi
414- Don't install profile.d scripts when not building with GNOME/GTK askpass 449- Don't install profile.d scripts when not building with GNOME/GTK askpass
415 (patch from bet@rahul.net) 450 (patch from bet@rahul.net)
416 451
417* Wed Oct 01 2002 Damien Miller <djm@mindrot.org> 452* Tue Oct 01 2002 Damien Miller <djm@mindrot.org>
418- Install ssh-agent setgid nobody to prevent ptrace() key theft attacks 453- Install ssh-agent setgid nobody to prevent ptrace() key theft attacks
419 454
420* Mon Sep 30 2002 Damien Miller <djm@mindrot.org> 455* Mon Sep 30 2002 Damien Miller <djm@mindrot.org>
@@ -460,7 +495,7 @@ fi
460- remove dependency on db1-devel, which has just been swallowed up whole 495- remove dependency on db1-devel, which has just been swallowed up whole
461 by gnome-libs-devel 496 by gnome-libs-devel
462 497
463* Sun Dec 29 2001 Nalin Dahyabhai <nalin@redhat.com> 498* Sat Dec 29 2001 Nalin Dahyabhai <nalin@redhat.com>
464- adjust build dependencies so that build6x actually works right (fix 499- adjust build dependencies so that build6x actually works right (fix
465 from Hugo van der Kooij) 500 from Hugo van der Kooij)
466 501
diff --git a/contrib/redhat/sshd.init b/contrib/redhat/sshd.init
index 40c8dfd9f..8ee5fcd3b 100755
--- a/contrib/redhat/sshd.init
+++ b/contrib/redhat/sshd.init
@@ -40,7 +40,6 @@ start()
40 # Create keys if necessary 40 # Create keys if necessary
41 /usr/bin/ssh-keygen -A 41 /usr/bin/ssh-keygen -A
42 if [ -x /sbin/restorecon ]; then 42 if [ -x /sbin/restorecon ]; then
43 /sbin/restorecon /etc/ssh/ssh_host_key.pub
44 /sbin/restorecon /etc/ssh/ssh_host_rsa_key.pub 43 /sbin/restorecon /etc/ssh/ssh_host_rsa_key.pub
45 /sbin/restorecon /etc/ssh/ssh_host_dsa_key.pub 44 /sbin/restorecon /etc/ssh/ssh_host_dsa_key.pub
46 /sbin/restorecon /etc/ssh/ssh_host_ecdsa_key.pub 45 /sbin/restorecon /etc/ssh/ssh_host_ecdsa_key.pub
diff --git a/contrib/redhat/sshd.init.old b/contrib/redhat/sshd.init.old
index 0deb6080e..8a30f7da4 100755
--- a/contrib/redhat/sshd.init.old
+++ b/contrib/redhat/sshd.init.old
@@ -24,7 +24,6 @@ prog="sshd"
24# Some functions to make the below more readable 24# Some functions to make the below more readable
25KEYGEN=/usr/bin/ssh-keygen 25KEYGEN=/usr/bin/ssh-keygen
26SSHD=/usr/sbin/sshd 26SSHD=/usr/sbin/sshd
27RSA1_KEY=/etc/ssh/ssh_host_key
28RSA_KEY=/etc/ssh/ssh_host_rsa_key 27RSA_KEY=/etc/ssh/ssh_host_rsa_key
29DSA_KEY=/etc/ssh/ssh_host_dsa_key 28DSA_KEY=/etc/ssh/ssh_host_dsa_key
30PID_FILE=/var/run/sshd.pid 29PID_FILE=/var/run/sshd.pid
@@ -61,21 +60,6 @@ my_failure() {
61 ;; 60 ;;
62 esac 61 esac
63} 62}
64do_rsa1_keygen() {
65 if [ ! -s $RSA1_KEY ]; then
66 echo -n "Generating SSH1 RSA host key: "
67 if $KEYGEN -q -t rsa1 -f $RSA1_KEY -C '' -N '' >&/dev/null; then
68 chmod 600 $RSA1_KEY
69 chmod 644 $RSA1_KEY.pub
70 my_success "RSA1 key generation"
71 echo
72 else
73 my_failure "RSA1 key generation"
74 echo
75 exit 1
76 fi
77 fi
78}
79do_rsa_keygen() { 63do_rsa_keygen() {
80 if [ ! -s $RSA_KEY ]; then 64 if [ ! -s $RSA_KEY ]; then
81 echo -n "Generating SSH2 RSA host key: " 65 echo -n "Generating SSH2 RSA host key: "
@@ -119,7 +103,6 @@ do_restart_sanity_check() {
119case "$1" in 103case "$1" in
120 start) 104 start)
121 # Create keys if necessary 105 # Create keys if necessary
122 do_rsa1_keygen;
123 do_rsa_keygen; 106 do_rsa_keygen;
124 do_dsa_keygen; 107 do_dsa_keygen;
125 108
diff --git a/contrib/suse/openssh.spec b/contrib/suse/openssh.spec
index fdb3578cb..d9c4298f1 100644
--- a/contrib/suse/openssh.spec
+++ b/contrib/suse/openssh.spec
@@ -13,7 +13,7 @@
13 13
14Summary: OpenSSH, a free Secure Shell (SSH) protocol implementation 14Summary: OpenSSH, a free Secure Shell (SSH) protocol implementation
15Name: openssh 15Name: openssh
16Version: 7.6p1 16Version: 7.7p1
17URL: https://www.openssh.com/ 17URL: https://www.openssh.com/
18Release: 1 18Release: 1
19Source0: openssh-%{version}.tar.gz 19Source0: openssh-%{version}.tar.gz
diff --git a/crypto_api.h b/crypto_api.h
index 5820ce8fa..7f45bbd69 100644
--- a/crypto_api.h
+++ b/crypto_api.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: crypto_api.h,v 1.3 2013/12/17 10:36:38 markus Exp $ */ 1/* $OpenBSD: crypto_api.h,v 1.4 2017/12/14 21:07:39 naddy Exp $ */
2 2
3/* 3/*
4 * Assembled from generated headers and source files by Markus Friedl. 4 * Assembled from generated headers and source files by Markus Friedl.
@@ -8,6 +8,8 @@
8#ifndef crypto_api_h 8#ifndef crypto_api_h
9#define crypto_api_h 9#define crypto_api_h
10 10
11#include "includes.h"
12
11#ifdef HAVE_STDINT_H 13#ifdef HAVE_STDINT_H
12# include <stdint.h> 14# include <stdint.h>
13#endif 15#endif
@@ -18,12 +20,6 @@ typedef uint32_t crypto_uint32;
18 20
19#define randombytes(buf, buf_len) arc4random_buf((buf), (buf_len)) 21#define randombytes(buf, buf_len) arc4random_buf((buf), (buf_len))
20 22
21#define crypto_hashblocks_sha512_STATEBYTES 64U
22#define crypto_hashblocks_sha512_BLOCKBYTES 128U
23
24int crypto_hashblocks_sha512(unsigned char *, const unsigned char *,
25 unsigned long long);
26
27#define crypto_hash_sha512_BYTES 64U 23#define crypto_hash_sha512_BYTES 64U
28 24
29int crypto_hash_sha512(unsigned char *, const unsigned char *, 25int crypto_hash_sha512(unsigned char *, const unsigned char *,
diff --git a/debian/.git-dpm b/debian/.git-dpm
index c60a212e2..c57923b4d 100644
--- a/debian/.git-dpm
+++ b/debian/.git-dpm
@@ -1,8 +1,11 @@
1# see git-dpm(1) from git-dpm package 1# see git-dpm(1) from git-dpm package
2bd081a1ae125c7c6b2cfec89746d1298a306ad78 2ea67bc97339c9a507343e4a1f5fb867f678fbe1d
3bd081a1ae125c7c6b2cfec89746d1298a306ad78 3ea67bc97339c9a507343e4a1f5fb867f678fbe1d
462f54f20bf351468e0124f63cc2902ee40d9b0e9 4ed6ae9c1a014a08ff5db3d768f01f2e427eeb476
562f54f20bf351468e0124f63cc2902ee40d9b0e9 5ed6ae9c1a014a08ff5db3d768f01f2e427eeb476
6openssh_7.6p1.orig.tar.gz 6openssh_7.7p1.orig.tar.gz
7a6984bc2c72192bed015c8b879b35dd9f5350b3b 7446fe9ed171f289f0d62197dffdbfdaaf21c49f2
81489788 81536900
9debianTag="debian/%e%%%V"
10patchedTag="patched/%e%%%V"
11upstreamTag="upstream/%U"
diff --git a/debian/changelog b/debian/changelog
index 627124b96..5a180a84c 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,116 @@
1openssh (1:7.7p1-3) UNRELEASED; urgency=medium
2
3 [ Colin Watson ]
4 * Adjust git-dpm tagging configuration.
5
6 [ Juri Grabowski ]
7 * Add rescue.target with ssh support.
8
9 -- Colin Watson <cjwatson@debian.org> Sat, 16 Jun 2018 12:42:36 +0100
10
11openssh (1:7.7p1-2) unstable; urgency=medium
12
13 * Fix parsing of DebianBanner option (closes: #894730).
14
15 -- Colin Watson <cjwatson@debian.org> Wed, 04 Apr 2018 00:47:29 +0100
16
17openssh (1:7.7p1-1) unstable; urgency=medium
18
19 * New upstream release (https://www.openssh.com/txt/release-7.7):
20 - ssh(1)/sshd(8): Drop compatibility support for some very old SSH
21 implementations, including ssh.com <=2.* and OpenSSH <= 3.*. These
22 versions were all released in or before 2001 and predate the final SSH
23 RFCs. The support in question isn't necessary for RFC-compliant SSH
24 implementations.
25 - Add experimental support for PQC XMSS keys (Extended Hash-Based
26 Signatures).
27 - sshd(8): Add an "rdomain" criterion for the sshd_config Match keyword
28 to allow conditional configuration that depends on which routing
29 domain a connection was received on.
30 - sshd_config(5): Add an optional rdomain qualifier to the ListenAddress
31 directive to allow listening on different routing domains.
32 - sshd(8): Add "expiry-time" option for authorized_keys files to allow
33 for expiring keys.
34 - ssh(1): Add a BindInterface option to allow binding the outgoing
35 connection to an interface's address (basically a more usable
36 BindAddress; closes: #289592).
37 - ssh(1): Expose device allocated for tun/tap forwarding via a new %T
38 expansion for LocalCommand. This allows LocalCommand to be used to
39 prepare the interface.
40 - sshd(8): Expose the device allocated for tun/tap forwarding via a new
41 SSH_TUNNEL environment variable. This allows automatic setup of the
42 interface and surrounding network configuration automatically on the
43 server.
44 - ssh(1)/scp(1)/sftp(1): Add URI support to ssh, sftp and scp, e.g.
45 ssh://user@host or sftp://user@host/path. Additional connection
46 parameters described in draft-ietf-secsh-scp-sftp-ssh-uri-04 are not
47 implemented since the ssh fingerprint format in the draft uses the
48 deprecated MD5 hash with no way to specify any other algorithm.
49 - ssh-keygen(1): Allow certificate validity intervals that specify only
50 a start or stop time (instead of both or neither).
51 - sftp(1): Allow "cd" and "lcd" commands with no explicit path argument.
52 lcd will change to the local user's home directory as usual. cd will
53 change to the starting directory for session (because the protocol
54 offers no way to obtain the remote user's home directory).
55 - sshd(8): When doing a config test with sshd -T, only require the
56 attributes that are actually used in Match criteria rather than (an
57 incomplete list of) all criteria.
58 - ssh(1)/sshd(8): More strictly check signature types during key
59 exchange against what was negotiated. Prevents downgrade of RSA
60 signatures made with SHA-256/512 to SHA-1.
61 - sshd(8): Fix support for client that advertise a protocol version of
62 "1.99" (indicating that they are prepared to accept both SSHv1 and
63 SSHv2). This was broken in OpenSSH 7.6 during the removal of SSHv1
64 support.
65 - ssh(1): Warn when the agent returns a ssh-rsa (SHA1) signature when a
66 rsa-sha2-256/512 signature was requested. This condition is possible
67 when an old or non-OpenSSH agent is in use.
68 - ssh-agent(1): Fix regression introduced in 7.6 that caused ssh-agent
69 to fatally exit if presented an invalid signature request message.
70 - sshd_config(5): Accept yes/no flag options case-insensitively, as has
71 been the case in ssh_config(5) for a long time (LP: #1656557).
72 - ssh(1): Improve error reporting for failures during connection. Under
73 some circumstances misleading errors were being shown.
74 - ssh-keyscan(1): Add -D option to allow printing of results directly in
75 SSHFP format.
76 - ssh(1): Compatibility fix for some servers that erroneously drop the
77 connection when the IUTF8 (RFC8160) option is sent.
78 - scp(1): Disable RemoteCommand and RequestTTY in the ssh session
79 started by scp (sftp was already doing this).
80 - ssh-keygen(1): Refuse to create a certificate with an unusable number
81 of principals.
82 - ssh-keygen(1): Fatally exit if ssh-keygen is unable to write all the
83 public key during key generation. Previously it would silently ignore
84 errors writing the comment and terminating newline.
85 - ssh(1): Do not modify hostname arguments that are addresses by
86 automatically forcing them to lower-case. Instead canonicalise them
87 jo resolve ambiguities (e.g. ::0001 => ::1) before they are matched
88 against known_hosts.
89 - ssh(1): Don't accept junk after "yes" or "no" responses to hostkey
90 prompts.
91 - sftp(1): Have sftp print a warning about shell cleanliness when
92 decoding the first packet fails, which is usually caused by shells
93 polluting stdout of non-interactive startups.
94 - ssh(1)/sshd(8): Switch timers in packet code from using wall-clock
95 time to monotonic time, allowing the packet layer to better function
96 over a clock step and avoiding possible integer overflows during
97 steps.
98 - sshd(8): Correctly detect MIPS ABI in use at configure time. Fixes
99 sandbox violations on some environments.
100 - Build and link with "retpoline" flags when available to mitigate the
101 "branch target injection" style (variant 2) of the Spectre
102 branch-prediction vulnerability.
103
104 -- Colin Watson <cjwatson@debian.org> Tue, 03 Apr 2018 12:40:24 +0100
105
106openssh (1:7.6p1-5) unstable; urgency=medium
107
108 * Explicitly build-depend on pkg-config, rather than implicitly
109 build-depending on it via libgtk-3-dev (thanks, Aurelien Jarno; closes:
110 #894558).
111
112 -- Colin Watson <cjwatson@debian.org> Sun, 01 Apr 2018 21:37:19 +0100
113
1openssh (1:7.6p1-4) unstable; urgency=medium 114openssh (1:7.6p1-4) unstable; urgency=medium
2 115
3 * Move VCS to salsa.debian.org. 116 * Move VCS to salsa.debian.org.
diff --git a/debian/control b/debian/control
index 541753a8e..4452e62b0 100644
--- a/debian/control
+++ b/debian/control
@@ -16,6 +16,7 @@ Build-Depends: autotools-dev,
16 libssl1.0-dev | libssl-dev (<< 1.1.0~), 16 libssl1.0-dev | libssl-dev (<< 1.1.0~),
17 libsystemd-dev [linux-any], 17 libsystemd-dev [linux-any],
18 libwrap0-dev | libwrap-dev, 18 libwrap0-dev | libwrap-dev,
19 pkg-config,
19 zlib1g-dev (>= 1:1.2.3), 20 zlib1g-dev (>= 1:1.2.3),
20Standards-Version: 4.1.0 21Standards-Version: 4.1.0
21Uploaders: Colin Watson <cjwatson@debian.org>, 22Uploaders: Colin Watson <cjwatson@debian.org>,
diff --git a/debian/patches/auth-log-verbosity.patch b/debian/patches/auth-log-verbosity.patch
deleted file mode 100644
index ba7642d83..000000000
--- a/debian/patches/auth-log-verbosity.patch
+++ /dev/null
@@ -1,120 +0,0 @@
1From 50e9edb57b6808cbbf63fe3433febb103baac1e8 Mon Sep 17 00:00:00 2001
2From: Colin Watson <cjwatson@debian.org>
3Date: Sun, 9 Feb 2014 16:10:02 +0000
4Subject: Quieten logs when multiple from= restrictions are used
5
6Bug-Debian: http://bugs.debian.org/630606
7Forwarded: no
8Last-Update: 2017-10-04
9
10Patch-Name: auth-log-verbosity.patch
11---
12 auth-options.c | 35 ++++++++++++++++++++++++++---------
13 auth-options.h | 1 +
14 auth2-pubkey.c | 3 +++
15 3 files changed, 30 insertions(+), 9 deletions(-)
16
17diff --git a/auth-options.c b/auth-options.c
18index bed00eef..ccdd0b20 100644
19--- a/auth-options.c
20+++ b/auth-options.c
21@@ -59,10 +59,21 @@ int forced_tun_device = -1;
22 /* "principals=" option. */
23 char *authorized_principals = NULL;
24
25+/* Throttle log messages. */
26+int logged_from_hostip = 0;
27+int logged_cert_hostip = 0;
28+
29 extern ServerOptions options;
30
31 /* XXX refactor to be stateless */
32
33+void
34+auth_start_parse_options(void)
35+{
36+ logged_from_hostip = 0;
37+ logged_cert_hostip = 0;
38+}
39+
40 void
41 auth_clear_options(void)
42 {
43@@ -322,10 +333,13 @@ auth_parse_options(struct passwd *pw, char *opts, const char *file,
44 /* FALLTHROUGH */
45 case 0:
46 free(patterns);
47- logit("Authentication tried for %.100s with "
48- "correct key but not from a permitted "
49- "host (host=%.200s, ip=%.200s).",
50- pw->pw_name, remote_host, remote_ip);
51+ if (!logged_from_hostip) {
52+ logit("Authentication tried for %.100s with "
53+ "correct key but not from a permitted "
54+ "host (host=%.200s, ip=%.200s).",
55+ pw->pw_name, remote_host, remote_ip);
56+ logged_from_hostip = 1;
57+ }
58 auth_debug_add("Your host '%.200s' is not "
59 "permitted to use this key for login.",
60 remote_host);
61@@ -549,11 +563,14 @@ parse_option_list(struct sshbuf *oblob, struct passwd *pw,
62 break;
63 case 0:
64 /* no match */
65- logit("Authentication tried for %.100s "
66- "with valid certificate but not "
67- "from a permitted host "
68- "(ip=%.200s).", pw->pw_name,
69- remote_ip);
70+ if (!logged_cert_hostip) {
71+ logit("Authentication tried for %.100s "
72+ "with valid certificate but not "
73+ "from a permitted host "
74+ "(ip=%.200s).", pw->pw_name,
75+ remote_ip);
76+ logged_cert_hostip = 1;
77+ }
78 auth_debug_add("Your address '%.200s' "
79 "is not permitted to use this "
80 "certificate for login.",
81diff --git a/auth-options.h b/auth-options.h
82index 547f0163..4de0f14d 100644
83--- a/auth-options.h
84+++ b/auth-options.h
85@@ -33,6 +33,7 @@ extern int forced_tun_device;
86 extern int key_is_cert_authority;
87 extern char *authorized_principals;
88
89+void auth_start_parse_options(void);
90 int auth_parse_options(struct passwd *, char *, const char *, u_long);
91 void auth_clear_options(void);
92 int auth_cert_options(struct sshkey *, struct passwd *, const char **);
93diff --git a/auth2-pubkey.c b/auth2-pubkey.c
94index 169839b0..43f880b6 100644
95--- a/auth2-pubkey.c
96+++ b/auth2-pubkey.c
97@@ -269,6 +269,7 @@ process_principals(FILE *f, const char *file, struct passwd *pw,
98 u_long linenum = 0;
99 u_int i, found_principal = 0;
100
101+ auth_start_parse_options();
102 while (read_keyfile_line(f, file, line, sizeof(line), &linenum) != -1) {
103 /* Always consume entire input */
104 if (found_principal)
105@@ -471,6 +472,7 @@ check_authkeys_file(FILE *f, char *file, struct sshkey *key, struct passwd *pw)
106 u_long linenum = 0;
107 struct sshkey *found = NULL;
108
109+ auth_start_parse_options();
110 while (read_keyfile_line(f, file, line, sizeof(line), &linenum) != -1) {
111 char *cp, *key_options = NULL, *fp = NULL;
112 const char *reason = NULL;
113@@ -624,6 +626,7 @@ user_cert_trusted_ca(struct passwd *pw, struct sshkey *key)
114 if (sshkey_cert_check_authority(key, 0, 1,
115 use_authorized_principals ? NULL : pw->pw_name, &reason) != 0)
116 goto fail_reason;
117+ auth_start_parse_options();
118 if (auth_cert_options(key, pw, &reason) != 0)
119 goto fail_reason;
120
diff --git a/debian/patches/authorized-keys-man-symlink.patch b/debian/patches/authorized-keys-man-symlink.patch
index 56f6de37f..239c36f78 100644
--- a/debian/patches/authorized-keys-man-symlink.patch
+++ b/debian/patches/authorized-keys-man-symlink.patch
@@ -1,4 +1,4 @@
1From 312eb64a9faf4e8cdb95f2ae147ecbfa6c0efd83 Mon Sep 17 00:00:00 2001 1From 66488db1ed04b4ca150ec530ed212fa46a653c1a Mon Sep 17 00:00:00 2001
2From: Tomas Pospisek <tpo_deb@sourcepole.ch> 2From: Tomas Pospisek <tpo_deb@sourcepole.ch>
3Date: Sun, 9 Feb 2014 16:10:07 +0000 3Date: Sun, 9 Feb 2014 16:10:07 +0000
4Subject: Install authorized_keys(5) as a symlink to sshd(8) 4Subject: Install authorized_keys(5) as a symlink to sshd(8)
@@ -13,10 +13,10 @@ Patch-Name: authorized-keys-man-symlink.patch
13 1 file changed, 1 insertion(+) 13 1 file changed, 1 insertion(+)
14 14
15diff --git a/Makefile.in b/Makefile.in 15diff --git a/Makefile.in b/Makefile.in
16index f6e9fe4c..08b989a4 100644 16index 6f3f042b..1afb4f79 100644
17--- a/Makefile.in 17--- a/Makefile.in
18+++ b/Makefile.in 18+++ b/Makefile.in
19@@ -340,6 +340,7 @@ install-files: 19@@ -352,6 +352,7 @@ install-files:
20 $(INSTALL) -m 644 sshd_config.5.out $(DESTDIR)$(mandir)/$(mansubdir)5/sshd_config.5 20 $(INSTALL) -m 644 sshd_config.5.out $(DESTDIR)$(mandir)/$(mansubdir)5/sshd_config.5
21 $(INSTALL) -m 644 ssh_config.5.out $(DESTDIR)$(mandir)/$(mansubdir)5/ssh_config.5 21 $(INSTALL) -m 644 ssh_config.5.out $(DESTDIR)$(mandir)/$(mansubdir)5/ssh_config.5
22 $(INSTALL) -m 644 sshd.8.out $(DESTDIR)$(mandir)/$(mansubdir)8/sshd.8 22 $(INSTALL) -m 644 sshd.8.out $(DESTDIR)$(mandir)/$(mansubdir)8/sshd.8
diff --git a/debian/patches/debian-banner.patch b/debian/patches/debian-banner.patch
index 8134afba4..b1338d2c7 100644
--- a/debian/patches/debian-banner.patch
+++ b/debian/patches/debian-banner.patch
@@ -1,4 +1,4 @@
1From ae96c03ce51af2c529bfa2f2de57f4fa938ea552 Mon Sep 17 00:00:00 2001 1From 9ec4db016a0510c449f9cefeb3299c2e755698c7 Mon Sep 17 00:00:00 2001
2From: Kees Cook <kees@debian.org> 2From: Kees Cook <kees@debian.org>
3Date: Sun, 9 Feb 2014 16:10:06 +0000 3Date: Sun, 9 Feb 2014 16:10:06 +0000
4Subject: Add DebianBanner server configuration option 4Subject: Add DebianBanner server configuration option
@@ -8,7 +8,7 @@ initial protocol handshake, for those scared by package-versioning.patch.
8 8
9Bug-Debian: http://bugs.debian.org/562048 9Bug-Debian: http://bugs.debian.org/562048
10Forwarded: not-needed 10Forwarded: not-needed
11Last-Update: 2017-10-04 11Last-Update: 2018-04-03
12 12
13Patch-Name: debian-banner.patch 13Patch-Name: debian-banner.patch
14--- 14---
@@ -19,10 +19,10 @@ Patch-Name: debian-banner.patch
19 4 files changed, 18 insertions(+), 1 deletion(-) 19 4 files changed, 18 insertions(+), 1 deletion(-)
20 20
21diff --git a/servconf.c b/servconf.c 21diff --git a/servconf.c b/servconf.c
22index 9889fb0a..b0146405 100644 22index 3fff3d53..0a8f6fd6 100644
23--- a/servconf.c 23--- a/servconf.c
24+++ b/servconf.c 24+++ b/servconf.c
25@@ -167,6 +167,7 @@ initialize_server_options(ServerOptions *options) 25@@ -177,6 +177,7 @@ initialize_server_options(ServerOptions *options)
26 options->fingerprint_hash = -1; 26 options->fingerprint_hash = -1;
27 options->disable_forwarding = -1; 27 options->disable_forwarding = -1;
28 options->expose_userauth_info = -1; 28 options->expose_userauth_info = -1;
@@ -30,7 +30,7 @@ index 9889fb0a..b0146405 100644
30 } 30 }
31 31
32 /* Returns 1 if a string option is unset or set to "none" or 0 otherwise. */ 32 /* Returns 1 if a string option is unset or set to "none" or 0 otherwise. */
33@@ -342,6 +343,8 @@ fill_default_server_options(ServerOptions *options) 33@@ -393,6 +394,8 @@ fill_default_server_options(ServerOptions *options)
34 options->disable_forwarding = 0; 34 options->disable_forwarding = 0;
35 if (options->expose_userauth_info == -1) 35 if (options->expose_userauth_info == -1)
36 options->expose_userauth_info = 0; 36 options->expose_userauth_info = 0;
@@ -39,38 +39,38 @@ index 9889fb0a..b0146405 100644
39 39
40 assemble_algorithms(options); 40 assemble_algorithms(options);
41 41
42@@ -429,6 +432,7 @@ typedef enum { 42@@ -480,6 +483,7 @@ typedef enum {
43 sStreamLocalBindMask, sStreamLocalBindUnlink, 43 sStreamLocalBindMask, sStreamLocalBindUnlink,
44 sAllowStreamLocalForwarding, sFingerprintHash, sDisableForwarding, 44 sAllowStreamLocalForwarding, sFingerprintHash, sDisableForwarding,
45 sExposeAuthInfo, 45 sExposeAuthInfo, sRDomain,
46+ sDebianBanner, 46+ sDebianBanner,
47 sDeprecated, sIgnore, sUnsupported 47 sDeprecated, sIgnore, sUnsupported
48 } ServerOpCodes; 48 } ServerOpCodes;
49 49
50@@ -582,6 +586,7 @@ static struct { 50@@ -634,6 +638,7 @@ static struct {
51 { "fingerprinthash", sFingerprintHash, SSHCFG_GLOBAL },
52 { "disableforwarding", sDisableForwarding, SSHCFG_ALL }, 51 { "disableforwarding", sDisableForwarding, SSHCFG_ALL },
53 { "exposeauthinfo", sExposeAuthInfo, SSHCFG_ALL }, 52 { "exposeauthinfo", sExposeAuthInfo, SSHCFG_ALL },
53 { "rdomain", sRDomain, SSHCFG_ALL },
54+ { "debianbanner", sDebianBanner, SSHCFG_GLOBAL }, 54+ { "debianbanner", sDebianBanner, SSHCFG_GLOBAL },
55 { NULL, sBadOption, 0 } 55 { NULL, sBadOption, 0 }
56 }; 56 };
57 57
58@@ -1907,6 +1912,10 @@ process_server_config_line(ServerOptions *options, char *line, 58@@ -2056,6 +2061,10 @@ process_server_config_line(ServerOptions *options, char *line,
59 intptr = &options->expose_userauth_info; 59 *charptr = xstrdup(arg);
60 goto parse_flag; 60 break;
61 61
62+ case sDebianBanner: 62+ case sDebianBanner:
63+ intptr = &options->debian_banner; 63+ intptr = &options->debian_banner;
64+ goto parse_int; 64+ goto parse_flag;
65+ 65+
66 case sDeprecated: 66 case sDeprecated:
67 case sIgnore: 67 case sIgnore:
68 case sUnsupported: 68 case sUnsupported:
69diff --git a/servconf.h b/servconf.h 69diff --git a/servconf.h b/servconf.h
70index 641e93c8..410c4275 100644 70index 5dfc9bc0..b0fa7045 100644
71--- a/servconf.h 71--- a/servconf.h
72+++ b/servconf.h 72+++ b/servconf.h
73@@ -200,6 +200,8 @@ typedef struct { 73@@ -211,6 +211,8 @@ typedef struct {
74 74
75 int fingerprint_hash; 75 int fingerprint_hash;
76 int expose_userauth_info; 76 int expose_userauth_info;
@@ -80,10 +80,10 @@ index 641e93c8..410c4275 100644
80 80
81 /* Information about the incoming connection as used by Match */ 81 /* Information about the incoming connection as used by Match */
82diff --git a/sshd.c b/sshd.c 82diff --git a/sshd.c b/sshd.c
83index eccf81bb..a5a1193d 100644 83index 9a7f5495..1d645a17 100644
84--- a/sshd.c 84--- a/sshd.c
85+++ b/sshd.c 85+++ b/sshd.c
86@@ -378,7 +378,8 @@ sshd_exchange_identification(struct ssh *ssh, int sock_in, int sock_out) 86@@ -384,7 +384,8 @@ sshd_exchange_identification(struct ssh *ssh, int sock_in, int sock_out)
87 char remote_version[256]; /* Must be at least as big as buf. */ 87 char remote_version[256]; /* Must be at least as big as buf. */
88 88
89 xasprintf(&server_version_string, "SSH-%d.%d-%.100s%s%s\r\n", 89 xasprintf(&server_version_string, "SSH-%d.%d-%.100s%s%s\r\n",
@@ -94,10 +94,10 @@ index eccf81bb..a5a1193d 100644
94 options.version_addendum); 94 options.version_addendum);
95 95
96diff --git a/sshd_config.5 b/sshd_config.5 96diff --git a/sshd_config.5 b/sshd_config.5
97index 7db25552..41e8c939 100644 97index 1a1c6dd0..45044a70 100644
98--- a/sshd_config.5 98--- a/sshd_config.5
99+++ b/sshd_config.5 99+++ b/sshd_config.5
100@@ -530,6 +530,11 @@ or 100@@ -531,6 +531,11 @@ or
101 .Cm no . 101 .Cm no .
102 The default is 102 The default is
103 .Cm yes . 103 .Cm yes .
diff --git a/debian/patches/debian-config.patch b/debian/patches/debian-config.patch
index a3f595752..ebf5d23bc 100644
--- a/debian/patches/debian-config.patch
+++ b/debian/patches/debian-config.patch
@@ -1,4 +1,4 @@
1From 4847e512c0b94c615b838904a5f139a761bee284 Mon Sep 17 00:00:00 2001 1From e8e09061f8168f6f105f56fca10b6cd61b9f587a Mon Sep 17 00:00:00 2001
2From: Colin Watson <cjwatson@debian.org> 2From: Colin Watson <cjwatson@debian.org>
3Date: Sun, 9 Feb 2014 16:10:18 +0000 3Date: Sun, 9 Feb 2014 16:10:18 +0000
4Subject: Various Debian-specific configuration changes 4Subject: Various Debian-specific configuration changes
@@ -39,10 +39,10 @@ Patch-Name: debian-config.patch
39 6 files changed, 77 insertions(+), 9 deletions(-) 39 6 files changed, 77 insertions(+), 9 deletions(-)
40 40
41diff --git a/readconf.c b/readconf.c 41diff --git a/readconf.c b/readconf.c
42index be3d5873..41f36aa8 100644 42index 50349e23..efcf2d62 100644
43--- a/readconf.c 43--- a/readconf.c
44+++ b/readconf.c 44+++ b/readconf.c
45@@ -1940,7 +1940,7 @@ fill_default_options(Options * options) 45@@ -1916,7 +1916,7 @@ fill_default_options(Options * options)
46 if (options->forward_x11 == -1) 46 if (options->forward_x11 == -1)
47 options->forward_x11 = 0; 47 options->forward_x11 = 0;
48 if (options->forward_x11_trusted == -1) 48 if (options->forward_x11_trusted == -1)
@@ -52,10 +52,10 @@ index be3d5873..41f36aa8 100644
52 options->forward_x11_timeout = 1200; 52 options->forward_x11_timeout = 1200;
53 /* 53 /*
54diff --git a/ssh.1 b/ssh.1 54diff --git a/ssh.1 b/ssh.1
55index 711fe608..f1b01c56 100644 55index f8fc26d2..8a03db95 100644
56--- a/ssh.1 56--- a/ssh.1
57+++ b/ssh.1 57+++ b/ssh.1
58@@ -764,6 +764,16 @@ directive in 58@@ -768,6 +768,16 @@ directive in
59 .Xr ssh_config 5 59 .Xr ssh_config 5
60 for more information. 60 for more information.
61 .Pp 61 .Pp
@@ -72,7 +72,7 @@ index 711fe608..f1b01c56 100644
72 .It Fl x 72 .It Fl x
73 Disables X11 forwarding. 73 Disables X11 forwarding.
74 .Pp 74 .Pp
75@@ -772,6 +782,17 @@ Enables trusted X11 forwarding. 75@@ -776,6 +786,17 @@ Enables trusted X11 forwarding.
76 Trusted X11 forwardings are not subjected to the X11 SECURITY extension 76 Trusted X11 forwardings are not subjected to the X11 SECURITY extension
77 controls. 77 controls.
78 .Pp 78 .Pp
@@ -114,7 +114,7 @@ index bcb9f153..1b676fb2 100644
114+ HashKnownHosts yes 114+ HashKnownHosts yes
115+ GSSAPIAuthentication yes 115+ GSSAPIAuthentication yes
116diff --git a/ssh_config.5 b/ssh_config.5 116diff --git a/ssh_config.5 b/ssh_config.5
117index 1edfe761..2da7029a 100644 117index ca052884..ed6e5d02 100644
118--- a/ssh_config.5 118--- a/ssh_config.5
119+++ b/ssh_config.5 119+++ b/ssh_config.5
120@@ -71,6 +71,22 @@ Since the first obtained value for each parameter is used, more 120@@ -71,6 +71,22 @@ Since the first obtained value for each parameter is used, more
@@ -140,7 +140,7 @@ index 1edfe761..2da7029a 100644
140 The file contains keyword-argument pairs, one per line. 140 The file contains keyword-argument pairs, one per line.
141 Lines starting with 141 Lines starting with
142 .Ql # 142 .Ql #
143@@ -683,11 +699,12 @@ elapsed. 143@@ -690,11 +706,12 @@ elapsed.
144 .It Cm ForwardX11Trusted 144 .It Cm ForwardX11Trusted
145 If this option is set to 145 If this option is set to
146 .Cm yes , 146 .Cm yes ,
@@ -155,10 +155,10 @@ index 1edfe761..2da7029a 100644
155 from stealing or tampering with data belonging to trusted X11 155 from stealing or tampering with data belonging to trusted X11
156 clients. 156 clients.
157diff --git a/sshd_config b/sshd_config 157diff --git a/sshd_config b/sshd_config
158index c01dd656..f68edf36 100644 158index 86263d71..de9cc9fe 100644
159--- a/sshd_config 159--- a/sshd_config
160+++ b/sshd_config 160+++ b/sshd_config
161@@ -58,8 +58,9 @@ AuthorizedKeysFile .ssh/authorized_keys 161@@ -57,8 +57,9 @@ AuthorizedKeysFile .ssh/authorized_keys
162 #PasswordAuthentication yes 162 #PasswordAuthentication yes
163 #PermitEmptyPasswords no 163 #PermitEmptyPasswords no
164 164
@@ -170,7 +170,7 @@ index c01dd656..f68edf36 100644
170 170
171 # Kerberos options 171 # Kerberos options
172 #KerberosAuthentication no 172 #KerberosAuthentication no
173@@ -82,16 +83,16 @@ AuthorizedKeysFile .ssh/authorized_keys 173@@ -81,16 +82,16 @@ AuthorizedKeysFile .ssh/authorized_keys
174 # If you just want the PAM account and session checks to run without 174 # If you just want the PAM account and session checks to run without
175 # PAM authentication, then enable this but set PasswordAuthentication 175 # PAM authentication, then enable this but set PasswordAuthentication
176 # and ChallengeResponseAuthentication to 'no'. 176 # and ChallengeResponseAuthentication to 'no'.
@@ -190,7 +190,7 @@ index c01dd656..f68edf36 100644
190 #PrintLastLog yes 190 #PrintLastLog yes
191 #TCPKeepAlive yes 191 #TCPKeepAlive yes
192 #UseLogin no 192 #UseLogin no
193@@ -109,8 +110,11 @@ AuthorizedKeysFile .ssh/authorized_keys 193@@ -108,8 +109,11 @@ AuthorizedKeysFile .ssh/authorized_keys
194 # no default banner path 194 # no default banner path
195 #Banner none 195 #Banner none
196 196
@@ -204,10 +204,10 @@ index c01dd656..f68edf36 100644
204 # Example of overriding settings on a per-user basis 204 # Example of overriding settings on a per-user basis
205 #Match User anoncvs 205 #Match User anoncvs
206diff --git a/sshd_config.5 b/sshd_config.5 206diff --git a/sshd_config.5 b/sshd_config.5
207index 79676a95..16be4f62 100644 207index 44b91846..4c7ee425 100644
208--- a/sshd_config.5 208--- a/sshd_config.5
209+++ b/sshd_config.5 209+++ b/sshd_config.5
210@@ -55,6 +55,28 @@ Arguments may optionally be enclosed in double quotes 210@@ -56,6 +56,28 @@ Arguments may optionally be enclosed in double quotes
211 .Pq \&" 211 .Pq \&"
212 in order to represent arguments containing spaces. 212 in order to represent arguments containing spaces.
213 .Pp 213 .Pp
diff --git a/debian/patches/dnssec-sshfp.patch b/debian/patches/dnssec-sshfp.patch
index a8d98855a..0ba825f4e 100644
--- a/debian/patches/dnssec-sshfp.patch
+++ b/debian/patches/dnssec-sshfp.patch
@@ -1,4 +1,4 @@
1From f500e89e2310f6308a998357d72d767e3b01553c Mon Sep 17 00:00:00 2001 1From 8c11a03efd47de883b52838735d6890ca8d4d9f8 Mon Sep 17 00:00:00 2001
2From: Colin Watson <cjwatson@debian.org> 2From: Colin Watson <cjwatson@debian.org>
3Date: Sun, 9 Feb 2014 16:10:01 +0000 3Date: Sun, 9 Feb 2014 16:10:01 +0000
4Subject: Force use of DNSSEC even if "options edns0" isn't in resolv.conf 4Subject: Force use of DNSSEC even if "options edns0" isn't in resolv.conf
@@ -18,10 +18,10 @@ Patch-Name: dnssec-sshfp.patch
18 3 files changed, 21 insertions(+), 6 deletions(-) 18 3 files changed, 21 insertions(+), 6 deletions(-)
19 19
20diff --git a/dns.c b/dns.c 20diff --git a/dns.c b/dns.c
21index 6e1abb53..8e0ca691 100644 21index ff1a2c41..82ec9719 100644
22--- a/dns.c 22--- a/dns.c
23+++ b/dns.c 23+++ b/dns.c
24@@ -206,6 +206,7 @@ verify_host_key_dns(const char *hostname, struct sockaddr *address, 24@@ -211,6 +211,7 @@ verify_host_key_dns(const char *hostname, struct sockaddr *address,
25 { 25 {
26 u_int counter; 26 u_int counter;
27 int result; 27 int result;
@@ -29,7 +29,7 @@ index 6e1abb53..8e0ca691 100644
29 struct rrsetinfo *fingerprints = NULL; 29 struct rrsetinfo *fingerprints = NULL;
30 30
31 u_int8_t hostkey_algorithm; 31 u_int8_t hostkey_algorithm;
32@@ -229,8 +230,19 @@ verify_host_key_dns(const char *hostname, struct sockaddr *address, 32@@ -234,8 +235,19 @@ verify_host_key_dns(const char *hostname, struct sockaddr *address,
33 return -1; 33 return -1;
34 } 34 }
35 35
diff --git a/debian/patches/doc-hash-tab-completion.patch b/debian/patches/doc-hash-tab-completion.patch
index c4342181d..86f3a1fc4 100644
--- a/debian/patches/doc-hash-tab-completion.patch
+++ b/debian/patches/doc-hash-tab-completion.patch
@@ -1,4 +1,4 @@
1From a07f7c1fe9d8dc3bfe4cb8bbe6bb5a27b638d024 Mon Sep 17 00:00:00 2001 1From 6765f629a8f5416b133d26e023a201193c33d8b5 Mon Sep 17 00:00:00 2001
2From: Colin Watson <cjwatson@debian.org> 2From: Colin Watson <cjwatson@debian.org>
3Date: Sun, 9 Feb 2014 16:10:11 +0000 3Date: Sun, 9 Feb 2014 16:10:11 +0000
4Subject: Document that HashKnownHosts may break tab-completion 4Subject: Document that HashKnownHosts may break tab-completion
@@ -13,10 +13,10 @@ Patch-Name: doc-hash-tab-completion.patch
13 1 file changed, 3 insertions(+) 13 1 file changed, 3 insertions(+)
14 14
15diff --git a/ssh_config.5 b/ssh_config.5 15diff --git a/ssh_config.5 b/ssh_config.5
16index 7810a418..1edfe761 100644 16index 84dcd52c..ca052884 100644
17--- a/ssh_config.5 17--- a/ssh_config.5
18+++ b/ssh_config.5 18+++ b/ssh_config.5
19@@ -777,6 +777,9 @@ Note that existing names and addresses in known hosts files 19@@ -784,6 +784,9 @@ Note that existing names and addresses in known hosts files
20 will not be converted automatically, 20 will not be converted automatically,
21 but may be manually hashed using 21 but may be manually hashed using
22 .Xr ssh-keygen 1 . 22 .Xr ssh-keygen 1 .
diff --git a/debian/patches/fix-regress-putty-transfer.patch b/debian/patches/fix-regress-putty-transfer.patch
deleted file mode 100644
index cfec3a9d2..000000000
--- a/debian/patches/fix-regress-putty-transfer.patch
+++ /dev/null
@@ -1,37 +0,0 @@
1From bd081a1ae125c7c6b2cfec89746d1298a306ad78 Mon Sep 17 00:00:00 2001
2From: Colin Watson <cjwatson@debian.org>
3Date: Tue, 16 Jan 2018 17:38:36 +0000
4Subject: Fix putty-transfer regression test
5
6The test key file is still called putty.rsa2, not putty.rsa.
7
8Forwarded: no
9Last-Update: 2018-01-16
10
11Patch-Name: fix-regress-putty-transfer.patch
12---
13 regress/putty-transfer.sh | 4 ++--
14 1 file changed, 2 insertions(+), 2 deletions(-)
15
16diff --git a/regress/putty-transfer.sh b/regress/putty-transfer.sh
17index 32c79f9e..57e46540 100644
18--- a/regress/putty-transfer.sh
19+++ b/regress/putty-transfer.sh
20@@ -15,7 +15,7 @@ for c in 0 1 ; do
21 ${OBJ}/.putty/sessions/compression_$c
22 echo "Compression=$c" >> ${OBJ}/.putty/sessions/kex_$k
23 env HOME=$PWD ${PLINK} -load compression_$c -batch \
24- -i putty.rsa cat ${DATA} > ${COPY}
25+ -i putty.rsa2 cat ${DATA} > ${COPY}
26 if [ $? -ne 0 ]; then
27 fail "ssh cat $DATA failed"
28 fi
29@@ -26,7 +26,7 @@ for c in 0 1 ; do
30 rm -f ${COPY}
31 dd if=$DATA obs=${s} 2> /dev/null | \
32 env HOME=$PWD ${PLINK} -load compression_$c \
33- -batch -i putty.rsa \
34+ -batch -i putty.rsa2 \
35 "cat > ${COPY}"
36 if [ $? -ne 0 ]; then
37 fail "ssh cat $DATA failed"
diff --git a/debian/patches/gnome-ssh-askpass2-icon.patch b/debian/patches/gnome-ssh-askpass2-icon.patch
index e46c0f8b2..2959854e4 100644
--- a/debian/patches/gnome-ssh-askpass2-icon.patch
+++ b/debian/patches/gnome-ssh-askpass2-icon.patch
@@ -1,4 +1,4 @@
1From 18950b79898be885c6b77d463367639647e54e28 Mon Sep 17 00:00:00 2001 1From 4ccb07d2ebea1b01b56a455790224ce97a0b36e8 Mon Sep 17 00:00:00 2001
2From: Vincent Untz <vuntz@ubuntu.com> 2From: Vincent Untz <vuntz@ubuntu.com>
3Date: Sun, 9 Feb 2014 16:10:16 +0000 3Date: Sun, 9 Feb 2014 16:10:16 +0000
4Subject: Give the ssh-askpass-gnome window a default icon 4Subject: Give the ssh-askpass-gnome window a default icon
diff --git a/debian/patches/gssapi.patch b/debian/patches/gssapi.patch
index 0726a5020..a67ebced0 100644
--- a/debian/patches/gssapi.patch
+++ b/debian/patches/gssapi.patch
@@ -1,4 +1,4 @@
1From 4e70490950e5c5134df48848affaf73685bf0284 Mon Sep 17 00:00:00 2001 1From cb427e23bf78d65407c78d868c4ef525dbfaa68f Mon Sep 17 00:00:00 2001
2From: Simon Wilkinson <simon@sxw.org.uk> 2From: Simon Wilkinson <simon@sxw.org.uk>
3Date: Sun, 9 Feb 2014 16:09:48 +0000 3Date: Sun, 9 Feb 2014 16:09:48 +0000
4Subject: GSSAPI key exchange support 4Subject: GSSAPI key exchange support
@@ -181,10 +181,10 @@ index 00000000..f117a336
181+ (from jbasney AT ncsa.uiuc.edu) 181+ (from jbasney AT ncsa.uiuc.edu)
182+ <gssapi-with-mic support is Bugzilla #1008> 182+ <gssapi-with-mic support is Bugzilla #1008>
183diff --git a/Makefile.in b/Makefile.in 183diff --git a/Makefile.in b/Makefile.in
184index c52ce191..f6e9fe4c 100644 184index 04e1c8e5..6f3f042b 100644
185--- a/Makefile.in 185--- a/Makefile.in
186+++ b/Makefile.in 186+++ b/Makefile.in
187@@ -92,6 +92,7 @@ LIBSSH_OBJS=${LIBOPENSSH_OBJS} \ 187@@ -100,6 +100,7 @@ LIBSSH_OBJS=${LIBOPENSSH_OBJS} \
188 kex.o kexdh.o kexgex.o kexecdh.o kexc25519.o \ 188 kex.o kexdh.o kexgex.o kexecdh.o kexc25519.o \
189 kexdhc.o kexgexc.o kexecdhc.o kexc25519c.o \ 189 kexdhc.o kexgexc.o kexecdhc.o kexc25519c.o \
190 kexdhs.o kexgexs.o kexecdhs.o kexc25519s.o \ 190 kexdhs.o kexgexs.o kexecdhs.o kexc25519s.o \
@@ -192,7 +192,7 @@ index c52ce191..f6e9fe4c 100644
192 platform-pledge.o platform-tracing.o platform-misc.o 192 platform-pledge.o platform-tracing.o platform-misc.o
193 193
194 SSHOBJS= ssh.o readconf.o clientloop.o sshtty.o \ 194 SSHOBJS= ssh.o readconf.o clientloop.o sshtty.o \
195@@ -105,7 +106,7 @@ SSHDOBJS=sshd.o auth-rhosts.o auth-passwd.o \ 195@@ -113,7 +114,7 @@ SSHDOBJS=sshd.o auth-rhosts.o auth-passwd.o \
196 auth-skey.o auth-bsdauth.o auth2-hostbased.o auth2-kbdint.o \ 196 auth-skey.o auth-bsdauth.o auth2-hostbased.o auth2-kbdint.o \
197 auth2-none.o auth2-passwd.o auth2-pubkey.o \ 197 auth2-none.o auth2-passwd.o auth2-pubkey.o \
198 monitor.o monitor_wrap.o auth-krb5.o \ 198 monitor.o monitor_wrap.o auth-krb5.o \
@@ -253,10 +253,10 @@ index a5a81ed2..38e7fee2 100644
253 return (krb5_cc_resolve(ctx, ccname, ccache)); 253 return (krb5_cc_resolve(ctx, ccname, ccache));
254 } 254 }
255diff --git a/auth.c b/auth.c 255diff --git a/auth.c b/auth.c
256index a4490617..6aec3605 100644 256index 63366768..76d586e3 100644
257--- a/auth.c 257--- a/auth.c
258+++ b/auth.c 258+++ b/auth.c
259@@ -395,7 +395,8 @@ auth_root_allowed(const char *method) 259@@ -396,7 +396,8 @@ auth_root_allowed(struct ssh *ssh, const char *method)
260 case PERMIT_NO_PASSWD: 260 case PERMIT_NO_PASSWD:
261 if (strcmp(method, "publickey") == 0 || 261 if (strcmp(method, "publickey") == 0 ||
262 strcmp(method, "hostbased") == 0 || 262 strcmp(method, "hostbased") == 0 ||
@@ -266,7 +266,7 @@ index a4490617..6aec3605 100644
266 return 1; 266 return 1;
267 break; 267 break;
268 case PERMIT_FORCED_ONLY: 268 case PERMIT_FORCED_ONLY:
269@@ -727,99 +728,6 @@ fakepw(void) 269@@ -728,99 +729,6 @@ fakepw(void)
270 return (&fake); 270 return (&fake);
271 } 271 }
272 272
@@ -455,7 +455,7 @@ index 589283b7..fd411d3a 100644
455 "gssapi-with-mic", 455 "gssapi-with-mic",
456 userauth_gssapi, 456 userauth_gssapi,
457diff --git a/auth2.c b/auth2.c 457diff --git a/auth2.c b/auth2.c
458index 862e0996..54070e3a 100644 458index e0034229..c34f58c4 100644
459--- a/auth2.c 459--- a/auth2.c
460+++ b/auth2.c 460+++ b/auth2.c
461@@ -72,6 +72,7 @@ extern Authmethod method_passwd; 461@@ -72,6 +72,7 @@ extern Authmethod method_passwd;
@@ -593,7 +593,7 @@ index 26d62855..0cadc9f1 100644
593 int get_peer_port(int); 593 int get_peer_port(int);
594 char *get_local_ipaddr(int); 594 char *get_local_ipaddr(int);
595diff --git a/clientloop.c b/clientloop.c 595diff --git a/clientloop.c b/clientloop.c
596index 791d336e..0010b833 100644 596index 7bcf22e3..ef803e98 100644
597--- a/clientloop.c 597--- a/clientloop.c
598+++ b/clientloop.c 598+++ b/clientloop.c
599@@ -112,6 +112,10 @@ 599@@ -112,6 +112,10 @@
@@ -607,7 +607,7 @@ index 791d336e..0010b833 100644
607 /* import options */ 607 /* import options */
608 extern Options options; 608 extern Options options;
609 609
610@@ -1349,9 +1353,18 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg, 610@@ -1335,9 +1339,18 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg,
611 break; 611 break;
612 612
613 /* Do channel operations unless rekeying in progress. */ 613 /* Do channel operations unless rekeying in progress. */
@@ -628,10 +628,10 @@ index 791d336e..0010b833 100644
628 client_process_net_input(readset); 628 client_process_net_input(readset);
629 629
630diff --git a/config.h.in b/config.h.in 630diff --git a/config.h.in b/config.h.in
631index 63fc548b..0b244fd5 100644 631index 57208740..4c9545c7 100644
632--- a/config.h.in 632--- a/config.h.in
633+++ b/config.h.in 633+++ b/config.h.in
634@@ -1696,6 +1696,9 @@ 634@@ -1746,6 +1746,9 @@
635 /* Use btmp to log bad logins */ 635 /* Use btmp to log bad logins */
636 #undef USE_BTMP 636 #undef USE_BTMP
637 637
@@ -641,7 +641,7 @@ index 63fc548b..0b244fd5 100644
641 /* Use libedit for sftp */ 641 /* Use libedit for sftp */
642 #undef USE_LIBEDIT 642 #undef USE_LIBEDIT
643 643
644@@ -1711,6 +1714,9 @@ 644@@ -1761,6 +1764,9 @@
645 /* Use PIPES instead of a socketpair() */ 645 /* Use PIPES instead of a socketpair() */
646 #undef USE_PIPES 646 #undef USE_PIPES
647 647
@@ -652,10 +652,10 @@ index 63fc548b..0b244fd5 100644
652 #undef USE_SOLARIS_PRIVS 652 #undef USE_SOLARIS_PRIVS
653 653
654diff --git a/configure.ac b/configure.ac 654diff --git a/configure.ac b/configure.ac
655index 889f5063..84bfad8c 100644 655index 663062be..1cd5eab6 100644
656--- a/configure.ac 656--- a/configure.ac
657+++ b/configure.ac 657+++ b/configure.ac
658@@ -621,6 +621,30 @@ main() { if (NSVersionOfRunTimeLibrary("System") >= (60 << 16)) 658@@ -664,6 +664,30 @@ main() { if (NSVersionOfRunTimeLibrary("System") >= (60 << 16))
659 [Use tunnel device compatibility to OpenBSD]) 659 [Use tunnel device compatibility to OpenBSD])
660 AC_DEFINE([SSH_TUN_PREPEND_AF], [1], 660 AC_DEFINE([SSH_TUN_PREPEND_AF], [1],
661 [Prepend the address family to IP tunnel traffic]) 661 [Prepend the address family to IP tunnel traffic])
@@ -1435,7 +1435,7 @@ index 6cae720e..967c6cfb 100644
1435 1435
1436 /* Privileged */ 1436 /* Privileged */
1437diff --git a/kex.c b/kex.c 1437diff --git a/kex.c b/kex.c
1438index d5d5a9da..bb1bd661 100644 1438index 15ea28b0..6cc2935f 100644
1439--- a/kex.c 1439--- a/kex.c
1440+++ b/kex.c 1440+++ b/kex.c
1441@@ -54,6 +54,10 @@ 1441@@ -54,6 +54,10 @@
@@ -1475,7 +1475,7 @@ index d5d5a9da..bb1bd661 100644
1475 return NULL; 1475 return NULL;
1476 } 1476 }
1477 1477
1478@@ -601,6 +617,9 @@ kex_free(struct kex *kex) 1478@@ -599,6 +615,9 @@ kex_free(struct kex *kex)
1479 sshbuf_free(kex->peer); 1479 sshbuf_free(kex->peer);
1480 sshbuf_free(kex->my); 1480 sshbuf_free(kex->my);
1481 free(kex->session_id); 1481 free(kex->session_id);
@@ -2170,10 +2170,10 @@ index 00000000..38ca082b
2170+} 2170+}
2171+#endif /* GSSAPI */ 2171+#endif /* GSSAPI */
2172diff --git a/monitor.c b/monitor.c 2172diff --git a/monitor.c b/monitor.c
2173index f517da48..cabfeb8a 100644 2173index c68e1b0d..868fb0d2 100644
2174--- a/monitor.c 2174--- a/monitor.c
2175+++ b/monitor.c 2175+++ b/monitor.c
2176@@ -157,6 +157,8 @@ int mm_answer_gss_setup_ctx(int, Buffer *); 2176@@ -158,6 +158,8 @@ int mm_answer_gss_setup_ctx(int, Buffer *);
2177 int mm_answer_gss_accept_ctx(int, Buffer *); 2177 int mm_answer_gss_accept_ctx(int, Buffer *);
2178 int mm_answer_gss_userok(int, Buffer *); 2178 int mm_answer_gss_userok(int, Buffer *);
2179 int mm_answer_gss_checkmic(int, Buffer *); 2179 int mm_answer_gss_checkmic(int, Buffer *);
@@ -2182,7 +2182,7 @@ index f517da48..cabfeb8a 100644
2182 #endif 2182 #endif
2183 2183
2184 #ifdef SSH_AUDIT_EVENTS 2184 #ifdef SSH_AUDIT_EVENTS
2185@@ -230,11 +232,18 @@ struct mon_table mon_dispatch_proto20[] = { 2185@@ -232,11 +234,18 @@ struct mon_table mon_dispatch_proto20[] = {
2186 {MONITOR_REQ_GSSSTEP, 0, mm_answer_gss_accept_ctx}, 2186 {MONITOR_REQ_GSSSTEP, 0, mm_answer_gss_accept_ctx},
2187 {MONITOR_REQ_GSSUSEROK, MON_ONCE|MON_AUTHDECIDE, mm_answer_gss_userok}, 2187 {MONITOR_REQ_GSSUSEROK, MON_ONCE|MON_AUTHDECIDE, mm_answer_gss_userok},
2188 {MONITOR_REQ_GSSCHECKMIC, MON_ONCE, mm_answer_gss_checkmic}, 2188 {MONITOR_REQ_GSSCHECKMIC, MON_ONCE, mm_answer_gss_checkmic},
@@ -2201,7 +2201,7 @@ index f517da48..cabfeb8a 100644
2201 #ifdef WITH_OPENSSL 2201 #ifdef WITH_OPENSSL
2202 {MONITOR_REQ_MODULI, 0, mm_answer_moduli}, 2202 {MONITOR_REQ_MODULI, 0, mm_answer_moduli},
2203 #endif 2203 #endif
2204@@ -302,6 +311,10 @@ monitor_child_preauth(Authctxt *_authctxt, struct monitor *pmonitor) 2204@@ -306,6 +315,10 @@ monitor_child_preauth(Authctxt *_authctxt, struct monitor *pmonitor)
2205 /* Permit requests for moduli and signatures */ 2205 /* Permit requests for moduli and signatures */
2206 monitor_permit(mon_dispatch, MONITOR_REQ_MODULI, 1); 2206 monitor_permit(mon_dispatch, MONITOR_REQ_MODULI, 1);
2207 monitor_permit(mon_dispatch, MONITOR_REQ_SIGN, 1); 2207 monitor_permit(mon_dispatch, MONITOR_REQ_SIGN, 1);
@@ -2212,7 +2212,7 @@ index f517da48..cabfeb8a 100644
2212 2212
2213 /* The first few requests do not require asynchronous access */ 2213 /* The first few requests do not require asynchronous access */
2214 while (!authenticated) { 2214 while (!authenticated) {
2215@@ -408,6 +421,10 @@ monitor_child_postauth(struct monitor *pmonitor) 2215@@ -415,6 +428,10 @@ monitor_child_postauth(struct monitor *pmonitor)
2216 monitor_permit(mon_dispatch, MONITOR_REQ_MODULI, 1); 2216 monitor_permit(mon_dispatch, MONITOR_REQ_MODULI, 1);
2217 monitor_permit(mon_dispatch, MONITOR_REQ_SIGN, 1); 2217 monitor_permit(mon_dispatch, MONITOR_REQ_SIGN, 1);
2218 monitor_permit(mon_dispatch, MONITOR_REQ_TERM, 1); 2218 monitor_permit(mon_dispatch, MONITOR_REQ_TERM, 1);
@@ -2221,9 +2221,9 @@ index f517da48..cabfeb8a 100644
2221+ monitor_permit(mon_dispatch, MONITOR_REQ_GSSSETUP, 1); 2221+ monitor_permit(mon_dispatch, MONITOR_REQ_GSSSETUP, 1);
2222+#endif 2222+#endif
2223 2223
2224 if (!no_pty_flag) { 2224 if (auth_opts->permit_pty_flag) {
2225 monitor_permit(mon_dispatch, MONITOR_REQ_PTY, 1); 2225 monitor_permit(mon_dispatch, MONITOR_REQ_PTY, 1);
2226@@ -1626,6 +1643,13 @@ monitor_apply_keystate(struct monitor *pmonitor) 2226@@ -1652,6 +1669,13 @@ monitor_apply_keystate(struct monitor *pmonitor)
2227 # endif 2227 # endif
2228 #endif /* WITH_OPENSSL */ 2228 #endif /* WITH_OPENSSL */
2229 kex->kex[KEX_C25519_SHA256] = kexc25519_server; 2229 kex->kex[KEX_C25519_SHA256] = kexc25519_server;
@@ -2237,7 +2237,7 @@ index f517da48..cabfeb8a 100644
2237 kex->load_host_public_key=&get_hostkey_public_by_type; 2237 kex->load_host_public_key=&get_hostkey_public_by_type;
2238 kex->load_host_private_key=&get_hostkey_private_by_type; 2238 kex->load_host_private_key=&get_hostkey_private_by_type;
2239 kex->host_key_index=&get_hostkey_index; 2239 kex->host_key_index=&get_hostkey_index;
2240@@ -1714,8 +1738,8 @@ mm_answer_gss_setup_ctx(int sock, Buffer *m) 2240@@ -1740,8 +1764,8 @@ mm_answer_gss_setup_ctx(int sock, Buffer *m)
2241 OM_uint32 major; 2241 OM_uint32 major;
2242 u_int len; 2242 u_int len;
2243 2243
@@ -2248,7 +2248,7 @@ index f517da48..cabfeb8a 100644
2248 2248
2249 goid.elements = buffer_get_string(m, &len); 2249 goid.elements = buffer_get_string(m, &len);
2250 goid.length = len; 2250 goid.length = len;
2251@@ -1744,8 +1768,8 @@ mm_answer_gss_accept_ctx(int sock, Buffer *m) 2251@@ -1770,8 +1794,8 @@ mm_answer_gss_accept_ctx(int sock, Buffer *m)
2252 OM_uint32 flags = 0; /* GSI needs this */ 2252 OM_uint32 flags = 0; /* GSI needs this */
2253 u_int len; 2253 u_int len;
2254 2254
@@ -2259,7 +2259,7 @@ index f517da48..cabfeb8a 100644
2259 2259
2260 in.value = buffer_get_string(m, &len); 2260 in.value = buffer_get_string(m, &len);
2261 in.length = len; 2261 in.length = len;
2262@@ -1764,6 +1788,7 @@ mm_answer_gss_accept_ctx(int sock, Buffer *m) 2262@@ -1790,6 +1814,7 @@ mm_answer_gss_accept_ctx(int sock, Buffer *m)
2263 monitor_permit(mon_dispatch, MONITOR_REQ_GSSSTEP, 0); 2263 monitor_permit(mon_dispatch, MONITOR_REQ_GSSSTEP, 0);
2264 monitor_permit(mon_dispatch, MONITOR_REQ_GSSUSEROK, 1); 2264 monitor_permit(mon_dispatch, MONITOR_REQ_GSSUSEROK, 1);
2265 monitor_permit(mon_dispatch, MONITOR_REQ_GSSCHECKMIC, 1); 2265 monitor_permit(mon_dispatch, MONITOR_REQ_GSSCHECKMIC, 1);
@@ -2267,7 +2267,7 @@ index f517da48..cabfeb8a 100644
2267 } 2267 }
2268 return (0); 2268 return (0);
2269 } 2269 }
2270@@ -1775,8 +1800,8 @@ mm_answer_gss_checkmic(int sock, Buffer *m) 2270@@ -1801,8 +1826,8 @@ mm_answer_gss_checkmic(int sock, Buffer *m)
2271 OM_uint32 ret; 2271 OM_uint32 ret;
2272 u_int len; 2272 u_int len;
2273 2273
@@ -2278,7 +2278,7 @@ index f517da48..cabfeb8a 100644
2278 2278
2279 gssbuf.value = buffer_get_string(m, &len); 2279 gssbuf.value = buffer_get_string(m, &len);
2280 gssbuf.length = len; 2280 gssbuf.length = len;
2281@@ -1805,10 +1830,11 @@ mm_answer_gss_userok(int sock, Buffer *m) 2281@@ -1831,10 +1856,11 @@ mm_answer_gss_userok(int sock, Buffer *m)
2282 int authenticated; 2282 int authenticated;
2283 const char *displayname; 2283 const char *displayname;
2284 2284
@@ -2293,7 +2293,7 @@ index f517da48..cabfeb8a 100644
2293 2293
2294 buffer_clear(m); 2294 buffer_clear(m);
2295 buffer_put_int(m, authenticated); 2295 buffer_put_int(m, authenticated);
2296@@ -1824,5 +1850,76 @@ mm_answer_gss_userok(int sock, Buffer *m) 2296@@ -1850,5 +1876,76 @@ mm_answer_gss_userok(int sock, Buffer *m)
2297 /* Monitor loop will terminate if authenticated */ 2297 /* Monitor loop will terminate if authenticated */
2298 return (authenticated); 2298 return (authenticated);
2299 } 2299 }
@@ -2385,10 +2385,10 @@ index d68f6745..ec41404c 100644
2385 2385
2386 struct monitor { 2386 struct monitor {
2387diff --git a/monitor_wrap.c b/monitor_wrap.c 2387diff --git a/monitor_wrap.c b/monitor_wrap.c
2388index 69212aaf..0e171a6a 100644 2388index 9666bda4..e749efc1 100644
2389--- a/monitor_wrap.c 2389--- a/monitor_wrap.c
2390+++ b/monitor_wrap.c 2390+++ b/monitor_wrap.c
2391@@ -937,7 +937,7 @@ mm_ssh_gssapi_checkmic(Gssctxt *ctx, gss_buffer_t gssbuf, gss_buffer_t gssmic) 2391@@ -943,7 +943,7 @@ mm_ssh_gssapi_checkmic(Gssctxt *ctx, gss_buffer_t gssbuf, gss_buffer_t gssmic)
2392 } 2392 }
2393 2393
2394 int 2394 int
@@ -2397,7 +2397,7 @@ index 69212aaf..0e171a6a 100644
2397 { 2397 {
2398 Buffer m; 2398 Buffer m;
2399 int authenticated = 0; 2399 int authenticated = 0;
2400@@ -954,5 +954,50 @@ mm_ssh_gssapi_userok(char *user) 2400@@ -960,5 +960,50 @@ mm_ssh_gssapi_userok(char *user)
2401 debug3("%s: user %sauthenticated",__func__, authenticated ? "" : "not "); 2401 debug3("%s: user %sauthenticated",__func__, authenticated ? "" : "not ");
2402 return (authenticated); 2402 return (authenticated);
2403 } 2403 }
@@ -2449,10 +2449,10 @@ index 69212aaf..0e171a6a 100644
2449 #endif /* GSSAPI */ 2449 #endif /* GSSAPI */
2450 2450
2451diff --git a/monitor_wrap.h b/monitor_wrap.h 2451diff --git a/monitor_wrap.h b/monitor_wrap.h
2452index 9e032d20..7b2e8945 100644 2452index 76233270..0970d1f8 100644
2453--- a/monitor_wrap.h 2453--- a/monitor_wrap.h
2454+++ b/monitor_wrap.h 2454+++ b/monitor_wrap.h
2455@@ -57,8 +57,10 @@ int mm_sshkey_verify(const struct sshkey *, const u_char *, size_t, 2455@@ -60,8 +60,10 @@ int mm_sshkey_verify(const struct sshkey *, const u_char *, size_t,
2456 OM_uint32 mm_ssh_gssapi_server_ctx(Gssctxt **, gss_OID); 2456 OM_uint32 mm_ssh_gssapi_server_ctx(Gssctxt **, gss_OID);
2457 OM_uint32 mm_ssh_gssapi_accept_ctx(Gssctxt *, 2457 OM_uint32 mm_ssh_gssapi_accept_ctx(Gssctxt *,
2458 gss_buffer_desc *, gss_buffer_desc *, OM_uint32 *); 2458 gss_buffer_desc *, gss_buffer_desc *, OM_uint32 *);
@@ -2465,7 +2465,7 @@ index 9e032d20..7b2e8945 100644
2465 2465
2466 #ifdef USE_PAM 2466 #ifdef USE_PAM
2467diff --git a/readconf.c b/readconf.c 2467diff --git a/readconf.c b/readconf.c
2468index f63894f9..99e03ee1 100644 2468index 88051db5..c8e79299 100644
2469--- a/readconf.c 2469--- a/readconf.c
2470+++ b/readconf.c 2470+++ b/readconf.c
2471@@ -160,6 +160,8 @@ typedef enum { 2471@@ -160,6 +160,8 @@ typedef enum {
@@ -2498,7 +2498,7 @@ index f63894f9..99e03ee1 100644
2498 #endif 2498 #endif
2499 #ifdef ENABLE_PKCS11 2499 #ifdef ENABLE_PKCS11
2500 { "smartcarddevice", oPKCS11Provider }, 2500 { "smartcarddevice", oPKCS11Provider },
2501@@ -976,10 +988,30 @@ parse_time: 2501@@ -950,10 +962,30 @@ parse_time:
2502 intptr = &options->gss_authentication; 2502 intptr = &options->gss_authentication;
2503 goto parse_flag; 2503 goto parse_flag;
2504 2504
@@ -2529,7 +2529,7 @@ index f63894f9..99e03ee1 100644
2529 case oBatchMode: 2529 case oBatchMode:
2530 intptr = &options->batch_mode; 2530 intptr = &options->batch_mode;
2531 goto parse_flag; 2531 goto parse_flag;
2532@@ -1790,7 +1822,12 @@ initialize_options(Options * options) 2532@@ -1765,7 +1797,12 @@ initialize_options(Options * options)
2533 options->pubkey_authentication = -1; 2533 options->pubkey_authentication = -1;
2534 options->challenge_response_authentication = -1; 2534 options->challenge_response_authentication = -1;
2535 options->gss_authentication = -1; 2535 options->gss_authentication = -1;
@@ -2542,7 +2542,7 @@ index f63894f9..99e03ee1 100644
2542 options->password_authentication = -1; 2542 options->password_authentication = -1;
2543 options->kbd_interactive_authentication = -1; 2543 options->kbd_interactive_authentication = -1;
2544 options->kbd_interactive_devices = NULL; 2544 options->kbd_interactive_devices = NULL;
2545@@ -1930,8 +1967,14 @@ fill_default_options(Options * options) 2545@@ -1906,8 +1943,14 @@ fill_default_options(Options * options)
2546 options->challenge_response_authentication = 1; 2546 options->challenge_response_authentication = 1;
2547 if (options->gss_authentication == -1) 2547 if (options->gss_authentication == -1)
2548 options->gss_authentication = 0; 2548 options->gss_authentication = 0;
@@ -2558,7 +2558,7 @@ index f63894f9..99e03ee1 100644
2558 options->password_authentication = 1; 2558 options->password_authentication = 1;
2559 if (options->kbd_interactive_authentication == -1) 2559 if (options->kbd_interactive_authentication == -1)
2560diff --git a/readconf.h b/readconf.h 2560diff --git a/readconf.h b/readconf.h
2561index 22fe5c18..d61161a8 100644 2561index f4d9e2b2..f469daaf 100644
2562--- a/readconf.h 2562--- a/readconf.h
2563+++ b/readconf.h 2563+++ b/readconf.h
2564@@ -42,7 +42,12 @@ typedef struct { 2564@@ -42,7 +42,12 @@ typedef struct {
@@ -2575,10 +2575,10 @@ index 22fe5c18..d61161a8 100644
2575 * authentication. */ 2575 * authentication. */
2576 int kbd_interactive_authentication; /* Try keyboard-interactive auth. */ 2576 int kbd_interactive_authentication; /* Try keyboard-interactive auth. */
2577diff --git a/servconf.c b/servconf.c 2577diff --git a/servconf.c b/servconf.c
2578index 2c321a4a..8ba74517 100644 2578index 0f0d0906..cbbea05b 100644
2579--- a/servconf.c 2579--- a/servconf.c
2580+++ b/servconf.c 2580+++ b/servconf.c
2581@@ -113,8 +113,10 @@ initialize_server_options(ServerOptions *options) 2581@@ -123,8 +123,10 @@ initialize_server_options(ServerOptions *options)
2582 options->kerberos_ticket_cleanup = -1; 2582 options->kerberos_ticket_cleanup = -1;
2583 options->kerberos_get_afs_token = -1; 2583 options->kerberos_get_afs_token = -1;
2584 options->gss_authentication=-1; 2584 options->gss_authentication=-1;
@@ -2589,7 +2589,7 @@ index 2c321a4a..8ba74517 100644
2589 options->password_authentication = -1; 2589 options->password_authentication = -1;
2590 options->kbd_interactive_authentication = -1; 2590 options->kbd_interactive_authentication = -1;
2591 options->challenge_response_authentication = -1; 2591 options->challenge_response_authentication = -1;
2592@@ -268,10 +270,14 @@ fill_default_server_options(ServerOptions *options) 2592@@ -315,10 +317,14 @@ fill_default_server_options(ServerOptions *options)
2593 options->kerberos_get_afs_token = 0; 2593 options->kerberos_get_afs_token = 0;
2594 if (options->gss_authentication == -1) 2594 if (options->gss_authentication == -1)
2595 options->gss_authentication = 0; 2595 options->gss_authentication = 0;
@@ -2604,7 +2604,7 @@ index 2c321a4a..8ba74517 100644
2604 if (options->password_authentication == -1) 2604 if (options->password_authentication == -1)
2605 options->password_authentication = 1; 2605 options->password_authentication = 1;
2606 if (options->kbd_interactive_authentication == -1) 2606 if (options->kbd_interactive_authentication == -1)
2607@@ -410,6 +416,7 @@ typedef enum { 2607@@ -461,6 +467,7 @@ typedef enum {
2608 sHostKeyAlgorithms, 2608 sHostKeyAlgorithms,
2609 sClientAliveInterval, sClientAliveCountMax, sAuthorizedKeysFile, 2609 sClientAliveInterval, sClientAliveCountMax, sAuthorizedKeysFile,
2610 sGssAuthentication, sGssCleanupCreds, sGssStrictAcceptor, 2610 sGssAuthentication, sGssCleanupCreds, sGssStrictAcceptor,
@@ -2612,7 +2612,7 @@ index 2c321a4a..8ba74517 100644
2612 sAcceptEnv, sPermitTunnel, 2612 sAcceptEnv, sPermitTunnel,
2613 sMatch, sPermitOpen, sForceCommand, sChrootDirectory, 2613 sMatch, sPermitOpen, sForceCommand, sChrootDirectory,
2614 sUsePrivilegeSeparation, sAllowAgentForwarding, 2614 sUsePrivilegeSeparation, sAllowAgentForwarding,
2615@@ -484,12 +491,20 @@ static struct { 2615@@ -535,12 +542,20 @@ static struct {
2616 #ifdef GSSAPI 2616 #ifdef GSSAPI
2617 { "gssapiauthentication", sGssAuthentication, SSHCFG_ALL }, 2617 { "gssapiauthentication", sGssAuthentication, SSHCFG_ALL },
2618 { "gssapicleanupcredentials", sGssCleanupCreds, SSHCFG_GLOBAL }, 2618 { "gssapicleanupcredentials", sGssCleanupCreds, SSHCFG_GLOBAL },
@@ -2633,7 +2633,7 @@ index 2c321a4a..8ba74517 100644
2633 { "passwordauthentication", sPasswordAuthentication, SSHCFG_ALL }, 2633 { "passwordauthentication", sPasswordAuthentication, SSHCFG_ALL },
2634 { "kbdinteractiveauthentication", sKbdInteractiveAuthentication, SSHCFG_ALL }, 2634 { "kbdinteractiveauthentication", sKbdInteractiveAuthentication, SSHCFG_ALL },
2635 { "challengeresponseauthentication", sChallengeResponseAuthentication, SSHCFG_GLOBAL }, 2635 { "challengeresponseauthentication", sChallengeResponseAuthentication, SSHCFG_GLOBAL },
2636@@ -1253,6 +1268,10 @@ process_server_config_line(ServerOptions *options, char *line, 2636@@ -1407,6 +1422,10 @@ process_server_config_line(ServerOptions *options, char *line,
2637 intptr = &options->gss_authentication; 2637 intptr = &options->gss_authentication;
2638 goto parse_flag; 2638 goto parse_flag;
2639 2639
@@ -2644,7 +2644,7 @@ index 2c321a4a..8ba74517 100644
2644 case sGssCleanupCreds: 2644 case sGssCleanupCreds:
2645 intptr = &options->gss_cleanup_creds; 2645 intptr = &options->gss_cleanup_creds;
2646 goto parse_flag; 2646 goto parse_flag;
2647@@ -1261,6 +1280,10 @@ process_server_config_line(ServerOptions *options, char *line, 2647@@ -1415,6 +1434,10 @@ process_server_config_line(ServerOptions *options, char *line,
2648 intptr = &options->gss_strict_acceptor; 2648 intptr = &options->gss_strict_acceptor;
2649 goto parse_flag; 2649 goto parse_flag;
2650 2650
@@ -2655,7 +2655,7 @@ index 2c321a4a..8ba74517 100644
2655 case sPasswordAuthentication: 2655 case sPasswordAuthentication:
2656 intptr = &options->password_authentication; 2656 intptr = &options->password_authentication;
2657 goto parse_flag; 2657 goto parse_flag;
2658@@ -2301,7 +2324,10 @@ dump_config(ServerOptions *o) 2658@@ -2453,7 +2476,10 @@ dump_config(ServerOptions *o)
2659 #endif 2659 #endif
2660 #ifdef GSSAPI 2660 #ifdef GSSAPI
2661 dump_cfg_fmtint(sGssAuthentication, o->gss_authentication); 2661 dump_cfg_fmtint(sGssAuthentication, o->gss_authentication);
@@ -2667,10 +2667,10 @@ index 2c321a4a..8ba74517 100644
2667 dump_cfg_fmtint(sPasswordAuthentication, o->password_authentication); 2667 dump_cfg_fmtint(sPasswordAuthentication, o->password_authentication);
2668 dump_cfg_fmtint(sKbdInteractiveAuthentication, 2668 dump_cfg_fmtint(sKbdInteractiveAuthentication,
2669diff --git a/servconf.h b/servconf.h 2669diff --git a/servconf.h b/servconf.h
2670index 1dca702e..641e93c8 100644 2670index 37a0fb1a..5dfc9bc0 100644
2671--- a/servconf.h 2671--- a/servconf.h
2672+++ b/servconf.h 2672+++ b/servconf.h
2673@@ -119,8 +119,10 @@ typedef struct { 2673@@ -130,8 +130,10 @@ typedef struct {
2674 int kerberos_get_afs_token; /* If true, try to get AFS token if 2674 int kerberos_get_afs_token; /* If true, try to get AFS token if
2675 * authenticated with Kerberos. */ 2675 * authenticated with Kerberos. */
2676 int gss_authentication; /* If true, permit GSSAPI authentication */ 2676 int gss_authentication; /* If true, permit GSSAPI authentication */
@@ -2799,10 +2799,10 @@ index c12f5ef5..bcb9f153 100644
2799 # CheckHostIP yes 2799 # CheckHostIP yes
2800 # AddressFamily any 2800 # AddressFamily any
2801diff --git a/ssh_config.5 b/ssh_config.5 2801diff --git a/ssh_config.5 b/ssh_config.5
2802index eab8dd01..9a06a757 100644 2802index 71705cab..66826aa7 100644
2803--- a/ssh_config.5 2803--- a/ssh_config.5
2804+++ b/ssh_config.5 2804+++ b/ssh_config.5
2805@@ -720,10 +720,42 @@ The default is 2805@@ -727,10 +727,42 @@ The default is
2806 Specifies whether user authentication based on GSSAPI is allowed. 2806 Specifies whether user authentication based on GSSAPI is allowed.
2807 The default is 2807 The default is
2808 .Cm no . 2808 .Cm no .
@@ -2846,7 +2846,7 @@ index eab8dd01..9a06a757 100644
2846 Indicates that 2846 Indicates that
2847 .Xr ssh 1 2847 .Xr ssh 1
2848diff --git a/sshconnect2.c b/sshconnect2.c 2848diff --git a/sshconnect2.c b/sshconnect2.c
2849index be9397e4..c22477f5 100644 2849index 1f4a74cf..83562c68 100644
2850--- a/sshconnect2.c 2850--- a/sshconnect2.c
2851+++ b/sshconnect2.c 2851+++ b/sshconnect2.c
2852@@ -162,6 +162,11 @@ ssh_kex2(char *host, struct sockaddr *hostaddr, u_short port) 2852@@ -162,6 +162,11 @@ ssh_kex2(char *host, struct sockaddr *hostaddr, u_short port)
@@ -2959,7 +2959,7 @@ index be9397e4..c22477f5 100644
2959 {"gssapi-with-mic", 2959 {"gssapi-with-mic",
2960 userauth_gssapi, 2960 userauth_gssapi,
2961 NULL, 2961 NULL,
2962@@ -654,25 +720,40 @@ userauth_gssapi(Authctxt *authctxt) 2962@@ -643,25 +709,40 @@ userauth_gssapi(Authctxt *authctxt)
2963 static u_int mech = 0; 2963 static u_int mech = 0;
2964 OM_uint32 min; 2964 OM_uint32 min;
2965 int ok = 0; 2965 int ok = 0;
@@ -3002,7 +3002,7 @@ index be9397e4..c22477f5 100644
3002 if (!ok) 3002 if (!ok)
3003 return 0; 3003 return 0;
3004 3004
3005@@ -763,8 +844,8 @@ input_gssapi_response(int type, u_int32_t plen, struct ssh *ssh) 3005@@ -752,8 +833,8 @@ input_gssapi_response(int type, u_int32_t plen, struct ssh *ssh)
3006 { 3006 {
3007 Authctxt *authctxt = ssh->authctxt; 3007 Authctxt *authctxt = ssh->authctxt;
3008 Gssctxt *gssctxt; 3008 Gssctxt *gssctxt;
@@ -3013,7 +3013,7 @@ index be9397e4..c22477f5 100644
3013 3013
3014 if (authctxt == NULL) 3014 if (authctxt == NULL)
3015 fatal("input_gssapi_response: no authentication context"); 3015 fatal("input_gssapi_response: no authentication context");
3016@@ -877,6 +958,48 @@ input_gssapi_error(int type, u_int32_t plen, struct ssh *ssh) 3016@@ -866,6 +947,48 @@ input_gssapi_error(int type, u_int32_t plen, struct ssh *ssh)
3017 free(lang); 3017 free(lang);
3018 return 0; 3018 return 0;
3019 } 3019 }
@@ -3063,10 +3063,10 @@ index be9397e4..c22477f5 100644
3063 3063
3064 int 3064 int
3065diff --git a/sshd.c b/sshd.c 3065diff --git a/sshd.c b/sshd.c
3066index 51a1aaf6..45e50fac 100644 3066index fd95b681..e88185ef 100644
3067--- a/sshd.c 3067--- a/sshd.c
3068+++ b/sshd.c 3068+++ b/sshd.c
3069@@ -122,6 +122,10 @@ 3069@@ -123,6 +123,10 @@
3070 #include "version.h" 3070 #include "version.h"
3071 #include "ssherr.h" 3071 #include "ssherr.h"
3072 3072
@@ -3077,7 +3077,7 @@ index 51a1aaf6..45e50fac 100644
3077 /* Re-exec fds */ 3077 /* Re-exec fds */
3078 #define REEXEC_DEVCRYPTO_RESERVED_FD (STDERR_FILENO + 1) 3078 #define REEXEC_DEVCRYPTO_RESERVED_FD (STDERR_FILENO + 1)
3079 #define REEXEC_STARTUP_PIPE_FD (STDERR_FILENO + 2) 3079 #define REEXEC_STARTUP_PIPE_FD (STDERR_FILENO + 2)
3080@@ -529,7 +533,7 @@ privsep_preauth_child(void) 3080@@ -531,7 +535,7 @@ privsep_preauth_child(void)
3081 3081
3082 #ifdef GSSAPI 3082 #ifdef GSSAPI
3083 /* Cache supported mechanism OIDs for later use */ 3083 /* Cache supported mechanism OIDs for later use */
@@ -3086,7 +3086,7 @@ index 51a1aaf6..45e50fac 100644
3086 ssh_gssapi_prepare_supported_oids(); 3086 ssh_gssapi_prepare_supported_oids();
3087 #endif 3087 #endif
3088 3088
3089@@ -1708,10 +1712,13 @@ main(int ac, char **av) 3089@@ -1753,10 +1757,13 @@ main(int ac, char **av)
3090 key ? "private" : "agent", i, sshkey_ssh_name(pubkey), fp); 3090 key ? "private" : "agent", i, sshkey_ssh_name(pubkey), fp);
3091 free(fp); 3091 free(fp);
3092 } 3092 }
@@ -3100,8 +3100,8 @@ index 51a1aaf6..45e50fac 100644
3100 3100
3101 /* 3101 /*
3102 * Load certificates. They are stored in an array at identical 3102 * Load certificates. They are stored in an array at identical
3103@@ -1987,6 +1994,60 @@ main(int ac, char **av) 3103@@ -2047,6 +2054,60 @@ main(int ac, char **av)
3104 remote_ip, remote_port, laddr, ssh_local_port(ssh)); 3104 rdomain == NULL ? "" : "\"");
3105 free(laddr); 3105 free(laddr);
3106 3106
3107+#ifdef USE_SECURITY_SESSION_API 3107+#ifdef USE_SECURITY_SESSION_API
@@ -3161,7 +3161,7 @@ index 51a1aaf6..45e50fac 100644
3161 /* 3161 /*
3162 * We don't want to listen forever unless the other side 3162 * We don't want to listen forever unless the other side
3163 * successfully authenticates itself. So we set up an alarm which is 3163 * successfully authenticates itself. So we set up an alarm which is
3164@@ -2170,6 +2231,48 @@ do_ssh2_kex(void) 3164@@ -2234,6 +2295,48 @@ do_ssh2_kex(void)
3165 myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = compat_pkalg_proposal( 3165 myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = compat_pkalg_proposal(
3166 list_hostkey_types()); 3166 list_hostkey_types());
3167 3167
@@ -3210,7 +3210,7 @@ index 51a1aaf6..45e50fac 100644
3210 /* start key exchange */ 3210 /* start key exchange */
3211 if ((r = kex_setup(active_state, myproposal)) != 0) 3211 if ((r = kex_setup(active_state, myproposal)) != 0)
3212 fatal("kex_setup: %s", ssh_err(r)); 3212 fatal("kex_setup: %s", ssh_err(r));
3213@@ -2187,6 +2290,13 @@ do_ssh2_kex(void) 3213@@ -2251,6 +2354,13 @@ do_ssh2_kex(void)
3214 # endif 3214 # endif
3215 #endif 3215 #endif
3216 kex->kex[KEX_C25519_SHA256] = kexc25519_server; 3216 kex->kex[KEX_C25519_SHA256] = kexc25519_server;
@@ -3225,10 +3225,10 @@ index 51a1aaf6..45e50fac 100644
3225 kex->client_version_string=client_version_string; 3225 kex->client_version_string=client_version_string;
3226 kex->server_version_string=server_version_string; 3226 kex->server_version_string=server_version_string;
3227diff --git a/sshd_config b/sshd_config 3227diff --git a/sshd_config b/sshd_config
3228index 4eb2e02e..c01dd656 100644 3228index 3109d5d7..86263d71 100644
3229--- a/sshd_config 3229--- a/sshd_config
3230+++ b/sshd_config 3230+++ b/sshd_config
3231@@ -70,6 +70,8 @@ AuthorizedKeysFile .ssh/authorized_keys 3231@@ -69,6 +69,8 @@ AuthorizedKeysFile .ssh/authorized_keys
3232 # GSSAPI options 3232 # GSSAPI options
3233 #GSSAPIAuthentication no 3233 #GSSAPIAuthentication no
3234 #GSSAPICleanupCredentials yes 3234 #GSSAPICleanupCredentials yes
@@ -3238,10 +3238,10 @@ index 4eb2e02e..c01dd656 100644
3238 # Set this to 'yes' to enable PAM authentication, account processing, 3238 # Set this to 'yes' to enable PAM authentication, account processing,
3239 # and session processing. If this is enabled, PAM authentication will 3239 # and session processing. If this is enabled, PAM authentication will
3240diff --git a/sshd_config.5 b/sshd_config.5 3240diff --git a/sshd_config.5 b/sshd_config.5
3241index 251b7467..0dbcb8da 100644 3241index e3c7c393..c4a3f3cb 100644
3242--- a/sshd_config.5 3242--- a/sshd_config.5
3243+++ b/sshd_config.5 3243+++ b/sshd_config.5
3244@@ -635,6 +635,11 @@ The default is 3244@@ -636,6 +636,11 @@ The default is
3245 Specifies whether user authentication based on GSSAPI is allowed. 3245 Specifies whether user authentication based on GSSAPI is allowed.
3246 The default is 3246 The default is
3247 .Cm no . 3247 .Cm no .
@@ -3253,7 +3253,7 @@ index 251b7467..0dbcb8da 100644
3253 .It Cm GSSAPICleanupCredentials 3253 .It Cm GSSAPICleanupCredentials
3254 Specifies whether to automatically destroy the user's credentials cache 3254 Specifies whether to automatically destroy the user's credentials cache
3255 on logout. 3255 on logout.
3256@@ -654,6 +659,11 @@ machine's default store. 3256@@ -655,6 +660,11 @@ machine's default store.
3257 This facility is provided to assist with operation on multi homed machines. 3257 This facility is provided to assist with operation on multi homed machines.
3258 The default is 3258 The default is
3259 .Cm yes . 3259 .Cm yes .
@@ -3266,10 +3266,10 @@ index 251b7467..0dbcb8da 100644
3266 Specifies the key types that will be accepted for hostbased authentication 3266 Specifies the key types that will be accepted for hostbased authentication
3267 as a comma-separated pattern list. 3267 as a comma-separated pattern list.
3268diff --git a/sshkey.c b/sshkey.c 3268diff --git a/sshkey.c b/sshkey.c
3269index e91c54f5..c2cf0e03 100644 3269index 7712fba2..08887286 100644
3270--- a/sshkey.c 3270--- a/sshkey.c
3271+++ b/sshkey.c 3271+++ b/sshkey.c
3272@@ -112,6 +112,7 @@ static const struct keytype keytypes[] = { 3272@@ -122,6 +122,7 @@ static const struct keytype keytypes[] = {
3273 # endif /* OPENSSL_HAS_NISTP521 */ 3273 # endif /* OPENSSL_HAS_NISTP521 */
3274 # endif /* OPENSSL_HAS_ECC */ 3274 # endif /* OPENSSL_HAS_ECC */
3275 #endif /* WITH_OPENSSL */ 3275 #endif /* WITH_OPENSSL */
@@ -3277,7 +3277,7 @@ index e91c54f5..c2cf0e03 100644
3277 { NULL, NULL, -1, -1, 0, 0 } 3277 { NULL, NULL, -1, -1, 0, 0 }
3278 }; 3278 };
3279 3279
3280@@ -200,7 +201,7 @@ sshkey_alg_list(int certs_only, int plain_only, int include_sigonly, char sep) 3280@@ -210,7 +211,7 @@ sshkey_alg_list(int certs_only, int plain_only, int include_sigonly, char sep)
3281 const struct keytype *kt; 3281 const struct keytype *kt;
3282 3282
3283 for (kt = keytypes; kt->type != -1; kt++) { 3283 for (kt = keytypes; kt->type != -1; kt++) {
@@ -3287,13 +3287,13 @@ index e91c54f5..c2cf0e03 100644
3287 if (!include_sigonly && kt->sigonly) 3287 if (!include_sigonly && kt->sigonly)
3288 continue; 3288 continue;
3289diff --git a/sshkey.h b/sshkey.h 3289diff --git a/sshkey.h b/sshkey.h
3290index 9093eac5..b5d020cb 100644 3290index 155cd45a..4e89049f 100644
3291--- a/sshkey.h 3291--- a/sshkey.h
3292+++ b/sshkey.h 3292+++ b/sshkey.h
3293@@ -61,6 +61,7 @@ enum sshkey_types { 3293@@ -63,6 +63,7 @@ enum sshkey_types {
3294 KEY_DSA_CERT,
3295 KEY_ECDSA_CERT,
3296 KEY_ED25519_CERT, 3294 KEY_ED25519_CERT,
3295 KEY_XMSS,
3296 KEY_XMSS_CERT,
3297+ KEY_NULL, 3297+ KEY_NULL,
3298 KEY_UNSPEC 3298 KEY_UNSPEC
3299 }; 3299 };
diff --git a/debian/patches/keepalive-extensions.patch b/debian/patches/keepalive-extensions.patch
index d3eca5924..68fa28e5c 100644
--- a/debian/patches/keepalive-extensions.patch
+++ b/debian/patches/keepalive-extensions.patch
@@ -1,4 +1,4 @@
1From c147d4dbab74e0dbf738beb9d9f4220534ae9da6 Mon Sep 17 00:00:00 2001 1From a7045c36e6e072c8f9250fbe11cf2f9db9f51a08 Mon Sep 17 00:00:00 2001
2From: Richard Kettlewell <rjk@greenend.org.uk> 2From: Richard Kettlewell <rjk@greenend.org.uk>
3Date: Sun, 9 Feb 2014 16:09:52 +0000 3Date: Sun, 9 Feb 2014 16:09:52 +0000
4Subject: Various keepalive extensions 4Subject: Various keepalive extensions
@@ -26,7 +26,7 @@ Patch-Name: keepalive-extensions.patch
26 3 files changed, 34 insertions(+), 4 deletions(-) 26 3 files changed, 34 insertions(+), 4 deletions(-)
27 27
28diff --git a/readconf.c b/readconf.c 28diff --git a/readconf.c b/readconf.c
29index d2b28a41..45caa095 100644 29index 1f1be778..7f2b5c17 100644
30--- a/readconf.c 30--- a/readconf.c
31+++ b/readconf.c 31+++ b/readconf.c
32@@ -174,6 +174,7 @@ typedef enum { 32@@ -174,6 +174,7 @@ typedef enum {
@@ -37,7 +37,7 @@ index d2b28a41..45caa095 100644
37 oIgnore, oIgnoredUnknownOption, oDeprecated, oUnsupported 37 oIgnore, oIgnoredUnknownOption, oDeprecated, oUnsupported
38 } OpCodes; 38 } OpCodes;
39 39
40@@ -318,6 +319,8 @@ static struct { 40@@ -319,6 +320,8 @@ static struct {
41 { "pubkeyacceptedkeytypes", oPubkeyAcceptedKeyTypes }, 41 { "pubkeyacceptedkeytypes", oPubkeyAcceptedKeyTypes },
42 { "ignoreunknown", oIgnoreUnknown }, 42 { "ignoreunknown", oIgnoreUnknown },
43 { "proxyjump", oProxyJump }, 43 { "proxyjump", oProxyJump },
@@ -46,7 +46,7 @@ index d2b28a41..45caa095 100644
46 46
47 { NULL, oBadOption } 47 { NULL, oBadOption }
48 }; 48 };
49@@ -1406,6 +1409,8 @@ parse_keytypes: 49@@ -1378,6 +1381,8 @@ parse_keytypes:
50 goto parse_flag; 50 goto parse_flag;
51 51
52 case oServerAliveInterval: 52 case oServerAliveInterval:
@@ -55,7 +55,7 @@ index d2b28a41..45caa095 100644
55 intptr = &options->server_alive_interval; 55 intptr = &options->server_alive_interval;
56 goto parse_time; 56 goto parse_time;
57 57
58@@ -2042,8 +2047,13 @@ fill_default_options(Options * options) 58@@ -2019,8 +2024,13 @@ fill_default_options(Options * options)
59 options->rekey_interval = 0; 59 options->rekey_interval = 0;
60 if (options->verify_host_key_dns == -1) 60 if (options->verify_host_key_dns == -1)
61 options->verify_host_key_dns = 0; 61 options->verify_host_key_dns = 0;
@@ -72,7 +72,7 @@ index d2b28a41..45caa095 100644
72 options->server_alive_count_max = 3; 72 options->server_alive_count_max = 3;
73 if (options->control_master == -1) 73 if (options->control_master == -1)
74diff --git a/ssh_config.5 b/ssh_config.5 74diff --git a/ssh_config.5 b/ssh_config.5
75index 9a06a757..d6f43c2d 100644 75index 66826aa7..32c3632c 100644
76--- a/ssh_config.5 76--- a/ssh_config.5
77+++ b/ssh_config.5 77+++ b/ssh_config.5
78@@ -247,8 +247,12 @@ Valid arguments are 78@@ -247,8 +247,12 @@ Valid arguments are
@@ -89,7 +89,7 @@ index 9a06a757..d6f43c2d 100644
89 The argument must be 89 The argument must be
90 .Cm yes 90 .Cm yes
91 or 91 or
92@@ -1455,7 +1459,14 @@ from the server, 92@@ -1463,7 +1467,14 @@ from the server,
93 will send a message through the encrypted 93 will send a message through the encrypted
94 channel to request a response from the server. 94 channel to request a response from the server.
95 The default 95 The default
@@ -105,7 +105,7 @@ index 9a06a757..d6f43c2d 100644
105 .It Cm StreamLocalBindMask 105 .It Cm StreamLocalBindMask
106 Sets the octal file creation mode mask 106 Sets the octal file creation mode mask
107 .Pq umask 107 .Pq umask
108@@ -1529,6 +1540,12 @@ Specifies whether the system should send TCP keepalive messages to the 108@@ -1537,6 +1548,12 @@ Specifies whether the system should send TCP keepalive messages to the
109 other side. 109 other side.
110 If they are sent, death of the connection or crash of one 110 If they are sent, death of the connection or crash of one
111 of the machines will be properly noticed. 111 of the machines will be properly noticed.
@@ -119,10 +119,10 @@ index 9a06a757..d6f43c2d 100644
119 connections will die if the route is down temporarily, and some people 119 connections will die if the route is down temporarily, and some people
120 find it annoying. 120 find it annoying.
121diff --git a/sshd_config.5 b/sshd_config.5 121diff --git a/sshd_config.5 b/sshd_config.5
122index 0dbcb8da..7db25552 100644 122index c4a3f3cb..1a1c6dd0 100644
123--- a/sshd_config.5 123--- a/sshd_config.5
124+++ b/sshd_config.5 124+++ b/sshd_config.5
125@@ -1454,6 +1454,9 @@ This avoids infinitely hanging sessions. 125@@ -1495,6 +1495,9 @@ This avoids infinitely hanging sessions.
126 .Pp 126 .Pp
127 To disable TCP keepalive messages, the value should be set to 127 To disable TCP keepalive messages, the value should be set to
128 .Cm no . 128 .Cm no .
diff --git a/debian/patches/mention-ssh-keygen-on-keychange.patch b/debian/patches/mention-ssh-keygen-on-keychange.patch
index 3edb37705..542b42ae9 100644
--- a/debian/patches/mention-ssh-keygen-on-keychange.patch
+++ b/debian/patches/mention-ssh-keygen-on-keychange.patch
@@ -1,4 +1,4 @@
1From 19be4218cdb262f7b584b0104ee430de0e24eeb8 Mon Sep 17 00:00:00 2001 1From 76ab788bcf265360e1b88f8ced6085198c320fdd Mon Sep 17 00:00:00 2001
2From: Scott Moser <smoser@ubuntu.com> 2From: Scott Moser <smoser@ubuntu.com>
3Date: Sun, 9 Feb 2014 16:10:03 +0000 3Date: Sun, 9 Feb 2014 16:10:03 +0000
4Subject: Mention ssh-keygen in ssh fingerprint changed warning 4Subject: Mention ssh-keygen in ssh fingerprint changed warning
@@ -14,10 +14,10 @@ Patch-Name: mention-ssh-keygen-on-keychange.patch
14 1 file changed, 8 insertions(+), 1 deletion(-) 14 1 file changed, 8 insertions(+), 1 deletion(-)
15 15
16diff --git a/sshconnect.c b/sshconnect.c 16diff --git a/sshconnect.c b/sshconnect.c
17index 5eed5880..7ce2716c 100644 17index 8ab01c0e..58f9eac8 100644
18--- a/sshconnect.c 18--- a/sshconnect.c
19+++ b/sshconnect.c 19+++ b/sshconnect.c
20@@ -1022,9 +1022,13 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, 20@@ -1141,9 +1141,13 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port,
21 error("%s. This could either mean that", key_msg); 21 error("%s. This could either mean that", key_msg);
22 error("DNS SPOOFING is happening or the IP address for the host"); 22 error("DNS SPOOFING is happening or the IP address for the host");
23 error("and its host key have changed at the same time."); 23 error("and its host key have changed at the same time.");
@@ -32,7 +32,7 @@ index 5eed5880..7ce2716c 100644
32 } 32 }
33 /* The host key has changed. */ 33 /* The host key has changed. */
34 warn_changed_key(host_key); 34 warn_changed_key(host_key);
35@@ -1033,6 +1037,9 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port, 35@@ -1152,6 +1156,9 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port,
36 error("Offending %s key in %s:%lu", 36 error("Offending %s key in %s:%lu",
37 sshkey_type(host_found->key), 37 sshkey_type(host_found->key),
38 host_found->file, host_found->line); 38 host_found->file, host_found->line);
diff --git a/debian/patches/no-dsa-host-key-by-default.patch b/debian/patches/no-dsa-host-key-by-default.patch
deleted file mode 100644
index c24ff4e3f..000000000
--- a/debian/patches/no-dsa-host-key-by-default.patch
+++ /dev/null
@@ -1,83 +0,0 @@
1From 922f3a7599d03234b6bb2ffb22a33624e7cf1953 Mon Sep 17 00:00:00 2001
2From: Colin Watson <cjwatson@debian.org>
3Date: Mon, 16 Jan 2017 13:53:04 +0000
4Subject: Remove ssh_host_dsa_key from HostKey default
5
6The client no longer accepts DSA host keys, and servers using the
7default HostKey setting should have better host keys available.
8
9Bug: https://bugzilla.mindrot.org/show_bug.cgi?id=2662
10Bug-Debian: https://bugs.debian.org/850614
11Last-Update: 2017-01-16
12
13Patch-Name: no-dsa-host-key-by-default.patch
14---
15 servconf.c | 2 --
16 sshd.8 | 7 +++----
17 sshd_config | 1 -
18 sshd_config.5 | 7 +++----
19 4 files changed, 6 insertions(+), 11 deletions(-)
20
21diff --git a/servconf.c b/servconf.c
22index b0146405..5e996cf8 100644
23--- a/servconf.c
24+++ b/servconf.c
25@@ -205,8 +205,6 @@ fill_default_server_options(ServerOptions *options)
26 /* fill default hostkeys for protocols */
27 options->host_key_files[options->num_host_key_files++] =
28 _PATH_HOST_RSA_KEY_FILE;
29- options->host_key_files[options->num_host_key_files++] =
30- _PATH_HOST_DSA_KEY_FILE;
31 #ifdef OPENSSL_HAS_ECC
32 options->host_key_files[options->num_host_key_files++] =
33 _PATH_HOST_ECDSA_KEY_FILE;
34diff --git a/sshd.8 b/sshd.8
35index 02c5e1df..8c230657 100644
36--- a/sshd.8
37+++ b/sshd.8
38@@ -164,11 +164,10 @@ This option must be given if
39 is not run as root (as the normal
40 host key files are normally not readable by anyone but root).
41 The default is
42-.Pa /etc/ssh/ssh_host_dsa_key ,
43-.Pa /etc/ssh/ssh_host_ecdsa_key ,
44-.Pa /etc/ssh/ssh_host_ed25519_key
45+.Pa /etc/ssh/ssh_host_rsa_key ,
46+.Pa /etc/ssh/ssh_host_ecdsa_key
47 and
48-.Pa /etc/ssh/ssh_host_rsa_key .
49+.Pa /etc/ssh/ssh_host_ed25519_key .
50 It is possible to have multiple host key files for
51 the different host key algorithms.
52 .It Fl i
53diff --git a/sshd_config b/sshd_config
54index f68edf36..92822959 100644
55--- a/sshd_config
56+++ b/sshd_config
57@@ -16,7 +16,6 @@
58 #ListenAddress ::
59
60 #HostKey /etc/ssh/ssh_host_rsa_key
61-#HostKey /etc/ssh/ssh_host_dsa_key
62 #HostKey /etc/ssh/ssh_host_ecdsa_key
63 #HostKey /etc/ssh/ssh_host_ed25519_key
64
65diff --git a/sshd_config.5 b/sshd_config.5
66index 16be4f62..ef520680 100644
67--- a/sshd_config.5
68+++ b/sshd_config.5
69@@ -749,11 +749,10 @@ is not to load any certificates.
70 Specifies a file containing a private host key
71 used by SSH.
72 The defaults are
73-.Pa /etc/ssh/ssh_host_dsa_key ,
74-.Pa /etc/ssh/ssh_host_ecdsa_key ,
75-.Pa /etc/ssh/ssh_host_ed25519_key
76+.Pa /etc/ssh/ssh_host_rsa_key ,
77+.Pa /etc/ssh/ssh_host_ecdsa_key
78 and
79-.Pa /etc/ssh/ssh_host_rsa_key .
80+.Pa /etc/ssh/ssh_host_ed25519_key .
81 .Pp
82 Note that
83 .Xr sshd 8
diff --git a/debian/patches/no-openssl-version-status.patch b/debian/patches/no-openssl-version-status.patch
index cbfaebfe0..f6646ca20 100644
--- a/debian/patches/no-openssl-version-status.patch
+++ b/debian/patches/no-openssl-version-status.patch
@@ -1,4 +1,4 @@
1From b614a7f9148af821919165be47c6c29f59dc6b44 Mon Sep 17 00:00:00 2001 1From 7cdc2be2d56f5f49c9f2557d056bf2c15a141a79 Mon Sep 17 00:00:00 2001
2From: Kurt Roeckx <kurt@roeckx.be> 2From: Kurt Roeckx <kurt@roeckx.be>
3Date: Sun, 9 Feb 2014 16:10:14 +0000 3Date: Sun, 9 Feb 2014 16:10:14 +0000
4Subject: Don't check the status field of the OpenSSL version 4Subject: Don't check the status field of the OpenSSL version
diff --git a/debian/patches/openbsd-docs.patch b/debian/patches/openbsd-docs.patch
index 9297decd6..a9e8aac29 100644
--- a/debian/patches/openbsd-docs.patch
+++ b/debian/patches/openbsd-docs.patch
@@ -1,4 +1,4 @@
1From 7e53354725eeb002e6126a73fd5f294ed9f9b03e Mon Sep 17 00:00:00 2001 1From c3d9231e598560dfe63a56a422439d263a2c3ebe Mon Sep 17 00:00:00 2001
2From: Colin Watson <cjwatson@debian.org> 2From: Colin Watson <cjwatson@debian.org>
3Date: Sun, 9 Feb 2014 16:10:09 +0000 3Date: Sun, 9 Feb 2014 16:10:09 +0000
4Subject: Adjust various OpenBSD-specific references in manual pages 4Subject: Adjust various OpenBSD-specific references in manual pages
@@ -44,7 +44,7 @@ index ef0de085..149846c8 100644
44 .Sh SEE ALSO 44 .Sh SEE ALSO
45 .Xr ssh-keygen 1 , 45 .Xr ssh-keygen 1 ,
46diff --git a/ssh-keygen.1 b/ssh-keygen.1 46diff --git a/ssh-keygen.1 b/ssh-keygen.1
47index 5f1ec09b..dfbc65dd 100644 47index 3525d7d1..39767e62 100644
48--- a/ssh-keygen.1 48--- a/ssh-keygen.1
49+++ b/ssh-keygen.1 49+++ b/ssh-keygen.1
50@@ -176,9 +176,7 @@ key in 50@@ -176,9 +176,7 @@ key in
@@ -69,7 +69,7 @@ index 5f1ec09b..dfbc65dd 100644
69 .It Fl a Ar rounds 69 .It Fl a Ar rounds
70 When saving a new-format private key (i.e. an ed25519 key or when the 70 When saving a new-format private key (i.e. an ed25519 key or when the
71 .Fl o 71 .Fl o
72@@ -676,7 +672,7 @@ option. 72@@ -685,7 +681,7 @@ option.
73 Valid generator values are 2, 3, and 5. 73 Valid generator values are 2, 3, and 5.
74 .Pp 74 .Pp
75 Screened DH groups may be installed in 75 Screened DH groups may be installed in
@@ -78,7 +78,7 @@ index 5f1ec09b..dfbc65dd 100644
78 It is important that this file contains moduli of a range of bit lengths and 78 It is important that this file contains moduli of a range of bit lengths and
79 that both ends of a connection share common moduli. 79 that both ends of a connection share common moduli.
80 .Sh CERTIFICATES 80 .Sh CERTIFICATES
81@@ -863,7 +859,7 @@ on all machines 81@@ -872,7 +868,7 @@ on all machines
82 where the user wishes to log in using public key authentication. 82 where the user wishes to log in using public key authentication.
83 There is no need to keep the contents of this file secret. 83 There is no need to keep the contents of this file secret.
84 .Pp 84 .Pp
@@ -88,10 +88,10 @@ index 5f1ec09b..dfbc65dd 100644
88 The file format is described in 88 The file format is described in
89 .Xr moduli 5 . 89 .Xr moduli 5 .
90diff --git a/ssh.1 b/ssh.1 90diff --git a/ssh.1 b/ssh.1
91index 3cc94688..2a2aab30 100644 91index 0ef7c170..54e21d88 100644
92--- a/ssh.1 92--- a/ssh.1
93+++ b/ssh.1 93+++ b/ssh.1
94@@ -842,6 +842,10 @@ implements public key authentication protocol automatically, 94@@ -846,6 +846,10 @@ implements public key authentication protocol automatically,
95 using one of the DSA, ECDSA, Ed25519 or RSA algorithms. 95 using one of the DSA, ECDSA, Ed25519 or RSA algorithms.
96 The HISTORY section of 96 The HISTORY section of
97 .Xr ssl 8 97 .Xr ssl 8
@@ -103,7 +103,7 @@ index 3cc94688..2a2aab30 100644
103 .Pp 103 .Pp
104 The file 104 The file
105diff --git a/sshd.8 b/sshd.8 105diff --git a/sshd.8 b/sshd.8
106index 2ed523a2..02c5e1df 100644 106index c8299d5e..378aeb9f 100644
107--- a/sshd.8 107--- a/sshd.8
108+++ b/sshd.8 108+++ b/sshd.8
109@@ -65,7 +65,7 @@ over an insecure network. 109@@ -65,7 +65,7 @@ over an insecure network.
@@ -115,7 +115,7 @@ index 2ed523a2..02c5e1df 100644
115 It forks a new 115 It forks a new
116 daemon for each incoming connection. 116 daemon for each incoming connection.
117 The forked daemons handle 117 The forked daemons handle
118@@ -850,7 +850,7 @@ This file is for host-based authentication (see 118@@ -856,7 +856,7 @@ This file is for host-based authentication (see
119 .Xr ssh 1 ) . 119 .Xr ssh 1 ) .
120 It should only be writable by root. 120 It should only be writable by root.
121 .Pp 121 .Pp
@@ -124,7 +124,7 @@ index 2ed523a2..02c5e1df 100644
124 Contains Diffie-Hellman groups used for the "Diffie-Hellman Group Exchange" 124 Contains Diffie-Hellman groups used for the "Diffie-Hellman Group Exchange"
125 key exchange method. 125 key exchange method.
126 The file format is described in 126 The file format is described in
127@@ -950,7 +950,6 @@ The content of this file is not sensitive; it can be world-readable. 127@@ -954,7 +954,6 @@ The content of this file is not sensitive; it can be world-readable.
128 .Xr ssh-keyscan 1 , 128 .Xr ssh-keyscan 1 ,
129 .Xr chroot 2 , 129 .Xr chroot 2 ,
130 .Xr hosts_access 5 , 130 .Xr hosts_access 5 ,
@@ -133,10 +133,10 @@ index 2ed523a2..02c5e1df 100644
133 .Xr sshd_config 5 , 133 .Xr sshd_config 5 ,
134 .Xr inetd 8 , 134 .Xr inetd 8 ,
135diff --git a/sshd_config.5 b/sshd_config.5 135diff --git a/sshd_config.5 b/sshd_config.5
136index 41e8c939..79676a95 100644 136index 45044a70..44b91846 100644
137--- a/sshd_config.5 137--- a/sshd_config.5
138+++ b/sshd_config.5 138+++ b/sshd_config.5
139@@ -382,8 +382,7 @@ then no banner is displayed. 139@@ -383,8 +383,7 @@ then no banner is displayed.
140 By default, no banner is displayed. 140 By default, no banner is displayed.
141 .It Cm ChallengeResponseAuthentication 141 .It Cm ChallengeResponseAuthentication
142 Specifies whether challenge-response authentication is allowed (e.g. via 142 Specifies whether challenge-response authentication is allowed (e.g. via
diff --git a/debian/patches/package-versioning.patch b/debian/patches/package-versioning.patch
index 0d851e68c..db144f505 100644
--- a/debian/patches/package-versioning.patch
+++ b/debian/patches/package-versioning.patch
@@ -1,4 +1,4 @@
1From 326b09bce8058629980cc92f289fd7912269eb98 Mon Sep 17 00:00:00 2001 1From 52359fc0d6ee73ee6e24332b2777dc8abdaed652 Mon Sep 17 00:00:00 2001
2From: Matthew Vernon <matthew@debian.org> 2From: Matthew Vernon <matthew@debian.org>
3Date: Sun, 9 Feb 2014 16:10:05 +0000 3Date: Sun, 9 Feb 2014 16:10:05 +0000
4Subject: Include the Debian version in our identification 4Subject: Include the Debian version in our identification
@@ -19,10 +19,10 @@ Patch-Name: package-versioning.patch
19 3 files changed, 8 insertions(+), 3 deletions(-) 19 3 files changed, 8 insertions(+), 3 deletions(-)
20 20
21diff --git a/sshconnect.c b/sshconnect.c 21diff --git a/sshconnect.c b/sshconnect.c
22index 7ce2716c..3280b310 100644 22index 58f9eac8..15d8b807 100644
23--- a/sshconnect.c 23--- a/sshconnect.c
24+++ b/sshconnect.c 24+++ b/sshconnect.c
25@@ -517,7 +517,7 @@ send_client_banner(int connection_out, int minor1) 25@@ -638,7 +638,7 @@ send_client_banner(int connection_out, int minor1)
26 { 26 {
27 /* Send our own protocol version identification. */ 27 /* Send our own protocol version identification. */
28 xasprintf(&client_version_string, "SSH-%d.%d-%.100s\r\n", 28 xasprintf(&client_version_string, "SSH-%d.%d-%.100s\r\n",
@@ -32,10 +32,10 @@ index 7ce2716c..3280b310 100644
32 strlen(client_version_string)) != strlen(client_version_string)) 32 strlen(client_version_string)) != strlen(client_version_string))
33 fatal("write: %.100s", strerror(errno)); 33 fatal("write: %.100s", strerror(errno));
34diff --git a/sshd.c b/sshd.c 34diff --git a/sshd.c b/sshd.c
35index af1ec337..eccf81bb 100644 35index 6d911c19..9a7f5495 100644
36--- a/sshd.c 36--- a/sshd.c
37+++ b/sshd.c 37+++ b/sshd.c
38@@ -378,7 +378,7 @@ sshd_exchange_identification(struct ssh *ssh, int sock_in, int sock_out) 38@@ -384,7 +384,7 @@ sshd_exchange_identification(struct ssh *ssh, int sock_in, int sock_out)
39 char remote_version[256]; /* Must be at least as big as buf. */ 39 char remote_version[256]; /* Must be at least as big as buf. */
40 40
41 xasprintf(&server_version_string, "SSH-%d.%d-%.100s%s%s\r\n", 41 xasprintf(&server_version_string, "SSH-%d.%d-%.100s%s%s\r\n",
@@ -45,11 +45,11 @@ index af1ec337..eccf81bb 100644
45 options.version_addendum); 45 options.version_addendum);
46 46
47diff --git a/version.h b/version.h 47diff --git a/version.h b/version.h
48index e093f623..b7c5ad2a 100644 48index ea52b26f..a3fa6e0b 100644
49--- a/version.h 49--- a/version.h
50+++ b/version.h 50+++ b/version.h
51@@ -3,4 +3,9 @@ 51@@ -3,4 +3,9 @@
52 #define SSH_VERSION "OpenSSH_7.6" 52 #define SSH_VERSION "OpenSSH_7.7"
53 53
54 #define SSH_PORTABLE "p1" 54 #define SSH_PORTABLE "p1"
55-#define SSH_RELEASE SSH_VERSION SSH_PORTABLE 55-#define SSH_RELEASE SSH_VERSION SSH_PORTABLE
diff --git a/debian/patches/permitopen-argument-handling.patch b/debian/patches/permitopen-argument-handling.patch
deleted file mode 100644
index 6369c395c..000000000
--- a/debian/patches/permitopen-argument-handling.patch
+++ /dev/null
@@ -1,51 +0,0 @@
1From e293f21da513a7db59fe1997c9e90e2e9cdbceda Mon Sep 17 00:00:00 2001
2From: "djm@openbsd.org" <djm@openbsd.org>
3Date: Wed, 4 Oct 2017 18:49:30 +0000
4Subject: Fix PermitOpen argument handling
5
6fix (another) problem in PermitOpen introduced during the
7channels.c refactor: the third and subsequent arguments to PermitOpen were
8being silently ignored; ok markus@
9
10Upstream-ID: 067c89f1f53cbc381628012ba776d6861e6782fd
11
12Origin: https://anongit.mindrot.org/openssh.git/commit/?id=7c9613fac3371cf65fb07739212cdd1ebf6575da
13Last-Update: 2017-10-07
14
15Patch-Name: permitopen-argument-handling.patch
16---
17 servconf.c | 8 ++++----
18 1 file changed, 4 insertions(+), 4 deletions(-)
19
20diff --git a/servconf.c b/servconf.c
21index 5e996cf8..9daa182c 100644
22--- a/servconf.c
23+++ b/servconf.c
24@@ -1,5 +1,5 @@
25
26-/* $OpenBSD: servconf.c,v 1.312 2017/10/02 19:33:20 djm Exp $ */
27+/* $OpenBSD: servconf.c,v 1.313 2017/10/04 18:49:30 djm Exp $ */
28 /*
29 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
30 * All rights reserved
31@@ -1690,9 +1690,9 @@ process_server_config_line(ServerOptions *options, char *line,
32 if (!arg || *arg == '\0')
33 fatal("%s line %d: missing PermitOpen specification",
34 filename, linenum);
35- i = options->num_permitted_opens; /* modified later */
36+ value = options->num_permitted_opens; /* modified later */
37 if (strcmp(arg, "any") == 0 || strcmp(arg, "none") == 0) {
38- if (*activep && i == 0) {
39+ if (*activep && value == 0) {
40 options->num_permitted_opens = 1;
41 options->permitted_opens = xcalloc(1,
42 sizeof(*options->permitted_opens));
43@@ -1710,7 +1710,7 @@ process_server_config_line(ServerOptions *options, char *line,
44 if (arg == NULL || ((port = permitopen_port(arg)) < 0))
45 fatal("%s line %d: bad port number in "
46 "PermitOpen", filename, linenum);
47- if (*activep && i == 0) {
48+ if (*activep && value == 0) {
49 options->permitted_opens = xrecallocarray(
50 options->permitted_opens,
51 options->num_permitted_opens,
diff --git a/debian/patches/restore-authorized_keys2.patch b/debian/patches/restore-authorized_keys2.patch
index 098f9d681..2e680f5ce 100644
--- a/debian/patches/restore-authorized_keys2.patch
+++ b/debian/patches/restore-authorized_keys2.patch
@@ -1,4 +1,4 @@
1From 6c2e9847f608cc9c36236eecc58241cd3358dd5b Mon Sep 17 00:00:00 2001 1From 1e4b9d8e6cee1e15edfc12aa0294fa78639496b9 Mon Sep 17 00:00:00 2001
2From: Colin Watson <cjwatson@debian.org> 2From: Colin Watson <cjwatson@debian.org>
3Date: Sun, 5 Mar 2017 02:02:11 +0000 3Date: Sun, 5 Mar 2017 02:02:11 +0000
4Subject: Restore reading authorized_keys2 by default 4Subject: Restore reading authorized_keys2 by default
@@ -18,7 +18,7 @@ Patch-Name: restore-authorized_keys2.patch
18 1 file changed, 2 insertions(+), 3 deletions(-) 18 1 file changed, 2 insertions(+), 3 deletions(-)
19 19
20diff --git a/sshd_config b/sshd_config 20diff --git a/sshd_config b/sshd_config
21index 92822959..a32dc1d4 100644 21index de9cc9fe..31e14a4f 100644
22--- a/sshd_config 22--- a/sshd_config
23+++ b/sshd_config 23+++ b/sshd_config
24@@ -36,9 +36,8 @@ 24@@ -36,9 +36,8 @@
diff --git a/debian/patches/restore-tcp-wrappers.patch b/debian/patches/restore-tcp-wrappers.patch
index 5832897d2..4132937da 100644
--- a/debian/patches/restore-tcp-wrappers.patch
+++ b/debian/patches/restore-tcp-wrappers.patch
@@ -1,4 +1,4 @@
1From cdd9076a145a95c21538eedb3f728a897480c5de Mon Sep 17 00:00:00 2001 1From 398af3d66bfe8dc7d436570026571e522a0a13a0 Mon Sep 17 00:00:00 2001
2From: Colin Watson <cjwatson@debian.org> 2From: Colin Watson <cjwatson@debian.org>
3Date: Tue, 7 Oct 2014 13:22:41 +0100 3Date: Tue, 7 Oct 2014 13:22:41 +0100
4Subject: Restore TCP wrappers support 4Subject: Restore TCP wrappers support
@@ -28,10 +28,10 @@ Patch-Name: restore-tcp-wrappers.patch
28 3 files changed, 89 insertions(+) 28 3 files changed, 89 insertions(+)
29 29
30diff --git a/configure.ac b/configure.ac 30diff --git a/configure.ac b/configure.ac
31index 84bfad8c..3b30736b 100644 31index 1cd5eab6..3e23e60d 100644
32--- a/configure.ac 32--- a/configure.ac
33+++ b/configure.ac 33+++ b/configure.ac
34@@ -1503,6 +1503,62 @@ AC_ARG_WITH([skey], 34@@ -1566,6 +1566,62 @@ AC_ARG_WITH([skey],
35 ] 35 ]
36 ) 36 )
37 37
@@ -94,19 +94,19 @@ index 84bfad8c..3b30736b 100644
94 # Check whether user wants to use ldns 94 # Check whether user wants to use ldns
95 LDNS_MSG="no" 95 LDNS_MSG="no"
96 AC_ARG_WITH(ldns, 96 AC_ARG_WITH(ldns,
97@@ -5133,6 +5189,7 @@ echo " KerberosV support: $KRB5_MSG" 97@@ -5240,6 +5296,7 @@ echo " OSF SIA support: $SIA_MSG"
98 echo " KerberosV support: $KRB5_MSG"
98 echo " SELinux support: $SELINUX_MSG" 99 echo " SELinux support: $SELINUX_MSG"
99 echo " Smartcard support: $SCARD_MSG"
100 echo " S/KEY support: $SKEY_MSG" 100 echo " S/KEY support: $SKEY_MSG"
101+echo " TCP Wrappers support: $TCPW_MSG" 101+echo " TCP Wrappers support: $TCPW_MSG"
102 echo " MD5 password support: $MD5_MSG" 102 echo " MD5 password support: $MD5_MSG"
103 echo " libedit support: $LIBEDIT_MSG" 103 echo " libedit support: $LIBEDIT_MSG"
104 echo " libldns support: $LDNS_MSG" 104 echo " libldns support: $LDNS_MSG"
105diff --git a/sshd.8 b/sshd.8 105diff --git a/sshd.8 b/sshd.8
106index a4201146..2ed523a2 100644 106index 968ba66b..c8299d5e 100644
107--- a/sshd.8 107--- a/sshd.8
108+++ b/sshd.8 108+++ b/sshd.8
109@@ -839,6 +839,12 @@ the user's home directory becomes accessible. 109@@ -845,6 +845,12 @@ the user's home directory becomes accessible.
110 This file should be writable only by the user, and need not be 110 This file should be writable only by the user, and need not be
111 readable by anyone else. 111 readable by anyone else.
112 .Pp 112 .Pp
@@ -119,7 +119,7 @@ index a4201146..2ed523a2 100644
119 .It Pa /etc/hosts.equiv 119 .It Pa /etc/hosts.equiv
120 This file is for host-based authentication (see 120 This file is for host-based authentication (see
121 .Xr ssh 1 ) . 121 .Xr ssh 1 ) .
122@@ -943,6 +949,7 @@ The content of this file is not sensitive; it can be world-readable. 122@@ -947,6 +953,7 @@ The content of this file is not sensitive; it can be world-readable.
123 .Xr ssh-keygen 1 , 123 .Xr ssh-keygen 1 ,
124 .Xr ssh-keyscan 1 , 124 .Xr ssh-keyscan 1 ,
125 .Xr chroot 2 , 125 .Xr chroot 2 ,
@@ -128,10 +128,10 @@ index a4201146..2ed523a2 100644
128 .Xr moduli 5 , 128 .Xr moduli 5 ,
129 .Xr sshd_config 5 , 129 .Xr sshd_config 5 ,
130diff --git a/sshd.c b/sshd.c 130diff --git a/sshd.c b/sshd.c
131index 45e50fac..a66e9ca6 100644 131index e88185ef..4ed0364f 100644
132--- a/sshd.c 132--- a/sshd.c
133+++ b/sshd.c 133+++ b/sshd.c
134@@ -126,6 +126,13 @@ 134@@ -127,6 +127,13 @@
135 #include <Security/AuthSession.h> 135 #include <Security/AuthSession.h>
136 #endif 136 #endif
137 137
@@ -145,7 +145,7 @@ index 45e50fac..a66e9ca6 100644
145 /* Re-exec fds */ 145 /* Re-exec fds */
146 #define REEXEC_DEVCRYPTO_RESERVED_FD (STDERR_FILENO + 1) 146 #define REEXEC_DEVCRYPTO_RESERVED_FD (STDERR_FILENO + 1)
147 #define REEXEC_STARTUP_PIPE_FD (STDERR_FILENO + 2) 147 #define REEXEC_STARTUP_PIPE_FD (STDERR_FILENO + 2)
148@@ -1987,6 +1994,24 @@ main(int ac, char **av) 148@@ -2042,6 +2049,24 @@ main(int ac, char **av)
149 #ifdef SSH_AUDIT_EVENTS 149 #ifdef SSH_AUDIT_EVENTS
150 audit_connection_from(remote_ip, remote_port); 150 audit_connection_from(remote_ip, remote_port);
151 #endif 151 #endif
@@ -168,5 +168,5 @@ index 45e50fac..a66e9ca6 100644
168+ } 168+ }
169+#endif /* LIBWRAP */ 169+#endif /* LIBWRAP */
170 170
171 /* Log the connection. */ 171 rdomain = ssh_packet_rdomain_in(ssh);
172 laddr = get_local_ipaddr(sock_in); 172
diff --git a/debian/patches/scp-quoting.patch b/debian/patches/scp-quoting.patch
index 43153ec04..d969d5e8e 100644
--- a/debian/patches/scp-quoting.patch
+++ b/debian/patches/scp-quoting.patch
@@ -1,4 +1,4 @@
1From ef7aa8189491e0b43f14f7f15fb5e66903f7e185 Mon Sep 17 00:00:00 2001 1From e800454207f4d7a0c402f129029b8282209cdf74 Mon Sep 17 00:00:00 2001
2From: =?UTF-8?q?Nicolas=20Valc=C3=A1rcel?= <nvalcarcel@ubuntu.com> 2From: =?UTF-8?q?Nicolas=20Valc=C3=A1rcel?= <nvalcarcel@ubuntu.com>
3Date: Sun, 9 Feb 2014 16:09:59 +0000 3Date: Sun, 9 Feb 2014 16:09:59 +0000
4Subject: Adjust scp quoting in verbose mode 4Subject: Adjust scp quoting in verbose mode
@@ -17,10 +17,10 @@ Patch-Name: scp-quoting.patch
17 1 file changed, 10 insertions(+), 2 deletions(-) 17 1 file changed, 10 insertions(+), 2 deletions(-)
18 18
19diff --git a/scp.c b/scp.c 19diff --git a/scp.c b/scp.c
20index a533eb09..12e3199d 100644 20index 31e6709f..2bbf6938 100644
21--- a/scp.c 21--- a/scp.c
22+++ b/scp.c 22+++ b/scp.c
23@@ -194,8 +194,16 @@ do_local_cmd(arglist *a) 23@@ -198,8 +198,16 @@ do_local_cmd(arglist *a)
24 24
25 if (verbose_mode) { 25 if (verbose_mode) {
26 fprintf(stderr, "Executing:"); 26 fprintf(stderr, "Executing:");
diff --git a/debian/patches/seccomp-getuid-geteuid.patch b/debian/patches/seccomp-getuid-geteuid.patch
index 41455aa83..293322e9c 100644
--- a/debian/patches/seccomp-getuid-geteuid.patch
+++ b/debian/patches/seccomp-getuid-geteuid.patch
@@ -1,4 +1,4 @@
1From 8165600205696cca8a080a5cb6746070512174e9 Mon Sep 17 00:00:00 2001 1From 5b35741e661c6a95e39f5f897ae62c0f3686ca4f Mon Sep 17 00:00:00 2001
2From: Eduardo Barretto <ebarretto@linux.vnet.ibm.com> 2From: Eduardo Barretto <ebarretto@linux.vnet.ibm.com>
3Date: Tue, 9 May 2017 13:31:05 -0300 3Date: Tue, 9 May 2017 13:31:05 -0300
4Subject: Allow getuid and geteuid calls 4Subject: Allow getuid and geteuid calls
diff --git a/debian/patches/seccomp-s390-flock-ipc.patch b/debian/patches/seccomp-s390-flock-ipc.patch
index 5fb94137d..030d8f417 100644
--- a/debian/patches/seccomp-s390-flock-ipc.patch
+++ b/debian/patches/seccomp-s390-flock-ipc.patch
@@ -1,4 +1,4 @@
1From a5a99443e190a90eb511215aa7c1fa940f79b901 Mon Sep 17 00:00:00 2001 1From 8435aa5e322a4899dcb9bc68d5f0551e93d3f5a5 Mon Sep 17 00:00:00 2001
2From: Eduardo Barretto <ebarretto@linux.vnet.ibm.com> 2From: Eduardo Barretto <ebarretto@linux.vnet.ibm.com>
3Date: Tue, 9 May 2017 10:53:04 -0300 3Date: Tue, 9 May 2017 10:53:04 -0300
4Subject: Allow flock and ipc syscall for s390 architecture 4Subject: Allow flock and ipc syscall for s390 architecture
diff --git a/debian/patches/seccomp-s390-ioctl-ep11-crypto.patch b/debian/patches/seccomp-s390-ioctl-ep11-crypto.patch
index 595b3d6ec..77606886d 100644
--- a/debian/patches/seccomp-s390-ioctl-ep11-crypto.patch
+++ b/debian/patches/seccomp-s390-ioctl-ep11-crypto.patch
@@ -1,4 +1,4 @@
1From 801a62eedaaf47b20dbf4b426dc3e084bf0c8d49 Mon Sep 17 00:00:00 2001 1From ea67bc97339c9a507343e4a1f5fb867f678fbe1d Mon Sep 17 00:00:00 2001
2From: Eduardo Barretto <ebarretto@linux.vnet.ibm.com> 2From: Eduardo Barretto <ebarretto@linux.vnet.ibm.com>
3Date: Tue, 9 May 2017 13:33:30 -0300 3Date: Tue, 9 May 2017 13:33:30 -0300
4Subject: Enable specific ioctl call for EP11 crypto card (s390) 4Subject: Enable specific ioctl call for EP11 crypto card (s390)
diff --git a/debian/patches/selinux-role.patch b/debian/patches/selinux-role.patch
index 1402b9025..5662207cd 100644
--- a/debian/patches/selinux-role.patch
+++ b/debian/patches/selinux-role.patch
@@ -1,4 +1,4 @@
1From 4b276122c04aed0726803a92c8ca955e614a4d3a Mon Sep 17 00:00:00 2001 1From 7da968d97beba5fb80a5488516563ea1376db907 Mon Sep 17 00:00:00 2001
2From: Manoj Srivastava <srivasta@debian.org> 2From: Manoj Srivastava <srivasta@debian.org>
3Date: Sun, 9 Feb 2014 16:09:49 +0000 3Date: Sun, 9 Feb 2014 16:09:49 +0000
4Subject: Handle SELinux authorisation roles 4Subject: Handle SELinux authorisation roles
@@ -31,10 +31,10 @@ Patch-Name: selinux-role.patch
31 15 files changed, 97 insertions(+), 30 deletions(-) 31 15 files changed, 97 insertions(+), 30 deletions(-)
32 32
33diff --git a/auth.h b/auth.h 33diff --git a/auth.h b/auth.h
34index 29835ae9..27a1a88e 100644 34index 23ce67ca..15ba7073 100644
35--- a/auth.h 35--- a/auth.h
36+++ b/auth.h 36+++ b/auth.h
37@@ -63,6 +63,7 @@ struct Authctxt { 37@@ -65,6 +65,7 @@ struct Authctxt {
38 char *service; 38 char *service;
39 struct passwd *pw; /* set if 'valid' */ 39 struct passwd *pw; /* set if 'valid' */
40 char *style; 40 char *style;
@@ -43,10 +43,10 @@ index 29835ae9..27a1a88e 100644
43 /* Method lists for multiple authentication */ 43 /* Method lists for multiple authentication */
44 char **auth_methods; /* modified from server config */ 44 char **auth_methods; /* modified from server config */
45diff --git a/auth2.c b/auth2.c 45diff --git a/auth2.c b/auth2.c
46index 54070e3a..1f9ec632 100644 46index c34f58c4..be5e9f15 100644
47--- a/auth2.c 47--- a/auth2.c
48+++ b/auth2.c 48+++ b/auth2.c
49@@ -221,7 +221,7 @@ input_userauth_request(int type, u_int32_t seq, struct ssh *ssh) 49@@ -218,7 +218,7 @@ input_userauth_request(int type, u_int32_t seq, struct ssh *ssh)
50 { 50 {
51 Authctxt *authctxt = ssh->authctxt; 51 Authctxt *authctxt = ssh->authctxt;
52 Authmethod *m = NULL; 52 Authmethod *m = NULL;
@@ -55,7 +55,7 @@ index 54070e3a..1f9ec632 100644
55 int authenticated = 0; 55 int authenticated = 0;
56 56
57 if (authctxt == NULL) 57 if (authctxt == NULL)
58@@ -233,8 +233,13 @@ input_userauth_request(int type, u_int32_t seq, struct ssh *ssh) 58@@ -230,8 +230,13 @@ input_userauth_request(int type, u_int32_t seq, struct ssh *ssh)
59 debug("userauth-request for user %s service %s method %s", user, service, method); 59 debug("userauth-request for user %s service %s method %s", user, service, method);
60 debug("attempt %d failures %d", authctxt->attempt, authctxt->failures); 60 debug("attempt %d failures %d", authctxt->attempt, authctxt->failures);
61 61
@@ -69,7 +69,7 @@ index 54070e3a..1f9ec632 100644
69 69
70 if (authctxt->attempt++ == 0) { 70 if (authctxt->attempt++ == 0) {
71 /* setup auth context */ 71 /* setup auth context */
72@@ -261,8 +266,9 @@ input_userauth_request(int type, u_int32_t seq, struct ssh *ssh) 72@@ -258,8 +263,9 @@ input_userauth_request(int type, u_int32_t seq, struct ssh *ssh)
73 use_privsep ? " [net]" : ""); 73 use_privsep ? " [net]" : "");
74 authctxt->service = xstrdup(service); 74 authctxt->service = xstrdup(service);
75 authctxt->style = style ? xstrdup(style) : NULL; 75 authctxt->style = style ? xstrdup(style) : NULL;
@@ -81,10 +81,10 @@ index 54070e3a..1f9ec632 100644
81 if (auth2_setup_methods_lists(authctxt) != 0) 81 if (auth2_setup_methods_lists(authctxt) != 0)
82 packet_disconnect("no authentication methods enabled"); 82 packet_disconnect("no authentication methods enabled");
83diff --git a/monitor.c b/monitor.c 83diff --git a/monitor.c b/monitor.c
84index cabfeb8a..510e3496 100644 84index 868fb0d2..ed37458f 100644
85--- a/monitor.c 85--- a/monitor.c
86+++ b/monitor.c 86+++ b/monitor.c
87@@ -127,6 +127,7 @@ int mm_answer_sign(int, Buffer *); 87@@ -128,6 +128,7 @@ int mm_answer_sign(int, Buffer *);
88 int mm_answer_pwnamallow(int, Buffer *); 88 int mm_answer_pwnamallow(int, Buffer *);
89 int mm_answer_auth2_read_banner(int, Buffer *); 89 int mm_answer_auth2_read_banner(int, Buffer *);
90 int mm_answer_authserv(int, Buffer *); 90 int mm_answer_authserv(int, Buffer *);
@@ -92,7 +92,7 @@ index cabfeb8a..510e3496 100644
92 int mm_answer_authpassword(int, Buffer *); 92 int mm_answer_authpassword(int, Buffer *);
93 int mm_answer_bsdauthquery(int, Buffer *); 93 int mm_answer_bsdauthquery(int, Buffer *);
94 int mm_answer_bsdauthrespond(int, Buffer *); 94 int mm_answer_bsdauthrespond(int, Buffer *);
95@@ -204,6 +205,7 @@ struct mon_table mon_dispatch_proto20[] = { 95@@ -206,6 +207,7 @@ struct mon_table mon_dispatch_proto20[] = {
96 {MONITOR_REQ_SIGN, MON_ONCE, mm_answer_sign}, 96 {MONITOR_REQ_SIGN, MON_ONCE, mm_answer_sign},
97 {MONITOR_REQ_PWNAM, MON_ONCE, mm_answer_pwnamallow}, 97 {MONITOR_REQ_PWNAM, MON_ONCE, mm_answer_pwnamallow},
98 {MONITOR_REQ_AUTHSERV, MON_ONCE, mm_answer_authserv}, 98 {MONITOR_REQ_AUTHSERV, MON_ONCE, mm_answer_authserv},
@@ -100,7 +100,7 @@ index cabfeb8a..510e3496 100644
100 {MONITOR_REQ_AUTH2_READ_BANNER, MON_ONCE, mm_answer_auth2_read_banner}, 100 {MONITOR_REQ_AUTH2_READ_BANNER, MON_ONCE, mm_answer_auth2_read_banner},
101 {MONITOR_REQ_AUTHPASSWORD, MON_AUTH, mm_answer_authpassword}, 101 {MONITOR_REQ_AUTHPASSWORD, MON_AUTH, mm_answer_authpassword},
102 #ifdef USE_PAM 102 #ifdef USE_PAM
103@@ -799,6 +801,7 @@ mm_answer_pwnamallow(int sock, Buffer *m) 103@@ -806,6 +808,7 @@ mm_answer_pwnamallow(int sock, Buffer *m)
104 104
105 /* Allow service/style information on the auth context */ 105 /* Allow service/style information on the auth context */
106 monitor_permit(mon_dispatch, MONITOR_REQ_AUTHSERV, 1); 106 monitor_permit(mon_dispatch, MONITOR_REQ_AUTHSERV, 1);
@@ -108,7 +108,7 @@ index cabfeb8a..510e3496 100644
108 monitor_permit(mon_dispatch, MONITOR_REQ_AUTH2_READ_BANNER, 1); 108 monitor_permit(mon_dispatch, MONITOR_REQ_AUTH2_READ_BANNER, 1);
109 109
110 #ifdef USE_PAM 110 #ifdef USE_PAM
111@@ -829,14 +832,37 @@ mm_answer_authserv(int sock, Buffer *m) 111@@ -836,14 +839,37 @@ mm_answer_authserv(int sock, Buffer *m)
112 112
113 authctxt->service = buffer_get_string(m, NULL); 113 authctxt->service = buffer_get_string(m, NULL);
114 authctxt->style = buffer_get_string(m, NULL); 114 authctxt->style = buffer_get_string(m, NULL);
@@ -148,7 +148,7 @@ index cabfeb8a..510e3496 100644
148 return (0); 148 return (0);
149 } 149 }
150 150
151@@ -1471,7 +1497,7 @@ mm_answer_pty(int sock, Buffer *m) 151@@ -1497,7 +1523,7 @@ mm_answer_pty(int sock, Buffer *m)
152 res = pty_allocate(&s->ptyfd, &s->ttyfd, s->tty, sizeof(s->tty)); 152 res = pty_allocate(&s->ptyfd, &s->ttyfd, s->tty, sizeof(s->tty));
153 if (res == 0) 153 if (res == 0)
154 goto error; 154 goto error;
@@ -171,10 +171,10 @@ index ec41404c..4c7955d7 100644
171 171
172 struct monitor { 172 struct monitor {
173diff --git a/monitor_wrap.c b/monitor_wrap.c 173diff --git a/monitor_wrap.c b/monitor_wrap.c
174index 0e171a6a..d806bb2e 100644 174index e749efc1..7b2d06c6 100644
175--- a/monitor_wrap.c 175--- a/monitor_wrap.c
176+++ b/monitor_wrap.c 176+++ b/monitor_wrap.c
177@@ -336,10 +336,10 @@ mm_auth2_read_banner(void) 177@@ -331,10 +331,10 @@ mm_auth2_read_banner(void)
178 return (banner); 178 return (banner);
179 } 179 }
180 180
@@ -187,7 +187,7 @@ index 0e171a6a..d806bb2e 100644
187 { 187 {
188 Buffer m; 188 Buffer m;
189 189
190@@ -348,12 +348,30 @@ mm_inform_authserv(char *service, char *style) 190@@ -343,12 +343,30 @@ mm_inform_authserv(char *service, char *style)
191 buffer_init(&m); 191 buffer_init(&m);
192 buffer_put_cstring(&m, service); 192 buffer_put_cstring(&m, service);
193 buffer_put_cstring(&m, style ? style : ""); 193 buffer_put_cstring(&m, style ? style : "");
@@ -217,12 +217,12 @@ index 0e171a6a..d806bb2e 100644
217+ 217+
218 /* Do the password authentication */ 218 /* Do the password authentication */
219 int 219 int
220 mm_auth_password(Authctxt *authctxt, char *password) 220 mm_auth_password(struct ssh *ssh, char *password)
221diff --git a/monitor_wrap.h b/monitor_wrap.h 221diff --git a/monitor_wrap.h b/monitor_wrap.h
222index 7b2e8945..a9ccb243 100644 222index 0970d1f8..492de5c8 100644
223--- a/monitor_wrap.h 223--- a/monitor_wrap.h
224+++ b/monitor_wrap.h 224+++ b/monitor_wrap.h
225@@ -41,7 +41,8 @@ int mm_is_monitor(void); 225@@ -43,7 +43,8 @@ int mm_is_monitor(void);
226 DH *mm_choose_dh(int, int, int); 226 DH *mm_choose_dh(int, int, int);
227 int mm_key_sign(struct sshkey *, u_char **, u_int *, const u_char *, u_int, 227 int mm_key_sign(struct sshkey *, u_char **, u_int *, const u_char *, u_int,
228 const char *); 228 const char *);
@@ -231,9 +231,9 @@ index 7b2e8945..a9ccb243 100644
231+void mm_inform_authrole(char *); 231+void mm_inform_authrole(char *);
232 struct passwd *mm_getpwnamallow(const char *); 232 struct passwd *mm_getpwnamallow(const char *);
233 char *mm_auth2_read_banner(void); 233 char *mm_auth2_read_banner(void);
234 int mm_auth_password(struct Authctxt *, char *); 234 int mm_auth_password(struct ssh *, char *);
235diff --git a/openbsd-compat/port-linux.c b/openbsd-compat/port-linux.c 235diff --git a/openbsd-compat/port-linux.c b/openbsd-compat/port-linux.c
236index e4c5d1b7..e26faf08 100644 236index 8c5325cc..8a3e5c68 100644
237--- a/openbsd-compat/port-linux.c 237--- a/openbsd-compat/port-linux.c
238+++ b/openbsd-compat/port-linux.c 238+++ b/openbsd-compat/port-linux.c
239@@ -27,6 +27,12 @@ 239@@ -27,6 +27,12 @@
@@ -249,7 +249,7 @@ index e4c5d1b7..e26faf08 100644
249 #include "log.h" 249 #include "log.h"
250 #include "xmalloc.h" 250 #include "xmalloc.h"
251 #include "port-linux.h" 251 #include "port-linux.h"
252@@ -56,7 +62,7 @@ ssh_selinux_enabled(void) 252@@ -55,7 +61,7 @@ ssh_selinux_enabled(void)
253 253
254 /* Return the default security context for the given username */ 254 /* Return the default security context for the given username */
255 static security_context_t 255 static security_context_t
@@ -258,7 +258,7 @@ index e4c5d1b7..e26faf08 100644
258 { 258 {
259 security_context_t sc = NULL; 259 security_context_t sc = NULL;
260 char *sename = NULL, *lvl = NULL; 260 char *sename = NULL, *lvl = NULL;
261@@ -71,9 +77,16 @@ ssh_selinux_getctxbyname(char *pwname) 261@@ -70,9 +76,16 @@ ssh_selinux_getctxbyname(char *pwname)
262 #endif 262 #endif
263 263
264 #ifdef HAVE_GET_DEFAULT_CONTEXT_WITH_LEVEL 264 #ifdef HAVE_GET_DEFAULT_CONTEXT_WITH_LEVEL
@@ -277,7 +277,7 @@ index e4c5d1b7..e26faf08 100644
277 #endif 277 #endif
278 278
279 if (r != 0) { 279 if (r != 0) {
280@@ -103,7 +116,7 @@ ssh_selinux_getctxbyname(char *pwname) 280@@ -102,7 +115,7 @@ ssh_selinux_getctxbyname(char *pwname)
281 281
282 /* Set the execution context to the default for the specified user */ 282 /* Set the execution context to the default for the specified user */
283 void 283 void
@@ -286,7 +286,7 @@ index e4c5d1b7..e26faf08 100644
286 { 286 {
287 security_context_t user_ctx = NULL; 287 security_context_t user_ctx = NULL;
288 288
289@@ -112,7 +125,7 @@ ssh_selinux_setup_exec_context(char *pwname) 289@@ -111,7 +124,7 @@ ssh_selinux_setup_exec_context(char *pwname)
290 290
291 debug3("%s: setting execution context", __func__); 291 debug3("%s: setting execution context", __func__);
292 292
@@ -295,7 +295,7 @@ index e4c5d1b7..e26faf08 100644
295 if (setexeccon(user_ctx) != 0) { 295 if (setexeccon(user_ctx) != 0) {
296 switch (security_getenforce()) { 296 switch (security_getenforce()) {
297 case -1: 297 case -1:
298@@ -134,7 +147,7 @@ ssh_selinux_setup_exec_context(char *pwname) 298@@ -133,7 +146,7 @@ ssh_selinux_setup_exec_context(char *pwname)
299 299
300 /* Set the TTY context for the specified user */ 300 /* Set the TTY context for the specified user */
301 void 301 void
@@ -364,10 +364,10 @@ index ea4f9c58..60d72ffe 100644
364 char *platform_krb5_get_principal_name(const char *); 364 char *platform_krb5_get_principal_name(const char *);
365 int platform_sys_dir_uid(uid_t); 365 int platform_sys_dir_uid(uid_t);
366diff --git a/session.c b/session.c 366diff --git a/session.c b/session.c
367index 4bccb62d..d40afe4f 100644 367index 58826db1..ff301c98 100644
368--- a/session.c 368--- a/session.c
369+++ b/session.c 369+++ b/session.c
370@@ -1312,7 +1312,7 @@ safely_chroot(const char *path, uid_t uid) 370@@ -1322,7 +1322,7 @@ safely_chroot(const char *path, uid_t uid)
371 371
372 /* Set login name, uid, gid, and groups. */ 372 /* Set login name, uid, gid, and groups. */
373 void 373 void
@@ -376,7 +376,7 @@ index 4bccb62d..d40afe4f 100644
376 { 376 {
377 char *chroot_path, *tmp; 377 char *chroot_path, *tmp;
378 378
379@@ -1340,7 +1340,7 @@ do_setusercontext(struct passwd *pw) 379@@ -1350,7 +1350,7 @@ do_setusercontext(struct passwd *pw)
380 endgrent(); 380 endgrent();
381 #endif 381 #endif
382 382
@@ -385,7 +385,7 @@ index 4bccb62d..d40afe4f 100644
385 385
386 if (!in_chroot && options.chroot_directory != NULL && 386 if (!in_chroot && options.chroot_directory != NULL &&
387 strcasecmp(options.chroot_directory, "none") != 0) { 387 strcasecmp(options.chroot_directory, "none") != 0) {
388@@ -1477,7 +1477,7 @@ do_child(struct ssh *ssh, Session *s, const char *command) 388@@ -1487,7 +1487,7 @@ do_child(struct ssh *ssh, Session *s, const char *command)
389 389
390 /* Force a password change */ 390 /* Force a password change */
391 if (s->authctxt->force_pwchange) { 391 if (s->authctxt->force_pwchange) {
@@ -394,7 +394,7 @@ index 4bccb62d..d40afe4f 100644
394 child_close_fds(ssh); 394 child_close_fds(ssh);
395 do_pwchange(s); 395 do_pwchange(s);
396 exit(1); 396 exit(1);
397@@ -1499,7 +1499,7 @@ do_child(struct ssh *ssh, Session *s, const char *command) 397@@ -1505,7 +1505,7 @@ do_child(struct ssh *ssh, Session *s, const char *command)
398 /* When PAM is enabled we rely on it to do the nologin check */ 398 /* When PAM is enabled we rely on it to do the nologin check */
399 if (!options.use_pam) 399 if (!options.use_pam)
400 do_nologin(pw); 400 do_nologin(pw);
@@ -403,7 +403,7 @@ index 4bccb62d..d40afe4f 100644
403 /* 403 /*
404 * PAM session modules in do_setusercontext may have 404 * PAM session modules in do_setusercontext may have
405 * generated messages, so if this in an interactive 405 * generated messages, so if this in an interactive
406@@ -1891,7 +1891,7 @@ session_pty_req(struct ssh *ssh, Session *s) 406@@ -1897,7 +1897,7 @@ session_pty_req(struct ssh *ssh, Session *s)
407 tty_parse_modes(s->ttyfd, &n_bytes); 407 tty_parse_modes(s->ttyfd, &n_bytes);
408 408
409 if (!use_privsep) 409 if (!use_privsep)
@@ -426,10 +426,10 @@ index 54dd1f0c..8535ebce 100644
426 const char *session_get_remote_name_or_ip(struct ssh *, u_int, int); 426 const char *session_get_remote_name_or_ip(struct ssh *, u_int, int);
427 427
428diff --git a/sshd.c b/sshd.c 428diff --git a/sshd.c b/sshd.c
429index a66e9ca6..af1ec337 100644 429index 4ed0364f..6d911c19 100644
430--- a/sshd.c 430--- a/sshd.c
431+++ b/sshd.c 431+++ b/sshd.c
432@@ -677,7 +677,7 @@ privsep_postauth(Authctxt *authctxt) 432@@ -679,7 +679,7 @@ privsep_postauth(Authctxt *authctxt)
433 reseed_prngs(); 433 reseed_prngs();
434 434
435 /* Drop privileges */ 435 /* Drop privileges */
@@ -439,10 +439,10 @@ index a66e9ca6..af1ec337 100644
439 skip: 439 skip:
440 /* It is safe now to apply the key state */ 440 /* It is safe now to apply the key state */
441diff --git a/sshpty.c b/sshpty.c 441diff --git a/sshpty.c b/sshpty.c
442index fe2fb5aa..feb22b06 100644 442index 4da84d05..676ade50 100644
443--- a/sshpty.c 443--- a/sshpty.c
444+++ b/sshpty.c 444+++ b/sshpty.c
445@@ -187,7 +187,7 @@ pty_change_window_size(int ptyfd, u_int row, u_int col, 445@@ -162,7 +162,7 @@ pty_change_window_size(int ptyfd, u_int row, u_int col,
446 } 446 }
447 447
448 void 448 void
@@ -451,7 +451,7 @@ index fe2fb5aa..feb22b06 100644
451 { 451 {
452 struct group *grp; 452 struct group *grp;
453 gid_t gid; 453 gid_t gid;
454@@ -209,7 +209,7 @@ pty_setowner(struct passwd *pw, const char *tty) 454@@ -184,7 +184,7 @@ pty_setowner(struct passwd *pw, const char *tty)
455 strerror(errno)); 455 strerror(errno));
456 456
457 #ifdef WITH_SELINUX 457 #ifdef WITH_SELINUX
diff --git a/debian/patches/series b/debian/patches/series
index 01aa2c87c..e409902b5 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -8,7 +8,6 @@ user-group-modes.patch
8scp-quoting.patch 8scp-quoting.patch
9shell-path.patch 9shell-path.patch
10dnssec-sshfp.patch 10dnssec-sshfp.patch
11auth-log-verbosity.patch
12mention-ssh-keygen-on-keychange.patch 11mention-ssh-keygen-on-keychange.patch
13package-versioning.patch 12package-versioning.patch
14debian-banner.patch 13debian-banner.patch
@@ -21,10 +20,7 @@ no-openssl-version-status.patch
21gnome-ssh-askpass2-icon.patch 20gnome-ssh-askpass2-icon.patch
22systemd-readiness.patch 21systemd-readiness.patch
23debian-config.patch 22debian-config.patch
24no-dsa-host-key-by-default.patch
25restore-authorized_keys2.patch 23restore-authorized_keys2.patch
26seccomp-s390-flock-ipc.patch 24seccomp-s390-flock-ipc.patch
27seccomp-getuid-geteuid.patch 25seccomp-getuid-geteuid.patch
28seccomp-s390-ioctl-ep11-crypto.patch 26seccomp-s390-ioctl-ep11-crypto.patch
29permitopen-argument-handling.patch
30fix-regress-putty-transfer.patch
diff --git a/debian/patches/shell-path.patch b/debian/patches/shell-path.patch
index 29abf10f2..638d348f2 100644
--- a/debian/patches/shell-path.patch
+++ b/debian/patches/shell-path.patch
@@ -1,4 +1,4 @@
1From c239ba6fa4560704a237779f82445d5f125847e1 Mon Sep 17 00:00:00 2001 1From 72fead7f622b074c9b92dbdb8ae745faf2702b3d Mon Sep 17 00:00:00 2001
2From: Colin Watson <cjwatson@debian.org> 2From: Colin Watson <cjwatson@debian.org>
3Date: Sun, 9 Feb 2014 16:10:00 +0000 3Date: Sun, 9 Feb 2014 16:10:00 +0000
4Subject: Look for $SHELL on the path for ProxyCommand/LocalCommand 4Subject: Look for $SHELL on the path for ProxyCommand/LocalCommand
@@ -16,10 +16,10 @@ Patch-Name: shell-path.patch
16 1 file changed, 2 insertions(+), 2 deletions(-) 16 1 file changed, 2 insertions(+), 2 deletions(-)
17 17
18diff --git a/sshconnect.c b/sshconnect.c 18diff --git a/sshconnect.c b/sshconnect.c
19index dc7a704d..5eed5880 100644 19index 3805d35d..8ab01c0e 100644
20--- a/sshconnect.c 20--- a/sshconnect.c
21+++ b/sshconnect.c 21+++ b/sshconnect.c
22@@ -235,7 +235,7 @@ ssh_proxy_connect(struct ssh *ssh, const char *host, u_short port, 22@@ -239,7 +239,7 @@ ssh_proxy_connect(struct ssh *ssh, const char *host, u_short port,
23 /* Execute the proxy command. Note that we gave up any 23 /* Execute the proxy command. Note that we gave up any
24 extra privileges above. */ 24 extra privileges above. */
25 signal(SIGPIPE, SIG_DFL); 25 signal(SIGPIPE, SIG_DFL);
@@ -28,7 +28,7 @@ index dc7a704d..5eed5880 100644
28 perror(argv[0]); 28 perror(argv[0]);
29 exit(1); 29 exit(1);
30 } 30 }
31@@ -1435,7 +1435,7 @@ ssh_local_cmd(const char *args) 31@@ -1554,7 +1554,7 @@ ssh_local_cmd(const char *args)
32 if (pid == 0) { 32 if (pid == 0) {
33 signal(SIGPIPE, SIG_DFL); 33 signal(SIGPIPE, SIG_DFL);
34 debug3("Executing %s -c \"%s\"", shell, args); 34 debug3("Executing %s -c \"%s\"", shell, args);
diff --git a/debian/patches/ssh-agent-setgid.patch b/debian/patches/ssh-agent-setgid.patch
index 9ac4977b5..b7cd10dd1 100644
--- a/debian/patches/ssh-agent-setgid.patch
+++ b/debian/patches/ssh-agent-setgid.patch
@@ -1,4 +1,4 @@
1From b37d4f364f9c9bfbaf372e903ebbe80ef8ae2264 Mon Sep 17 00:00:00 2001 1From 9155e0368189860345a5f4b52a756266704447af Mon Sep 17 00:00:00 2001
2From: Colin Watson <cjwatson@debian.org> 2From: Colin Watson <cjwatson@debian.org>
3Date: Sun, 9 Feb 2014 16:10:13 +0000 3Date: Sun, 9 Feb 2014 16:10:13 +0000
4Subject: Document consequences of ssh-agent being setgid in ssh-agent(1) 4Subject: Document consequences of ssh-agent being setgid in ssh-agent(1)
diff --git a/debian/patches/ssh-argv0.patch b/debian/patches/ssh-argv0.patch
index 3a560ad78..2539fa8ed 100644
--- a/debian/patches/ssh-argv0.patch
+++ b/debian/patches/ssh-argv0.patch
@@ -1,4 +1,4 @@
1From 7e5cf5d27a7be47203280c665ca7311269f53671 Mon Sep 17 00:00:00 2001 1From 77113aa5aacb35d773268411edbe3bca4255703d Mon Sep 17 00:00:00 2001
2From: Colin Watson <cjwatson@debian.org> 2From: Colin Watson <cjwatson@debian.org>
3Date: Sun, 9 Feb 2014 16:10:10 +0000 3Date: Sun, 9 Feb 2014 16:10:10 +0000
4Subject: ssh(1): Refer to ssh-argv0(1) 4Subject: ssh(1): Refer to ssh-argv0(1)
@@ -18,10 +18,10 @@ Patch-Name: ssh-argv0.patch
18 1 file changed, 1 insertion(+) 18 1 file changed, 1 insertion(+)
19 19
20diff --git a/ssh.1 b/ssh.1 20diff --git a/ssh.1 b/ssh.1
21index 2a2aab30..711fe608 100644 21index 54e21d88..f8fc26d2 100644
22--- a/ssh.1 22--- a/ssh.1
23+++ b/ssh.1 23+++ b/ssh.1
24@@ -1556,6 +1556,7 @@ if an error occurred. 24@@ -1571,6 +1571,7 @@ if an error occurred.
25 .Xr sftp 1 , 25 .Xr sftp 1 ,
26 .Xr ssh-add 1 , 26 .Xr ssh-add 1 ,
27 .Xr ssh-agent 1 , 27 .Xr ssh-agent 1 ,
diff --git a/debian/patches/ssh-vulnkey-compat.patch b/debian/patches/ssh-vulnkey-compat.patch
index ef1ce4e99..34ff8a497 100644
--- a/debian/patches/ssh-vulnkey-compat.patch
+++ b/debian/patches/ssh-vulnkey-compat.patch
@@ -1,4 +1,4 @@
1From 19971fb92159a621b55f0b9da76dd38a56d7247c Mon Sep 17 00:00:00 2001 1From 4fb99d4eb8936b6ffae3749717abfc2dccbaa162 Mon Sep 17 00:00:00 2001
2From: Colin Watson <cjwatson@ubuntu.com> 2From: Colin Watson <cjwatson@ubuntu.com>
3Date: Sun, 9 Feb 2014 16:09:50 +0000 3Date: Sun, 9 Feb 2014 16:09:50 +0000
4Subject: Accept obsolete ssh-vulnkey configuration options 4Subject: Accept obsolete ssh-vulnkey configuration options
@@ -17,7 +17,7 @@ Patch-Name: ssh-vulnkey-compat.patch
17 2 files changed, 2 insertions(+) 17 2 files changed, 2 insertions(+)
18 18
19diff --git a/readconf.c b/readconf.c 19diff --git a/readconf.c b/readconf.c
20index 99e03ee1..d2b28a41 100644 20index c8e79299..1f1be778 100644
21--- a/readconf.c 21--- a/readconf.c
22+++ b/readconf.c 22+++ b/readconf.c
23@@ -189,6 +189,7 @@ static struct { 23@@ -189,6 +189,7 @@ static struct {
@@ -29,10 +29,10 @@ index 99e03ee1..d2b28a41 100644
29 { "useroaming", oDeprecated }, 29 { "useroaming", oDeprecated },
30 { "usersh", oDeprecated }, 30 { "usersh", oDeprecated },
31diff --git a/servconf.c b/servconf.c 31diff --git a/servconf.c b/servconf.c
32index 8ba74517..9889fb0a 100644 32index cbbea05b..3fff3d53 100644
33--- a/servconf.c 33--- a/servconf.c
34+++ b/servconf.c 34+++ b/servconf.c
35@@ -525,6 +525,7 @@ static struct { 35@@ -576,6 +576,7 @@ static struct {
36 { "x11uselocalhost", sX11UseLocalhost, SSHCFG_ALL }, 36 { "x11uselocalhost", sX11UseLocalhost, SSHCFG_ALL },
37 { "xauthlocation", sXAuthLocation, SSHCFG_GLOBAL }, 37 { "xauthlocation", sXAuthLocation, SSHCFG_GLOBAL },
38 { "strictmodes", sStrictModes, SSHCFG_GLOBAL }, 38 { "strictmodes", sStrictModes, SSHCFG_GLOBAL },
diff --git a/debian/patches/syslog-level-silent.patch b/debian/patches/syslog-level-silent.patch
index 3ed6287a9..897433408 100644
--- a/debian/patches/syslog-level-silent.patch
+++ b/debian/patches/syslog-level-silent.patch
@@ -1,4 +1,4 @@
1From 215bd91f12b0ddb9754483ee6e3c3b4751256dca Mon Sep 17 00:00:00 2001 1From 027619c6b05713e3f08a51e7232389383900e5d8 Mon Sep 17 00:00:00 2001
2From: Jonathan David Amery <jdamery@ysolde.ucam.org> 2From: Jonathan David Amery <jdamery@ysolde.ucam.org>
3Date: Sun, 9 Feb 2014 16:09:54 +0000 3Date: Sun, 9 Feb 2014 16:09:54 +0000
4Subject: "LogLevel SILENT" compatibility 4Subject: "LogLevel SILENT" compatibility
@@ -33,10 +33,10 @@ index 99450dd1..1559091d 100644
33 { "FATAL", SYSLOG_LEVEL_FATAL }, 33 { "FATAL", SYSLOG_LEVEL_FATAL },
34 { "ERROR", SYSLOG_LEVEL_ERROR }, 34 { "ERROR", SYSLOG_LEVEL_ERROR },
35diff --git a/ssh.c b/ssh.c 35diff --git a/ssh.c b/ssh.c
36index ae37432b..9cb21171 100644 36index d3619fe2..e36debf6 100644
37--- a/ssh.c 37--- a/ssh.c
38+++ b/ssh.c 38+++ b/ssh.c
39@@ -1166,7 +1166,7 @@ main(int ac, char **av) 39@@ -1252,7 +1252,7 @@ main(int ac, char **av)
40 /* Do not allocate a tty if stdin is not a tty. */ 40 /* Do not allocate a tty if stdin is not a tty. */
41 if ((!isatty(fileno(stdin)) || stdin_null_flag) && 41 if ((!isatty(fileno(stdin)) || stdin_null_flag) &&
42 options.request_tty != REQUEST_TTY_FORCE) { 42 options.request_tty != REQUEST_TTY_FORCE) {
diff --git a/debian/patches/systemd-readiness.patch b/debian/patches/systemd-readiness.patch
index 537a5cab6..a0e733f1b 100644
--- a/debian/patches/systemd-readiness.patch
+++ b/debian/patches/systemd-readiness.patch
@@ -1,4 +1,4 @@
1From ba3f6b85ede72ef42987f0069f5ed2b88ebe69fd Mon Sep 17 00:00:00 2001 1From 4acdde3e5b206718774fa162763058155fe572bf Mon Sep 17 00:00:00 2001
2From: Michael Biebl <biebl@debian.org> 2From: Michael Biebl <biebl@debian.org>
3Date: Mon, 21 Dec 2015 16:08:47 +0000 3Date: Mon, 21 Dec 2015 16:08:47 +0000
4Subject: Add systemd readiness notification support 4Subject: Add systemd readiness notification support
@@ -14,10 +14,10 @@ Patch-Name: systemd-readiness.patch
14 2 files changed, 33 insertions(+) 14 2 files changed, 33 insertions(+)
15 15
16diff --git a/configure.ac b/configure.ac 16diff --git a/configure.ac b/configure.ac
17index 3b30736b..483a9038 100644 17index 3e23e60d..eac143b4 100644
18--- a/configure.ac 18--- a/configure.ac
19+++ b/configure.ac 19+++ b/configure.ac
20@@ -4389,6 +4389,29 @@ AC_ARG_WITH([kerberos5], 20@@ -4496,6 +4496,29 @@ AC_ARG_WITH([kerberos5],
21 AC_SUBST([GSSLIBS]) 21 AC_SUBST([GSSLIBS])
22 AC_SUBST([K5LIBS]) 22 AC_SUBST([K5LIBS])
23 23
@@ -47,7 +47,7 @@ index 3b30736b..483a9038 100644
47 # Looking for programs, paths and files 47 # Looking for programs, paths and files
48 48
49 PRIVSEP_PATH=/var/empty 49 PRIVSEP_PATH=/var/empty
50@@ -5196,6 +5219,7 @@ echo " libldns support: $LDNS_MSG" 50@@ -5303,6 +5326,7 @@ echo " libldns support: $LDNS_MSG"
51 echo " Solaris process contract support: $SPC_MSG" 51 echo " Solaris process contract support: $SPC_MSG"
52 echo " Solaris project support: $SP_MSG" 52 echo " Solaris project support: $SP_MSG"
53 echo " Solaris privilege support: $SPP_MSG" 53 echo " Solaris privilege support: $SPP_MSG"
@@ -56,7 +56,7 @@ index 3b30736b..483a9038 100644
56 echo " Translate v4 in v6 hack: $IPV4_IN6_HACK_MSG" 56 echo " Translate v4 in v6 hack: $IPV4_IN6_HACK_MSG"
57 echo " BSD Auth support: $BSD_AUTH_MSG" 57 echo " BSD Auth support: $BSD_AUTH_MSG"
58diff --git a/sshd.c b/sshd.c 58diff --git a/sshd.c b/sshd.c
59index a5a1193d..1fde5a63 100644 59index 1d645a17..3a86e66e 100644
60--- a/sshd.c 60--- a/sshd.c
61+++ b/sshd.c 61+++ b/sshd.c
62@@ -85,6 +85,10 @@ 62@@ -85,6 +85,10 @@
@@ -70,7 +70,7 @@ index a5a1193d..1fde5a63 100644
70 #include "xmalloc.h" 70 #include "xmalloc.h"
71 #include "ssh.h" 71 #include "ssh.h"
72 #include "ssh2.h" 72 #include "ssh2.h"
73@@ -1881,6 +1885,11 @@ main(int ac, char **av) 73@@ -1933,6 +1937,11 @@ main(int ac, char **av)
74 } 74 }
75 } 75 }
76 76
diff --git a/debian/patches/user-group-modes.patch b/debian/patches/user-group-modes.patch
index 338c7567d..a7201b318 100644
--- a/debian/patches/user-group-modes.patch
+++ b/debian/patches/user-group-modes.patch
@@ -1,4 +1,4 @@
1From b1033fed87fd9fa24dccab45f00cadcbc7144c47 Mon Sep 17 00:00:00 2001 1From 9e45701c5d6105444cc2f4f5d6c44b0f69969479 Mon Sep 17 00:00:00 2001
2From: Colin Watson <cjwatson@debian.org> 2From: Colin Watson <cjwatson@debian.org>
3Date: Sun, 9 Feb 2014 16:09:58 +0000 3Date: Sun, 9 Feb 2014 16:09:58 +0000
4Subject: Allow harmless group-writability 4Subject: Allow harmless group-writability
@@ -51,10 +51,10 @@ index ecf956f0..4dccd5e6 100644
51 pw->pw_name, buf); 51 pw->pw_name, buf);
52 auth_debug_add("Bad file modes for %.200s", buf); 52 auth_debug_add("Bad file modes for %.200s", buf);
53diff --git a/auth.c b/auth.c 53diff --git a/auth.c b/auth.c
54index 6aec3605..68a1e4a7 100644 54index 76d586e3..68b9fe79 100644
55--- a/auth.c 55--- a/auth.c
56+++ b/auth.c 56+++ b/auth.c
57@@ -467,8 +467,7 @@ check_key_in_hostfiles(struct passwd *pw, struct sshkey *key, const char *host, 57@@ -468,8 +468,7 @@ check_key_in_hostfiles(struct passwd *pw, struct sshkey *key, const char *host,
58 user_hostfile = tilde_expand_filename(userfile, pw->pw_uid); 58 user_hostfile = tilde_expand_filename(userfile, pw->pw_uid);
59 if (options.strict_modes && 59 if (options.strict_modes &&
60 (stat(user_hostfile, &st) == 0) && 60 (stat(user_hostfile, &st) == 0) &&
@@ -65,7 +65,7 @@ index 6aec3605..68a1e4a7 100644
65 "bad owner or modes for %.200s", 65 "bad owner or modes for %.200s",
66 pw->pw_name, user_hostfile); 66 pw->pw_name, user_hostfile);
67diff --git a/misc.c b/misc.c 67diff --git a/misc.c b/misc.c
68index 05950a47..40aeeef3 100644 68index 874dcc8a..75c4113f 100644
69--- a/misc.c 69--- a/misc.c
70+++ b/misc.c 70+++ b/misc.c
71@@ -57,8 +57,9 @@ 71@@ -57,8 +57,9 @@
@@ -79,7 +79,7 @@ index 05950a47..40aeeef3 100644
79 #ifdef SSH_TUN_OPENBSD 79 #ifdef SSH_TUN_OPENBSD
80 #include <net/if.h> 80 #include <net/if.h>
81 #endif 81 #endif
82@@ -723,6 +724,55 @@ read_keyfile_line(FILE *f, const char *filename, char *buf, size_t bufsz, 82@@ -1030,6 +1031,55 @@ read_keyfile_line(FILE *f, const char *filename, char *buf, size_t bufsz,
83 return -1; 83 return -1;
84 } 84 }
85 85
@@ -133,9 +133,9 @@ index 05950a47..40aeeef3 100644
133+} 133+}
134+ 134+
135 int 135 int
136 tun_open(int tun, int mode) 136 tun_open(int tun, int mode, char **ifname)
137 { 137 {
138@@ -1626,8 +1676,7 @@ safe_path(const char *name, struct stat *stp, const char *pw_dir, 138@@ -1797,8 +1847,7 @@ safe_path(const char *name, struct stat *stp, const char *pw_dir,
139 snprintf(err, errlen, "%s is not a regular file", buf); 139 snprintf(err, errlen, "%s is not a regular file", buf);
140 return -1; 140 return -1;
141 } 141 }
@@ -145,7 +145,7 @@ index 05950a47..40aeeef3 100644
145 snprintf(err, errlen, "bad ownership or modes for file %s", 145 snprintf(err, errlen, "bad ownership or modes for file %s",
146 buf); 146 buf);
147 return -1; 147 return -1;
148@@ -1642,8 +1691,7 @@ safe_path(const char *name, struct stat *stp, const char *pw_dir, 148@@ -1813,8 +1862,7 @@ safe_path(const char *name, struct stat *stp, const char *pw_dir,
149 strlcpy(buf, cp, sizeof(buf)); 149 strlcpy(buf, cp, sizeof(buf));
150 150
151 if (stat(buf, &st) < 0 || 151 if (stat(buf, &st) < 0 ||
@@ -156,10 +156,10 @@ index 05950a47..40aeeef3 100644
156 "bad ownership or modes for directory %s", buf); 156 "bad ownership or modes for directory %s", buf);
157 return -1; 157 return -1;
158diff --git a/misc.h b/misc.h 158diff --git a/misc.h b/misc.h
159index 153d1137..d8759ab1 100644 159index cdafea73..51943db9 100644
160--- a/misc.h 160--- a/misc.h
161+++ b/misc.h 161+++ b/misc.h
162@@ -163,6 +163,8 @@ char *read_passphrase(const char *, int); 162@@ -168,6 +168,8 @@ char *read_passphrase(const char *, int);
163 int ask_permission(const char *, ...) __attribute__((format(printf, 1, 2))); 163 int ask_permission(const char *, ...) __attribute__((format(printf, 1, 2)));
164 int read_keyfile_line(FILE *, const char *, char *, size_t, u_long *); 164 int read_keyfile_line(FILE *, const char *, char *, size_t, u_long *);
165 165
@@ -169,10 +169,10 @@ index 153d1137..d8759ab1 100644
169 #define MAXIMUM(a, b) (((a) > (b)) ? (a) : (b)) 169 #define MAXIMUM(a, b) (((a) > (b)) ? (a) : (b))
170 #define ROUNDUP(x, y) ((((x)+((y)-1))/(y))*(y)) 170 #define ROUNDUP(x, y) ((((x)+((y)-1))/(y))*(y))
171diff --git a/readconf.c b/readconf.c 171diff --git a/readconf.c b/readconf.c
172index 45caa095..be3d5873 100644 172index 7f2b5c17..50349e23 100644
173--- a/readconf.c 173--- a/readconf.c
174+++ b/readconf.c 174+++ b/readconf.c
175@@ -1766,8 +1766,7 @@ read_config_file_depth(const char *filename, struct passwd *pw, 175@@ -1741,8 +1741,7 @@ read_config_file_depth(const char *filename, struct passwd *pw,
176 176
177 if (fstat(fileno(f), &sb) == -1) 177 if (fstat(fileno(f), &sb) == -1)
178 fatal("fstat %s: %s", filename, strerror(errno)); 178 fatal("fstat %s: %s", filename, strerror(errno));
@@ -183,10 +183,10 @@ index 45caa095..be3d5873 100644
183 } 183 }
184 184
185diff --git a/ssh.1 b/ssh.1 185diff --git a/ssh.1 b/ssh.1
186index 2ab1697f..3cc94688 100644 186index b4078525..0ef7c170 100644
187--- a/ssh.1 187--- a/ssh.1
188+++ b/ssh.1 188+++ b/ssh.1
189@@ -1456,6 +1456,8 @@ The file format and configuration options are described in 189@@ -1471,6 +1471,8 @@ The file format and configuration options are described in
190 .Xr ssh_config 5 . 190 .Xr ssh_config 5 .
191 Because of the potential for abuse, this file must have strict permissions: 191 Because of the potential for abuse, this file must have strict permissions:
192 read/write for the user, and not writable by others. 192 read/write for the user, and not writable by others.
@@ -196,10 +196,10 @@ index 2ab1697f..3cc94688 100644
196 .It Pa ~/.ssh/environment 196 .It Pa ~/.ssh/environment
197 Contains additional definitions for environment variables; see 197 Contains additional definitions for environment variables; see
198diff --git a/ssh_config.5 b/ssh_config.5 198diff --git a/ssh_config.5 b/ssh_config.5
199index d6f43c2d..7810a418 100644 199index 32c3632c..84dcd52c 100644
200--- a/ssh_config.5 200--- a/ssh_config.5
201+++ b/ssh_config.5 201+++ b/ssh_config.5
202@@ -1786,6 +1786,8 @@ The format of this file is described above. 202@@ -1818,6 +1818,8 @@ The format of this file is described above.
203 This file is used by the SSH client. 203 This file is used by the SSH client.
204 Because of the potential for abuse, this file must have strict permissions: 204 Because of the potential for abuse, this file must have strict permissions:
205 read/write for the user, and not accessible by others. 205 read/write for the user, and not accessible by others.
diff --git a/defines.h b/defines.h
index f1662edcf..3fa5ec5a9 100644
--- a/defines.h
+++ b/defines.h
@@ -214,24 +214,12 @@ typedef signed char int8_t;
214# if (SIZEOF_SHORT_INT == 2) 214# if (SIZEOF_SHORT_INT == 2)
215typedef short int int16_t; 215typedef short int int16_t;
216# else 216# else
217# ifdef _UNICOS
218# if (SIZEOF_SHORT_INT == 4)
219typedef short int16_t;
220# else
221typedef long int16_t;
222# endif
223# else
224# error "16 bit int type not found." 217# error "16 bit int type not found."
225# endif /* _UNICOS */
226# endif 218# endif
227# if (SIZEOF_INT == 4) 219# if (SIZEOF_INT == 4)
228typedef int int32_t; 220typedef int int32_t;
229# else 221# else
230# ifdef _UNICOS
231typedef long int32_t;
232# else
233# error "32 bit int type not found." 222# error "32 bit int type not found."
234# endif /* _UNICOS */
235# endif 223# endif
236#endif 224#endif
237 225
@@ -247,24 +235,12 @@ typedef unsigned char u_int8_t;
247# if (SIZEOF_SHORT_INT == 2) 235# if (SIZEOF_SHORT_INT == 2)
248typedef unsigned short int u_int16_t; 236typedef unsigned short int u_int16_t;
249# else 237# else
250# ifdef _UNICOS
251# if (SIZEOF_SHORT_INT == 4)
252typedef unsigned short u_int16_t;
253# else
254typedef unsigned long u_int16_t;
255# endif
256# else
257# error "16 bit int type not found." 238# error "16 bit int type not found."
258# endif
259# endif 239# endif
260# if (SIZEOF_INT == 4) 240# if (SIZEOF_INT == 4)
261typedef unsigned int u_int32_t; 241typedef unsigned int u_int32_t;
262# else 242# else
263# ifdef _UNICOS
264typedef unsigned long u_int32_t;
265# else
266# error "32 bit int type not found." 243# error "32 bit int type not found."
267# endif
268# endif 244# endif
269# endif 245# endif
270#define __BIT_TYPES_DEFINED__ 246#define __BIT_TYPES_DEFINED__
diff --git a/dh.c b/dh.c
index 475312427..46afba033 100644
--- a/dh.c
+++ b/dh.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: dh.c,v 1.62 2016/12/15 21:20:41 dtucker Exp $ */ 1/* $OpenBSD: dh.c,v 1.63 2018/02/07 02:06:50 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Niels Provos. All rights reserved. 3 * Copyright (c) 2000 Niels Provos. All rights reserved.
4 * 4 *
@@ -25,6 +25,7 @@
25 25
26#include "includes.h" 26#include "includes.h"
27 27
28#ifdef WITH_OPENSSL
28 29
29#include <openssl/bn.h> 30#include <openssl/bn.h>
30#include <openssl/dh.h> 31#include <openssl/dh.h>
@@ -134,10 +135,8 @@ parse_prime(int linenum, char *line, struct dhgroup *dhg)
134 return 1; 135 return 1;
135 136
136 fail: 137 fail:
137 if (dhg->g != NULL) 138 BN_clear_free(dhg->g);
138 BN_clear_free(dhg->g); 139 BN_clear_free(dhg->p);
139 if (dhg->p != NULL)
140 BN_clear_free(dhg->p);
141 dhg->g = dhg->p = NULL; 140 dhg->g = dhg->p = NULL;
142 return 0; 141 return 0;
143} 142}
@@ -465,3 +464,5 @@ dh_estimate(int bits)
465 return 7680; 464 return 7680;
466 return 8192; 465 return 8192;
467} 466}
467
468#endif /* WITH_OPENSSL */
diff --git a/dns.c b/dns.c
index 8e0ca6919..82ec97199 100644
--- a/dns.c
+++ b/dns.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: dns.c,v 1.37 2017/09/14 04:32:21 djm Exp $ */ 1/* $OpenBSD: dns.c,v 1.38 2018/02/23 15:58:37 markus Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2003 Wesley Griffin. All rights reserved. 4 * Copyright (c) 2003 Wesley Griffin. All rights reserved.
@@ -105,6 +105,11 @@ dns_read_key(u_int8_t *algorithm, u_int8_t *digest_type,
105 if (!*digest_type) 105 if (!*digest_type)
106 *digest_type = SSHFP_HASH_SHA256; 106 *digest_type = SSHFP_HASH_SHA256;
107 break; 107 break;
108 case KEY_XMSS:
109 *algorithm = SSHFP_KEY_XMSS;
110 if (!*digest_type)
111 *digest_type = SSHFP_HASH_SHA256;
112 break;
108 default: 113 default:
109 *algorithm = SSHFP_KEY_RESERVED; /* 0 */ 114 *algorithm = SSHFP_KEY_RESERVED; /* 0 */
110 *digest_type = SSHFP_HASH_RESERVED; /* 0 */ 115 *digest_type = SSHFP_HASH_RESERVED; /* 0 */
diff --git a/dns.h b/dns.h
index 68443f7cb..91f3c632d 100644
--- a/dns.h
+++ b/dns.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: dns.h,v 1.17 2017/09/14 04:32:21 djm Exp $ */ 1/* $OpenBSD: dns.h,v 1.18 2018/02/23 15:58:37 markus Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2003 Wesley Griffin. All rights reserved. 4 * Copyright (c) 2003 Wesley Griffin. All rights reserved.
@@ -33,7 +33,8 @@ enum sshfp_types {
33 SSHFP_KEY_RSA = 1, 33 SSHFP_KEY_RSA = 1,
34 SSHFP_KEY_DSA = 2, 34 SSHFP_KEY_DSA = 2,
35 SSHFP_KEY_ECDSA = 3, 35 SSHFP_KEY_ECDSA = 3,
36 SSHFP_KEY_ED25519 = 4 36 SSHFP_KEY_ED25519 = 4,
37 SSHFP_KEY_XMSS = 5
37}; 38};
38 39
39enum sshfp_hashes { 40enum sshfp_hashes {
diff --git a/entropy.c b/entropy.c
index 9305f89ae..14b98f188 100644
--- a/entropy.c
+++ b/entropy.c
@@ -108,7 +108,7 @@ get_random_bytes_prngd(unsigned char *buf, int len,
108 strlen(socket_path) + 1; 108 strlen(socket_path) + 1;
109 } 109 }
110 110
111 old_sigpipe = mysignal(SIGPIPE, SIG_IGN); 111 old_sigpipe = signal(SIGPIPE, SIG_IGN);
112 112
113 errors = 0; 113 errors = 0;
114 rval = -1; 114 rval = -1;
@@ -158,7 +158,7 @@ reopen:
158 158
159 rval = 0; 159 rval = 0;
160done: 160done:
161 mysignal(SIGPIPE, old_sigpipe); 161 signal(SIGPIPE, old_sigpipe);
162 if (fd != -1) 162 if (fd != -1)
163 close(fd); 163 close(fd);
164 return rval; 164 return rval;
diff --git a/fixprogs b/fixprogs
deleted file mode 100755
index af76ee392..000000000
--- a/fixprogs
+++ /dev/null
@@ -1,72 +0,0 @@
1#!/usr/bin/perl
2#
3# fixprogs - run through the list of entropy commands and
4# score out the losers
5#
6
7$entscale = 50; # divisor for optional entropy measurement
8
9sub usage {
10 return("Usage: $0 <command file>\n");
11}
12
13if (($#ARGV == -1) || ($#ARGV>1)) {
14 die(&usage);
15}
16
17# 'undocumented' option - run ent (in second param) on the output
18if ($#ARGV==1) {
19 $entcmd=$ARGV[1]
20} else {
21 $entcmd = ""
22};
23
24$infilename = $ARGV[0];
25
26if (!open(IN, "<".$infilename)) {
27 die("Couldn't open input file");
28}
29$outfilename=$infilename.".out";
30if (!open(OUT, ">$outfilename")) {
31 die("Couldn't open output file $outfilename");
32}
33@infile=<IN>;
34
35select(OUT); $|=1; select(STDOUT);
36
37foreach (@infile) {
38 if (/^\s*\#/ || /^\s*$/) {
39 print OUT;
40 next;
41 }
42 ($cmd, $path, $est) = /^\"([^\"]+)\"\s+([\w\/_-]+)\s+([\d\.\-]+)/o;
43 @args = split(/ /, $cmd);
44 if (! ($pid = fork())) {
45 # child
46 close STDIN; close STDOUT; close STDERR;
47 open (STDIN, "</dev/null");
48 open (STDOUT, ">/dev/null");
49 open (STDERR, ">/dev/null");
50 exec $path @args;
51 exit 1; # shouldn't be here
52 }
53 # parent
54 waitpid ($pid, 0); $ret=$? >> 8;
55
56 if ($ret != 0) {
57 $path = "undef";
58 } else {
59 if ($entcmd ne "") {
60 # now try to run ent on the command
61 $mostargs=join(" ", splice(@args,1));
62 print "Evaluating '$path $mostargs'\n";
63 @ent = qx{$path $mostargs | $entcmd -b -t};
64 @ent = grep(/^1,/, @ent);
65 ($null, $null, $rate) = split(/,/, $ent[0]);
66 $est = $rate / $entscale; # scale the estimate back
67 }
68 }
69 print OUT "\"$cmd\" $path $est\n";
70}
71
72close(IN);
diff --git a/hash.c b/hash.c
index 734c6bee2..5875d41fa 100644
--- a/hash.c
+++ b/hash.c
@@ -1,76 +1,27 @@
1/* $OpenBSD: hash.c,v 1.3 2013/12/09 11:03:45 markus Exp $ */ 1/* $OpenBSD: hash.c,v 1.4 2017/12/14 21:07:39 naddy Exp $ */
2
3/* Copied from nacl-20110221/crypto_hash/sha512/ref/hash.c */
4 2
3/* $OpenBSD: hash.c,v 1.5 2018/01/13 00:24:09 naddy Exp $ */
5/* 4/*
620080913 5 * Public domain. Author: Christian Weisgerber <naddy@openbsd.org>
7D. J. Bernstein 6 * API compatible reimplementation of function from nacl
8Public domain. 7 */
9*/
10
11#include "includes.h"
12 8
13#include "crypto_api.h" 9#include "crypto_api.h"
14 10
15#define blocks crypto_hashblocks_sha512 11#include <stdarg.h>
16 12
17static const unsigned char iv[64] = { 13#include "digest.h"
18 0x6a,0x09,0xe6,0x67,0xf3,0xbc,0xc9,0x08, 14#include "log.h"
19 0xbb,0x67,0xae,0x85,0x84,0xca,0xa7,0x3b, 15#include "ssherr.h"
20 0x3c,0x6e,0xf3,0x72,0xfe,0x94,0xf8,0x2b,
21 0xa5,0x4f,0xf5,0x3a,0x5f,0x1d,0x36,0xf1,
22 0x51,0x0e,0x52,0x7f,0xad,0xe6,0x82,0xd1,
23 0x9b,0x05,0x68,0x8c,0x2b,0x3e,0x6c,0x1f,
24 0x1f,0x83,0xd9,0xab,0xfb,0x41,0xbd,0x6b,
25 0x5b,0xe0,0xcd,0x19,0x13,0x7e,0x21,0x79
26} ;
27 16
28typedef unsigned long long uint64; 17int
29 18crypto_hash_sha512(unsigned char *out, const unsigned char *in,
30int crypto_hash_sha512(unsigned char *out,const unsigned char *in,unsigned long long inlen) 19 unsigned long long inlen)
31{ 20{
32 unsigned char h[64]; 21 int r;
33 unsigned char padded[256];
34 unsigned int i;
35 unsigned long long bytes = inlen;
36
37 for (i = 0;i < 64;++i) h[i] = iv[i];
38
39 blocks(h,in,inlen);
40 in += inlen;
41 inlen &= 127;
42 in -= inlen;
43
44 for (i = 0;i < inlen;++i) padded[i] = in[i];
45 padded[inlen] = 0x80;
46
47 if (inlen < 112) {
48 for (i = inlen + 1;i < 119;++i) padded[i] = 0;
49 padded[119] = bytes >> 61;
50 padded[120] = bytes >> 53;
51 padded[121] = bytes >> 45;
52 padded[122] = bytes >> 37;
53 padded[123] = bytes >> 29;
54 padded[124] = bytes >> 21;
55 padded[125] = bytes >> 13;
56 padded[126] = bytes >> 5;
57 padded[127] = bytes << 3;
58 blocks(h,padded,128);
59 } else {
60 for (i = inlen + 1;i < 247;++i) padded[i] = 0;
61 padded[247] = bytes >> 61;
62 padded[248] = bytes >> 53;
63 padded[249] = bytes >> 45;
64 padded[250] = bytes >> 37;
65 padded[251] = bytes >> 29;
66 padded[252] = bytes >> 21;
67 padded[253] = bytes >> 13;
68 padded[254] = bytes >> 5;
69 padded[255] = bytes << 3;
70 blocks(h,padded,256);
71 }
72
73 for (i = 0;i < 64;++i) out[i] = h[i];
74 22
75 return 0; 23 if ((r = ssh_digest_memory(SSH_DIGEST_SHA512, in, inlen, out,
24 crypto_hash_sha512_BYTES)) != 0)
25 fatal("%s: %s", __func__, ssh_err(r));
26 return 0;
76} 27}
diff --git a/install-sh b/install-sh
index 220abbf61..377bb8687 100755
--- a/install-sh
+++ b/install-sh
@@ -1,251 +1,527 @@
1#!/bin/sh 1#!/bin/sh
2#
3# install - install a program, script, or datafile 2# install - install a program, script, or datafile
4# This comes from X11R5 (mit/util/scripts/install.sh). 3
4scriptversion=2011-11-20.07; # UTC
5
6# This originates from X11R5 (mit/util/scripts/install.sh), which was
7# later released in X11R6 (xc/config/util/install.sh) with the
8# following copyright and license.
9#
10# Copyright (C) 1994 X Consortium
11#
12# Permission is hereby granted, free of charge, to any person obtaining a copy
13# of this software and associated documentation files (the "Software"), to
14# deal in the Software without restriction, including without limitation the
15# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
16# sell copies of the Software, and to permit persons to whom the Software is
17# furnished to do so, subject to the following conditions:
18#
19# The above copyright notice and this permission notice shall be included in
20# all copies or substantial portions of the Software.
21#
22# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
26# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
27# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
5# 28#
6# Copyright 1991 by the Massachusetts Institute of Technology 29# Except as contained in this notice, the name of the X Consortium shall not
30# be used in advertising or otherwise to promote the sale, use or other deal-
31# ings in this Software without prior written authorization from the X Consor-
32# tium.
7# 33#
8# Permission to use, copy, modify, distribute, and sell this software and its 34#
9# documentation for any purpose is hereby granted without fee, provided that 35# FSF changes to this file are in the public domain.
10# the above copyright notice appear in all copies and that both that
11# copyright notice and this permission notice appear in supporting
12# documentation, and that the name of M.I.T. not be used in advertising or
13# publicity pertaining to distribution of the software without specific,
14# written prior permission. M.I.T. makes no representations about the
15# suitability of this software for any purpose. It is provided "as is"
16# without express or implied warranty.
17# 36#
18# Calling this script install-sh is preferred over install.sh, to prevent 37# Calling this script install-sh is preferred over install.sh, to prevent
19# `make' implicit rules from creating a file called install from it 38# 'make' implicit rules from creating a file called install from it
20# when there is no Makefile. 39# when there is no Makefile.
21# 40#
22# This script is compatible with the BSD install script, but was written 41# This script is compatible with the BSD install script, but was written
23# from scratch. It can only install one file at a time, a restriction 42# from scratch.
24# shared with many OS's install programs.
25 43
44nl='
45'
46IFS=" "" $nl"
26 47
27# set DOITPROG to echo to test this script 48# set DOITPROG to echo to test this script
28 49
29# Don't use :- since 4.3BSD and earlier shells don't like it. 50# Don't use :- since 4.3BSD and earlier shells don't like it.
30doit="${DOITPROG-}" 51doit=${DOITPROG-}
31 52if test -z "$doit"; then
32 53 doit_exec=exec
33# put in absolute paths if you don't have them in your path; or use env. vars.
34
35mvprog="${MVPROG-mv}"
36cpprog="${CPPROG-cp}"
37chmodprog="${CHMODPROG-chmod}"
38chownprog="${CHOWNPROG-chown}"
39chgrpprog="${CHGRPPROG-chgrp}"
40stripprog="${STRIPPROG-strip}"
41rmprog="${RMPROG-rm}"
42mkdirprog="${MKDIRPROG-mkdir}"
43
44transformbasename=""
45transform_arg=""
46instcmd="$mvprog"
47chmodcmd="$chmodprog 0755"
48chowncmd=""
49chgrpcmd=""
50stripcmd=""
51rmcmd="$rmprog -f"
52mvcmd="$mvprog"
53src=""
54dst=""
55dir_arg=""
56
57while [ x"$1" != x ]; do
58 case $1 in
59 -c) instcmd="$cpprog"
60 shift
61 continue;;
62
63 -d) dir_arg=true
64 shift
65 continue;;
66
67 -m) chmodcmd="$chmodprog $2"
68 shift
69 shift
70 continue;;
71
72 -o) chowncmd="$chownprog $2"
73 shift
74 shift
75 continue;;
76
77 -g) chgrpcmd="$chgrpprog $2"
78 shift
79 shift
80 continue;;
81
82 -s) stripcmd="$stripprog"
83 shift
84 continue;;
85
86 -t=*) transformarg=`echo $1 | sed 's/-t=//'`
87 shift
88 continue;;
89
90 -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
91 shift
92 continue;;
93
94 *) if [ x"$src" = x ]
95 then
96 src=$1
97 else
98 # this colon is to work around a 386BSD /bin/sh bug
99 :
100 dst=$1
101 fi
102 shift
103 continue;;
104 esac
105done
106
107if [ x"$src" = x ]
108then
109 echo "install: no input file specified"
110 exit 1
111else 54else
112 true 55 doit_exec=$doit
113fi 56fi
114 57
115if [ x"$dir_arg" != x ]; then 58# Put in absolute file names if you don't have them in your path;
116 dst=$src 59# or use environment vars.
117 src="" 60
118 61chgrpprog=${CHGRPPROG-chgrp}
119 if [ -d $dst ]; then 62chmodprog=${CHMODPROG-chmod}
120 instcmd=: 63chownprog=${CHOWNPROG-chown}
121 chmodcmd="" 64cmpprog=${CMPPROG-cmp}
122 else 65cpprog=${CPPROG-cp}
123 instcmd=mkdir 66mkdirprog=${MKDIRPROG-mkdir}
124 fi 67mvprog=${MVPROG-mv}
125else 68rmprog=${RMPROG-rm}
69stripprog=${STRIPPROG-strip}
70
71posix_glob='?'
72initialize_posix_glob='
73 test "$posix_glob" != "?" || {
74 if (set -f) 2>/dev/null; then
75 posix_glob=
76 else
77 posix_glob=:
78 fi
79 }
80'
126 81
127# Waiting for this to be detected by the "$instcmd $src $dsttmp" command 82posix_mkdir=
128# might cause directories to be created, which would be especially bad
129# if $src (and thus $dsttmp) contains '*'.
130 83
131 if [ -f $src -o -d $src ] 84# Desired mode of installed file.
132 then 85mode=0755
133 true
134 else
135 echo "install: $src does not exist"
136 exit 1
137 fi
138
139 if [ x"$dst" = x ]
140 then
141 echo "install: no destination specified"
142 exit 1
143 else
144 true
145 fi
146 86
147# If destination is a directory, append the input filename; if your system 87chgrpcmd=
148# does not like double slashes in filenames, you may need to add some logic 88chmodcmd=$chmodprog
89chowncmd=
90mvcmd=$mvprog
91rmcmd="$rmprog -f"
92stripcmd=
149 93
150 if [ -d $dst ] 94src=
151 then 95dst=
152 dst="$dst"/`basename $src` 96dir_arg=
153 else 97dst_arg=
154 true
155 fi
156fi
157 98
158## this sed command emulates the dirname command 99copy_on_change=false
159dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` 100no_target_directory=
160 101
161# Make sure that the destination directory exists. 102usage="\
162# this part is taken from Noah Friedman's mkinstalldirs script 103Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
104 or: $0 [OPTION]... SRCFILES... DIRECTORY
105 or: $0 [OPTION]... -t DIRECTORY SRCFILES...
106 or: $0 [OPTION]... -d DIRECTORIES...
163 107
164# Skip lots of stat calls in the usual case. 108In the 1st form, copy SRCFILE to DSTFILE.
165if [ ! -d "$dstdir" ]; then 109In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
166defaultIFS=' 110In the 4th, create DIRECTORIES.
167'
168IFS="${IFS-${defaultIFS}}"
169 111
170oIFS="${IFS}" 112Options:
171# Some sh's can't handle IFS=/ for some reason. 113 --help display this help and exit.
172IFS='%' 114 --version display version info and exit.
173set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
174IFS="${oIFS}"
175 115
176pathcomp='' 116 -c (ignored)
117 -C install only if different (preserve the last data modification time)
118 -d create directories instead of installing files.
119 -g GROUP $chgrpprog installed files to GROUP.
120 -m MODE $chmodprog installed files to MODE.
121 -o USER $chownprog installed files to USER.
122 -s $stripprog installed files.
123 -t DIRECTORY install into DIRECTORY.
124 -T report an error if DSTFILE is a directory.
177 125
178while [ $# -ne 0 ] ; do 126Environment variables override the default commands:
179 pathcomp="${pathcomp}${1}" 127 CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
180 shift 128 RMPROG STRIPPROG
129"
181 130
182 if [ ! -d "${pathcomp}" ] ; 131while test $# -ne 0; do
183 then 132 case $1 in
184 $mkdirprog "${pathcomp}" 133 -c) ;;
185 else
186 true
187 fi
188 134
189 pathcomp="${pathcomp}/" 135 -C) copy_on_change=true;;
190done
191fi
192 136
193if [ x"$dir_arg" != x ] 137 -d) dir_arg=true;;
194then
195 $doit $instcmd $dst &&
196 138
197 if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && 139 -g) chgrpcmd="$chgrpprog $2"
198 if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && 140 shift;;
199 if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
200 if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
201else
202 141
203# If we're going to rename the final executable, determine the name now. 142 --help) echo "$usage"; exit $?;;
204 143
205 if [ x"$transformarg" = x ] 144 -m) mode=$2
206 then 145 case $mode in
207 dstfile=`basename $dst` 146 *' '* | *' '* | *'
208 else 147'* | *'*'* | *'?'* | *'['*)
209 dstfile=`basename $dst $transformbasename | 148 echo "$0: invalid mode: $mode" >&2
210 sed $transformarg`$transformbasename 149 exit 1;;
211 fi 150 esac
151 shift;;
212 152
213# don't allow the sed command to completely eliminate the filename 153 -o) chowncmd="$chownprog $2"
154 shift;;
214 155
215 if [ x"$dstfile" = x ] 156 -s) stripcmd=$stripprog;;
216 then
217 dstfile=`basename $dst`
218 else
219 true
220 fi
221 157
222# Make a temp file name in the proper directory. 158 -t) dst_arg=$2
159 # Protect names problematic for 'test' and other utilities.
160 case $dst_arg in
161 -* | [=\(\)!]) dst_arg=./$dst_arg;;
162 esac
163 shift;;
223 164
224 dsttmp=$dstdir/#inst.$$# 165 -T) no_target_directory=true;;
225 166
226# Move or copy the file name to the temp name 167 --version) echo "$0 $scriptversion"; exit $?;;
227 168
228 $doit $instcmd $src $dsttmp && 169 --) shift
170 break;;
229 171
230 trap "rm -f ${dsttmp}" 0 && 172 -*) echo "$0: invalid option: $1" >&2
173 exit 1;;
231 174
232# and set any options; do chmod last to preserve setuid bits 175 *) break;;
176 esac
177 shift
178done
233 179
234# If any of these fail, we abort the whole thing. If we want to 180if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
235# ignore errors from any of these, just make sure not to ignore 181 # When -d is used, all remaining arguments are directories to create.
236# errors from the above "$doit $instcmd $src $dsttmp" command. 182 # When -t is used, the destination is already specified.
183 # Otherwise, the last argument is the destination. Remove it from $@.
184 for arg
185 do
186 if test -n "$dst_arg"; then
187 # $@ is not empty: it contains at least $arg.
188 set fnord "$@" "$dst_arg"
189 shift # fnord
190 fi
191 shift # arg
192 dst_arg=$arg
193 # Protect names problematic for 'test' and other utilities.
194 case $dst_arg in
195 -* | [=\(\)!]) dst_arg=./$dst_arg;;
196 esac
197 done
198fi
237 199
238 if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && 200if test $# -eq 0; then
239 if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && 201 if test -z "$dir_arg"; then
240 if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && 202 echo "$0: no input file specified." >&2
241 if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && 203 exit 1
204 fi
205 # It's OK to call 'install-sh -d' without argument.
206 # This can happen when creating conditional directories.
207 exit 0
208fi
242 209
243# Now rename the file to the real destination. 210if test -z "$dir_arg"; then
211 do_exit='(exit $ret); exit $ret'
212 trap "ret=129; $do_exit" 1
213 trap "ret=130; $do_exit" 2
214 trap "ret=141; $do_exit" 13
215 trap "ret=143; $do_exit" 15
216
217 # Set umask so as not to create temps with too-generous modes.
218 # However, 'strip' requires both read and write access to temps.
219 case $mode in
220 # Optimize common cases.
221 *644) cp_umask=133;;
222 *755) cp_umask=22;;
223
224 *[0-7])
225 if test -z "$stripcmd"; then
226 u_plus_rw=
227 else
228 u_plus_rw='% 200'
229 fi
230 cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
231 *)
232 if test -z "$stripcmd"; then
233 u_plus_rw=
234 else
235 u_plus_rw=,u+rw
236 fi
237 cp_umask=$mode$u_plus_rw;;
238 esac
239fi
244 240
245 $doit $rmcmd -f $dstdir/$dstfile && 241for src
246 $doit $mvcmd $dsttmp $dstdir/$dstfile 242do
243 # Protect names problematic for 'test' and other utilities.
244 case $src in
245 -* | [=\(\)!]) src=./$src;;
246 esac
247
248 if test -n "$dir_arg"; then
249 dst=$src
250 dstdir=$dst
251 test -d "$dstdir"
252 dstdir_status=$?
253 else
254
255 # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
256 # might cause directories to be created, which would be especially bad
257 # if $src (and thus $dsttmp) contains '*'.
258 if test ! -f "$src" && test ! -d "$src"; then
259 echo "$0: $src does not exist." >&2
260 exit 1
261 fi
262
263 if test -z "$dst_arg"; then
264 echo "$0: no destination specified." >&2
265 exit 1
266 fi
267 dst=$dst_arg
268
269 # If destination is a directory, append the input filename; won't work
270 # if double slashes aren't ignored.
271 if test -d "$dst"; then
272 if test -n "$no_target_directory"; then
273 echo "$0: $dst_arg: Is a directory" >&2
274 exit 1
275 fi
276 dstdir=$dst
277 dst=$dstdir/`basename "$src"`
278 dstdir_status=0
279 else
280 # Prefer dirname, but fall back on a substitute if dirname fails.
281 dstdir=`
282 (dirname "$dst") 2>/dev/null ||
283 expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
284 X"$dst" : 'X\(//\)[^/]' \| \
285 X"$dst" : 'X\(//\)$' \| \
286 X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
287 echo X"$dst" |
288 sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
289 s//\1/
290 q
291 }
292 /^X\(\/\/\)[^/].*/{
293 s//\1/
294 q
295 }
296 /^X\(\/\/\)$/{
297 s//\1/
298 q
299 }
300 /^X\(\/\).*/{
301 s//\1/
302 q
303 }
304 s/.*/./; q'
305 `
306
307 test -d "$dstdir"
308 dstdir_status=$?
309 fi
310 fi
311
312 obsolete_mkdir_used=false
313
314 if test $dstdir_status != 0; then
315 case $posix_mkdir in
316 '')
317 # Create intermediate dirs using mode 755 as modified by the umask.
318 # This is like FreeBSD 'install' as of 1997-10-28.
319 umask=`umask`
320 case $stripcmd.$umask in
321 # Optimize common cases.
322 *[2367][2367]) mkdir_umask=$umask;;
323 .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
324
325 *[0-7])
326 mkdir_umask=`expr $umask + 22 \
327 - $umask % 100 % 40 + $umask % 20 \
328 - $umask % 10 % 4 + $umask % 2
329 `;;
330 *) mkdir_umask=$umask,go-w;;
331 esac
332
333 # With -d, create the new directory with the user-specified mode.
334 # Otherwise, rely on $mkdir_umask.
335 if test -n "$dir_arg"; then
336 mkdir_mode=-m$mode
337 else
338 mkdir_mode=
339 fi
247 340
248fi && 341 posix_mkdir=false
342 case $umask in
343 *[123567][0-7][0-7])
344 # POSIX mkdir -p sets u+wx bits regardless of umask, which
345 # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
346 ;;
347 *)
348 tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
349 trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
350
351 if (umask $mkdir_umask &&
352 exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
353 then
354 if test -z "$dir_arg" || {
355 # Check for POSIX incompatibilities with -m.
356 # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
357 # other-writable bit of parent directory when it shouldn't.
358 # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
359 ls_ld_tmpdir=`ls -ld "$tmpdir"`
360 case $ls_ld_tmpdir in
361 d????-?r-*) different_mode=700;;
362 d????-?--*) different_mode=755;;
363 *) false;;
364 esac &&
365 $mkdirprog -m$different_mode -p -- "$tmpdir" && {
366 ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
367 test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
368 }
369 }
370 then posix_mkdir=:
371 fi
372 rmdir "$tmpdir/d" "$tmpdir"
373 else
374 # Remove any dirs left behind by ancient mkdir implementations.
375 rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
376 fi
377 trap '' 0;;
378 esac;;
379 esac
249 380
381 if
382 $posix_mkdir && (
383 umask $mkdir_umask &&
384 $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
385 )
386 then :
387 else
388
389 # The umask is ridiculous, or mkdir does not conform to POSIX,
390 # or it failed possibly due to a race condition. Create the
391 # directory the slow way, step by step, checking for races as we go.
392
393 case $dstdir in
394 /*) prefix='/';;
395 [-=\(\)!]*) prefix='./';;
396 *) prefix='';;
397 esac
398
399 eval "$initialize_posix_glob"
400
401 oIFS=$IFS
402 IFS=/
403 $posix_glob set -f
404 set fnord $dstdir
405 shift
406 $posix_glob set +f
407 IFS=$oIFS
408
409 prefixes=
410
411 for d
412 do
413 test X"$d" = X && continue
414
415 prefix=$prefix$d
416 if test -d "$prefix"; then
417 prefixes=
418 else
419 if $posix_mkdir; then
420 (umask=$mkdir_umask &&
421 $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
422 # Don't fail if two instances are running concurrently.
423 test -d "$prefix" || exit 1
424 else
425 case $prefix in
426 *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
427 *) qprefix=$prefix;;
428 esac
429 prefixes="$prefixes '$qprefix'"
430 fi
431 fi
432 prefix=$prefix/
433 done
434
435 if test -n "$prefixes"; then
436 # Don't fail if two instances are running concurrently.
437 (umask $mkdir_umask &&
438 eval "\$doit_exec \$mkdirprog $prefixes") ||
439 test -d "$dstdir" || exit 1
440 obsolete_mkdir_used=true
441 fi
442 fi
443 fi
444
445 if test -n "$dir_arg"; then
446 { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
447 { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
448 { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
449 test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
450 else
451
452 # Make a couple of temp file names in the proper directory.
453 dsttmp=$dstdir/_inst.$$_
454 rmtmp=$dstdir/_rm.$$_
455
456 # Trap to clean up those temp files at exit.
457 trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
458
459 # Copy the file name to the temp name.
460 (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
461
462 # and set any options; do chmod last to preserve setuid bits.
463 #
464 # If any of these fail, we abort the whole thing. If we want to
465 # ignore errors from any of these, just make sure not to ignore
466 # errors from the above "$doit $cpprog $src $dsttmp" command.
467 #
468 { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
469 { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
470 { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
471 { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
472
473 # If -C, don't bother to copy if it wouldn't change the file.
474 if $copy_on_change &&
475 old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
476 new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
477
478 eval "$initialize_posix_glob" &&
479 $posix_glob set -f &&
480 set X $old && old=:$2:$4:$5:$6 &&
481 set X $new && new=:$2:$4:$5:$6 &&
482 $posix_glob set +f &&
483
484 test "$old" = "$new" &&
485 $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
486 then
487 rm -f "$dsttmp"
488 else
489 # Rename the file to the real destination.
490 $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
491
492 # The rename failed, perhaps because mv can't rename something else
493 # to itself, or perhaps because mv is so ancient that it does not
494 # support -f.
495 {
496 # Now remove or move aside any old file at destination location.
497 # We try this two ways since rm can't unlink itself on some
498 # systems and the destination file might be busy for other
499 # reasons. In this case, the final cleanup might fail but the new
500 # file should still install successfully.
501 {
502 test ! -f "$dst" ||
503 $doit $rmcmd -f "$dst" 2>/dev/null ||
504 { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
505 { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
506 } ||
507 { echo "$0: cannot unlink or rename $dst" >&2
508 (exit 1); exit 1
509 }
510 } &&
511
512 # Now rename the file to the real destination.
513 $doit $mvcmd "$dsttmp" "$dst"
514 }
515 fi || exit 1
516
517 trap '' 0
518 fi
519done
250 520
251exit 0 521# Local variables:
522# eval: (add-hook 'write-file-hooks 'time-stamp)
523# time-stamp-start: "scriptversion="
524# time-stamp-format: "%:y-%02m-%02d.%02H"
525# time-stamp-time-zone: "UTC"
526# time-stamp-end: "; # UTC"
527# End:
diff --git a/kex.c b/kex.c
index bb1bd6616..6cc2935fe 100644
--- a/kex.c
+++ b/kex.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kex.c,v 1.134 2017/06/13 12:13:59 djm Exp $ */ 1/* $OpenBSD: kex.c,v 1.136 2018/02/07 02:06:50 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
4 * 4 *
@@ -603,11 +603,9 @@ kex_free(struct kex *kex)
603 u_int mode; 603 u_int mode;
604 604
605#ifdef WITH_OPENSSL 605#ifdef WITH_OPENSSL
606 if (kex->dh) 606 DH_free(kex->dh);
607 DH_free(kex->dh);
608#ifdef OPENSSL_HAS_ECC 607#ifdef OPENSSL_HAS_ECC
609 if (kex->ec_client_key) 608 EC_KEY_free(kex->ec_client_key);
610 EC_KEY_free(kex->ec_client_key);
611#endif /* OPENSSL_HAS_ECC */ 609#endif /* OPENSSL_HAS_ECC */
612#endif /* WITH_OPENSSL */ 610#endif /* WITH_OPENSSL */
613 for (mode = 0; mode < MODE_MAX; mode++) { 611 for (mode = 0; mode < MODE_MAX; mode++) {
@@ -694,9 +692,6 @@ choose_mac(struct ssh *ssh, struct sshmac *mac, char *client, char *server)
694 free(name); 692 free(name);
695 return SSH_ERR_INTERNAL_ERROR; 693 return SSH_ERR_INTERNAL_ERROR;
696 } 694 }
697 /* truncate the key */
698 if (ssh->compat & SSH_BUG_HMAC)
699 mac->key_len = 16;
700 mac->name = name; 695 mac->name = name;
701 mac->key = NULL; 696 mac->key = NULL;
702 mac->enabled = 0; 697 mac->enabled = 0;
@@ -885,8 +880,7 @@ kex_choose_conf(struct ssh *ssh)
885 kex->dh_need = dh_need; 880 kex->dh_need = dh_need;
886 881
887 /* ignore the next message if the proposals do not match */ 882 /* ignore the next message if the proposals do not match */
888 if (first_kex_follows && !proposals_match(my, peer) && 883 if (first_kex_follows && !proposals_match(my, peer))
889 !(ssh->compat & SSH_BUG_FIRSTKEX))
890 ssh->dispatch_skip_packets = 1; 884 ssh->dispatch_skip_packets = 1;
891 r = 0; 885 r = 0;
892 out: 886 out:
diff --git a/kexc25519c.c b/kexc25519c.c
index e488013e9..a8d92149c 100644
--- a/kexc25519c.c
+++ b/kexc25519c.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kexc25519c.c,v 1.8 2017/05/31 04:17:12 djm Exp $ */ 1/* $OpenBSD: kexc25519c.c,v 1.9 2017/12/18 02:25:15 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Markus Friedl. All rights reserved. 3 * Copyright (c) 2001 Markus Friedl. All rights reserved.
4 * Copyright (c) 2010 Damien Miller. All rights reserved. 4 * Copyright (c) 2010 Damien Miller. All rights reserved.
@@ -141,7 +141,7 @@ input_kex_c25519_reply(int type, u_int32_t seq, struct ssh *ssh)
141 goto out; 141 goto out;
142 142
143 if ((r = sshkey_verify(server_host_key, signature, slen, hash, hashlen, 143 if ((r = sshkey_verify(server_host_key, signature, slen, hash, hashlen,
144 ssh->compat)) != 0) 144 kex->hostkey_alg, ssh->compat)) != 0)
145 goto out; 145 goto out;
146 146
147 /* save session id */ 147 /* save session id */
diff --git a/kexc25519s.c b/kexc25519s.c
index 0a008d447..0800a7a4b 100644
--- a/kexc25519s.c
+++ b/kexc25519s.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kexc25519s.c,v 1.10 2015/12/04 16:41:28 markus Exp $ */ 1/* $OpenBSD: kexc25519s.c,v 1.11 2017/05/31 04:19:28 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Markus Friedl. All rights reserved. 3 * Copyright (c) 2001 Markus Friedl. All rights reserved.
4 * Copyright (c) 2010 Damien Miller. All rights reserved. 4 * Copyright (c) 2010 Damien Miller. All rights reserved.
diff --git a/kexdhc.c b/kexdhc.c
index 9864ee2ec..9a9f1ea78 100644
--- a/kexdhc.c
+++ b/kexdhc.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kexdhc.c,v 1.20 2017/05/30 14:23:52 markus Exp $ */ 1/* $OpenBSD: kexdhc.c,v 1.22 2018/02/07 02:06:51 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Markus Friedl. All rights reserved. 3 * Copyright (c) 2001 Markus Friedl. All rights reserved.
4 * 4 *
@@ -183,7 +183,7 @@ input_kex_dh(int type, u_int32_t seq, struct ssh *ssh)
183 goto out; 183 goto out;
184 184
185 if ((r = sshkey_verify(server_host_key, signature, slen, hash, hashlen, 185 if ((r = sshkey_verify(server_host_key, signature, slen, hash, hashlen,
186 ssh->compat)) != 0) 186 kex->hostkey_alg, ssh->compat)) != 0)
187 goto out; 187 goto out;
188 188
189 /* save session id */ 189 /* save session id */
@@ -203,14 +203,12 @@ input_kex_dh(int type, u_int32_t seq, struct ssh *ssh)
203 explicit_bzero(hash, sizeof(hash)); 203 explicit_bzero(hash, sizeof(hash));
204 DH_free(kex->dh); 204 DH_free(kex->dh);
205 kex->dh = NULL; 205 kex->dh = NULL;
206 if (dh_server_pub) 206 BN_clear_free(dh_server_pub);
207 BN_clear_free(dh_server_pub);
208 if (kbuf) { 207 if (kbuf) {
209 explicit_bzero(kbuf, klen); 208 explicit_bzero(kbuf, klen);
210 free(kbuf); 209 free(kbuf);
211 } 210 }
212 if (shared_secret) 211 BN_clear_free(shared_secret);
213 BN_clear_free(shared_secret);
214 sshkey_free(server_host_key); 212 sshkey_free(server_host_key);
215 free(server_host_key_blob); 213 free(server_host_key_blob);
216 free(signature); 214 free(signature);
diff --git a/kexdhs.c b/kexdhs.c
index 81ce56d7a..da8f4c439 100644
--- a/kexdhs.c
+++ b/kexdhs.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kexdhs.c,v 1.25 2017/05/30 14:23:52 markus Exp $ */ 1/* $OpenBSD: kexdhs.c,v 1.26 2018/02/07 02:06:51 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Markus Friedl. All rights reserved. 3 * Copyright (c) 2001 Markus Friedl. All rights reserved.
4 * 4 *
@@ -208,14 +208,12 @@ input_kex_dh_init(int type, u_int32_t seq, struct ssh *ssh)
208 explicit_bzero(hash, sizeof(hash)); 208 explicit_bzero(hash, sizeof(hash));
209 DH_free(kex->dh); 209 DH_free(kex->dh);
210 kex->dh = NULL; 210 kex->dh = NULL;
211 if (dh_client_pub) 211 BN_clear_free(dh_client_pub);
212 BN_clear_free(dh_client_pub);
213 if (kbuf) { 212 if (kbuf) {
214 explicit_bzero(kbuf, klen); 213 explicit_bzero(kbuf, klen);
215 free(kbuf); 214 free(kbuf);
216 } 215 }
217 if (shared_secret) 216 BN_clear_free(shared_secret);
218 BN_clear_free(shared_secret);
219 free(server_host_key_blob); 217 free(server_host_key_blob);
220 free(signature); 218 free(signature);
221 return r; 219 return r;
diff --git a/kexecdhc.c b/kexecdhc.c
index d8a8b660f..ac146a362 100644
--- a/kexecdhc.c
+++ b/kexecdhc.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kexecdhc.c,v 1.11 2017/05/30 14:23:52 markus Exp $ */ 1/* $OpenBSD: kexecdhc.c,v 1.13 2018/02/07 02:06:51 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Markus Friedl. All rights reserved. 3 * Copyright (c) 2001 Markus Friedl. All rights reserved.
4 * Copyright (c) 2010 Damien Miller. All rights reserved. 4 * Copyright (c) 2010 Damien Miller. All rights reserved.
@@ -89,8 +89,7 @@ kexecdh_client(struct ssh *ssh)
89 ssh_dispatch_set(ssh, SSH2_MSG_KEX_ECDH_REPLY, &input_kex_ecdh_reply); 89 ssh_dispatch_set(ssh, SSH2_MSG_KEX_ECDH_REPLY, &input_kex_ecdh_reply);
90 r = 0; 90 r = 0;
91 out: 91 out:
92 if (client_key) 92 EC_KEY_free(client_key);
93 EC_KEY_free(client_key);
94 return r; 93 return r;
95} 94}
96 95
@@ -188,7 +187,7 @@ input_kex_ecdh_reply(int type, u_int32_t seq, struct ssh *ssh)
188 goto out; 187 goto out;
189 188
190 if ((r = sshkey_verify(server_host_key, signature, slen, hash, 189 if ((r = sshkey_verify(server_host_key, signature, slen, hash,
191 hashlen, ssh->compat)) != 0) 190 hashlen, kex->hostkey_alg, ssh->compat)) != 0)
192 goto out; 191 goto out;
193 192
194 /* save session id */ 193 /* save session id */
@@ -206,18 +205,14 @@ input_kex_ecdh_reply(int type, u_int32_t seq, struct ssh *ssh)
206 r = kex_send_newkeys(ssh); 205 r = kex_send_newkeys(ssh);
207 out: 206 out:
208 explicit_bzero(hash, sizeof(hash)); 207 explicit_bzero(hash, sizeof(hash));
209 if (kex->ec_client_key) { 208 EC_KEY_free(kex->ec_client_key);
210 EC_KEY_free(kex->ec_client_key); 209 kex->ec_client_key = NULL;
211 kex->ec_client_key = NULL; 210 EC_POINT_clear_free(server_public);
212 }
213 if (server_public)
214 EC_POINT_clear_free(server_public);
215 if (kbuf) { 211 if (kbuf) {
216 explicit_bzero(kbuf, klen); 212 explicit_bzero(kbuf, klen);
217 free(kbuf); 213 free(kbuf);
218 } 214 }
219 if (shared_secret) 215 BN_clear_free(shared_secret);
220 BN_clear_free(shared_secret);
221 sshkey_free(server_host_key); 216 sshkey_free(server_host_key);
222 free(server_host_key_blob); 217 free(server_host_key_blob);
223 free(signature); 218 free(signature);
diff --git a/kexecdhs.c b/kexecdhs.c
index dc24a3af6..af4f30309 100644
--- a/kexecdhs.c
+++ b/kexecdhs.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kexecdhs.c,v 1.16 2017/05/30 14:23:52 markus Exp $ */ 1/* $OpenBSD: kexecdhs.c,v 1.17 2018/02/07 02:06:51 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Markus Friedl. All rights reserved. 3 * Copyright (c) 2001 Markus Friedl. All rights reserved.
4 * Copyright (c) 2010 Damien Miller. All rights reserved. 4 * Copyright (c) 2010 Damien Miller. All rights reserved.
@@ -187,18 +187,14 @@ input_kex_ecdh_init(int type, u_int32_t seq, struct ssh *ssh)
187 r = kex_send_newkeys(ssh); 187 r = kex_send_newkeys(ssh);
188 out: 188 out:
189 explicit_bzero(hash, sizeof(hash)); 189 explicit_bzero(hash, sizeof(hash));
190 if (kex->ec_client_key) { 190 EC_KEY_free(kex->ec_client_key);
191 EC_KEY_free(kex->ec_client_key); 191 kex->ec_client_key = NULL;
192 kex->ec_client_key = NULL; 192 EC_KEY_free(server_key);
193 }
194 if (server_key)
195 EC_KEY_free(server_key);
196 if (kbuf) { 193 if (kbuf) {
197 explicit_bzero(kbuf, klen); 194 explicit_bzero(kbuf, klen);
198 free(kbuf); 195 free(kbuf);
199 } 196 }
200 if (shared_secret) 197 BN_clear_free(shared_secret);
201 BN_clear_free(shared_secret);
202 free(server_host_key_blob); 198 free(server_host_key_blob);
203 free(signature); 199 free(signature);
204 return r; 200 return r;
diff --git a/kexgexc.c b/kexgexc.c
index cd1128752..762a9a322 100644
--- a/kexgexc.c
+++ b/kexgexc.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kexgexc.c,v 1.25 2017/05/30 14:23:52 markus Exp $ */ 1/* $OpenBSD: kexgexc.c,v 1.27 2018/02/07 02:06:51 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Niels Provos. All rights reserved. 3 * Copyright (c) 2000 Niels Provos. All rights reserved.
4 * Copyright (c) 2001 Markus Friedl. All rights reserved. 4 * Copyright (c) 2001 Markus Friedl. All rights reserved.
@@ -134,10 +134,8 @@ input_kex_dh_gex_group(int type, u_int32_t seq, struct ssh *ssh)
134 ssh_dispatch_set(ssh, SSH2_MSG_KEX_DH_GEX_REPLY, &input_kex_dh_gex_reply); 134 ssh_dispatch_set(ssh, SSH2_MSG_KEX_DH_GEX_REPLY, &input_kex_dh_gex_reply);
135 r = 0; 135 r = 0;
136out: 136out:
137 if (p) 137 BN_clear_free(p);
138 BN_clear_free(p); 138 BN_clear_free(g);
139 if (g)
140 BN_clear_free(g);
141 return r; 139 return r;
142} 140}
143 141
@@ -230,7 +228,7 @@ input_kex_dh_gex_reply(int type, u_int32_t seq, struct ssh *ssh)
230 goto out; 228 goto out;
231 229
232 if ((r = sshkey_verify(server_host_key, signature, slen, hash, 230 if ((r = sshkey_verify(server_host_key, signature, slen, hash,
233 hashlen, ssh->compat)) != 0) 231 hashlen, kex->hostkey_alg, ssh->compat)) != 0)
234 goto out; 232 goto out;
235 233
236 /* save session id */ 234 /* save session id */
@@ -250,14 +248,12 @@ input_kex_dh_gex_reply(int type, u_int32_t seq, struct ssh *ssh)
250 explicit_bzero(hash, sizeof(hash)); 248 explicit_bzero(hash, sizeof(hash));
251 DH_free(kex->dh); 249 DH_free(kex->dh);
252 kex->dh = NULL; 250 kex->dh = NULL;
253 if (dh_server_pub) 251 BN_clear_free(dh_server_pub);
254 BN_clear_free(dh_server_pub);
255 if (kbuf) { 252 if (kbuf) {
256 explicit_bzero(kbuf, klen); 253 explicit_bzero(kbuf, klen);
257 free(kbuf); 254 free(kbuf);
258 } 255 }
259 if (shared_secret) 256 BN_clear_free(shared_secret);
260 BN_clear_free(shared_secret);
261 sshkey_free(server_host_key); 257 sshkey_free(server_host_key);
262 free(server_host_key_blob); 258 free(server_host_key_blob);
263 free(signature); 259 free(signature);
diff --git a/kexgexs.c b/kexgexs.c
index c5dd00578..d7b48ea88 100644
--- a/kexgexs.c
+++ b/kexgexs.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kexgexs.c,v 1.31 2017/05/30 14:23:52 markus Exp $ */ 1/* $OpenBSD: kexgexs.c,v 1.32 2018/02/07 02:06:51 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Niels Provos. All rights reserved. 3 * Copyright (c) 2000 Niels Provos. All rights reserved.
4 * Copyright (c) 2001 Markus Friedl. All rights reserved. 4 * Copyright (c) 2001 Markus Friedl. All rights reserved.
@@ -237,14 +237,12 @@ input_kex_dh_gex_init(int type, u_int32_t seq, struct ssh *ssh)
237 out: 237 out:
238 DH_free(kex->dh); 238 DH_free(kex->dh);
239 kex->dh = NULL; 239 kex->dh = NULL;
240 if (dh_client_pub) 240 BN_clear_free(dh_client_pub);
241 BN_clear_free(dh_client_pub);
242 if (kbuf) { 241 if (kbuf) {
243 explicit_bzero(kbuf, klen); 242 explicit_bzero(kbuf, klen);
244 free(kbuf); 243 free(kbuf);
245 } 244 }
246 if (shared_secret) 245 BN_clear_free(shared_secret);
247 BN_clear_free(shared_secret);
248 free(server_host_key_blob); 246 free(server_host_key_blob);
249 free(signature); 247 free(signature);
250 return r; 248 return r;
diff --git a/key.c b/key.c
index 6e338c495..a05fdd3c0 100644
--- a/key.c
+++ b/key.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: key.c,v 1.131 2017/05/30 14:16:41 markus Exp $ */ 1/* $OpenBSD: key.c,v 1.132 2017/12/18 02:25:15 djm Exp $ */
2/* 2/*
3 * placed in the public domain 3 * placed in the public domain
4 */ 4 */
@@ -95,21 +95,6 @@ key_sign(const Key *key, u_char **sigp, u_int *lenp,
95 return 0; 95 return 0;
96} 96}
97 97
98int
99key_verify(const Key *key, const u_char *signature, u_int signaturelen,
100 const u_char *data, u_int datalen)
101{
102 int r;
103
104 if ((r = sshkey_verify(key, signature, signaturelen,
105 data, datalen, datafellows)) != 0) {
106 fatal_on_fatal_errors(r, __func__, 0);
107 error("%s: %s", __func__, ssh_err(r));
108 return r == SSH_ERR_SIGNATURE_INVALID ? 0 : -1;
109 }
110 return 1;
111}
112
113Key * 98Key *
114key_demote(const Key *k) 99key_demote(const Key *k)
115{ 100{
diff --git a/key.h b/key.h
index a14f37037..fd59cbf54 100644
--- a/key.h
+++ b/key.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: key.h,v 1.51 2017/05/30 14:16:41 markus Exp $ */ 1/* $OpenBSD: key.h,v 1.52 2017/12/18 02:25:15 djm Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. 4 * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
@@ -58,7 +58,6 @@ int key_to_blob(const Key *, u_char **, u_int *);
58 58
59int key_sign(const Key *, u_char **, u_int *, const u_char *, u_int, 59int key_sign(const Key *, u_char **, u_int *, const u_char *, u_int,
60 const char *); 60 const char *);
61int key_verify(const Key *, const u_char *, u_int, const u_char *, u_int);
62 61
63/* authfile.c */ 62/* authfile.c */
64Key *key_load_cert(const char *); 63Key *key_load_cert(const char *);
diff --git a/krl.c b/krl.c
index 086fc20e5..379153247 100644
--- a/krl.c
+++ b/krl.c
@@ -14,7 +14,7 @@
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */ 15 */
16 16
17/* $OpenBSD: krl.c,v 1.40 2017/05/31 09:15:42 deraadt Exp $ */ 17/* $OpenBSD: krl.c,v 1.41 2017/12/18 02:25:15 djm Exp $ */
18 18
19#include "includes.h" 19#include "includes.h"
20 20
@@ -1014,7 +1014,7 @@ ssh_krl_from_blob(struct sshbuf *buf, struct ssh_krl **krlp,
1014 } 1014 }
1015 /* Check signature over entire KRL up to this point */ 1015 /* Check signature over entire KRL up to this point */
1016 if ((r = sshkey_verify(key, blob, blen, 1016 if ((r = sshkey_verify(key, blob, blen,
1017 sshbuf_ptr(buf), sig_off, 0)) != 0) 1017 sshbuf_ptr(buf), sig_off, NULL, 0)) != 0)
1018 goto out; 1018 goto out;
1019 /* Check if this key has already signed this KRL */ 1019 /* Check if this key has already signed this KRL */
1020 for (i = 0; i < nca_used; i++) { 1020 for (i = 0; i < nca_used; i++) {
diff --git a/loginrec.c b/loginrec.c
index 788553e92..bdbc9bbf4 100644
--- a/loginrec.c
+++ b/loginrec.c
@@ -663,15 +663,9 @@ construct_utmp(struct logininfo *li,
663 switch (li->type) { 663 switch (li->type) {
664 case LTYPE_LOGIN: 664 case LTYPE_LOGIN:
665 ut->ut_type = USER_PROCESS; 665 ut->ut_type = USER_PROCESS;
666#ifdef _UNICOS
667 cray_set_tmpdir(ut);
668#endif
669 break; 666 break;
670 case LTYPE_LOGOUT: 667 case LTYPE_LOGOUT:
671 ut->ut_type = DEAD_PROCESS; 668 ut->ut_type = DEAD_PROCESS;
672#ifdef _UNICOS
673 cray_retain_utmp(ut, li->pid);
674#endif
675 break; 669 break;
676 } 670 }
677# endif 671# endif
diff --git a/md5crypt.c b/md5crypt.c
index 22ef98933..52cf2959a 100644
--- a/md5crypt.c
+++ b/md5crypt.c
@@ -50,7 +50,7 @@ is_md5_salt(const char *salt)
50char * 50char *
51md5_crypt(const char *pw, const char *salt) 51md5_crypt(const char *pw, const char *salt)
52{ 52{
53 static char passwd[120], salt_copy[9], *p; 53 static char passwd[120], salt_copy[9];
54 static const char *sp, *ep; 54 static const char *sp, *ep;
55 unsigned char final[16]; 55 unsigned char final[16];
56 int sl, pl, i, j; 56 int sl, pl, i, j;
@@ -139,8 +139,6 @@ md5_crypt(const char *pw, const char *salt)
139 MD5_Final(final, &ctx1); 139 MD5_Final(final, &ctx1);
140 } 140 }
141 141
142 p = passwd + strlen(passwd);
143
144 l = (final[ 0]<<16) | (final[ 6]<<8) | final[12]; 142 l = (final[ 0]<<16) | (final[ 6]<<8) | final[12];
145 strlcat(passwd, to64(l, 4), sizeof(passwd)); 143 strlcat(passwd, to64(l, 4), sizeof(passwd));
146 l = (final[ 1]<<16) | (final[ 7]<<8) | final[13]; 144 l = (final[ 1]<<16) | (final[ 7]<<8) | final[13];
diff --git a/mdoc2man.awk b/mdoc2man.awk
index 3e8725452..d393ae6f1 100644
--- a/mdoc2man.awk
+++ b/mdoc2man.awk
@@ -1,7 +1,5 @@
1#!/usr/bin/awk 1#!/usr/bin/awk
2# 2#
3# $Id: mdoc2man.awk,v 1.9 2009/10/24 00:52:42 dtucker Exp $
4#
5# Version history: 3# Version history:
6# v4+ Adapted for OpenSSH Portable (see cvs Id and history) 4# v4+ Adapted for OpenSSH Portable (see cvs Id and history)
7# v3, I put the program under a proper license 5# v3, I put the program under a proper license
diff --git a/misc.c b/misc.c
index 40aeeef36..75c4113f0 100644
--- a/misc.c
+++ b/misc.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: misc.c,v 1.113 2017/08/18 05:48:04 djm Exp $ */ 1/* $OpenBSD: misc.c,v 1.127 2018/03/12 00:52:01 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * Copyright (c) 2005,2006 Damien Miller. All rights reserved. 4 * Copyright (c) 2005,2006 Damien Miller. All rights reserved.
@@ -168,6 +168,73 @@ set_nodelay(int fd)
168 error("setsockopt TCP_NODELAY: %.100s", strerror(errno)); 168 error("setsockopt TCP_NODELAY: %.100s", strerror(errno));
169} 169}
170 170
171/* Allow local port reuse in TIME_WAIT */
172int
173set_reuseaddr(int fd)
174{
175 int on = 1;
176
177 if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1) {
178 error("setsockopt SO_REUSEADDR fd %d: %s", fd, strerror(errno));
179 return -1;
180 }
181 return 0;
182}
183
184/* Get/set routing domain */
185char *
186get_rdomain(int fd)
187{
188#if defined(HAVE_SYS_GET_RDOMAIN)
189 return sys_get_rdomain(fd);
190#elif defined(__OpenBSD__)
191 int rtable;
192 char *ret;
193 socklen_t len = sizeof(rtable);
194
195 if (getsockopt(fd, SOL_SOCKET, SO_RTABLE, &rtable, &len) == -1) {
196 error("Failed to get routing domain for fd %d: %s",
197 fd, strerror(errno));
198 return NULL;
199 }
200 xasprintf(&ret, "%d", rtable);
201 return ret;
202#else /* defined(__OpenBSD__) */
203 return NULL;
204#endif
205}
206
207int
208set_rdomain(int fd, const char *name)
209{
210#if defined(HAVE_SYS_SET_RDOMAIN)
211 return sys_set_rdomain(fd, name);
212#elif defined(__OpenBSD__)
213 int rtable;
214 const char *errstr;
215
216 if (name == NULL)
217 return 0; /* default table */
218
219 rtable = (int)strtonum(name, 0, 255, &errstr);
220 if (errstr != NULL) {
221 /* Shouldn't happen */
222 error("Invalid routing domain \"%s\": %s", name, errstr);
223 return -1;
224 }
225 if (setsockopt(fd, SOL_SOCKET, SO_RTABLE,
226 &rtable, sizeof(rtable)) == -1) {
227 error("Failed to set routing domain %d on fd %d: %s",
228 rtable, fd, strerror(errno));
229 return -1;
230 }
231 return 0;
232#else /* defined(__OpenBSD__) */
233 error("Setting routing domain is not supported on this platform");
234 return -1;
235#endif
236}
237
171/* Characters considered whitespace in strsep calls. */ 238/* Characters considered whitespace in strsep calls. */
172#define WHITESPACE " \t\r\n" 239#define WHITESPACE " \t\r\n"
173#define QUOTE "\"" 240#define QUOTE "\""
@@ -396,11 +463,12 @@ put_host_port(const char *host, u_short port)
396 * Search for next delimiter between hostnames/addresses and ports. 463 * Search for next delimiter between hostnames/addresses and ports.
397 * Argument may be modified (for termination). 464 * Argument may be modified (for termination).
398 * Returns *cp if parsing succeeds. 465 * Returns *cp if parsing succeeds.
399 * *cp is set to the start of the next delimiter, if one was found. 466 * *cp is set to the start of the next field, if one was found.
467 * The delimiter char, if present, is stored in delim.
400 * If this is the last field, *cp is set to NULL. 468 * If this is the last field, *cp is set to NULL.
401 */ 469 */
402char * 470static char *
403hpdelim(char **cp) 471hpdelim2(char **cp, char *delim)
404{ 472{
405 char *s, *old; 473 char *s, *old;
406 474
@@ -423,6 +491,8 @@ hpdelim(char **cp)
423 491
424 case ':': 492 case ':':
425 case '/': 493 case '/':
494 if (delim != NULL)
495 *delim = *s;
426 *s = '\0'; /* terminate */ 496 *s = '\0'; /* terminate */
427 *cp = s + 1; 497 *cp = s + 1;
428 break; 498 break;
@@ -435,6 +505,12 @@ hpdelim(char **cp)
435} 505}
436 506
437char * 507char *
508hpdelim(char **cp)
509{
510 return hpdelim2(cp, NULL);
511}
512
513char *
438cleanhostname(char *host) 514cleanhostname(char *host)
439{ 515{
440 if (*host == '[' && host[strlen(host) - 1] == ']') { 516 if (*host == '[' && host[strlen(host) - 1] == ']') {
@@ -468,6 +544,75 @@ colon(char *cp)
468} 544}
469 545
470/* 546/*
547 * Parse a [user@]host:[path] string.
548 * Caller must free returned user, host and path.
549 * Any of the pointer return arguments may be NULL (useful for syntax checking).
550 * If user was not specified then *userp will be set to NULL.
551 * If host was not specified then *hostp will be set to NULL.
552 * If path was not specified then *pathp will be set to ".".
553 * Returns 0 on success, -1 on failure.
554 */
555int
556parse_user_host_path(const char *s, char **userp, char **hostp, char **pathp)
557{
558 char *user = NULL, *host = NULL, *path = NULL;
559 char *sdup, *tmp;
560 int ret = -1;
561
562 if (userp != NULL)
563 *userp = NULL;
564 if (hostp != NULL)
565 *hostp = NULL;
566 if (pathp != NULL)
567 *pathp = NULL;
568
569 sdup = xstrdup(s);
570
571 /* Check for remote syntax: [user@]host:[path] */
572 if ((tmp = colon(sdup)) == NULL)
573 goto out;
574
575 /* Extract optional path */
576 *tmp++ = '\0';
577 if (*tmp == '\0')
578 tmp = ".";
579 path = xstrdup(tmp);
580
581 /* Extract optional user and mandatory host */
582 tmp = strrchr(sdup, '@');
583 if (tmp != NULL) {
584 *tmp++ = '\0';
585 host = xstrdup(cleanhostname(tmp));
586 if (*sdup != '\0')
587 user = xstrdup(sdup);
588 } else {
589 host = xstrdup(cleanhostname(sdup));
590 user = NULL;
591 }
592
593 /* Success */
594 if (userp != NULL) {
595 *userp = user;
596 user = NULL;
597 }
598 if (hostp != NULL) {
599 *hostp = host;
600 host = NULL;
601 }
602 if (pathp != NULL) {
603 *pathp = path;
604 path = NULL;
605 }
606 ret = 0;
607out:
608 free(sdup);
609 free(user);
610 free(host);
611 free(path);
612 return ret;
613}
614
615/*
471 * Parse a [user@]host[:port] string. 616 * Parse a [user@]host[:port] string.
472 * Caller must free returned user and host. 617 * Caller must free returned user and host.
473 * Any of the pointer return arguments may be NULL (useful for syntax checking). 618 * Any of the pointer return arguments may be NULL (useful for syntax checking).
@@ -492,7 +637,7 @@ parse_user_host_port(const char *s, char **userp, char **hostp, int *portp)
492 if ((sdup = tmp = strdup(s)) == NULL) 637 if ((sdup = tmp = strdup(s)) == NULL)
493 return -1; 638 return -1;
494 /* Extract optional username */ 639 /* Extract optional username */
495 if ((cp = strchr(tmp, '@')) != NULL) { 640 if ((cp = strrchr(tmp, '@')) != NULL) {
496 *cp = '\0'; 641 *cp = '\0';
497 if (*tmp == '\0') 642 if (*tmp == '\0')
498 goto out; 643 goto out;
@@ -528,6 +673,168 @@ parse_user_host_port(const char *s, char **userp, char **hostp, int *portp)
528 return ret; 673 return ret;
529} 674}
530 675
676/*
677 * Converts a two-byte hex string to decimal.
678 * Returns the decimal value or -1 for invalid input.
679 */
680static int
681hexchar(const char *s)
682{
683 unsigned char result[2];
684 int i;
685
686 for (i = 0; i < 2; i++) {
687 if (s[i] >= '0' && s[i] <= '9')
688 result[i] = (unsigned char)(s[i] - '0');
689 else if (s[i] >= 'a' && s[i] <= 'f')
690 result[i] = (unsigned char)(s[i] - 'a') + 10;
691 else if (s[i] >= 'A' && s[i] <= 'F')
692 result[i] = (unsigned char)(s[i] - 'A') + 10;
693 else
694 return -1;
695 }
696 return (result[0] << 4) | result[1];
697}
698
699/*
700 * Decode an url-encoded string.
701 * Returns a newly allocated string on success or NULL on failure.
702 */
703static char *
704urldecode(const char *src)
705{
706 char *ret, *dst;
707 int ch;
708
709 ret = xmalloc(strlen(src) + 1);
710 for (dst = ret; *src != '\0'; src++) {
711 switch (*src) {
712 case '+':
713 *dst++ = ' ';
714 break;
715 case '%':
716 if (!isxdigit((unsigned char)src[1]) ||
717 !isxdigit((unsigned char)src[2]) ||
718 (ch = hexchar(src + 1)) == -1) {
719 free(ret);
720 return NULL;
721 }
722 *dst++ = ch;
723 src += 2;
724 break;
725 default:
726 *dst++ = *src;
727 break;
728 }
729 }
730 *dst = '\0';
731
732 return ret;
733}
734
735/*
736 * Parse an (scp|ssh|sftp)://[user@]host[:port][/path] URI.
737 * See https://tools.ietf.org/html/draft-ietf-secsh-scp-sftp-ssh-uri-04
738 * Either user or path may be url-encoded (but not host or port).
739 * Caller must free returned user, host and path.
740 * Any of the pointer return arguments may be NULL (useful for syntax checking)
741 * but the scheme must always be specified.
742 * If user was not specified then *userp will be set to NULL.
743 * If port was not specified then *portp will be -1.
744 * If path was not specified then *pathp will be set to NULL.
745 * Returns 0 on success, 1 if non-uri/wrong scheme, -1 on error/invalid uri.
746 */
747int
748parse_uri(const char *scheme, const char *uri, char **userp, char **hostp,
749 int *portp, char **pathp)
750{
751 char *uridup, *cp, *tmp, ch;
752 char *user = NULL, *host = NULL, *path = NULL;
753 int port = -1, ret = -1;
754 size_t len;
755
756 len = strlen(scheme);
757 if (strncmp(uri, scheme, len) != 0 || strncmp(uri + len, "://", 3) != 0)
758 return 1;
759 uri += len + 3;
760
761 if (userp != NULL)
762 *userp = NULL;
763 if (hostp != NULL)
764 *hostp = NULL;
765 if (portp != NULL)
766 *portp = -1;
767 if (pathp != NULL)
768 *pathp = NULL;
769
770 uridup = tmp = xstrdup(uri);
771
772 /* Extract optional ssh-info (username + connection params) */
773 if ((cp = strchr(tmp, '@')) != NULL) {
774 char *delim;
775
776 *cp = '\0';
777 /* Extract username and connection params */
778 if ((delim = strchr(tmp, ';')) != NULL) {
779 /* Just ignore connection params for now */
780 *delim = '\0';
781 }
782 if (*tmp == '\0') {
783 /* Empty username */
784 goto out;
785 }
786 if ((user = urldecode(tmp)) == NULL)
787 goto out;
788 tmp = cp + 1;
789 }
790
791 /* Extract mandatory hostname */
792 if ((cp = hpdelim2(&tmp, &ch)) == NULL || *cp == '\0')
793 goto out;
794 host = xstrdup(cleanhostname(cp));
795 if (!valid_domain(host, 0, NULL))
796 goto out;
797
798 if (tmp != NULL && *tmp != '\0') {
799 if (ch == ':') {
800 /* Convert and verify port. */
801 if ((cp = strchr(tmp, '/')) != NULL)
802 *cp = '\0';
803 if ((port = a2port(tmp)) <= 0)
804 goto out;
805 tmp = cp ? cp + 1 : NULL;
806 }
807 if (tmp != NULL && *tmp != '\0') {
808 /* Extract optional path */
809 if ((path = urldecode(tmp)) == NULL)
810 goto out;
811 }
812 }
813
814 /* Success */
815 if (userp != NULL) {
816 *userp = user;
817 user = NULL;
818 }
819 if (hostp != NULL) {
820 *hostp = host;
821 host = NULL;
822 }
823 if (portp != NULL)
824 *portp = port;
825 if (pathp != NULL) {
826 *pathp = path;
827 path = NULL;
828 }
829 ret = 0;
830 out:
831 free(uridup);
832 free(user);
833 free(host);
834 free(path);
835 return ret;
836}
837
531/* function to assist building execv() arguments */ 838/* function to assist building execv() arguments */
532void 839void
533addargs(arglist *args, char *fmt, ...) 840addargs(arglist *args, char *fmt, ...)
@@ -774,16 +1081,19 @@ secure_permissions(struct stat *st, uid_t uid)
774} 1081}
775 1082
776int 1083int
777tun_open(int tun, int mode) 1084tun_open(int tun, int mode, char **ifname)
778{ 1085{
779#if defined(CUSTOM_SYS_TUN_OPEN) 1086#if defined(CUSTOM_SYS_TUN_OPEN)
780 return (sys_tun_open(tun, mode)); 1087 return (sys_tun_open(tun, mode, ifname));
781#elif defined(SSH_TUN_OPENBSD) 1088#elif defined(SSH_TUN_OPENBSD)
782 struct ifreq ifr; 1089 struct ifreq ifr;
783 char name[100]; 1090 char name[100];
784 int fd = -1, sock; 1091 int fd = -1, sock;
785 const char *tunbase = "tun"; 1092 const char *tunbase = "tun";
786 1093
1094 if (ifname != NULL)
1095 *ifname = NULL;
1096
787 if (mode == SSH_TUNMODE_ETHERNET) 1097 if (mode == SSH_TUNMODE_ETHERNET)
788 tunbase = "tap"; 1098 tunbase = "tap";
789 1099
@@ -830,6 +1140,9 @@ tun_open(int tun, int mode)
830 } 1140 }
831 } 1141 }
832 1142
1143 if (ifname != NULL)
1144 *ifname = xstrdup(ifr.ifr_name);
1145
833 close(sock); 1146 close(sock);
834 return fd; 1147 return fd;
835 1148
@@ -996,8 +1309,8 @@ ms_subtract_diff(struct timeval *start, int *ms)
996{ 1309{
997 struct timeval diff, finish; 1310 struct timeval diff, finish;
998 1311
999 gettimeofday(&finish, NULL); 1312 monotime_tv(&finish);
1000 timersub(&finish, start, &diff); 1313 timersub(&finish, start, &diff);
1001 *ms -= (diff.tv_sec * 1000) + (diff.tv_usec / 1000); 1314 *ms -= (diff.tv_sec * 1000) + (diff.tv_usec / 1000);
1002} 1315}
1003 1316
@@ -1010,54 +1323,63 @@ ms_to_timeval(struct timeval *tv, int ms)
1010 tv->tv_usec = (ms % 1000) * 1000; 1323 tv->tv_usec = (ms % 1000) * 1000;
1011} 1324}
1012 1325
1013time_t 1326void
1014monotime(void) 1327monotime_ts(struct timespec *ts)
1015{ 1328{
1016#if defined(HAVE_CLOCK_GETTIME) && \ 1329 struct timeval tv;
1017 (defined(CLOCK_MONOTONIC) || defined(CLOCK_BOOTTIME)) 1330#if defined(HAVE_CLOCK_GETTIME) && (defined(CLOCK_BOOTTIME) || \
1018 struct timespec ts; 1331 defined(CLOCK_MONOTONIC) || defined(CLOCK_REALTIME))
1019 static int gettime_failed = 0; 1332 static int gettime_failed = 0;
1020 1333
1021 if (!gettime_failed) { 1334 if (!gettime_failed) {
1022#if defined(CLOCK_BOOTTIME) 1335# ifdef CLOCK_BOOTTIME
1023 if (clock_gettime(CLOCK_BOOTTIME, &ts) == 0) 1336 if (clock_gettime(CLOCK_BOOTTIME, ts) == 0)
1024 return (ts.tv_sec); 1337 return;
1025#endif 1338# endif /* CLOCK_BOOTTIME */
1026#if defined(CLOCK_MONOTONIC) 1339# ifdef CLOCK_MONOTONIC
1027 if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) 1340 if (clock_gettime(CLOCK_MONOTONIC, ts) == 0)
1028 return (ts.tv_sec); 1341 return;
1029#endif 1342# endif /* CLOCK_MONOTONIC */
1343# ifdef CLOCK_REALTIME
1344 /* Not monotonic, but we're almost out of options here. */
1345 if (clock_gettime(CLOCK_REALTIME, ts) == 0)
1346 return;
1347# endif /* CLOCK_REALTIME */
1030 debug3("clock_gettime: %s", strerror(errno)); 1348 debug3("clock_gettime: %s", strerror(errno));
1031 gettime_failed = 1; 1349 gettime_failed = 1;
1032 } 1350 }
1033#endif /* HAVE_CLOCK_GETTIME && (CLOCK_MONOTONIC || CLOCK_BOOTTIME */ 1351#endif /* HAVE_CLOCK_GETTIME && (BOOTTIME || MONOTONIC || REALTIME) */
1352 gettimeofday(&tv, NULL);
1353 ts->tv_sec = tv.tv_sec;
1354 ts->tv_nsec = (long)tv.tv_usec * 1000;
1355}
1034 1356
1035 return time(NULL); 1357void
1358monotime_tv(struct timeval *tv)
1359{
1360 struct timespec ts;
1361
1362 monotime_ts(&ts);
1363 tv->tv_sec = ts.tv_sec;
1364 tv->tv_usec = ts.tv_nsec / 1000;
1365}
1366
1367time_t
1368monotime(void)
1369{
1370 struct timespec ts;
1371
1372 monotime_ts(&ts);
1373 return ts.tv_sec;
1036} 1374}
1037 1375
1038double 1376double
1039monotime_double(void) 1377monotime_double(void)
1040{ 1378{
1041#if defined(HAVE_CLOCK_GETTIME) && \
1042 (defined(CLOCK_MONOTONIC) || defined(CLOCK_BOOTTIME))
1043 struct timespec ts; 1379 struct timespec ts;
1044 static int gettime_failed = 0;
1045
1046 if (!gettime_failed) {
1047#if defined(CLOCK_BOOTTIME)
1048 if (clock_gettime(CLOCK_BOOTTIME, &ts) == 0)
1049 return (ts.tv_sec + (double)ts.tv_nsec / 1000000000);
1050#endif
1051#if defined(CLOCK_MONOTONIC)
1052 if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0)
1053 return (ts.tv_sec + (double)ts.tv_nsec / 1000000000);
1054#endif
1055 debug3("clock_gettime: %s", strerror(errno));
1056 gettime_failed = 1;
1057 }
1058#endif /* HAVE_CLOCK_GETTIME && (CLOCK_MONOTONIC || CLOCK_BOOTTIME */
1059 1380
1060 return (double)time(NULL); 1381 monotime_ts(&ts);
1382 return ts.tv_sec + ((double)ts.tv_nsec / 1000000000);
1061} 1383}
1062 1384
1063void 1385void
@@ -1079,7 +1401,7 @@ bandwidth_limit(struct bwlimit *bw, size_t read_len)
1079 struct timespec ts, rm; 1401 struct timespec ts, rm;
1080 1402
1081 if (!timerisset(&bw->bwstart)) { 1403 if (!timerisset(&bw->bwstart)) {
1082 gettimeofday(&bw->bwstart, NULL); 1404 monotime_tv(&bw->bwstart);
1083 return; 1405 return;
1084 } 1406 }
1085 1407
@@ -1087,7 +1409,7 @@ bandwidth_limit(struct bwlimit *bw, size_t read_len)
1087 if (bw->lamt < bw->thresh) 1409 if (bw->lamt < bw->thresh)
1088 return; 1410 return;
1089 1411
1090 gettimeofday(&bw->bwend, NULL); 1412 monotime_tv(&bw->bwend);
1091 timersub(&bw->bwend, &bw->bwstart, &bw->bwend); 1413 timersub(&bw->bwend, &bw->bwstart, &bw->bwend);
1092 if (!timerisset(&bw->bwend)) 1414 if (!timerisset(&bw->bwend))
1093 return; 1415 return;
@@ -1121,7 +1443,7 @@ bandwidth_limit(struct bwlimit *bw, size_t read_len)
1121 } 1443 }
1122 1444
1123 bw->lamt = 0; 1445 bw->lamt = 0;
1124 gettimeofday(&bw->bwstart, NULL); 1446 monotime_tv(&bw->bwstart);
1125} 1447}
1126 1448
1127/* Make a template filename for mk[sd]temp() */ 1449/* Make a template filename for mk[sd]temp() */
@@ -1222,9 +1544,10 @@ unix_listener(const char *path, int backlog, int unlink_first)
1222 1544
1223 memset(&sunaddr, 0, sizeof(sunaddr)); 1545 memset(&sunaddr, 0, sizeof(sunaddr));
1224 sunaddr.sun_family = AF_UNIX; 1546 sunaddr.sun_family = AF_UNIX;
1225 if (strlcpy(sunaddr.sun_path, path, sizeof(sunaddr.sun_path)) >= sizeof(sunaddr.sun_path)) { 1547 if (strlcpy(sunaddr.sun_path, path,
1226 error("%s: \"%s\" too long for Unix domain socket", __func__, 1548 sizeof(sunaddr.sun_path)) >= sizeof(sunaddr.sun_path)) {
1227 path); 1549 error("%s: path \"%s\" too long for Unix domain socket",
1550 __func__, path);
1228 errno = ENAMETOOLONG; 1551 errno = ENAMETOOLONG;
1229 return -1; 1552 return -1;
1230 } 1553 }
@@ -1232,7 +1555,7 @@ unix_listener(const char *path, int backlog, int unlink_first)
1232 sock = socket(PF_UNIX, SOCK_STREAM, 0); 1555 sock = socket(PF_UNIX, SOCK_STREAM, 0);
1233 if (sock < 0) { 1556 if (sock < 0) {
1234 saved_errno = errno; 1557 saved_errno = errno;
1235 error("socket: %.100s", strerror(errno)); 1558 error("%s: socket: %.100s", __func__, strerror(errno));
1236 errno = saved_errno; 1559 errno = saved_errno;
1237 return -1; 1560 return -1;
1238 } 1561 }
@@ -1242,18 +1565,18 @@ unix_listener(const char *path, int backlog, int unlink_first)
1242 } 1565 }
1243 if (bind(sock, (struct sockaddr *)&sunaddr, sizeof(sunaddr)) < 0) { 1566 if (bind(sock, (struct sockaddr *)&sunaddr, sizeof(sunaddr)) < 0) {
1244 saved_errno = errno; 1567 saved_errno = errno;
1245 error("bind: %.100s", strerror(errno)); 1568 error("%s: cannot bind to path %s: %s",
1569 __func__, path, strerror(errno));
1246 close(sock); 1570 close(sock);
1247 error("%s: cannot bind to path: %s", __func__, path);
1248 errno = saved_errno; 1571 errno = saved_errno;
1249 return -1; 1572 return -1;
1250 } 1573 }
1251 if (listen(sock, backlog) < 0) { 1574 if (listen(sock, backlog) < 0) {
1252 saved_errno = errno; 1575 saved_errno = errno;
1253 error("listen: %.100s", strerror(errno)); 1576 error("%s: cannot listen on path %s: %s",
1577 __func__, path, strerror(errno));
1254 close(sock); 1578 close(sock);
1255 unlink(path); 1579 unlink(path);
1256 error("%s: cannot listen on path: %s", __func__, path);
1257 errno = saved_errno; 1580 errno = saved_errno;
1258 return -1; 1581 return -1;
1259 } 1582 }
@@ -1467,158 +1790,6 @@ argv_assemble(int argc, char **argv)
1467 return ret; 1790 return ret;
1468} 1791}
1469 1792
1470/*
1471 * Runs command in a subprocess wuth a minimal environment.
1472 * Returns pid on success, 0 on failure.
1473 * The child stdout and stderr maybe captured, left attached or sent to
1474 * /dev/null depending on the contents of flags.
1475 * "tag" is prepended to log messages.
1476 * NB. "command" is only used for logging; the actual command executed is
1477 * av[0].
1478 */
1479pid_t
1480subprocess(const char *tag, struct passwd *pw, const char *command,
1481 int ac, char **av, FILE **child, u_int flags)
1482{
1483 FILE *f = NULL;
1484 struct stat st;
1485 int fd, devnull, p[2], i;
1486 pid_t pid;
1487 char *cp, errmsg[512];
1488 u_int envsize;
1489 char **child_env;
1490
1491 if (child != NULL)
1492 *child = NULL;
1493
1494 debug3("%s: %s command \"%s\" running as %s (flags 0x%x)", __func__,
1495 tag, command, pw->pw_name, flags);
1496
1497 /* Check consistency */
1498 if ((flags & SSH_SUBPROCESS_STDOUT_DISCARD) != 0 &&
1499 (flags & SSH_SUBPROCESS_STDOUT_CAPTURE) != 0) {
1500 error("%s: inconsistent flags", __func__);
1501 return 0;
1502 }
1503 if (((flags & SSH_SUBPROCESS_STDOUT_CAPTURE) == 0) != (child == NULL)) {
1504 error("%s: inconsistent flags/output", __func__);
1505 return 0;
1506 }
1507
1508 /*
1509 * If executing an explicit binary, then verify the it exists
1510 * and appears safe-ish to execute
1511 */
1512 if (*av[0] != '/') {
1513 error("%s path is not absolute", tag);
1514 return 0;
1515 }
1516 temporarily_use_uid(pw);
1517 if (stat(av[0], &st) < 0) {
1518 error("Could not stat %s \"%s\": %s", tag,
1519 av[0], strerror(errno));
1520 restore_uid();
1521 return 0;
1522 }
1523 if (safe_path(av[0], &st, NULL, 0, errmsg, sizeof(errmsg)) != 0) {
1524 error("Unsafe %s \"%s\": %s", tag, av[0], errmsg);
1525 restore_uid();
1526 return 0;
1527 }
1528 /* Prepare to keep the child's stdout if requested */
1529 if (pipe(p) != 0) {
1530 error("%s: pipe: %s", tag, strerror(errno));
1531 restore_uid();
1532 return 0;
1533 }
1534 restore_uid();
1535
1536 switch ((pid = fork())) {
1537 case -1: /* error */
1538 error("%s: fork: %s", tag, strerror(errno));
1539 close(p[0]);
1540 close(p[1]);
1541 return 0;
1542 case 0: /* child */
1543 /* Prepare a minimal environment for the child. */
1544 envsize = 5;
1545 child_env = xcalloc(sizeof(*child_env), envsize);
1546 child_set_env(&child_env, &envsize, "PATH", _PATH_STDPATH);
1547 child_set_env(&child_env, &envsize, "USER", pw->pw_name);
1548 child_set_env(&child_env, &envsize, "LOGNAME", pw->pw_name);
1549 child_set_env(&child_env, &envsize, "HOME", pw->pw_dir);
1550 if ((cp = getenv("LANG")) != NULL)
1551 child_set_env(&child_env, &envsize, "LANG", cp);
1552
1553 for (i = 0; i < NSIG; i++)
1554 signal(i, SIG_DFL);
1555
1556 if ((devnull = open(_PATH_DEVNULL, O_RDWR)) == -1) {
1557 error("%s: open %s: %s", tag, _PATH_DEVNULL,
1558 strerror(errno));
1559 _exit(1);
1560 }
1561 if (dup2(devnull, STDIN_FILENO) == -1) {
1562 error("%s: dup2: %s", tag, strerror(errno));
1563 _exit(1);
1564 }
1565
1566 /* Set up stdout as requested; leave stderr in place for now. */
1567 fd = -1;
1568 if ((flags & SSH_SUBPROCESS_STDOUT_CAPTURE) != 0)
1569 fd = p[1];
1570 else if ((flags & SSH_SUBPROCESS_STDOUT_DISCARD) != 0)
1571 fd = devnull;
1572 if (fd != -1 && dup2(fd, STDOUT_FILENO) == -1) {
1573 error("%s: dup2: %s", tag, strerror(errno));
1574 _exit(1);
1575 }
1576 closefrom(STDERR_FILENO + 1);
1577
1578 /* Don't use permanently_set_uid() here to avoid fatal() */
1579 if (setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) != 0) {
1580 error("%s: setresgid %u: %s", tag, (u_int)pw->pw_gid,
1581 strerror(errno));
1582 _exit(1);
1583 }
1584 if (setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid) != 0) {
1585 error("%s: setresuid %u: %s", tag, (u_int)pw->pw_uid,
1586 strerror(errno));
1587 _exit(1);
1588 }
1589 /* stdin is pointed to /dev/null at this point */
1590 if ((flags & SSH_SUBPROCESS_STDOUT_DISCARD) != 0 &&
1591 dup2(STDIN_FILENO, STDERR_FILENO) == -1) {
1592 error("%s: dup2: %s", tag, strerror(errno));
1593 _exit(1);
1594 }
1595
1596 execve(av[0], av, child_env);
1597 error("%s exec \"%s\": %s", tag, command, strerror(errno));
1598 _exit(127);
1599 default: /* parent */
1600 break;
1601 }
1602
1603 close(p[1]);
1604 if ((flags & SSH_SUBPROCESS_STDOUT_CAPTURE) == 0)
1605 close(p[0]);
1606 else if ((f = fdopen(p[0], "r")) == NULL) {
1607 error("%s: fdopen: %s", tag, strerror(errno));
1608 close(p[0]);
1609 /* Don't leave zombie child */
1610 kill(pid, SIGTERM);
1611 while (waitpid(pid, NULL, 0) == -1 && errno == EINTR)
1612 ;
1613 return 0;
1614 }
1615 /* Success */
1616 debug3("%s: %s pid %ld", __func__, tag, (long)pid);
1617 if (child != NULL)
1618 *child = f;
1619 return pid;
1620}
1621
1622/* Returns 0 if pid exited cleanly, non-zero otherwise */ 1793/* Returns 0 if pid exited cleanly, non-zero otherwise */
1623int 1794int
1624exited_cleanly(pid_t pid, const char *tag, const char *cmd, int quiet) 1795exited_cleanly(pid_t pid, const char *tag, const char *cmd, int quiet)
@@ -1787,7 +1958,122 @@ child_set_env(char ***envp, u_int *envsizep, const char *name,
1787 } 1958 }
1788 1959
1789 /* Allocate space and format the variable in the appropriate slot. */ 1960 /* Allocate space and format the variable in the appropriate slot. */
1961 /* XXX xasprintf */
1790 env[i] = xmalloc(strlen(name) + 1 + strlen(value) + 1); 1962 env[i] = xmalloc(strlen(name) + 1 + strlen(value) + 1);
1791 snprintf(env[i], strlen(name) + 1 + strlen(value) + 1, "%s=%s", name, value); 1963 snprintf(env[i], strlen(name) + 1 + strlen(value) + 1, "%s=%s", name, value);
1792} 1964}
1793 1965
1966/*
1967 * Check and optionally lowercase a domain name, also removes trailing '.'
1968 * Returns 1 on success and 0 on failure, storing an error message in errstr.
1969 */
1970int
1971valid_domain(char *name, int makelower, const char **errstr)
1972{
1973 size_t i, l = strlen(name);
1974 u_char c, last = '\0';
1975 static char errbuf[256];
1976
1977 if (l == 0) {
1978 strlcpy(errbuf, "empty domain name", sizeof(errbuf));
1979 goto bad;
1980 }
1981 if (!isalpha((u_char)name[0]) && !isdigit((u_char)name[0])) {
1982 snprintf(errbuf, sizeof(errbuf), "domain name \"%.100s\" "
1983 "starts with invalid character", name);
1984 goto bad;
1985 }
1986 for (i = 0; i < l; i++) {
1987 c = tolower((u_char)name[i]);
1988 if (makelower)
1989 name[i] = (char)c;
1990 if (last == '.' && c == '.') {
1991 snprintf(errbuf, sizeof(errbuf), "domain name "
1992 "\"%.100s\" contains consecutive separators", name);
1993 goto bad;
1994 }
1995 if (c != '.' && c != '-' && !isalnum(c) &&
1996 c != '_') /* technically invalid, but common */ {
1997 snprintf(errbuf, sizeof(errbuf), "domain name "
1998 "\"%.100s\" contains invalid characters", name);
1999 goto bad;
2000 }
2001 last = c;
2002 }
2003 if (name[l - 1] == '.')
2004 name[l - 1] = '\0';
2005 if (errstr != NULL)
2006 *errstr = NULL;
2007 return 1;
2008bad:
2009 if (errstr != NULL)
2010 *errstr = errbuf;
2011 return 0;
2012}
2013
2014const char *
2015atoi_err(const char *nptr, int *val)
2016{
2017 const char *errstr = NULL;
2018 long long num;
2019
2020 if (nptr == NULL || *nptr == '\0')
2021 return "missing";
2022 num = strtonum(nptr, 0, INT_MAX, &errstr);
2023 if (errstr == NULL)
2024 *val = (int)num;
2025 return errstr;
2026}
2027
2028int
2029parse_absolute_time(const char *s, uint64_t *tp)
2030{
2031 struct tm tm;
2032 time_t tt;
2033 char buf[32], *fmt;
2034
2035 *tp = 0;
2036
2037 /*
2038 * POSIX strptime says "The application shall ensure that there
2039 * is white-space or other non-alphanumeric characters between
2040 * any two conversion specifications" so arrange things this way.
2041 */
2042 switch (strlen(s)) {
2043 case 8: /* YYYYMMDD */
2044 fmt = "%Y-%m-%d";
2045 snprintf(buf, sizeof(buf), "%.4s-%.2s-%.2s", s, s + 4, s + 6);
2046 break;
2047 case 12: /* YYYYMMDDHHMM */
2048 fmt = "%Y-%m-%dT%H:%M";
2049 snprintf(buf, sizeof(buf), "%.4s-%.2s-%.2sT%.2s:%.2s",
2050 s, s + 4, s + 6, s + 8, s + 10);
2051 break;
2052 case 14: /* YYYYMMDDHHMMSS */
2053 fmt = "%Y-%m-%dT%H:%M:%S";
2054 snprintf(buf, sizeof(buf), "%.4s-%.2s-%.2sT%.2s:%.2s:%.2s",
2055 s, s + 4, s + 6, s + 8, s + 10, s + 12);
2056 break;
2057 default:
2058 return SSH_ERR_INVALID_FORMAT;
2059 }
2060
2061 memset(&tm, 0, sizeof(tm));
2062 if (strptime(buf, fmt, &tm) == NULL)
2063 return SSH_ERR_INVALID_FORMAT;
2064 if ((tt = mktime(&tm)) < 0)
2065 return SSH_ERR_INVALID_FORMAT;
2066 /* success */
2067 *tp = (uint64_t)tt;
2068 return 0;
2069}
2070
2071void
2072format_absolute_time(uint64_t t, char *buf, size_t len)
2073{
2074 time_t tt = t > INT_MAX ? INT_MAX : t; /* XXX revisit in 2038 :P */
2075 struct tm tm;
2076
2077 localtime_r(&tt, &tm);
2078 strftime(buf, len, "%Y-%m-%dT%H:%M:%S", &tm);
2079}
diff --git a/misc.h b/misc.h
index d8759ab10..51943db90 100644
--- a/misc.h
+++ b/misc.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: misc.h,v 1.63 2017/08/18 05:48:04 djm Exp $ */ 1/* $OpenBSD: misc.h,v 1.71 2018/03/12 00:52:01 djm Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -48,13 +48,18 @@ char *strdelim(char **);
48int set_nonblock(int); 48int set_nonblock(int);
49int unset_nonblock(int); 49int unset_nonblock(int);
50void set_nodelay(int); 50void set_nodelay(int);
51int set_reuseaddr(int);
52char *get_rdomain(int);
53int set_rdomain(int, const char *);
51int a2port(const char *); 54int a2port(const char *);
52int a2tun(const char *, int *); 55int a2tun(const char *, int *);
53char *put_host_port(const char *, u_short); 56char *put_host_port(const char *, u_short);
54char *hpdelim(char **); 57char *hpdelim(char **);
55char *cleanhostname(char *); 58char *cleanhostname(char *);
56char *colon(char *); 59char *colon(char *);
60int parse_user_host_path(const char *, char **, char **, char **);
57int parse_user_host_port(const char *, char **, char **, int *); 61int parse_user_host_port(const char *, char **, char **, int *);
62int parse_uri(const char *, const char *, char **, char **, int *, char **);
58long convtime(const char *); 63long convtime(const char *);
59char *tilde_expand_filename(const char *, uid_t); 64char *tilde_expand_filename(const char *, uid_t);
60char *percent_expand(const char *, ...) __attribute__((__sentinel__)); 65char *percent_expand(const char *, ...) __attribute__((__sentinel__));
@@ -62,10 +67,16 @@ char *tohex(const void *, size_t);
62void sanitise_stdfd(void); 67void sanitise_stdfd(void);
63void ms_subtract_diff(struct timeval *, int *); 68void ms_subtract_diff(struct timeval *, int *);
64void ms_to_timeval(struct timeval *, int); 69void ms_to_timeval(struct timeval *, int);
70void monotime_ts(struct timespec *);
71void monotime_tv(struct timeval *);
65time_t monotime(void); 72time_t monotime(void);
66double monotime_double(void); 73double monotime_double(void);
67void lowercase(char *s); 74void lowercase(char *s);
68int unix_listener(const char *, int, int); 75int unix_listener(const char *, int, int);
76int valid_domain(char *, int, const char **);
77const char *atoi_err(const char *, int *);
78int parse_absolute_time(const char *, uint64_t *);
79void format_absolute_time(uint64_t, char *, size_t);
69 80
70void sock_set_v6only(int); 81void sock_set_v6only(int);
71 82
@@ -84,7 +95,7 @@ void replacearg(arglist *, u_int, char *, ...)
84 __attribute__((format(printf, 3, 4))); 95 __attribute__((format(printf, 3, 4)));
85void freeargs(arglist *); 96void freeargs(arglist *);
86 97
87int tun_open(int, int); 98int tun_open(int, int, char **);
88 99
89/* Common definitions for ssh tunnel device forwarding */ 100/* Common definitions for ssh tunnel device forwarding */
90#define SSH_TUNMODE_NO 0x00 101#define SSH_TUNMODE_NO 0x00
@@ -140,12 +151,6 @@ int argv_split(const char *, int *, char ***);
140char *argv_assemble(int, char **argv); 151char *argv_assemble(int, char **argv);
141int exited_cleanly(pid_t, const char *, const char *, int); 152int exited_cleanly(pid_t, const char *, const char *, int);
142 153
143#define SSH_SUBPROCESS_STDOUT_DISCARD (1) /* Discard stdout */
144#define SSH_SUBPROCESS_STDOUT_CAPTURE (1<<1) /* Redirect stdout */
145#define SSH_SUBPROCESS_STDERR_DISCARD (1<<2) /* Discard stderr */
146pid_t subprocess(const char *, struct passwd *,
147 const char *, int, char **, FILE **, u_int flags);
148
149struct stat; 154struct stat;
150int safe_path(const char *, struct stat *, const char *, uid_t, 155int safe_path(const char *, struct stat *, const char *, uid_t,
151 char *, size_t); 156 char *, size_t);
diff --git a/mkinstalldirs b/mkinstalldirs
index 47d5f43fe..399f40925 100755
--- a/mkinstalldirs
+++ b/mkinstalldirs
@@ -4,8 +4,6 @@
4# Created: 1993-05-16 4# Created: 1993-05-16
5# Public domain 5# Public domain
6 6
7# $Id: mkinstalldirs,v 1.2 2003/11/21 12:48:55 djm Exp $
8
9errstatus=0 7errstatus=0
10 8
11for file 9for file
diff --git a/moduli b/moduli
index 00b5a6937..cf28bd36b 100644
--- a/moduli
+++ b/moduli
@@ -1,431 +1,407 @@
1# $OpenBSD: moduli,v 1.18 2016/08/11 01:42:11 dtucker Exp $ 1# $OpenBSD: moduli,v 1.20 2017/11/29 05:49:54 dtucker Exp $
2# Time Type Tests Tries Size Generator Modulus 2# Time Type Tests Tries Size Generator Modulus
320160301052556 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D19F4647 320170623034823 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EAE4E76CB
420160301052601 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D1A5C13B 420170623034906 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EAEB63283
520160301052612 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D1B7A3EF 520170623034928 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EAEE49C27
620160301052620 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D1C4C33B 620170623034936 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EAEF2BE1B
720160301052628 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D1CFFACB 720170623034957 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EAF22F2D7
820160301052645 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D1F31D8B 820170623035029 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EAF68D3A7
920160301052703 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D218C293 920170623035052 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EAF9A9793
1020160301052723 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D24116E3 1020170623035228 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB085C01B
1120160301052732 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D25321F3 1120170623035326 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB1140217
1220160301052741 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D260D8E3 1220170623035332 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB11ACBD7
1320160301052748 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D26CD3D3 1320170623035408 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB16AD187
1420160301052756 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D2791F7B 1420170623035414 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB1737B53
1520160301052823 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D2B71133 1520170623035442 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB1B1C483
1620160301052827 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D2BABBA3 1620170623035454 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB1C8B93B
1720160301052832 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D2BFC957 1720170623035510 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB1EAD06B
1820160301052931 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D3514117 1820170623035525 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB208DA8B
1920160301053017 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D3BF91F7 1920170623035553 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB2498F17
2020160301053037 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D3E9113F 2020170623035604 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB25D82D3
2120160301053101 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D41BFA83 2120170623035609 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB262420F
2220160301053129 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D45A369F 2220170623035735 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB3376DEF
2320160301053217 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D4CB8683 2320170623035801 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB370E193
2420160301053222 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D4D01463 2420170623035916 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB426D9CF
2520160301053251 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D50F62C3 2520170623035935 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB44E559B
2620160301053309 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D5351887 2620170623035955 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB4777177
2720160301053333 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D568358B 2720170623040012 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB4995E77
2820160301053350 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D58AA31F 2820170623040023 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB4ACAF8B
2920160301053359 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D5991AF3 2920170623040032 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB4BB1ADB
3020160301053438 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D5F65E07 3020170623040120 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB52D4F1F
3120160301053523 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D65F37D3 3120170623040131 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB542306B
3220160301053556 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D6AB7E73 3220170623040202 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB5899CB7
3320160301053608 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D6C131CB 3320170623040216 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB5A317FB
3420160301053631 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D6F18A93 3420170623040224 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB5AEBE43
3520160301053647 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D7132B7F 3520170623040246 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB5E190BF
3620160301053724 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D76995EB 3620170623040254 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB5EBE533
3720160301053743 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D793D27B 3720170623040334 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB649ECAF
3820160301053757 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D7AE856B 3820170623040448 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C4B50D13
3920160301053820 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D7E1810F 3920170623040459 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C4C9F477
4020160301053828 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D7EC09EB 4020170623040510 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C4DDC50B
4120160301053831 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D7ECC2FB 4120170623040603 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C55E2BE7
4220160301053958 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D8B829CB 4220170623040614 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C5715757
4320160301054042 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D91CFCF3 4320170623040626 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C58A0617
4420160301054134 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251903103B 4420170623040632 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C5910FF7
4520160301054139 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF2519072B8B 4520170623040709 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C5E85ABB
4620160301054157 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF25192F631F 4620170623040729 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C61714B7
4720160301054207 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF25193F9E7F 4720170623040745 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C6362DF7
4820160301054213 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF2519475A1F 4820170623040759 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C64F9EEB
4920160301054301 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF2519BA6807 4920170623040829 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C6949627
5020160301054320 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF2519E2FA7F 5020170623040836 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C69F6763
5120160301054340 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251A0CD913 5120170623040925 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C712B23B
5220160301054413 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251A5B8A43 5220170623040941 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C7336C6F
5320160301054511 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251AE66597 5320170623041004 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C76418FB
5420160301054527 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251B03A57F 5420170623041040 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C7B6A153
5520160301054544 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251B276FBB 5520170623041049 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C7C6F12F
5620160301054548 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251B2915B3 5620170623041059 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C7D798EF
5720160301054621 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251B79A4BB 5720170623041129 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C81D54F3
5820160301054714 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251BF77377 5820170623041311 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C919987F
5920160301054737 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251C28D853 5920170623041314 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C91A831B
6020160301054819 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251C8C959B 6020170623041341 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C95422FF
6120160301054844 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251CC0A39B 6120170623041350 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C9646B7F
6220160301055002 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251D7C0A9F 6220170623041354 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C9662E87
6320160301055021 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251DA0A72F 6320170623041503 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3CA105123
6420160301055024 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251DA1003F 6420170623041522 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3CA3BE707
6520160301055029 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251DA4B607 6520170623041541 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3CA620DAB
6620160301055034 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251DA82003 6620170623041546 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3CA66FFC3
6720160301055101 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251DE323BB 6720170623041620 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3CAB69493
6820160301055123 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251E13DB33 6820170623041704 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3CB1C2B4B
6920160301055136 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251E2A2203 6920170623041709 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3CB1FD10B
7020160301055141 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251E2F180B 7020170623041747 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3CB7550DB
7120160301055208 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251E6B2E8B 7120170623041822 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3CBC63D2B
7220160301055248 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251ECCA61B 7220170623041830 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3CBD499AB
7320160301055312 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251EFFD5C7 7320170623043901 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5508B03E93
7420160301055319 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251F08AD6B 7420170623044452 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5509C5C937
7520160301055413 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251F881A4B 7520170623044600 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5509F436FB
7620160301055420 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251F8FC967 7620170623044825 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB550A640733
7720160301055438 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251FB8102B 7720170623045050 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB550AD6755B
7820160301055505 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251FF16983 7820170623045124 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB550AE93B43
7920160301061411 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26C5D83833 7920170623045420 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB550B6F1ED3
8020160301061835 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26C6AAA907 8020170623045805 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB550C20298F
8120160301062447 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26C7D2DF17 8120170623045930 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB550C5914BF
8220160301062535 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26C7F0856B 8220170623050341 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB550D1A1773
8320160301062652 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26C8266573 8320170623050720 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB550DC219FB
8420160301062708 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26C82B4297 8420170623051801 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB550FBDD1AF
8520160301063801 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CA342897 8520170623052216 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5510842093
8620160301063920 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CA6B6B53 8620170623052416 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5510DBFCD7
8720160301064001 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CA83D25B 8720170623052526 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB55110BB843
8820160301064133 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CAC6E0AF 8820170623052831 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB551196B36B
8920160301064312 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CB0B8B2F 8920170623053119 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB551217A237
9020160301064624 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CB9E9EBB 9020170623053458 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5512C20307
9120160301064954 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CC41F773 9120170623053734 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB55133990CB
9220160301065030 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CC56680F 9220170623054412 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5514721AB3
9320160301065134 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CC82B2B3 9320170623054517 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB55149F4D0B
9420160301065432 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CD0A0833 9420170623055017 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB551583DD9B
9520160301065614 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CD54CA17 9520170623055422 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB55163A7903
9620160301070010 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CE0A7B73 9620170623055449 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5516475E5F
9720160301070046 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CE21045B 9720170623055516 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5516556F37
9820160301070141 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CE4560CB 9820170623055539 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB55165F8F67
9920160301070334 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CE9951EF 9920170623055716 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5516A5CA13
10020160301070607 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CF0C830B 10020170623055812 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5516C8A4A3
10120160301070911 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CF96B75B 10120170623055846 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5516DBF96B
10220160301070931 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CF9EB207 10220170623060438 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5517E20F03
10320160301071405 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D07614DB 10320170623060534 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB551803F1D7
10420160301071648 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D0F1177B 10420170623060551 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB55180824C7
10520160301071915 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D15E484F 10520170623060759 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5518622977
10620160301071932 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D16371F3 10620170623061152 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB55190DD957
10720160301072032 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D18BD843 10720170623061950 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21EBBB813F
10820160301072158 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D1C7632B 10820170623062054 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21EBE73A63
10920160301072445 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D2450187 10920170623062250 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21EC3B7BBB
11020160301072709 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D2B15CFB 11020170623062850 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21ED5538D7
11120160301073130 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D37B3327 11120170623063051 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21EDADBD87
11220160301073142 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D37C7FA3 11220170623063106 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21EDB14127
11320160301073822 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D4B57B13 11320170623063228 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21EDEBD58B
11420160301074016 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D50A615F 11420170623063242 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21EDEE14B3
11520160301074134 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D5419827 11520170623063301 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21EDF542E7
11620160301074208 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D554AA2F 11620170623063538 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21EE64F8A3
11720160301074359 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D5A29FEB 11720170623063759 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21EEC9D597
11820160301074457 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D5C6DA83 11820170623064815 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F0A8EB1F
11920160301074620 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D601594B 11920170623065609 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F21F5CB7
12020160301074846 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D66D7E6B 12020170623070150 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F32604CB
12120160301074917 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D67D64E7 12120170623070933 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F48C5ED3
12220160301075053 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D6C27B8B 12220170623071215 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F5044ECB
12320160301075132 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D6DB9C33 12320170623071504 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F5815613
12420160301075225 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D6FE9337 12420170623071625 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F5B8F8AB
12520160301075252 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D70AF577 12520170623071723 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F5DE3F7B
12620160301075345 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D72CB613 12620170623071945 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F645009B
12720160301075358 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D72F088B 12720170623072445 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F721A837
12820160301080151 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F1FA94507 12820170623072516 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F731AF17
12920160301080332 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F1FF62A2F 12920170623073343 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F8B6F58F
13020160301080512 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F203E0E3F 13020170623073442 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F8DA7A47
13120160301080759 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F20BE897F 13120170623073826 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F983F783
13220160301081008 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F211E8DAB 13220170623074239 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21FA40B7CF
13320160301081510 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F220FBEBB 13320170623074307 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21FA4F193B
13420160301081725 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F22727C13 13420170623074345 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21FA61D323
13520160301082213 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F2352279F 13520170623074648 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21FAEB991B
13620160301083400 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F25905AEF 13620170623074919 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21FB5876F7
13720160301083955 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F26AB557B 13720170623075011 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21FB79557F
13820160301084035 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F26C1D647 13820170623075040 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21FB88E5F7
13920160301084145 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F26F0E75B 13920170623075211 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21FBC86DF3
14020160301084827 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F282FE7DB 14020170623075233 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21FBD19D1B
14120160301084906 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F2847CBF7 14120170623075313 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21FBE8A97F
14220160301085226 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F28E1E963 14220170623080026 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21FD35417B
14320160301085254 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F28EF835B 14320170623082844 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069919E3F0A3
14420160301085737 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F29D012DB 14420170623084111 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB47998481906991AE37AEB
14520160301085933 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F2A259503 14520170623091322 2 6 100 4095 5 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB47998481906991D857A5F
14620160301090045 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F2A569E5F 14620170623095654 2 6 100 4095 5 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB4799848190699210172E7
14720160301090201 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F2A89EEB7 14720170623095828 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069921188C6B
14820160301090441 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F2B037B2F 14820170623095901 2 6 100 4095 5 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB4799848190699211B667F
14920160301090534 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F2B2559FB 14920170623100423 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069921818383
15020160301090628 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F2B484193 15020170623101338 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB4799848190699223C1F3B
15120160301092125 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F2E1E1337 15120170623101757 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB4799848190699228B3683
15220160301092513 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F2ECC261B 15220170623104910 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB4799848190699250221BB
15320160301093051 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F2FD6418B 15320170623110231 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB4799848190699260AC373
15420160301101954 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29E60ED3CB 15420170623110814 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB47998481906992672C113
15520160301104238 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29E7F21B53 15520170623113826 2 6 100 4095 5 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069928D90D4F
15620160301105433 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29E8EA1923 15620170623120249 2 6 100 4095 5 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB47998481906992AC1BA3F
15720160301110823 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29EA099523 15720170623121815 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB47998481906992BFC1B7B
15820160301111806 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29EAD0379B 15820170623122456 2 6 100 4095 5 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB47998481906992C7EB0CF
15920160301112515 2 6 100 4095 5 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29EB5F9FF7 15920170623123432 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB47998481906992D3D886B
16020160301112655 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29EB7A3C73 16020170623125910 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB47998481906992F34AA0B
16120160301113152 2 6 100 4095 5 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29EBD8A1AF 16120170623130350 2 6 100 4095 5 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB47998481906992F8B1CFF
16220160301114603 2 6 100 4095 5 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29ED0421CF 16220170623131900 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069930BE28FB
16320160301115854 2 6 100 4095 5 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29EE10BE07 16320170623132006 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069930CCBBC3
16420160301122138 2 6 100 4095 5 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29EFED1757 16420170623134400 2 6 100 4095 5 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069932B40887
16520160301124138 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29F18BB82B 16520170623134659 2 6 100 4095 5 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069932E77127
16620160301124341 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29F1AE9F93 16620170623140059 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069934031953
16720160301130540 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29F378431B 16720170623140936 2 6 100 4095 5 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069934AC3B0F
16820160301132038 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29F4B041CB 16820170623142309 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069935BCCF33
16920160301132156 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29F4C33A3B 16920170623142743 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB47998481906993611A26B
17020160301133248 2 6 100 4095 5 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29F59F1817 17020170623150027 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069938A6965B
17120160301135039 2 6 100 4095 5 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29F70D3707 17120170623150107 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069938AB78CB
17220160301135200 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29F720CFD3 17220170623150738 2 6 100 4095 5 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB4799848190699392AA267
17320160301135955 2 6 100 4095 5 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29F7BFD4BF 17320170623152234 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988DA657F33
17420160301141625 2 6 100 4095 5 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29F9118567 17420170623152823 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988DAD58DFF
17520160301143329 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FA446E3B 17520170623153243 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988DB1F719B
17620160301143411 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FA4A5D73 17620170623153719 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988DB76316F
17720160301143511 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FA57571B 17720170623154606 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988DC289BA3
17820160301145341 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FBCEC3DB 17820170623155435 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988DCCFF757
17920160301150532 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FCBAFB3B 17920170623161905 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988DEC7BD43
18020160301150756 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FCE5B5B3 18020170623163928 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988E064A38B
18120160301151026 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FD119B83 18120170623164410 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988E0BD160B
18220160301152435 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FE2CAD43 18220170623172908 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988E467E87B
18320160301152638 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FE504DD3 18320170623174045 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988E54CE16F
18420160301153829 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FF425A73 18420170623175902 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988E6CA185F
18520160301154015 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FF5FBCDB 18520170623180229 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988E706D14B
18620160301154135 2 6 100 4095 5 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FF725ADF 18620170623180811 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988E76F7CD3
18720160301154325 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FF9005B3 18720170623180923 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988E77E8123
18820160301155218 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F2A00430653 18820170623182724 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988E8D82A2B
18920160301160626 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F2A01612A43 18920170623185420 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988EAF9DAE7
19020160301160831 2 6 100 4095 5 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F2A01842FE7 19020170623195226 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988EFA2202B
19120160301161542 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F2A020ED50B 19120170623195633 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988EFEED5BF
19220160301165149 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE54C87A80B 19220170623201051 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F10F59CB
19320160301165241 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE54C91EA2B 19320170623202959 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F2921927
19420160301165750 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE54CFA74E3 19420170623203734 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F32287EB
19520160301173839 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE5504AEAFB 19520170623204218 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F37F8B03
19620160301174247 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE5509AF4D7 19620170623204329 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F38F411F
19720160301174504 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE550BFB1D7 19720170623204840 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F3EE7B13
19820160301180608 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE5526F5F0F 19820170623205709 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F493374B
19920160301181854 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55377C36B 19920170623205814 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F4A24813
20020160301182221 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE553B4B8F3 20020170623210627 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F53F787B
20120160301183911 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55510470B 20120170623210958 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F57EC8EB
20220160301184110 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE555338897 20220170623211248 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F5B1A9D7
20320160301184426 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55571A23F 20320170623213826 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F7B2A7AF
20420160301190148 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE556DEB983 20420170623213924 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F7BDBA73
20520160301192446 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE558BD1523 20520170623214723 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F8513E37
20620160301193428 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE559875F5F 20620170623233949 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D915376BC3
20720160301193505 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE5598BF0AB 20720170624020214 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D918FF036F
20820160301194148 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55A0E82C3 20820170624030028 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D91A80668F
20920160301195020 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55AB8837B 20920170624033630 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D91B697BC3
21020160301195917 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55B6C5AB3 21020170624052652 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D91E5556DB
21120160301200332 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55BBC661B 21120170624075515 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D922262F73
21220160301201317 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55C7D9887 21220170624103157 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D92638CCD7
21320160301201523 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55CA30A3B 21320170624120558 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D92895C273
21420160301202029 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55D044403 21420170624130210 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D92A0429E7
21520160301203514 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55E324A43 21520170624131317 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D92A441063
21620160301203700 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55E4D607B 21620170624132538 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D92A8E794F
21720160301204309 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55EC519A7 21720170624133715 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D92AD26E07
21820160301205135 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55F6BDE23 21820170624145051 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D92CB7412F
21920160301205244 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55F7B0B23 21920170624163751 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D92F668E7B
22020160301205520 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55FA81627 22020170624172739 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D930A8FC4B
22120160301205558 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55FACF2AF 22120170624174055 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D930F6B80B
22220160301213318 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE562B75737 22220170624185924 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D932ED85B7
22320160301214847 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE563F5D2EB 22320170624220917 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D937BF2B3B
22420160301215746 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE564AA7C23 22420170624222456 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D9381B839B
22520160301220025 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE564DC00EB 22520170625033902 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D94007305B
22620160301222154 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE5669AE6CF 22620170625053719 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D942F8C1E7
22720160301223932 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE567FEFC33 22720170625062259 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D944178FAB
22820160301225302 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE569139497 22820170625072908 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D945B1B3DF
22920160301225705 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE5695E7AB7 22920170625075138 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D9463A10C3
23020160301230308 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE569D3D2B3 23020170625080610 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D94691AE5B
23120160301230751 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE56A2CD9CB 23120170625112146 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D94B5B8CDB
23220160301231012 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE56A537EDB 23220170625113648 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D94BB43777
23320160301231655 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE56AD78EE3 23320170625131459 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D94E2020A7
23420160301232437 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE56B7299EB 23420170625141110 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D94F7F2B87
23520160301232518 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE56B78E563 23520170625144415 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D9504A46D3
23620160302001351 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDF880CFD33 23620170625145639 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D9508CDF97
23720160302060207 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDF915C8E67 23720170625203254 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D958CDC1DB
23820160302080221 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDF9484D603 23820170625215049 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D95AA6BE13
23920160302085858 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDF95FD5243 23920170625220255 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D95AE8D4FF
24020160302110323 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDF99425D23 24020170626000351 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973A06777EB
24120160302115537 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDF9AA4530F 24120170626010044 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973A1E685DB
24220160302121026 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDF9AFF17B3 24220170626011405 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973A237A0AB
24320160302125303 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDF9C1752FB 24320170626020723 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973A39C76DB
24420160302132855 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDF9D055A3B 24420170626021405 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973A3C0D837
24520160302145027 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDF9F210C3B 24520170626025354 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973A4CB1E73
24620160302160128 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFA0F799CF 24620170626025848 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973A4E33427
24720160302164318 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFA205C49B 24720170626034407 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973A60D840F
24820160302193543 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFA66F725B 24820170626042648 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973A7271AD3
24920160302223446 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFAB045BFF 24920170626063327 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973AA7A8227
25020160302230706 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFABD44B9F 25020170626073301 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973AC001F7B
25120160303005014 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFAE7817DB 25120170626073912 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973AC204247
25220160303013053 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFAF76805B 25220170626083935 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973ADB29CEF
25320160303031806 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFB234F5BB 25320170626085130 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973ADFA675B
25420160303034446 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFB2DCD713 25420170626103016 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973B0702723
25520160303042131 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFB3CABEBB 25520170626110918 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973B1648BFF
25620160303052710 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFB569F28F 25620170626113343 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973B1F924B3
25720160303064237 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFB744D6A7 25720170626150922 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973B78B107B
25820160303074318 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFB8C38E87 25820170626162428 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973B972EB6B
25920160303091435 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFBB0B707F 25920170626171558 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973BAC16547
26020160303111232 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFBE003643 26020170626231518 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973C3C4E533
26120160303112343 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFBE40A0B3 26120170627001636 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973C53DC917
26220160303113550 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFBE87B0BF 26220170627023229 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973C8A24E33
26320160303120708 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFBF49A92B 26320170627055348 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973CDB0A037
26420160303122005 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFBF954093 26420170627085558 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973D234059B
26520160303134821 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFC1C0AD17 26520170627111046 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973D57B1B3B
26620160303183137 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFC8B45457 26620170627114331 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973D63E6527
26720160303204451 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFCBFBCF5B 26720170627143549 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973DA76351B
26820160303210530 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFCC756893 26820170627150713 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973DB2FF40B
26920160303224116 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFCEC94F0B 26920170627151417 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973DB566CC3
27020160304002011 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F213AE3B5BB 27020170627162358 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973DD096627
27120160304013213 2 6 100 6143 5 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F213CCC818F 27120170627175138 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973DF2B3477
27220160304014837 2 6 100 6143 5 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F213D3357F7 27220170627180034 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973DF5CD463
27320160304050100 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F21426DAC33 27320170627192816 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973E16B337B
27420160304070516 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F2145B0AFE3 27420170627194138 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973E1B23A4B
27520160304085926 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F2148A9E96B 27520170627235654 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6CE22848CB
27620160304092251 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F21493F5C9B 27620170628025708 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6CE4C7FC03
27720160304092815 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F21495C2BA3 27720170628090844 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6CEA316C0F
27820160304115839 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F214D4FED23 27820170628104935 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6CEB9D111B
27920160304122842 2 6 100 6143 5 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F214E130FAF 27920170628114328 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6CEC57837B
28020160304143749 2 6 100 6143 5 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F215161823F 28020170628155547 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6CEFEB085F
28120160304160139 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F2153888D53 28120170628161354 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6CF024A37B
28220160304160440 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F215394B933 28220170629103301 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6CF75BD46F
28320160304162214 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F215400CF9B 28320170629121023 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6CF8B74F97
28420160304212008 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F215BACC633 28420170630003105 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D0331EC63
28520160304221341 2 6 100 6143 5 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F215D065E4F 28520170630052003 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D04F2C61B
28620160304221614 2 6 100 6143 5 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F215D0E8A6F 28620170630145450 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D0CF7BF93
28720160305022340 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F216368CBBB 28720170701010810 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D1578081F
28820160305044620 2 6 100 6143 5 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F216709F6C7 28820170701015400 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D161119BF
28920160305053801 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F2168484233 28920170701082405 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D1B5FB48B
29020160305060125 2 6 100 6143 5 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F2168D0E0E7 29020170701092427 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D1C2B0E47
29120160305081042 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F216C1797FB 29120170701161137 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D21ABD21B
29220160305094218 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F216E608403 29220170702022204 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D29CF7033
29320160305095044 2 6 100 6143 5 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F216E8BAD0F 29320170702023811 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D29FB9AAF
29420160305095440 2 6 100 6143 5 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F216E9B001F 29420170702062241 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D2CED4213
29520160305111737 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F2170A72F1B 29520170702082528 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D2E88DA5F
29620160305152313 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F2176C19D53 29620170702151719 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D33FAA757
29720160305152947 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F2176E37BCB 29720170702175101 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D360021F3
29820160305154608 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F217744E9E3 29820170702200102 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D37A9C6C7
29920160305161226 2 6 100 6143 5 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F2177E547CF 29920170703011731 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D3BCD4977
30020160305173357 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F2179D3586B 30020170703155054 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D431F42D3
30120160305235825 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B0B4DFC33 30120170704184253 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936A2722BB3
30220160306022229 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B0D65D0DB 30220170704204537 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936A4446CCB
30320160306093737 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B13D7D927 30320170705051520 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936ABC7F083
30420160306094452 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B13E933BB 30420170705084652 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936AED1CC73
30520160306160337 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B1971D123 30520170705094007 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936AF8A26FF
30620160306224032 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B1F3B6DAB 30620170705115139 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936B15913CF
30720160306225345 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B1F6160BF 30720170705123819 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936B1FD105B
30820160306233854 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B2005324F 30820170705150548 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936B411305B
30920160307010902 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B214E9673 30920170705152103 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936B43D87FB
31020160307051433 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B24C9A09F 31020170705174143 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936B637D557
31120160307062817 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B25CA759B 31120170706120313 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936C5C0BE63
31220160307113227 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B2A201EFB 31220170706131942 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936C6CA2F0F
31320160307123109 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B2AEC017F 31320170706141404 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936C781A68B
31420160307185147 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B3059D223 31420170706153843 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936C8A1C2AB
31520160308031623 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B3779276B 31520170706173242 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936CA322EEF
31620160308074434 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B3B36AF7F 31620170706183451 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936CB02939B
31720160308080500 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B3B735E1B 31720170706184330 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936CB163C7B
31820160308090559 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B3C46A863 31820170706195815 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936CC15613B
31920160308204809 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B45F50A43 31920170707002909 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936CFBE39B3
32020160308220844 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B47098FDB 32020170707012259 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936D06F0ADF
32120160309000534 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B4893E51B 32120170707064939 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936D4E0A703
32220160309035855 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B4B9D5AF3 32220170707065604 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936D4EE0BAF
32320160309042540 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B4BEF4FBB 32320170707120623 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936D9082CA3
32420160309152136 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B54B515AB 32420170707121752 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936D928FC67
32520160309192852 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B57FBEBF7 32520170707164931 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936DCD75823
32620160310013359 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B5CE29283 32620170707220455 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936E0F28243
32720160310035549 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B5EB8EE13 32720170707233018 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936E20BF7B3
32820160310075706 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B61EA384F 32820170708014205 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936E3C89587
32920160310173812 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B6993761B 32920170708023140 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936E469C123
33020160310190029 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B6A9FDA07 33020170708053646 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936E6DBCAE7
33120160310193821 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B6B156863 33120170708071735 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936E8297A7F
33220160311033330 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B714D2463 33220170708072409 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936E836D247
33320160311043906 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B7225A617 33320170708102649 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936EA984FCF
33420160311054129 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B72E8A083 33420170708144918 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936EE06AB6B
33520160311060123 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B7320D78F 33520170708163647 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936EF6DD803
33620160311060829 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B732F58C3 33620170708181531 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936F0B07D83
33720160311071819 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B740FC84B 33720170708234000 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936F4E4D5BF
33820160311081031 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B74B68FAF 33820170709023719 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936F727B0C3
33920160311170649 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9B171F787 33920170709063946 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936FA3DA1B3
34020160311195449 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9B3EAFC07 34020170709093311 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936FC71EB57
34120160312113901 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9C1FC4A03 34120170709151341 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D14593700D34957
34220160312141825 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9C45A6C9B 34220170709162318 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D14593701B3041F
34320160312221956 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9CB35C95F 34320170709184215 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D1459370374B3A3
34420160313023234 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9CED021AB 34420170709215933 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D14593705ED75E7
34520160313062450 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9D2124DF7 34520170710000252 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145937077174C3
34620160313135733 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9D880F89B 34620170710052851 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D1459370B975DE3
34720160314002320 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9E14CBED3 34720170710074510 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C8898200FD23
34820160314074608 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9E75C54D3 34820170710114649 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C88984F315BB
34920160314135741 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9EC7E3DAB 34920170711033842 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C88990A1C3A7
35020160314140815 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9EC9AC0E7 35020170711064933 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C88992F18383
35120160314202745 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9F1BD98C3 35120170711070835 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C8899321BE1B
35220160314223316 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9F36F08D3 35220170712081942 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889A5694573
35320160315005016 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9F54715BF 35320170712175235 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889AC1C9503
35420160315013952 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9F5E3A7F3 35420170712184856 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889ACBA643B
35520160315060542 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9F968A573 35520170712224446 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889AF76B1E3
35620160315072619 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9FA7969D3 35620170713034208 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889B2F38EEF
35720160315105849 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9FD4C31DB 35720170713034622 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889B2F6567F
35820160315120521 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9FE292087 35820170713071216 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889B55B411B
35920160315121136 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9FE352FC3 35920170713222010 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889BFD2C803
36020160315152946 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073BA00CB151B 36020170714013005 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889C1EF6397
36120160315165331 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073BA01DFD347 36120170714094721 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889C7A27293
36220160315184225 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073BA034D7527 36220170714141853 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889CAA42B27
36320160315214330 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073BA05A75E33 36320170714204505 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889CEF31E77
36420160316020204 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073BA0912D52F 36420170714205139 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889CEFD860B
36520160316065014 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073BA0CD7441F 36520170714214942 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889CF9B7253
36620160316121031 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073BA1102A093 36620170714230801 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889D071D153
36720160316165356 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073BA14B5C017 36720170715054028 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889D4C6B33F
36820160316191831 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073BA168B1623 36820170715152910 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889DB4248D3
36920160316230539 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073BA1974D157 36920170715213011 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889DF38680B
37020160317204037 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F505984F7 37020170716095854 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889E75F9737
37120160317232704 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F52635AA3 37120170716115603 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889E896321F
37220160318065706 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F57FAD16B 37220170717072754 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889F528B29F
37320160318115527 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F5BAEDEAF 37320170718103850 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889FB304F4F
37420160318183751 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F608FC39F 37420170718123146 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889FC58729F
37520160318220732 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F6315D9EB 37520170718203220 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C88A012AA89B
37620160318231533 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F63E5739F 37620170718211015 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C88A0186FF33
37720160319161235 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F7037DD73 37720170719070720 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225378FA20B88F
37820160319230645 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F751E7BE3 37820170719080355 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225378FABF2F5B
37920160320013744 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F76DF3D47 37920170719081323 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225378FAD37237
38020160320040506 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F789CABBF 38020170719083433 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225378FB0C1BEB
38120160321132428 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F8FC5A85B 38120170719124018 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225378FDE8D93F
38220160321160901 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F91961EDF 38220170720083815 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253790C2785C7
38320160321181311 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F92F8EDBB 38320170720203303 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225379147CF99B
38420160321224946 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F9615911F 38420170721064950 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253791BAF7AFB
38520160321230806 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F963FE5D3 38520170721151849 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225379217C124F
38620160322064427 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F9B60592B 38620170721220636 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225379260D3263
38720160322090339 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F9CE9AD5B 38720170722033935 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA22537929DAE9CB
38820160322103202 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F9DDFC97B 38820170722155118 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225379320A3B27
38920160322120630 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F9EE9F43F 38920170722181755 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA22537933A7A623
39020160322130823 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F9F927B4B 39020170722212038 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225379359D2C63
39120160322151455 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27FA0F6C9EB 39120170722230812 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA22537936C5DA37
39220160322151924 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27FA0FAAD73 39220170723005838 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA22537937F9469F
39320160323004347 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27FA73E643F 39320170723041453 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253793A1DBF1B
39420160323011842 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27FA794B363 39420170723051250 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253793AB9FC9B
39520160323041407 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27FA98073AF 39520170723112206 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253793EBF09F7
39620160323042341 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27FA992813B 39620170723140224 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253794072005B
39720160324042502 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27FB9535E6F 39720170723170945 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225379427689A7
39820160324084810 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27FBC2024D3 39820170724050156 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253794A23E407
39920160324112528 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27FBDCE47F7 39920170724065019 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253794B47E553
40020160324195325 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27FC34000DF 40020170725032628 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225379588A6BE3
40120160325054405 2 6 100 8191 5 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD3C9827F7 40120170725142722 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253795F8CFE9B
40220160325073844 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD3DFD683B 40220170725192821 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA22537962B35BAB
40320160326035547 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD4D2BE973 40320170726032919 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA22537967BE1D7F
40420160326072058 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD4FA14E4B 40420170726062511 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA22537969930233
40520160326092507 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD511CC0FB 40520170726073958 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253796A4B8B7B
40620160326124028 2 6 100 8191 5 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD537EA3E7 40620170726144150 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253796EA9D3DF
40720160326204702 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD595EF333 40720170726150548 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253796EE14A73
40820160327004038 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD5C324F5B
40920160327062851 2 6 100 8191 5 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD606E1A47
41020160327081155 2 6 100 8191 5 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD61A5005F
41120160327123555 2 6 100 8191 5 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD64D2A70F
41220160327223323 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD6BD47A7B
41320160328011117 2 6 100 8191 5 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD6DAD19BF
41420160328031621 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD6F1E5643
41520160328081352 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD7291B183
41620160328130100 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD75E7418B
41720160328200420 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD7AC63CBB
41820160328203420 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD7B12C7E3
41920160329051003 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD80FE5033
42020160329150013 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD87A1FCEB
42120160329205744 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD8BA2A65B
42220160330010039 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD8E545E13
42320160330064620 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD922B39AB
42420160330195544 2 6 100 8191 5 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD9AE926F7
42520160330202118 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD9B2841A3
42620160331010824 2 6 100 8191 5 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD9E522A6F
42720160331155606 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DDA80BFF2B
42820160401003202 2 6 100 8191 5 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DDADA756E7
42920160401083841 2 6 100 8191 5 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DDB2E0BFC7
43020160401133333 2 6 100 8191 5 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DDB612067F
43120160401171656 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DDB86F198B
diff --git a/moduli.c b/moduli.c
index e983b07b7..233cba8e8 100644
--- a/moduli.c
+++ b/moduli.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: moduli.c,v 1.31 2016/09/12 01:22:38 deraadt Exp $ */ 1/* $OpenBSD: moduli.c,v 1.32 2017/12/08 03:45:52 deraadt Exp $ */
2/* 2/*
3 * Copyright 1994 Phil Karn <karn@qualcomm.com> 3 * Copyright 1994 Phil Karn <karn@qualcomm.com>
4 * Copyright 1996-1998, 2003 William Allen Simpson <wsimpson@greendragon.com> 4 * Copyright 1996-1998, 2003 William Allen Simpson <wsimpson@greendragon.com>
@@ -412,8 +412,8 @@ gen_candidates(FILE *out, u_int32_t memory, u_int32_t power, BIGNUM *start)
412 412
413 time(&time_stop); 413 time(&time_stop);
414 414
415 logit("%.24s Sieved with %u small primes in %ld seconds", 415 logit("%.24s Sieved with %u small primes in %lld seconds",
416 ctime(&time_stop), largetries, (long) (time_stop - time_start)); 416 ctime(&time_stop), largetries, (long long)(time_stop - time_start));
417 417
418 for (j = r = 0; j < largebits; j++) { 418 for (j = r = 0; j < largebits; j++) {
419 if (BIT_TEST(LargeSieve, j)) 419 if (BIT_TEST(LargeSieve, j))
diff --git a/monitor.c b/monitor.c
index 510e3496e..ed37458fb 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: monitor.c,v 1.174 2017/10/02 19:33:20 djm Exp $ */ 1/* $OpenBSD: monitor.c,v 1.180 2018/03/03 03:15:51 djm Exp $ */
2/* 2/*
3 * Copyright 2002 Niels Provos <provos@citi.umich.edu> 3 * Copyright 2002 Niels Provos <provos@citi.umich.edu>
4 * Copyright 2002 Markus Friedl <markus@openbsd.org> 4 * Copyright 2002 Markus Friedl <markus@openbsd.org>
@@ -116,6 +116,7 @@ extern u_char session_id[];
116extern Buffer auth_debug; 116extern Buffer auth_debug;
117extern int auth_debug_init; 117extern int auth_debug_init;
118extern Buffer loginmsg; 118extern Buffer loginmsg;
119extern struct sshauthopt *auth_opts; /* XXX move to permanent ssh->authctxt? */
119 120
120/* State exported from the child */ 121/* State exported from the child */
121static struct sshbuf *child_state; 122static struct sshbuf *child_state;
@@ -175,6 +176,7 @@ static Authctxt *authctxt;
175static u_char *key_blob = NULL; 176static u_char *key_blob = NULL;
176static u_int key_bloblen = 0; 177static u_int key_bloblen = 0;
177static int key_blobtype = MM_NOKEY; 178static int key_blobtype = MM_NOKEY;
179static struct sshauthopt *key_opts = NULL;
178static char *hostbased_cuser = NULL; 180static char *hostbased_cuser = NULL;
179static char *hostbased_chost = NULL; 181static char *hostbased_chost = NULL;
180static char *auth_method = "unknown"; 182static char *auth_method = "unknown";
@@ -263,7 +265,6 @@ struct mon_table mon_dispatch_postauth20[] = {
263struct mon_table *mon_dispatch; 265struct mon_table *mon_dispatch;
264 266
265/* Specifies if a certain message is allowed at the moment */ 267/* Specifies if a certain message is allowed at the moment */
266
267static void 268static void
268monitor_permit(struct mon_table *ent, enum monitor_reqtype type, int permit) 269monitor_permit(struct mon_table *ent, enum monitor_reqtype type, int permit)
269{ 270{
@@ -300,12 +301,15 @@ monitor_child_preauth(Authctxt *_authctxt, struct monitor *pmonitor)
300 301
301 debug3("preauth child monitor started"); 302 debug3("preauth child monitor started");
302 303
303 close(pmonitor->m_recvfd); 304 if (pmonitor->m_recvfd >= 0)
304 close(pmonitor->m_log_sendfd); 305 close(pmonitor->m_recvfd);
306 if (pmonitor->m_log_sendfd >= 0)
307 close(pmonitor->m_log_sendfd);
305 pmonitor->m_log_sendfd = pmonitor->m_recvfd = -1; 308 pmonitor->m_log_sendfd = pmonitor->m_recvfd = -1;
306 309
307 authctxt = _authctxt; 310 authctxt = _authctxt;
308 memset(authctxt, 0, sizeof(*authctxt)); 311 memset(authctxt, 0, sizeof(*authctxt));
312 ssh->authctxt = authctxt;
309 313
310 authctxt->loginmsg = &loginmsg; 314 authctxt->loginmsg = &loginmsg;
311 315
@@ -344,7 +348,7 @@ monitor_child_preauth(Authctxt *_authctxt, struct monitor *pmonitor)
344 fatal("%s: unexpected authentication from %d", 348 fatal("%s: unexpected authentication from %d",
345 __func__, ent->type); 349 __func__, ent->type);
346 if (authctxt->pw->pw_uid == 0 && 350 if (authctxt->pw->pw_uid == 0 &&
347 !auth_root_allowed(auth_method)) 351 !auth_root_allowed(ssh, auth_method))
348 authenticated = 0; 352 authenticated = 0;
349#ifdef USE_PAM 353#ifdef USE_PAM
350 /* PAM needs to perform account checks after auth */ 354 /* PAM needs to perform account checks after auth */
@@ -378,6 +382,7 @@ monitor_child_preauth(Authctxt *_authctxt, struct monitor *pmonitor)
378 382
379 debug("%s: %s has been authenticated by privileged process", 383 debug("%s: %s has been authenticated by privileged process",
380 __func__, authctxt->user); 384 __func__, authctxt->user);
385 ssh->authctxt = NULL;
381 ssh_packet_set_log_preamble(ssh, "user %s", authctxt->user); 386 ssh_packet_set_log_preamble(ssh, "user %s", authctxt->user);
382 387
383 mm_get_keystate(pmonitor); 388 mm_get_keystate(pmonitor);
@@ -386,8 +391,10 @@ monitor_child_preauth(Authctxt *_authctxt, struct monitor *pmonitor)
386 while (pmonitor->m_log_recvfd != -1 && monitor_read_log(pmonitor) == 0) 391 while (pmonitor->m_log_recvfd != -1 && monitor_read_log(pmonitor) == 0)
387 ; 392 ;
388 393
389 close(pmonitor->m_sendfd); 394 if (pmonitor->m_recvfd >= 0)
390 close(pmonitor->m_log_recvfd); 395 close(pmonitor->m_recvfd);
396 if (pmonitor->m_log_sendfd >= 0)
397 close(pmonitor->m_log_sendfd);
391 pmonitor->m_sendfd = pmonitor->m_log_recvfd = -1; 398 pmonitor->m_sendfd = pmonitor->m_log_recvfd = -1;
392} 399}
393 400
@@ -428,7 +435,7 @@ monitor_child_postauth(struct monitor *pmonitor)
428 monitor_permit(mon_dispatch, MONITOR_REQ_GSSSETUP, 1); 435 monitor_permit(mon_dispatch, MONITOR_REQ_GSSSETUP, 1);
429#endif 436#endif
430 437
431 if (!no_pty_flag) { 438 if (auth_opts->permit_pty_flag) {
432 monitor_permit(mon_dispatch, MONITOR_REQ_PTY, 1); 439 monitor_permit(mon_dispatch, MONITOR_REQ_PTY, 1);
433 monitor_permit(mon_dispatch, MONITOR_REQ_PTYCLEANUP, 1); 440 monitor_permit(mon_dispatch, MONITOR_REQ_PTYCLEANUP, 1);
434 } 441 }
@@ -573,9 +580,11 @@ monitor_reset_key_state(void)
573 free(key_blob); 580 free(key_blob);
574 free(hostbased_cuser); 581 free(hostbased_cuser);
575 free(hostbased_chost); 582 free(hostbased_chost);
583 sshauthopt_free(key_opts);
576 key_blob = NULL; 584 key_blob = NULL;
577 key_bloblen = 0; 585 key_bloblen = 0;
578 key_blobtype = MM_NOKEY; 586 key_blobtype = MM_NOKEY;
587 key_opts = NULL;
579 hostbased_cuser = NULL; 588 hostbased_cuser = NULL;
580 hostbased_chost = NULL; 589 hostbased_chost = NULL;
581} 590}
@@ -779,12 +788,10 @@ mm_answer_pwnamallow(int sock, Buffer *m)
779 for (i = 0; i < options.nx; i++) \ 788 for (i = 0; i < options.nx; i++) \
780 buffer_put_cstring(m, options.x[i]); \ 789 buffer_put_cstring(m, options.x[i]); \
781 } while (0) 790 } while (0)
782#define M_CP_STRARRAYOPT_ALLOC(x, nx) M_CP_STRARRAYOPT(x, nx)
783 /* See comment in servconf.h */ 791 /* See comment in servconf.h */
784 COPY_MATCH_STRING_OPTS(); 792 COPY_MATCH_STRING_OPTS();
785#undef M_CP_STROPT 793#undef M_CP_STROPT
786#undef M_CP_STRARRAYOPT 794#undef M_CP_STRARRAYOPT
787#undef M_CP_STRARRAYOPT_ALLOC
788 795
789 /* Create valid auth method lists */ 796 /* Create valid auth method lists */
790 if (auth2_setup_methods_lists(authctxt) != 0) { 797 if (auth2_setup_methods_lists(authctxt) != 0) {
@@ -869,6 +876,7 @@ mm_answer_authrole(int sock, Buffer *m)
869int 876int
870mm_answer_authpassword(int sock, Buffer *m) 877mm_answer_authpassword(int sock, Buffer *m)
871{ 878{
879 struct ssh *ssh = active_state; /* XXX */
872 static int call_count; 880 static int call_count;
873 char *passwd; 881 char *passwd;
874 int authenticated; 882 int authenticated;
@@ -879,7 +887,7 @@ mm_answer_authpassword(int sock, Buffer *m)
879 passwd = buffer_get_string(m, &plen); 887 passwd = buffer_get_string(m, &plen);
880 /* Only authenticate if the context is valid */ 888 /* Only authenticate if the context is valid */
881 authenticated = options.password_authentication && 889 authenticated = options.password_authentication &&
882 auth_password(authctxt, passwd); 890 auth_password(ssh, passwd);
883 explicit_bzero(passwd, strlen(passwd)); 891 explicit_bzero(passwd, strlen(passwd));
884 free(passwd); 892 free(passwd);
885 893
@@ -1170,15 +1178,16 @@ mm_answer_pam_free_ctx(int sock, Buffer *m)
1170int 1178int
1171mm_answer_keyallowed(int sock, Buffer *m) 1179mm_answer_keyallowed(int sock, Buffer *m)
1172{ 1180{
1181 struct ssh *ssh = active_state; /* XXX */
1173 struct sshkey *key; 1182 struct sshkey *key;
1174 char *cuser, *chost; 1183 char *cuser, *chost;
1175 u_char *blob; 1184 u_char *blob;
1176 u_int bloblen, pubkey_auth_attempt; 1185 u_int bloblen, pubkey_auth_attempt;
1177 enum mm_keytype type = 0; 1186 enum mm_keytype type = 0;
1178 int allowed = 0; 1187 int r, allowed = 0;
1188 struct sshauthopt *opts = NULL;
1179 1189
1180 debug3("%s entering", __func__); 1190 debug3("%s entering", __func__);
1181
1182 type = buffer_get_int(m); 1191 type = buffer_get_int(m);
1183 cuser = buffer_get_string(m, NULL); 1192 cuser = buffer_get_string(m, NULL);
1184 chost = buffer_get_string(m, NULL); 1193 chost = buffer_get_string(m, NULL);
@@ -1197,28 +1206,31 @@ mm_answer_keyallowed(int sock, Buffer *m)
1197 1206
1198 switch (type) { 1207 switch (type) {
1199 case MM_USERKEY: 1208 case MM_USERKEY:
1200 allowed = options.pubkey_authentication &&
1201 !auth2_key_already_used(authctxt, key) &&
1202 match_pattern_list(sshkey_ssh_name(key),
1203 options.pubkey_key_types, 0) == 1 &&
1204 user_key_allowed(authctxt->pw, key,
1205 pubkey_auth_attempt);
1206 auth_method = "publickey"; 1209 auth_method = "publickey";
1207 if (options.pubkey_authentication && 1210 if (!options.pubkey_authentication)
1208 (!pubkey_auth_attempt || allowed != 1)) 1211 break;
1209 auth_clear_options(); 1212 if (auth2_key_already_used(authctxt, key))
1213 break;
1214 if (match_pattern_list(sshkey_ssh_name(key),
1215 options.pubkey_key_types, 0) != 1)
1216 break;
1217 allowed = user_key_allowed(ssh, authctxt->pw, key,
1218 pubkey_auth_attempt, &opts);
1210 break; 1219 break;
1211 case MM_HOSTKEY: 1220 case MM_HOSTKEY:
1212 allowed = options.hostbased_authentication && 1221 auth_method = "hostbased";
1213 !auth2_key_already_used(authctxt, key) && 1222 if (!options.hostbased_authentication)
1214 match_pattern_list(sshkey_ssh_name(key), 1223 break;
1215 options.hostbased_key_types, 0) == 1 && 1224 if (auth2_key_already_used(authctxt, key))
1216 hostbased_key_allowed(authctxt->pw, 1225 break;
1226 if (match_pattern_list(sshkey_ssh_name(key),
1227 options.hostbased_key_types, 0) != 1)
1228 break;
1229 allowed = hostbased_key_allowed(authctxt->pw,
1217 cuser, chost, key); 1230 cuser, chost, key);
1218 auth2_record_info(authctxt, 1231 auth2_record_info(authctxt,
1219 "client user \"%.100s\", client host \"%.100s\"", 1232 "client user \"%.100s\", client host \"%.100s\"",
1220 cuser, chost); 1233 cuser, chost);
1221 auth_method = "hostbased";
1222 break; 1234 break;
1223 default: 1235 default:
1224 fatal("%s: unknown key type %d", __func__, type); 1236 fatal("%s: unknown key type %d", __func__, type);
@@ -1226,7 +1238,10 @@ mm_answer_keyallowed(int sock, Buffer *m)
1226 } 1238 }
1227 } 1239 }
1228 1240
1229 debug3("%s: key is %s", __func__, allowed ? "allowed" : "not allowed"); 1241 debug3("%s: %s authentication%s: %s key is %s", __func__,
1242 auth_method, pubkey_auth_attempt ? "" : " test",
1243 (key == NULL || !authctxt->valid) ? "invalid" : sshkey_type(key),
1244 allowed ? "allowed" : "not allowed");
1230 1245
1231 auth2_record_key(authctxt, 0, key); 1246 auth2_record_key(authctxt, 0, key);
1232 sshkey_free(key); 1247 sshkey_free(key);
@@ -1239,6 +1254,7 @@ mm_answer_keyallowed(int sock, Buffer *m)
1239 key_blob = blob; 1254 key_blob = blob;
1240 key_bloblen = bloblen; 1255 key_bloblen = bloblen;
1241 key_blobtype = type; 1256 key_blobtype = type;
1257 key_opts = opts;
1242 hostbased_cuser = cuser; 1258 hostbased_cuser = cuser;
1243 hostbased_chost = chost; 1259 hostbased_chost = chost;
1244 } else { 1260 } else {
@@ -1251,10 +1267,13 @@ mm_answer_keyallowed(int sock, Buffer *m)
1251 1267
1252 buffer_clear(m); 1268 buffer_clear(m);
1253 buffer_put_int(m, allowed); 1269 buffer_put_int(m, allowed);
1254 buffer_put_int(m, forced_command != NULL); 1270 if (opts != NULL && (r = sshauthopt_serialise(opts, m, 1)) != 0)
1255 1271 fatal("%s: sshauthopt_serialise: %s", __func__, ssh_err(r));
1256 mm_request_send(sock, MONITOR_ANS_KEYALLOWED, m); 1272 mm_request_send(sock, MONITOR_ANS_KEYALLOWED, m);
1257 1273
1274 if (!allowed)
1275 sshauthopt_free(opts);
1276
1258 return (0); 1277 return (0);
1259} 1278}
1260 1279
@@ -1300,18 +1319,13 @@ monitor_valid_userblob(u_char *data, u_int datalen)
1300 free(userstyle); 1319 free(userstyle);
1301 free(cp); 1320 free(cp);
1302 buffer_skip_string(&b); 1321 buffer_skip_string(&b);
1303 if (datafellows & SSH_BUG_PKAUTH) { 1322 cp = buffer_get_cstring(&b, NULL);
1304 if (!buffer_get_char(&b)) 1323 if (strcmp("publickey", cp) != 0)
1305 fail++; 1324 fail++;
1306 } else { 1325 free(cp);
1307 cp = buffer_get_cstring(&b, NULL); 1326 if (!buffer_get_char(&b))
1308 if (strcmp("publickey", cp) != 0) 1327 fail++;
1309 fail++; 1328 buffer_skip_string(&b);
1310 free(cp);
1311 if (!buffer_get_char(&b))
1312 fail++;
1313 buffer_skip_string(&b);
1314 }
1315 buffer_skip_string(&b); 1329 buffer_skip_string(&b);
1316 if (buffer_len(&b) != 0) 1330 if (buffer_len(&b) != 0)
1317 fail++; 1331 fail++;
@@ -1382,20 +1396,29 @@ monitor_valid_hostbasedblob(u_char *data, u_int datalen, char *cuser,
1382int 1396int
1383mm_answer_keyverify(int sock, struct sshbuf *m) 1397mm_answer_keyverify(int sock, struct sshbuf *m)
1384{ 1398{
1399 struct ssh *ssh = active_state; /* XXX */
1385 struct sshkey *key; 1400 struct sshkey *key;
1386 u_char *signature, *data, *blob; 1401 u_char *signature, *data, *blob;
1402 char *sigalg;
1387 size_t signaturelen, datalen, bloblen; 1403 size_t signaturelen, datalen, bloblen;
1388 int r, ret, valid_data = 0, encoded_ret; 1404 int r, ret, valid_data = 0, encoded_ret;
1389 1405
1390 if ((r = sshbuf_get_string(m, &blob, &bloblen)) != 0 || 1406 if ((r = sshbuf_get_string(m, &blob, &bloblen)) != 0 ||
1391 (r = sshbuf_get_string(m, &signature, &signaturelen)) != 0 || 1407 (r = sshbuf_get_string(m, &signature, &signaturelen)) != 0 ||
1392 (r = sshbuf_get_string(m, &data, &datalen)) != 0) 1408 (r = sshbuf_get_string(m, &data, &datalen)) != 0 ||
1409 (r = sshbuf_get_cstring(m, &sigalg, NULL)) != 0)
1393 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 1410 fatal("%s: buffer error: %s", __func__, ssh_err(r));
1394 1411
1395 if (hostbased_cuser == NULL || hostbased_chost == NULL || 1412 if (hostbased_cuser == NULL || hostbased_chost == NULL ||
1396 !monitor_allowed_key(blob, bloblen)) 1413 !monitor_allowed_key(blob, bloblen))
1397 fatal("%s: bad key, not previously allowed", __func__); 1414 fatal("%s: bad key, not previously allowed", __func__);
1398 1415
1416 /* Empty signature algorithm means NULL. */
1417 if (*sigalg == '\0') {
1418 free(sigalg);
1419 sigalg = NULL;
1420 }
1421
1399 /* XXX use sshkey_froms here; need to change key_blob, etc. */ 1422 /* XXX use sshkey_froms here; need to change key_blob, etc. */
1400 if ((r = sshkey_from_blob(blob, bloblen, &key)) != 0) 1423 if ((r = sshkey_from_blob(blob, bloblen, &key)) != 0)
1401 fatal("%s: bad public key blob: %s", __func__, ssh_err(r)); 1424 fatal("%s: bad public key blob: %s", __func__, ssh_err(r));
@@ -1418,7 +1441,7 @@ mm_answer_keyverify(int sock, struct sshbuf *m)
1418 fatal("%s: bad signature data blob", __func__); 1441 fatal("%s: bad signature data blob", __func__);
1419 1442
1420 ret = sshkey_verify(key, signature, signaturelen, data, datalen, 1443 ret = sshkey_verify(key, signature, signaturelen, data, datalen,
1421 active_state->compat); 1444 sigalg, active_state->compat);
1422 debug3("%s: %s %p signature %s", __func__, auth_method, key, 1445 debug3("%s: %s %p signature %s", __func__, auth_method, key,
1423 (ret == 0) ? "verified" : "unverified"); 1446 (ret == 0) ? "verified" : "unverified");
1424 auth2_record_key(authctxt, ret == 0, key); 1447 auth2_record_key(authctxt, ret == 0, key);
@@ -1426,7 +1449,10 @@ mm_answer_keyverify(int sock, struct sshbuf *m)
1426 free(blob); 1449 free(blob);
1427 free(signature); 1450 free(signature);
1428 free(data); 1451 free(data);
1452 free(sigalg);
1429 1453
1454 if (key_blobtype == MM_USERKEY)
1455 auth_activate_options(ssh, key_opts);
1430 monitor_reset_key_state(); 1456 monitor_reset_key_state();
1431 1457
1432 sshkey_free(key); 1458 sshkey_free(key);
diff --git a/monitor_wrap.c b/monitor_wrap.c
index d806bb2e7..7b2d06c65 100644
--- a/monitor_wrap.c
+++ b/monitor_wrap.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: monitor_wrap.c,v 1.94 2017/10/02 19:33:20 djm Exp $ */ 1/* $OpenBSD: monitor_wrap.c,v 1.99 2018/03/03 03:15:51 djm Exp $ */
2/* 2/*
3 * Copyright 2002 Niels Provos <provos@citi.umich.edu> 3 * Copyright 2002 Niels Provos <provos@citi.umich.edu>
4 * Copyright 2002 Markus Friedl <markus@openbsd.org> 4 * Copyright 2002 Markus Friedl <markus@openbsd.org>
@@ -76,7 +76,6 @@
76#include "atomicio.h" 76#include "atomicio.h"
77#include "monitor_fdpass.h" 77#include "monitor_fdpass.h"
78#include "misc.h" 78#include "misc.h"
79#include "uuencode.h"
80 79
81#include "channels.h" 80#include "channels.h"
82#include "session.h" 81#include "session.h"
@@ -287,19 +286,15 @@ out:
287 newopts->x = buffer_get_string(&m, NULL); \ 286 newopts->x = buffer_get_string(&m, NULL); \
288 } while (0) 287 } while (0)
289#define M_CP_STRARRAYOPT(x, nx) do { \ 288#define M_CP_STRARRAYOPT(x, nx) do { \
290 for (i = 0; i < newopts->nx; i++) \
291 newopts->x[i] = buffer_get_string(&m, NULL); \
292 } while (0)
293#define M_CP_STRARRAYOPT_ALLOC(x, nx) do { \
294 newopts->x = newopts->nx == 0 ? \ 289 newopts->x = newopts->nx == 0 ? \
295 NULL : xcalloc(newopts->nx, sizeof(*newopts->x)); \ 290 NULL : xcalloc(newopts->nx, sizeof(*newopts->x)); \
296 M_CP_STRARRAYOPT(x, nx); \ 291 for (i = 0; i < newopts->nx; i++) \
292 newopts->x[i] = buffer_get_string(&m, NULL); \
297 } while (0) 293 } while (0)
298 /* See comment in servconf.h */ 294 /* See comment in servconf.h */
299 COPY_MATCH_STRING_OPTS(); 295 COPY_MATCH_STRING_OPTS();
300#undef M_CP_STROPT 296#undef M_CP_STROPT
301#undef M_CP_STRARRAYOPT 297#undef M_CP_STRARRAYOPT
302#undef M_CP_STRARRAYOPT_ALLOC
303 298
304 copy_set_server_options(&options, newopts, 1); 299 copy_set_server_options(&options, newopts, 1);
305 log_change_level(options.log_level); 300 log_change_level(options.log_level);
@@ -374,7 +369,7 @@ mm_inform_authrole(char *role)
374 369
375/* Do the password authentication */ 370/* Do the password authentication */
376int 371int
377mm_auth_password(Authctxt *authctxt, char *password) 372mm_auth_password(struct ssh *ssh, char *password)
378{ 373{
379 Buffer m; 374 Buffer m;
380 int authenticated = 0; 375 int authenticated = 0;
@@ -401,34 +396,38 @@ mm_auth_password(Authctxt *authctxt, char *password)
401} 396}
402 397
403int 398int
404mm_user_key_allowed(struct passwd *pw, struct sshkey *key, 399mm_user_key_allowed(struct ssh *ssh, struct passwd *pw, struct sshkey *key,
405 int pubkey_auth_attempt) 400 int pubkey_auth_attempt, struct sshauthopt **authoptp)
406{ 401{
407 return (mm_key_allowed(MM_USERKEY, NULL, NULL, key, 402 return (mm_key_allowed(MM_USERKEY, NULL, NULL, key,
408 pubkey_auth_attempt)); 403 pubkey_auth_attempt, authoptp));
409} 404}
410 405
411int 406int
412mm_hostbased_key_allowed(struct passwd *pw, const char *user, const char *host, 407mm_hostbased_key_allowed(struct passwd *pw, const char *user, const char *host,
413 struct sshkey *key) 408 struct sshkey *key)
414{ 409{
415 return (mm_key_allowed(MM_HOSTKEY, user, host, key, 0)); 410 return (mm_key_allowed(MM_HOSTKEY, user, host, key, 0, NULL));
416} 411}
417 412
418int 413int
419mm_key_allowed(enum mm_keytype type, const char *user, const char *host, 414mm_key_allowed(enum mm_keytype type, const char *user, const char *host,
420 struct sshkey *key, int pubkey_auth_attempt) 415 struct sshkey *key, int pubkey_auth_attempt, struct sshauthopt **authoptp)
421{ 416{
422 Buffer m; 417 Buffer m;
423 u_char *blob; 418 u_char *blob;
424 u_int len; 419 u_int len;
425 int allowed = 0, have_forced = 0; 420 int r, allowed = 0;
421 struct sshauthopt *opts = NULL;
426 422
427 debug3("%s entering", __func__); 423 debug3("%s entering", __func__);
428 424
425 if (authoptp != NULL)
426 *authoptp = NULL;
427
429 /* Convert the key to a blob and the pass it over */ 428 /* Convert the key to a blob and the pass it over */
430 if (!key_to_blob(key, &blob, &len)) 429 if (!key_to_blob(key, &blob, &len))
431 return (0); 430 return 0;
432 431
433 buffer_init(&m); 432 buffer_init(&m);
434 buffer_put_int(&m, type); 433 buffer_put_int(&m, type);
@@ -441,18 +440,24 @@ mm_key_allowed(enum mm_keytype type, const char *user, const char *host,
441 mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_KEYALLOWED, &m); 440 mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_KEYALLOWED, &m);
442 441
443 debug3("%s: waiting for MONITOR_ANS_KEYALLOWED", __func__); 442 debug3("%s: waiting for MONITOR_ANS_KEYALLOWED", __func__);
444 mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_KEYALLOWED, &m); 443 mm_request_receive_expect(pmonitor->m_recvfd,
444 MONITOR_ANS_KEYALLOWED, &m);
445 445
446 allowed = buffer_get_int(&m); 446 allowed = buffer_get_int(&m);
447 447 if (allowed && type == MM_USERKEY) {
448 /* fake forced command */ 448 if ((r = sshauthopt_deserialise(&m, &opts)) != 0)
449 auth_clear_options(); 449 fatal("%s: sshauthopt_deserialise: %s",
450 have_forced = buffer_get_int(&m); 450 __func__, ssh_err(r));
451 forced_command = have_forced ? xstrdup("true") : NULL; 451 }
452
453 buffer_free(&m); 452 buffer_free(&m);
454 453
455 return (allowed); 454 if (authoptp != NULL) {
455 *authoptp = opts;
456 opts = NULL;
457 }
458 sshauthopt_free(opts);
459
460 return allowed;
456} 461}
457 462
458/* 463/*
@@ -463,7 +468,7 @@ mm_key_allowed(enum mm_keytype type, const char *user, const char *host,
463 468
464int 469int
465mm_sshkey_verify(const struct sshkey *key, const u_char *sig, size_t siglen, 470mm_sshkey_verify(const struct sshkey *key, const u_char *sig, size_t siglen,
466 const u_char *data, size_t datalen, u_int compat) 471 const u_char *data, size_t datalen, const char *sigalg, u_int compat)
467{ 472{
468 Buffer m; 473 Buffer m;
469 u_char *blob; 474 u_char *blob;
@@ -480,6 +485,7 @@ mm_sshkey_verify(const struct sshkey *key, const u_char *sig, size_t siglen,
480 buffer_put_string(&m, blob, len); 485 buffer_put_string(&m, blob, len);
481 buffer_put_string(&m, sig, siglen); 486 buffer_put_string(&m, sig, siglen);
482 buffer_put_string(&m, data, datalen); 487 buffer_put_string(&m, data, datalen);
488 buffer_put_cstring(&m, sigalg == NULL ? "" : sigalg);
483 free(blob); 489 free(blob);
484 490
485 mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_KEYVERIFY, &m); 491 mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_KEYVERIFY, &m);
diff --git a/monitor_wrap.h b/monitor_wrap.h
index a9ccb243e..492de5c85 100644
--- a/monitor_wrap.h
+++ b/monitor_wrap.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: monitor_wrap.h,v 1.35 2017/05/31 08:09:45 markus Exp $ */ 1/* $OpenBSD: monitor_wrap.h,v 1.37 2018/03/03 03:15:51 djm Exp $ */
2 2
3/* 3/*
4 * Copyright 2002 Niels Provos <provos@citi.umich.edu> 4 * Copyright 2002 Niels Provos <provos@citi.umich.edu>
@@ -35,6 +35,8 @@ enum mm_keytype { MM_NOKEY, MM_HOSTKEY, MM_USERKEY };
35 35
36struct monitor; 36struct monitor;
37struct Authctxt; 37struct Authctxt;
38struct sshkey;
39struct sshauthopt;
38 40
39void mm_log_handler(LogLevel, const char *, void *); 41void mm_log_handler(LogLevel, const char *, void *);
40int mm_is_monitor(void); 42int mm_is_monitor(void);
@@ -45,14 +47,15 @@ void mm_inform_authserv(char *, char *, char *);
45void mm_inform_authrole(char *); 47void mm_inform_authrole(char *);
46struct passwd *mm_getpwnamallow(const char *); 48struct passwd *mm_getpwnamallow(const char *);
47char *mm_auth2_read_banner(void); 49char *mm_auth2_read_banner(void);
48int mm_auth_password(struct Authctxt *, char *); 50int mm_auth_password(struct ssh *, char *);
49int mm_key_allowed(enum mm_keytype, const char *, const char *, struct sshkey *, 51int mm_key_allowed(enum mm_keytype, const char *, const char *, struct sshkey *,
50 int); 52 int, struct sshauthopt **);
51int mm_user_key_allowed(struct passwd *, struct sshkey *, int); 53int mm_user_key_allowed(struct ssh *, struct passwd *, struct sshkey *, int,
54 struct sshauthopt **);
52int mm_hostbased_key_allowed(struct passwd *, const char *, 55int mm_hostbased_key_allowed(struct passwd *, const char *,
53 const char *, struct sshkey *); 56 const char *, struct sshkey *);
54int mm_sshkey_verify(const struct sshkey *, const u_char *, size_t, 57int mm_sshkey_verify(const struct sshkey *, const u_char *, size_t,
55 const u_char *, size_t, u_int); 58 const u_char *, size_t, const char *, u_int);
56 59
57#ifdef GSSAPI 60#ifdef GSSAPI
58OM_uint32 mm_ssh_gssapi_server_ctx(Gssctxt **, gss_OID); 61OM_uint32 mm_ssh_gssapi_server_ctx(Gssctxt **, gss_OID);
diff --git a/opacket.c b/opacket.c
index ad244b452..fca48e5f5 100644
--- a/opacket.c
+++ b/opacket.c
@@ -1,3 +1,4 @@
1/* $OpenBSD: opacket.c,v 1.7 2017/10/20 01:56:39 djm Exp $ */
1/* Written by Markus Friedl. Placed in the public domain. */ 2/* Written by Markus Friedl. Placed in the public domain. */
2 3
3#include "includes.h" 4#include "includes.h"
diff --git a/opacket.h b/opacket.h
index c49d0c04a..b2c2e7f6a 100644
--- a/opacket.h
+++ b/opacket.h
@@ -1,3 +1,4 @@
1/* $OpenBSD: opacket.h,v 1.12 2017/10/20 01:56:39 djm Exp $ */
1#ifndef _OPACKET_H 2#ifndef _OPACKET_H
2/* Written by Markus Friedl. Placed in the public domain. */ 3/* Written by Markus Friedl. Placed in the public domain. */
3 4
diff --git a/openbsd-compat/Makefile.in b/openbsd-compat/Makefile.in
index ac8ae4305..8e3b42991 100644
--- a/openbsd-compat/Makefile.in
+++ b/openbsd-compat/Makefile.in
@@ -1,5 +1,3 @@
1# $Id: Makefile.in,v 1.56 2014/09/30 23:43:08 djm Exp $
2
3sysconfdir=@sysconfdir@ 1sysconfdir=@sysconfdir@
4piddir=@piddir@ 2piddir=@piddir@
5srcdir=@srcdir@ 3srcdir=@srcdir@
@@ -16,11 +14,84 @@ RANLIB=@RANLIB@
16INSTALL=@INSTALL@ 14INSTALL=@INSTALL@
17LDFLAGS=-L. @LDFLAGS@ 15LDFLAGS=-L. @LDFLAGS@
18 16
19OPENBSD=base64.o basename.o bcrypt_pbkdf.o bindresvport.o blowfish.o daemon.o dirname.o fmt_scaled.o getcwd.o getgrouplist.o getopt_long.o getrrsetbyname.o glob.o inet_aton.o inet_ntoa.o inet_ntop.o mktemp.o pwcache.o readpassphrase.o reallocarray.o realpath.o recallocarray.o rresvport.o setenv.o setproctitle.o sha1.o sha2.o rmd160.o md5.o sigact.o strcasestr.o strlcat.o strlcpy.o strmode.o strnlen.o strptime.o strsep.o strtonum.o strtoll.o strtoul.o strtoull.o timingsafe_bcmp.o vis.o blowfish.o bcrypt_pbkdf.o explicit_bzero.o freezero.o 17OPENBSD=base64.o \
18 basename.o \
19 bcrypt_pbkdf.o \
20 bcrypt_pbkdf.o \
21 bindresvport.o \
22 blowfish.o \
23 daemon.o \
24 dirname.o \
25 explicit_bzero.o \
26 fmt_scaled.o \
27 freezero.o \
28 getcwd.o \
29 getgrouplist.o \
30 getopt_long.o \
31 getrrsetbyname.o \
32 glob.o \
33 inet_aton.o \
34 inet_ntoa.o \
35 inet_ntop.o \
36 md5.o \
37 mktemp.o \
38 pwcache.o \
39 readpassphrase.o \
40 reallocarray.o \
41 realpath.o \
42 recallocarray.o \
43 rmd160.o \
44 rresvport.o \
45 setenv.o \
46 setproctitle.o \
47 sha1.o \
48 sha2.o \
49 sigact.o \
50 strcasestr.o \
51 strlcat.o \
52 strlcpy.o \
53 strmode.o \
54 strndup.o \
55 strnlen.o \
56 strptime.o \
57 strsep.o \
58 strtoll.o \
59 strtonum.o \
60 strtoull.o \
61 strtoul.o \
62 timingsafe_bcmp.o \
63 vis.o
20 64
21COMPAT=arc4random.o bsd-asprintf.o bsd-closefrom.o bsd-cray.o bsd-cygwin_util.o bsd-getpeereid.o getrrsetbyname-ldns.o bsd-err.o bsd-getpagesize.o bsd-misc.o bsd-nextstep.o bsd-openpty.o bsd-poll.o bsd-malloc.o bsd-setres_id.o bsd-snprintf.o bsd-statvfs.o bsd-waitpid.o fake-rfc2553.o openssl-compat.o xcrypt.o kludge-fd_set.o 65COMPAT= arc4random.o \
66 bsd-asprintf.o \
67 bsd-closefrom.o \
68 bsd-cygwin_util.o \
69 bsd-err.o \
70 bsd-flock.o \
71 bsd-getpagesize.o \
72 bsd-getpeereid.o \
73 bsd-malloc.o \
74 bsd-misc.o \
75 bsd-nextstep.o \
76 bsd-openpty.o \
77 bsd-poll.o \
78 bsd-setres_id.o \
79 bsd-signal.o \
80 bsd-snprintf.o \
81 bsd-statvfs.o \
82 bsd-waitpid.o \
83 fake-rfc2553.o \
84 getrrsetbyname-ldns.o \
85 kludge-fd_set.o \
86 openssl-compat.o \
87 xcrypt.o
22 88
23PORTS=port-aix.o port-irix.o port-linux.o port-solaris.o port-tun.o port-uw.o 89PORTS= port-aix.o \
90 port-irix.o \
91 port-linux.o \
92 port-solaris.o \
93 port-net.o \
94 port-uw.o
24 95
25.c.o: 96.c.o:
26 $(CC) $(CFLAGS) $(CPPFLAGS) -c $< 97 $(CC) $(CFLAGS) $(CPPFLAGS) -c $<
diff --git a/openbsd-compat/bsd-cray.c b/openbsd-compat/bsd-cray.c
deleted file mode 100644
index c02e63261..000000000
--- a/openbsd-compat/bsd-cray.c
+++ /dev/null
@@ -1,816 +0,0 @@
1/*
2 *
3 * bsd-cray.c
4 *
5 * Copyright (c) 2002, Cray Inc. (Wendy Palm <wendyp@cray.com>)
6 * Significant portions provided by
7 * Wayne Schroeder, SDSC <schroeder@sdsc.edu>
8 * William Jones, UTexas <jones@tacc.utexas.edu>
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 *
30 * Created: Apr 22 16.34:00 2002 wp
31 *
32 * This file contains functions required for proper execution
33 * on UNICOS systems.
34 *
35 */
36#ifdef _UNICOS
37
38#include <udb.h>
39#include <tmpdir.h>
40#include <unistd.h>
41#include <sys/category.h>
42#include <utmp.h>
43#include <sys/jtab.h>
44#include <signal.h>
45#include <sys/priv.h>
46#include <sys/secparm.h>
47#include <sys/tfm.h>
48#include <sys/usrv.h>
49#include <sys/sysv.h>
50#include <sys/sectab.h>
51#include <sys/secstat.h>
52#include <sys/stat.h>
53#include <sys/session.h>
54#include <stdarg.h>
55#include <stdlib.h>
56#include <string.h>
57#include <unistd.h>
58#include <pwd.h>
59#include <fcntl.h>
60#include <errno.h>
61#include <ia.h>
62#include <urm.h>
63#include "ssh.h"
64
65#include "includes.h"
66#include "sys/types.h"
67
68#ifndef HAVE_STRUCT_SOCKADDR_STORAGE
69# define _SS_MAXSIZE 128 /* Implementation specific max size */
70# define _SS_PADSIZE (_SS_MAXSIZE - sizeof (struct sockaddr))
71
72# define ss_family ss_sa.sa_family
73#endif /* !HAVE_STRUCT_SOCKADDR_STORAGE */
74
75#ifndef IN6_IS_ADDR_LOOPBACK
76# define IN6_IS_ADDR_LOOPBACK(a) \
77 (((u_int32_t *) (a))[0] == 0 && ((u_int32_t *) (a))[1] == 0 && \
78 ((u_int32_t *) (a))[2] == 0 && ((u_int32_t *) (a))[3] == htonl (1))
79#endif /* !IN6_IS_ADDR_LOOPBACK */
80
81#ifndef AF_INET6
82/* Define it to something that should never appear */
83#define AF_INET6 AF_MAX
84#endif
85
86#include "log.h"
87#include "servconf.h"
88#include "bsd-cray.h"
89
90#define MAXACID 80
91
92extern ServerOptions options;
93
94char cray_tmpdir[TPATHSIZ + 1]; /* job TMPDIR path */
95
96struct sysv sysv; /* system security structure */
97struct usrv usrv; /* user security structure */
98
99/*
100 * Functions.
101 */
102void cray_retain_utmp(struct utmp *, int);
103void cray_delete_tmpdir(char *, int, uid_t);
104void cray_init_job(struct passwd *);
105void cray_set_tmpdir(struct utmp *);
106void cray_login_failure(char *, int);
107int cray_setup(uid_t, char *, const char *);
108int cray_access_denied(char *);
109
110void
111cray_login_failure(char *username, int errcode)
112{
113 struct udb *ueptr; /* UDB pointer for username */
114 ia_failure_t fsent; /* ia_failure structure */
115 ia_failure_ret_t fret; /* ia_failure return stuff */
116 struct jtab jtab; /* job table structure */
117 int jid = 0; /* job id */
118
119 if ((jid = getjtab(&jtab)) < 0)
120 debug("cray_login_failure(): getjtab error");
121
122 getsysudb();
123 if ((ueptr = getudbnam(username)) == UDB_NULL)
124 debug("cray_login_failure(): getudbname() returned NULL");
125 endudb();
126
127 memset(&fsent, '\0', sizeof(fsent));
128 fsent.revision = 0;
129 fsent.uname = username;
130 fsent.host = (char *)get_canonical_hostname(options.use_dns);
131 fsent.ttyn = "sshd";
132 fsent.caller = IA_SSHD;
133 fsent.flags = IA_INTERACTIVE;
134 fsent.ueptr = ueptr;
135 fsent.jid = jid;
136 fsent.errcode = errcode;
137 fsent.pwdp = NULL;
138 fsent.exitcode = 0; /* dont exit in ia_failure() */
139
140 fret.revision = 0;
141 fret.normal = 0;
142
143 /*
144 * Call ia_failure because of an login failure.
145 */
146 ia_failure(&fsent, &fret);
147}
148
149/*
150 * Cray access denied
151 */
152int
153cray_access_denied(char *username)
154{
155 struct udb *ueptr; /* UDB pointer for username */
156 int errcode; /* IA errorcode */
157
158 errcode = 0;
159 getsysudb();
160 if ((ueptr = getudbnam(username)) == UDB_NULL)
161 debug("cray_login_failure(): getudbname() returned NULL");
162 endudb();
163
164 if (ueptr != NULL && ueptr->ue_disabled)
165 errcode = IA_DISABLED;
166 if (errcode)
167 cray_login_failure(username, errcode);
168
169 return (errcode);
170}
171
172/*
173 * record_failed_login: generic "login failed" interface function
174 */
175void
176record_failed_login(const char *user, const char *hostname, const char *ttyname)
177{
178 cray_login_failure((char *)user, IA_UDBERR);
179}
180
181int
182cray_setup (uid_t uid, char *username, const char *command)
183{
184 extern struct udb *getudb();
185 extern char *setlimits();
186
187 int err; /* error return */
188 time_t system_time; /* current system clock */
189 time_t expiration_time; /* password expiration time */
190 int maxattempts; /* maximum no. of failed login attempts */
191 int SecureSys; /* unicos security flag */
192 int minslevel = 0; /* system minimum security level */
193 int i, j;
194 int valid_acct = -1; /* flag for reading valid acct */
195 char acct_name[MAXACID] = { "" }; /* used to read acct name */
196 struct jtab jtab; /* Job table struct */
197 struct udb ue; /* udb entry for logging-in user */
198 struct udb *up; /* pointer to UDB entry */
199 struct secstat secinfo; /* file security attributes */
200 struct servprov init_info; /* used for sesscntl() call */
201 int jid; /* job ID */
202 int pid; /* process ID */
203 char *sr; /* status return from setlimits() */
204 char *ttyn = NULL; /* ttyname or command name*/
205 char hostname[MAXHOSTNAMELEN];
206 /* passwd stuff for ia_user */
207 passwd_t pwdacm, pwddialup, pwdudb, pwdwal, pwddce;
208 ia_user_ret_t uret; /* stuff returned from ia_user */
209 ia_user_t usent; /* ia_user main structure */
210 int ia_rcode; /* ia_user return code */
211 ia_failure_t fsent; /* ia_failure structure */
212 ia_failure_ret_t fret; /* ia_failure return stuff */
213 ia_success_t ssent; /* ia_success structure */
214 ia_success_ret_t sret; /* ia_success return stuff */
215 int ia_mlsrcode; /* ia_mlsuser return code */
216 int secstatrc; /* [f]secstat return code */
217
218 if (SecureSys = (int)sysconf(_SC_CRAY_SECURE_SYS)) {
219 getsysv(&sysv, sizeof(struct sysv));
220 minslevel = sysv.sy_minlvl;
221 if (getusrv(&usrv) < 0)
222 fatal("getusrv() failed, errno = %d", errno);
223 }
224 hostname[0] = '\0';
225 strlcpy(hostname,
226 (char *)get_canonical_hostname(options.use_dns),
227 MAXHOSTNAMELEN);
228 /*
229 * Fetch user's UDB entry.
230 */
231 getsysudb();
232 if ((up = getudbnam(username)) == UDB_NULL)
233 fatal("cannot fetch user's UDB entry");
234
235 /*
236 * Prevent any possible fudging so perform a data
237 * safety check and compare the supplied uid against
238 * the udb's uid.
239 */
240 if (up->ue_uid != uid)
241 fatal("IA uid missmatch");
242 endudb();
243
244 if ((jid = getjtab(&jtab)) < 0) {
245 debug("getjtab");
246 return(-1);
247 }
248 pid = getpid();
249 ttyn = ttyname(0);
250 if (SecureSys) {
251 if (ttyn != NULL)
252 secstatrc = secstat(ttyn, &secinfo);
253 else
254 secstatrc = fsecstat(1, &secinfo);
255
256 if (secstatrc == 0)
257 debug("[f]secstat() successful");
258 else
259 fatal("[f]secstat() error, rc = %d", secstatrc);
260 }
261 if ((ttyn == NULL) && ((char *)command != NULL))
262 ttyn = (char *)command;
263 /*
264 * Initialize all structures to call ia_user
265 */
266 usent.revision = 0;
267 usent.uname = username;
268 usent.host = hostname;
269 usent.ttyn = ttyn;
270 usent.caller = IA_SSHD;
271 usent.pswdlist = &pwdacm;
272 usent.ueptr = &ue;
273 usent.flags = IA_INTERACTIVE | IA_FFLAG;
274 pwdacm.atype = IA_SECURID;
275 pwdacm.pwdp = NULL;
276 pwdacm.next = &pwdudb;
277
278 pwdudb.atype = IA_UDB;
279 pwdudb.pwdp = NULL;
280 pwdudb.next = &pwddce;
281
282 pwddce.atype = IA_DCE;
283 pwddce.pwdp = NULL;
284 pwddce.next = &pwddialup;
285
286 pwddialup.atype = IA_DIALUP;
287 pwddialup.pwdp = NULL;
288 /* pwddialup.next = &pwdwal; */
289 pwddialup.next = NULL;
290
291 pwdwal.atype = IA_WAL;
292 pwdwal.pwdp = NULL;
293 pwdwal.next = NULL;
294
295 uret.revision = 0;
296 uret.pswd = NULL;
297 uret.normal = 0;
298
299 ia_rcode = ia_user(&usent, &uret);
300 switch (ia_rcode) {
301 /*
302 * These are acceptable return codes from ia_user()
303 */
304 case IA_UDBWEEK: /* Password Expires in 1 week */
305 expiration_time = ue.ue_pwage.time + ue.ue_pwage.maxage;
306 printf ("WARNING - your current password will expire %s\n",
307 ctime((const time_t *)&expiration_time));
308 break;
309 case IA_UDBEXPIRED:
310 if (ttyname(0) != NULL) {
311 /* Force a password change */
312 printf("Your password has expired; Choose a new one.\n");
313 execl("/bin/passwd", "passwd", username, 0);
314 exit(9);
315 }
316 break;
317 case IA_NORMAL: /* Normal Return Code */
318 break;
319 case IA_BACKDOOR:
320 /* XXX: can we memset it to zero here so save some of this */
321 strlcpy(ue.ue_name, "root", sizeof(ue.ue_name));
322 strlcpy(ue.ue_dir, "/", sizeof(ue.ue_dir));
323 strlcpy(ue.ue_shell, "/bin/sh", sizeof(ue.ue_shell));
324
325 ue.ue_passwd[0] = '\0';
326 ue.ue_age[0] = '\0';
327 ue.ue_comment[0] = '\0';
328 ue.ue_loghost[0] = '\0';
329 ue.ue_logline[0] = '\0';
330
331 ue.ue_uid = -1;
332 ue.ue_nice[UDBRC_INTER] = 0;
333
334 for (i = 0; i < MAXVIDS; i++)
335 ue.ue_gids[i] = 0;
336
337 ue.ue_logfails = 0;
338 ue.ue_minlvl = ue.ue_maxlvl = ue.ue_deflvl = minslevel;
339 ue.ue_defcomps = 0;
340 ue.ue_comparts = 0;
341 ue.ue_permits = 0;
342 ue.ue_trap = 0;
343 ue.ue_disabled = 0;
344 ue.ue_logtime = 0;
345 break;
346 case IA_CONSOLE: /* Superuser not from Console */
347 case IA_TRUSTED: /* Trusted user */
348 if (options.permit_root_login > PERMIT_NO)
349 break; /* Accept root login */
350 default:
351 /*
352 * These are failed return codes from ia_user()
353 */
354 switch (ia_rcode)
355 {
356 case IA_BADAUTH:
357 printf("Bad authorization, access denied.\n");
358 break;
359 case IA_DISABLED:
360 printf("Your login has been disabled. Contact the system ");
361 printf("administrator for assistance.\n");
362 break;
363 case IA_GETSYSV:
364 printf("getsysv() failed - errno = %d\n", errno);
365 break;
366 case IA_MAXLOGS:
367 printf("Maximum number of failed login attempts exceeded.\n");
368 printf("Access denied.\n");
369 break;
370 case IA_UDBPWDNULL:
371 if (SecureSys)
372 printf("NULL Password not allowed on MLS systems.\n");
373 break;
374 default:
375 break;
376 }
377
378 /*
379 * Authentication failed.
380 */
381 printf("sshd: Login incorrect, (0%o)\n",
382 ia_rcode-IA_ERRORCODE);
383
384 /*
385 * Initialize structure for ia_failure
386 * which will exit.
387 */
388 fsent.revision = 0;
389 fsent.uname = username;
390 fsent.host = hostname;
391 fsent.ttyn = ttyn;
392 fsent.caller = IA_SSHD;
393 fsent.flags = IA_INTERACTIVE;
394 fsent.ueptr = &ue;
395 fsent.jid = jid;
396 fsent.errcode = ia_rcode;
397 fsent.pwdp = uret.pswd;
398 fsent.exitcode = 1;
399
400 fret.revision = 0;
401 fret.normal = 0;
402
403 /*
404 * Call ia_failure because of an IA failure.
405 * There is no return because ia_failure exits.
406 */
407 ia_failure(&fsent, &fret);
408
409 exit(1);
410 }
411
412 ia_mlsrcode = IA_NORMAL;
413 if (SecureSys) {
414 debug("calling ia_mlsuser()");
415 ia_mlsrcode = ia_mlsuser(&ue, &secinfo, &usrv, NULL, 0);
416 }
417 if (ia_mlsrcode != IA_NORMAL) {
418 printf("sshd: Login incorrect, (0%o)\n",
419 ia_mlsrcode-IA_ERRORCODE);
420 /*
421 * Initialize structure for ia_failure
422 * which will exit.
423 */
424 fsent.revision = 0;
425 fsent.uname = username;
426 fsent.host = hostname;
427 fsent.ttyn = ttyn;
428 fsent.caller = IA_SSHD;
429 fsent.flags = IA_INTERACTIVE;
430 fsent.ueptr = &ue;
431 fsent.jid = jid;
432 fsent.errcode = ia_mlsrcode;
433 fsent.pwdp = uret.pswd;
434 fsent.exitcode = 1;
435 fret.revision = 0;
436 fret.normal = 0;
437
438 /*
439 * Call ia_failure because of an IA failure.
440 * There is no return because ia_failure exits.
441 */
442 ia_failure(&fsent,&fret);
443 exit(1);
444 }
445
446 /* Provide login status information */
447 if (options.print_lastlog && ue.ue_logtime != 0) {
448 printf("Last successful login was : %.*s ", 19,
449 (char *)ctime(&ue.ue_logtime));
450
451 if (*ue.ue_loghost != '\0') {
452 printf("from %.*s\n", sizeof(ue.ue_loghost),
453 ue.ue_loghost);
454 } else {
455 printf("on %.*s\n", sizeof(ue.ue_logline),
456 ue.ue_logline);
457 }
458
459 if (SecureSys && (ue.ue_logfails != 0)) {
460 printf(" followed by %d failed attempts\n",
461 ue.ue_logfails);
462 }
463 }
464
465 /*
466 * Call ia_success to process successful I/A.
467 */
468 ssent.revision = 0;
469 ssent.uname = username;
470 ssent.host = hostname;
471 ssent.ttyn = ttyn;
472 ssent.caller = IA_SSHD;
473 ssent.flags = IA_INTERACTIVE;
474 ssent.ueptr = &ue;
475 ssent.jid = jid;
476 ssent.errcode = ia_rcode;
477 ssent.us = NULL;
478 ssent.time = 1; /* Set ue_logtime */
479
480 sret.revision = 0;
481 sret.normal = 0;
482
483 ia_success(&ssent, &sret);
484
485 /*
486 * Query for account, iff > 1 valid acid & askacid permbit
487 */
488 if (((ue.ue_permbits & PERMBITS_ACCTID) ||
489 (ue.ue_acids[0] >= 0) && (ue.ue_acids[1] >= 0)) &&
490 ue.ue_permbits & PERMBITS_ASKACID) {
491 if (ttyname(0) != NULL) {
492 debug("cray_setup: ttyname true case, %.100s", ttyname);
493 while (valid_acct == -1) {
494 printf("Account (? for available accounts)"
495 " [%s]: ", acid2nam(ue.ue_acids[0]));
496 fgets(acct_name, MAXACID, stdin);
497 switch (acct_name[0]) {
498 case EOF:
499 exit(0);
500 break;
501 case '\0':
502 valid_acct = ue.ue_acids[0];
503 strlcpy(acct_name, acid2nam(valid_acct), MAXACID);
504 break;
505 case '?':
506 /* Print the list 3 wide */
507 for (i = 0, j = 0; i < MAXVIDS; i++) {
508 if (ue.ue_acids[i] == -1) {
509 printf("\n");
510 break;
511 }
512 if (++j == 4) {
513 j = 1;
514 printf("\n");
515 }
516 printf(" %s",
517 acid2nam(ue.ue_acids[i]));
518 }
519 if (ue.ue_permbits & PERMBITS_ACCTID) {
520 printf("\"acctid\" permbit also allows"
521 " you to select any valid "
522 "account name.\n");
523 }
524 printf("\n");
525 break;
526 default:
527 valid_acct = nam2acid(acct_name);
528 if (valid_acct == -1)
529 printf(
530 "Account id not found for"
531 " account name \"%s\"\n\n",
532 acct_name);
533 break;
534 }
535 /*
536 * If an account was given, search the user's
537 * acids array to verify they can use this account.
538 */
539 if ((valid_acct != -1) &&
540 !(ue.ue_permbits & PERMBITS_ACCTID)) {
541 for (i = 0; i < MAXVIDS; i++) {
542 if (ue.ue_acids[i] == -1)
543 break;
544 if (valid_acct == ue.ue_acids[i])
545 break;
546 }
547 if (i == MAXVIDS ||
548 ue.ue_acids[i] == -1) {
549 fprintf(stderr, "Cannot set"
550 " account name to "
551 "\"%s\", permission "
552 "denied\n\n", acct_name);
553 valid_acct = -1;
554 }
555 }
556 }
557 } else {
558 /*
559 * The client isn't connected to a terminal and can't
560 * respond to an acid prompt. Use default acid.
561 */
562 debug("cray_setup: ttyname false case, %.100s",
563 ttyname);
564 valid_acct = ue.ue_acids[0];
565 }
566 } else {
567 /*
568 * The user doesn't have the askacid permbit set or
569 * only has one valid account to use.
570 */
571 valid_acct = ue.ue_acids[0];
572 }
573 if (acctid(0, valid_acct) < 0) {
574 printf ("Bad account id: %d\n", valid_acct);
575 exit(1);
576 }
577
578 /*
579 * Now set shares, quotas, limits, including CPU time for the
580 * (interactive) job and process, and set up permissions
581 * (for chown etc), etc.
582 */
583 if (setshares(ue.ue_uid, valid_acct, printf, 0, 0)) {
584 printf("Unable to give %d shares to <%s>(%d/%d)\n",
585 ue.ue_shares, ue.ue_name, ue.ue_uid, valid_acct);
586 exit(1);
587 }
588
589 sr = setlimits(username, C_PROC, pid, UDBRC_INTER);
590 if (sr != NULL) {
591 debug("%.200s", sr);
592 exit(1);
593 }
594 sr = setlimits(username, C_JOB, jid, UDBRC_INTER);
595 if (sr != NULL) {
596 debug("%.200s", sr);
597 exit(1);
598 }
599 /*
600 * Place the service provider information into
601 * the session table (Unicos) or job table (Unicos/mk).
602 * There exist double defines for the job/session table in
603 * unicos/mk (jtab.h) so no need for a compile time switch.
604 */
605 memset(&init_info, '\0', sizeof(init_info));
606 init_info.s_sessinit.si_id = URM_SPT_LOGIN;
607 init_info.s_sessinit.si_pid = getpid();
608 init_info.s_sessinit.si_sid = jid;
609 sesscntl(0, S_SETSERVPO, (int)&init_info);
610
611 /*
612 * Set user and controlling tty security attributes.
613 */
614 if (SecureSys) {
615 if (setusrv(&usrv) == -1) {
616 debug("setusrv() failed, errno = %d",errno);
617 exit(1);
618 }
619 }
620
621 return (0);
622}
623
624/*
625 * The rc.* and /etc/sdaemon methods of starting a program on unicos/unicosmk
626 * can have pal privileges that sshd can inherit which
627 * could allow a user to su to root with out a password.
628 * This subroutine clears all privileges.
629 */
630void
631drop_cray_privs()
632{
633#if defined(_SC_CRAY_PRIV_SU)
634 priv_proc_t *privstate;
635 int result;
636 extern int priv_set_proc();
637 extern priv_proc_t *priv_init_proc();
638
639 /*
640 * If ether of theses two flags are not set
641 * then don't allow this version of ssh to run.
642 */
643 if (!sysconf(_SC_CRAY_PRIV_SU))
644 fatal("Not PRIV_SU system.");
645 if (!sysconf(_SC_CRAY_POSIX_PRIV))
646 fatal("Not POSIX_PRIV.");
647
648 debug("Setting MLS labels.");;
649
650 if (sysconf(_SC_CRAY_SECURE_MAC)) {
651 usrv.sv_minlvl = SYSLOW;
652 usrv.sv_actlvl = SYSHIGH;
653 usrv.sv_maxlvl = SYSHIGH;
654 } else {
655 usrv.sv_minlvl = sysv.sy_minlvl;
656 usrv.sv_actlvl = sysv.sy_minlvl;
657 usrv.sv_maxlvl = sysv.sy_maxlvl;
658 }
659 usrv.sv_actcmp = 0;
660 usrv.sv_valcmp = sysv.sy_valcmp;
661
662 usrv.sv_intcat = TFM_SYSTEM;
663 usrv.sv_valcat |= (TFM_SYSTEM | TFM_SYSFILE);
664
665 if (setusrv(&usrv) < 0) {
666 fatal("%s(%d): setusrv(): %s", __FILE__, __LINE__,
667 strerror(errno));
668 }
669
670 if ((privstate = priv_init_proc()) != NULL) {
671 result = priv_set_proc(privstate);
672 if (result != 0 ) {
673 fatal("%s(%d): priv_set_proc(): %s",
674 __FILE__, __LINE__, strerror(errno));
675 }
676 priv_free_proc(privstate);
677 }
678 debug ("Privileges should be cleared...");
679#else
680 /* XXX: do this differently */
681# error Cray systems must be run with _SC_CRAY_PRIV_SU on!
682#endif
683}
684
685
686/*
687 * Retain utmp/wtmp information - used by cray accounting.
688 */
689void
690cray_retain_utmp(struct utmp *ut, int pid)
691{
692 int fd;
693 struct utmp utmp;
694
695 if ((fd = open(UTMP_FILE, O_RDONLY)) != -1) {
696 /* XXX use atomicio */
697 while (read(fd, (char *)&utmp, sizeof(utmp)) == sizeof(utmp)) {
698 if (pid == utmp.ut_pid) {
699 ut->ut_jid = utmp.ut_jid;
700 strncpy(ut->ut_tpath, utmp.ut_tpath, sizeof(utmp.ut_tpath));
701 strncpy(ut->ut_host, utmp.ut_host, sizeof(utmp.ut_host));
702 strncpy(ut->ut_name, utmp.ut_name, sizeof(utmp.ut_name));
703 break;
704 }
705 }
706 close(fd);
707 } else
708 fatal("Unable to open utmp file");
709}
710
711/*
712 * tmpdir support.
713 */
714
715/*
716 * find and delete jobs tmpdir.
717 */
718void
719cray_delete_tmpdir(char *login, int jid, uid_t uid)
720{
721 static char jtmp[TPATHSIZ];
722 struct stat statbuf;
723 int child, c, wstat;
724
725 for (c = 'a'; c <= 'z'; c++) {
726 snprintf(jtmp, TPATHSIZ, "%s/jtmp.%06d%c", JTMPDIR, jid, c);
727 if (stat(jtmp, &statbuf) == 0 && statbuf.st_uid == uid)
728 break;
729 }
730
731 if (c > 'z')
732 return;
733
734 if ((child = fork()) == 0) {
735 execl(CLEANTMPCMD, CLEANTMPCMD, login, jtmp, (char *)NULL);
736 fatal("cray_delete_tmpdir: execl of CLEANTMPCMD failed");
737 }
738
739 while (waitpid(child, &wstat, 0) == -1 && errno == EINTR)
740 ;
741}
742
743/*
744 * Remove tmpdir on job termination.
745 */
746void
747cray_job_termination_handler(int sig)
748{
749 int jid;
750 char *login = NULL;
751 struct jtab jtab;
752
753 if ((jid = waitjob(&jtab)) == -1 ||
754 (login = uid2nam(jtab.j_uid)) == NULL)
755 return;
756
757 cray_delete_tmpdir(login, jid, jtab.j_uid);
758}
759
760/*
761 * Set job id and create tmpdir directory.
762 */
763void
764cray_init_job(struct passwd *pw)
765{
766 int jid;
767 int c;
768
769 jid = setjob(pw->pw_uid, WJSIGNAL);
770 if (jid < 0)
771 fatal("System call setjob failure");
772
773 for (c = 'a'; c <= 'z'; c++) {
774 snprintf(cray_tmpdir, TPATHSIZ, "%s/jtmp.%06d%c", JTMPDIR, jid, c);
775 if (mkdir(cray_tmpdir, JTMPMODE) != 0)
776 continue;
777 if (chown(cray_tmpdir, pw->pw_uid, pw->pw_gid) != 0) {
778 rmdir(cray_tmpdir);
779 continue;
780 }
781 break;
782 }
783
784 if (c > 'z')
785 cray_tmpdir[0] = '\0';
786}
787
788void
789cray_set_tmpdir(struct utmp *ut)
790{
791 int jid;
792 struct jtab jbuf;
793
794 if ((jid = getjtab(&jbuf)) < 0)
795 return;
796
797 /*
798 * Set jid and tmpdir in utmp record.
799 */
800 ut->ut_jid = jid;
801 strncpy(ut->ut_tpath, cray_tmpdir, TPATHSIZ);
802}
803#endif /* UNICOS */
804
805#ifdef _UNICOSMP
806#include <pwd.h>
807/*
808 * Set job id and create tmpdir directory.
809 */
810void
811cray_init_job(struct passwd *pw)
812{
813 initrm_silent(pw->pw_uid);
814 return;
815}
816#endif /* _UNICOSMP */
diff --git a/openbsd-compat/bsd-cray.h b/openbsd-compat/bsd-cray.h
deleted file mode 100644
index ca626a021..000000000
--- a/openbsd-compat/bsd-cray.h
+++ /dev/null
@@ -1,59 +0,0 @@
1/*
2 * Copyright (c) 2002, Cray Inc. (Wendy Palm <wendyp@cray.com>)
3 * Significant portions provided by
4 * Wayne Schroeder, SDSC <schroeder@sdsc.edu>
5 * William Jones, UTexas <jones@tacc.utexas.edu>
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 *
27 * Created: Apr 22 16.34:00 2002 wp
28 *
29 * This file contains functions required for proper execution
30 * on UNICOS systems.
31 *
32 */
33
34#ifndef _BSD_CRAY_H
35#define _BSD_CRAY_H
36
37#ifdef _UNICOS
38
39void cray_init_job(struct passwd *);
40void cray_job_termination_handler(int);
41void cray_login_failure(char *, int );
42int cray_access_denied(char *);
43extern char cray_tmpdir[];
44
45#define CUSTOM_FAILED_LOGIN 1
46
47#ifndef IA_SSHD
48# define IA_SSHD IA_LOGIN
49#endif
50#ifndef MAXHOSTNAMELEN
51# define MAXHOSTNAMELEN 64
52#endif
53#ifndef _CRAYT3E
54# define TIOCGPGRP (tIOC|20)
55#endif
56
57#endif /* UNICOS */
58
59#endif /* _BSD_CRAY_H */
diff --git a/openbsd-compat/bsd-flock.c b/openbsd-compat/bsd-flock.c
new file mode 100644
index 000000000..9b15d1eaf
--- /dev/null
+++ b/openbsd-compat/bsd-flock.c
@@ -0,0 +1,81 @@
1/* $NetBSD: flock.c,v 1.6 2008/04/28 20:24:12 martin Exp $ */
2
3/*-
4 * Copyright (c) 2001 The NetBSD Foundation, Inc.
5 * All rights reserved.
6 *
7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Todd Vierling.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 */
31
32/*
33 * Emulate flock() with fcntl(), where available.
34 * Otherwise, don't do locking; just pretend success.
35 */
36
37#include "includes.h"
38
39#ifndef HAVE_FLOCK
40#include <errno.h>
41#include <fcntl.h>
42
43int
44flock(int fd, int op)
45{
46 int rc = 0;
47
48#if defined(F_SETLK) && defined(F_SETLKW)
49 struct flock fl = {0};
50
51 switch (op & (LOCK_EX|LOCK_SH|LOCK_UN)) {
52 case LOCK_EX:
53 fl.l_type = F_WRLCK;
54 break;
55
56 case LOCK_SH:
57 fl.l_type = F_RDLCK;
58 break;
59
60 case LOCK_UN:
61 fl.l_type = F_UNLCK;
62 break;
63
64 default:
65 errno = EINVAL;
66 return -1;
67 }
68
69 fl.l_whence = SEEK_SET;
70 rc = fcntl(fd, op & LOCK_NB ? F_SETLK : F_SETLKW, &fl);
71
72 if (rc && (errno == EAGAIN))
73 errno = EWOULDBLOCK;
74#else
75 rc = -1;
76 errno = ENOSYS;
77#endif
78
79 return rc;
80}
81#endif
diff --git a/openbsd-compat/bsd-getpagesize.c b/openbsd-compat/bsd-getpagesize.c
index 9daddfbd3..416a8d4cb 100644
--- a/openbsd-compat/bsd-getpagesize.c
+++ b/openbsd-compat/bsd-getpagesize.c
@@ -1,5 +1,7 @@
1/* Placed in the public domain */ 1/* Placed in the public domain */
2 2
3#include "includes.h"
4
3#ifndef HAVE_GETPAGESIZE 5#ifndef HAVE_GETPAGESIZE
4 6
5#include <unistd.h> 7#include <unistd.h>
diff --git a/openbsd-compat/bsd-malloc.c b/openbsd-compat/bsd-malloc.c
index 6402ab588..482facdc9 100644
--- a/openbsd-compat/bsd-malloc.c
+++ b/openbsd-compat/bsd-malloc.c
@@ -50,6 +50,8 @@ rpl_realloc(void *ptr, size_t size)
50{ 50{
51 if (size == 0) 51 if (size == 0)
52 size = 1; 52 size = 1;
53 if (ptr == 0)
54 return malloc(size);
53 return realloc(ptr, size); 55 return realloc(ptr, size);
54} 56}
55#endif 57#endif
diff --git a/openbsd-compat/bsd-misc.c b/openbsd-compat/bsd-misc.c
index 29f6ad38c..3daf61071 100644
--- a/openbsd-compat/bsd-misc.c
+++ b/openbsd-compat/bsd-misc.c
@@ -104,16 +104,6 @@ const char *strerror(int e)
104} 104}
105#endif 105#endif
106 106
107#if !defined(HAVE_STRSIGNAL)
108char *strsignal(int sig)
109{
110 static char buf[16];
111
112 (void)snprintf(buf, sizeof(buf), "%d", sig);
113 return buf;
114}
115#endif
116
117#ifndef HAVE_UTIMES 107#ifndef HAVE_UTIMES
118int utimes(char *filename, struct timeval *tvp) 108int utimes(char *filename, struct timeval *tvp)
119{ 109{
@@ -221,33 +211,6 @@ tcsendbreak(int fd, int duration)
221} 211}
222#endif /* HAVE_TCSENDBREAK */ 212#endif /* HAVE_TCSENDBREAK */
223 213
224mysig_t
225mysignal(int sig, mysig_t act)
226{
227#ifdef HAVE_SIGACTION
228 struct sigaction sa, osa;
229
230 if (sigaction(sig, NULL, &osa) == -1)
231 return (mysig_t) -1;
232 if (osa.sa_handler != act) {
233 memset(&sa, 0, sizeof(sa));
234 sigemptyset(&sa.sa_mask);
235 sa.sa_flags = 0;
236#ifdef SA_INTERRUPT
237 if (sig == SIGALRM)
238 sa.sa_flags |= SA_INTERRUPT;
239#endif
240 sa.sa_handler = act;
241 if (sigaction(sig, &sa, NULL) == -1)
242 return (mysig_t) -1;
243 }
244 return (osa.sa_handler);
245#else
246 #undef signal
247 return (signal(sig, act));
248#endif
249}
250
251#ifndef HAVE_STRDUP 214#ifndef HAVE_STRDUP
252char * 215char *
253strdup(const char *str) 216strdup(const char *str)
@@ -275,7 +238,7 @@ isblank(int c)
275pid_t 238pid_t
276getpgid(pid_t pid) 239getpgid(pid_t pid)
277{ 240{
278#if defined(HAVE_GETPGRP) && !defined(GETPGRP_VOID) 241#if defined(HAVE_GETPGRP) && !defined(GETPGRP_VOID) && GETPGRP_VOID == 0
279 return getpgrp(pid); 242 return getpgrp(pid);
280#elif defined(HAVE_GETPGRP) 243#elif defined(HAVE_GETPGRP)
281 if (pid == 0) 244 if (pid == 0)
@@ -319,3 +282,45 @@ llabs(long long j)
319 return (j < 0 ? -j : j); 282 return (j < 0 ? -j : j);
320} 283}
321#endif 284#endif
285
286#ifndef HAVE_BZERO
287void
288bzero(void *b, size_t n)
289{
290 (void)memset(b, 0, n);
291}
292#endif
293
294#ifndef HAVE_RAISE
295int
296raise(int sig)
297{
298 kill(getpid(), sig);
299}
300#endif
301
302#ifndef HAVE_GETSID
303pid_t
304getsid(pid_t pid)
305{
306 errno = ENOSYS;
307 return -1;
308}
309#endif
310
311#ifdef FFLUSH_NULL_BUG
312#undef fflush
313int _ssh_compat_fflush(FILE *f)
314{
315 int r1, r2, r3;
316
317 if (f == NULL) {
318 r2 = fflush(stdout);
319 r3 = fflush(stderr);
320 if (r1 == -1 || r2 == -1 || r3 == -1)
321 return -1;
322 return 0;
323 }
324 return fflush(f);
325}
326#endif
diff --git a/openbsd-compat/bsd-misc.h b/openbsd-compat/bsd-misc.h
index 0b1a3504f..52ec52853 100644
--- a/openbsd-compat/bsd-misc.h
+++ b/openbsd-compat/bsd-misc.h
@@ -49,10 +49,6 @@ int setegid(uid_t);
49const char *strerror(int); 49const char *strerror(int);
50#endif 50#endif
51 51
52#if !defined(HAVE_STRSIGNAL)
53char *strsignal(int);
54#endif
55
56#if !defined(HAVE_SETLINEBUF) 52#if !defined(HAVE_SETLINEBUF)
57#define setlinebuf(a) (setvbuf((a), NULL, _IOLBF, 0)) 53#define setlinebuf(a) (setvbuf((a), NULL, _IOLBF, 0))
58#endif 54#endif
@@ -98,12 +94,6 @@ int tcsendbreak(int, int);
98int unsetenv(const char *); 94int unsetenv(const char *);
99#endif 95#endif
100 96
101/* wrapper for signal interface */
102typedef void (*mysig_t)(int);
103mysig_t mysignal(int sig, mysig_t act);
104
105#define signal(a,b) mysignal(a,b)
106
107#ifndef HAVE_ISBLANK 97#ifndef HAVE_ISBLANK
108int isblank(int); 98int isblank(int);
109#endif 99#endif
@@ -143,4 +133,28 @@ void warn(const char *, ...) __attribute__((format(printf, 1, 2)));
143long long llabs(long long); 133long long llabs(long long);
144#endif 134#endif
145 135
136#if defined(HAVE_DECL_BZERO) && HAVE_DECL_BZERO == 0
137void bzero(void *, size_t);
138#endif
139
140#ifndef HAVE_RAISE
141int raise(int);
142#endif
143
144#ifndef HAVE_GETSID
145pid_t getsid(pid_t);
146#endif
147
148#ifndef HAVE_FLOCK
149# define LOCK_SH 0x01
150# define LOCK_EX 0x02
151# define LOCK_NB 0x04
152# define LOCK_UN 0x08
153int flock(int, int);
154#endif
155
156#ifdef FFLUSH_NULL_BUG
157# define fflush(x) (_ssh_compat_fflush(x))
158#endif
159
146#endif /* _BSD_MISC_H */ 160#endif /* _BSD_MISC_H */
diff --git a/openbsd-compat/bsd-openpty.c b/openbsd-compat/bsd-openpty.c
index b28235860..e8ad542f8 100644
--- a/openbsd-compat/bsd-openpty.c
+++ b/openbsd-compat/bsd-openpty.c
@@ -147,31 +147,6 @@ openpty(int *amaster, int *aslave, char *name, struct termios *termp,
147 } 147 }
148 return (0); 148 return (0);
149 149
150#elif defined(_UNICOS)
151 char ptbuf[64], ttbuf[64];
152 int i;
153 int highpty;
154
155 highpty = 128;
156#ifdef _SC_CRAY_NPTY
157 if ((highpty = sysconf(_SC_CRAY_NPTY)) == -1)
158 highpty = 128;
159#endif /* _SC_CRAY_NPTY */
160
161 for (i = 0; i < highpty; i++) {
162 snprintf(ptbuf, sizeof(ptbuf), "/dev/pty/%03d", i);
163 snprintf(ttbuf, sizeof(ttbuf), "/dev/ttyp%03d", i);
164 if ((*amaster = open(ptbuf, O_RDWR|O_NOCTTY)) == -1)
165 continue;
166 /* Open the slave side. */
167 if ((*aslave = open(ttbuf, O_RDWR|O_NOCTTY)) == -1) {
168 close(*amaster);
169 return (-1);
170 }
171 return (0);
172 }
173 return (-1);
174
175#else 150#else
176 /* BSD-style pty code. */ 151 /* BSD-style pty code. */
177 char ptbuf[64], ttbuf[64]; 152 char ptbuf[64], ttbuf[64];
diff --git a/openbsd-compat/bsd-signal.c b/openbsd-compat/bsd-signal.c
new file mode 100644
index 000000000..979010e84
--- /dev/null
+++ b/openbsd-compat/bsd-signal.c
@@ -0,0 +1,62 @@
1/*
2 * Copyright (c) 1999-2004 Damien Miller <djm@mindrot.org>
3 *
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16
17#include "includes.h"
18
19#include <signal.h>
20#include <string.h>
21#include <unistd.h>
22
23#include "openbsd-compat/bsd-signal.h"
24
25#undef signal
26
27mysig_t
28mysignal(int sig, mysig_t act)
29{
30#ifdef HAVE_SIGACTION
31 struct sigaction sa, osa;
32
33 if (sigaction(sig, NULL, &osa) == -1)
34 return (mysig_t) -1;
35 if (osa.sa_handler != act) {
36 memset(&sa, 0, sizeof(sa));
37 sigemptyset(&sa.sa_mask);
38 sa.sa_flags = 0;
39#ifdef SA_INTERRUPT
40 if (sig == SIGALRM)
41 sa.sa_flags |= SA_INTERRUPT;
42#endif
43 sa.sa_handler = act;
44 if (sigaction(sig, &sa, NULL) == -1)
45 return (mysig_t) -1;
46 }
47 return (osa.sa_handler);
48#else
49 return (signal(sig, act));
50#endif
51}
52
53#if !defined(HAVE_STRSIGNAL)
54char *strsignal(int sig)
55{
56 static char buf[16];
57
58 (void)snprintf(buf, sizeof(buf), "%d", sig);
59 return buf;
60}
61#endif
62
diff --git a/openbsd-compat/bsd-signal.h b/openbsd-compat/bsd-signal.h
new file mode 100644
index 000000000..4cb8cb7a0
--- /dev/null
+++ b/openbsd-compat/bsd-signal.h
@@ -0,0 +1,39 @@
1/*
2 * Copyright (c) 1999-2004 Damien Miller <djm@mindrot.org>
3 *
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16
17#ifndef _BSD_SIGNAL_H
18#define _BSD_SIGNAL_H
19
20#include "includes.h"
21
22#ifndef _NSIG
23# ifdef NSIG
24# define _NSIG NSIG
25# else
26# define _NSIG 128
27# endif
28#endif
29
30/* wrapper for signal interface */
31typedef void (*mysig_t)(int);
32mysig_t mysignal(int sig, mysig_t act);
33#define signal(a,b) mysignal(a,b)
34
35#if !defined(HAVE_STRSIGNAL)
36char *strsignal(int);
37#endif
38
39#endif /* _BSD_SIGNAL_H */
diff --git a/openbsd-compat/bsd-statvfs.c b/openbsd-compat/bsd-statvfs.c
index 458dbe89c..e3bd87d98 100644
--- a/openbsd-compat/bsd-statvfs.c
+++ b/openbsd-compat/bsd-statvfs.c
@@ -25,6 +25,10 @@
25 25
26#include <errno.h> 26#include <errno.h>
27 27
28#ifndef MNAMELEN
29# define MNAMELEN 32
30#endif
31
28static void 32static void
29copy_statfs_to_statvfs(struct statvfs *to, struct statfs *from) 33copy_statfs_to_statvfs(struct statvfs *to, struct statfs *from)
30{ 34{
@@ -37,7 +41,11 @@ copy_statfs_to_statvfs(struct statvfs *to, struct statfs *from)
37 to->f_ffree = from->f_ffree; 41 to->f_ffree = from->f_ffree;
38 to->f_favail = from->f_ffree; /* no exact equivalent */ 42 to->f_favail = from->f_ffree; /* no exact equivalent */
39 to->f_fsid = 0; /* XXX fix me */ 43 to->f_fsid = 0; /* XXX fix me */
44#ifdef HAVE_STRUCT_STATFS_F_FLAGS
40 to->f_flag = from->f_flags; 45 to->f_flag = from->f_flags;
46#else
47 to->f_flag = 0;
48#endif
41 to->f_namemax = MNAMELEN; 49 to->f_namemax = MNAMELEN;
42} 50}
43 51
diff --git a/openbsd-compat/bsd-statvfs.h b/openbsd-compat/bsd-statvfs.h
index 815ec03b2..e2a4c15f7 100644
--- a/openbsd-compat/bsd-statvfs.h
+++ b/openbsd-compat/bsd-statvfs.h
@@ -26,6 +26,9 @@
26#ifdef HAVE_SYS_STATFS_H 26#ifdef HAVE_SYS_STATFS_H
27#include <sys/statfs.h> 27#include <sys/statfs.h>
28#endif 28#endif
29#ifdef HAVE_SYS_VFS_H
30#include <sys/vfs.h>
31#endif
29 32
30#ifndef HAVE_FSBLKCNT_T 33#ifndef HAVE_FSBLKCNT_T
31typedef unsigned long fsblkcnt_t; 34typedef unsigned long fsblkcnt_t;
diff --git a/openbsd-compat/freezero.c b/openbsd-compat/freezero.c
index 3af8f4a73..90b9d3813 100644
--- a/openbsd-compat/freezero.c
+++ b/openbsd-compat/freezero.c
@@ -16,11 +16,15 @@
16 16
17#include "includes.h" 17#include "includes.h"
18 18
19#include <string.h>
20
19#ifndef HAVE_FREEZERO 21#ifndef HAVE_FREEZERO
20 22
21void 23void
22freezero(void *ptr, size_t sz) 24freezero(void *ptr, size_t sz)
23{ 25{
26 if (ptr == NULL)
27 return;
24 explicit_bzero(ptr, sz); 28 explicit_bzero(ptr, sz);
25 free(ptr); 29 free(ptr);
26} 30}
diff --git a/openbsd-compat/openbsd-compat.h b/openbsd-compat/openbsd-compat.h
index cac799e84..b48fb9342 100644
--- a/openbsd-compat/openbsd-compat.h
+++ b/openbsd-compat/openbsd-compat.h
@@ -170,15 +170,24 @@ int BSDgetopt(int argc, char * const *argv, const char *opts);
170#include "openbsd-compat/getopt.h" 170#include "openbsd-compat/getopt.h"
171#endif 171#endif
172 172
173#if defined(HAVE_DECL_WRITEV) && HAVE_DECL_WRITEV == 0 173#if ((defined(HAVE_DECL_READV) && HAVE_DECL_READV == 0) || \
174 (defined(HAVE_DECL_WRITEV) && HAVE_DECL_WRITEV == 0))
174# include <sys/types.h> 175# include <sys/types.h>
175# include <sys/uio.h> 176# include <sys/uio.h>
177
178# if defined(HAVE_DECL_READV) && HAVE_DECL_READV == 0
179int readv(int, struct iovec *, int);
180# endif
181
182# if defined(HAVE_DECL_WRITEV) && HAVE_DECL_WRITEV == 0
176int writev(int, struct iovec *, int); 183int writev(int, struct iovec *, int);
184# endif
177#endif 185#endif
178 186
179/* Home grown routines */ 187/* Home grown routines */
180#include "bsd-misc.h" 188#include "bsd-misc.h"
181#include "bsd-setres_id.h" 189#include "bsd-setres_id.h"
190#include "bsd-signal.h"
182#include "bsd-statvfs.h" 191#include "bsd-statvfs.h"
183#include "bsd-waitpid.h" 192#include "bsd-waitpid.h"
184#include "bsd-poll.h" 193#include "bsd-poll.h"
@@ -315,14 +324,13 @@ char *shadow_pw(struct passwd *pw);
315#include "fake-rfc2553.h" 324#include "fake-rfc2553.h"
316 325
317/* Routines for a single OS platform */ 326/* Routines for a single OS platform */
318#include "bsd-cray.h"
319#include "bsd-cygwin_util.h" 327#include "bsd-cygwin_util.h"
320 328
321#include "port-aix.h" 329#include "port-aix.h"
322#include "port-irix.h" 330#include "port-irix.h"
323#include "port-linux.h" 331#include "port-linux.h"
324#include "port-solaris.h" 332#include "port-solaris.h"
325#include "port-tun.h" 333#include "port-net.h"
326#include "port-uw.h" 334#include "port-uw.h"
327 335
328/* _FORTIFY_SOURCE breaks FD_ISSET(n)/FD_SET(n) for n > FD_SETSIZE. Avoid. */ 336/* _FORTIFY_SOURCE breaks FD_ISSET(n)/FD_SET(n) for n > FD_SETSIZE. Avoid. */
diff --git a/openbsd-compat/port-aix.c b/openbsd-compat/port-aix.c
index c2970c4db..79c868966 100644
--- a/openbsd-compat/port-aix.c
+++ b/openbsd-compat/port-aix.c
@@ -32,6 +32,7 @@
32#include "hostfile.h" 32#include "hostfile.h"
33#include "auth.h" 33#include "auth.h"
34#include "ssh.h" 34#include "ssh.h"
35#include "ssh_api.h"
35#include "log.h" 36#include "log.h"
36 37
37#ifdef _AIX 38#ifdef _AIX
@@ -171,8 +172,9 @@ aix_valid_authentications(const char *user)
171 * returns 0. 172 * returns 0.
172 */ 173 */
173int 174int
174sys_auth_passwd(Authctxt *ctxt, const char *password) 175sys_auth_passwd(struct ssh *ssh, const char *password)
175{ 176{
177 Authctxt *ctxt = ssh->authctxt;
176 char *authmsg = NULL, *msg = NULL, *name = ctxt->pw->pw_name; 178 char *authmsg = NULL, *msg = NULL, *name = ctxt->pw->pw_name;
177 int authsuccess = 0, expired, reenter, result; 179 int authsuccess = 0, expired, reenter, result;
178 180
diff --git a/openbsd-compat/port-linux.c b/openbsd-compat/port-linux.c
index e26faf08c..8a3e5c68d 100644
--- a/openbsd-compat/port-linux.c
+++ b/openbsd-compat/port-linux.c
@@ -39,7 +39,6 @@
39 39
40#ifdef WITH_SELINUX 40#ifdef WITH_SELINUX
41#include <selinux/selinux.h> 41#include <selinux/selinux.h>
42#include <selinux/flask.h>
43#include <selinux/get_context_list.h> 42#include <selinux/get_context_list.h>
44 43
45#ifndef SSH_SELINUX_UNCONFINED_TYPE 44#ifndef SSH_SELINUX_UNCONFINED_TYPE
@@ -152,6 +151,7 @@ ssh_selinux_setup_pty(char *pwname, const char *tty, const char *role)
152 security_context_t new_tty_ctx = NULL; 151 security_context_t new_tty_ctx = NULL;
153 security_context_t user_ctx = NULL; 152 security_context_t user_ctx = NULL;
154 security_context_t old_tty_ctx = NULL; 153 security_context_t old_tty_ctx = NULL;
154 security_class_t chrclass;
155 155
156 if (!ssh_selinux_enabled()) 156 if (!ssh_selinux_enabled())
157 return; 157 return;
@@ -166,9 +166,12 @@ ssh_selinux_setup_pty(char *pwname, const char *tty, const char *role)
166 error("%s: getfilecon: %s", __func__, strerror(errno)); 166 error("%s: getfilecon: %s", __func__, strerror(errno));
167 goto out; 167 goto out;
168 } 168 }
169 169 if ((chrclass = string_to_security_class("chr_file")) == 0) {
170 error("%s: couldn't get security class for chr_file", __func__);
171 goto out;
172 }
170 if (security_compute_relabel(user_ctx, old_tty_ctx, 173 if (security_compute_relabel(user_ctx, old_tty_ctx,
171 SECCLASS_CHR_FILE, &new_tty_ctx) != 0) { 174 chrclass, &new_tty_ctx) != 0) {
172 error("%s: security_compute_relabel: %s", 175 error("%s: security_compute_relabel: %s",
173 __func__, strerror(errno)); 176 __func__, strerror(errno));
174 goto out; 177 goto out;
diff --git a/openbsd-compat/port-tun.c b/openbsd-compat/port-net.c
index 7579c6084..7050629c3 100644
--- a/openbsd-compat/port-tun.c
+++ b/openbsd-compat/port-net.c
@@ -37,6 +37,90 @@
37#include "ssherr.h" 37#include "ssherr.h"
38 38
39/* 39/*
40 * This file contains various portability code for network support,
41 * including tun/tap forwarding and routing domains.
42 */
43
44#if defined(SYS_RDOMAIN_LINUX) || defined(SSH_TUN_LINUX)
45#include <linux/if.h>
46#endif
47
48#if defined(SYS_RDOMAIN_LINUX)
49char *
50sys_get_rdomain(int fd)
51{
52 char dev[IFNAMSIZ + 1];
53 socklen_t len = sizeof(dev) - 1;
54
55 if (getsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, dev, &len) == -1) {
56 error("%s: cannot determine VRF for fd=%d : %s",
57 __func__, fd, strerror(errno));
58 return NULL;
59 }
60 dev[len] = '\0';
61 return strdup(dev);
62}
63
64int
65sys_set_rdomain(int fd, const char *name)
66{
67 if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE,
68 name, strlen(name)) == -1) {
69 error("%s: setsockopt(%d, SO_BINDTODEVICE, %s): %s",
70 __func__, fd, name, strerror(errno));
71 return -1;
72 }
73 return 0;
74}
75
76int
77sys_valid_rdomain(const char *name)
78{
79 int fd;
80
81 /*
82 * This is a pretty crappy way to test. It would be better to
83 * check whether "name" represents a VRF device, but apparently
84 * that requires an rtnetlink transaction.
85 */
86 if ((fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
87 return 0;
88 if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE,
89 name, strlen(name)) == -1) {
90 close(fd);
91 return 0;
92 }
93 close(fd);
94 return 1;
95}
96#elif defined(SYS_RDOMAIN_XXX)
97/* XXX examples */
98char *
99sys_get_rdomain(int fd)
100{
101 return NULL;
102}
103
104int
105sys_set_rdomain(int fd, const char *name)
106{
107 return -1;
108}
109
110int
111valid_rdomain(const char *name)
112{
113 return 0;
114}
115
116void
117sys_set_process_rdomain(const char *name)
118{
119 fatal("%s: not supported", __func__);
120}
121#endif /* defined(SYS_RDOMAIN_XXX) */
122
123/*
40 * This is the portable version of the SSH tunnel forwarding, it 124 * This is the portable version of the SSH tunnel forwarding, it
41 * uses some preprocessor definitions for various platform-specific 125 * uses some preprocessor definitions for various platform-specific
42 * settings. 126 * settings.
@@ -52,16 +136,18 @@
52 */ 136 */
53 137
54#if defined(SSH_TUN_LINUX) 138#if defined(SSH_TUN_LINUX)
55#include <linux/if.h>
56#include <linux/if_tun.h> 139#include <linux/if_tun.h>
57 140
58int 141int
59sys_tun_open(int tun, int mode) 142sys_tun_open(int tun, int mode, char **ifname)
60{ 143{
61 struct ifreq ifr; 144 struct ifreq ifr;
62 int fd = -1; 145 int fd = -1;
63 const char *name = NULL; 146 const char *name = NULL;
64 147
148 if (ifname != NULL)
149 *ifname = NULL;
150
65 if ((fd = open("/dev/net/tun", O_RDWR)) == -1) { 151 if ((fd = open("/dev/net/tun", O_RDWR)) == -1) {
66 debug("%s: failed to open tunnel control interface: %s", 152 debug("%s: failed to open tunnel control interface: %s",
67 __func__, strerror(errno)); 153 __func__, strerror(errno));
@@ -99,6 +185,9 @@ sys_tun_open(int tun, int mode)
99 else 185 else
100 debug("%s: %s mode %d fd %d", __func__, ifr.ifr_name, mode, fd); 186 debug("%s: %s mode %d fd %d", __func__, ifr.ifr_name, mode, fd);
101 187
188 if (ifname != NULL && (*ifname = strdup(ifr.ifr_name)))
189 goto failed;
190
102 return (fd); 191 return (fd);
103 192
104 failed: 193 failed:
@@ -116,13 +205,16 @@ sys_tun_open(int tun, int mode)
116#endif 205#endif
117 206
118int 207int
119sys_tun_open(int tun, int mode) 208sys_tun_open(int tun, int mode, char **ifname)
120{ 209{
121 struct ifreq ifr; 210 struct ifreq ifr;
122 char name[100]; 211 char name[100];
123 int fd = -1, sock, flag; 212 int fd = -1, sock, flag;
124 const char *tunbase = "tun"; 213 const char *tunbase = "tun";
125 214
215 if (ifname != NULL)
216 *ifname = NULL;
217
126 if (mode == SSH_TUNMODE_ETHERNET) { 218 if (mode == SSH_TUNMODE_ETHERNET) {
127#ifdef SSH_TUN_NO_L2 219#ifdef SSH_TUN_NO_L2
128 debug("%s: no layer 2 tunnelling support", __func__); 220 debug("%s: no layer 2 tunnelling support", __func__);
@@ -180,6 +272,9 @@ sys_tun_open(int tun, int mode)
180 goto failed; 272 goto failed;
181 } 273 }
182 274
275 if (ifname != NULL && (*ifname = strdup(ifr.ifr_name)))
276 goto failed;
277
183 close(sock); 278 close(sock);
184 return (fd); 279 return (fd);
185 280
diff --git a/openbsd-compat/port-tun.h b/openbsd-compat/port-net.h
index 103514370..3a0d1104b 100644
--- a/openbsd-compat/port-tun.h
+++ b/openbsd-compat/port-net.h
@@ -22,7 +22,7 @@ struct ssh;
22 22
23#if defined(SSH_TUN_LINUX) || defined(SSH_TUN_FREEBSD) 23#if defined(SSH_TUN_LINUX) || defined(SSH_TUN_FREEBSD)
24# define CUSTOM_SYS_TUN_OPEN 24# define CUSTOM_SYS_TUN_OPEN
25int sys_tun_open(int, int); 25int sys_tun_open(int, int, char **);
26#endif 26#endif
27 27
28#if defined(SSH_TUN_COMPAT_AF) || defined(SSH_TUN_PREPEND_AF) 28#if defined(SSH_TUN_COMPAT_AF) || defined(SSH_TUN_PREPEND_AF)
@@ -31,4 +31,18 @@ int sys_tun_infilter(struct ssh *, struct Channel *, char *, int);
31u_char *sys_tun_outfilter(struct ssh *, struct Channel *, u_char **, size_t *); 31u_char *sys_tun_outfilter(struct ssh *, struct Channel *, u_char **, size_t *);
32#endif 32#endif
33 33
34#if defined(SYS_RDOMAIN_LINUX)
35# define HAVE_SYS_GET_RDOMAIN
36# define HAVE_SYS_SET_RDOMAIN
37# define HAVE_SYS_VALID_RDOMAIN
38char *sys_get_rdomain(int fd);
39int sys_set_rdomain(int fd, const char *name);
40int sys_valid_rdomain(const char *name);
41#endif
42
43#if defined(SYS_RDOMAIN_XXX)
44# define HAVE_SYS_SET_PROCESS_RDOMAIN
45void sys_set_process_rdomain(const char *name);
46#endif
47
34#endif 48#endif
diff --git a/openbsd-compat/port-uw.c b/openbsd-compat/port-uw.c
index db24dbb94..014cac264 100644
--- a/openbsd-compat/port-uw.c
+++ b/openbsd-compat/port-uw.c
@@ -47,12 +47,14 @@
47#include "hostfile.h" 47#include "hostfile.h"
48#include "auth.h" 48#include "auth.h"
49#include "ssh.h" 49#include "ssh.h"
50#include "ssh_api.h"
50 51
51int nischeck(char *); 52int nischeck(char *);
52 53
53int 54int
54sys_auth_passwd(Authctxt *authctxt, const char *password) 55sys_auth_passwd(struct ssh *ssh, const char *password)
55{ 56{
57 Authctxt *authctxt = ssh->authctxt;
56 struct passwd *pw = authctxt->pw; 58 struct passwd *pw = authctxt->pw;
57 char *salt; 59 char *salt;
58 int result; 60 int result;
diff --git a/openbsd-compat/readpassphrase.c b/openbsd-compat/readpassphrase.c
index 24aed6e46..ff8ff3dec 100644
--- a/openbsd-compat/readpassphrase.c
+++ b/openbsd-compat/readpassphrase.c
@@ -46,14 +46,6 @@
46# define _POSIX_VDISABLE VDISABLE 46# define _POSIX_VDISABLE VDISABLE
47#endif 47#endif
48 48
49#ifndef _NSIG
50# ifdef NSIG
51# define _NSIG NSIG
52# else
53# define _NSIG 128
54# endif
55#endif
56
57static volatile sig_atomic_t signo[_NSIG]; 49static volatile sig_atomic_t signo[_NSIG];
58 50
59static void handler(int); 51static void handler(int);
diff --git a/openbsd-compat/regress/Makefile.in b/openbsd-compat/regress/Makefile.in
index dabdb0912..529331be5 100644
--- a/openbsd-compat/regress/Makefile.in
+++ b/openbsd-compat/regress/Makefile.in
@@ -1,5 +1,3 @@
1# $Id: Makefile.in,v 1.5 2014/06/17 13:06:08 dtucker Exp $
2
3sysconfdir=@sysconfdir@ 1sysconfdir=@sysconfdir@
4piddir=@piddir@ 2piddir=@piddir@
5srcdir=@srcdir@ 3srcdir=@srcdir@
diff --git a/openbsd-compat/strndup.c b/openbsd-compat/strndup.c
new file mode 100644
index 000000000..ebb4eccfb
--- /dev/null
+++ b/openbsd-compat/strndup.c
@@ -0,0 +1,43 @@
1/* $OpenBSD: strndup.c,v 1.2 2015/08/31 02:53:57 guenther Exp $ */
2
3/*
4 * Copyright (c) 2010 Todd C. Miller <Todd.Miller@courtesan.com>
5 *
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18
19#include "config.h"
20#if !defined(HAVE_STRNDUP) || defined(BROKEN_STRNDUP)
21#include <sys/types.h>
22
23#include <stddef.h>
24#include <stdlib.h>
25#include <string.h>
26
27char *
28strndup(const char *str, size_t maxlen)
29{
30 char *copy;
31 size_t len;
32
33 len = strnlen(str, maxlen);
34 copy = malloc(len + 1);
35 if (copy != NULL) {
36 (void)memcpy(copy, str, len);
37 copy[len] = '\0';
38 }
39
40 return copy;
41}
42DEF_WEAK(strndup);
43#endif /* HAVE_STRNDUP */
diff --git a/openbsd-compat/strnlen.c b/openbsd-compat/strnlen.c
index 93d515595..8cc6b96b5 100644
--- a/openbsd-compat/strnlen.c
+++ b/openbsd-compat/strnlen.c
@@ -19,7 +19,7 @@
19/* OPENBSD ORIGINAL: lib/libc/string/strnlen.c */ 19/* OPENBSD ORIGINAL: lib/libc/string/strnlen.c */
20 20
21#include "config.h" 21#include "config.h"
22#ifndef HAVE_STRNLEN 22#if !defined(HAVE_STRNLEN) || defined(BROKEN_STRNLEN)
23#include <sys/types.h> 23#include <sys/types.h>
24 24
25#include <string.h> 25#include <string.h>
diff --git a/opensshd.init.in b/opensshd.init.in
index 3908566b7..99e5a51ab 100755
--- a/opensshd.init.in
+++ b/opensshd.init.in
@@ -17,7 +17,6 @@ PIDFILE=$piddir/sshd.pid
17PidFile=`grep "^PidFile" ${sysconfdir}/sshd_config | tr "=" " " | awk '{print $2}'` 17PidFile=`grep "^PidFile" ${sysconfdir}/sshd_config | tr "=" " " | awk '{print $2}'`
18[ X$PidFile = X ] || PIDFILE=$PidFile 18[ X$PidFile = X ] || PIDFILE=$PidFile
19SSH_KEYGEN=$prefix/bin/ssh-keygen 19SSH_KEYGEN=$prefix/bin/ssh-keygen
20HOST_KEY_RSA1=$sysconfdir/ssh_host_key
21HOST_KEY_DSA=$sysconfdir/ssh_host_dsa_key 20HOST_KEY_DSA=$sysconfdir/ssh_host_dsa_key
22HOST_KEY_RSA=$sysconfdir/ssh_host_rsa_key 21HOST_KEY_RSA=$sysconfdir/ssh_host_rsa_key
23@COMMENT_OUT_ECC@HOST_KEY_ECDSA=$sysconfdir/ssh_host_ecdsa_key 22@COMMENT_OUT_ECC@HOST_KEY_ECDSA=$sysconfdir/ssh_host_ecdsa_key
@@ -25,9 +24,6 @@ HOST_KEY_ED25519=$sysconfdir/ssh_host_ed25519_key
25 24
26 25
27checkkeys() { 26checkkeys() {
28@COMMENT_OUT_RSA1@ if [ ! -f $HOST_KEY_RSA1 ]; then
29@COMMENT_OUT_RSA1@ ${SSH_KEYGEN} -t rsa1 -f ${HOST_KEY_RSA1} -N ""
30@COMMENT_OUT_RSA1@ fi
31 if [ ! -f $HOST_KEY_DSA ]; then 27 if [ ! -f $HOST_KEY_DSA ]; then
32 ${SSH_KEYGEN} -t dsa -f ${HOST_KEY_DSA} -N "" 28 ${SSH_KEYGEN} -t dsa -f ${HOST_KEY_DSA} -N ""
33 fi 29 fi
diff --git a/packet.c b/packet.c
index f114ea52c..4bfb50726 100644
--- a/packet.c
+++ b/packet.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: packet.c,v 1.264 2017/09/12 06:32:07 djm Exp $ */ 1/* $OpenBSD: packet.c,v 1.269 2017/12/18 23:13:42 djm Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -557,6 +557,18 @@ ssh_local_port(struct ssh *ssh)
557 return ssh->local_port; 557 return ssh->local_port;
558} 558}
559 559
560/* Returns the routing domain of the input socket, or NULL if unavailable */
561const char *
562ssh_packet_rdomain_in(struct ssh *ssh)
563{
564 if (ssh->rdomain_in != NULL)
565 return ssh->rdomain_in;
566 if (!ssh_packet_connection_is_on_socket(ssh))
567 return NULL;
568 ssh->rdomain_in = get_rdomain(ssh->state->connection_in);
569 return ssh->rdomain_in;
570}
571
560/* Closes the connection and clears and frees internal data structures. */ 572/* Closes the connection and clears and frees internal data structures. */
561 573
562static void 574static void
@@ -1320,7 +1332,7 @@ ssh_packet_read_seqnr(struct ssh *ssh, u_char *typep, u_int32_t *seqnr_p)
1320 for (;;) { 1332 for (;;) {
1321 if (state->packet_timeout_ms != -1) { 1333 if (state->packet_timeout_ms != -1) {
1322 ms_to_timeval(&timeout, ms_remain); 1334 ms_to_timeval(&timeout, ms_remain);
1323 gettimeofday(&start, NULL); 1335 monotime_tv(&start);
1324 } 1336 }
1325 if ((r = select(state->connection_in + 1, setp, 1337 if ((r = select(state->connection_in + 1, setp,
1326 NULL, NULL, timeoutp)) >= 0) 1338 NULL, NULL, timeoutp)) >= 0)
@@ -1774,6 +1786,8 @@ ssh_packet_send_debug(struct ssh *ssh, const char *fmt,...)
1774 vsnprintf(buf, sizeof(buf), fmt, args); 1786 vsnprintf(buf, sizeof(buf), fmt, args);
1775 va_end(args); 1787 va_end(args);
1776 1788
1789 debug3("sending debug message: %s", buf);
1790
1777 if ((r = sshpkt_start(ssh, SSH2_MSG_DEBUG)) != 0 || 1791 if ((r = sshpkt_start(ssh, SSH2_MSG_DEBUG)) != 0 ||
1778 (r = sshpkt_put_u8(ssh, 0)) != 0 || /* always display */ 1792 (r = sshpkt_put_u8(ssh, 0)) != 0 || /* always display */
1779 (r = sshpkt_put_cstring(ssh, buf)) != 0 || 1793 (r = sshpkt_put_cstring(ssh, buf)) != 0 ||
@@ -1783,8 +1797,8 @@ ssh_packet_send_debug(struct ssh *ssh, const char *fmt,...)
1783 fatal("%s: %s", __func__, ssh_err(r)); 1797 fatal("%s: %s", __func__, ssh_err(r));
1784} 1798}
1785 1799
1786static void 1800void
1787fmt_connection_id(struct ssh *ssh, char *s, size_t l) 1801sshpkt_fmt_connection_id(struct ssh *ssh, char *s, size_t l)
1788{ 1802{
1789 snprintf(s, l, "%.200s%s%s port %d", 1803 snprintf(s, l, "%.200s%s%s port %d",
1790 ssh->log_preamble ? ssh->log_preamble : "", 1804 ssh->log_preamble ? ssh->log_preamble : "",
@@ -1800,7 +1814,7 @@ sshpkt_fatal(struct ssh *ssh, const char *tag, int r)
1800{ 1814{
1801 char remote_id[512]; 1815 char remote_id[512];
1802 1816
1803 fmt_connection_id(ssh, remote_id, sizeof(remote_id)); 1817 sshpkt_fmt_connection_id(ssh, remote_id, sizeof(remote_id));
1804 1818
1805 switch (r) { 1819 switch (r) {
1806 case SSH_ERR_CONN_CLOSED: 1820 case SSH_ERR_CONN_CLOSED:
@@ -1862,7 +1876,7 @@ ssh_packet_disconnect(struct ssh *ssh, const char *fmt,...)
1862 * Format the message. Note that the caller must make sure the 1876 * Format the message. Note that the caller must make sure the
1863 * message is of limited size. 1877 * message is of limited size.
1864 */ 1878 */
1865 fmt_connection_id(ssh, remote_id, sizeof(remote_id)); 1879 sshpkt_fmt_connection_id(ssh, remote_id, sizeof(remote_id));
1866 va_start(args, fmt); 1880 va_start(args, fmt);
1867 vsnprintf(buf, sizeof(buf), fmt, args); 1881 vsnprintf(buf, sizeof(buf), fmt, args);
1868 va_end(args); 1882 va_end(args);
@@ -1945,7 +1959,7 @@ ssh_packet_write_wait(struct ssh *ssh)
1945 for (;;) { 1959 for (;;) {
1946 if (state->packet_timeout_ms != -1) { 1960 if (state->packet_timeout_ms != -1) {
1947 ms_to_timeval(&timeout, ms_remain); 1961 ms_to_timeval(&timeout, ms_remain);
1948 gettimeofday(&start, NULL); 1962 monotime_tv(&start);
1949 } 1963 }
1950 if ((ret = select(state->connection_out + 1, 1964 if ((ret = select(state->connection_out + 1,
1951 NULL, setp, NULL, timeoutp)) >= 0) 1965 NULL, setp, NULL, timeoutp)) >= 0)
@@ -2159,7 +2173,9 @@ kex_to_blob(struct sshbuf *m, struct kex *kex)
2159 if ((r = sshbuf_put_string(m, kex->session_id, 2173 if ((r = sshbuf_put_string(m, kex->session_id,
2160 kex->session_id_len)) != 0 || 2174 kex->session_id_len)) != 0 ||
2161 (r = sshbuf_put_u32(m, kex->we_need)) != 0 || 2175 (r = sshbuf_put_u32(m, kex->we_need)) != 0 ||
2176 (r = sshbuf_put_cstring(m, kex->hostkey_alg)) != 0 ||
2162 (r = sshbuf_put_u32(m, kex->hostkey_type)) != 0 || 2177 (r = sshbuf_put_u32(m, kex->hostkey_type)) != 0 ||
2178 (r = sshbuf_put_u32(m, kex->hostkey_nid)) != 0 ||
2163 (r = sshbuf_put_u32(m, kex->kex_type)) != 0 || 2179 (r = sshbuf_put_u32(m, kex->kex_type)) != 0 ||
2164 (r = sshbuf_put_stringb(m, kex->my)) != 0 || 2180 (r = sshbuf_put_stringb(m, kex->my)) != 0 ||
2165 (r = sshbuf_put_stringb(m, kex->peer)) != 0 || 2181 (r = sshbuf_put_stringb(m, kex->peer)) != 0 ||
@@ -2323,7 +2339,9 @@ kex_from_blob(struct sshbuf *m, struct kex **kexp)
2323 } 2339 }
2324 if ((r = sshbuf_get_string(m, &kex->session_id, &kex->session_id_len)) != 0 || 2340 if ((r = sshbuf_get_string(m, &kex->session_id, &kex->session_id_len)) != 0 ||
2325 (r = sshbuf_get_u32(m, &kex->we_need)) != 0 || 2341 (r = sshbuf_get_u32(m, &kex->we_need)) != 0 ||
2342 (r = sshbuf_get_cstring(m, &kex->hostkey_alg, NULL)) != 0 ||
2326 (r = sshbuf_get_u32(m, (u_int *)&kex->hostkey_type)) != 0 || 2343 (r = sshbuf_get_u32(m, (u_int *)&kex->hostkey_type)) != 0 ||
2344 (r = sshbuf_get_u32(m, (u_int *)&kex->hostkey_nid)) != 0 ||
2327 (r = sshbuf_get_u32(m, &kex->kex_type)) != 0 || 2345 (r = sshbuf_get_u32(m, &kex->kex_type)) != 0 ||
2328 (r = sshbuf_get_stringb(m, kex->my)) != 0 || 2346 (r = sshbuf_get_stringb(m, kex->my)) != 0 ||
2329 (r = sshbuf_get_stringb(m, kex->peer)) != 0 || 2347 (r = sshbuf_get_stringb(m, kex->peer)) != 0 ||
diff --git a/packet.h b/packet.h
index 40837e9db..a2ece6786 100644
--- a/packet.h
+++ b/packet.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: packet.h,v 1.82 2017/09/12 06:32:07 djm Exp $ */ 1/* $OpenBSD: packet.h,v 1.84 2017/12/10 05:55:29 dtucker Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -61,6 +61,7 @@ struct ssh {
61 int remote_port; 61 int remote_port;
62 char *local_ipaddr; 62 char *local_ipaddr;
63 int local_port; 63 int local_port;
64 char *rdomain_in;
64 65
65 /* Optional preamble for log messages (e.g. username) */ 66 /* Optional preamble for log messages (e.g. username) */
66 char *log_preamble; 67 char *log_preamble;
@@ -162,6 +163,7 @@ const char *ssh_remote_ipaddr(struct ssh *);
162int ssh_remote_port(struct ssh *); 163int ssh_remote_port(struct ssh *);
163const char *ssh_local_ipaddr(struct ssh *); 164const char *ssh_local_ipaddr(struct ssh *);
164int ssh_local_port(struct ssh *); 165int ssh_local_port(struct ssh *);
166const char *ssh_packet_rdomain_in(struct ssh *);
165 167
166void ssh_packet_set_rekey_limits(struct ssh *, u_int64_t, u_int32_t); 168void ssh_packet_set_rekey_limits(struct ssh *, u_int64_t, u_int32_t);
167time_t ssh_packet_get_rekey_timeout(struct ssh *); 169time_t ssh_packet_get_rekey_timeout(struct ssh *);
@@ -200,6 +202,7 @@ int sshpkt_get_cstring(struct ssh *ssh, char **valp, size_t *lenp);
200int sshpkt_get_ec(struct ssh *ssh, EC_POINT *v, const EC_GROUP *g); 202int sshpkt_get_ec(struct ssh *ssh, EC_POINT *v, const EC_GROUP *g);
201int sshpkt_get_bignum2(struct ssh *ssh, BIGNUM *v); 203int sshpkt_get_bignum2(struct ssh *ssh, BIGNUM *v);
202int sshpkt_get_end(struct ssh *ssh); 204int sshpkt_get_end(struct ssh *ssh);
205void sshpkt_fmt_connection_id(struct ssh *ssh, char *s, size_t l);
203const u_char *sshpkt_ptr(struct ssh *, size_t *lenp); 206const u_char *sshpkt_ptr(struct ssh *, size_t *lenp);
204 207
205/* OLD API */ 208/* OLD API */
diff --git a/pathnames.h b/pathnames.h
index 1c221b01b..cb44caa4d 100644
--- a/pathnames.h
+++ b/pathnames.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: pathnames.h,v 1.27 2017/05/05 10:42:49 naddy Exp $ */ 1/* $OpenBSD: pathnames.h,v 1.28 2018/02/23 15:58:37 markus Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -39,6 +39,7 @@
39#define _PATH_HOST_DSA_KEY_FILE SSHDIR "/ssh_host_dsa_key" 39#define _PATH_HOST_DSA_KEY_FILE SSHDIR "/ssh_host_dsa_key"
40#define _PATH_HOST_ECDSA_KEY_FILE SSHDIR "/ssh_host_ecdsa_key" 40#define _PATH_HOST_ECDSA_KEY_FILE SSHDIR "/ssh_host_ecdsa_key"
41#define _PATH_HOST_ED25519_KEY_FILE SSHDIR "/ssh_host_ed25519_key" 41#define _PATH_HOST_ED25519_KEY_FILE SSHDIR "/ssh_host_ed25519_key"
42#define _PATH_HOST_XMSS_KEY_FILE SSHDIR "/ssh_host_xmss_key"
42#define _PATH_HOST_RSA_KEY_FILE SSHDIR "/ssh_host_rsa_key" 43#define _PATH_HOST_RSA_KEY_FILE SSHDIR "/ssh_host_rsa_key"
43#define _PATH_DH_MODULI SSHDIR "/moduli" 44#define _PATH_DH_MODULI SSHDIR "/moduli"
44 45
@@ -75,6 +76,7 @@
75#define _PATH_SSH_CLIENT_ID_ECDSA _PATH_SSH_USER_DIR "/id_ecdsa" 76#define _PATH_SSH_CLIENT_ID_ECDSA _PATH_SSH_USER_DIR "/id_ecdsa"
76#define _PATH_SSH_CLIENT_ID_RSA _PATH_SSH_USER_DIR "/id_rsa" 77#define _PATH_SSH_CLIENT_ID_RSA _PATH_SSH_USER_DIR "/id_rsa"
77#define _PATH_SSH_CLIENT_ID_ED25519 _PATH_SSH_USER_DIR "/id_ed25519" 78#define _PATH_SSH_CLIENT_ID_ED25519 _PATH_SSH_USER_DIR "/id_ed25519"
79#define _PATH_SSH_CLIENT_ID_XMSS _PATH_SSH_USER_DIR "/id_xmss"
78 80
79/* 81/*
80 * Configuration file in user's home directory. This file need not be 82 * Configuration file in user's home directory. This file need not be
diff --git a/readconf.c b/readconf.c
index 41f36aa8d..efcf2d628 100644
--- a/readconf.c
+++ b/readconf.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: readconf.c,v 1.279 2017/09/21 19:16:53 markus Exp $ */ 1/* $OpenBSD: readconf.c,v 1.283 2018/02/23 15:58:37 markus Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -156,7 +156,7 @@ typedef enum {
156 oPubkeyAuthentication, 156 oPubkeyAuthentication,
157 oKbdInteractiveAuthentication, oKbdInteractiveDevices, oHostKeyAlias, 157 oKbdInteractiveAuthentication, oKbdInteractiveDevices, oHostKeyAlias,
158 oDynamicForward, oPreferredAuthentications, oHostbasedAuthentication, 158 oDynamicForward, oPreferredAuthentications, oHostbasedAuthentication,
159 oHostKeyAlgorithms, oBindAddress, oPKCS11Provider, 159 oHostKeyAlgorithms, oBindAddress, oBindInterface, oPKCS11Provider,
160 oClearAllForwardings, oNoHostAuthenticationForLocalhost, 160 oClearAllForwardings, oNoHostAuthenticationForLocalhost,
161 oEnableSSHKeysign, oRekeyLimit, oVerifyHostKeyDNS, oConnectTimeout, 161 oEnableSSHKeysign, oRekeyLimit, oVerifyHostKeyDNS, oConnectTimeout,
162 oAddressFamily, oGssAuthentication, oGssDelegateCreds, 162 oAddressFamily, oGssAuthentication, oGssDelegateCreds,
@@ -280,6 +280,7 @@ static struct {
280 { "preferredauthentications", oPreferredAuthentications }, 280 { "preferredauthentications", oPreferredAuthentications },
281 { "hostkeyalgorithms", oHostKeyAlgorithms }, 281 { "hostkeyalgorithms", oHostKeyAlgorithms },
282 { "bindaddress", oBindAddress }, 282 { "bindaddress", oBindAddress },
283 { "bindinterface", oBindInterface },
283 { "clearallforwardings", oClearAllForwardings }, 284 { "clearallforwardings", oClearAllForwardings },
284 { "enablesshkeysign", oEnableSSHKeysign }, 285 { "enablesshkeysign", oEnableSSHKeysign },
285 { "verifyhostkeydns", oVerifyHostKeyDNS }, 286 { "verifyhostkeydns", oVerifyHostKeyDNS },
@@ -699,34 +700,6 @@ match_cfg_line(Options *options, char **condition, struct passwd *pw,
699 return result; 700 return result;
700} 701}
701 702
702/* Check and prepare a domain name: removes trailing '.' and lowercases */
703static void
704valid_domain(char *name, const char *filename, int linenum)
705{
706 size_t i, l = strlen(name);
707 u_char c, last = '\0';
708
709 if (l == 0)
710 fatal("%s line %d: empty hostname suffix", filename, linenum);
711 if (!isalpha((u_char)name[0]) && !isdigit((u_char)name[0]))
712 fatal("%s line %d: hostname suffix \"%.100s\" "
713 "starts with invalid character", filename, linenum, name);
714 for (i = 0; i < l; i++) {
715 c = tolower((u_char)name[i]);
716 name[i] = (char)c;
717 if (last == '.' && c == '.')
718 fatal("%s line %d: hostname suffix \"%.100s\" contains "
719 "consecutive separators", filename, linenum, name);
720 if (c != '.' && c != '-' && !isalnum(c) &&
721 c != '_') /* technically invalid, but common */
722 fatal("%s line %d: hostname suffix \"%.100s\" contains "
723 "invalid characters", filename, linenum, name);
724 last = c;
725 }
726 if (name[l - 1] == '.')
727 name[l - 1] = '\0';
728}
729
730/* 703/*
731 * Returns the number of the token pointed to by cp or oBadOption. 704 * Returns the number of the token pointed to by cp or oBadOption.
732 */ 705 */
@@ -861,6 +834,7 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host,
861 const struct multistate *multistate_ptr; 834 const struct multistate *multistate_ptr;
862 struct allowed_cname *cname; 835 struct allowed_cname *cname;
863 glob_t gl; 836 glob_t gl;
837 const char *errstr;
864 838
865 if (activep == NULL) { /* We are processing a command line directive */ 839 if (activep == NULL) { /* We are processing a command line directive */
866 cmdline = 1; 840 cmdline = 1;
@@ -1162,6 +1136,10 @@ parse_char_array:
1162 charptr = &options->bind_address; 1136 charptr = &options->bind_address;
1163 goto parse_string; 1137 goto parse_string;
1164 1138
1139 case oBindInterface:
1140 charptr = &options->bind_interface;
1141 goto parse_string;
1142
1165 case oPKCS11Provider: 1143 case oPKCS11Provider:
1166 charptr = &options->pkcs11_provider; 1144 charptr = &options->pkcs11_provider;
1167 goto parse_string; 1145 goto parse_string;
@@ -1195,15 +1173,9 @@ parse_command:
1195 intptr = &options->port; 1173 intptr = &options->port;
1196parse_int: 1174parse_int:
1197 arg = strdelim(&s); 1175 arg = strdelim(&s);
1198 if (!arg || *arg == '\0') 1176 if ((errstr = atoi_err(arg, &value)) != NULL)
1199 fatal("%.200s line %d: Missing argument.", filename, linenum); 1177 fatal("%s line %d: integer value %s.",
1200 if (arg[0] < '0' || arg[0] > '9') 1178 filename, linenum, errstr);
1201 fatal("%.200s line %d: Bad number.", filename, linenum);
1202
1203 /* Octal, decimal, or hex format? */
1204 value = strtol(arg, &endofnumber, 0);
1205 if (arg == endofnumber)
1206 fatal("%.200s line %d: Bad number.", filename, linenum);
1207 if (*activep && *intptr == -1) 1179 if (*activep && *intptr == -1)
1208 *intptr = value; 1180 *intptr = value;
1209 break; 1181 break;
@@ -1600,7 +1572,10 @@ parse_keytypes:
1600 case oCanonicalDomains: 1572 case oCanonicalDomains:
1601 value = options->num_canonical_domains != 0; 1573 value = options->num_canonical_domains != 0;
1602 while ((arg = strdelim(&s)) != NULL && *arg != '\0') { 1574 while ((arg = strdelim(&s)) != NULL && *arg != '\0') {
1603 valid_domain(arg, filename, linenum); 1575 if (!valid_domain(arg, 1, &errstr)) {
1576 fatal("%s line %d: %s", filename, linenum,
1577 errstr);
1578 }
1604 if (!*activep || value) 1579 if (!*activep || value)
1605 continue; 1580 continue;
1606 if (options->num_canonical_domains >= MAX_CANON_DOMAINS) 1581 if (options->num_canonical_domains >= MAX_CANON_DOMAINS)
@@ -1872,6 +1847,7 @@ initialize_options(Options * options)
1872 options->log_level = SYSLOG_LEVEL_NOT_SET; 1847 options->log_level = SYSLOG_LEVEL_NOT_SET;
1873 options->preferred_authentications = NULL; 1848 options->preferred_authentications = NULL;
1874 options->bind_address = NULL; 1849 options->bind_address = NULL;
1850 options->bind_interface = NULL;
1875 options->pkcs11_provider = NULL; 1851 options->pkcs11_provider = NULL;
1876 options->enable_ssh_keysign = - 1; 1852 options->enable_ssh_keysign = - 1;
1877 options->no_host_authentication_for_localhost = - 1; 1853 options->no_host_authentication_for_localhost = - 1;
@@ -2015,6 +1991,7 @@ fill_default_options(Options * options)
2015#endif 1991#endif
2016 add_identity_file(options, "~/", 1992 add_identity_file(options, "~/",
2017 _PATH_SSH_CLIENT_ID_ED25519, 0); 1993 _PATH_SSH_CLIENT_ID_ED25519, 0);
1994 add_identity_file(options, "~/", _PATH_SSH_CLIENT_ID_XMSS, 0);
2018 } 1995 }
2019 if (options->escape_char == -1) 1996 if (options->escape_char == -1)
2020 options->escape_char = '~'; 1997 options->escape_char = '~';
@@ -2347,11 +2324,13 @@ parse_jump(const char *s, Options *o, int active)
2347 2324
2348 if (first) { 2325 if (first) {
2349 /* First argument and configuration is active */ 2326 /* First argument and configuration is active */
2350 if (parse_user_host_port(cp, &user, &host, &port) != 0) 2327 if (parse_ssh_uri(cp, &user, &host, &port) == -1 ||
2328 parse_user_host_port(cp, &user, &host, &port) != 0)
2351 goto out; 2329 goto out;
2352 } else { 2330 } else {
2353 /* Subsequent argument or inactive configuration */ 2331 /* Subsequent argument or inactive configuration */
2354 if (parse_user_host_port(cp, NULL, NULL, NULL) != 0) 2332 if (parse_ssh_uri(cp, NULL, NULL, NULL) == -1 ||
2333 parse_user_host_port(cp, NULL, NULL, NULL) != 0)
2355 goto out; 2334 goto out;
2356 } 2335 }
2357 first = 0; /* only check syntax for subsequent hosts */ 2336 first = 0; /* only check syntax for subsequent hosts */
@@ -2376,6 +2355,18 @@ parse_jump(const char *s, Options *o, int active)
2376 return ret; 2355 return ret;
2377} 2356}
2378 2357
2358int
2359parse_ssh_uri(const char *uri, char **userp, char **hostp, int *portp)
2360{
2361 char *path;
2362 int r;
2363
2364 r = parse_uri("ssh", uri, userp, hostp, portp, &path);
2365 if (r == 0 && path != NULL)
2366 r = -1; /* path not allowed */
2367 return r;
2368}
2369
2379/* XXX the following is a near-vebatim copy from servconf.c; refactor */ 2370/* XXX the following is a near-vebatim copy from servconf.c; refactor */
2380static const char * 2371static const char *
2381fmt_multistate_int(int val, const struct multistate *m) 2372fmt_multistate_int(int val, const struct multistate *m)
@@ -2578,6 +2569,7 @@ dump_client_config(Options *o, const char *host)
2578 2569
2579 /* String options */ 2570 /* String options */
2580 dump_cfg_string(oBindAddress, o->bind_address); 2571 dump_cfg_string(oBindAddress, o->bind_address);
2572 dump_cfg_string(oBindInterface, o->bind_interface);
2581 dump_cfg_string(oCiphers, o->ciphers ? o->ciphers : KEX_CLIENT_ENCRYPT); 2573 dump_cfg_string(oCiphers, o->ciphers ? o->ciphers : KEX_CLIENT_ENCRYPT);
2582 dump_cfg_string(oControlPath, o->control_path); 2574 dump_cfg_string(oControlPath, o->control_path);
2583 dump_cfg_string(oHostKeyAlgorithms, o->hostkeyalgorithms); 2575 dump_cfg_string(oHostKeyAlgorithms, o->hostkeyalgorithms);
diff --git a/readconf.h b/readconf.h
index d61161a84..f469daaff 100644
--- a/readconf.h
+++ b/readconf.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: readconf.h,v 1.123 2017/09/03 23:33:13 djm Exp $ */ 1/* $OpenBSD: readconf.h,v 1.125 2018/02/23 02:34:33 djm Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -86,6 +86,7 @@ typedef struct {
86 char *user_hostfiles[SSH_MAX_HOSTS_FILES]; 86 char *user_hostfiles[SSH_MAX_HOSTS_FILES];
87 char *preferred_authentications; 87 char *preferred_authentications;
88 char *bind_address; /* local socket address for connection to sshd */ 88 char *bind_address; /* local socket address for connection to sshd */
89 char *bind_interface; /* local interface for bind address */
89 char *pkcs11_provider; /* PKCS#11 provider */ 90 char *pkcs11_provider; /* PKCS#11 provider */
90 int verify_host_key_dns; /* Verify host key using DNS */ 91 int verify_host_key_dns; /* Verify host key using DNS */
91 92
@@ -209,6 +210,7 @@ int read_config_file(const char *, struct passwd *, const char *,
209 const char *, Options *, int); 210 const char *, Options *, int);
210int parse_forward(struct Forward *, const char *, int, int); 211int parse_forward(struct Forward *, const char *, int, int);
211int parse_jump(const char *, Options *, int); 212int parse_jump(const char *, Options *, int);
213int parse_ssh_uri(const char *, char **, char **, int *);
212int default_ssh_port(void); 214int default_ssh_port(void);
213int option_clear_or_none(const char *); 215int option_clear_or_none(const char *);
214void dump_client_config(Options *o, const char *host); 216void dump_client_config(Options *o, const char *host);
diff --git a/regress/Makefile b/regress/Makefile
index 7d50f9cfa..d15898ad0 100644
--- a/regress/Makefile
+++ b/regress/Makefile
@@ -1,4 +1,4 @@
1# $OpenBSD: Makefile,v 1.95 2017/06/24 06:35:24 djm Exp $ 1# $OpenBSD: Makefile,v 1.96 2017/10/24 19:33:32 millert Exp $
2 2
3REGRESS_TARGETS= unit t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t-exec 3REGRESS_TARGETS= unit t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t-exec
4tests: prep $(REGRESS_TARGETS) 4tests: prep $(REGRESS_TARGETS)
@@ -19,6 +19,7 @@ distclean: clean
19LTESTS= connect \ 19LTESTS= connect \
20 proxy-connect \ 20 proxy-connect \
21 connect-privsep \ 21 connect-privsep \
22 connect-uri \
22 proto-version \ 23 proto-version \
23 proto-mismatch \ 24 proto-mismatch \
24 exit-status \ 25 exit-status \
@@ -42,6 +43,7 @@ LTESTS= connect \
42 keygen-moduli \ 43 keygen-moduli \
43 key-options \ 44 key-options \
44 scp \ 45 scp \
46 scp-uri \
45 sftp \ 47 sftp \
46 sftp-chroot \ 48 sftp-chroot \
47 sftp-cmds \ 49 sftp-cmds \
@@ -49,6 +51,7 @@ LTESTS= connect \
49 sftp-batch \ 51 sftp-batch \
50 sftp-glob \ 52 sftp-glob \
51 sftp-perm \ 53 sftp-perm \
54 sftp-uri \
52 reconfigure \ 55 reconfigure \
53 dynamic-forward \ 56 dynamic-forward \
54 forwarding \ 57 forwarding \
diff --git a/regress/README.regress b/regress/README.regress
index 9b99bdacb..867855017 100644
--- a/regress/README.regress
+++ b/regress/README.regress
@@ -100,5 +100,3 @@ Known Issues.
100- Recent GNU coreutils deprecate "head -[n]": this will cause the yes-head 100- Recent GNU coreutils deprecate "head -[n]": this will cause the yes-head
101 test to fail. The old behaviour can be restored by setting (and 101 test to fail. The old behaviour can be restored by setting (and
102 exporting) _POSIX2_VERSION=199209 before running the tests. 102 exporting) _POSIX2_VERSION=199209 before running the tests.
103
104$Id: README.regress,v 1.12 2011/05/05 03:48:42 djm Exp $
diff --git a/regress/agent-getpeereid.sh b/regress/agent-getpeereid.sh
index 037a50914..769c29e8d 100644
--- a/regress/agent-getpeereid.sh
+++ b/regress/agent-getpeereid.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: agent-getpeereid.sh,v 1.9 2017/09/13 14:58:26 bluhm Exp $ 1# $OpenBSD: agent-getpeereid.sh,v 1.10 2018/02/09 03:40:22 dtucker Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="disallow agent attach from other uid" 4tid="disallow agent attach from other uid"
@@ -18,6 +18,7 @@ case "x$SUDO" in
18 xdoas) ;; 18 xdoas) ;;
19 x) 19 x)
20 echo "need SUDO to switch to uid $UNPRIV" 20 echo "need SUDO to switch to uid $UNPRIV"
21 echo SKIPPED
21 exit 0 ;; 22 exit 0 ;;
22 *) 23 *)
23 echo "unsupported $SUDO - "doas" and "sudo" are allowed" 24 echo "unsupported $SUDO - "doas" and "sudo" are allowed"
diff --git a/regress/agent-ptrace.sh b/regress/agent-ptrace.sh
index bb676d631..2d795ee32 100644
--- a/regress/agent-ptrace.sh
+++ b/regress/agent-ptrace.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: agent-ptrace.sh,v 1.2 2014/02/27 21:21:25 djm Exp $ 1# $OpenBSD: agent-ptrace.sh,v 1.3 2015/09/11 04:55:01 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="disallow agent ptrace attach" 4tid="disallow agent ptrace attach"
diff --git a/regress/agent.sh b/regress/agent.sh
index 0baf0c74a..7111056c9 100644
--- a/regress/agent.sh
+++ b/regress/agent.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: agent.sh,v 1.12 2017/04/30 23:34:55 djm Exp $ 1# $OpenBSD: agent.sh,v 1.13 2017/12/19 00:49:30 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="simple agent test" 4tid="simple agent test"
@@ -12,66 +12,106 @@ trace "start agent"
12eval `${SSHAGENT} -s` > /dev/null 12eval `${SSHAGENT} -s` > /dev/null
13r=$? 13r=$?
14if [ $r -ne 0 ]; then 14if [ $r -ne 0 ]; then
15 fail "could not start ssh-agent: exit code $r" 15 fatal "could not start ssh-agent: exit code $r"
16else 16fi
17 ${SSHADD} -l > /dev/null 2>&1 17
18 if [ $? -ne 1 ]; then 18${SSHADD} -l > /dev/null 2>&1
19 fail "ssh-add -l did not fail with exit code 1" 19if [ $? -ne 1 ]; then
20 fi 20 fail "ssh-add -l did not fail with exit code 1"
21 trace "overwrite authorized keys" 21fi
22 printf '' > $OBJ/authorized_keys_$USER 22
23 for t in ${SSH_KEYTYPES}; do 23rm -f $OBJ/user_ca_key $OBJ/user_ca_key.pub
24 # generate user key for agent 24${SSHKEYGEN} -q -N '' -t ed25519 -f $OBJ/user_ca_key \
25 rm -f $OBJ/$t-agent 25 || fatal "ssh-keygen failed"
26 ${SSHKEYGEN} -q -N '' -t $t -f $OBJ/$t-agent ||\ 26
27 fail "ssh-keygen for $t-agent failed" 27trace "overwrite authorized keys"
28 # add to authorized keys 28printf '' > $OBJ/authorized_keys_$USER
29 cat $OBJ/$t-agent.pub >> $OBJ/authorized_keys_$USER 29
30 # add privat key to agent 30for t in ${SSH_KEYTYPES}; do
31 ${SSHADD} $OBJ/$t-agent > /dev/null 2>&1 31 # generate user key for agent
32 if [ $? -ne 0 ]; then 32 rm -f $OBJ/$t-agent $OBJ/$t-agent.pub*
33 fail "ssh-add did succeed exit code 0" 33 ${SSHKEYGEN} -q -N '' -t $t -f $OBJ/$t-agent ||\
34 fi 34 fatal "ssh-keygen for $t-agent failed"
35 done 35 # Make a certificate for each too.
36 ${SSHADD} -l > /dev/null 2>&1 36 ${SSHKEYGEN} -qs $OBJ/user_ca_key -I "$t cert" \
37 r=$? 37 -n estragon $OBJ/$t-agent.pub || fatal "ca sign failed"
38 if [ $r -ne 0 ]; then 38
39 fail "ssh-add -l failed: exit code $r" 39 # add to authorized keys
40 fi 40 cat $OBJ/$t-agent.pub >> $OBJ/authorized_keys_$USER
41 # the same for full pubkey output 41 # add privat key to agent
42 ${SSHADD} -L > /dev/null 2>&1 42 ${SSHADD} $OBJ/$t-agent > /dev/null 2>&1
43 r=$? 43 if [ $? -ne 0 ]; then
44 if [ $r -ne 0 ]; then 44 fail "ssh-add did succeed exit code 0"
45 fail "ssh-add -L failed: exit code $r"
46 fi 45 fi
46 # Remove private key to ensure that we aren't accidentally using it.
47 rm -f $OBJ/$t-agent
48done
49
50# Remove explicit identity directives from ssh_proxy
51mv $OBJ/ssh_proxy $OBJ/ssh_proxy_bak
52grep -vi identityfile $OBJ/ssh_proxy_bak > $OBJ/ssh_proxy
53
54${SSHADD} -l > /dev/null 2>&1
55r=$?
56if [ $r -ne 0 ]; then
57 fail "ssh-add -l failed: exit code $r"
58fi
59# the same for full pubkey output
60${SSHADD} -L > /dev/null 2>&1
61r=$?
62if [ $r -ne 0 ]; then
63 fail "ssh-add -L failed: exit code $r"
64fi
47 65
48 trace "simple connect via agent" 66trace "simple connect via agent"
49 ${SSH} -F $OBJ/ssh_proxy somehost exit 52 67${SSH} -F $OBJ/ssh_proxy somehost exit 52
68r=$?
69if [ $r -ne 52 ]; then
70 fail "ssh connect with failed (exit code $r)"
71fi
72
73for t in ${SSH_KEYTYPES}; do
74 trace "connect via agent using $t key"
75 ${SSH} -F $OBJ/ssh_proxy -i $OBJ/$t-agent.pub -oIdentitiesOnly=yes \
76 somehost exit 52
50 r=$? 77 r=$?
51 if [ $r -ne 52 ]; then 78 if [ $r -ne 52 ]; then
52 fail "ssh connect with failed (exit code $r)" 79 fail "ssh connect with failed (exit code $r)"
53 fi 80 fi
81done
54 82
55 trace "agent forwarding" 83trace "agent forwarding"
56 ${SSH} -A -F $OBJ/ssh_proxy somehost ${SSHADD} -l > /dev/null 2>&1 84${SSH} -A -F $OBJ/ssh_proxy somehost ${SSHADD} -l > /dev/null 2>&1
57 r=$? 85r=$?
58 if [ $r -ne 0 ]; then 86if [ $r -ne 0 ]; then
59 fail "ssh-add -l via agent fwd failed (exit code $r)" 87 fail "ssh-add -l via agent fwd failed (exit code $r)"
60 fi 88fi
61 ${SSH} -A -F $OBJ/ssh_proxy somehost \ 89${SSH} -A -F $OBJ/ssh_proxy somehost \
62 "${SSH} -F $OBJ/ssh_proxy somehost exit 52" 90 "${SSH} -F $OBJ/ssh_proxy somehost exit 52"
63 r=$? 91r=$?
64 if [ $r -ne 52 ]; then 92if [ $r -ne 52 ]; then
65 fail "agent fwd failed (exit code $r)" 93 fail "agent fwd failed (exit code $r)"
66 fi 94fi
67 95
68 trace "delete all agent keys" 96(printf 'cert-authority,principals="estragon" '; cat $OBJ/user_ca_key.pub) \
69 ${SSHADD} -D > /dev/null 2>&1 97 > $OBJ/authorized_keys_$USER
98for t in ${SSH_KEYTYPES}; do
99 trace "connect via agent using $t key"
100 ${SSH} -F $OBJ/ssh_proxy -i $OBJ/$t-agent.pub \
101 -oCertificateFile=$OBJ/$t-agent-cert.pub \
102 -oIdentitiesOnly=yes somehost exit 52
70 r=$? 103 r=$?
71 if [ $r -ne 0 ]; then 104 if [ $r -ne 52 ]; then
72 fail "ssh-add -D failed: exit code $r" 105 fail "ssh connect with failed (exit code $r)"
73 fi 106 fi
107done
74 108
75 trace "kill agent" 109trace "delete all agent keys"
76 ${SSHAGENT} -k > /dev/null 110${SSHADD} -D > /dev/null 2>&1
111r=$?
112if [ $r -ne 0 ]; then
113 fail "ssh-add -D failed: exit code $r"
77fi 114fi
115
116trace "kill agent"
117${SSHAGENT} -k > /dev/null
diff --git a/regress/allow-deny-users.sh b/regress/allow-deny-users.sh
index 86805e193..4165111e0 100644
--- a/regress/allow-deny-users.sh
+++ b/regress/allow-deny-users.sh
@@ -1,5 +1,6 @@
1# Public Domain 1# Public Domain
2# Zev Weiss, 2016 2# Zev Weiss, 2016
3# $OpenBSD: allow-deny-users.sh,v 1.4 2017/10/20 02:13:41 djm Exp $
3 4
4tid="AllowUsers/DenyUsers" 5tid="AllowUsers/DenyUsers"
5 6
diff --git a/regress/authinfo.sh b/regress/authinfo.sh
index e725296c9..3caf89478 100644
--- a/regress/authinfo.sh
+++ b/regress/authinfo.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: authinfo.sh,v 1.1 2017/06/24 06:35:24 djm Exp $ 1# $OpenBSD: authinfo.sh,v 1.2 2017/10/25 20:08:36 millert Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="authinfo" 4tid="authinfo"
@@ -6,7 +6,7 @@ tid="authinfo"
6# Ensure the environment variable doesn't leak when ExposeAuthInfo=no. 6# Ensure the environment variable doesn't leak when ExposeAuthInfo=no.
7verbose "ExposeAuthInfo=no" 7verbose "ExposeAuthInfo=no"
8env SSH_USER_AUTH=blah ${SSH} -F $OBJ/ssh_proxy x \ 8env SSH_USER_AUTH=blah ${SSH} -F $OBJ/ssh_proxy x \
9 'test -z "$SSH_USER_AUTH"' || fail "SSH_USER_AUTH present" 9 'env | grep SSH_USER_AUTH >/dev/null' && fail "SSH_USER_AUTH present"
10 10
11verbose "ExposeAuthInfo=yes" 11verbose "ExposeAuthInfo=yes"
12echo ExposeAuthInfo=yes >> $OBJ/sshd_proxy 12echo ExposeAuthInfo=yes >> $OBJ/sshd_proxy
diff --git a/regress/cert-userkey.sh b/regress/cert-userkey.sh
index 6a23fe300..30c2c156d 100644
--- a/regress/cert-userkey.sh
+++ b/regress/cert-userkey.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: cert-userkey.sh,v 1.18 2017/04/30 23:34:55 djm Exp $ 1# $OpenBSD: cert-userkey.sh,v 1.19 2018/03/12 00:54:04 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="certified user keys" 4tid="certified user keys"
@@ -8,6 +8,7 @@ cp $OBJ/sshd_proxy $OBJ/sshd_proxy_bak
8cp $OBJ/ssh_proxy $OBJ/ssh_proxy_bak 8cp $OBJ/ssh_proxy $OBJ/ssh_proxy_bak
9 9
10PLAIN_TYPES=`$SSH -Q key-plain | sed 's/^ssh-dss/ssh-dsa/;s/^ssh-//'` 10PLAIN_TYPES=`$SSH -Q key-plain | sed 's/^ssh-dss/ssh-dsa/;s/^ssh-//'`
11EXTRA_TYPES=""
11 12
12if echo "$PLAIN_TYPES" | grep '^rsa$' >/dev/null 2>&1 ; then 13if echo "$PLAIN_TYPES" | grep '^rsa$' >/dev/null 2>&1 ; then
13 PLAIN_TYPES="$PLAIN_TYPES rsa-sha2-256 rsa-sha2-512" 14 PLAIN_TYPES="$PLAIN_TYPES rsa-sha2-256 rsa-sha2-512"
@@ -15,7 +16,7 @@ fi
15 16
16kname() { 17kname() {
17 case $ktype in 18 case $ktype in
18 rsa-sha2-*) ;; 19 rsa-sha2-*) n="$ktype" ;;
19 # subshell because some seds will add a newline 20 # subshell because some seds will add a newline
20 *) n=$(echo $1 | sed 's/^dsa/ssh-dss/;s/^rsa/ssh-rsa/;s/^ed/ssh-ed/') ;; 21 *) n=$(echo $1 | sed 's/^dsa/ssh-dss/;s/^rsa/ssh-rsa/;s/^ed/ssh-ed/') ;;
21 esac 22 esac
diff --git a/regress/cfgmatch.sh b/regress/cfgmatch.sh
index 2504d04f4..dd11e404d 100644
--- a/regress/cfgmatch.sh
+++ b/regress/cfgmatch.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: cfgmatch.sh,v 1.10 2017/04/30 23:34:55 djm Exp $ 1# $OpenBSD: cfgmatch.sh,v 1.11 2017/10/04 18:50:23 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="sshd_config match" 4tid="sshd_config match"
@@ -41,7 +41,7 @@ stop_client()
41cp $OBJ/sshd_proxy $OBJ/sshd_proxy_bak 41cp $OBJ/sshd_proxy $OBJ/sshd_proxy_bak
42echo "PermitOpen 127.0.0.1:1" >>$OBJ/sshd_config 42echo "PermitOpen 127.0.0.1:1" >>$OBJ/sshd_config
43echo "Match Address 127.0.0.1" >>$OBJ/sshd_config 43echo "Match Address 127.0.0.1" >>$OBJ/sshd_config
44echo "PermitOpen 127.0.0.1:$PORT" >>$OBJ/sshd_config 44echo "PermitOpen 127.0.0.1:2 127.0.0.1:3 127.0.0.1:$PORT" >>$OBJ/sshd_config
45 45
46grep -v AuthorizedKeysFile $OBJ/sshd_proxy_bak > $OBJ/sshd_proxy 46grep -v AuthorizedKeysFile $OBJ/sshd_proxy_bak > $OBJ/sshd_proxy
47echo "AuthorizedKeysFile /dev/null" >>$OBJ/sshd_proxy 47echo "AuthorizedKeysFile /dev/null" >>$OBJ/sshd_proxy
@@ -49,7 +49,7 @@ echo "PermitOpen 127.0.0.1:1" >>$OBJ/sshd_proxy
49echo "Match user $USER" >>$OBJ/sshd_proxy 49echo "Match user $USER" >>$OBJ/sshd_proxy
50echo "AuthorizedKeysFile /dev/null $OBJ/authorized_keys_%u" >>$OBJ/sshd_proxy 50echo "AuthorizedKeysFile /dev/null $OBJ/authorized_keys_%u" >>$OBJ/sshd_proxy
51echo "Match Address 127.0.0.1" >>$OBJ/sshd_proxy 51echo "Match Address 127.0.0.1" >>$OBJ/sshd_proxy
52echo "PermitOpen 127.0.0.1:$PORT" >>$OBJ/sshd_proxy 52echo "PermitOpen 127.0.0.1:2 127.0.0.1:3 127.0.0.1:$PORT" >>$OBJ/sshd_proxy
53 53
54start_sshd 54start_sshd
55 55
diff --git a/regress/connect-uri.sh b/regress/connect-uri.sh
new file mode 100644
index 000000000..f13f15e66
--- /dev/null
+++ b/regress/connect-uri.sh
@@ -0,0 +1,29 @@
1# $OpenBSD: connect-uri.sh,v 1.1 2017/10/24 19:33:32 millert Exp $
2# Placed in the Public Domain.
3
4tid="uri connect"
5
6# Remove Port and User from ssh_config, we want to rely on the URI
7cp $OBJ/ssh_config $OBJ/ssh_config.orig
8egrep -v '^ +(Port|User) +.*$' $OBJ/ssh_config.orig > $OBJ/ssh_config
9
10start_sshd
11
12verbose "$tid: no trailing slash"
13${SSH} -F $OBJ/ssh_config "ssh://${USER}@somehost:${PORT}" true
14if [ $? -ne 0 ]; then
15 fail "ssh connection failed"
16fi
17
18verbose "$tid: trailing slash"
19${SSH} -F $OBJ/ssh_config "ssh://${USER}@somehost:${PORT}/" true
20if [ $? -ne 0 ]; then
21 fail "ssh connection failed"
22fi
23
24verbose "$tid: with path name"
25${SSH} -F $OBJ/ssh_config "ssh://${USER}@somehost:${PORT}/${DATA}" true \
26 > /dev/null 2>&1
27if [ $? -eq 0 ]; then
28 fail "ssh connection succeeded, expected failure"
29fi
diff --git a/regress/forward-control.sh b/regress/forward-control.sh
index 2e9dbb53a..93d05cf63 100644
--- a/regress/forward-control.sh
+++ b/regress/forward-control.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: forward-control.sh,v 1.4 2017/04/30 23:34:55 djm Exp $ 1# $OpenBSD: forward-control.sh,v 1.5 2018/03/02 02:51:55 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="sshd control of local and remote forwarding" 4tid="sshd control of local and remote forwarding"
@@ -151,6 +151,33 @@ all_tests() {
151 > ${OBJ}/sshd_proxy 151 > ${OBJ}/sshd_proxy
152 check_lfwd $_permit_lfwd "$_prefix, permitopen" 152 check_lfwd $_permit_lfwd "$_prefix, permitopen"
153 check_rfwd $_permit_rfwd "$_prefix, permitopen" 153 check_rfwd $_permit_rfwd "$_prefix, permitopen"
154 # Check port-forwarding flags in authorized_keys.
155 # These two should refuse all.
156 sed "s/^/no-port-forwarding /" \
157 < ${OBJ}/authorized_keys_${USER}.bak \
158 > ${OBJ}/authorized_keys_${USER} || fatal "sed 3 fail"
159 ( cat ${OBJ}/sshd_proxy.bak ;
160 echo "AllowTcpForwarding $_tcpfwd" ) \
161 > ${OBJ}/sshd_proxy
162 check_lfwd N "$_prefix, no-port-forwarding"
163 check_rfwd N "$_prefix, no-port-forwarding"
164 sed "s/^/restrict /" \
165 < ${OBJ}/authorized_keys_${USER}.bak \
166 > ${OBJ}/authorized_keys_${USER} || fatal "sed 4 fail"
167 ( cat ${OBJ}/sshd_proxy.bak ;
168 echo "AllowTcpForwarding $_tcpfwd" ) \
169 > ${OBJ}/sshd_proxy
170 check_lfwd N "$_prefix, restrict"
171 check_rfwd N "$_prefix, restrict"
172 # This should pass the same cases as _nopermit*
173 sed "s/^/restrict,port-forwarding /" \
174 < ${OBJ}/authorized_keys_${USER}.bak \
175 > ${OBJ}/authorized_keys_${USER} || fatal "sed 5 fail"
176 ( cat ${OBJ}/sshd_proxy.bak ;
177 echo "AllowTcpForwarding $_tcpfwd" ) \
178 > ${OBJ}/sshd_proxy
179 check_lfwd $_plain_lfwd "$_prefix, restrict,port-forwarding"
180 check_rfwd $_plain_rfwd "$_prefix, restrict,port-forwarding"
154} 181}
155 182
156# no-permitopen mismatch-permitopen match-permitopen 183# no-permitopen mismatch-permitopen match-permitopen
diff --git a/regress/key-options.sh b/regress/key-options.sh
index 2adee6833..d680737c1 100644
--- a/regress/key-options.sh
+++ b/regress/key-options.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: key-options.sh,v 1.4 2017/04/30 23:34:55 djm Exp $ 1# $OpenBSD: key-options.sh,v 1.8 2018/03/14 05:35:40 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="key options" 4tid="key options"
@@ -21,12 +21,46 @@ for c in 'command="echo bar"' 'no-pty,command="echo bar"'; do
21done 21done
22 22
23# Test no-pty 23# Test no-pty
24sed 's/.*/no-pty &/' $origkeys >$authkeys 24expect_pty_succeed() {
25verbose "key option proto no-pty" 25 which=$1
26r=`${SSH} -q -F $OBJ/ssh_proxy somehost tty` 26 opts=$2
27if [ -f "$r" ]; then 27 rm -f $OBJ/data
28 fail "key option failed no-pty (pty $r)" 28 sed "s/.*/$opts &/" $origkeys >$authkeys
29fi 29 verbose "key option pty $which"
30 ${SSH} -ttq -F $OBJ/ssh_proxy somehost "tty > $OBJ/data; exit 0"
31 if [ $? -ne 0 ] ; then
32 fail "key option failed $which"
33 else
34 r=`cat $OBJ/data`
35 case "$r" in
36 /dev/*) ;;
37 *) fail "key option failed $which (pty $r)" ;;
38 esac
39 fi
40}
41expect_pty_fail() {
42 which=$1
43 opts=$2
44 rm -f $OBJ/data
45 sed "s/.*/$opts &/" $origkeys >$authkeys
46 verbose "key option pty $which"
47 ${SSH} -ttq -F $OBJ/ssh_proxy somehost "tty > $OBJ/data; exit 0"
48 if [ $? -eq 0 ]; then
49 r=`cat $OBJ/data`
50 if [ -e "$r" ]; then
51 fail "key option failed $which (pty $r)"
52 fi
53 case "$r" in
54 /dev/*) fail "key option failed $which (pty $r)" ;;
55 *) ;;
56 esac
57 fi
58}
59# First ensure that we can allocate a pty by default.
60expect_pty_succeed "default" ""
61expect_pty_fail "no-pty" "no-pty"
62expect_pty_fail "restrict" "restrict"
63expect_pty_succeed "restrict,pty" "restrict,pty"
30 64
31# Test environment= 65# Test environment=
32echo 'PermitUserEnvironment yes' >> $OBJ/sshd_proxy 66echo 'PermitUserEnvironment yes' >> $OBJ/sshd_proxy
@@ -60,4 +94,22 @@ for f in 127.0.0.1 '127.0.0.0\/8'; do
60 fi 94 fi
61done 95done
62 96
63rm -f "$origkeys" 97check_valid_before() {
98 which=$1
99 opts=$2
100 expect=$3
101 sed "s/.*/$opts &/" $origkeys >$authkeys
102 verbose "key option expiry-time $which"
103 ${SSH} -q -F $OBJ/ssh_proxy somehost true
104 r=$?
105 case "$expect" in
106 fail) test $r -eq 0 && fail "key option succeeded $which" ;;
107 pass) test $r -ne 0 && fail "key option failed $which" ;;
108 *) fatal "unknown expectation $expect" ;;
109 esac
110}
111check_valid_before "default" "" "pass"
112check_valid_before "invalid" 'expiry-time="INVALID"' "fail"
113check_valid_before "expired" 'expiry-time="19990101"' "fail"
114check_valid_before "valid" 'expiry-time="20380101"' "pass"
115
diff --git a/regress/keys-command.sh b/regress/keys-command.sh
index 9c9ada7c7..4029e2c78 100644
--- a/regress/keys-command.sh
+++ b/regress/keys-command.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: keys-command.sh,v 1.3 2015/05/21 06:40:02 djm Exp $ 1# $OpenBSD: keys-command.sh,v 1.4 2016/09/26 21:34:38 bluhm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="authorized keys from command" 4tid="authorized keys from command"
diff --git a/regress/keytype.sh b/regress/keytype.sh
index 88b022de4..f78a2c171 100644
--- a/regress/keytype.sh
+++ b/regress/keytype.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: keytype.sh,v 1.5 2017/03/20 22:08:06 djm Exp $ 1# $OpenBSD: keytype.sh,v 1.7 2018/03/12 00:54:04 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="login with different key types" 4tid="login with different key types"
@@ -17,7 +17,7 @@ for i in `$SSH -Q key`; do
17 esac 17 esac
18done 18done
19 19
20for kt in $ktypes; do 20for kt in $ktypes; do
21 rm -f $OBJ/key.$kt 21 rm -f $OBJ/key.$kt
22 bits=`echo ${kt} | awk -F- '{print $2}'` 22 bits=`echo ${kt} | awk -F- '{print $2}'`
23 type=`echo ${kt} | awk -F- '{print $1}'` 23 type=`echo ${kt} | awk -F- '{print $1}'`
@@ -27,28 +27,28 @@ for kt in $ktypes; do
27done 27done
28 28
29tries="1 2 3" 29tries="1 2 3"
30for ut in $ktypes; do 30for ut in $ktypes; do
31 htypes=$ut 31 htypes=$ut
32 #htypes=$ktypes 32 #htypes=$ktypes
33 for ht in $htypes; do 33 for ht in $htypes; do
34 case $ht in 34 case $ht in
35 dsa-1024) t=ssh-dss;; 35 dsa-1024) t=ssh-dss;;
36 ecdsa-256) t=ecdsa-sha2-nistp256;; 36 ecdsa-256) t=ecdsa-sha2-nistp256;;
37 ecdsa-384) t=ecdsa-sha2-nistp384;; 37 ecdsa-384) t=ecdsa-sha2-nistp384;;
38 ecdsa-521) t=ecdsa-sha2-nistp521;; 38 ecdsa-521) t=ecdsa-sha2-nistp521;;
39 ed25519-512) t=ssh-ed25519;; 39 ed25519-512) t=ssh-ed25519;;
40 rsa-*) t=ssh-rsa;; 40 rsa-*) t=rsa-sha2-512,rsa-sha2-256,ssh-rsa;;
41 esac 41 esac
42 trace "ssh connect, userkey $ut, hostkey $ht" 42 trace "ssh connect, userkey $ut, hostkey $ht"
43 ( 43 (
44 grep -v HostKey $OBJ/sshd_proxy_bak 44 grep -v HostKey $OBJ/sshd_proxy_bak
45 echo HostKey $OBJ/key.$ht 45 echo HostKey $OBJ/key.$ht
46 echo PubkeyAcceptedKeyTypes $t 46 echo PubkeyAcceptedKeyTypes $t
47 echo HostKeyAlgorithms $t 47 echo HostKeyAlgorithms $t
48 ) > $OBJ/sshd_proxy 48 ) > $OBJ/sshd_proxy
49 ( 49 (
50 grep -v IdentityFile $OBJ/ssh_proxy_bak 50 grep -v IdentityFile $OBJ/ssh_proxy_bak
51 echo IdentityFile $OBJ/key.$ut 51 echo IdentityFile $OBJ/key.$ut
52 echo PubkeyAcceptedKeyTypes $t 52 echo PubkeyAcceptedKeyTypes $t
53 echo HostKeyAlgorithms $t 53 echo HostKeyAlgorithms $t
54 ) > $OBJ/ssh_proxy 54 ) > $OBJ/ssh_proxy
diff --git a/regress/limit-keytype.sh b/regress/limit-keytype.sh
index c0cf2fed6..04f11977e 100644
--- a/regress/limit-keytype.sh
+++ b/regress/limit-keytype.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: limit-keytype.sh,v 1.4 2015/10/29 08:05:17 djm Exp $ 1# $OpenBSD: limit-keytype.sh,v 1.5 2018/03/12 00:52:57 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="restrict pubkey type" 4tid="restrict pubkey type"
@@ -60,7 +60,8 @@ ${SSH} $opts -i $OBJ/user_key2 proxy true || fatal "key2 failed"
60 60
61# Allow plain Ed25519 and RSA. The certificate should fail. 61# Allow plain Ed25519 and RSA. The certificate should fail.
62verbose "allow rsa,ed25519" 62verbose "allow rsa,ed25519"
63prepare_config "PubkeyAcceptedKeyTypes ssh-rsa,ssh-ed25519" 63prepare_config \
64 "PubkeyAcceptedKeyTypes rsa-sha2-256,rsa-sha2-512,ssh-rsa,ssh-ed25519"
64${SSH} $certopts proxy true && fatal "cert succeeded" 65${SSH} $certopts proxy true && fatal "cert succeeded"
65${SSH} $opts -i $OBJ/user_key1 proxy true || fatal "key1 failed" 66${SSH} $opts -i $OBJ/user_key1 proxy true || fatal "key1 failed"
66${SSH} $opts -i $OBJ/user_key2 proxy true || fatal "key2 failed" 67${SSH} $opts -i $OBJ/user_key2 proxy true || fatal "key2 failed"
@@ -74,14 +75,14 @@ ${SSH} $opts -i $OBJ/user_key2 proxy true && fatal "key2 succeeded"
74 75
75# Allow all certs. Plain keys should fail. 76# Allow all certs. Plain keys should fail.
76verbose "allow cert only" 77verbose "allow cert only"
77prepare_config "PubkeyAcceptedKeyTypes ssh-*-cert-v01@openssh.com" 78prepare_config "PubkeyAcceptedKeyTypes *-cert-v01@openssh.com"
78${SSH} $certopts proxy true || fatal "cert failed" 79${SSH} $certopts proxy true || fatal "cert failed"
79${SSH} $opts -i $OBJ/user_key1 proxy true && fatal "key1 succeeded" 80${SSH} $opts -i $OBJ/user_key1 proxy true && fatal "key1 succeeded"
80${SSH} $opts -i $OBJ/user_key2 proxy true && fatal "key2 succeeded" 81${SSH} $opts -i $OBJ/user_key2 proxy true && fatal "key2 succeeded"
81 82
82# Allow RSA in main config, Ed25519 for non-existent user. 83# Allow RSA in main config, Ed25519 for non-existent user.
83verbose "match w/ no match" 84verbose "match w/ no match"
84prepare_config "PubkeyAcceptedKeyTypes ssh-rsa" \ 85prepare_config "PubkeyAcceptedKeyTypes rsa-sha2-256,rsa-sha2-512,ssh-rsa" \
85 "Match user x$USER" "PubkeyAcceptedKeyTypes +ssh-ed25519" 86 "Match user x$USER" "PubkeyAcceptedKeyTypes +ssh-ed25519"
86${SSH} $certopts proxy true && fatal "cert succeeded" 87${SSH} $certopts proxy true && fatal "cert succeeded"
87${SSH} $opts -i $OBJ/user_key1 proxy true && fatal "key1 succeeded" 88${SSH} $opts -i $OBJ/user_key1 proxy true && fatal "key1 succeeded"
diff --git a/regress/misc/fuzz-harness/sig_fuzz.cc b/regress/misc/fuzz-harness/sig_fuzz.cc
index 0e535b49a..dd1fda091 100644
--- a/regress/misc/fuzz-harness/sig_fuzz.cc
+++ b/regress/misc/fuzz-harness/sig_fuzz.cc
@@ -37,13 +37,13 @@ int LLVMFuzzerTestOneInput(const uint8_t* sig, size_t slen)
37 static const size_t dlen = strlen(data); 37 static const size_t dlen = strlen(data);
38 38
39#ifdef WITH_OPENSSL 39#ifdef WITH_OPENSSL
40 sshkey_verify(rsa, sig, slen, (const u_char *)data, dlen, 0); 40 sshkey_verify(rsa, sig, slen, (const u_char *)data, dlen, NULL, 0);
41 sshkey_verify(dsa, sig, slen, (const u_char *)data, dlen, 0); 41 sshkey_verify(dsa, sig, slen, (const u_char *)data, dlen, NULL, 0);
42 sshkey_verify(ecdsa256, sig, slen, (const u_char *)data, dlen, 0); 42 sshkey_verify(ecdsa256, sig, slen, (const u_char *)data, dlen, NULL, 0);
43 sshkey_verify(ecdsa384, sig, slen, (const u_char *)data, dlen, 0); 43 sshkey_verify(ecdsa384, sig, slen, (const u_char *)data, dlen, NULL, 0);
44 sshkey_verify(ecdsa521, sig, slen, (const u_char *)data, dlen, 0); 44 sshkey_verify(ecdsa521, sig, slen, (const u_char *)data, dlen, NULL, 0);
45#endif 45#endif
46 sshkey_verify(ed25519, sig, slen, (const u_char *)data, dlen, 0); 46 sshkey_verify(ed25519, sig, slen, (const u_char *)data, dlen, NULL, 0);
47 return 0; 47 return 0;
48} 48}
49 49
diff --git a/regress/misc/kexfuzz/Makefile b/regress/misc/kexfuzz/Makefile
index d0aca8dfe..a7bb6b70d 100644
--- a/regress/misc/kexfuzz/Makefile
+++ b/regress/misc/kexfuzz/Makefile
@@ -1,4 +1,4 @@
1# $OpenBSD: Makefile,v 1.2 2017/04/17 11:02:31 jsg Exp $ 1# $OpenBSD: Makefile,v 1.3 2017/12/21 05:46:35 djm Exp $
2 2
3.include <bsd.own.mk> 3.include <bsd.own.mk>
4.include <bsd.obj.mk> 4.include <bsd.obj.mk>
@@ -9,6 +9,25 @@ OPENSSL?= yes
9 9
10PROG= kexfuzz 10PROG= kexfuzz
11SRCS= kexfuzz.c 11SRCS= kexfuzz.c
12
13SSHREL=../../../../../usr.bin/ssh
14.PATH: ${.CURDIR}/${SSHREL}
15# From usr.bin/ssh
16SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c
17SRCS+=atomicio.c sshkey.c authfile.c cipher.c log.c ssh-rsa.c ssh-dss.c
18SRCS+=ssh-ecdsa.c ssh-ed25519.c mac.c umac.c umac128.c hmac.c misc.c
19SRCS+=ssherr.c uidswap.c cleanup.c xmalloc.c match.c krl.c fatal.c
20SRCS+=addrmatch.c bitmap.c packet.c dispatch.c canohost.c ssh_api.c
21SRCS+=kex.c kexc25519.c kexc25519c.c kexc25519s.c kexdh.c kexdhc.c kexdhs.c
22SRCS+=kexecdh.c kexecdhc.c kexecdhs.c kexgex.c kexgexc.c kexgexs.c
23SRCS+=dh.c compat.c
24SRCS+=ed25519.c hash.c ge25519.c fe25519.c sc25519.c verify.c
25SRCS+=cipher-chachapoly.c chacha.c poly1305.c
26SRCS+=smult_curve25519_ref.c
27
28SRCS+=digest-openssl.c
29#SRCS+=digest-libc.c
30
12NOMAN= 1 31NOMAN= 1
13 32
14.if (${OPENSSL:L} == "yes") 33.if (${OPENSSL:L} == "yes")
@@ -49,23 +68,14 @@ CDIAGFLAGS+= -Wswitch
49CDIAGFLAGS+= -Wtrigraphs 68CDIAGFLAGS+= -Wtrigraphs
50CDIAGFLAGS+= -Wuninitialized 69CDIAGFLAGS+= -Wuninitialized
51CDIAGFLAGS+= -Wunused 70CDIAGFLAGS+= -Wunused
71CDIAGFLAGS+= -Wno-unused-parameter
52.if ${COMPILER_VERSION:L} != "gcc3" 72.if ${COMPILER_VERSION:L} != "gcc3"
53CDIAGFLAGS+= -Wpointer-sign
54CDIAGFLAGS+= -Wold-style-definition 73CDIAGFLAGS+= -Wold-style-definition
55.endif 74.endif
56 75
57SSHREL=../../../../../usr.bin/ssh
58 76
59CFLAGS+=-I${.CURDIR}/${SSHREL} 77CFLAGS+=-I${.CURDIR}/${SSHREL}
60 78
61.if exists(${.CURDIR}/${SSHREL}/lib/${__objdir})
62LDADD+=-L${.CURDIR}/${SSHREL}/lib/${__objdir} -lssh
63DPADD+=${.CURDIR}/${SSHREL}/lib/${__objdir}/libssh.a
64.else
65LDADD+=-L${.CURDIR}/${SSHREL}/lib -lssh
66DPADD+=${.CURDIR}/${SSHREL}/lib/libssh.a
67.endif
68
69LDADD+= -lutil -lz 79LDADD+= -lutil -lz
70DPADD+= ${LIBUTIL} ${LIBZ} 80DPADD+= ${LIBUTIL} ${LIBZ}
71 81
diff --git a/regress/misc/kexfuzz/README b/regress/misc/kexfuzz/README
index abd7b50ee..504c26f3b 100644
--- a/regress/misc/kexfuzz/README
+++ b/regress/misc/kexfuzz/README
@@ -30,3 +30,5 @@ Limitations: kexfuzz can't change the ordering of packets at
30present. It is limited to replacing individual packets with 30present. It is limited to replacing individual packets with
31fuzzed variants with the same type. It really should allow 31fuzzed variants with the same type. It really should allow
32insertion, deletion on replacement of packets too. 32insertion, deletion on replacement of packets too.
33
34$OpenBSD: README,v 1.3 2017/10/20 02:13:41 djm Exp $
diff --git a/regress/modpipe.c b/regress/modpipe.c
index 5f4824b51..5f4824b51 100755..100644
--- a/regress/modpipe.c
+++ b/regress/modpipe.c
diff --git a/regress/netcat.c b/regress/netcat.c
index 98a08b1ec..56bd09de5 100644
--- a/regress/netcat.c
+++ b/regress/netcat.c
@@ -738,7 +738,12 @@ local_listen(char *host, char *port, struct addrinfo hints)
738#ifdef SO_REUSEPORT 738#ifdef SO_REUSEPORT
739 ret = setsockopt(s, SOL_SOCKET, SO_REUSEPORT, &x, sizeof(x)); 739 ret = setsockopt(s, SOL_SOCKET, SO_REUSEPORT, &x, sizeof(x));
740 if (ret == -1) 740 if (ret == -1)
741 err(1, "setsockopt"); 741 err(1, "setsockopt SO_REUSEPORT");
742#endif
743#ifdef SO_REUSEADDR
744 ret = setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &x, sizeof(x));
745 if (ret == -1)
746 err(1, "setsockopt SO_REUSEADDR");
742#endif 747#endif
743 set_common_sockopts(s); 748 set_common_sockopts(s);
744 749
diff --git a/regress/proxy-connect.sh b/regress/proxy-connect.sh
index f1b9d9f76..39bbd3c96 100644
--- a/regress/proxy-connect.sh
+++ b/regress/proxy-connect.sh
@@ -1,25 +1,19 @@
1# $OpenBSD: proxy-connect.sh,v 1.10 2017/04/30 23:34:55 djm Exp $ 1# $OpenBSD: proxy-connect.sh,v 1.11 2017/09/26 22:39:25 dtucker Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="proxy connect" 4tid="proxy connect"
5 5
6mv $OBJ/sshd_proxy $OBJ/sshd_proxy.orig 6for c in no yes; do
7 7 verbose "plain username comp=$c"
8for ps in no yes; do 8 opts="-oCompression=$c -F $OBJ/ssh_proxy"
9 cp $OBJ/sshd_proxy.orig $OBJ/sshd_proxy 9 SSH_CONNECTION=`${SSH} $opts 999.999.999.999 'echo $SSH_CONNECTION'`
10 echo "UsePrivilegeSeparation $ps" >> $OBJ/sshd_proxy 10 if [ $? -ne 0 ]; then
11 for c in no yes; do 11 fail "ssh proxyconnect comp=$c failed"
12 verbose "plain username privsep=$ps comp=$c" 12 fi
13 opts="-oCompression=$c -F $OBJ/ssh_proxy" 13 if [ "$SSH_CONNECTION" != "UNKNOWN 65535 UNKNOWN 65535" ]; then
14 SSH_CONNECTION=`${SSH} $opts 999.999.999.999 'echo $SSH_CONNECTION'` 14 fail "bad SSH_CONNECTION comp=$c: " \
15 if [ $? -ne 0 ]; then 15 "$SSH_CONNECTION"
16 fail "ssh proxyconnect privsep=$ps comp=$c failed" 16 fi
17 fi
18 if [ "$SSH_CONNECTION" != "UNKNOWN 65535 UNKNOWN 65535" ]; then
19 fail "bad SSH_CONNECTION privsep=$ps comp=$c: " \
20 "$SSH_CONNECTION"
21 fi
22 done
23done 17done
24 18
25verbose "username with style" 19verbose "username with style"
diff --git a/regress/putty-ciphers.sh b/regress/putty-ciphers.sh
index 419daabba..191a2bda8 100644
--- a/regress/putty-ciphers.sh
+++ b/regress/putty-ciphers.sh
@@ -15,7 +15,7 @@ for c in aes 3des aes128-ctr aes192-ctr aes256-ctr ; do
15 echo "Cipher=$c" >> ${OBJ}/.putty/sessions/cipher_$c 15 echo "Cipher=$c" >> ${OBJ}/.putty/sessions/cipher_$c
16 16
17 rm -f ${COPY} 17 rm -f ${COPY}
18 env HOME=$PWD ${PLINK} -load cipher_$c -batch -i putty.rsa2 \ 18 env HOME=$PWD ${PLINK} -load cipher_$c -batch -i ${OBJ}/putty.rsa2 \
19 cat ${DATA} > ${COPY} 19 cat ${DATA} > ${COPY}
20 if [ $? -ne 0 ]; then 20 if [ $? -ne 0 ]; then
21 fail "ssh cat $DATA failed" 21 fail "ssh cat $DATA failed"
diff --git a/regress/putty-kex.sh b/regress/putty-kex.sh
index 9d3c6a9f0..71c09701b 100644
--- a/regress/putty-kex.sh
+++ b/regress/putty-kex.sh
@@ -14,7 +14,7 @@ for k in dh-gex-sha1 dh-group1-sha1 dh-group14-sha1 ; do
14 ${OBJ}/.putty/sessions/kex_$k 14 ${OBJ}/.putty/sessions/kex_$k
15 echo "KEX=$k" >> ${OBJ}/.putty/sessions/kex_$k 15 echo "KEX=$k" >> ${OBJ}/.putty/sessions/kex_$k
16 16
17 env HOME=$PWD ${PLINK} -load kex_$k -batch -i putty.rsa2 true 17 env HOME=$PWD ${PLINK} -load kex_$k -batch -i ${OBJ}/putty.rsa2 true
18 if [ $? -ne 0 ]; then 18 if [ $? -ne 0 ]; then
19 fail "KEX $k failed" 19 fail "KEX $k failed"
20 fi 20 fi
diff --git a/regress/putty-transfer.sh b/regress/putty-transfer.sh
index 57e465404..4928d4533 100644
--- a/regress/putty-transfer.sh
+++ b/regress/putty-transfer.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: putty-transfer.sh,v 1.5 2017/04/30 23:34:55 djm Exp $ 1# $OpenBSD: putty-transfer.sh,v 1.6 2018/02/23 03:03:00 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="putty transfer data" 4tid="putty transfer data"
@@ -15,7 +15,7 @@ for c in 0 1 ; do
15 ${OBJ}/.putty/sessions/compression_$c 15 ${OBJ}/.putty/sessions/compression_$c
16 echo "Compression=$c" >> ${OBJ}/.putty/sessions/kex_$k 16 echo "Compression=$c" >> ${OBJ}/.putty/sessions/kex_$k
17 env HOME=$PWD ${PLINK} -load compression_$c -batch \ 17 env HOME=$PWD ${PLINK} -load compression_$c -batch \
18 -i putty.rsa2 cat ${DATA} > ${COPY} 18 -i ${OBJ}/putty.rsa2 cat ${DATA} > ${COPY}
19 if [ $? -ne 0 ]; then 19 if [ $? -ne 0 ]; then
20 fail "ssh cat $DATA failed" 20 fail "ssh cat $DATA failed"
21 fi 21 fi
@@ -26,7 +26,7 @@ for c in 0 1 ; do
26 rm -f ${COPY} 26 rm -f ${COPY}
27 dd if=$DATA obs=${s} 2> /dev/null | \ 27 dd if=$DATA obs=${s} 2> /dev/null | \
28 env HOME=$PWD ${PLINK} -load compression_$c \ 28 env HOME=$PWD ${PLINK} -load compression_$c \
29 -batch -i putty.rsa2 \ 29 -batch -i ${OBJ}/putty.rsa2 \
30 "cat > ${COPY}" 30 "cat > ${COPY}"
31 if [ $? -ne 0 ]; then 31 if [ $? -ne 0 ]; then
32 fail "ssh cat $DATA failed" 32 fail "ssh cat $DATA failed"
diff --git a/regress/scp-uri.sh b/regress/scp-uri.sh
new file mode 100644
index 000000000..c03d8bbe0
--- /dev/null
+++ b/regress/scp-uri.sh
@@ -0,0 +1,70 @@
1# $OpenBSD: scp-uri.sh,v 1.2 2017/12/11 11:41:56 dtucker Exp $
2# Placed in the Public Domain.
3
4tid="scp-uri"
5
6#set -x
7
8COPY2=${OBJ}/copy2
9DIR=${COPY}.dd
10DIR2=${COPY}.dd2
11
12SRC=`dirname ${SCRIPT}`
13cp ${SRC}/scp-ssh-wrapper.sh ${OBJ}/scp-ssh-wrapper.scp
14chmod 755 ${OBJ}/scp-ssh-wrapper.scp
15scpopts="-q -S ${OBJ}/scp-ssh-wrapper.scp"
16export SCP # used in scp-ssh-wrapper.scp
17
18scpclean() {
19 rm -rf ${COPY} ${COPY2} ${DIR} ${DIR2}
20 mkdir ${DIR} ${DIR2}
21}
22
23# Remove Port and User from ssh_config, we want to rely on the URI
24cp $OBJ/ssh_config $OBJ/ssh_config.orig
25egrep -v '^ +(Port|User) +.*$' $OBJ/ssh_config.orig > $OBJ/ssh_config
26
27verbose "$tid: simple copy local file to remote file"
28scpclean
29$SCP $scpopts ${DATA} "scp://${USER}@somehost:${PORT}/${COPY}" || fail "copy failed"
30cmp ${DATA} ${COPY} || fail "corrupted copy"
31
32verbose "$tid: simple copy remote file to local file"
33scpclean
34$SCP $scpopts "scp://${USER}@somehost:${PORT}/${DATA}" ${COPY} || fail "copy failed"
35cmp ${DATA} ${COPY} || fail "corrupted copy"
36
37verbose "$tid: simple copy local file to remote dir"
38scpclean
39cp ${DATA} ${COPY}
40$SCP $scpopts ${COPY} "scp://${USER}@somehost:${PORT}/${DIR}" || fail "copy failed"
41cmp ${COPY} ${DIR}/copy || fail "corrupted copy"
42
43verbose "$tid: simple copy remote file to local dir"
44scpclean
45cp ${DATA} ${COPY}
46$SCP $scpopts "scp://${USER}@somehost:${PORT}/${COPY}" ${DIR} || fail "copy failed"
47cmp ${COPY} ${DIR}/copy || fail "corrupted copy"
48
49verbose "$tid: recursive local dir to remote dir"
50scpclean
51rm -rf ${DIR2}
52cp ${DATA} ${DIR}/copy
53$SCP $scpopts -r ${DIR} "scp://${USER}@somehost:${PORT}/${DIR2}" || fail "copy failed"
54for i in $(cd ${DIR} && echo *); do
55 cmp ${DIR}/$i ${DIR2}/$i || fail "corrupted copy"
56done
57
58verbose "$tid: recursive remote dir to local dir"
59scpclean
60rm -rf ${DIR2}
61cp ${DATA} ${DIR}/copy
62$SCP $scpopts -r "scp://${USER}@somehost:${PORT}/${DIR}" ${DIR2} || fail "copy failed"
63for i in $(cd ${DIR} && echo *); do
64 cmp ${DIR}/$i ${DIR2}/$i || fail "corrupted copy"
65done
66
67# TODO: scp -3
68
69scpclean
70rm -f ${OBJ}/scp-ssh-wrapper.exe
diff --git a/regress/sftp-chroot.sh b/regress/sftp-chroot.sh
index 4ea2fce85..ba5bd1efb 100644
--- a/regress/sftp-chroot.sh
+++ b/regress/sftp-chroot.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: sftp-chroot.sh,v 1.5 2016/09/26 21:34:38 bluhm Exp $ 1# $OpenBSD: sftp-chroot.sh,v 1.6 2018/02/09 03:42:57 dtucker Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="sftp in chroot" 4tid="sftp in chroot"
@@ -8,8 +8,9 @@ FILENAME=testdata_${USER}
8PRIVDATA=${CHROOT}/${FILENAME} 8PRIVDATA=${CHROOT}/${FILENAME}
9 9
10if [ -z "$SUDO" -a ! -w /var/run ]; then 10if [ -z "$SUDO" -a ! -w /var/run ]; then
11 echo "skipped: need SUDO to create file in /var/run, test won't work without" 11 echo "need SUDO to create file in /var/run, test won't work without"
12 exit 0 12 echo SKIPPED
13 exit 0
13fi 14fi
14 15
15if ! $OBJ/check-perm -m chroot "$CHROOT" ; then 16if ! $OBJ/check-perm -m chroot "$CHROOT" ; then
diff --git a/regress/sftp-uri.sh b/regress/sftp-uri.sh
new file mode 100644
index 000000000..7be104dfb
--- /dev/null
+++ b/regress/sftp-uri.sh
@@ -0,0 +1,63 @@
1# $OpenBSD: sftp-uri.sh,v 1.1 2017/10/24 19:33:32 millert Exp $
2# Placed in the Public Domain.
3
4tid="sftp-uri"
5
6#set -x
7
8COPY2=${OBJ}/copy2
9DIR=${COPY}.dd
10DIR2=${COPY}.dd2
11SRC=`dirname ${SCRIPT}`
12
13sftpclean() {
14 rm -rf ${COPY} ${COPY2} ${DIR} ${DIR2}
15 mkdir ${DIR} ${DIR2}
16}
17
18start_sshd -oForceCommand="internal-sftp -d /"
19
20# Remove Port and User from ssh_config, we want to rely on the URI
21cp $OBJ/ssh_config $OBJ/ssh_config.orig
22egrep -v '^ +(Port|User) +.*$' $OBJ/ssh_config.orig > $OBJ/ssh_config
23
24verbose "$tid: non-interactive fetch to local file"
25sftpclean
26${SFTP} -q -S "$SSH" -F $OBJ/ssh_config "sftp://${USER}@somehost:${PORT}/${DATA}" ${COPY} || fail "copy failed"
27cmp ${DATA} ${COPY} || fail "corrupted copy"
28
29verbose "$tid: non-interactive fetch to local dir"
30sftpclean
31cp ${DATA} ${COPY}
32${SFTP} -q -S "$SSH" -F $OBJ/ssh_config "sftp://${USER}@somehost:${PORT}/${COPY}" ${DIR} || fail "copy failed"
33cmp ${COPY} ${DIR}/copy || fail "corrupted copy"
34
35verbose "$tid: put to remote directory (trailing slash)"
36sftpclean
37${SFTP} -q -S "$SSH" -F $OBJ/ssh_config -b - \
38 "sftp://${USER}@somehost:${PORT}/${DIR}/" > /dev/null 2>&1 << EOF
39 version
40 put ${DATA} copy
41EOF
42r=$?
43if [ $r -ne 0 ]; then
44 fail "sftp failed with $r"
45else
46 cmp ${DATA} ${DIR}/copy || fail "corrupted copy"
47fi
48
49verbose "$tid: put to remote directory (no slash)"
50sftpclean
51${SFTP} -q -S "$SSH" -F $OBJ/ssh_config -b - \
52 "sftp://${USER}@somehost:${PORT}/${DIR}" > /dev/null 2>&1 << EOF
53 version
54 put ${DATA} copy
55EOF
56r=$?
57if [ $r -ne 0 ]; then
58 fail "sftp failed with $r"
59else
60 cmp ${DATA} ${DIR}/copy || fail "corrupted copy"
61fi
62
63sftpclean
diff --git a/regress/sftp.sh b/regress/sftp.sh
index b8e9f7527..a5c88f584 100644
--- a/regress/sftp.sh
+++ b/regress/sftp.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: sftp.sh,v 1.5 2013/05/17 10:28:11 dtucker Exp $ 1# $OpenBSD: sftp.sh,v 1.6 2017/10/30 21:59:43 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="basic sftp put/get" 4tid="basic sftp put/get"
@@ -22,11 +22,11 @@ for B in ${BUFFERSIZE}; do
22 r=$? 22 r=$?
23 if [ $r -ne 0 ]; then 23 if [ $r -ne 0 ]; then
24 fail "sftp failed with $r" 24 fail "sftp failed with $r"
25 else 25 else
26 cmp $DATA ${COPY}.1 || fail "corrupted copy after get" 26 cmp $DATA ${COPY}.1 || fail "corrupted copy after get"
27 cmp $DATA ${COPY}.2 || fail "corrupted copy after put" 27 cmp $DATA ${COPY}.2 || fail "corrupted copy after put"
28 fi 28 fi
29 done 29 done
30done 30done
31rm -f ${COPY}.1 ${COPY}.2 31rm -f ${COPY}.1 ${COPY}.2
32rm -f $SFTPCMDFILE 32rm -f $SFTPCMDFILE
diff --git a/regress/sshd-log-wrapper.sh b/regress/sshd-log-wrapper.sh
index c00934c78..29dc44aa0 100644
--- a/regress/sshd-log-wrapper.sh
+++ b/regress/sshd-log-wrapper.sh
@@ -1,5 +1,5 @@
1#!/bin/sh 1#!/bin/sh
2# $OpenBSD: sshd-log-wrapper.sh,v 1.3 2013/04/07 02:16:03 dtucker Exp $ 2# $OpenBSD: sshd-log-wrapper.sh,v 1.4 2016/11/25 02:56:49 dtucker Exp $
3# Placed in the Public Domain. 3# Placed in the Public Domain.
4# 4#
5# simple wrapper for sshd proxy mode to catch stderr output 5# simple wrapper for sshd proxy mode to catch stderr output
diff --git a/regress/test-exec.sh b/regress/test-exec.sh
index 68f010b70..b6169f157 100644
--- a/regress/test-exec.sh
+++ b/regress/test-exec.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: test-exec.sh,v 1.61 2017/07/28 10:32:08 dtucker Exp $ 1# $OpenBSD: test-exec.sh,v 1.62 2018/03/16 09:06:31 dtucker Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4#SUDO=sudo 4#SUDO=sudo
@@ -503,6 +503,7 @@ if test "$REGRESS_INTEROP_PUTTY" = "yes" ; then
503 # Add a PuTTY key to authorized_keys 503 # Add a PuTTY key to authorized_keys
504 rm -f ${OBJ}/putty.rsa2 504 rm -f ${OBJ}/putty.rsa2
505 if ! puttygen -t rsa -o ${OBJ}/putty.rsa2 \ 505 if ! puttygen -t rsa -o ${OBJ}/putty.rsa2 \
506 --random-device=/dev/urandom \
506 --new-passphrase /dev/null < /dev/null > /dev/null; then 507 --new-passphrase /dev/null < /dev/null > /dev/null; then
507 echo "Your installed version of PuTTY is too old to support --new-passphrase; trying without (may require manual interaction) ..." >&2 508 echo "Your installed version of PuTTY is too old to support --new-passphrase; trying without (may require manual interaction) ..." >&2
508 puttygen -t rsa -o ${OBJ}/putty.rsa2 < /dev/null > /dev/null 509 puttygen -t rsa -o ${OBJ}/putty.rsa2 < /dev/null > /dev/null
@@ -526,6 +527,9 @@ if test "$REGRESS_INTEROP_PUTTY" = "yes" ; then
526 echo "ProxyTelnetCommand=sh ${SRC}/sshd-log-wrapper.sh ${TEST_SSHD_LOGFILE} ${SSHD} -i -f $OBJ/sshd_proxy" >> ${OBJ}/.putty/sessions/localhost_proxy 527 echo "ProxyTelnetCommand=sh ${SRC}/sshd-log-wrapper.sh ${TEST_SSHD_LOGFILE} ${SSHD} -i -f $OBJ/sshd_proxy" >> ${OBJ}/.putty/sessions/localhost_proxy
527 echo "ProxyLocalhost=1" >> ${OBJ}/.putty/sessions/localhost_proxy 528 echo "ProxyLocalhost=1" >> ${OBJ}/.putty/sessions/localhost_proxy
528 529
530 PUTTYDIR=${OBJ}/.putty
531 export PUTTYDIR
532
529 REGRESS_INTEROP_PUTTY=yes 533 REGRESS_INTEROP_PUTTY=yes
530fi 534fi
531 535
diff --git a/regress/unittests/Makefile b/regress/unittests/Makefile
index e975f6ca4..e464b085a 100644
--- a/regress/unittests/Makefile
+++ b/regress/unittests/Makefile
@@ -1,6 +1,7 @@
1# $OpenBSD: Makefile,v 1.9 2017/03/14 01:20:29 dtucker Exp $ 1# $OpenBSD: Makefile,v 1.10 2018/03/03 03:16:17 djm Exp $
2 2
3REGRESS_FAIL_EARLY?= yes 3REGRESS_FAIL_EARLY?= yes
4SUBDIR= test_helper sshbuf sshkey bitmap kex hostkeys utf8 match conversion 4SUBDIR= test_helper sshbuf sshkey bitmap kex hostkeys utf8 match conversion
5SUBDIR+=authopt
5 6
6.include <bsd.subdir.mk> 7.include <bsd.subdir.mk>
diff --git a/regress/unittests/Makefile.inc b/regress/unittests/Makefile.inc
index 36d1ff42c..b509f4452 100644
--- a/regress/unittests/Makefile.inc
+++ b/regress/unittests/Makefile.inc
@@ -1,4 +1,4 @@
1# $OpenBSD: Makefile.inc,v 1.11 2017/04/30 23:33:48 djm Exp $ 1# $OpenBSD: Makefile.inc,v 1.12 2017/12/21 00:41:22 djm Exp $
2 2
3.include <bsd.own.mk> 3.include <bsd.own.mk>
4.include <bsd.obj.mk> 4.include <bsd.obj.mk>
@@ -30,8 +30,8 @@ CDIAGFLAGS+= -Wswitch
30CDIAGFLAGS+= -Wtrigraphs 30CDIAGFLAGS+= -Wtrigraphs
31CDIAGFLAGS+= -Wuninitialized 31CDIAGFLAGS+= -Wuninitialized
32CDIAGFLAGS+= -Wunused 32CDIAGFLAGS+= -Wunused
33CDIAGFLAGS+= -Wno-unused-parameter
33.if ${COMPILER_VERSION:L} != "gcc3" 34.if ${COMPILER_VERSION:L} != "gcc3"
34CDIAGFLAGS+= -Wpointer-sign
35CDIAGFLAGS+= -Wold-style-definition 35CDIAGFLAGS+= -Wold-style-definition
36.endif 36.endif
37 37
@@ -47,17 +47,7 @@ LDADD+=-L${.CURDIR}/../test_helper -ltest_helper
47DPADD+=${.CURDIR}/../test_helper/libtest_helper.a 47DPADD+=${.CURDIR}/../test_helper/libtest_helper.a
48.endif 48.endif
49 49
50.if exists(${.CURDIR}/${SSHREL}/lib/${__objdir}) 50.PATH: ${.CURDIR}/${SSHREL}
51LDADD+=-L${.CURDIR}/${SSHREL}/lib/${__objdir} -lssh
52LIBSSH=${.CURDIR}/${SSHREL}/lib/${__objdir}/libssh.a
53.else
54LDADD+=-L${.CURDIR}/${SSHREL}/lib -lssh
55LIBSSH=${.CURDIR}/${SSHREL}/lib/libssh.a
56.endif
57DPADD+=${LIBSSH}
58${PROG}: ${LIBSSH}
59${LIBSSH}:
60 cd ${.CURDIR}/${SSHREL} && ${MAKE} lib
61 51
62LDADD+= -lcrypto 52LDADD+= -lcrypto
63DPADD+= ${LIBCRYPTO} 53DPADD+= ${LIBCRYPTO}
diff --git a/regress/unittests/authopt/testdata/all_permit.cert b/regress/unittests/authopt/testdata/all_permit.cert
new file mode 100644
index 000000000..38ac57318
--- /dev/null
+++ b/regress/unittests/authopt/testdata/all_permit.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIOv/h7mJS1WkRHukSvqPwKDiNVrcib/VqBLpbHW6xjWCAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAAIIAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAADMAAAALc3NoLWVkMjU1MTkAAAAgKFWCzCzQTh9UkoHphbgwaa86Q16Kern0UjqOr7Q+Jk8AAABTAAAAC3NzaC1lZDI1NTE5AAAAQNe1XDN+J4Eb82TH5J5sYypcabocufjTFRfpU57K+csRP41Yo1FCSEWx95ilUuNvK9Iv3yFDOeVPzdqRqzWoHwE= user key
diff --git a/regress/unittests/authopt/testdata/bad_sourceaddr.cert b/regress/unittests/authopt/testdata/bad_sourceaddr.cert
new file mode 100644
index 000000000..9732745ac
--- /dev/null
+++ b/regress/unittests/authopt/testdata/bad_sourceaddr.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAILFEJyunlz9scYU3mwbOEJoSSkeO1z20uNBw13tEn+lJAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAHwAAAA5zb3VyY2UtYWRkcmVzcwAAAAkAAAAFeHh4eHgAAACCAAAAFXBlcm1pdC1YMTEtZm9yd2FyZGluZwAAAAAAAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAAFnBlcm1pdC1wb3J0LWZvcndhcmRpbmcAAAAAAAAACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1pdC11c2VyLXJjAAAAAAAAAAAAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIChVgsws0E4fVJKB6YW4MGmvOkNeinq59FI6jq+0PiZPAAAAUwAAAAtzc2gtZWQyNTUxOQAAAEA5xY/OEAJ3tgg8/KJqaBR5KMdYYRDiMJ6u4VKS9lQOV1HJQvDDvjj3F5k53BIqTJRVQx242YWs+B3C4db/uLgB user key
diff --git a/regress/unittests/authopt/testdata/force_command.cert b/regress/unittests/authopt/testdata/force_command.cert
new file mode 100644
index 000000000..f7af27e43
--- /dev/null
+++ b/regress/unittests/authopt/testdata/force_command.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIJkpCeqaVl6qnp7qa90KehAmHFecx3HW8HZQ22KEqeKBAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAHAAAAA1mb3JjZS1jb21tYW5kAAAABwAAAANmb28AAACCAAAAFXBlcm1pdC1YMTEtZm9yd2FyZGluZwAAAAAAAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAAFnBlcm1pdC1wb3J0LWZvcndhcmRpbmcAAAAAAAAACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1pdC11c2VyLXJjAAAAAAAAAAAAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIChVgsws0E4fVJKB6YW4MGmvOkNeinq59FI6jq+0PiZPAAAAUwAAAAtzc2gtZWQyNTUxOQAAAEAxbhjgbXvfEumRP1E7VH8nUfuJyVlDChhCxiPg9Nvb9PFK8cHdDUEybDCzKCsIDieRc3mtLTyEu7Kb52va/B4C user key
diff --git a/regress/unittests/authopt/testdata/host.cert b/regress/unittests/authopt/testdata/host.cert
new file mode 100644
index 000000000..6326d0453
--- /dev/null
+++ b/regress/unittests/authopt/testdata/host.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIFWMw3ftP29RSefnxQwdvK1KiE2G9Y7rPRrJ7ZsrDiOeAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAACAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAAAAAAAAAAAAAMwAAAAtzc2gtZWQyNTUxOQAAACAoVYLMLNBOH1SSgemFuDBprzpDXop6ufRSOo6vtD4mTwAAAFMAAAALc3NoLWVkMjU1MTkAAABAKTMqwPkaBg23RS7/aj347dc2kY4bWt/sHwzREYSrKRqZ5RNBnSvZOQ8m5euMCEuf92bZ8VJEdF653jRiW6VoBA== user key
diff --git a/regress/unittests/authopt/testdata/mktestdata.sh b/regress/unittests/authopt/testdata/mktestdata.sh
new file mode 100644
index 000000000..06a24e390
--- /dev/null
+++ b/regress/unittests/authopt/testdata/mktestdata.sh
@@ -0,0 +1,48 @@
1#/bin/sh
2
3set -xe
4
5rm -f ca_key ca_key.pub
6rm -f user_key user_key.pub
7rm -f *.cert
8
9ssh-keygen -q -f ca_key -t ed25519 -C CA -N ''
10ssh-keygen -q -f user_key -t ed25519 -C "user key" -N ''
11
12sign() {
13 output=$1
14 shift
15 set -xe
16 ssh-keygen -q -s ca_key -I user -n user \
17 -V 19990101:19991231 -z 1 "$@" user_key.pub
18 mv user_key-cert.pub "$output"
19}
20
21sign all_permit.cert -Opermit-agent-forwarding -Opermit-port-forwarding \
22 -Opermit-pty -Opermit-user-rc -Opermit-X11-forwarding
23sign no_permit.cert -Oclear
24
25sign no_agentfwd.cert -Ono-agent-forwarding
26sign no_portfwd.cert -Ono-port-forwarding
27sign no_pty.cert -Ono-pty
28sign no_user_rc.cert -Ono-user-rc
29sign no_x11fwd.cert -Ono-X11-forwarding
30
31sign only_agentfwd.cert -Oclear -Opermit-agent-forwarding
32sign only_portfwd.cert -Oclear -Opermit-port-forwarding
33sign only_pty.cert -Oclear -Opermit-pty
34sign only_user_rc.cert -Oclear -Opermit-user-rc
35sign only_x11fwd.cert -Oclear -Opermit-X11-forwarding
36
37sign force_command.cert -Oforce-command="foo"
38sign sourceaddr.cert -Osource-address="127.0.0.1/32,::1/128"
39
40# ssh-keygen won't permit generation of certs with invalid source-address
41# values, so we do it as a custom extension.
42sign bad_sourceaddr.cert -Ocritical:source-address=xxxxx
43
44sign unknown_critical.cert -Ocritical:blah=foo
45
46sign host.cert -h
47
48rm -f user_key ca_key user_key.pub ca_key.pub
diff --git a/regress/unittests/authopt/testdata/no_agentfwd.cert b/regress/unittests/authopt/testdata/no_agentfwd.cert
new file mode 100644
index 000000000..bfa5c2e65
--- /dev/null
+++ b/regress/unittests/authopt/testdata/no_agentfwd.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIL2qEsLCVtKaBkbCrZicxbPUorcHHrQ8yw5h/26krTOlAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAAGMAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABZwZXJtaXQtcG9ydC1mb3J3YXJkaW5nAAAAAAAAAApwZXJtaXQtcHR5AAAAAAAAAA5wZXJtaXQtdXNlci1yYwAAAAAAAAAAAAAAMwAAAAtzc2gtZWQyNTUxOQAAACAoVYLMLNBOH1SSgemFuDBprzpDXop6ufRSOo6vtD4mTwAAAFMAAAALc3NoLWVkMjU1MTkAAABAdRhISpol01OwV30g39PM/JD1t35muskX4lyCcGpFQ08GQtBuHE/hABOp6apbGBJIC7CZYYF+uHkD7PfGU3NPAQ== user key
diff --git a/regress/unittests/authopt/testdata/no_permit.cert b/regress/unittests/authopt/testdata/no_permit.cert
new file mode 100644
index 000000000..351e138ae
--- /dev/null
+++ b/regress/unittests/authopt/testdata/no_permit.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIGVQtVgp9sD4sc8esIhVWbZaM8d0NxpX3UbEVzTHm9feAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAAAAAAAAAAAAAMwAAAAtzc2gtZWQyNTUxOQAAACAoVYLMLNBOH1SSgemFuDBprzpDXop6ufRSOo6vtD4mTwAAAFMAAAALc3NoLWVkMjU1MTkAAABAIKlI0TqqraKjYTjIuKhwoxAV/XnzWRJHq8lNs4aj5yDb84un2xXDF/0vXoLjPgVcLgEbksBKKn0i4whp+xn9Ag== user key
diff --git a/regress/unittests/authopt/testdata/no_portfwd.cert b/regress/unittests/authopt/testdata/no_portfwd.cert
new file mode 100644
index 000000000..9457dc34e
--- /dev/null
+++ b/regress/unittests/authopt/testdata/no_portfwd.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIE6gC/QjjuzGWVDkr8ZyaHhja80V+lKLC/MvmEFa+CEBAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAAGQAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAADMAAAALc3NoLWVkMjU1MTkAAAAgKFWCzCzQTh9UkoHphbgwaa86Q16Kern0UjqOr7Q+Jk8AAABTAAAAC3NzaC1lZDI1NTE5AAAAQEzpgckYlfc1BK1ir0reDSXo9OIDx4UoDMrNXrFO6I44NXoJJ4TlUUJH07WcKp/Xp5ESCdyVZtqwgHQxZr0+PwI= user key
diff --git a/regress/unittests/authopt/testdata/no_pty.cert b/regress/unittests/authopt/testdata/no_pty.cert
new file mode 100644
index 000000000..e8154ec7f
--- /dev/null
+++ b/regress/unittests/authopt/testdata/no_pty.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIFFjhISpSDR3blDejuCf2T9Fe4aHW53jG7KOH2PV/E7jAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAAHAAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAADMAAAALc3NoLWVkMjU1MTkAAAAgKFWCzCzQTh9UkoHphbgwaa86Q16Kern0UjqOr7Q+Jk8AAABTAAAAC3NzaC1lZDI1NTE5AAAAQF5c4BdxVYgqbMGAep414IGFK4deCFBCeNUTOLpKodrfb1M0gS4d2qoeMxZvMv5yMf/viKl/gallHzEmcrEcIQY= user key
diff --git a/regress/unittests/authopt/testdata/no_user_rc.cert b/regress/unittests/authopt/testdata/no_user_rc.cert
new file mode 100644
index 000000000..6676a0cbd
--- /dev/null
+++ b/regress/unittests/authopt/testdata/no_user_rc.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIFUM0VLATkYh05QeS5uuhB1X50NMom3jTWeQUmrPQ1FwAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAAGwAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAAAAAAMwAAAAtzc2gtZWQyNTUxOQAAACAoVYLMLNBOH1SSgemFuDBprzpDXop6ufRSOo6vtD4mTwAAAFMAAAALc3NoLWVkMjU1MTkAAABAcmJ3c2FCKJL9BCLv1Ij+uN1N+NWZmMXYionsSkv42Go4pMZiH3g8UfTd+OKq9Q7GAcCzGXa///6Dr/wqFssoDA== user key
diff --git a/regress/unittests/authopt/testdata/no_x11fwd.cert b/regress/unittests/authopt/testdata/no_x11fwd.cert
new file mode 100644
index 000000000..0aff9e6cf
--- /dev/null
+++ b/regress/unittests/authopt/testdata/no_x11fwd.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIPRKPAP+b5S+4zihdgoJrYNcMovFBgKZaJupIhN1kUvkAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAAGUAAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAAFnBlcm1pdC1wb3J0LWZvcndhcmRpbmcAAAAAAAAACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1pdC11c2VyLXJjAAAAAAAAAAAAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIChVgsws0E4fVJKB6YW4MGmvOkNeinq59FI6jq+0PiZPAAAAUwAAAAtzc2gtZWQyNTUxOQAAAECMzj6VDfT+BJmIEo1qUKdr8VDLExF92K7KkbNxTH77n7uip7TL24HDfXjYBCvqxSSn9KAGBhnWsIC/GPx6A+cP user key
diff --git a/regress/unittests/authopt/testdata/only_agentfwd.cert b/regress/unittests/authopt/testdata/only_agentfwd.cert
new file mode 100644
index 000000000..3cf64b05c
--- /dev/null
+++ b/regress/unittests/authopt/testdata/only_agentfwd.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIOvJ28yW5uvA7yxE3ySuyFvPjcRYKAr03CYr4okGTNIFAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAAB8AAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAAAAAAADMAAAALc3NoLWVkMjU1MTkAAAAgKFWCzCzQTh9UkoHphbgwaa86Q16Kern0UjqOr7Q+Jk8AAABTAAAAC3NzaC1lZDI1NTE5AAAAQEG2uTgmOSk9dJ0s/Ol1EIERXFP9PF6AauF9t5jBMSthNyvSANSrC/1EIaf4TV5kMYfhZxJXoS0XHQjGndcq2AE= user key
diff --git a/regress/unittests/authopt/testdata/only_portfwd.cert b/regress/unittests/authopt/testdata/only_portfwd.cert
new file mode 100644
index 000000000..bb09c3a63
--- /dev/null
+++ b/regress/unittests/authopt/testdata/only_portfwd.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIGPoYoExiSyHMyDEvOFgoNZXk5z91u7xq/7357X23TotAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAAB4AAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAAAAAAMwAAAAtzc2gtZWQyNTUxOQAAACAoVYLMLNBOH1SSgemFuDBprzpDXop6ufRSOo6vtD4mTwAAAFMAAAALc3NoLWVkMjU1MTkAAABAHN3YnwipcbDKVn+PObGSoaT9rwlau+yrPYZ50oetvCKng3RMjGaV+roqlv0vjjLcxE9J4Y0ti+9MXtQ0D7beBA== user key
diff --git a/regress/unittests/authopt/testdata/only_pty.cert b/regress/unittests/authopt/testdata/only_pty.cert
new file mode 100644
index 000000000..520c89f3b
--- /dev/null
+++ b/regress/unittests/authopt/testdata/only_pty.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAILvocWYto5Lg7P46YLbe7U4/b2h9Lr5rWqMZ4Cj4ra7RAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAABIAAAAKcGVybWl0LXB0eQAAAAAAAAAAAAAAMwAAAAtzc2gtZWQyNTUxOQAAACAoVYLMLNBOH1SSgemFuDBprzpDXop6ufRSOo6vtD4mTwAAAFMAAAALc3NoLWVkMjU1MTkAAABASv2xQvp+Y6E8dCf5pzg3MZaan5bl1ToYXNcmQ3ysGrk9Djkcu8m3TytDpF471KmUejxy/iF4xjs9CDpk7h+SBQ== user key
diff --git a/regress/unittests/authopt/testdata/only_user_rc.cert b/regress/unittests/authopt/testdata/only_user_rc.cert
new file mode 100644
index 000000000..fb49c35f3
--- /dev/null
+++ b/regress/unittests/authopt/testdata/only_user_rc.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIJwsRZQ7kx4A8AQ0q/G/3i6sHM48kr4TxJtTcyy3lZAPAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAABYAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAADMAAAALc3NoLWVkMjU1MTkAAAAgKFWCzCzQTh9UkoHphbgwaa86Q16Kern0UjqOr7Q+Jk8AAABTAAAAC3NzaC1lZDI1NTE5AAAAQDhgEXsvoHr21XrxmiZq/sIjWeYapp11XvEVkkTBPVhBnPwtrrUeJbPmGs3gmJkQdv8BYajYpT7TXEX8GvEeLwU= user key
diff --git a/regress/unittests/authopt/testdata/only_x11fwd.cert b/regress/unittests/authopt/testdata/only_x11fwd.cert
new file mode 100644
index 000000000..6715585a0
--- /dev/null
+++ b/regress/unittests/authopt/testdata/only_x11fwd.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIDAhZFZBl3eu8Qa8I5BaHCz/mpH8xCjaPusBwo1eJ9OGAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAAB0AAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAAAAAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIChVgsws0E4fVJKB6YW4MGmvOkNeinq59FI6jq+0PiZPAAAAUwAAAAtzc2gtZWQyNTUxOQAAAEDysfgbhniX/zdA8576rrDJpaO2D7QtQse2KWIM9XmREPkLKeP6FKiXKKFcPQiMyV28rptfvK8bBXAiOvITSUgL user key
diff --git a/regress/unittests/authopt/testdata/sourceaddr.cert b/regress/unittests/authopt/testdata/sourceaddr.cert
new file mode 100644
index 000000000..0fcf7b182
--- /dev/null
+++ b/regress/unittests/authopt/testdata/sourceaddr.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIJ54qqoPs87gtjN1aJoLUn7ZTYUtcaGxkzLyJvRkYG7nAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAALgAAAA5zb3VyY2UtYWRkcmVzcwAAABgAAAAUMTI3LjAuMC4xLzMyLDo6MS8xMjgAAACCAAAAFXBlcm1pdC1YMTEtZm9yd2FyZGluZwAAAAAAAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAAFnBlcm1pdC1wb3J0LWZvcndhcmRpbmcAAAAAAAAACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1pdC11c2VyLXJjAAAAAAAAAAAAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIChVgsws0E4fVJKB6YW4MGmvOkNeinq59FI6jq+0PiZPAAAAUwAAAAtzc2gtZWQyNTUxOQAAAEAppSUKQ/a9tw/HgIazWceCO3d48GU7mkV4iQMpWWs2nB1dFryY1GDtZrBggAjMviwmBXyM3jIk5vxJDINZXGQJ user key
diff --git a/regress/unittests/authopt/testdata/unknown_critical.cert b/regress/unittests/authopt/testdata/unknown_critical.cert
new file mode 100644
index 000000000..216960ab3
--- /dev/null
+++ b/regress/unittests/authopt/testdata/unknown_critical.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIIjs/wRAB/p5QShSfqoU9cWnCLT3lSveUirk61A27KxVAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAEwAAAARibGFoAAAABwAAAANmb28AAACCAAAAFXBlcm1pdC1YMTEtZm9yd2FyZGluZwAAAAAAAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAAFnBlcm1pdC1wb3J0LWZvcndhcmRpbmcAAAAAAAAACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1pdC11c2VyLXJjAAAAAAAAAAAAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIChVgsws0E4fVJKB6YW4MGmvOkNeinq59FI6jq+0PiZPAAAAUwAAAAtzc2gtZWQyNTUxOQAAAEDix3FV7JIBuHNAwtZOVIqGBq8lqhnEwP51DqPA43qt+Tzynm56EWxuFzgGehBPF3L8gl+fVqxIJmiQ9iHB0LUD user key
diff --git a/regress/unittests/authopt/tests.c b/regress/unittests/authopt/tests.c
new file mode 100644
index 000000000..0e8aacb91
--- /dev/null
+++ b/regress/unittests/authopt/tests.c
@@ -0,0 +1,573 @@
1/* $OpenBSD: tests.c,v 1.1 2018/03/03 03:16:17 djm Exp $ */
2
3/*
4 * Regress test for keys options functions.
5 *
6 * Placed in the public domain
7 */
8
9#include <sys/types.h>
10#include <sys/param.h>
11#include <stdio.h>
12#include <stdint.h>
13#include <stdlib.h>
14#include <string.h>
15
16#include "test_helper.h"
17
18#include "sshkey.h"
19#include "authfile.h"
20#include "auth-options.h"
21#include "misc.h"
22#include "log.h"
23
24static struct sshkey *
25load_key(const char *name)
26{
27 struct sshkey *ret;
28 int r;
29
30 r = sshkey_load_public(test_data_file(name), &ret, NULL);
31 ASSERT_INT_EQ(r, 0);
32 ASSERT_PTR_NE(ret, NULL);
33 return ret;
34}
35
36static struct sshauthopt *
37default_authkey_opts(void)
38{
39 struct sshauthopt *ret = sshauthopt_new();
40
41 ASSERT_PTR_NE(ret, NULL);
42 ret->permit_port_forwarding_flag = 1;
43 ret->permit_agent_forwarding_flag = 1;
44 ret->permit_x11_forwarding_flag = 1;
45 ret->permit_pty_flag = 1;
46 ret->permit_user_rc = 1;
47 return ret;
48}
49
50static struct sshauthopt *
51default_authkey_restrict_opts(void)
52{
53 struct sshauthopt *ret = sshauthopt_new();
54
55 ASSERT_PTR_NE(ret, NULL);
56 ret->permit_port_forwarding_flag = 0;
57 ret->permit_agent_forwarding_flag = 0;
58 ret->permit_x11_forwarding_flag = 0;
59 ret->permit_pty_flag = 0;
60 ret->permit_user_rc = 0;
61 ret->restricted = 1;
62 return ret;
63}
64
65static char **
66commasplit(const char *s, size_t *np)
67{
68 char *ocp, *cp, *cp2, **ret = NULL;
69 size_t n;
70
71 ocp = cp = strdup(s);
72 ASSERT_PTR_NE(cp, NULL);
73 for (n = 0; (cp2 = strsep(&cp, ",")) != NULL;) {
74 ret = recallocarray(ret, n, n + 1, sizeof(*ret));
75 ASSERT_PTR_NE(ret, NULL);
76 cp2 = strdup(cp2);
77 ASSERT_PTR_NE(cp2, NULL);
78 ret[n++] = cp2;
79 }
80 free(ocp);
81 *np = n;
82 return ret;
83}
84
85static void
86compare_opts(const struct sshauthopt *opts,
87 const struct sshauthopt *expected)
88{
89 size_t i;
90
91 ASSERT_PTR_NE(opts, NULL);
92 ASSERT_PTR_NE(expected, NULL);
93 ASSERT_PTR_NE(expected, opts); /* bozo :) */
94
95#define FLAG_EQ(x) ASSERT_INT_EQ(opts->x, expected->x)
96 FLAG_EQ(permit_port_forwarding_flag);
97 FLAG_EQ(permit_agent_forwarding_flag);
98 FLAG_EQ(permit_x11_forwarding_flag);
99 FLAG_EQ(permit_pty_flag);
100 FLAG_EQ(permit_user_rc);
101 FLAG_EQ(restricted);
102 FLAG_EQ(cert_authority);
103#undef FLAG_EQ
104
105#define STR_EQ(x) \
106 do { \
107 if (expected->x == NULL) \
108 ASSERT_PTR_EQ(opts->x, expected->x); \
109 else \
110 ASSERT_STRING_EQ(opts->x, expected->x); \
111 } while (0)
112 STR_EQ(cert_principals);
113 STR_EQ(force_command);
114 STR_EQ(required_from_host_cert);
115 STR_EQ(required_from_host_keys);
116#undef STR_EQ
117
118#define ARRAY_EQ(nx, x) \
119 do { \
120 ASSERT_SIZE_T_EQ(opts->nx, expected->nx); \
121 if (expected->nx == 0) \
122 break; \
123 for (i = 0; i < expected->nx; i++) \
124 ASSERT_STRING_EQ(opts->x[i], expected->x[i]); \
125 } while (0)
126 ARRAY_EQ(nenv, env);
127 ARRAY_EQ(npermitopen, permitopen);
128#undef ARRAY_EQ
129}
130
131static void
132test_authkeys_parse(void)
133{
134 struct sshauthopt *opts, *expected;
135 const char *errstr;
136
137#define FAIL_TEST(label, keywords) \
138 do { \
139 TEST_START("sshauthopt_parse invalid " label); \
140 opts = sshauthopt_parse(keywords, &errstr); \
141 ASSERT_PTR_EQ(opts, NULL); \
142 ASSERT_PTR_NE(errstr, NULL); \
143 TEST_DONE(); \
144 } while (0)
145#define CHECK_SUCCESS_AND_CLEANUP() \
146 do { \
147 if (errstr != NULL) \
148 ASSERT_STRING_EQ(errstr, ""); \
149 compare_opts(opts, expected); \
150 sshauthopt_free(expected); \
151 sshauthopt_free(opts); \
152 } while (0)
153
154 /* Basic tests */
155 TEST_START("sshauthopt_parse empty");
156 expected = default_authkey_opts();
157 opts = sshauthopt_parse("", &errstr);
158 CHECK_SUCCESS_AND_CLEANUP();
159 TEST_DONE();
160
161 TEST_START("sshauthopt_parse trailing whitespace");
162 expected = default_authkey_opts();
163 opts = sshauthopt_parse(" ", &errstr);
164 CHECK_SUCCESS_AND_CLEANUP();
165 TEST_DONE();
166
167 TEST_START("sshauthopt_parse restrict");
168 expected = default_authkey_restrict_opts();
169 opts = sshauthopt_parse("restrict", &errstr);
170 CHECK_SUCCESS_AND_CLEANUP();
171 TEST_DONE();
172
173 /* Invalid syntax */
174 FAIL_TEST("trailing comma", "restrict,");
175 FAIL_TEST("bare comma", ",");
176 FAIL_TEST("unknown option", "BLAH");
177 FAIL_TEST("unknown option with trailing comma", "BLAH,");
178 FAIL_TEST("unknown option with trailing whitespace", "BLAH ");
179
180 /* force_tun_device */
181 TEST_START("sshauthopt_parse tunnel explicit");
182 expected = default_authkey_opts();
183 expected->force_tun_device = 1;
184 opts = sshauthopt_parse("tunnel=\"1\"", &errstr);
185 CHECK_SUCCESS_AND_CLEANUP();
186 TEST_DONE();
187
188 TEST_START("sshauthopt_parse tunnel any");
189 expected = default_authkey_opts();
190 expected->force_tun_device = SSH_TUNID_ANY;
191 opts = sshauthopt_parse("tunnel=\"any\"", &errstr);
192 CHECK_SUCCESS_AND_CLEANUP();
193 TEST_DONE();
194
195 FAIL_TEST("tunnel", "tunnel=\"blah\"");
196
197 /* Flag options */
198#define FLAG_TEST(keyword, var, val) \
199 do { \
200 TEST_START("sshauthopt_parse " keyword); \
201 expected = default_authkey_opts(); \
202 expected->var = val; \
203 opts = sshauthopt_parse(keyword, &errstr); \
204 CHECK_SUCCESS_AND_CLEANUP(); \
205 expected = default_authkey_restrict_opts(); \
206 expected->var = val; \
207 opts = sshauthopt_parse("restrict,"keyword, &errstr); \
208 CHECK_SUCCESS_AND_CLEANUP(); \
209 TEST_DONE(); \
210 } while (0)
211 /* Positive flags */
212 FLAG_TEST("cert-authority", cert_authority, 1);
213 FLAG_TEST("port-forwarding", permit_port_forwarding_flag, 1);
214 FLAG_TEST("agent-forwarding", permit_agent_forwarding_flag, 1);
215 FLAG_TEST("x11-forwarding", permit_x11_forwarding_flag, 1);
216 FLAG_TEST("pty", permit_pty_flag, 1);
217 FLAG_TEST("user-rc", permit_user_rc, 1);
218 /* Negative flags */
219 FLAG_TEST("no-port-forwarding", permit_port_forwarding_flag, 0);
220 FLAG_TEST("no-agent-forwarding", permit_agent_forwarding_flag, 0);
221 FLAG_TEST("no-x11-forwarding", permit_x11_forwarding_flag, 0);
222 FLAG_TEST("no-pty", permit_pty_flag, 0);
223 FLAG_TEST("no-user-rc", permit_user_rc, 0);
224#undef FLAG_TEST
225 FAIL_TEST("no-cert-authority", "no-cert-authority");
226
227 /* String options */
228#define STRING_TEST(keyword, var, val) \
229 do { \
230 TEST_START("sshauthopt_parse " keyword); \
231 expected = default_authkey_opts(); \
232 expected->var = strdup(val); \
233 ASSERT_PTR_NE(expected->var, NULL); \
234 opts = sshauthopt_parse(keyword "=" #val, &errstr); \
235 CHECK_SUCCESS_AND_CLEANUP(); \
236 expected = default_authkey_restrict_opts(); \
237 expected->var = strdup(val); \
238 ASSERT_PTR_NE(expected->var, NULL); \
239 opts = sshauthopt_parse( \
240 "restrict," keyword "=" #val ",restrict", &errstr); \
241 CHECK_SUCCESS_AND_CLEANUP(); \
242 TEST_DONE(); \
243 } while (0)
244 STRING_TEST("command", force_command, "/bin/true");
245 STRING_TEST("principals", cert_principals, "gregor,josef,K");
246 STRING_TEST("from", required_from_host_keys, "127.0.0.0/8");
247#undef STRING_TEST
248 FAIL_TEST("unquoted command", "command=oops");
249 FAIL_TEST("unquoted principals", "principals=estragon");
250 FAIL_TEST("unquoted from", "from=127.0.0.1");
251
252 /* String array option tests */
253#define ARRAY_TEST(label, keywords, var, nvar, val) \
254 do { \
255 TEST_START("sshauthopt_parse " label); \
256 expected = default_authkey_opts(); \
257 expected->var = commasplit(val, &expected->nvar); \
258 ASSERT_PTR_NE(expected->var, NULL); \
259 opts = sshauthopt_parse(keywords, &errstr); \
260 CHECK_SUCCESS_AND_CLEANUP(); \
261 expected = default_authkey_restrict_opts(); \
262 expected->var = commasplit(val, &expected->nvar); \
263 ASSERT_PTR_NE(expected->var, NULL); \
264 opts = sshauthopt_parse( \
265 "restrict," keywords ",restrict", &errstr); \
266 CHECK_SUCCESS_AND_CLEANUP(); \
267 TEST_DONE(); \
268 } while (0)
269 ARRAY_TEST("environment", "environment=\"foo=1\",environment=\"bar=2\"",
270 env, nenv, "foo=1,bar=2");
271 ARRAY_TEST("permitopen", "permitopen=\"foo:123\",permitopen=\"bar:*\"",
272 permitopen, npermitopen, "foo:123,bar:*");
273#undef ARRAY_TEST
274 FAIL_TEST("environment", "environment=\",=bah\"");
275 FAIL_TEST("permitopen port", "foo:bar");
276 FAIL_TEST("permitopen missing port", "foo:");
277 FAIL_TEST("permitopen missing port specification", "foo");
278 FAIL_TEST("permitopen invalid host", "[:");
279
280#undef CHECK_SUCCESS_AND_CLEANUP
281#undef FAIL_TEST
282}
283
284static void
285test_cert_parse(void)
286{
287 struct sshkey *cert;
288 struct sshauthopt *opts, *expected;
289
290#define CHECK_SUCCESS_AND_CLEANUP() \
291 do { \
292 compare_opts(opts, expected); \
293 sshauthopt_free(expected); \
294 sshauthopt_free(opts); \
295 sshkey_free(cert); \
296 } while (0)
297#define FLAG_TEST(keybase, var) \
298 do { \
299 TEST_START("sshauthopt_from_cert no_" keybase); \
300 cert = load_key("no_" keybase ".cert"); \
301 expected = default_authkey_opts(); \
302 expected->var = 0; \
303 opts = sshauthopt_from_cert(cert); \
304 CHECK_SUCCESS_AND_CLEANUP(); \
305 TEST_DONE(); \
306 TEST_START("sshauthopt_from_cert only_" keybase); \
307 cert = load_key("only_" keybase ".cert"); \
308 expected = sshauthopt_new(); \
309 ASSERT_PTR_NE(expected, NULL); \
310 expected->var = 1; \
311 opts = sshauthopt_from_cert(cert); \
312 CHECK_SUCCESS_AND_CLEANUP(); \
313 TEST_DONE(); \
314 } while (0)
315 FLAG_TEST("agentfwd", permit_agent_forwarding_flag);
316 FLAG_TEST("portfwd", permit_port_forwarding_flag);
317 FLAG_TEST("pty", permit_pty_flag);
318 FLAG_TEST("user_rc", permit_user_rc);
319 FLAG_TEST("x11fwd", permit_x11_forwarding_flag);
320#undef FLAG_TEST
321
322 TEST_START("sshauthopt_from_cert all permitted");
323 cert = load_key("all_permit.cert");
324 expected = default_authkey_opts();
325 opts = sshauthopt_from_cert(cert);
326 CHECK_SUCCESS_AND_CLEANUP();
327 TEST_DONE();
328
329 TEST_START("sshauthopt_from_cert nothing permitted");
330 cert = load_key("no_permit.cert");
331 expected = sshauthopt_new();
332 ASSERT_PTR_NE(expected, NULL);
333 opts = sshauthopt_from_cert(cert);
334 CHECK_SUCCESS_AND_CLEANUP();
335 TEST_DONE();
336
337 TEST_START("sshauthopt_from_cert force-command");
338 cert = load_key("force_command.cert");
339 expected = default_authkey_opts();
340 expected->force_command = strdup("foo");
341 ASSERT_PTR_NE(expected->force_command, NULL);
342 opts = sshauthopt_from_cert(cert);
343 CHECK_SUCCESS_AND_CLEANUP();
344 TEST_DONE();
345
346 TEST_START("sshauthopt_from_cert source-address");
347 cert = load_key("sourceaddr.cert");
348 expected = default_authkey_opts();
349 expected->required_from_host_cert = strdup("127.0.0.1/32,::1/128");
350 ASSERT_PTR_NE(expected->required_from_host_cert, NULL);
351 opts = sshauthopt_from_cert(cert);
352 CHECK_SUCCESS_AND_CLEANUP();
353 TEST_DONE();
354#undef CHECK_SUCCESS_AND_CLEANUP
355
356#define FAIL_TEST(keybase) \
357 do { \
358 TEST_START("sshauthopt_from_cert " keybase); \
359 cert = load_key(keybase ".cert"); \
360 opts = sshauthopt_from_cert(cert); \
361 ASSERT_PTR_EQ(opts, NULL); \
362 sshkey_free(cert); \
363 TEST_DONE(); \
364 } while (0)
365 FAIL_TEST("host");
366 FAIL_TEST("bad_sourceaddr");
367 FAIL_TEST("unknown_critical");
368#undef FAIL_TEST
369}
370
371static void
372test_merge(void)
373{
374 struct sshkey *cert;
375 struct sshauthopt *key_opts, *cert_opts, *merge_opts, *expected;
376 const char *errstr;
377
378 /*
379 * Prepare for a test by making some key and cert options and
380 * attempting to merge them.
381 */
382#define PREPARE(label, keyname, keywords) \
383 do { \
384 expected = NULL; \
385 TEST_START("sshauthopt_merge " label); \
386 cert = load_key(keyname ".cert"); \
387 cert_opts = sshauthopt_from_cert(cert); \
388 ASSERT_PTR_NE(cert_opts, NULL); \
389 key_opts = sshauthopt_parse(keywords, &errstr); \
390 if (errstr != NULL) \
391 ASSERT_STRING_EQ(errstr, ""); \
392 ASSERT_PTR_NE(key_opts, NULL); \
393 merge_opts = sshauthopt_merge(key_opts, \
394 cert_opts, &errstr); \
395 } while (0)
396
397 /* Cleanup stuff allocated by PREPARE() */
398#define CLEANUP() \
399 do { \
400 sshauthopt_free(expected); \
401 sshauthopt_free(merge_opts); \
402 sshauthopt_free(key_opts); \
403 sshauthopt_free(cert_opts); \
404 sshkey_free(cert); \
405 } while (0)
406
407 /* Check the results of PREPARE() against expectation; calls CLEANUP */
408#define CHECK_SUCCESS_AND_CLEANUP() \
409 do { \
410 if (errstr != NULL) \
411 ASSERT_STRING_EQ(errstr, ""); \
412 compare_opts(merge_opts, expected); \
413 CLEANUP(); \
414 } while (0)
415
416 /* Check a single case of merging of flag options */
417#define FLAG_CASE(keybase, label, keyname, keywords, mostly_off, var, val) \
418 do { \
419 PREPARE(keybase " " label, keyname, keywords); \
420 expected = mostly_off ? \
421 sshauthopt_new() : default_authkey_opts(); \
422 expected->var = val; \
423 ASSERT_PTR_NE(expected, NULL); \
424 CHECK_SUCCESS_AND_CLEANUP(); \
425 TEST_DONE(); \
426 } while (0)
427
428 /*
429 * Fairly exhaustive exercise of a flag option. Tests
430 * option both set and clear in certificate, set and clear in
431 * authorized_keys and set and cleared via restrict keyword.
432 */
433#define FLAG_TEST(keybase, keyword, var) \
434 do { \
435 FLAG_CASE(keybase, "keys:default,yes cert:default,no", \
436 "no_" keybase, keyword, 0, var, 0); \
437 FLAG_CASE(keybase,"keys:-*,yes cert:default,no", \
438 "no_" keybase, "restrict," keyword, 1, var, 0); \
439 FLAG_CASE(keybase, "keys:default,no cert:default,no", \
440 "no_" keybase, "no-" keyword, 0, var, 0); \
441 FLAG_CASE(keybase, "keys:-*,no cert:default,no", \
442 "no_" keybase, "restrict,no-" keyword, 1, var, 0); \
443 \
444 FLAG_CASE(keybase, "keys:default,yes cert:-*,yes", \
445 "only_" keybase, keyword, 1, var, 1); \
446 FLAG_CASE(keybase,"keys:-*,yes cert:-*,yes", \
447 "only_" keybase, "restrict," keyword, 1, var, 1); \
448 FLAG_CASE(keybase, "keys:default,no cert:-*,yes", \
449 "only_" keybase, "no-" keyword, 1, var, 0); \
450 FLAG_CASE(keybase, "keys:-*,no cert:-*,yes", \
451 "only_" keybase, "restrict,no-" keyword, 1, var, 0); \
452 \
453 FLAG_CASE(keybase, "keys:default,yes cert:-*", \
454 "no_permit", keyword, 1, var, 0); \
455 FLAG_CASE(keybase,"keys:-*,yes cert:-*", \
456 "no_permit", "restrict," keyword, 1, var, 0); \
457 FLAG_CASE(keybase, "keys:default,no cert:-*", \
458 "no_permit", "no-" keyword, 1, var, 0); \
459 FLAG_CASE(keybase, "keys:-*,no cert:-*", \
460 "no_permit", "restrict,no-" keyword, 1, var, 0); \
461 \
462 FLAG_CASE(keybase, "keys:default,yes cert:*", \
463 "all_permit", keyword, 0, var, 1); \
464 FLAG_CASE(keybase,"keys:-*,yes cert:*", \
465 "all_permit", "restrict," keyword, 1, var, 1); \
466 FLAG_CASE(keybase, "keys:default,no cert:*", \
467 "all_permit", "no-" keyword, 0, var, 0); \
468 FLAG_CASE(keybase, "keys:-*,no cert:*", \
469 "all_permit", "restrict,no-" keyword, 1, var, 0); \
470 \
471 } while (0)
472 FLAG_TEST("portfwd", "port-forwarding", permit_port_forwarding_flag);
473 FLAG_TEST("agentfwd", "agent-forwarding", permit_agent_forwarding_flag);
474 FLAG_TEST("pty", "pty", permit_pty_flag);
475 FLAG_TEST("user_rc", "user-rc", permit_user_rc);
476 FLAG_TEST("x11fwd", "x11-forwarding", permit_x11_forwarding_flag);
477#undef FLAG_TEST
478
479 PREPARE("source-address both", "sourceaddr", "from=\"127.0.0.1\"");
480 expected = default_authkey_opts();
481 expected->required_from_host_cert = strdup("127.0.0.1/32,::1/128");
482 ASSERT_PTR_NE(expected->required_from_host_cert, NULL);
483 expected->required_from_host_keys = strdup("127.0.0.1");
484 ASSERT_PTR_NE(expected->required_from_host_keys, NULL);
485 CHECK_SUCCESS_AND_CLEANUP();
486 TEST_DONE();
487
488 PREPARE("source-address none", "all_permit", "");
489 expected = default_authkey_opts();
490 CHECK_SUCCESS_AND_CLEANUP();
491 TEST_DONE();
492
493 PREPARE("source-address keys", "all_permit", "from=\"127.0.0.1\"");
494 expected = default_authkey_opts();
495 expected->required_from_host_keys = strdup("127.0.0.1");
496 ASSERT_PTR_NE(expected->required_from_host_keys, NULL);
497 CHECK_SUCCESS_AND_CLEANUP();
498 TEST_DONE();
499
500 PREPARE("source-address cert", "sourceaddr", "");
501 expected = default_authkey_opts();
502 expected->required_from_host_cert = strdup("127.0.0.1/32,::1/128");
503 ASSERT_PTR_NE(expected->required_from_host_cert, NULL);
504 CHECK_SUCCESS_AND_CLEANUP();
505 TEST_DONE();
506
507 PREPARE("force-command both", "force_command", "command=\"foo\"");
508 expected = default_authkey_opts();
509 expected->force_command = strdup("foo");
510 ASSERT_PTR_NE(expected->force_command, NULL);
511 CHECK_SUCCESS_AND_CLEANUP();
512 TEST_DONE();
513
514 PREPARE("force-command none", "all_permit", "");
515 expected = default_authkey_opts();
516 CHECK_SUCCESS_AND_CLEANUP();
517 TEST_DONE();
518
519 PREPARE("force-command keys", "all_permit", "command=\"bar\"");
520 expected = default_authkey_opts();
521 expected->force_command = strdup("bar");
522 ASSERT_PTR_NE(expected->force_command, NULL);
523 CHECK_SUCCESS_AND_CLEANUP();
524 TEST_DONE();
525
526 PREPARE("force-command cert", "force_command", "");
527 expected = default_authkey_opts();
528 expected->force_command = strdup("foo");
529 ASSERT_PTR_NE(expected->force_command, NULL);
530 CHECK_SUCCESS_AND_CLEANUP();
531 TEST_DONE();
532
533 PREPARE("force-command mismatch", "force_command", "command=\"bar\"");
534 ASSERT_PTR_EQ(merge_opts, NULL);
535 CLEANUP();
536 TEST_DONE();
537
538 PREPARE("tunnel", "all_permit", "tunnel=\"6\"");
539 expected = default_authkey_opts();
540 expected->force_tun_device = 6;
541 CHECK_SUCCESS_AND_CLEANUP();
542 TEST_DONE();
543
544 PREPARE("permitopen", "all_permit",
545 "permitopen=\"127.0.0.1:*\",permitopen=\"127.0.0.1:123\"");
546 expected = default_authkey_opts();
547 expected->permitopen = commasplit("127.0.0.1:*,127.0.0.1:123",
548 &expected->npermitopen);
549 CHECK_SUCCESS_AND_CLEANUP();
550 TEST_DONE();
551
552 PREPARE("environment", "all_permit",
553 "environment=\"foo=a\",environment=\"bar=b\"");
554 expected = default_authkey_opts();
555 expected->env = commasplit("foo=a,bar=b", &expected->nenv);
556 CHECK_SUCCESS_AND_CLEANUP();
557 TEST_DONE();
558}
559
560void
561tests(void)
562{
563 extern char *__progname;
564 LogLevel ll = test_is_verbose() ?
565 SYSLOG_LEVEL_DEBUG3 : SYSLOG_LEVEL_QUIET;
566
567 /* test_cert_parse() are a bit spammy to error() by default... */
568 log_init(__progname, ll, SYSLOG_FACILITY_USER, 1);
569
570 test_authkeys_parse();
571 test_cert_parse();
572 test_merge();
573}
diff --git a/regress/unittests/bitmap/Makefile b/regress/unittests/bitmap/Makefile
index bd21949f8..fe30acc77 100644
--- a/regress/unittests/bitmap/Makefile
+++ b/regress/unittests/bitmap/Makefile
@@ -1,7 +1,11 @@
1# $OpenBSD: Makefile,v 1.3 2016/11/01 13:43:27 tb Exp $ 1# $OpenBSD: Makefile,v 1.4 2017/12/21 00:41:22 djm Exp $
2 2
3PROG=test_bitmap 3PROG=test_bitmap
4SRCS=tests.c 4SRCS=tests.c
5
6# From usr.sbin/ssh
7SRCS+=bitmap.c atomicio.c
8
5REGRESS_TARGETS=run-regress-${PROG} 9REGRESS_TARGETS=run-regress-${PROG}
6 10
7run-regress-${PROG}: ${PROG} 11run-regress-${PROG}: ${PROG}
diff --git a/regress/unittests/conversion/Makefile b/regress/unittests/conversion/Makefile
index cde97dc28..8b2a09cc3 100644
--- a/regress/unittests/conversion/Makefile
+++ b/regress/unittests/conversion/Makefile
@@ -1,7 +1,12 @@
1# $OpenBSD: Makefile,v 1.1 2017/03/14 01:20:29 dtucker Exp $ 1# $OpenBSD: Makefile,v 1.2 2017/12/21 00:41:22 djm Exp $
2 2
3PROG=test_conversion 3PROG=test_conversion
4SRCS=tests.c 4SRCS=tests.c
5
6# From usr.bin/ssh
7SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c
8SRCS+=atomicio.c misc.c xmalloc.c log.c uidswap.c cleanup.c fatal.c ssherr.c
9
5REGRESS_TARGETS=run-regress-${PROG} 10REGRESS_TARGETS=run-regress-${PROG}
6 11
7run-regress-${PROG}: ${PROG} 12run-regress-${PROG}: ${PROG}
diff --git a/regress/unittests/hostkeys/Makefile b/regress/unittests/hostkeys/Makefile
index ae3c342bd..336885122 100644
--- a/regress/unittests/hostkeys/Makefile
+++ b/regress/unittests/hostkeys/Makefile
@@ -1,7 +1,20 @@
1# $OpenBSD: Makefile,v 1.3 2016/11/01 13:43:27 tb Exp $ 1# $OpenBSD: Makefile,v 1.4 2017/12/21 00:41:22 djm Exp $
2 2
3PROG=test_hostkeys 3PROG=test_hostkeys
4SRCS=tests.c test_iterate.c 4SRCS=tests.c test_iterate.c
5
6# From usr.bin/ssh
7SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c
8SRCS+=atomicio.c sshkey.c authfile.c cipher.c log.c ssh-rsa.c ssh-dss.c
9SRCS+=ssh-ecdsa.c ssh-ed25519.c mac.c umac.c umac128.c hmac.c misc.c
10SRCS+=ssherr.c uidswap.c cleanup.c xmalloc.c match.c krl.c fatal.c
11SRCS+=addrmatch.c bitmap.c hostfile.c
12SRCS+=ed25519.c hash.c ge25519.c fe25519.c sc25519.c verify.c
13SRCS+=cipher-chachapoly.c chacha.c poly1305.c
14
15SRCS+=digest-openssl.c
16#SRCS+=digest-libc.c
17
5REGRESS_TARGETS=run-regress-${PROG} 18REGRESS_TARGETS=run-regress-${PROG}
6 19
7run-regress-${PROG}: ${PROG} 20run-regress-${PROG}: ${PROG}
diff --git a/regress/unittests/kex/Makefile b/regress/unittests/kex/Makefile
index 7ed312675..5c61307a3 100644
--- a/regress/unittests/kex/Makefile
+++ b/regress/unittests/kex/Makefile
@@ -1,7 +1,24 @@
1# $OpenBSD: Makefile,v 1.4 2016/11/01 13:43:27 tb Exp $ 1# $OpenBSD: Makefile,v 1.5 2017/12/21 00:41:22 djm Exp $
2 2
3PROG=test_kex 3PROG=test_kex
4SRCS=tests.c test_kex.c 4SRCS=tests.c test_kex.c
5
6# From usr.bin/ssh
7SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c
8SRCS+=atomicio.c sshkey.c authfile.c cipher.c log.c ssh-rsa.c ssh-dss.c
9SRCS+=ssh-ecdsa.c ssh-ed25519.c mac.c umac.c umac128.c hmac.c misc.c
10SRCS+=ssherr.c uidswap.c cleanup.c xmalloc.c match.c krl.c fatal.c
11SRCS+=addrmatch.c bitmap.c packet.c dispatch.c canohost.c ssh_api.c
12SRCS+=kex.c kexc25519.c kexc25519c.c kexc25519s.c kexdh.c kexdhc.c kexdhs.c
13SRCS+=kexecdh.c kexecdhc.c kexecdhs.c kexgex.c kexgexc.c kexgexs.c
14SRCS+=dh.c compat.c
15SRCS+=ed25519.c hash.c ge25519.c fe25519.c sc25519.c verify.c
16SRCS+=cipher-chachapoly.c chacha.c poly1305.c
17SRCS+=smult_curve25519_ref.c
18
19SRCS+=digest-openssl.c
20#SRCS+=digest-libc.c
21
5REGRESS_TARGETS=run-regress-${PROG} 22REGRESS_TARGETS=run-regress-${PROG}
6 23
7run-regress-${PROG}: ${PROG} 24run-regress-${PROG}: ${PROG}
diff --git a/regress/unittests/match/Makefile b/regress/unittests/match/Makefile
index bd4aed844..87e75826a 100644
--- a/regress/unittests/match/Makefile
+++ b/regress/unittests/match/Makefile
@@ -1,7 +1,13 @@
1# $OpenBSD: Makefile,v 1.3 2016/11/01 13:43:27 tb Exp $ 1# $OpenBSD: Makefile,v 1.4 2017/12/21 03:01:49 djm Exp $
2 2
3PROG=test_match 3PROG=test_match
4SRCS=tests.c 4SRCS=tests.c
5
6# From usr.bin/ssh
7SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c
8SRCS+=match.c misc.c log.c uidswap.c fatal.c ssherr.c addrmatch.c xmalloc.c
9SRCS+=cleanup.c atomicio.c
10
5REGRESS_TARGETS=run-regress-${PROG} 11REGRESS_TARGETS=run-regress-${PROG}
6 12
7run-regress-${PROG}: ${PROG} 13run-regress-${PROG}: ${PROG}
diff --git a/regress/unittests/sshbuf/Makefile b/regress/unittests/sshbuf/Makefile
index 69b27566b..81d4f27a6 100644
--- a/regress/unittests/sshbuf/Makefile
+++ b/regress/unittests/sshbuf/Makefile
@@ -1,4 +1,6 @@
1# $OpenBSD: Makefile,v 1.5 2016/11/01 13:43:27 tb Exp $ 1# $OpenBSD: Makefile,v 1.6 2017/12/21 00:41:22 djm Exp $
2
3.include <bsd.regress.mk>
2 4
3PROG=test_sshbuf 5PROG=test_sshbuf
4SRCS=tests.c 6SRCS=tests.c
@@ -10,5 +12,11 @@ SRCS+=test_sshbuf_fuzz.c
10SRCS+=test_sshbuf_getput_fuzz.c 12SRCS+=test_sshbuf_getput_fuzz.c
11SRCS+=test_sshbuf_fixed.c 13SRCS+=test_sshbuf_fixed.c
12 14
13.include <bsd.regress.mk> 15# From usr.bin/ssh
16SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c
17SRCS+=atomicio.c
18
19run-regress-${PROG}: ${PROG}
20 env ${TEST_ENV} ./${PROG}
21
14 22
diff --git a/regress/unittests/sshkey/Makefile b/regress/unittests/sshkey/Makefile
index cfbfcf8f1..1c940bec6 100644
--- a/regress/unittests/sshkey/Makefile
+++ b/regress/unittests/sshkey/Makefile
@@ -1,7 +1,20 @@
1# $OpenBSD: Makefile,v 1.4 2016/11/01 13:43:27 tb Exp $ 1# $OpenBSD: Makefile,v 1.5 2017/12/21 00:41:22 djm Exp $
2 2
3PROG=test_sshkey 3PROG=test_sshkey
4SRCS=tests.c test_sshkey.c test_file.c test_fuzz.c common.c 4SRCS=tests.c test_sshkey.c test_file.c test_fuzz.c common.c
5
6# From usr.bin/ssh
7SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c
8SRCS+=atomicio.c sshkey.c authfile.c cipher.c log.c ssh-rsa.c ssh-dss.c
9SRCS+=ssh-ecdsa.c ssh-ed25519.c mac.c umac.c umac128.c hmac.c misc.c
10SRCS+=ssherr.c uidswap.c cleanup.c xmalloc.c match.c krl.c fatal.c
11SRCS+=addrmatch.c bitmap.c
12SRCS+=ed25519.c hash.c ge25519.c fe25519.c sc25519.c verify.c
13SRCS+=cipher-chachapoly.c chacha.c poly1305.c
14
15SRCS+=digest-openssl.c
16#SRCS+=digest-libc.c
17
5REGRESS_TARGETS=run-regress-${PROG} 18REGRESS_TARGETS=run-regress-${PROG}
6 19
7run-regress-${PROG}: ${PROG} 20run-regress-${PROG}: ${PROG}
diff --git a/regress/unittests/sshkey/test_fuzz.c b/regress/unittests/sshkey/test_fuzz.c
index 6706045d5..d3b0c92b4 100644
--- a/regress/unittests/sshkey/test_fuzz.c
+++ b/regress/unittests/sshkey/test_fuzz.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: test_fuzz.c,v 1.7 2017/04/30 23:33:48 djm Exp $ */ 1/* $OpenBSD: test_fuzz.c,v 1.8 2017/12/21 00:41:22 djm Exp $ */
2/* 2/*
3 * Fuzz tests for key parsing 3 * Fuzz tests for key parsing
4 * 4 *
@@ -83,7 +83,7 @@ sig_fuzz(struct sshkey *k, const char *sig_alg)
83 fuzz = fuzz_begin(FUZZ_1_BIT_FLIP | /* too slow FUZZ_2_BIT_FLIP | */ 83 fuzz = fuzz_begin(FUZZ_1_BIT_FLIP | /* too slow FUZZ_2_BIT_FLIP | */
84 FUZZ_1_BYTE_FLIP | FUZZ_2_BYTE_FLIP | 84 FUZZ_1_BYTE_FLIP | FUZZ_2_BYTE_FLIP |
85 FUZZ_TRUNCATE_START | FUZZ_TRUNCATE_END, sig, l); 85 FUZZ_TRUNCATE_START | FUZZ_TRUNCATE_END, sig, l);
86 ASSERT_INT_EQ(sshkey_verify(k, sig, l, c, sizeof(c), 0), 0); 86 ASSERT_INT_EQ(sshkey_verify(k, sig, l, c, sizeof(c), NULL, 0), 0);
87 free(sig); 87 free(sig);
88 TEST_ONERROR(onerror, fuzz); 88 TEST_ONERROR(onerror, fuzz);
89 for(; !fuzz_done(fuzz); fuzz_next(fuzz)) { 89 for(; !fuzz_done(fuzz); fuzz_next(fuzz)) {
@@ -91,7 +91,7 @@ sig_fuzz(struct sshkey *k, const char *sig_alg)
91 if (fuzz_matches_original(fuzz)) 91 if (fuzz_matches_original(fuzz))
92 continue; 92 continue;
93 ASSERT_INT_NE(sshkey_verify(k, fuzz_ptr(fuzz), fuzz_len(fuzz), 93 ASSERT_INT_NE(sshkey_verify(k, fuzz_ptr(fuzz), fuzz_len(fuzz),
94 c, sizeof(c), 0), 0); 94 c, sizeof(c), NULL, 0), 0);
95 } 95 }
96 fuzz_cleanup(fuzz); 96 fuzz_cleanup(fuzz);
97} 97}
diff --git a/regress/unittests/sshkey/test_sshkey.c b/regress/unittests/sshkey/test_sshkey.c
index 0a73322a3..1aa608f92 100644
--- a/regress/unittests/sshkey/test_sshkey.c
+++ b/regress/unittests/sshkey/test_sshkey.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: test_sshkey.c,v 1.12 2017/05/08 06:08:42 djm Exp $ */ 1/* $OpenBSD: test_sshkey.c,v 1.13 2017/12/21 00:41:22 djm Exp $ */
2/* 2/*
3 * Regress test for sshkey.h key management API 3 * Regress test for sshkey.h key management API
4 * 4 *
@@ -121,11 +121,11 @@ signature_test(struct sshkey *k, struct sshkey *bad, const char *sig_alg,
121 ASSERT_INT_EQ(sshkey_sign(k, &sig, &len, d, l, sig_alg, 0), 0); 121 ASSERT_INT_EQ(sshkey_sign(k, &sig, &len, d, l, sig_alg, 0), 0);
122 ASSERT_SIZE_T_GT(len, 8); 122 ASSERT_SIZE_T_GT(len, 8);
123 ASSERT_PTR_NE(sig, NULL); 123 ASSERT_PTR_NE(sig, NULL);
124 ASSERT_INT_EQ(sshkey_verify(k, sig, len, d, l, 0), 0); 124 ASSERT_INT_EQ(sshkey_verify(k, sig, len, d, l, NULL, 0), 0);
125 ASSERT_INT_NE(sshkey_verify(bad, sig, len, d, l, 0), 0); 125 ASSERT_INT_NE(sshkey_verify(bad, sig, len, d, l, NULL, 0), 0);
126 /* Fuzz test is more comprehensive, this is just a smoke test */ 126 /* Fuzz test is more comprehensive, this is just a smoke test */
127 sig[len - 5] ^= 0x10; 127 sig[len - 5] ^= 0x10;
128 ASSERT_INT_NE(sshkey_verify(k, sig, len, d, l, 0), 0); 128 ASSERT_INT_NE(sshkey_verify(k, sig, len, d, l, NULL, 0), 0);
129 free(sig); 129 free(sig);
130} 130}
131 131
diff --git a/regress/unittests/test_helper/test_helper.c b/regress/unittests/test_helper/test_helper.c
index f855137fb..866f3495d 100644
--- a/regress/unittests/test_helper/test_helper.c
+++ b/regress/unittests/test_helper/test_helper.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: test_helper.c,v 1.7 2017/03/14 01:10:07 dtucker Exp $ */ 1/* $OpenBSD: test_helper.c,v 1.8 2018/02/08 08:46:20 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2011 Damien Miller <djm@mindrot.org> 3 * Copyright (c) 2011 Damien Miller <djm@mindrot.org>
4 * 4 *
@@ -166,6 +166,18 @@ main(int argc, char **argv)
166 return 0; 166 return 0;
167} 167}
168 168
169int
170test_is_verbose()
171{
172 return verbose_mode;
173}
174
175int
176test_is_quiet()
177{
178 return quiet_mode;
179}
180
169const char * 181const char *
170test_data_file(const char *name) 182test_data_file(const char *name)
171{ 183{
diff --git a/regress/unittests/test_helper/test_helper.h b/regress/unittests/test_helper/test_helper.h
index 615b7832b..6da0066e9 100644
--- a/regress/unittests/test_helper/test_helper.h
+++ b/regress/unittests/test_helper/test_helper.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: test_helper.h,v 1.7 2017/03/14 01:10:07 dtucker Exp $ */ 1/* $OpenBSD: test_helper.h,v 1.8 2018/02/08 08:46:20 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2011 Damien Miller <djm@mindrot.org> 3 * Copyright (c) 2011 Damien Miller <djm@mindrot.org>
4 * 4 *
@@ -43,6 +43,8 @@ void test_start(const char *n);
43void test_info(char *s, size_t len); 43void test_info(char *s, size_t len);
44void set_onerror_func(test_onerror_func_t *f, void *ctx); 44void set_onerror_func(test_onerror_func_t *f, void *ctx);
45void test_done(void); 45void test_done(void);
46int test_is_verbose(void);
47int test_is_quiet(void);
46void test_subtest_info(const char *fmt, ...) 48void test_subtest_info(const char *fmt, ...)
47 __attribute__((format(printf, 1, 2))); 49 __attribute__((format(printf, 1, 2)));
48void ssl_err_check(const char *file, int line); 50void ssl_err_check(const char *file, int line);
diff --git a/regress/unittests/utf8/Makefile b/regress/unittests/utf8/Makefile
index a975264fc..f8eec0484 100644
--- a/regress/unittests/utf8/Makefile
+++ b/regress/unittests/utf8/Makefile
@@ -1,7 +1,11 @@
1# $OpenBSD: Makefile,v 1.4 2016/11/01 13:43:27 tb Exp $ 1# $OpenBSD: Makefile,v 1.5 2017/12/21 00:41:22 djm Exp $
2 2
3PROG=test_utf8 3PROG=test_utf8
4SRCS=tests.c 4SRCS=tests.c
5
6# From usr.bin/ssh
7SRCS+=utf8.c atomicio.c
8
5REGRESS_TARGETS=run-regress-${PROG} 9REGRESS_TARGETS=run-regress-${PROG}
6 10
7run-regress-${PROG}: ${PROG} 11run-regress-${PROG}: ${PROG}
diff --git a/regress/yes-head.sh b/regress/yes-head.sh
index fce2f6580..2759eb8ce 100644
--- a/regress/yes-head.sh
+++ b/regress/yes-head.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: yes-head.sh,v 1.5 2015/03/03 22:35:19 markus Exp $ 1# $OpenBSD: yes-head.sh,v 1.6 2017/04/30 23:34:55 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="yes pipe head" 4tid="yes pipe head"
diff --git a/scp.0 b/scp.0
index 0cb7726c7..0089ed80f 100644
--- a/scp.0
+++ b/scp.0
@@ -5,8 +5,7 @@ NAME
5 5
6SYNOPSIS 6SYNOPSIS
7 scp [-346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] 7 scp [-346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
8 [-l limit] [-o ssh_option] [-P port] [-S program] 8 [-l limit] [-o ssh_option] [-P port] [-S program] source ... target
9 [[user@]host1:]file1 ... [[user@]host2:]file2
10 9
11DESCRIPTION 10DESCRIPTION
12 scp copies files between hosts on a network. It uses ssh(1) for data 11 scp copies files between hosts on a network. It uses ssh(1) for data
@@ -14,11 +13,14 @@ DESCRIPTION
14 as ssh(1). scp will ask for passwords or passphrases if they are needed 13 as ssh(1). scp will ask for passwords or passphrases if they are needed
15 for authentication. 14 for authentication.
16 15
17 File names may contain a user and host specification to indicate that the 16 The source and target may be specified as a local pathname, a remote host
18 file is to be copied to/from that host. Local file names can be made 17 with optional path in the form [user@]host:[path], or a URI in the form
19 explicit using absolute or relative pathnames to avoid scp treating file 18 scp://[user@]host[:port][/path]. Local file names can be made explicit
20 names containing M-bM-^@M-^X:M-bM-^@M-^Y as host specifiers. Copies between two remote hosts 19 using absolute or relative pathnames to avoid scp treating file names
21 are also permitted. 20 containing M-bM-^@M-^X:M-bM-^@M-^Y as host specifiers.
21
22 When copying between two remote hosts, if the URI format is used, a port
23 may only be specified on the target if the -3 option is used.
22 24
23 The options are as follows: 25 The options are as follows:
24 26
@@ -63,6 +65,7 @@ DESCRIPTION
63 AddressFamily 65 AddressFamily
64 BatchMode 66 BatchMode
65 BindAddress 67 BindAddress
68 BindInterface
66 CanonicalDomains 69 CanonicalDomains
67 CanonicalizeFallbackLocal 70 CanonicalizeFallbackLocal
68 CanonicalizeHostname 71 CanonicalizeHostname
@@ -156,4 +159,4 @@ AUTHORS
156 Timo Rinne <tri@iki.fi> 159 Timo Rinne <tri@iki.fi>
157 Tatu Ylonen <ylo@cs.hut.fi> 160 Tatu Ylonen <ylo@cs.hut.fi>
158 161
159OpenBSD 6.2 May 3, 2017 OpenBSD 6.2 162OpenBSD 6.2 February 23, 2018 OpenBSD 6.2
diff --git a/scp.1 b/scp.1
index 76ce33361..8d251e34a 100644
--- a/scp.1
+++ b/scp.1
@@ -8,9 +8,9 @@
8.\" 8.\"
9.\" Created: Sun May 7 00:14:37 1995 ylo 9.\" Created: Sun May 7 00:14:37 1995 ylo
10.\" 10.\"
11.\" $OpenBSD: scp.1,v 1.74 2017/05/03 21:49:18 naddy Exp $ 11.\" $OpenBSD: scp.1,v 1.77 2018/02/23 07:38:09 jmc Exp $
12.\" 12.\"
13.Dd $Mdocdate: May 3 2017 $ 13.Dd $Mdocdate: February 23 2018 $
14.Dt SCP 1 14.Dt SCP 1
15.Os 15.Os
16.Sh NAME 16.Sh NAME
@@ -18,7 +18,6 @@
18.Nd secure copy (remote file copy program) 18.Nd secure copy (remote file copy program)
19.Sh SYNOPSIS 19.Sh SYNOPSIS
20.Nm scp 20.Nm scp
21.Bk -words
22.Op Fl 346BCpqrv 21.Op Fl 346BCpqrv
23.Op Fl c Ar cipher 22.Op Fl c Ar cipher
24.Op Fl F Ar ssh_config 23.Op Fl F Ar ssh_config
@@ -27,20 +26,7 @@
27.Op Fl o Ar ssh_option 26.Op Fl o Ar ssh_option
28.Op Fl P Ar port 27.Op Fl P Ar port
29.Op Fl S Ar program 28.Op Fl S Ar program
30.Sm off 29.Ar source ... target
31.Oo
32.Op Ar user No @
33.Ar host1 :
34.Oc Ar file1
35.Sm on
36.Ar ...
37.Sm off
38.Oo
39.Op Ar user No @
40.Ar host2 :
41.Oc Ar file2
42.Sm on
43.Ek
44.Sh DESCRIPTION 30.Sh DESCRIPTION
45.Nm 31.Nm
46copies files between hosts on a network. 32copies files between hosts on a network.
@@ -53,15 +39,33 @@ same security as
53will ask for passwords or passphrases if they are needed for 39will ask for passwords or passphrases if they are needed for
54authentication. 40authentication.
55.Pp 41.Pp
56File names may contain a user and host specification to indicate 42The
57that the file is to be copied to/from that host. 43.Ar source
44and
45.Ar target
46may be specified as a local pathname, a remote host with optional path
47in the form
48.Sm off
49.Oo user @ Oc host : Op path ,
50.Sm on
51or a URI in the form
52.Sm off
53.No scp:// Oo user @ Oc host Oo : port Oc Op / path .
54.Sm on
58Local file names can be made explicit using absolute or relative pathnames 55Local file names can be made explicit using absolute or relative pathnames
59to avoid 56to avoid
60.Nm 57.Nm
61treating file names containing 58treating file names containing
62.Sq :\& 59.Sq :\&
63as host specifiers. 60as host specifiers.
64Copies between two remote hosts are also permitted. 61.Pp
62When copying between two remote hosts, if the URI format is used, a
63.Ar port
64may only be specified on the
65.Ar target
66if the
67.Fl 3
68option is used.
65.Pp 69.Pp
66The options are as follows: 70The options are as follows:
67.Bl -tag -width Ds 71.Bl -tag -width Ds
@@ -120,6 +124,7 @@ For full details of the options listed below, and their possible values, see
120.It AddressFamily 124.It AddressFamily
121.It BatchMode 125.It BatchMode
122.It BindAddress 126.It BindAddress
127.It BindInterface
123.It CanonicalDomains 128.It CanonicalDomains
124.It CanonicalizeFallbackLocal 129.It CanonicalizeFallbackLocal
125.It CanonicalizeHostname 130.It CanonicalizeHostname
diff --git a/scp.c b/scp.c
index 12e3199d8..2bbf6938e 100644
--- a/scp.c
+++ b/scp.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: scp.c,v 1.192 2017/05/31 09:15:42 deraadt Exp $ */ 1/* $OpenBSD: scp.c,v 1.195 2018/02/10 06:15:12 djm Exp $ */
2/* 2/*
3 * scp - secure remote copy. This is basically patched BSD rcp which 3 * scp - secure remote copy. This is basically patched BSD rcp which
4 * uses ssh to do the data transfer (instead of using rcmd). 4 * uses ssh to do the data transfer (instead of using rcmd).
@@ -112,6 +112,7 @@
112#endif 112#endif
113 113
114#include "xmalloc.h" 114#include "xmalloc.h"
115#include "ssh.h"
115#include "atomicio.h" 116#include "atomicio.h"
116#include "pathnames.h" 117#include "pathnames.h"
117#include "log.h" 118#include "log.h"
@@ -123,8 +124,8 @@ extern char *__progname;
123 124
124#define COPY_BUFLEN 16384 125#define COPY_BUFLEN 16384
125 126
126int do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout); 127int do_cmd(char *host, char *remuser, int port, char *cmd, int *fdin, int *fdout);
127int do_cmd2(char *host, char *remuser, char *cmd, int fdin, int fdout); 128int do_cmd2(char *host, char *remuser, int port, char *cmd, int fdin, int fdout);
128 129
129/* Struct for addargs */ 130/* Struct for addargs */
130arglist args; 131arglist args;
@@ -149,6 +150,9 @@ int showprogress = 1;
149 */ 150 */
150int throughlocal = 0; 151int throughlocal = 0;
151 152
153/* Non-standard port to use for the ssh connection or -1. */
154int sshport = -1;
155
152/* This is the program to execute for the secured connection. ("ssh" or -S) */ 156/* This is the program to execute for the secured connection. ("ssh" or -S) */
153char *ssh_program = _PATH_SSH_PROGRAM; 157char *ssh_program = _PATH_SSH_PROGRAM;
154 158
@@ -239,7 +243,7 @@ do_local_cmd(arglist *a)
239 */ 243 */
240 244
241int 245int
242do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout) 246do_cmd(char *host, char *remuser, int port, char *cmd, int *fdin, int *fdout)
243{ 247{
244 int pin[2], pout[2], reserved[2]; 248 int pin[2], pout[2], reserved[2];
245 249
@@ -249,6 +253,9 @@ do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout)
249 ssh_program, host, 253 ssh_program, host,
250 remuser ? remuser : "(unspecified)", cmd); 254 remuser ? remuser : "(unspecified)", cmd);
251 255
256 if (port == -1)
257 port = sshport;
258
252 /* 259 /*
253 * Reserve two descriptors so that the real pipes won't get 260 * Reserve two descriptors so that the real pipes won't get
254 * descriptors 0 and 1 because that will screw up dup2 below. 261 * descriptors 0 and 1 because that will screw up dup2 below.
@@ -282,6 +289,10 @@ do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout)
282 close(pout[1]); 289 close(pout[1]);
283 290
284 replacearg(&args, 0, "%s", ssh_program); 291 replacearg(&args, 0, "%s", ssh_program);
292 if (port != -1) {
293 addargs(&args, "-p");
294 addargs(&args, "%d", port);
295 }
285 if (remuser != NULL) { 296 if (remuser != NULL) {
286 addargs(&args, "-l"); 297 addargs(&args, "-l");
287 addargs(&args, "%s", remuser); 298 addargs(&args, "%s", remuser);
@@ -313,7 +324,7 @@ do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout)
313 * This way the input and output of two commands can be connected. 324 * This way the input and output of two commands can be connected.
314 */ 325 */
315int 326int
316do_cmd2(char *host, char *remuser, char *cmd, int fdin, int fdout) 327do_cmd2(char *host, char *remuser, int port, char *cmd, int fdin, int fdout)
317{ 328{
318 pid_t pid; 329 pid_t pid;
319 int status; 330 int status;
@@ -324,6 +335,9 @@ do_cmd2(char *host, char *remuser, char *cmd, int fdin, int fdout)
324 ssh_program, host, 335 ssh_program, host,
325 remuser ? remuser : "(unspecified)", cmd); 336 remuser ? remuser : "(unspecified)", cmd);
326 337
338 if (port == -1)
339 port = sshport;
340
327 /* Fork a child to execute the command on the remote host using ssh. */ 341 /* Fork a child to execute the command on the remote host using ssh. */
328 pid = fork(); 342 pid = fork();
329 if (pid == 0) { 343 if (pid == 0) {
@@ -331,6 +345,10 @@ do_cmd2(char *host, char *remuser, char *cmd, int fdin, int fdout)
331 dup2(fdout, 1); 345 dup2(fdout, 1);
332 346
333 replacearg(&args, 0, "%s", ssh_program); 347 replacearg(&args, 0, "%s", ssh_program);
348 if (port != -1) {
349 addargs(&args, "-p");
350 addargs(&args, "%d", port);
351 }
334 if (remuser != NULL) { 352 if (remuser != NULL) {
335 addargs(&args, "-l"); 353 addargs(&args, "-l");
336 addargs(&args, "%s", remuser); 354 addargs(&args, "%s", remuser);
@@ -375,14 +393,14 @@ void rsource(char *, struct stat *);
375void sink(int, char *[]); 393void sink(int, char *[]);
376void source(int, char *[]); 394void source(int, char *[]);
377void tolocal(int, char *[]); 395void tolocal(int, char *[]);
378void toremote(char *, int, char *[]); 396void toremote(int, char *[]);
379void usage(void); 397void usage(void);
380 398
381int 399int
382main(int argc, char **argv) 400main(int argc, char **argv)
383{ 401{
384 int ch, fflag, tflag, status, n; 402 int ch, fflag, tflag, status, n;
385 char *targ, **newargv; 403 char **newargv;
386 const char *errstr; 404 const char *errstr;
387 extern char *optarg; 405 extern char *optarg;
388 extern int optind; 406 extern int optind;
@@ -408,6 +426,8 @@ main(int argc, char **argv)
408 addargs(&args, "-oForwardAgent=no"); 426 addargs(&args, "-oForwardAgent=no");
409 addargs(&args, "-oPermitLocalCommand=no"); 427 addargs(&args, "-oPermitLocalCommand=no");
410 addargs(&args, "-oClearAllForwardings=yes"); 428 addargs(&args, "-oClearAllForwardings=yes");
429 addargs(&args, "-oRemoteCommand=none");
430 addargs(&args, "-oRequestTTY=no");
411 431
412 fflag = tflag = 0; 432 fflag = tflag = 0;
413 while ((ch = getopt(argc, argv, "dfl:prtvBCc:i:P:q12346S:o:F:")) != -1) 433 while ((ch = getopt(argc, argv, "dfl:prtvBCc:i:P:q12346S:o:F:")) != -1)
@@ -438,10 +458,9 @@ main(int argc, char **argv)
438 addargs(&args, "%s", optarg); 458 addargs(&args, "%s", optarg);
439 break; 459 break;
440 case 'P': 460 case 'P':
441 addargs(&remote_remote_args, "-p"); 461 sshport = a2port(optarg);
442 addargs(&remote_remote_args, "%s", optarg); 462 if (sshport <= 0)
443 addargs(&args, "-p"); 463 fatal("bad port \"%s\"\n", optarg);
444 addargs(&args, "%s", optarg);
445 break; 464 break;
446 case 'B': 465 case 'B':
447 addargs(&remote_remote_args, "-oBatchmode=yes"); 466 addargs(&remote_remote_args, "-oBatchmode=yes");
@@ -541,8 +560,8 @@ main(int argc, char **argv)
541 560
542 (void) signal(SIGPIPE, lostconn); 561 (void) signal(SIGPIPE, lostconn);
543 562
544 if ((targ = colon(argv[argc - 1]))) /* Dest is remote host. */ 563 if (colon(argv[argc - 1])) /* Dest is remote host. */
545 toremote(targ, argc, argv); 564 toremote(argc, argv);
546 else { 565 else {
547 if (targetshouldbedirectory) 566 if (targetshouldbedirectory)
548 verifydir(argv[argc - 1]); 567 verifydir(argv[argc - 1]);
@@ -597,72 +616,90 @@ do_times(int fd, int verb, const struct stat *sb)
597 return (response()); 616 return (response());
598} 617}
599 618
619static int
620parse_scp_uri(const char *uri, char **userp, char **hostp, int *portp,
621 char **pathp)
622{
623 int r;
624
625 r = parse_uri("scp", uri, userp, hostp, portp, pathp);
626 if (r == 0 && *pathp == NULL)
627 *pathp = xstrdup(".");
628 return r;
629}
630
600void 631void
601toremote(char *targ, int argc, char **argv) 632toremote(int argc, char **argv)
602{ 633{
603 char *bp, *host, *src, *suser, *thost, *tuser, *arg; 634 char *suser = NULL, *host = NULL, *src = NULL;
635 char *bp, *tuser, *thost, *targ;
636 int sport = -1, tport = -1;
604 arglist alist; 637 arglist alist;
605 int i; 638 int i, r;
606 u_int j; 639 u_int j;
607 640
608 memset(&alist, '\0', sizeof(alist)); 641 memset(&alist, '\0', sizeof(alist));
609 alist.list = NULL; 642 alist.list = NULL;
610 643
611 *targ++ = 0; 644 /* Parse target */
612 if (*targ == 0) 645 r = parse_scp_uri(argv[argc - 1], &tuser, &thost, &tport, &targ);
613 targ = "."; 646 if (r == -1) {
614 647 fmprintf(stderr, "%s: invalid uri\n", argv[argc - 1]);
615 arg = xstrdup(argv[argc - 1]); 648 ++errs;
616 if ((thost = strrchr(arg, '@'))) { 649 goto out;
617 /* user@host */ 650 }
618 *thost++ = 0; 651 if (r != 0) {
619 tuser = arg; 652 if (parse_user_host_path(argv[argc - 1], &tuser, &thost,
620 if (*tuser == '\0') 653 &targ) == -1) {
621 tuser = NULL; 654 fmprintf(stderr, "%s: invalid target\n", argv[argc - 1]);
622 } else { 655 ++errs;
623 thost = arg; 656 goto out;
624 tuser = NULL; 657 }
625 } 658 }
626
627 if (tuser != NULL && !okname(tuser)) { 659 if (tuser != NULL && !okname(tuser)) {
628 free(arg); 660 ++errs;
629 return; 661 goto out;
630 } 662 }
631 663
664 /* Parse source files */
632 for (i = 0; i < argc - 1; i++) { 665 for (i = 0; i < argc - 1; i++) {
633 src = colon(argv[i]); 666 free(suser);
634 if (src && throughlocal) { /* extended remote to remote */ 667 free(host);
635 *src++ = 0; 668 free(src);
636 if (*src == 0) 669 r = parse_scp_uri(argv[i], &suser, &host, &sport, &src);
637 src = "."; 670 if (r == -1) {
638 host = strrchr(argv[i], '@'); 671 fmprintf(stderr, "%s: invalid uri\n", argv[i]);
639 if (host) { 672 ++errs;
640 *host++ = 0; 673 continue;
641 host = cleanhostname(host); 674 }
642 suser = argv[i]; 675 if (r != 0) {
643 if (*suser == '\0') 676 parse_user_host_path(argv[i], &suser, &host, &src);
644 suser = pwd->pw_name; 677 }
645 else if (!okname(suser)) 678 if (suser != NULL && !okname(suser)) {
646 continue; 679 ++errs;
647 } else { 680 continue;
648 host = cleanhostname(argv[i]); 681 }
649 suser = NULL; 682 if (host && throughlocal) { /* extended remote to remote */
650 }
651 xasprintf(&bp, "%s -f %s%s", cmd, 683 xasprintf(&bp, "%s -f %s%s", cmd,
652 *src == '-' ? "-- " : "", src); 684 *src == '-' ? "-- " : "", src);
653 if (do_cmd(host, suser, bp, &remin, &remout) < 0) 685 if (do_cmd(host, suser, sport, bp, &remin, &remout) < 0)
654 exit(1); 686 exit(1);
655 free(bp); 687 free(bp);
656 host = cleanhostname(thost);
657 xasprintf(&bp, "%s -t %s%s", cmd, 688 xasprintf(&bp, "%s -t %s%s", cmd,
658 *targ == '-' ? "-- " : "", targ); 689 *targ == '-' ? "-- " : "", targ);
659 if (do_cmd2(host, tuser, bp, remin, remout) < 0) 690 if (do_cmd2(thost, tuser, tport, bp, remin, remout) < 0)
660 exit(1); 691 exit(1);
661 free(bp); 692 free(bp);
662 (void) close(remin); 693 (void) close(remin);
663 (void) close(remout); 694 (void) close(remout);
664 remin = remout = -1; 695 remin = remout = -1;
665 } else if (src) { /* standard remote to remote */ 696 } else if (host) { /* standard remote to remote */
697 if (tport != -1 && tport != SSH_DEFAULT_PORT) {
698 /* This would require the remote support URIs */
699 fatal("target port not supported with two "
700 "remote hosts without the -3 option");
701 }
702
666 freeargs(&alist); 703 freeargs(&alist);
667 addargs(&alist, "%s", ssh_program); 704 addargs(&alist, "%s", ssh_program);
668 addargs(&alist, "-x"); 705 addargs(&alist, "-x");
@@ -672,23 +709,14 @@ toremote(char *targ, int argc, char **argv)
672 addargs(&alist, "%s", 709 addargs(&alist, "%s",
673 remote_remote_args.list[j]); 710 remote_remote_args.list[j]);
674 } 711 }
675 *src++ = 0; 712
676 if (*src == 0) 713 if (sport != -1) {
677 src = "."; 714 addargs(&alist, "-p");
678 host = strrchr(argv[i], '@'); 715 addargs(&alist, "%d", sport);
679 716 }
680 if (host) { 717 if (suser) {
681 *host++ = 0;
682 host = cleanhostname(host);
683 suser = argv[i];
684 if (*suser == '\0')
685 suser = pwd->pw_name;
686 else if (!okname(suser))
687 continue;
688 addargs(&alist, "-l"); 718 addargs(&alist, "-l");
689 addargs(&alist, "%s", suser); 719 addargs(&alist, "%s", suser);
690 } else {
691 host = cleanhostname(argv[i]);
692 } 720 }
693 addargs(&alist, "--"); 721 addargs(&alist, "--");
694 addargs(&alist, "%s", host); 722 addargs(&alist, "%s", host);
@@ -703,8 +731,7 @@ toremote(char *targ, int argc, char **argv)
703 if (remin == -1) { 731 if (remin == -1) {
704 xasprintf(&bp, "%s -t %s%s", cmd, 732 xasprintf(&bp, "%s -t %s%s", cmd,
705 *targ == '-' ? "-- " : "", targ); 733 *targ == '-' ? "-- " : "", targ);
706 host = cleanhostname(thost); 734 if (do_cmd(thost, tuser, tport, bp, &remin,
707 if (do_cmd(host, tuser, bp, &remin,
708 &remout) < 0) 735 &remout) < 0)
709 exit(1); 736 exit(1);
710 if (response() < 0) 737 if (response() < 0)
@@ -714,21 +741,42 @@ toremote(char *targ, int argc, char **argv)
714 source(1, argv + i); 741 source(1, argv + i);
715 } 742 }
716 } 743 }
717 free(arg); 744out:
745 free(tuser);
746 free(thost);
747 free(targ);
748 free(suser);
749 free(host);
750 free(src);
718} 751}
719 752
720void 753void
721tolocal(int argc, char **argv) 754tolocal(int argc, char **argv)
722{ 755{
723 char *bp, *host, *src, *suser; 756 char *bp, *host = NULL, *src = NULL, *suser = NULL;
724 arglist alist; 757 arglist alist;
725 int i; 758 int i, r, sport = -1;
726 759
727 memset(&alist, '\0', sizeof(alist)); 760 memset(&alist, '\0', sizeof(alist));
728 alist.list = NULL; 761 alist.list = NULL;
729 762
730 for (i = 0; i < argc - 1; i++) { 763 for (i = 0; i < argc - 1; i++) {
731 if (!(src = colon(argv[i]))) { /* Local to local. */ 764 free(suser);
765 free(host);
766 free(src);
767 r = parse_scp_uri(argv[i], &suser, &host, &sport, &src);
768 if (r == -1) {
769 fmprintf(stderr, "%s: invalid uri\n", argv[i]);
770 ++errs;
771 continue;
772 }
773 if (r != 0)
774 parse_user_host_path(argv[i], &suser, &host, &src);
775 if (suser != NULL && !okname(suser)) {
776 ++errs;
777 continue;
778 }
779 if (!host) { /* Local to local. */
732 freeargs(&alist); 780 freeargs(&alist);
733 addargs(&alist, "%s", _PATH_CP); 781 addargs(&alist, "%s", _PATH_CP);
734 if (iamrecursive) 782 if (iamrecursive)
@@ -742,22 +790,10 @@ tolocal(int argc, char **argv)
742 ++errs; 790 ++errs;
743 continue; 791 continue;
744 } 792 }
745 *src++ = 0; 793 /* Remote to local. */
746 if (*src == 0)
747 src = ".";
748 if ((host = strrchr(argv[i], '@')) == NULL) {
749 host = argv[i];
750 suser = NULL;
751 } else {
752 *host++ = 0;
753 suser = argv[i];
754 if (*suser == '\0')
755 suser = pwd->pw_name;
756 }
757 host = cleanhostname(host);
758 xasprintf(&bp, "%s -f %s%s", 794 xasprintf(&bp, "%s -f %s%s",
759 cmd, *src == '-' ? "-- " : "", src); 795 cmd, *src == '-' ? "-- " : "", src);
760 if (do_cmd(host, suser, bp, &remin, &remout) < 0) { 796 if (do_cmd(host, suser, sport, bp, &remin, &remout) < 0) {
761 free(bp); 797 free(bp);
762 ++errs; 798 ++errs;
763 continue; 799 continue;
@@ -767,6 +803,9 @@ tolocal(int argc, char **argv)
767 (void) close(remin); 803 (void) close(remin);
768 remin = remout = -1; 804 remin = remout = -1;
769 } 805 }
806 free(suser);
807 free(host);
808 free(src);
770} 809}
771 810
772void 811void
@@ -1283,8 +1322,7 @@ usage(void)
1283{ 1322{
1284 (void) fprintf(stderr, 1323 (void) fprintf(stderr,
1285 "usage: scp [-346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]\n" 1324 "usage: scp [-346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]\n"
1286 " [-l limit] [-o ssh_option] [-P port] [-S program]\n" 1325 " [-l limit] [-o ssh_option] [-P port] [-S program] source ... target\n");
1287 " [[user@]host1:]file1 ... [[user@]host2:]file2\n");
1288 exit(1); 1326 exit(1);
1289} 1327}
1290 1328
diff --git a/servconf.c b/servconf.c
index 9daa182c0..0a8f6fd62 100644
--- a/servconf.c
+++ b/servconf.c
@@ -1,5 +1,5 @@
1 1
2/* $OpenBSD: servconf.c,v 1.313 2017/10/04 18:49:30 djm Exp $ */ 2/* $OpenBSD: servconf.c,v 1.326 2018/03/01 20:32:16 markus Exp $ */
3/* 3/*
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
5 * All rights reserved 5 * All rights reserved
@@ -15,10 +15,16 @@
15 15
16#include <sys/types.h> 16#include <sys/types.h>
17#include <sys/socket.h> 17#include <sys/socket.h>
18#ifdef HAVE_SYS_SYSCTL_H
19#include <sys/sysctl.h>
20#endif
18 21
19#include <netinet/in.h> 22#include <netinet/in.h>
20#include <netinet/in_systm.h> 23#include <netinet/in_systm.h>
21#include <netinet/ip.h> 24#include <netinet/ip.h>
25#ifdef HAVE_NET_ROUTE_H
26#include <net/route.h>
27#endif
22 28
23#include <ctype.h> 29#include <ctype.h>
24#include <netdb.h> 30#include <netdb.h>
@@ -58,8 +64,10 @@
58#include "myproposal.h" 64#include "myproposal.h"
59#include "digest.h" 65#include "digest.h"
60 66
61static void add_listen_addr(ServerOptions *, char *, int); 67static void add_listen_addr(ServerOptions *, const char *,
62static void add_one_listen_addr(ServerOptions *, char *, int); 68 const char *, int);
69static void add_one_listen_addr(ServerOptions *, const char *,
70 const char *, int);
63 71
64/* Use of privilege separation or not */ 72/* Use of privilege separation or not */
65extern int use_privsep; 73extern int use_privsep;
@@ -81,7 +89,9 @@ initialize_server_options(ServerOptions *options)
81 options->queued_listen_addrs = NULL; 89 options->queued_listen_addrs = NULL;
82 options->num_queued_listens = 0; 90 options->num_queued_listens = 0;
83 options->listen_addrs = NULL; 91 options->listen_addrs = NULL;
92 options->num_listen_addrs = 0;
84 options->address_family = -1; 93 options->address_family = -1;
94 options->routing_domain = NULL;
85 options->num_host_key_files = 0; 95 options->num_host_key_files = 0;
86 options->num_host_cert_files = 0; 96 options->num_host_cert_files = 0;
87 options->host_key_agent = NULL; 97 options->host_key_agent = NULL;
@@ -191,10 +201,45 @@ assemble_algorithms(ServerOptions *o)
191 fatal("kex_assemble_names failed"); 201 fatal("kex_assemble_names failed");
192} 202}
193 203
204static void
205array_append(const char *file, const int line, const char *directive,
206 char ***array, u_int *lp, const char *s)
207{
208
209 if (*lp >= INT_MAX)
210 fatal("%s line %d: Too many %s entries", file, line, directive);
211
212 *array = xrecallocarray(*array, *lp, *lp + 1, sizeof(**array));
213 (*array)[*lp] = xstrdup(s);
214 (*lp)++;
215}
216
217void
218servconf_add_hostkey(const char *file, const int line,
219 ServerOptions *options, const char *path)
220{
221 char *apath = derelativise_path(path);
222
223 array_append(file, line, "HostKey",
224 &options->host_key_files, &options->num_host_key_files, apath);
225 free(apath);
226}
227
228void
229servconf_add_hostcert(const char *file, const int line,
230 ServerOptions *options, const char *path)
231{
232 char *apath = derelativise_path(path);
233
234 array_append(file, line, "HostCertificate",
235 &options->host_cert_files, &options->num_host_cert_files, apath);
236 free(apath);
237}
238
194void 239void
195fill_default_server_options(ServerOptions *options) 240fill_default_server_options(ServerOptions *options)
196{ 241{
197 int i; 242 u_int i;
198 243
199 /* Portable-specific options */ 244 /* Portable-specific options */
200 if (options->use_pam == -1) 245 if (options->use_pam == -1)
@@ -203,14 +248,18 @@ fill_default_server_options(ServerOptions *options)
203 /* Standard Options */ 248 /* Standard Options */
204 if (options->num_host_key_files == 0) { 249 if (options->num_host_key_files == 0) {
205 /* fill default hostkeys for protocols */ 250 /* fill default hostkeys for protocols */
206 options->host_key_files[options->num_host_key_files++] = 251 servconf_add_hostkey("[default]", 0, options,
207 _PATH_HOST_RSA_KEY_FILE; 252 _PATH_HOST_RSA_KEY_FILE);
208#ifdef OPENSSL_HAS_ECC 253#ifdef OPENSSL_HAS_ECC
209 options->host_key_files[options->num_host_key_files++] = 254 servconf_add_hostkey("[default]", 0, options,
210 _PATH_HOST_ECDSA_KEY_FILE; 255 _PATH_HOST_ECDSA_KEY_FILE);
211#endif 256#endif
212 options->host_key_files[options->num_host_key_files++] = 257 servconf_add_hostkey("[default]", 0, options,
213 _PATH_HOST_ED25519_KEY_FILE; 258 _PATH_HOST_ED25519_KEY_FILE);
259#ifdef WITH_XMSS
260 servconf_add_hostkey("[default]", 0, options,
261 _PATH_HOST_XMSS_KEY_FILE);
262#endif /* WITH_XMSS */
214 } 263 }
215 /* No certificates by default */ 264 /* No certificates by default */
216 if (options->num_ports == 0) 265 if (options->num_ports == 0)
@@ -218,7 +267,7 @@ fill_default_server_options(ServerOptions *options)
218 if (options->address_family == -1) 267 if (options->address_family == -1)
219 options->address_family = AF_UNSPEC; 268 options->address_family = AF_UNSPEC;
220 if (options->listen_addrs == NULL) 269 if (options->listen_addrs == NULL)
221 add_listen_addr(options, NULL, 0); 270 add_listen_addr(options, NULL, NULL, 0);
222 if (options->pid_file == NULL) 271 if (options->pid_file == NULL)
223 options->pid_file = xstrdup(_PATH_SSH_DAEMON_PID_FILE); 272 options->pid_file = xstrdup(_PATH_SSH_DAEMON_PID_FILE);
224 if (options->login_grace_time == -1) 273 if (options->login_grace_time == -1)
@@ -318,10 +367,14 @@ fill_default_server_options(ServerOptions *options)
318 if (options->client_alive_count_max == -1) 367 if (options->client_alive_count_max == -1)
319 options->client_alive_count_max = 3; 368 options->client_alive_count_max = 3;
320 if (options->num_authkeys_files == 0) { 369 if (options->num_authkeys_files == 0) {
321 options->authorized_keys_files[options->num_authkeys_files++] = 370 array_append("[default]", 0, "AuthorizedKeysFiles",
322 xstrdup(_PATH_SSH_USER_PERMITTED_KEYS); 371 &options->authorized_keys_files,
323 options->authorized_keys_files[options->num_authkeys_files++] = 372 &options->num_authkeys_files,
324 xstrdup(_PATH_SSH_USER_PERMITTED_KEYS2); 373 _PATH_SSH_USER_PERMITTED_KEYS);
374 array_append("[default]", 0, "AuthorizedKeysFiles",
375 &options->authorized_keys_files,
376 &options->num_authkeys_files,
377 _PATH_SSH_USER_PERMITTED_KEYS2);
325 } 378 }
326 if (options->permit_tun == -1) 379 if (options->permit_tun == -1)
327 options->permit_tun = SSH_TUNMODE_NO; 380 options->permit_tun = SSH_TUNMODE_NO;
@@ -365,6 +418,7 @@ fill_default_server_options(ServerOptions *options)
365 CLEAR_ON_NONE(options->authorized_principals_file); 418 CLEAR_ON_NONE(options->authorized_principals_file);
366 CLEAR_ON_NONE(options->adm_forced_command); 419 CLEAR_ON_NONE(options->adm_forced_command);
367 CLEAR_ON_NONE(options->chroot_directory); 420 CLEAR_ON_NONE(options->chroot_directory);
421 CLEAR_ON_NONE(options->routing_domain);
368 for (i = 0; i < options->num_host_key_files; i++) 422 for (i = 0; i < options->num_host_key_files; i++)
369 CLEAR_ON_NONE(options->host_key_files[i]); 423 CLEAR_ON_NONE(options->host_key_files[i]);
370 for (i = 0; i < options->num_host_cert_files; i++) 424 for (i = 0; i < options->num_host_cert_files; i++)
@@ -400,8 +454,7 @@ typedef enum {
400 sPermitRootLogin, sLogFacility, sLogLevel, 454 sPermitRootLogin, sLogFacility, sLogLevel,
401 sRhostsRSAAuthentication, sRSAAuthentication, 455 sRhostsRSAAuthentication, sRSAAuthentication,
402 sKerberosAuthentication, sKerberosOrLocalPasswd, sKerberosTicketCleanup, 456 sKerberosAuthentication, sKerberosOrLocalPasswd, sKerberosTicketCleanup,
403 sKerberosGetAFSToken, 457 sKerberosGetAFSToken, sChallengeResponseAuthentication,
404 sKerberosTgtPassing, sChallengeResponseAuthentication,
405 sPasswordAuthentication, sKbdInteractiveAuthentication, 458 sPasswordAuthentication, sKbdInteractiveAuthentication,
406 sListenAddress, sAddressFamily, 459 sListenAddress, sAddressFamily,
407 sPrintMotd, sPrintLastLog, sIgnoreRhosts, 460 sPrintMotd, sPrintLastLog, sIgnoreRhosts,
@@ -429,7 +482,7 @@ typedef enum {
429 sAuthenticationMethods, sHostKeyAgent, sPermitUserRC, 482 sAuthenticationMethods, sHostKeyAgent, sPermitUserRC,
430 sStreamLocalBindMask, sStreamLocalBindUnlink, 483 sStreamLocalBindMask, sStreamLocalBindUnlink,
431 sAllowStreamLocalForwarding, sFingerprintHash, sDisableForwarding, 484 sAllowStreamLocalForwarding, sFingerprintHash, sDisableForwarding,
432 sExposeAuthInfo, 485 sExposeAuthInfo, sRDomain,
433 sDebianBanner, 486 sDebianBanner,
434 sDeprecated, sIgnore, sUnsupported 487 sDeprecated, sIgnore, sUnsupported
435} ServerOpCodes; 488} ServerOpCodes;
@@ -584,6 +637,7 @@ static struct {
584 { "fingerprinthash", sFingerprintHash, SSHCFG_GLOBAL }, 637 { "fingerprinthash", sFingerprintHash, SSHCFG_GLOBAL },
585 { "disableforwarding", sDisableForwarding, SSHCFG_ALL }, 638 { "disableforwarding", sDisableForwarding, SSHCFG_ALL },
586 { "exposeauthinfo", sExposeAuthInfo, SSHCFG_ALL }, 639 { "exposeauthinfo", sExposeAuthInfo, SSHCFG_ALL },
640 { "rdomain", sRDomain, SSHCFG_ALL },
587 { "debianbanner", sDebianBanner, SSHCFG_GLOBAL }, 641 { "debianbanner", sDebianBanner, SSHCFG_GLOBAL },
588 { NULL, sBadOption, 0 } 642 { NULL, sBadOption, 0 }
589}; 643};
@@ -638,23 +692,51 @@ derelativise_path(const char *path)
638} 692}
639 693
640static void 694static void
641add_listen_addr(ServerOptions *options, char *addr, int port) 695add_listen_addr(ServerOptions *options, const char *addr,
696 const char *rdomain, int port)
642{ 697{
643 u_int i; 698 u_int i;
644 699
645 if (port == 0) 700 if (port > 0)
646 for (i = 0; i < options->num_ports; i++) 701 add_one_listen_addr(options, addr, rdomain, port);
647 add_one_listen_addr(options, addr, options->ports[i]); 702 else {
648 else 703 for (i = 0; i < options->num_ports; i++) {
649 add_one_listen_addr(options, addr, port); 704 add_one_listen_addr(options, addr, rdomain,
705 options->ports[i]);
706 }
707 }
650} 708}
651 709
652static void 710static void
653add_one_listen_addr(ServerOptions *options, char *addr, int port) 711add_one_listen_addr(ServerOptions *options, const char *addr,
712 const char *rdomain, int port)
654{ 713{
655 struct addrinfo hints, *ai, *aitop; 714 struct addrinfo hints, *ai, *aitop;
656 char strport[NI_MAXSERV]; 715 char strport[NI_MAXSERV];
657 int gaierr; 716 int gaierr;
717 u_int i;
718
719 /* Find listen_addrs entry for this rdomain */
720 for (i = 0; i < options->num_listen_addrs; i++) {
721 if (rdomain == NULL && options->listen_addrs[i].rdomain == NULL)
722 break;
723 if (rdomain == NULL || options->listen_addrs[i].rdomain == NULL)
724 continue;
725 if (strcmp(rdomain, options->listen_addrs[i].rdomain) == 0)
726 break;
727 }
728 if (i >= options->num_listen_addrs) {
729 /* No entry for this rdomain; allocate one */
730 if (i >= INT_MAX)
731 fatal("%s: too many listen addresses", __func__);
732 options->listen_addrs = xrecallocarray(options->listen_addrs,
733 options->num_listen_addrs, options->num_listen_addrs + 1,
734 sizeof(*options->listen_addrs));
735 i = options->num_listen_addrs++;
736 if (rdomain != NULL)
737 options->listen_addrs[i].rdomain = xstrdup(rdomain);
738 }
739 /* options->listen_addrs[i] points to the addresses for this rdomain */
658 740
659 memset(&hints, 0, sizeof(hints)); 741 memset(&hints, 0, sizeof(hints));
660 hints.ai_family = options->address_family; 742 hints.ai_family = options->address_family;
@@ -667,8 +749,44 @@ add_one_listen_addr(ServerOptions *options, char *addr, int port)
667 ssh_gai_strerror(gaierr)); 749 ssh_gai_strerror(gaierr));
668 for (ai = aitop; ai->ai_next; ai = ai->ai_next) 750 for (ai = aitop; ai->ai_next; ai = ai->ai_next)
669 ; 751 ;
670 ai->ai_next = options->listen_addrs; 752 ai->ai_next = options->listen_addrs[i].addrs;
671 options->listen_addrs = aitop; 753 options->listen_addrs[i].addrs = aitop;
754}
755
756/* Returns nonzero if the routing domain name is valid */
757static int
758valid_rdomain(const char *name)
759{
760#if defined(HAVE_SYS_VALID_RDOMAIN)
761 return sys_valid_rdomain(name);
762#elif defined(__OpenBSD__)
763 const char *errstr;
764 long long num;
765 struct rt_tableinfo info;
766 int mib[6];
767 size_t miblen = sizeof(mib);
768
769 if (name == NULL)
770 return 1;
771
772 num = strtonum(name, 0, 255, &errstr);
773 if (errstr != NULL)
774 return 0;
775
776 /* Check whether the table actually exists */
777 memset(mib, 0, sizeof(mib));
778 mib[0] = CTL_NET;
779 mib[1] = PF_ROUTE;
780 mib[4] = NET_RT_TABLE;
781 mib[5] = (int)num;
782 if (sysctl(mib, 6, &info, &miblen, NULL, 0) == -1)
783 return 0;
784
785 return 1;
786#else /* defined(__OpenBSD__) */
787 error("Routing domains are not supported on this platform");
788 return 0;
789#endif
672} 790}
673 791
674/* 792/*
@@ -676,18 +794,19 @@ add_one_listen_addr(ServerOptions *options, char *addr, int port)
676 * and AddressFamily options. 794 * and AddressFamily options.
677 */ 795 */
678static void 796static void
679queue_listen_addr(ServerOptions *options, char *addr, int port) 797queue_listen_addr(ServerOptions *options, const char *addr,
798 const char *rdomain, int port)
680{ 799{
681 options->queued_listen_addrs = xreallocarray( 800 struct queued_listenaddr *qla;
682 options->queued_listen_addrs, options->num_queued_listens + 1, 801
683 sizeof(addr)); 802 options->queued_listen_addrs = xrecallocarray(
684 options->queued_listen_ports = xreallocarray( 803 options->queued_listen_addrs,
685 options->queued_listen_ports, options->num_queued_listens + 1, 804 options->num_queued_listens, options->num_queued_listens + 1,
686 sizeof(port)); 805 sizeof(*options->queued_listen_addrs));
687 options->queued_listen_addrs[options->num_queued_listens] = 806 qla = &options->queued_listen_addrs[options->num_queued_listens++];
688 xstrdup(addr); 807 qla->addr = xstrdup(addr);
689 options->queued_listen_ports[options->num_queued_listens] = port; 808 qla->port = port;
690 options->num_queued_listens++; 809 qla->rdomain = rdomain == NULL ? NULL : xstrdup(rdomain);
691} 810}
692 811
693/* 812/*
@@ -697,6 +816,7 @@ static void
697process_queued_listen_addrs(ServerOptions *options) 816process_queued_listen_addrs(ServerOptions *options)
698{ 817{
699 u_int i; 818 u_int i;
819 struct queued_listenaddr *qla;
700 820
701 if (options->num_ports == 0) 821 if (options->num_ports == 0)
702 options->ports[options->num_ports++] = SSH_DEFAULT_PORT; 822 options->ports[options->num_ports++] = SSH_DEFAULT_PORT;
@@ -704,15 +824,13 @@ process_queued_listen_addrs(ServerOptions *options)
704 options->address_family = AF_UNSPEC; 824 options->address_family = AF_UNSPEC;
705 825
706 for (i = 0; i < options->num_queued_listens; i++) { 826 for (i = 0; i < options->num_queued_listens; i++) {
707 add_listen_addr(options, options->queued_listen_addrs[i], 827 qla = &options->queued_listen_addrs[i];
708 options->queued_listen_ports[i]); 828 add_listen_addr(options, qla->addr, qla->rdomain, qla->port);
709 free(options->queued_listen_addrs[i]); 829 free(qla->addr);
710 options->queued_listen_addrs[i] = NULL; 830 free(qla->rdomain);
711 } 831 }
712 free(options->queued_listen_addrs); 832 free(options->queued_listen_addrs);
713 options->queued_listen_addrs = NULL; 833 options->queued_listen_addrs = NULL;
714 free(options->queued_listen_ports);
715 options->queued_listen_ports = NULL;
716 options->num_queued_listens = 0; 834 options->num_queued_listens = 0;
717} 835}
718 836
@@ -766,6 +884,7 @@ get_connection_info(int populate, int use_dns)
766 ci.address = ssh_remote_ipaddr(ssh); 884 ci.address = ssh_remote_ipaddr(ssh);
767 ci.laddress = ssh_local_ipaddr(ssh); 885 ci.laddress = ssh_local_ipaddr(ssh);
768 ci.lport = ssh_local_port(ssh); 886 ci.lport = ssh_local_port(ssh);
887 ci.rdomain = ssh_packet_rdomain_in(ssh);
769 return &ci; 888 return &ci;
770} 889}
771 890
@@ -830,6 +949,13 @@ out:
830 return result; 949 return result;
831} 950}
832 951
952static void
953match_test_missing_fatal(const char *criteria, const char *attrib)
954{
955 fatal("'Match %s' in configuration but '%s' not in connection "
956 "test specification.", criteria, attrib);
957}
958
833/* 959/*
834 * All of the attributes on a single Match line are ANDed together, so we need 960 * All of the attributes on a single Match line are ANDed together, so we need
835 * to check every attribute and set the result to zero if any attribute does 961 * to check every attribute and set the result to zero if any attribute does
@@ -867,20 +993,24 @@ match_cfg_line(char **condition, int line, struct connection_info *ci)
867 return -1; 993 return -1;
868 } 994 }
869 if (strcasecmp(attrib, "user") == 0) { 995 if (strcasecmp(attrib, "user") == 0) {
870 if (ci == NULL || ci->user == NULL) { 996 if (ci == NULL) {
871 result = 0; 997 result = 0;
872 continue; 998 continue;
873 } 999 }
1000 if (ci->user == NULL)
1001 match_test_missing_fatal("User", "user");
874 if (match_pattern_list(ci->user, arg, 0) != 1) 1002 if (match_pattern_list(ci->user, arg, 0) != 1)
875 result = 0; 1003 result = 0;
876 else 1004 else
877 debug("user %.100s matched 'User %.100s' at " 1005 debug("user %.100s matched 'User %.100s' at "
878 "line %d", ci->user, arg, line); 1006 "line %d", ci->user, arg, line);
879 } else if (strcasecmp(attrib, "group") == 0) { 1007 } else if (strcasecmp(attrib, "group") == 0) {
880 if (ci == NULL || ci->user == NULL) { 1008 if (ci == NULL) {
881 result = 0; 1009 result = 0;
882 continue; 1010 continue;
883 } 1011 }
1012 if (ci->user == NULL)
1013 match_test_missing_fatal("Group", "user");
884 switch (match_cfg_line_group(arg, line, ci->user)) { 1014 switch (match_cfg_line_group(arg, line, ci->user)) {
885 case -1: 1015 case -1:
886 return -1; 1016 return -1;
@@ -888,20 +1018,24 @@ match_cfg_line(char **condition, int line, struct connection_info *ci)
888 result = 0; 1018 result = 0;
889 } 1019 }
890 } else if (strcasecmp(attrib, "host") == 0) { 1020 } else if (strcasecmp(attrib, "host") == 0) {
891 if (ci == NULL || ci->host == NULL) { 1021 if (ci == NULL) {
892 result = 0; 1022 result = 0;
893 continue; 1023 continue;
894 } 1024 }
1025 if (ci->host == NULL)
1026 match_test_missing_fatal("Host", "host");
895 if (match_hostname(ci->host, arg) != 1) 1027 if (match_hostname(ci->host, arg) != 1)
896 result = 0; 1028 result = 0;
897 else 1029 else
898 debug("connection from %.100s matched 'Host " 1030 debug("connection from %.100s matched 'Host "
899 "%.100s' at line %d", ci->host, arg, line); 1031 "%.100s' at line %d", ci->host, arg, line);
900 } else if (strcasecmp(attrib, "address") == 0) { 1032 } else if (strcasecmp(attrib, "address") == 0) {
901 if (ci == NULL || ci->address == NULL) { 1033 if (ci == NULL) {
902 result = 0; 1034 result = 0;
903 continue; 1035 continue;
904 } 1036 }
1037 if (ci->address == NULL)
1038 match_test_missing_fatal("Address", "addr");
905 switch (addr_match_list(ci->address, arg)) { 1039 switch (addr_match_list(ci->address, arg)) {
906 case 1: 1040 case 1:
907 debug("connection from %.100s matched 'Address " 1041 debug("connection from %.100s matched 'Address "
@@ -915,10 +1049,13 @@ match_cfg_line(char **condition, int line, struct connection_info *ci)
915 return -1; 1049 return -1;
916 } 1050 }
917 } else if (strcasecmp(attrib, "localaddress") == 0){ 1051 } else if (strcasecmp(attrib, "localaddress") == 0){
918 if (ci == NULL || ci->laddress == NULL) { 1052 if (ci == NULL) {
919 result = 0; 1053 result = 0;
920 continue; 1054 continue;
921 } 1055 }
1056 if (ci->laddress == NULL)
1057 match_test_missing_fatal("LocalAddress",
1058 "laddr");
922 switch (addr_match_list(ci->laddress, arg)) { 1059 switch (addr_match_list(ci->laddress, arg)) {
923 case 1: 1060 case 1:
924 debug("connection from %.100s matched " 1061 debug("connection from %.100s matched "
@@ -938,10 +1075,12 @@ match_cfg_line(char **condition, int line, struct connection_info *ci)
938 arg); 1075 arg);
939 return -1; 1076 return -1;
940 } 1077 }
941 if (ci == NULL || ci->lport == 0) { 1078 if (ci == NULL) {
942 result = 0; 1079 result = 0;
943 continue; 1080 continue;
944 } 1081 }
1082 if (ci->lport == 0)
1083 match_test_missing_fatal("LocalPort", "lport");
945 /* TODO support port lists */ 1084 /* TODO support port lists */
946 if (port == ci->lport) 1085 if (port == ci->lport)
947 debug("connection from %.100s matched " 1086 debug("connection from %.100s matched "
@@ -949,6 +1088,16 @@ match_cfg_line(char **condition, int line, struct connection_info *ci)
949 ci->laddress, port, line); 1088 ci->laddress, port, line);
950 else 1089 else
951 result = 0; 1090 result = 0;
1091 } else if (strcasecmp(attrib, "rdomain") == 0) {
1092 if (ci == NULL || ci->rdomain == NULL) {
1093 result = 0;
1094 continue;
1095 }
1096 if (match_pattern_list(ci->rdomain, arg, 0) != 1)
1097 result = 0;
1098 else
1099 debug("user %.100s matched 'RDomain %.100s' at "
1100 "line %d", ci->rdomain, arg, line);
952 } else { 1101 } else {
953 error("Unsupported Match attribute %s", attrib); 1102 error("Unsupported Match attribute %s", attrib);
954 return -1; 1103 return -1;
@@ -971,6 +1120,11 @@ struct multistate {
971 char *key; 1120 char *key;
972 int value; 1121 int value;
973}; 1122};
1123static const struct multistate multistate_flag[] = {
1124 { "yes", 1 },
1125 { "no", 0 },
1126 { NULL, -1 }
1127};
974static const struct multistate multistate_addressfamily[] = { 1128static const struct multistate multistate_addressfamily[] = {
975 { "inet", AF_INET }, 1129 { "inet", AF_INET },
976 { "inet6", AF_INET6 }, 1130 { "inet6", AF_INET6 },
@@ -1020,6 +1174,7 @@ process_server_config_line(ServerOptions *options, char *line,
1020 size_t len; 1174 size_t len;
1021 long long val64; 1175 long long val64;
1022 const struct multistate *multistate_ptr; 1176 const struct multistate *multistate_ptr;
1177 const char *errstr;
1023 1178
1024 /* Strip trailing whitespace. Allow \f (form feed) at EOL only */ 1179 /* Strip trailing whitespace. Allow \f (form feed) at EOL only */
1025 if ((len = strlen(line)) == 0) 1180 if ((len = strlen(line)) == 0)
@@ -1107,20 +1262,33 @@ process_server_config_line(ServerOptions *options, char *line,
1107 /* check for bare IPv6 address: no "[]" and 2 or more ":" */ 1262 /* check for bare IPv6 address: no "[]" and 2 or more ":" */
1108 if (strchr(arg, '[') == NULL && (p = strchr(arg, ':')) != NULL 1263 if (strchr(arg, '[') == NULL && (p = strchr(arg, ':')) != NULL
1109 && strchr(p+1, ':') != NULL) { 1264 && strchr(p+1, ':') != NULL) {
1110 queue_listen_addr(options, arg, 0);
1111 break;
1112 }
1113 p = hpdelim(&arg);
1114 if (p == NULL)
1115 fatal("%s line %d: bad address:port usage",
1116 filename, linenum);
1117 p = cleanhostname(p);
1118 if (arg == NULL)
1119 port = 0; 1265 port = 0;
1120 else if ((port = a2port(arg)) <= 0) 1266 p = arg;
1121 fatal("%s line %d: bad port number", filename, linenum); 1267 } else {
1268 p = hpdelim(&arg);
1269 if (p == NULL)
1270 fatal("%s line %d: bad address:port usage",
1271 filename, linenum);
1272 p = cleanhostname(p);
1273 if (arg == NULL)
1274 port = 0;
1275 else if ((port = a2port(arg)) <= 0)
1276 fatal("%s line %d: bad port number",
1277 filename, linenum);
1278 }
1279 /* Optional routing table */
1280 arg2 = NULL;
1281 if ((arg = strdelim(&cp)) != NULL) {
1282 if (strcmp(arg, "rdomain") != 0 ||
1283 (arg2 = strdelim(&cp)) == NULL)
1284 fatal("%s line %d: bad ListenAddress syntax",
1285 filename, linenum);
1286 if (!valid_rdomain(arg2))
1287 fatal("%s line %d: bad routing domain",
1288 filename, linenum);
1289 }
1122 1290
1123 queue_listen_addr(options, p, port); 1291 queue_listen_addr(options, p, arg2, port);
1124 1292
1125 break; 1293 break;
1126 1294
@@ -1147,22 +1315,12 @@ process_server_config_line(ServerOptions *options, char *line,
1147 break; 1315 break;
1148 1316
1149 case sHostKeyFile: 1317 case sHostKeyFile:
1150 intptr = &options->num_host_key_files;
1151 if (*intptr >= MAX_HOSTKEYS)
1152 fatal("%s line %d: too many host keys specified (max %d).",
1153 filename, linenum, MAX_HOSTKEYS);
1154 charptr = &options->host_key_files[*intptr];
1155 parse_filename:
1156 arg = strdelim(&cp); 1318 arg = strdelim(&cp);
1157 if (!arg || *arg == '\0') 1319 if (!arg || *arg == '\0')
1158 fatal("%s line %d: missing file name.", 1320 fatal("%s line %d: missing file name.",
1159 filename, linenum); 1321 filename, linenum);
1160 if (*activep && *charptr == NULL) { 1322 if (*activep)
1161 *charptr = derelativise_path(arg); 1323 servconf_add_hostkey(filename, linenum, options, arg);
1162 /* increase optional counter */
1163 if (intptr != NULL)
1164 *intptr = *intptr + 1;
1165 }
1166 break; 1324 break;
1167 1325
1168 case sHostKeyAgent: 1326 case sHostKeyAgent:
@@ -1177,17 +1335,28 @@ process_server_config_line(ServerOptions *options, char *line,
1177 break; 1335 break;
1178 1336
1179 case sHostCertificate: 1337 case sHostCertificate:
1180 intptr = &options->num_host_cert_files; 1338 arg = strdelim(&cp);
1181 if (*intptr >= MAX_HOSTKEYS) 1339 if (!arg || *arg == '\0')
1182 fatal("%s line %d: too many host certificates " 1340 fatal("%s line %d: missing file name.",
1183 "specified (max %d).", filename, linenum, 1341 filename, linenum);
1184 MAX_HOSTCERTS); 1342 if (*activep)
1185 charptr = &options->host_cert_files[*intptr]; 1343 servconf_add_hostcert(filename, linenum, options, arg);
1186 goto parse_filename; 1344 break;
1187 1345
1188 case sPidFile: 1346 case sPidFile:
1189 charptr = &options->pid_file; 1347 charptr = &options->pid_file;
1190 goto parse_filename; 1348 parse_filename:
1349 arg = strdelim(&cp);
1350 if (!arg || *arg == '\0')
1351 fatal("%s line %d: missing file name.",
1352 filename, linenum);
1353 if (*activep && *charptr == NULL) {
1354 *charptr = derelativise_path(arg);
1355 /* increase optional counter */
1356 if (intptr != NULL)
1357 *intptr = *intptr + 1;
1358 }
1359 break;
1191 1360
1192 case sPermitRootLogin: 1361 case sPermitRootLogin:
1193 intptr = &options->permit_root_login; 1362 intptr = &options->permit_root_login;
@@ -1197,21 +1366,8 @@ process_server_config_line(ServerOptions *options, char *line,
1197 case sIgnoreRhosts: 1366 case sIgnoreRhosts:
1198 intptr = &options->ignore_rhosts; 1367 intptr = &options->ignore_rhosts;
1199 parse_flag: 1368 parse_flag:
1200 arg = strdelim(&cp); 1369 multistate_ptr = multistate_flag;
1201 if (!arg || *arg == '\0') 1370 goto parse_multistate;
1202 fatal("%s line %d: missing yes/no argument.",
1203 filename, linenum);
1204 value = 0; /* silence compiler */
1205 if (strcmp(arg, "yes") == 0)
1206 value = 1;
1207 else if (strcmp(arg, "no") == 0)
1208 value = 0;
1209 else
1210 fatal("%s line %d: Bad yes/no argument: %s",
1211 filename, linenum, arg);
1212 if (*activep && *intptr == -1)
1213 *intptr = value;
1214 break;
1215 1371
1216 case sIgnoreUserKnownHosts: 1372 case sIgnoreUserKnownHosts:
1217 intptr = &options->ignore_user_known_hosts; 1373 intptr = &options->ignore_user_known_hosts;
@@ -1316,10 +1472,9 @@ process_server_config_line(ServerOptions *options, char *line,
1316 intptr = &options->x11_display_offset; 1472 intptr = &options->x11_display_offset;
1317 parse_int: 1473 parse_int:
1318 arg = strdelim(&cp); 1474 arg = strdelim(&cp);
1319 if (!arg || *arg == '\0') 1475 if ((errstr = atoi_err(arg, &value)) != NULL)
1320 fatal("%s line %d: missing integer value.", 1476 fatal("%s line %d: integer value %s.",
1321 filename, linenum); 1477 filename, linenum, errstr);
1322 value = atoi(arg);
1323 if (*activep && *intptr == -1) 1478 if (*activep && *intptr == -1)
1324 *intptr = value; 1479 *intptr = value;
1325 break; 1480 break;
@@ -1439,55 +1594,47 @@ process_server_config_line(ServerOptions *options, char *line,
1439 1594
1440 case sAllowUsers: 1595 case sAllowUsers:
1441 while ((arg = strdelim(&cp)) && *arg != '\0') { 1596 while ((arg = strdelim(&cp)) && *arg != '\0') {
1442 if (options->num_allow_users >= MAX_ALLOW_USERS)
1443 fatal("%s line %d: too many allow users.",
1444 filename, linenum);
1445 if (match_user(NULL, NULL, NULL, arg) == -1) 1597 if (match_user(NULL, NULL, NULL, arg) == -1)
1446 fatal("%s line %d: invalid AllowUsers pattern: " 1598 fatal("%s line %d: invalid AllowUsers pattern: "
1447 "\"%.100s\"", filename, linenum, arg); 1599 "\"%.100s\"", filename, linenum, arg);
1448 if (!*activep) 1600 if (!*activep)
1449 continue; 1601 continue;
1450 options->allow_users[options->num_allow_users++] = 1602 array_append(filename, linenum, "AllowUsers",
1451 xstrdup(arg); 1603 &options->allow_users, &options->num_allow_users,
1604 arg);
1452 } 1605 }
1453 break; 1606 break;
1454 1607
1455 case sDenyUsers: 1608 case sDenyUsers:
1456 while ((arg = strdelim(&cp)) && *arg != '\0') { 1609 while ((arg = strdelim(&cp)) && *arg != '\0') {
1457 if (options->num_deny_users >= MAX_DENY_USERS)
1458 fatal("%s line %d: too many deny users.",
1459 filename, linenum);
1460 if (match_user(NULL, NULL, NULL, arg) == -1) 1610 if (match_user(NULL, NULL, NULL, arg) == -1)
1461 fatal("%s line %d: invalid DenyUsers pattern: " 1611 fatal("%s line %d: invalid DenyUsers pattern: "
1462 "\"%.100s\"", filename, linenum, arg); 1612 "\"%.100s\"", filename, linenum, arg);
1463 if (!*activep) 1613 if (!*activep)
1464 continue; 1614 continue;
1465 options->deny_users[options->num_deny_users++] = 1615 array_append(filename, linenum, "DenyUsers",
1466 xstrdup(arg); 1616 &options->deny_users, &options->num_deny_users,
1617 arg);
1467 } 1618 }
1468 break; 1619 break;
1469 1620
1470 case sAllowGroups: 1621 case sAllowGroups:
1471 while ((arg = strdelim(&cp)) && *arg != '\0') { 1622 while ((arg = strdelim(&cp)) && *arg != '\0') {
1472 if (options->num_allow_groups >= MAX_ALLOW_GROUPS)
1473 fatal("%s line %d: too many allow groups.",
1474 filename, linenum);
1475 if (!*activep) 1623 if (!*activep)
1476 continue; 1624 continue;
1477 options->allow_groups[options->num_allow_groups++] = 1625 array_append(filename, linenum, "AllowGroups",
1478 xstrdup(arg); 1626 &options->allow_groups, &options->num_allow_groups,
1627 arg);
1479 } 1628 }
1480 break; 1629 break;
1481 1630
1482 case sDenyGroups: 1631 case sDenyGroups:
1483 while ((arg = strdelim(&cp)) && *arg != '\0') { 1632 while ((arg = strdelim(&cp)) && *arg != '\0') {
1484 if (options->num_deny_groups >= MAX_DENY_GROUPS)
1485 fatal("%s line %d: too many deny groups.",
1486 filename, linenum);
1487 if (!*activep) 1633 if (!*activep)
1488 continue; 1634 continue;
1489 options->deny_groups[options->num_deny_groups++] = 1635 array_append(filename, linenum, "DenyGroups",
1490 xstrdup(arg); 1636 &options->deny_groups, &options->num_deny_groups,
1637 arg);
1491 } 1638 }
1492 break; 1639 break;
1493 1640
@@ -1606,14 +1753,12 @@ process_server_config_line(ServerOptions *options, char *line,
1606 case sAuthorizedKeysFile: 1753 case sAuthorizedKeysFile:
1607 if (*activep && options->num_authkeys_files == 0) { 1754 if (*activep && options->num_authkeys_files == 0) {
1608 while ((arg = strdelim(&cp)) && *arg != '\0') { 1755 while ((arg = strdelim(&cp)) && *arg != '\0') {
1609 if (options->num_authkeys_files >= 1756 arg = tilde_expand_filename(arg, getuid());
1610 MAX_AUTHKEYS_FILES) 1757 array_append(filename, linenum,
1611 fatal("%s line %d: " 1758 "AuthorizedKeysFile",
1612 "too many authorized keys files.", 1759 &options->authorized_keys_files,
1613 filename, linenum); 1760 &options->num_authkeys_files, arg);
1614 options->authorized_keys_files[ 1761 free(arg);
1615 options->num_authkeys_files++] =
1616 tilde_expand_filename(arg, getuid());
1617 } 1762 }
1618 } 1763 }
1619 return 0; 1764 return 0;
@@ -1645,13 +1790,11 @@ process_server_config_line(ServerOptions *options, char *line,
1645 if (strchr(arg, '=') != NULL) 1790 if (strchr(arg, '=') != NULL)
1646 fatal("%s line %d: Invalid environment name.", 1791 fatal("%s line %d: Invalid environment name.",
1647 filename, linenum); 1792 filename, linenum);
1648 if (options->num_accept_env >= MAX_ACCEPT_ENV)
1649 fatal("%s line %d: too many allow env.",
1650 filename, linenum);
1651 if (!*activep) 1793 if (!*activep)
1652 continue; 1794 continue;
1653 options->accept_env[options->num_accept_env++] = 1795 array_append(filename, linenum, "AcceptEnv",
1654 xstrdup(arg); 1796 &options->accept_env, &options->num_accept_env,
1797 arg);
1655 } 1798 }
1656 break; 1799 break;
1657 1800
@@ -1711,15 +1854,12 @@ process_server_config_line(ServerOptions *options, char *line,
1711 fatal("%s line %d: bad port number in " 1854 fatal("%s line %d: bad port number in "
1712 "PermitOpen", filename, linenum); 1855 "PermitOpen", filename, linenum);
1713 if (*activep && value == 0) { 1856 if (*activep && value == 0) {
1714 options->permitted_opens = xrecallocarray( 1857 array_append(filename, linenum,
1715 options->permitted_opens, 1858 "PermitOpen",
1716 options->num_permitted_opens, 1859 &options->permitted_opens,
1717 options->num_permitted_opens + 1, 1860 &options->num_permitted_opens, arg2);
1718 sizeof(*options->permitted_opens)); 1861 }
1719 i = options->num_permitted_opens++; 1862 free(arg2);
1720 options->permitted_opens[i] = arg2;
1721 } else
1722 free(arg2);
1723 } 1863 }
1724 break; 1864 break;
1725 1865
@@ -1842,11 +1982,6 @@ process_server_config_line(ServerOptions *options, char *line,
1842 value = 0; /* seen "any" pseudo-method */ 1982 value = 0; /* seen "any" pseudo-method */
1843 value2 = 0; /* sucessfully parsed any method */ 1983 value2 = 0; /* sucessfully parsed any method */
1844 while ((arg = strdelim(&cp)) && *arg != '\0') { 1984 while ((arg = strdelim(&cp)) && *arg != '\0') {
1845 if (options->num_auth_methods >=
1846 MAX_AUTH_METHODS)
1847 fatal("%s line %d: "
1848 "too many authentication methods.",
1849 filename, linenum);
1850 if (strcmp(arg, "any") == 0) { 1985 if (strcmp(arg, "any") == 0) {
1851 if (options->num_auth_methods > 0) { 1986 if (options->num_auth_methods > 0) {
1852 fatal("%s line %d: \"any\" " 1987 fatal("%s line %d: \"any\" "
@@ -1867,8 +2002,10 @@ process_server_config_line(ServerOptions *options, char *line,
1867 value2 = 1; 2002 value2 = 1;
1868 if (!*activep) 2003 if (!*activep)
1869 continue; 2004 continue;
1870 options->auth_methods[ 2005 array_append(filename, linenum,
1871 options->num_auth_methods++] = xstrdup(arg); 2006 "AuthenticationMethods",
2007 &options->auth_methods,
2008 &options->num_auth_methods, arg);
1872 } 2009 }
1873 if (value2 == 0) { 2010 if (value2 == 0) {
1874 fatal("%s line %d: no AuthenticationMethods " 2011 fatal("%s line %d: no AuthenticationMethods "
@@ -1910,9 +2047,23 @@ process_server_config_line(ServerOptions *options, char *line,
1910 intptr = &options->expose_userauth_info; 2047 intptr = &options->expose_userauth_info;
1911 goto parse_flag; 2048 goto parse_flag;
1912 2049
2050 case sRDomain:
2051 charptr = &options->routing_domain;
2052 arg = strdelim(&cp);
2053 if (!arg || *arg == '\0')
2054 fatal("%.200s line %d: Missing argument.",
2055 filename, linenum);
2056 if (strcasecmp(arg, "none") != 0 && strcmp(arg, "%D") != 0 &&
2057 !valid_rdomain(arg))
2058 fatal("%s line %d: bad routing domain",
2059 filename, linenum);
2060 if (*activep && *charptr == NULL)
2061 *charptr = xstrdup(arg);
2062 break;
2063
1913 case sDebianBanner: 2064 case sDebianBanner:
1914 intptr = &options->debian_banner; 2065 intptr = &options->debian_banner;
1915 goto parse_int; 2066 goto parse_flag;
1916 2067
1917 case sDeprecated: 2068 case sDeprecated:
1918 case sIgnore: 2069 case sIgnore:
@@ -1994,6 +2145,8 @@ int parse_server_match_testspec(struct connection_info *ci, char *spec)
1994 ci->user = xstrdup(p + 5); 2145 ci->user = xstrdup(p + 5);
1995 } else if (strncmp(p, "laddr=", 6) == 0) { 2146 } else if (strncmp(p, "laddr=", 6) == 0) {
1996 ci->laddress = xstrdup(p + 6); 2147 ci->laddress = xstrdup(p + 6);
2148 } else if (strncmp(p, "rdomain=", 8) == 0) {
2149 ci->rdomain = xstrdup(p + 8);
1997 } else if (strncmp(p, "lport=", 6) == 0) { 2150 } else if (strncmp(p, "lport=", 6) == 0) {
1998 ci->lport = a2port(p + 6); 2151 ci->lport = a2port(p + 6);
1999 if (ci->lport == -1) { 2152 if (ci->lport == -1) {
@@ -2011,19 +2164,6 @@ int parse_server_match_testspec(struct connection_info *ci, char *spec)
2011} 2164}
2012 2165
2013/* 2166/*
2014 * returns 1 for a complete spec, 0 for partial spec and -1 for an
2015 * empty spec.
2016 */
2017int server_match_spec_complete(struct connection_info *ci)
2018{
2019 if (ci->user && ci->host && ci->address)
2020 return 1; /* complete */
2021 if (!ci->user && !ci->host && !ci->address)
2022 return -1; /* empty */
2023 return 0; /* partial */
2024}
2025
2026/*
2027 * Copy any supported values that are set. 2167 * Copy any supported values that are set.
2028 * 2168 *
2029 * If the preauth flag is set, we do not bother copying the string or 2169 * If the preauth flag is set, we do not bother copying the string or
@@ -2088,17 +2228,16 @@ copy_set_server_options(ServerOptions *dst, ServerOptions *src, int preauth)
2088 dst->n = src->n; \ 2228 dst->n = src->n; \
2089 } \ 2229 } \
2090} while(0) 2230} while(0)
2091#define M_CP_STRARRAYOPT(n, num_n) do {\ 2231#define M_CP_STRARRAYOPT(s, num_s) do {\
2092 if (src->num_n != 0) { \ 2232 u_int i; \
2093 for (dst->num_n = 0; dst->num_n < src->num_n; dst->num_n++) \ 2233 if (src->num_s != 0) { \
2094 dst->n[dst->num_n] = xstrdup(src->n[dst->num_n]); \ 2234 for (i = 0; i < dst->num_s; i++) \
2095 } \ 2235 free(dst->s[i]); \
2096} while(0) 2236 free(dst->s); \
2097#define M_CP_STRARRAYOPT_ALLOC(n, num_n) do { \ 2237 dst->s = xcalloc(src->num_s, sizeof(*dst->s)); \
2098 if (src->num_n != 0) { \ 2238 for (i = 0; i < src->num_s; i++) \
2099 dst->n = xcalloc(src->num_n, sizeof(*dst->n)); \ 2239 dst->s[i] = xstrdup(src->s[i]); \
2100 M_CP_STRARRAYOPT(n, num_n); \ 2240 dst->num_s = src->num_s; \
2101 dst->num_n = src->num_n; \
2102 } \ 2241 } \
2103} while(0) 2242} while(0)
2104 2243
@@ -2131,7 +2270,6 @@ copy_set_server_options(ServerOptions *dst, ServerOptions *src, int preauth)
2131#undef M_CP_INTOPT 2270#undef M_CP_INTOPT
2132#undef M_CP_STROPT 2271#undef M_CP_STROPT
2133#undef M_CP_STRARRAYOPT 2272#undef M_CP_STRARRAYOPT
2134#undef M_CP_STRARRAYOPT_ALLOC
2135 2273
2136void 2274void
2137parse_server_config(ServerOptions *options, const char *filename, Buffer *conf, 2275parse_server_config(ServerOptions *options, const char *filename, Buffer *conf,
@@ -2262,45 +2400,61 @@ dump_cfg_strarray_oneline(ServerOpCodes code, u_int count, char **vals)
2262 printf("\n"); 2400 printf("\n");
2263} 2401}
2264 2402
2265void 2403static char *
2266dump_config(ServerOptions *o) 2404format_listen_addrs(struct listenaddr *la)
2267{ 2405{
2268 u_int i; 2406 int r;
2269 int ret;
2270 struct addrinfo *ai; 2407 struct addrinfo *ai;
2271 char addr[NI_MAXHOST], port[NI_MAXSERV], *s = NULL; 2408 char addr[NI_MAXHOST], port[NI_MAXSERV];
2272 char *laddr1 = xstrdup(""), *laddr2 = NULL; 2409 char *laddr1 = xstrdup(""), *laddr2 = NULL;
2273 2410
2274 /* these are usually at the top of the config */
2275 for (i = 0; i < o->num_ports; i++)
2276 printf("port %d\n", o->ports[i]);
2277 dump_cfg_fmtint(sAddressFamily, o->address_family);
2278
2279 /* 2411 /*
2280 * ListenAddress must be after Port. add_one_listen_addr pushes 2412 * ListenAddress must be after Port. add_one_listen_addr pushes
2281 * addresses onto a stack, so to maintain ordering we need to 2413 * addresses onto a stack, so to maintain ordering we need to
2282 * print these in reverse order. 2414 * print these in reverse order.
2283 */ 2415 */
2284 for (ai = o->listen_addrs; ai; ai = ai->ai_next) { 2416 for (ai = la->addrs; ai; ai = ai->ai_next) {
2285 if ((ret = getnameinfo(ai->ai_addr, ai->ai_addrlen, addr, 2417 if ((r = getnameinfo(ai->ai_addr, ai->ai_addrlen, addr,
2286 sizeof(addr), port, sizeof(port), 2418 sizeof(addr), port, sizeof(port),
2287 NI_NUMERICHOST|NI_NUMERICSERV)) != 0) { 2419 NI_NUMERICHOST|NI_NUMERICSERV)) != 0) {
2288 error("getnameinfo failed: %.100s", 2420 error("getnameinfo: %.100s", ssh_gai_strerror(r));
2289 (ret != EAI_SYSTEM) ? gai_strerror(ret) : 2421 continue;
2290 strerror(errno)); 2422 }
2423 laddr2 = laddr1;
2424 if (ai->ai_family == AF_INET6) {
2425 xasprintf(&laddr1, "listenaddress [%s]:%s%s%s\n%s",
2426 addr, port,
2427 la->rdomain == NULL ? "" : " rdomain ",
2428 la->rdomain == NULL ? "" : la->rdomain,
2429 laddr2);
2291 } else { 2430 } else {
2292 laddr2 = laddr1; 2431 xasprintf(&laddr1, "listenaddress %s:%s%s%s\n%s",
2293 if (ai->ai_family == AF_INET6) 2432 addr, port,
2294 xasprintf(&laddr1, "listenaddress [%s]:%s\n%s", 2433 la->rdomain == NULL ? "" : " rdomain ",
2295 addr, port, laddr2); 2434 la->rdomain == NULL ? "" : la->rdomain,
2296 else 2435 laddr2);
2297 xasprintf(&laddr1, "listenaddress %s:%s\n%s",
2298 addr, port, laddr2);
2299 free(laddr2);
2300 } 2436 }
2437 free(laddr2);
2438 }
2439 return laddr1;
2440}
2441
2442void
2443dump_config(ServerOptions *o)
2444{
2445 char *s;
2446 u_int i;
2447
2448 /* these are usually at the top of the config */
2449 for (i = 0; i < o->num_ports; i++)
2450 printf("port %d\n", o->ports[i]);
2451 dump_cfg_fmtint(sAddressFamily, o->address_family);
2452
2453 for (i = 0; i < o->num_listen_addrs; i++) {
2454 s = format_listen_addrs(&o->listen_addrs[i]);
2455 printf("%s", s);
2456 free(s);
2301 } 2457 }
2302 printf("%s", laddr1);
2303 free(laddr1);
2304 2458
2305 /* integer arguments */ 2459 /* integer arguments */
2306#ifdef USE_PAM 2460#ifdef USE_PAM
@@ -2392,6 +2546,7 @@ dump_config(ServerOptions *o)
2392 o->hostkeyalgorithms : KEX_DEFAULT_PK_ALG); 2546 o->hostkeyalgorithms : KEX_DEFAULT_PK_ALG);
2393 dump_cfg_string(sPubkeyAcceptedKeyTypes, o->pubkey_key_types ? 2547 dump_cfg_string(sPubkeyAcceptedKeyTypes, o->pubkey_key_types ?
2394 o->pubkey_key_types : KEX_DEFAULT_PK_ALG); 2548 o->pubkey_key_types : KEX_DEFAULT_PK_ALG);
2549 dump_cfg_string(sRDomain, o->routing_domain);
2395 2550
2396 /* string arguments requiring a lookup */ 2551 /* string arguments requiring a lookup */
2397 dump_cfg_string(sLogLevel, log_level_name(o->log_level)); 2552 dump_cfg_string(sLogLevel, log_level_name(o->log_level));
@@ -2420,11 +2575,13 @@ dump_config(ServerOptions *o)
2420 printf("maxstartups %d:%d:%d\n", o->max_startups_begin, 2575 printf("maxstartups %d:%d:%d\n", o->max_startups_begin,
2421 o->max_startups_rate, o->max_startups); 2576 o->max_startups_rate, o->max_startups);
2422 2577
2423 for (i = 0; tunmode_desc[i].val != -1; i++) 2578 s = NULL;
2579 for (i = 0; tunmode_desc[i].val != -1; i++) {
2424 if (tunmode_desc[i].val == o->permit_tun) { 2580 if (tunmode_desc[i].val == o->permit_tun) {
2425 s = tunmode_desc[i].text; 2581 s = tunmode_desc[i].text;
2426 break; 2582 break;
2427 } 2583 }
2584 }
2428 dump_cfg_string(sPermitTunnel, s); 2585 dump_cfg_string(sPermitTunnel, s);
2429 2586
2430 printf("ipqos %s ", iptos2str(o->ip_qos_interactive)); 2587 printf("ipqos %s ", iptos2str(o->ip_qos_interactive));
diff --git a/servconf.h b/servconf.h
index 410c42754..b0fa70455 100644
--- a/servconf.h
+++ b/servconf.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: servconf.h,v 1.126 2017/10/02 19:33:20 djm Exp $ */ 1/* $OpenBSD: servconf.h,v 1.130 2017/10/25 00:19:47 djm Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -18,17 +18,7 @@
18 18
19#define MAX_PORTS 256 /* Max # ports. */ 19#define MAX_PORTS 256 /* Max # ports. */
20 20
21#define MAX_ALLOW_USERS 256 /* Max # users on allow list. */
22#define MAX_DENY_USERS 256 /* Max # users on deny list. */
23#define MAX_ALLOW_GROUPS 256 /* Max # groups on allow list. */
24#define MAX_DENY_GROUPS 256 /* Max # groups on deny list. */
25#define MAX_SUBSYSTEMS 256 /* Max # subsystems. */ 21#define MAX_SUBSYSTEMS 256 /* Max # subsystems. */
26#define MAX_HOSTKEYS 256 /* Max # hostkeys. */
27#define MAX_HOSTCERTS 256 /* Max # host certificates. */
28#define MAX_ACCEPT_ENV 256 /* Max # of env vars. */
29#define MAX_MATCH_GROUPS 256 /* Max # of groups for Match. */
30#define MAX_AUTHKEYS_FILES 256 /* Max # of authorized_keys files. */
31#define MAX_AUTH_METHODS 256 /* Max # of AuthenticationMethods. */
32 22
33/* permit_root_login */ 23/* permit_root_login */
34#define PERMIT_NOT_SET -1 24#define PERMIT_NOT_SET -1
@@ -61,21 +51,42 @@
61struct ssh; 51struct ssh;
62struct fwd_perm_list; 52struct fwd_perm_list;
63 53
54/*
55 * Used to store addresses from ListenAddr directives. These may be
56 * incomplete, as they may specify addresses that need to be merged
57 * with any ports requested by ListenPort.
58 */
59struct queued_listenaddr {
60 char *addr;
61 int port; /* <=0 if unspecified */
62 char *rdomain;
63};
64
65/* Resolved listen addresses, grouped by optional routing domain */
66struct listenaddr {
67 char *rdomain;
68 struct addrinfo *addrs;
69};
70
64typedef struct { 71typedef struct {
65 u_int num_ports; 72 u_int num_ports;
66 u_int ports_from_cmdline; 73 u_int ports_from_cmdline;
67 int ports[MAX_PORTS]; /* Port number to listen on. */ 74 int ports[MAX_PORTS]; /* Port number to listen on. */
75 struct queued_listenaddr *queued_listen_addrs;
68 u_int num_queued_listens; 76 u_int num_queued_listens;
69 char **queued_listen_addrs; 77 struct listenaddr *listen_addrs;
70 int *queued_listen_ports; 78 u_int num_listen_addrs;
71 struct addrinfo *listen_addrs; /* Addresses on which the server listens. */ 79 int address_family; /* Address family used by the server. */
72 int address_family; /* Address family used by the server. */ 80
73 char *host_key_files[MAX_HOSTKEYS]; /* Files containing host keys. */ 81 char *routing_domain; /* Bind session to routing domain */
74 int num_host_key_files; /* Number of files for host keys. */ 82
75 char *host_cert_files[MAX_HOSTCERTS]; /* Files containing host certs. */ 83 char **host_key_files; /* Files containing host keys. */
76 int num_host_cert_files; /* Number of files for host certs. */ 84 u_int num_host_key_files; /* Number of files for host keys. */
77 char *host_key_agent; /* ssh-agent socket for host keys. */ 85 char **host_cert_files; /* Files containing host certs. */
78 char *pid_file; /* Where to put our pid */ 86 u_int num_host_cert_files; /* Number of files for host certs. */
87
88 char *host_key_agent; /* ssh-agent socket for host keys. */
89 char *pid_file; /* Where to put our pid */
79 int login_grace_time; /* Disconnect if no auth in this time 90 int login_grace_time; /* Disconnect if no auth in this time
80 * (sec). */ 91 * (sec). */
81 int permit_root_login; /* PERMIT_*, see above */ 92 int permit_root_login; /* PERMIT_*, see above */
@@ -136,13 +147,13 @@ typedef struct {
136 int allow_agent_forwarding; 147 int allow_agent_forwarding;
137 int disable_forwarding; 148 int disable_forwarding;
138 u_int num_allow_users; 149 u_int num_allow_users;
139 char *allow_users[MAX_ALLOW_USERS]; 150 char **allow_users;
140 u_int num_deny_users; 151 u_int num_deny_users;
141 char *deny_users[MAX_DENY_USERS]; 152 char **deny_users;
142 u_int num_allow_groups; 153 u_int num_allow_groups;
143 char *allow_groups[MAX_ALLOW_GROUPS]; 154 char **allow_groups;
144 u_int num_deny_groups; 155 u_int num_deny_groups;
145 char *deny_groups[MAX_DENY_GROUPS]; 156 char **deny_groups;
146 157
147 u_int num_subsystems; 158 u_int num_subsystems;
148 char *subsystem_name[MAX_SUBSYSTEMS]; 159 char *subsystem_name[MAX_SUBSYSTEMS];
@@ -150,7 +161,7 @@ typedef struct {
150 char *subsystem_args[MAX_SUBSYSTEMS]; 161 char *subsystem_args[MAX_SUBSYSTEMS];
151 162
152 u_int num_accept_env; 163 u_int num_accept_env;
153 char *accept_env[MAX_ACCEPT_ENV]; 164 char **accept_env;
154 165
155 int max_startups_begin; 166 int max_startups_begin;
156 int max_startups_rate; 167 int max_startups_rate;
@@ -169,8 +180,8 @@ typedef struct {
169 * disconnect the session 180 * disconnect the session
170 */ 181 */
171 182
172 u_int num_authkeys_files; /* Files containing public keys */ 183 u_int num_authkeys_files; /* Files containing public keys */
173 char *authorized_keys_files[MAX_AUTHKEYS_FILES]; 184 char **authorized_keys_files;
174 185
175 char *adm_forced_command; 186 char *adm_forced_command;
176 187
@@ -196,7 +207,7 @@ typedef struct {
196 char *version_addendum; /* Appended to SSH banner */ 207 char *version_addendum; /* Appended to SSH banner */
197 208
198 u_int num_auth_methods; 209 u_int num_auth_methods;
199 char *auth_methods[MAX_AUTH_METHODS]; 210 char **auth_methods;
200 211
201 int fingerprint_hash; 212 int fingerprint_hash;
202 int expose_userauth_info; 213 int expose_userauth_info;
@@ -211,6 +222,7 @@ struct connection_info {
211 const char *address; /* remote address */ 222 const char *address; /* remote address */
212 const char *laddress; /* local address */ 223 const char *laddress; /* local address */
213 int lport; /* local port */ 224 int lport; /* local port */
225 const char *rdomain; /* routing domain if available */
214}; 226};
215 227
216 228
@@ -234,6 +246,7 @@ struct connection_info {
234 M_CP_STROPT(authorized_principals_command_user); \ 246 M_CP_STROPT(authorized_principals_command_user); \
235 M_CP_STROPT(hostbased_key_types); \ 247 M_CP_STROPT(hostbased_key_types); \
236 M_CP_STROPT(pubkey_key_types); \ 248 M_CP_STROPT(pubkey_key_types); \
249 M_CP_STROPT(routing_domain); \
237 M_CP_STRARRAYOPT(authorized_keys_files, num_authkeys_files); \ 250 M_CP_STRARRAYOPT(authorized_keys_files, num_authkeys_files); \
238 M_CP_STRARRAYOPT(allow_users, num_allow_users); \ 251 M_CP_STRARRAYOPT(allow_users, num_allow_users); \
239 M_CP_STRARRAYOPT(deny_users, num_deny_users); \ 252 M_CP_STRARRAYOPT(deny_users, num_deny_users); \
@@ -241,7 +254,7 @@ struct connection_info {
241 M_CP_STRARRAYOPT(deny_groups, num_deny_groups); \ 254 M_CP_STRARRAYOPT(deny_groups, num_deny_groups); \
242 M_CP_STRARRAYOPT(accept_env, num_accept_env); \ 255 M_CP_STRARRAYOPT(accept_env, num_accept_env); \
243 M_CP_STRARRAYOPT(auth_methods, num_auth_methods); \ 256 M_CP_STRARRAYOPT(auth_methods, num_auth_methods); \
244 M_CP_STRARRAYOPT_ALLOC(permitted_opens, num_permitted_opens); \ 257 M_CP_STRARRAYOPT(permitted_opens, num_permitted_opens); \
245 } while (0) 258 } while (0)
246 259
247struct connection_info *get_connection_info(int, int); 260struct connection_info *get_connection_info(int, int);
@@ -259,5 +272,9 @@ int server_match_spec_complete(struct connection_info *);
259void copy_set_server_options(ServerOptions *, ServerOptions *, int); 272void copy_set_server_options(ServerOptions *, ServerOptions *, int);
260void dump_config(ServerOptions *); 273void dump_config(ServerOptions *);
261char *derelativise_path(const char *); 274char *derelativise_path(const char *);
275void servconf_add_hostkey(const char *, const int,
276 ServerOptions *, const char *path);
277void servconf_add_hostcert(const char *, const int,
278 ServerOptions *, const char *path);
262 279
263#endif /* SERVCONF_H */ 280#endif /* SERVCONF_H */
diff --git a/serverloop.c b/serverloop.c
index 24bbae322..d6fe24cc1 100644
--- a/serverloop.c
+++ b/serverloop.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: serverloop.c,v 1.198 2017/09/12 06:35:32 djm Exp $ */ 1/* $OpenBSD: serverloop.c,v 1.205 2018/03/03 03:15:51 djm Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -82,6 +82,7 @@ extern ServerOptions options;
82 82
83/* XXX */ 83/* XXX */
84extern Authctxt *the_authctxt; 84extern Authctxt *the_authctxt;
85extern struct sshauthopt *auth_opts;
85extern int use_privsep; 86extern int use_privsep;
86 87
87static int no_more_sessions = 0; /* Disallow further sessions. */ 88static int no_more_sessions = 0; /* Disallow further sessions. */
@@ -99,6 +100,9 @@ static volatile sig_atomic_t received_sigterm = 0;
99/* prototypes */ 100/* prototypes */
100static void server_init_dispatch(void); 101static void server_init_dispatch(void);
101 102
103/* requested tunnel forwarding interface(s), shared with session.c */
104char *tun_fwd_ifnames = NULL;
105
102/* 106/*
103 * we write to this pipe if a SIGCHLD is caught in order to avoid 107 * we write to this pipe if a SIGCHLD is caught in order to avoid
104 * the race between select() and child_terminated 108 * the race between select() and child_terminated
@@ -150,9 +154,6 @@ sigchld_handler(int sig)
150{ 154{
151 int save_errno = errno; 155 int save_errno = errno;
152 child_terminated = 1; 156 child_terminated = 1;
153#ifndef _UNICOS
154 mysignal(SIGCHLD, sigchld_handler);
155#endif
156 notify_parent(); 157 notify_parent();
157 errno = save_errno; 158 errno = save_errno;
158} 159}
@@ -168,10 +169,12 @@ static void
168client_alive_check(struct ssh *ssh) 169client_alive_check(struct ssh *ssh)
169{ 170{
170 int channel_id; 171 int channel_id;
172 char remote_id[512];
171 173
172 /* timeout, check to see how many we have had */ 174 /* timeout, check to see how many we have had */
173 if (packet_inc_alive_timeouts() > options.client_alive_count_max) { 175 if (packet_inc_alive_timeouts() > options.client_alive_count_max) {
174 logit("Timeout, client not responding."); 176 sshpkt_fmt_connection_id(ssh, remote_id, sizeof(remote_id));
177 logit("Timeout, client not responding from %s", remote_id);
175 cleanup_exit(255); 178 cleanup_exit(255);
176 } 179 }
177 180
@@ -371,7 +374,7 @@ server_loop2(struct ssh *ssh, Authctxt *authctxt)
371 374
372 debug("Entering interactive session for SSH2."); 375 debug("Entering interactive session for SSH2.");
373 376
374 mysignal(SIGCHLD, sigchld_handler); 377 signal(SIGCHLD, sigchld_handler);
375 child_terminated = 0; 378 child_terminated = 0;
376 connection_in = packet_get_connection_in(); 379 connection_in = packet_get_connection_in();
377 connection_out = packet_get_connection_out(); 380 connection_out = packet_get_connection_out();
@@ -454,12 +457,13 @@ server_request_direct_tcpip(struct ssh *ssh, int *reason, const char **errmsg)
454 originator_port = packet_get_int(); 457 originator_port = packet_get_int();
455 packet_check_eom(); 458 packet_check_eom();
456 459
457 debug("server_request_direct_tcpip: originator %s port %d, target %s " 460 debug("%s: originator %s port %d, target %s port %d", __func__,
458 "port %d", originator, originator_port, target, target_port); 461 originator, originator_port, target, target_port);
459 462
460 /* XXX fine grained permissions */ 463 /* XXX fine grained permissions */
461 if ((options.allow_tcp_forwarding & FORWARD_LOCAL) != 0 && 464 if ((options.allow_tcp_forwarding & FORWARD_LOCAL) != 0 &&
462 !no_port_forwarding_flag && !options.disable_forwarding) { 465 auth_opts->permit_port_forwarding_flag &&
466 !options.disable_forwarding) {
463 c = channel_connect_to_port(ssh, target, target_port, 467 c = channel_connect_to_port(ssh, target, target_port,
464 "direct-tcpip", "direct-tcpip", reason, errmsg); 468 "direct-tcpip", "direct-tcpip", reason, errmsg);
465 } else { 469 } else {
@@ -485,20 +489,20 @@ server_request_direct_streamlocal(struct ssh *ssh)
485 struct passwd *pw = the_authctxt->pw; 489 struct passwd *pw = the_authctxt->pw;
486 490
487 if (pw == NULL || !the_authctxt->valid) 491 if (pw == NULL || !the_authctxt->valid)
488 fatal("server_input_global_request: no/invalid user"); 492 fatal("%s: no/invalid user", __func__);
489 493
490 target = packet_get_string(NULL); 494 target = packet_get_string(NULL);
491 originator = packet_get_string(NULL); 495 originator = packet_get_string(NULL);
492 originator_port = packet_get_int(); 496 originator_port = packet_get_int();
493 packet_check_eom(); 497 packet_check_eom();
494 498
495 debug("server_request_direct_streamlocal: originator %s port %d, target %s", 499 debug("%s: originator %s port %d, target %s", __func__,
496 originator, originator_port, target); 500 originator, originator_port, target);
497 501
498 /* XXX fine grained permissions */ 502 /* XXX fine grained permissions */
499 if ((options.allow_streamlocal_forwarding & FORWARD_LOCAL) != 0 && 503 if ((options.allow_streamlocal_forwarding & FORWARD_LOCAL) != 0 &&
500 !no_port_forwarding_flag && !options.disable_forwarding && 504 auth_opts->permit_port_forwarding_flag &&
501 (pw->pw_uid == 0 || use_privsep)) { 505 !options.disable_forwarding && (pw->pw_uid == 0 || use_privsep)) {
502 c = channel_connect_to_path(ssh, target, 506 c = channel_connect_to_path(ssh, target,
503 "direct-streamlocal@openssh.com", "direct-streamlocal"); 507 "direct-streamlocal@openssh.com", "direct-streamlocal");
504 } else { 508 } else {
@@ -517,8 +521,8 @@ static Channel *
517server_request_tun(struct ssh *ssh) 521server_request_tun(struct ssh *ssh)
518{ 522{
519 Channel *c = NULL; 523 Channel *c = NULL;
520 int mode, tun; 524 int mode, tun, sock;
521 int sock; 525 char *tmp, *ifname = NULL;
522 526
523 mode = packet_get_int(); 527 mode = packet_get_int();
524 switch (mode) { 528 switch (mode) {
@@ -536,14 +540,16 @@ server_request_tun(struct ssh *ssh)
536 } 540 }
537 541
538 tun = packet_get_int(); 542 tun = packet_get_int();
539 if (forced_tun_device != -1) { 543 if (auth_opts->force_tun_device != -1) {
540 if (tun != SSH_TUNID_ANY && forced_tun_device != tun) 544 if (tun != SSH_TUNID_ANY && auth_opts->force_tun_device != tun)
541 goto done; 545 goto done;
542 tun = forced_tun_device; 546 tun = auth_opts->force_tun_device;
543 } 547 }
544 sock = tun_open(tun, mode); 548 sock = tun_open(tun, mode, &ifname);
545 if (sock < 0) 549 if (sock < 0)
546 goto done; 550 goto done;
551 debug("Tunnel forwarding using interface %s", ifname);
552
547 c = channel_new(ssh, "tun", SSH_CHANNEL_OPEN, sock, sock, -1, 553 c = channel_new(ssh, "tun", SSH_CHANNEL_OPEN, sock, sock, -1,
548 CHAN_TCP_WINDOW_DEFAULT, CHAN_TCP_PACKET_DEFAULT, 0, "tun", 1); 554 CHAN_TCP_WINDOW_DEFAULT, CHAN_TCP_PACKET_DEFAULT, 0, "tun", 1);
549 c->datagram = 1; 555 c->datagram = 1;
@@ -553,6 +559,19 @@ server_request_tun(struct ssh *ssh)
553 sys_tun_outfilter, NULL, NULL); 559 sys_tun_outfilter, NULL, NULL);
554#endif 560#endif
555 561
562 /*
563 * Update the list of names exposed to the session
564 * XXX remove these if the tunnels are closed (won't matter
565 * much if they are already in the environment though)
566 */
567 tmp = tun_fwd_ifnames;
568 xasprintf(&tun_fwd_ifnames, "%s%s%s",
569 tun_fwd_ifnames == NULL ? "" : tun_fwd_ifnames,
570 tun_fwd_ifnames == NULL ? "" : ",",
571 ifname);
572 free(tmp);
573 free(ifname);
574
556 done: 575 done:
557 if (c == NULL) 576 if (c == NULL)
558 packet_send_debug("Failed to open the tunnel device."); 577 packet_send_debug("Failed to open the tunnel device.");
@@ -635,10 +654,8 @@ server_input_channel_open(int type, u_int32_t seq, struct ssh *ssh)
635 packet_start(SSH2_MSG_CHANNEL_OPEN_FAILURE); 654 packet_start(SSH2_MSG_CHANNEL_OPEN_FAILURE);
636 packet_put_int(rchan); 655 packet_put_int(rchan);
637 packet_put_int(reason); 656 packet_put_int(reason);
638 if (!(datafellows & SSH_BUG_OPENFAILURE)) { 657 packet_put_cstring(errmsg ? errmsg : "open failed");
639 packet_put_cstring(errmsg ? errmsg : "open failed"); 658 packet_put_cstring("");
640 packet_put_cstring("");
641 }
642 packet_send(); 659 packet_send();
643 } 660 }
644 free(ctype); 661 free(ctype);
@@ -651,7 +668,7 @@ server_input_hostkeys_prove(struct ssh *ssh, struct sshbuf **respp)
651 struct sshbuf *resp = NULL; 668 struct sshbuf *resp = NULL;
652 struct sshbuf *sigbuf = NULL; 669 struct sshbuf *sigbuf = NULL;
653 struct sshkey *key = NULL, *key_pub = NULL, *key_prv = NULL; 670 struct sshkey *key = NULL, *key_pub = NULL, *key_prv = NULL;
654 int r, ndx, success = 0; 671 int r, ndx, kexsigtype, use_kexsigtype, success = 0;
655 const u_char *blob; 672 const u_char *blob;
656 u_char *sig = 0; 673 u_char *sig = 0;
657 size_t blen, slen; 674 size_t blen, slen;
@@ -659,6 +676,8 @@ server_input_hostkeys_prove(struct ssh *ssh, struct sshbuf **respp)
659 if ((resp = sshbuf_new()) == NULL || (sigbuf = sshbuf_new()) == NULL) 676 if ((resp = sshbuf_new()) == NULL || (sigbuf = sshbuf_new()) == NULL)
660 fatal("%s: sshbuf_new", __func__); 677 fatal("%s: sshbuf_new", __func__);
661 678
679 kexsigtype = sshkey_type_plain(
680 sshkey_type_from_name(ssh->kex->hostkey_alg));
662 while (ssh_packet_remaining(ssh) > 0) { 681 while (ssh_packet_remaining(ssh) > 0) {
663 sshkey_free(key); 682 sshkey_free(key);
664 key = NULL; 683 key = NULL;
@@ -689,13 +708,20 @@ server_input_hostkeys_prove(struct ssh *ssh, struct sshbuf **respp)
689 sshbuf_reset(sigbuf); 708 sshbuf_reset(sigbuf);
690 free(sig); 709 free(sig);
691 sig = NULL; 710 sig = NULL;
711 /*
712 * For RSA keys, prefer to use the signature type negotiated
713 * during KEX to the default (SHA1).
714 */
715 use_kexsigtype = kexsigtype == KEY_RSA &&
716 sshkey_type_plain(key->type) == KEY_RSA;
692 if ((r = sshbuf_put_cstring(sigbuf, 717 if ((r = sshbuf_put_cstring(sigbuf,
693 "hostkeys-prove-00@openssh.com")) != 0 || 718 "hostkeys-prove-00@openssh.com")) != 0 ||
694 (r = sshbuf_put_string(sigbuf, 719 (r = sshbuf_put_string(sigbuf,
695 ssh->kex->session_id, ssh->kex->session_id_len)) != 0 || 720 ssh->kex->session_id, ssh->kex->session_id_len)) != 0 ||
696 (r = sshkey_puts(key, sigbuf)) != 0 || 721 (r = sshkey_puts(key, sigbuf)) != 0 ||
697 (r = ssh->kex->sign(key_prv, key_pub, &sig, &slen, 722 (r = ssh->kex->sign(key_prv, key_pub, &sig, &slen,
698 sshbuf_ptr(sigbuf), sshbuf_len(sigbuf), NULL, 0)) != 0 || 723 sshbuf_ptr(sigbuf), sshbuf_len(sigbuf),
724 use_kexsigtype ? ssh->kex->hostkey_alg : NULL, 0)) != 0 ||
699 (r = sshbuf_put_string(resp, sig, slen)) != 0) { 725 (r = sshbuf_put_string(resp, sig, slen)) != 0) {
700 error("%s: couldn't prepare signature: %s", 726 error("%s: couldn't prepare signature: %s",
701 __func__, ssh_err(r)); 727 __func__, ssh_err(r));
@@ -742,7 +768,8 @@ server_input_global_request(int type, u_int32_t seq, struct ssh *ssh)
742 768
743 /* check permissions */ 769 /* check permissions */
744 if ((options.allow_tcp_forwarding & FORWARD_REMOTE) == 0 || 770 if ((options.allow_tcp_forwarding & FORWARD_REMOTE) == 0 ||
745 no_port_forwarding_flag || options.disable_forwarding || 771 !auth_opts->permit_port_forwarding_flag ||
772 options.disable_forwarding ||
746 (!want_reply && fwd.listen_port == 0) || 773 (!want_reply && fwd.listen_port == 0) ||
747 (fwd.listen_port != 0 && 774 (fwd.listen_port != 0 &&
748 !bind_permitted(fwd.listen_port, pw->pw_uid))) { 775 !bind_permitted(fwd.listen_port, pw->pw_uid))) {
@@ -780,7 +807,8 @@ server_input_global_request(int type, u_int32_t seq, struct ssh *ssh)
780 807
781 /* check permissions */ 808 /* check permissions */
782 if ((options.allow_streamlocal_forwarding & FORWARD_REMOTE) == 0 809 if ((options.allow_streamlocal_forwarding & FORWARD_REMOTE) == 0
783 || no_port_forwarding_flag || options.disable_forwarding || 810 || !auth_opts->permit_port_forwarding_flag ||
811 options.disable_forwarding ||
784 (pw->pw_uid != 0 && !use_privsep)) { 812 (pw->pw_uid != 0 && !use_privsep)) {
785 success = 0; 813 success = 0;
786 packet_send_debug("Server has disabled " 814 packet_send_debug("Server has disabled "
diff --git a/session.c b/session.c
index d40afe4f7..ff301c983 100644
--- a/session.c
+++ b/session.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: session.c,v 1.292 2017/09/12 06:32:07 djm Exp $ */ 1/* $OpenBSD: session.c,v 1.294 2018/03/03 03:15:51 djm Exp $ */
2/* 2/*
3 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 3 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
4 * All rights reserved 4 * All rights reserved
@@ -140,6 +140,8 @@ extern u_int utmp_len;
140extern int startup_pipe; 140extern int startup_pipe;
141extern void destroy_sensitive_data(void); 141extern void destroy_sensitive_data(void);
142extern Buffer loginmsg; 142extern Buffer loginmsg;
143extern struct sshauthopt *auth_opts;
144char *tun_fwd_ifnames; /* serverloop.c */
143 145
144/* original command from peer. */ 146/* original command from peer. */
145const char *original_command = NULL; 147const char *original_command = NULL;
@@ -287,14 +289,42 @@ prepare_auth_info_file(struct passwd *pw, struct sshbuf *info)
287 restore_uid(); 289 restore_uid();
288} 290}
289 291
292static void
293set_permitopen_from_authopts(struct ssh *ssh, const struct sshauthopt *opts)
294{
295 char *tmp, *cp, *host;
296 int port;
297 size_t i;
298
299 if ((options.allow_tcp_forwarding & FORWARD_LOCAL) == 0)
300 return;
301 channel_clear_permitted_opens(ssh);
302 for (i = 0; i < auth_opts->npermitopen; i++) {
303 tmp = cp = xstrdup(auth_opts->permitopen[i]);
304 /* This shouldn't fail as it has already been checked */
305 if ((host = hpdelim(&cp)) == NULL)
306 fatal("%s: internal error: hpdelim", __func__);
307 host = cleanhostname(host);
308 if (cp == NULL || (port = permitopen_port(cp)) < 0)
309 fatal("%s: internal error: permitopen port",
310 __func__);
311 channel_add_permitted_opens(ssh, host, port);
312 free(tmp);
313 }
314}
315
290void 316void
291do_authenticated(struct ssh *ssh, Authctxt *authctxt) 317do_authenticated(struct ssh *ssh, Authctxt *authctxt)
292{ 318{
293 setproctitle("%s", authctxt->pw->pw_name); 319 setproctitle("%s", authctxt->pw->pw_name);
294 320
321 auth_log_authopts("active", auth_opts, 0);
322
295 /* setup the channel layer */ 323 /* setup the channel layer */
296 /* XXX - streamlocal? */ 324 /* XXX - streamlocal? */
297 if (no_port_forwarding_flag || options.disable_forwarding || 325 set_permitopen_from_authopts(ssh, auth_opts);
326 if (!auth_opts->permit_port_forwarding_flag ||
327 options.disable_forwarding ||
298 (options.allow_tcp_forwarding & FORWARD_LOCAL) == 0) 328 (options.allow_tcp_forwarding & FORWARD_LOCAL) == 0)
299 channel_disable_adm_local_opens(ssh); 329 channel_disable_adm_local_opens(ssh);
300 else 330 else
@@ -334,7 +364,6 @@ int
334do_exec_no_pty(struct ssh *ssh, Session *s, const char *command) 364do_exec_no_pty(struct ssh *ssh, Session *s, const char *command)
335{ 365{
336 pid_t pid; 366 pid_t pid;
337
338#ifdef USE_PIPES 367#ifdef USE_PIPES
339 int pin[2], pout[2], perr[2]; 368 int pin[2], pout[2], perr[2];
340 369
@@ -450,11 +479,6 @@ do_exec_no_pty(struct ssh *ssh, Session *s, const char *command)
450 close(err[0]); 479 close(err[0]);
451#endif 480#endif
452 481
453
454#ifdef _UNICOS
455 cray_init_job(s->pw); /* set up cray jid and tmpdir */
456#endif
457
458 /* Do processing for the child (exec command etc). */ 482 /* Do processing for the child (exec command etc). */
459 do_child(ssh, s, command); 483 do_child(ssh, s, command);
460 /* NOTREACHED */ 484 /* NOTREACHED */
@@ -462,9 +486,6 @@ do_exec_no_pty(struct ssh *ssh, Session *s, const char *command)
462 break; 486 break;
463 } 487 }
464 488
465#ifdef _UNICOS
466 signal(WJSIGNAL, cray_job_termination_handler);
467#endif /* _UNICOS */
468#ifdef HAVE_CYGWIN 489#ifdef HAVE_CYGWIN
469 cygwin_set_impersonation_token(INVALID_HANDLE_VALUE); 490 cygwin_set_impersonation_token(INVALID_HANDLE_VALUE);
470#endif 491#endif
@@ -576,9 +597,6 @@ do_exec_pty(struct ssh *ssh, Session *s, const char *command)
576 close(ttyfd); 597 close(ttyfd);
577 598
578 /* record login, etc. similar to login(1) */ 599 /* record login, etc. similar to login(1) */
579#ifdef _UNICOS
580 cray_init_job(s->pw); /* set up cray jid and tmpdir */
581#endif /* _UNICOS */
582#ifndef HAVE_OSF_SIA 600#ifndef HAVE_OSF_SIA
583 do_login(ssh, s, command); 601 do_login(ssh, s, command);
584#endif 602#endif
@@ -592,9 +610,6 @@ do_exec_pty(struct ssh *ssh, Session *s, const char *command)
592 break; 610 break;
593 } 611 }
594 612
595#ifdef _UNICOS
596 signal(WJSIGNAL, cray_job_termination_handler);
597#endif /* _UNICOS */
598#ifdef HAVE_CYGWIN 613#ifdef HAVE_CYGWIN
599 cygwin_set_impersonation_token(INVALID_HANDLE_VALUE); 614 cygwin_set_impersonation_token(INVALID_HANDLE_VALUE);
600#endif 615#endif
@@ -656,9 +671,9 @@ do_exec(struct ssh *ssh, Session *s, const char *command)
656 original_command = command; 671 original_command = command;
657 command = options.adm_forced_command; 672 command = options.adm_forced_command;
658 forced = "(config)"; 673 forced = "(config)";
659 } else if (forced_command) { 674 } else if (auth_opts->force_command != NULL) {
660 original_command = command; 675 original_command = command;
661 command = forced_command; 676 command = auth_opts->force_command;
662 forced = "(key-option)"; 677 forced = "(key-option)";
663 } 678 }
664 if (forced != NULL) { 679 if (forced != NULL) {
@@ -961,8 +976,9 @@ static char **
961do_setup_env(struct ssh *ssh, Session *s, const char *shell) 976do_setup_env(struct ssh *ssh, Session *s, const char *shell)
962{ 977{
963 char buf[256]; 978 char buf[256];
979 size_t n;
964 u_int i, envsize; 980 u_int i, envsize;
965 char **env, *laddr; 981 char *ocp, *cp, **env, *laddr;
966 struct passwd *pw = s->pw; 982 struct passwd *pw = s->pw;
967#if !defined (HAVE_LOGIN_CAP) && !defined (HAVE_CYGWIN) 983#if !defined (HAVE_LOGIN_CAP) && !defined (HAVE_CYGWIN)
968 char *path = NULL; 984 char *path = NULL;
@@ -1037,20 +1053,17 @@ do_setup_env(struct ssh *ssh, Session *s, const char *shell)
1037 if (getenv("TZ")) 1053 if (getenv("TZ"))
1038 child_set_env(&env, &envsize, "TZ", getenv("TZ")); 1054 child_set_env(&env, &envsize, "TZ", getenv("TZ"));
1039 1055
1040 /* Set custom environment options from RSA authentication. */ 1056 /* Set custom environment options from pubkey authentication. */
1041 while (custom_environment) { 1057 if (options.permit_user_env) {
1042 struct envstring *ce = custom_environment; 1058 for (n = 0 ; n < auth_opts->nenv; n++) {
1043 char *str = ce->s; 1059 ocp = xstrdup(auth_opts->env[n]);
1044 1060 cp = strchr(ocp, '=');
1045 for (i = 0; str[i] != '=' && str[i]; i++) 1061 if (*cp == '=') {
1046 ; 1062 *cp = '\0';
1047 if (str[i] == '=') { 1063 child_set_env(&env, &envsize, ocp, cp + 1);
1048 str[i] = 0; 1064 }
1049 child_set_env(&env, &envsize, str, str + i + 1); 1065 free(ocp);
1050 } 1066 }
1051 custom_environment = ce->next;
1052 free(ce->s);
1053 free(ce);
1054 } 1067 }
1055 1068
1056 /* SSH_CLIENT deprecated */ 1069 /* SSH_CLIENT deprecated */
@@ -1066,6 +1079,8 @@ do_setup_env(struct ssh *ssh, Session *s, const char *shell)
1066 free(laddr); 1079 free(laddr);
1067 child_set_env(&env, &envsize, "SSH_CONNECTION", buf); 1080 child_set_env(&env, &envsize, "SSH_CONNECTION", buf);
1068 1081
1082 if (tun_fwd_ifnames != NULL)
1083 child_set_env(&env, &envsize, "SSH_TUNNEL", tun_fwd_ifnames);
1069 if (auth_info_file != NULL) 1084 if (auth_info_file != NULL)
1070 child_set_env(&env, &envsize, "SSH_USER_AUTH", auth_info_file); 1085 child_set_env(&env, &envsize, "SSH_USER_AUTH", auth_info_file);
1071 if (s->ttyfd != -1) 1086 if (s->ttyfd != -1)
@@ -1078,11 +1093,6 @@ do_setup_env(struct ssh *ssh, Session *s, const char *shell)
1078 child_set_env(&env, &envsize, "SSH_ORIGINAL_COMMAND", 1093 child_set_env(&env, &envsize, "SSH_ORIGINAL_COMMAND",
1079 original_command); 1094 original_command);
1080 1095
1081#ifdef _UNICOS
1082 if (cray_tmpdir[0] != '\0')
1083 child_set_env(&env, &envsize, "TMPDIR", cray_tmpdir);
1084#endif /* _UNICOS */
1085
1086 /* 1096 /*
1087 * Since we clear KRB5CCNAME at startup, if it's set now then it 1097 * Since we clear KRB5CCNAME at startup, if it's set now then it
1088 * must have been set by a native authentication method (eg AIX or 1098 * must have been set by a native authentication method (eg AIX or
@@ -1155,7 +1165,7 @@ do_setup_env(struct ssh *ssh, Session *s, const char *shell)
1155 * first in this order). 1165 * first in this order).
1156 */ 1166 */
1157static void 1167static void
1158do_rc_files(Session *s, const char *shell) 1168do_rc_files(struct ssh *ssh, Session *s, const char *shell)
1159{ 1169{
1160 FILE *f = NULL; 1170 FILE *f = NULL;
1161 char cmd[1024]; 1171 char cmd[1024];
@@ -1167,7 +1177,7 @@ do_rc_files(Session *s, const char *shell)
1167 1177
1168 /* ignore _PATH_SSH_USER_RC for subsystems and admin forced commands */ 1178 /* ignore _PATH_SSH_USER_RC for subsystems and admin forced commands */
1169 if (!s->is_subsystem && options.adm_forced_command == NULL && 1179 if (!s->is_subsystem && options.adm_forced_command == NULL &&
1170 !no_user_rc && options.permit_user_rc && 1180 auth_opts->permit_user_rc && options.permit_user_rc &&
1171 stat(_PATH_SSH_USER_RC, &st) >= 0) { 1181 stat(_PATH_SSH_USER_RC, &st) >= 0) {
1172 snprintf(cmd, sizeof cmd, "%s -c '%s %s'", 1182 snprintf(cmd, sizeof cmd, "%s -c '%s %s'",
1173 shell, _PATH_BSHELL, _PATH_SSH_USER_RC); 1183 shell, _PATH_BSHELL, _PATH_SSH_USER_RC);
@@ -1248,10 +1258,10 @@ do_nologin(struct passwd *pw)
1248 /* /etc/nologin exists. Print its contents if we can and exit. */ 1258 /* /etc/nologin exists. Print its contents if we can and exit. */
1249 logit("User %.100s not allowed because %s exists", pw->pw_name, nl); 1259 logit("User %.100s not allowed because %s exists", pw->pw_name, nl);
1250 if ((f = fopen(nl, "r")) != NULL) { 1260 if ((f = fopen(nl, "r")) != NULL) {
1251 while (fgets(buf, sizeof(buf), f)) 1261 while (fgets(buf, sizeof(buf), f))
1252 fputs(buf, stderr); 1262 fputs(buf, stderr);
1253 fclose(f); 1263 fclose(f);
1254 } 1264 }
1255 exit(254); 1265 exit(254);
1256} 1266}
1257 1267
@@ -1483,10 +1493,6 @@ do_child(struct ssh *ssh, Session *s, const char *command)
1483 exit(1); 1493 exit(1);
1484 } 1494 }
1485 1495
1486#ifdef _UNICOS
1487 cray_setup(pw->pw_uid, pw->pw_name, command);
1488#endif /* _UNICOS */
1489
1490 /* 1496 /*
1491 * Login(1) does this as well, and it needs uid 0 for the "-h" 1497 * Login(1) does this as well, and it needs uid 0 for the "-h"
1492 * switch, so we let login(1) to this for us. 1498 * switch, so we let login(1) to this for us.
@@ -1591,7 +1597,7 @@ do_child(struct ssh *ssh, Session *s, const char *command)
1591 1597
1592 closefrom(STDERR_FILENO + 1); 1598 closefrom(STDERR_FILENO + 1);
1593 1599
1594 do_rc_files(s, shell); 1600 do_rc_files(ssh, s, shell);
1595 1601
1596 /* restore SIGPIPE for child */ 1602 /* restore SIGPIPE for child */
1597 signal(SIGPIPE, SIG_DFL); 1603 signal(SIGPIPE, SIG_DFL);
@@ -1854,8 +1860,8 @@ session_pty_req(struct ssh *ssh, Session *s)
1854 u_int len; 1860 u_int len;
1855 int n_bytes; 1861 int n_bytes;
1856 1862
1857 if (no_pty_flag || !options.permit_tty) { 1863 if (!auth_opts->permit_pty_flag || !options.permit_tty) {
1858 debug("Allocating a pty not permitted for this authentication."); 1864 debug("Allocating a pty not permitted for this connection.");
1859 return 0; 1865 return 0;
1860 } 1866 }
1861 if (s->ttyfd != -1) { 1867 if (s->ttyfd != -1) {
@@ -2043,9 +2049,11 @@ static int
2043session_auth_agent_req(struct ssh *ssh, Session *s) 2049session_auth_agent_req(struct ssh *ssh, Session *s)
2044{ 2050{
2045 static int called = 0; 2051 static int called = 0;
2052
2046 packet_check_eom(); 2053 packet_check_eom();
2047 if (no_agent_forwarding_flag || !options.allow_agent_forwarding) { 2054 if (!auth_opts->permit_agent_forwarding_flag ||
2048 debug("session_auth_agent_req: no_agent_forwarding_flag"); 2055 !options.allow_agent_forwarding) {
2056 debug("%s: agent forwarding disabled", __func__);
2049 return 0; 2057 return 0;
2050 } 2058 }
2051 if (called) { 2059 if (called) {
@@ -2423,8 +2431,8 @@ session_setup_x11fwd(struct ssh *ssh, Session *s)
2423 char hostname[NI_MAXHOST]; 2431 char hostname[NI_MAXHOST];
2424 u_int i; 2432 u_int i;
2425 2433
2426 if (no_x11_forwarding_flag) { 2434 if (!auth_opts->permit_x11_forwarding_flag) {
2427 packet_send_debug("X11 forwarding disabled in user configuration file."); 2435 packet_send_debug("X11 forwarding disabled by key options.");
2428 return 0; 2436 return 0;
2429 } 2437 }
2430 if (!options.x11_forwarding) { 2438 if (!options.x11_forwarding) {
@@ -2433,7 +2441,7 @@ session_setup_x11fwd(struct ssh *ssh, Session *s)
2433 } 2441 }
2434 if (options.xauth_location == NULL || 2442 if (options.xauth_location == NULL ||
2435 (stat(options.xauth_location, &st) == -1)) { 2443 (stat(options.xauth_location, &st) == -1)) {
2436 packet_send_debug("No xauth program; cannot forward with spoofing."); 2444 packet_send_debug("No xauth program; cannot forward X11.");
2437 return 0; 2445 return 0;
2438 } 2446 }
2439 if (s->display != NULL) { 2447 if (s->display != NULL) {
diff --git a/sftp-client.c b/sftp-client.c
index 626330262..0b53a2e68 100644
--- a/sftp-client.c
+++ b/sftp-client.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sftp-client.c,v 1.127 2017/08/11 04:41:08 djm Exp $ */ 1/* $OpenBSD: sftp-client.c,v 1.128 2017/11/28 21:10:22 dtucker Exp $ */
2/* 2/*
3 * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org> 3 * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
4 * 4 *
@@ -130,7 +130,7 @@ send_msg(struct sftp_conn *conn, struct sshbuf *m)
130} 130}
131 131
132static void 132static void
133get_msg(struct sftp_conn *conn, struct sshbuf *m) 133get_msg_extended(struct sftp_conn *conn, struct sshbuf *m, int initial)
134{ 134{
135 u_int msg_len; 135 u_int msg_len;
136 u_char *p; 136 u_char *p;
@@ -148,8 +148,12 @@ get_msg(struct sftp_conn *conn, struct sshbuf *m)
148 148
149 if ((r = sshbuf_get_u32(m, &msg_len)) != 0) 149 if ((r = sshbuf_get_u32(m, &msg_len)) != 0)
150 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 150 fatal("%s: buffer error: %s", __func__, ssh_err(r));
151 if (msg_len > SFTP_MAX_MSG_LENGTH) 151 if (msg_len > SFTP_MAX_MSG_LENGTH) {
152 fatal("Received message too long %u", msg_len); 152 do_log2(initial ? SYSLOG_LEVEL_ERROR : SYSLOG_LEVEL_FATAL,
153 "Received message too long %u", msg_len);
154 fatal("Ensure the remote shell produces no output "
155 "for non-interactive sessions.");
156 }
153 157
154 if ((r = sshbuf_reserve(m, msg_len, &p)) != 0) 158 if ((r = sshbuf_reserve(m, msg_len, &p)) != 0)
155 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 159 fatal("%s: buffer error: %s", __func__, ssh_err(r));
@@ -164,6 +168,12 @@ get_msg(struct sftp_conn *conn, struct sshbuf *m)
164} 168}
165 169
166static void 170static void
171get_msg(struct sftp_conn *conn, struct sshbuf *m)
172{
173 get_msg_extended(conn, m, 0);
174}
175
176static void
167send_string_request(struct sftp_conn *conn, u_int id, u_int code, const char *s, 177send_string_request(struct sftp_conn *conn, u_int id, u_int code, const char *s,
168 u_int len) 178 u_int len)
169{ 179{
@@ -406,7 +416,7 @@ do_init(int fd_in, int fd_out, u_int transfer_buflen, u_int num_requests,
406 416
407 sshbuf_reset(msg); 417 sshbuf_reset(msg);
408 418
409 get_msg(ret, msg); 419 get_msg_extended(ret, msg, 1);
410 420
411 /* Expecting a VERSION reply */ 421 /* Expecting a VERSION reply */
412 if ((r = sshbuf_get_u8(msg, &type)) != 0) 422 if ((r = sshbuf_get_u8(msg, &type)) != 0)
diff --git a/sftp.0 b/sftp.0
index 45b8faf55..7ad3e8d3f 100644
--- a/sftp.0
+++ b/sftp.0
@@ -7,32 +7,29 @@ SYNOPSIS
7 sftp [-46aCfpqrv] [-B buffer_size] [-b batchfile] [-c cipher] 7 sftp [-46aCfpqrv] [-B buffer_size] [-b batchfile] [-c cipher]
8 [-D sftp_server_path] [-F ssh_config] [-i identity_file] [-l limit] 8 [-D sftp_server_path] [-F ssh_config] [-i identity_file] [-l limit]
9 [-o ssh_option] [-P port] [-R num_requests] [-S program] 9 [-o ssh_option] [-P port] [-R num_requests] [-S program]
10 [-s subsystem | sftp_server] host 10 [-s subsystem | sftp_server] destination
11 sftp [user@]host[:file ...]
12 sftp [user@]host[:dir[/]]
13 sftp -b batchfile [user@]host
14 11
15DESCRIPTION 12DESCRIPTION
16 sftp is an interactive file transfer program, similar to ftp(1), which 13 sftp is a file transfer program, similar to ftp(1), which performs all
17 performs all operations over an encrypted ssh(1) transport. It may also 14 operations over an encrypted ssh(1) transport. It may also use many
18 use many features of ssh, such as public key authentication and 15 features of ssh, such as public key authentication and compression.
19 compression. sftp connects and logs into the specified host, then enters
20 an interactive command mode.
21 16
22 The second usage format will retrieve files automatically if a non- 17 The destination may be specified either as [user@]host[:path] or as a URI
23 interactive authentication method is used; otherwise it will do so after 18 in the form sftp://[user@]host[:port][/path].
24 successful interactive authentication.
25 19
26 The third usage format allows sftp to start in a remote directory. 20 If the destination includes a path and it is not a directory, sftp will
21 retrieve files automatically if a non-interactive authentication method
22 is used; otherwise it will do so after successful interactive
23 authentication.
27 24
28 The final usage format allows for automated sessions using the -b option. 25 If no path is specified, or if the path is a directory, sftp will log in
29 In such cases, it is necessary to configure non-interactive 26 to the specified host and enter interactive command mode, changing to the
30 authentication to obviate the need to enter a password at connection time 27 remote directory if one was specified. An optional trailing slash can be
31 (see sshd(8) and ssh-keygen(1) for details). 28 used to force the path to be interpreted as a directory.
32 29
33 Since some usage formats use colon characters to delimit host names from 30 Since the destination formats use colon characters to delimit host names
34 path names, IPv6 addresses must be enclosed in square brackets to avoid 31 from path names or port numbers, IPv6 addresses must be enclosed in
35 ambiguity. 32 square brackets to avoid ambiguity.
36 33
37 The options are as follows: 34 The options are as follows:
38 35
@@ -53,14 +50,15 @@ DESCRIPTION
53 -b batchfile 50 -b batchfile
54 Batch mode reads a series of commands from an input batchfile 51 Batch mode reads a series of commands from an input batchfile
55 instead of stdin. Since it lacks user interaction it should be 52 instead of stdin. Since it lacks user interaction it should be
56 used in conjunction with non-interactive authentication. A 53 used in conjunction with non-interactive authentication to
57 batchfile of M-bM-^@M-^X-M-bM-^@M-^Y may be used to indicate standard input. sftp 54 obviate the need to enter a password at connection time (see
58 will abort if any of the following commands fail: get, put, 55 sshd(8) and ssh-keygen(1) for details). A batchfile of M-bM-^@M-^X-M-bM-^@M-^Y may
59 reget, reput, rename, ln, rm, mkdir, chdir, ls, lchdir, chmod, 56 be used to indicate standard input. sftp will abort if any of
60 chown, chgrp, lpwd, df, symlink, and lmkdir. Termination on 57 the following commands fail: get, put, reget, reput, rename, ln,
61 error can be suppressed on a command by command basis by 58 rm, mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df,
62 prefixing the command with a M-bM-^@M-^X-M-bM-^@M-^Y character (for example, -rm 59 symlink, and lmkdir. Termination on error can be suppressed on a
63 /tmp/blah*). 60 command by command basis by prefixing the command with a M-bM-^@M-^X-M-bM-^@M-^Y
61 character (for example, -rm /tmp/blah*).
64 62
65 -C Enables compression (via ssh's -C flag). 63 -C Enables compression (via ssh's -C flag).
66 64
@@ -99,6 +97,7 @@ DESCRIPTION
99 AddressFamily 97 AddressFamily
100 BatchMode 98 BatchMode
101 BindAddress 99 BindAddress
100 BindInterface
102 CanonicalDomains 101 CanonicalDomains
103 CanonicalizeFallbackLocal 102 CanonicalizeFallbackLocal
104 CanonicalizeHostname 103 CanonicalizeHostname
@@ -193,8 +192,9 @@ INTERACTIVE COMMANDS
193 192
194 bye Quit sftp. 193 bye Quit sftp.
195 194
196 cd path 195 cd [path]
197 Change remote directory to path. 196 Change remote directory to path. If path is not specified, then
197 change directory to the one the session started in.
198 198
199 chgrp grp path 199 chgrp grp path
200 Change group of file path to grp. path may contain glob(3) 200 Change group of file path to grp. path may contain glob(3)
@@ -246,8 +246,9 @@ INTERACTIVE COMMANDS
246 246
247 help Display help text. 247 help Display help text.
248 248
249 lcd path 249 lcd [path]
250 Change local directory to path. 250 Change local directory to path. If path is not specified, then
251 change directory to the local user's home directory.
251 252
252 lls [ls-options [path]] 253 lls [ls-options [path]]
253 Display local directory listing of either path or current 254 Display local directory listing of either path or current
@@ -374,4 +375,4 @@ SEE ALSO
374 T. Ylonen and S. Lehtinen, SSH File Transfer Protocol, draft-ietf-secsh- 375 T. Ylonen and S. Lehtinen, SSH File Transfer Protocol, draft-ietf-secsh-
375 filexfer-00.txt, January 2001, work in progress material. 376 filexfer-00.txt, January 2001, work in progress material.
376 377
377OpenBSD 6.2 May 3, 2017 OpenBSD 6.2 378OpenBSD 6.2 February 23, 2018 OpenBSD 6.2
diff --git a/sftp.1 b/sftp.1
index c218376fb..43e0442f7 100644
--- a/sftp.1
+++ b/sftp.1
@@ -1,4 +1,4 @@
1.\" $OpenBSD: sftp.1,v 1.110 2017/05/03 21:49:18 naddy Exp $ 1.\" $OpenBSD: sftp.1,v 1.114 2018/02/23 07:38:09 jmc Exp $
2.\" 2.\"
3.\" Copyright (c) 2001 Damien Miller. All rights reserved. 3.\" Copyright (c) 2001 Damien Miller. All rights reserved.
4.\" 4.\"
@@ -22,7 +22,7 @@
22.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 22.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24.\" 24.\"
25.Dd $Mdocdate: May 3 2017 $ 25.Dd $Mdocdate: February 23 2018 $
26.Dt SFTP 1 26.Dt SFTP 1
27.Os 27.Os
28.Sh NAME 28.Sh NAME
@@ -30,7 +30,6 @@
30.Nd secure file transfer program 30.Nd secure file transfer program
31.Sh SYNOPSIS 31.Sh SYNOPSIS
32.Nm sftp 32.Nm sftp
33.Bk -words
34.Op Fl 46aCfpqrv 33.Op Fl 46aCfpqrv
35.Op Fl B Ar buffer_size 34.Op Fl B Ar buffer_size
36.Op Fl b Ar batchfile 35.Op Fl b Ar batchfile
@@ -44,54 +43,55 @@
44.Op Fl R Ar num_requests 43.Op Fl R Ar num_requests
45.Op Fl S Ar program 44.Op Fl S Ar program
46.Op Fl s Ar subsystem | sftp_server 45.Op Fl s Ar subsystem | sftp_server
47.Ar host 46.Ar destination
48.Ek
49.Nm sftp
50.Oo Ar user Ns @ Oc Ns
51.Ar host Ns Op : Ns Ar
52.Nm sftp
53.Oo
54.Ar user Ns @ Oc Ns
55.Ar host Ns Oo : Ns Ar dir Ns
56.Op Ar /
57.Oc
58.Nm sftp
59.Fl b Ar batchfile
60.Oo Ar user Ns @ Oc Ns Ar host
61.Sh DESCRIPTION 47.Sh DESCRIPTION
62.Nm 48.Nm
63is an interactive file transfer program, similar to 49is a file transfer program, similar to
64.Xr ftp 1 , 50.Xr ftp 1 ,
65which performs all operations over an encrypted 51which performs all operations over an encrypted
66.Xr ssh 1 52.Xr ssh 1
67transport. 53transport.
68It may also use many features of ssh, such as public key authentication and 54It may also use many features of ssh, such as public key authentication and
69compression. 55compression.
70.Nm
71connects and logs into the specified
72.Ar host ,
73then enters an interactive command mode.
74.Pp 56.Pp
75The second usage format will retrieve files automatically if a non-interactive 57The
58.Ar destination
59may be specified either as
60.Sm off
61.Oo user @ Oc host Op : path
62.Sm on
63or as a URI in the form
64.Sm off
65.No sftp:// Oo user @ Oc host Oo : port Oc Op / path .
66.Sm on
67.Pp
68If the
69.Ar destination
70includes a
71.Ar path
72and it is not a directory,
73.Nm
74will retrieve files automatically if a non-interactive
76authentication method is used; otherwise it will do so after 75authentication method is used; otherwise it will do so after
77successful interactive authentication. 76successful interactive authentication.
78.Pp 77.Pp
79The third usage format allows 78If no
79.Ar path
80is specified, or if the
81.Ar path
82is a directory,
80.Nm 83.Nm
81to start in a remote directory. 84will log in to the specified
82.Pp 85.Ar host
83The final usage format allows for automated sessions using the 86and enter interactive command mode, changing to the remote directory
84.Fl b 87if one was specified.
85option. 88An optional trailing slash can be used to force the
86In such cases, it is necessary to configure non-interactive authentication 89.Ar path
87to obviate the need to enter a password at connection time (see 90to be interpreted as a directory.
88.Xr sshd 8
89and
90.Xr ssh-keygen 1
91for details).
92.Pp 91.Pp
93Since some usage formats use colon characters to delimit host names from path 92Since the destination formats use colon characters to delimit host
94names, IPv6 addresses must be enclosed in square brackets to avoid ambiguity. 93names from path names or port numbers, IPv6 addresses must be
94enclosed in square brackets to avoid ambiguity.
95.Pp 95.Pp
96The options are as follows: 96The options are as follows:
97.Bl -tag -width Ds 97.Bl -tag -width Ds
@@ -121,7 +121,12 @@ Batch mode reads a series of commands from an input
121instead of 121instead of
122.Em stdin . 122.Em stdin .
123Since it lacks user interaction it should be used in conjunction with 123Since it lacks user interaction it should be used in conjunction with
124non-interactive authentication. 124non-interactive authentication to obviate the need to enter a password
125at connection time (see
126.Xr sshd 8
127and
128.Xr ssh-keygen 1
129for details).
125A 130A
126.Ar batchfile 131.Ar batchfile
127of 132of
@@ -189,6 +194,7 @@ For full details of the options listed below, and their possible values, see
189.It AddressFamily 194.It AddressFamily
190.It BatchMode 195.It BatchMode
191.It BindAddress 196.It BindAddress
197.It BindInterface
192.It CanonicalDomains 198.It CanonicalDomains
193.It CanonicalizeFallbackLocal 199.It CanonicalizeFallbackLocal
194.It CanonicalizeHostname 200.It CanonicalizeHostname
@@ -296,9 +302,12 @@ must be escaped with backslashes
296.It Ic bye 302.It Ic bye
297Quit 303Quit
298.Nm sftp . 304.Nm sftp .
299.It Ic cd Ar path 305.It Ic cd Op Ar path
300Change remote directory to 306Change remote directory to
301.Ar path . 307.Ar path .
308If
309.Ar path
310is not specified, then change directory to the one the session started in.
302.It Ic chgrp Ar grp Ar path 311.It Ic chgrp Ar grp Ar path
303Change group of file 312Change group of file
304.Ar path 313.Ar path
@@ -402,9 +411,12 @@ Note that
402does not follow symbolic links when performing recursive transfers. 411does not follow symbolic links when performing recursive transfers.
403.It Ic help 412.It Ic help
404Display help text. 413Display help text.
405.It Ic lcd Ar path 414.It Ic lcd Op Ar path
406Change local directory to 415Change local directory to
407.Ar path . 416.Ar path .
417If
418.Ar path
419is not specified, then change directory to the local user's home directory.
408.It Ic lls Op Ar ls-options Op Ar path 420.It Ic lls Op Ar ls-options Op Ar path
409Display local directory listing of either 421Display local directory listing of either
410.Ar path 422.Ar path
diff --git a/sftp.c b/sftp.c
index 67110f738..5ce864eeb 100644
--- a/sftp.c
+++ b/sftp.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sftp.c,v 1.180 2017/06/10 06:33:34 djm Exp $ */ 1/* $OpenBSD: sftp.c,v 1.182 2017/11/03 03:46:52 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org> 3 * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
4 * 4 *
@@ -217,8 +217,6 @@ static const struct CMD cmds[] = {
217 { NULL, -1, -1 } 217 { NULL, -1, -1 }
218}; 218};
219 219
220int interactive_loop(struct sftp_conn *, char *file1, char *file2);
221
222/* ARGSUSED */ 220/* ARGSUSED */
223static void 221static void
224killchild(int signo) 222killchild(int signo)
@@ -1288,7 +1286,7 @@ parse_args(const char **cpp, int *ignore_errors, int *aflag,
1288 char *cp2, **argv; 1286 char *cp2, **argv;
1289 int base = 0; 1287 int base = 0;
1290 long l; 1288 long l;
1291 int i, cmdnum, optidx, argc; 1289 int path1_mandatory = 0, i, cmdnum, optidx, argc;
1292 1290
1293 /* Skip leading whitespace */ 1291 /* Skip leading whitespace */
1294 cp = cp + strspn(cp, WHITESPACE); 1292 cp = cp + strspn(cp, WHITESPACE);
@@ -1378,13 +1376,17 @@ parse_args(const char **cpp, int *ignore_errors, int *aflag,
1378 case I_RM: 1376 case I_RM:
1379 case I_MKDIR: 1377 case I_MKDIR:
1380 case I_RMDIR: 1378 case I_RMDIR:
1379 case I_LMKDIR:
1380 path1_mandatory = 1;
1381 /* FALLTHROUGH */
1381 case I_CHDIR: 1382 case I_CHDIR:
1382 case I_LCHDIR: 1383 case I_LCHDIR:
1383 case I_LMKDIR:
1384 if ((optidx = parse_no_flags(cmd, argv, argc)) == -1) 1384 if ((optidx = parse_no_flags(cmd, argv, argc)) == -1)
1385 return -1; 1385 return -1;
1386 /* Get pathname (mandatory) */ 1386 /* Get pathname (mandatory) */
1387 if (argc - optidx < 1) { 1387 if (argc - optidx < 1) {
1388 if (!path1_mandatory)
1389 break; /* return a NULL path1 */
1388 error("You must specify a path after a %s command.", 1390 error("You must specify a path after a %s command.",
1389 cmd); 1391 cmd);
1390 return -1; 1392 return -1;
@@ -1469,7 +1471,7 @@ parse_args(const char **cpp, int *ignore_errors, int *aflag,
1469 1471
1470static int 1472static int
1471parse_dispatch_command(struct sftp_conn *conn, const char *cmd, char **pwd, 1473parse_dispatch_command(struct sftp_conn *conn, const char *cmd, char **pwd,
1472 int err_abort) 1474 const char *startdir, int err_abort)
1473{ 1475{
1474 char *path1, *path2, *tmp; 1476 char *path1, *path2, *tmp;
1475 int ignore_errors = 0, aflag = 0, fflag = 0, hflag = 0, 1477 int ignore_errors = 0, aflag = 0, fflag = 0, hflag = 0,
@@ -1549,6 +1551,8 @@ parse_dispatch_command(struct sftp_conn *conn, const char *cmd, char **pwd,
1549 err = do_rmdir(conn, path1); 1551 err = do_rmdir(conn, path1);
1550 break; 1552 break;
1551 case I_CHDIR: 1553 case I_CHDIR:
1554 if (path1 == NULL || *path1 == '\0')
1555 path1 = xstrdup(startdir);
1552 path1 = make_absolute(path1, *pwd); 1556 path1 = make_absolute(path1, *pwd);
1553 if ((tmp = do_realpath(conn, path1)) == NULL) { 1557 if ((tmp = do_realpath(conn, path1)) == NULL) {
1554 err = 1; 1558 err = 1;
@@ -1597,6 +1601,8 @@ parse_dispatch_command(struct sftp_conn *conn, const char *cmd, char **pwd,
1597 err = do_df(conn, path1, hflag, iflag); 1601 err = do_df(conn, path1, hflag, iflag);
1598 break; 1602 break;
1599 case I_LCHDIR: 1603 case I_LCHDIR:
1604 if (path1 == NULL || *path1 == '\0')
1605 path1 = xstrdup("~");
1600 tmp = tilde_expand_filename(path1, getuid()); 1606 tmp = tilde_expand_filename(path1, getuid());
1601 free(path1); 1607 free(path1);
1602 path1 = tmp; 1608 path1 = tmp;
@@ -2083,11 +2089,11 @@ complete(EditLine *el, int ch)
2083} 2089}
2084#endif /* USE_LIBEDIT */ 2090#endif /* USE_LIBEDIT */
2085 2091
2086int 2092static int
2087interactive_loop(struct sftp_conn *conn, char *file1, char *file2) 2093interactive_loop(struct sftp_conn *conn, char *file1, char *file2)
2088{ 2094{
2089 char *remote_path; 2095 char *remote_path;
2090 char *dir = NULL; 2096 char *dir = NULL, *startdir = NULL;
2091 char cmd[2048]; 2097 char cmd[2048];
2092 int err, interactive; 2098 int err, interactive;
2093 EditLine *el = NULL; 2099 EditLine *el = NULL;
@@ -2131,6 +2137,7 @@ interactive_loop(struct sftp_conn *conn, char *file1, char *file2)
2131 remote_path = do_realpath(conn, "."); 2137 remote_path = do_realpath(conn, ".");
2132 if (remote_path == NULL) 2138 if (remote_path == NULL)
2133 fatal("Need cwd"); 2139 fatal("Need cwd");
2140 startdir = xstrdup(remote_path);
2134 2141
2135 if (file1 != NULL) { 2142 if (file1 != NULL) {
2136 dir = xstrdup(file1); 2143 dir = xstrdup(file1);
@@ -2141,8 +2148,9 @@ interactive_loop(struct sftp_conn *conn, char *file1, char *file2)
2141 mprintf("Changing to: %s\n", dir); 2148 mprintf("Changing to: %s\n", dir);
2142 snprintf(cmd, sizeof cmd, "cd \"%s\"", dir); 2149 snprintf(cmd, sizeof cmd, "cd \"%s\"", dir);
2143 if (parse_dispatch_command(conn, cmd, 2150 if (parse_dispatch_command(conn, cmd,
2144 &remote_path, 1) != 0) { 2151 &remote_path, startdir, 1) != 0) {
2145 free(dir); 2152 free(dir);
2153 free(startdir);
2146 free(remote_path); 2154 free(remote_path);
2147 free(conn); 2155 free(conn);
2148 return (-1); 2156 return (-1);
@@ -2154,8 +2162,9 @@ interactive_loop(struct sftp_conn *conn, char *file1, char *file2)
2154 file2 == NULL ? "" : " ", 2162 file2 == NULL ? "" : " ",
2155 file2 == NULL ? "" : file2); 2163 file2 == NULL ? "" : file2);
2156 err = parse_dispatch_command(conn, cmd, 2164 err = parse_dispatch_command(conn, cmd,
2157 &remote_path, 1); 2165 &remote_path, startdir, 1);
2158 free(dir); 2166 free(dir);
2167 free(startdir);
2159 free(remote_path); 2168 free(remote_path);
2160 free(conn); 2169 free(conn);
2161 return (err); 2170 return (err);
@@ -2214,11 +2223,12 @@ interactive_loop(struct sftp_conn *conn, char *file1, char *file2)
2214 signal(SIGINT, cmd_interrupt); 2223 signal(SIGINT, cmd_interrupt);
2215 2224
2216 err = parse_dispatch_command(conn, cmd, &remote_path, 2225 err = parse_dispatch_command(conn, cmd, &remote_path,
2217 batchmode); 2226 startdir, batchmode);
2218 if (err != 0) 2227 if (err != 0)
2219 break; 2228 break;
2220 } 2229 }
2221 free(remote_path); 2230 free(remote_path);
2231 free(startdir);
2222 free(conn); 2232 free(conn);
2223 2233
2224#ifdef USE_LIBEDIT 2234#ifdef USE_LIBEDIT
@@ -2301,19 +2311,16 @@ usage(void)
2301 "[-i identity_file] [-l limit]\n" 2311 "[-i identity_file] [-l limit]\n"
2302 " [-o ssh_option] [-P port] [-R num_requests] " 2312 " [-o ssh_option] [-P port] [-R num_requests] "
2303 "[-S program]\n" 2313 "[-S program]\n"
2304 " [-s subsystem | sftp_server] host\n" 2314 " [-s subsystem | sftp_server] destination\n",
2305 " %s [user@]host[:file ...]\n" 2315 __progname);
2306 " %s [user@]host[:dir[/]]\n"
2307 " %s -b batchfile [user@]host\n",
2308 __progname, __progname, __progname, __progname);
2309 exit(1); 2316 exit(1);
2310} 2317}
2311 2318
2312int 2319int
2313main(int argc, char **argv) 2320main(int argc, char **argv)
2314{ 2321{
2315 int in, out, ch, err; 2322 int in, out, ch, err, tmp, port = -1;
2316 char *host = NULL, *userhost, *cp, *file2 = NULL; 2323 char *host = NULL, *user, *cp, *file2 = NULL;
2317 int debug_level = 0, sshver = 2; 2324 int debug_level = 0, sshver = 2;
2318 char *file1 = NULL, *sftp_server = NULL; 2325 char *file1 = NULL, *sftp_server = NULL;
2319 char *ssh_program = _PATH_SSH_PROGRAM, *sftp_direct = NULL; 2326 char *ssh_program = _PATH_SSH_PROGRAM, *sftp_direct = NULL;
@@ -2368,7 +2375,9 @@ main(int argc, char **argv)
2368 addargs(&args, "-%c", ch); 2375 addargs(&args, "-%c", ch);
2369 break; 2376 break;
2370 case 'P': 2377 case 'P':
2371 addargs(&args, "-oPort %s", optarg); 2378 port = a2port(optarg);
2379 if (port <= 0)
2380 fatal("Bad port \"%s\"\n", optarg);
2372 break; 2381 break;
2373 case 'v': 2382 case 'v':
2374 if (debug_level < 3) { 2383 if (debug_level < 3) {
@@ -2451,33 +2460,38 @@ main(int argc, char **argv)
2451 if (sftp_direct == NULL) { 2460 if (sftp_direct == NULL) {
2452 if (optind == argc || argc > (optind + 2)) 2461 if (optind == argc || argc > (optind + 2))
2453 usage(); 2462 usage();
2463 argv += optind;
2454 2464
2455 userhost = xstrdup(argv[optind]); 2465 switch (parse_uri("sftp", *argv, &user, &host, &tmp, &file1)) {
2456 file2 = argv[optind+1]; 2466 case -1:
2457 2467 usage();
2458 if ((host = strrchr(userhost, '@')) == NULL) 2468 break;
2459 host = userhost; 2469 case 0:
2460 else { 2470 if (tmp != -1)
2461 *host++ = '\0'; 2471 port = tmp;
2462 if (!userhost[0]) { 2472 break;
2463 fprintf(stderr, "Missing username\n"); 2473 default:
2464 usage(); 2474 if (parse_user_host_path(*argv, &user, &host,
2475 &file1) == -1) {
2476 /* Treat as a plain hostname. */
2477 host = xstrdup(*argv);
2478 host = cleanhostname(host);
2465 } 2479 }
2466 addargs(&args, "-l"); 2480 break;
2467 addargs(&args, "%s", userhost);
2468 }
2469
2470 if ((cp = colon(host)) != NULL) {
2471 *cp++ = '\0';
2472 file1 = cp;
2473 } 2481 }
2482 file2 = *(argv + 1);
2474 2483
2475 host = cleanhostname(host);
2476 if (!*host) { 2484 if (!*host) {
2477 fprintf(stderr, "Missing hostname\n"); 2485 fprintf(stderr, "Missing hostname\n");
2478 usage(); 2486 usage();
2479 } 2487 }
2480 2488
2489 if (port != -1)
2490 addargs(&args, "-oPort %d", port);
2491 if (user != NULL) {
2492 addargs(&args, "-l");
2493 addargs(&args, "%s", user);
2494 }
2481 addargs(&args, "-oProtocol %d", sshver); 2495 addargs(&args, "-oProtocol %d", sshver);
2482 2496
2483 /* no subsystem if the server-spec contains a '/' */ 2497 /* no subsystem if the server-spec contains a '/' */
diff --git a/ssh-add.c b/ssh-add.c
index 2afd48330..adcc45998 100644
--- a/ssh-add.c
+++ b/ssh-add.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-add.c,v 1.134 2017/08/29 09:42:29 dlg Exp $ */ 1/* $OpenBSD: ssh-add.c,v 1.135 2018/02/23 15:58:37 markus Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -78,6 +78,7 @@ static char *default_files[] = {
78#endif 78#endif
79#endif /* WITH_OPENSSL */ 79#endif /* WITH_OPENSSL */
80 _PATH_SSH_CLIENT_ID_ED25519, 80 _PATH_SSH_CLIENT_ID_ED25519,
81 _PATH_SSH_CLIENT_ID_XMSS,
81 NULL 82 NULL
82}; 83};
83 84
@@ -89,6 +90,10 @@ static int lifetime = 0;
89/* User has to confirm key use */ 90/* User has to confirm key use */
90static int confirm = 0; 91static int confirm = 0;
91 92
93/* Maximum number of signatures (XMSS) */
94static u_int maxsign = 0;
95static u_int minleft = 0;
96
92/* we keep a cache of one passphrase */ 97/* we keep a cache of one passphrase */
93static char *pass = NULL; 98static char *pass = NULL;
94static void 99static void
@@ -190,7 +195,10 @@ add_file(int agent_fd, const char *filename, int key_only, int qflag)
190 char *comment = NULL; 195 char *comment = NULL;
191 char msg[1024], *certpath = NULL; 196 char msg[1024], *certpath = NULL;
192 int r, fd, ret = -1; 197 int r, fd, ret = -1;
198 size_t i;
199 u_int32_t left;
193 struct sshbuf *keyblob; 200 struct sshbuf *keyblob;
201 struct ssh_identitylist *idlist;
194 202
195 if (strcmp(filename, "-") == 0) { 203 if (strcmp(filename, "-") == 0) {
196 fd = STDIN_FILENO; 204 fd = STDIN_FILENO;
@@ -268,8 +276,40 @@ add_file(int agent_fd, const char *filename, int key_only, int qflag)
268 comment = xstrdup(filename); 276 comment = xstrdup(filename);
269 sshbuf_free(keyblob); 277 sshbuf_free(keyblob);
270 278
279 /* For XMSS */
280 if ((r = sshkey_set_filename(private, filename)) != 0) {
281 fprintf(stderr, "Could not add filename to private key: %s (%s)\n",
282 filename, comment);
283 goto out;
284 }
285 if (maxsign && minleft &&
286 (r = ssh_fetch_identitylist(agent_fd, &idlist)) == 0) {
287 for (i = 0; i < idlist->nkeys; i++) {
288 if (!sshkey_equal_public(idlist->keys[i], private))
289 continue;
290 left = sshkey_signatures_left(idlist->keys[i]);
291 if (left < minleft) {
292 fprintf(stderr,
293 "Only %d signatures left.\n", left);
294 break;
295 }
296 fprintf(stderr, "Skipping update: ");
297 if (left == minleft) {
298 fprintf(stderr,
299 "required signatures left (%d).\n", left);
300 } else {
301 fprintf(stderr,
302 "more signatures left (%d) than"
303 " required (%d).\n", left, minleft);
304 }
305 ssh_free_identitylist(idlist);
306 goto out;
307 }
308 ssh_free_identitylist(idlist);
309 }
310
271 if ((r = ssh_add_identity_constrained(agent_fd, private, comment, 311 if ((r = ssh_add_identity_constrained(agent_fd, private, comment,
272 lifetime, confirm)) == 0) { 312 lifetime, confirm, maxsign)) == 0) {
273 fprintf(stderr, "Identity added: %s (%s)\n", filename, comment); 313 fprintf(stderr, "Identity added: %s (%s)\n", filename, comment);
274 ret = 0; 314 ret = 0;
275 if (lifetime != 0) 315 if (lifetime != 0)
@@ -317,7 +357,7 @@ add_file(int agent_fd, const char *filename, int key_only, int qflag)
317 sshkey_free(cert); 357 sshkey_free(cert);
318 358
319 if ((r = ssh_add_identity_constrained(agent_fd, private, comment, 359 if ((r = ssh_add_identity_constrained(agent_fd, private, comment,
320 lifetime, confirm)) != 0) { 360 lifetime, confirm, maxsign)) != 0) {
321 error("Certificate %s (%s) add failed: %s", certpath, 361 error("Certificate %s (%s) add failed: %s", certpath,
322 private->cert->key_id, ssh_err(r)); 362 private->cert->key_id, ssh_err(r));
323 goto out; 363 goto out;
@@ -368,6 +408,7 @@ list_identities(int agent_fd, int do_fp)
368 char *fp; 408 char *fp;
369 int r; 409 int r;
370 struct ssh_identitylist *idlist; 410 struct ssh_identitylist *idlist;
411 u_int32_t left;
371 size_t i; 412 size_t i;
372 413
373 if ((r = ssh_fetch_identitylist(agent_fd, &idlist)) != 0) { 414 if ((r = ssh_fetch_identitylist(agent_fd, &idlist)) != 0) {
@@ -392,7 +433,12 @@ list_identities(int agent_fd, int do_fp)
392 ssh_err(r)); 433 ssh_err(r));
393 continue; 434 continue;
394 } 435 }
395 fprintf(stdout, " %s\n", idlist->comments[i]); 436 fprintf(stdout, " %s", idlist->comments[i]);
437 left = sshkey_signatures_left(idlist->keys[i]);
438 if (left > 0)
439 fprintf(stdout,
440 " [signatures left %d]", left);
441 fprintf(stdout, "\n");
396 } 442 }
397 } 443 }
398 ssh_free_identitylist(idlist); 444 ssh_free_identitylist(idlist);
@@ -454,6 +500,8 @@ usage(void)
454 fprintf(stderr, " -L List public key parameters of all identities.\n"); 500 fprintf(stderr, " -L List public key parameters of all identities.\n");
455 fprintf(stderr, " -k Load only keys and not certificates.\n"); 501 fprintf(stderr, " -k Load only keys and not certificates.\n");
456 fprintf(stderr, " -c Require confirmation to sign using identities\n"); 502 fprintf(stderr, " -c Require confirmation to sign using identities\n");
503 fprintf(stderr, " -m minleft Maxsign is only changed if less than minleft are left (for XMSS)\n");
504 fprintf(stderr, " -M maxsign Maximum number of signatures allowed (for XMSS)\n");
457 fprintf(stderr, " -t life Set lifetime (in seconds) when adding identities.\n"); 505 fprintf(stderr, " -t life Set lifetime (in seconds) when adding identities.\n");
458 fprintf(stderr, " -d Delete identity.\n"); 506 fprintf(stderr, " -d Delete identity.\n");
459 fprintf(stderr, " -D Delete all identities.\n"); 507 fprintf(stderr, " -D Delete all identities.\n");
@@ -500,7 +548,7 @@ main(int argc, char **argv)
500 exit(2); 548 exit(2);
501 } 549 }
502 550
503 while ((ch = getopt(argc, argv, "klLcdDxXE:e:qs:t:")) != -1) { 551 while ((ch = getopt(argc, argv, "klLcdDxXE:e:M:m:qs:t:")) != -1) {
504 switch (ch) { 552 switch (ch) {
505 case 'E': 553 case 'E':
506 fingerprint_hash = ssh_digest_alg_by_name(optarg); 554 fingerprint_hash = ssh_digest_alg_by_name(optarg);
@@ -525,6 +573,22 @@ main(int argc, char **argv)
525 case 'c': 573 case 'c':
526 confirm = 1; 574 confirm = 1;
527 break; 575 break;
576 case 'm':
577 minleft = (int)strtonum(optarg, 1, UINT_MAX, NULL);
578 if (minleft == 0) {
579 usage();
580 ret = 1;
581 goto done;
582 }
583 break;
584 case 'M':
585 maxsign = (int)strtonum(optarg, 1, UINT_MAX, NULL);
586 if (maxsign == 0) {
587 usage();
588 ret = 1;
589 goto done;
590 }
591 break;
528 case 'd': 592 case 'd':
529 deleting = 1; 593 deleting = 1;
530 break; 594 break;
diff --git a/ssh-agent.c b/ssh-agent.c
index 0c6c36592..2a4578b03 100644
--- a/ssh-agent.c
+++ b/ssh-agent.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-agent.c,v 1.224 2017/07/24 04:34:28 djm Exp $ */ 1/* $OpenBSD: ssh-agent.c,v 1.228 2018/02/23 15:58:37 markus Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -245,7 +245,8 @@ process_request_identities(SocketEntry *e)
245 (r = sshbuf_put_u32(msg, idtab->nentries)) != 0) 245 (r = sshbuf_put_u32(msg, idtab->nentries)) != 0)
246 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 246 fatal("%s: buffer error: %s", __func__, ssh_err(r));
247 TAILQ_FOREACH(id, &idtab->idlist, next) { 247 TAILQ_FOREACH(id, &idtab->idlist, next) {
248 if ((r = sshkey_puts(id->key, msg)) != 0 || 248 if ((r = sshkey_puts_opts(id->key, msg, SSHKEY_SERIALIZE_INFO))
249 != 0 ||
249 (r = sshbuf_put_cstring(msg, id->comment)) != 0) { 250 (r = sshbuf_put_cstring(msg, id->comment)) != 0) {
250 error("%s: put key/comment: %s", __func__, 251 error("%s: put key/comment: %s", __func__,
251 ssh_err(r)); 252 ssh_err(r));
@@ -287,10 +288,11 @@ process_sign_request2(SocketEntry *e)
287 fatal("%s: sshbuf_new failed", __func__); 288 fatal("%s: sshbuf_new failed", __func__);
288 if ((r = sshkey_froms(e->request, &key)) != 0 || 289 if ((r = sshkey_froms(e->request, &key)) != 0 ||
289 (r = sshbuf_get_string_direct(e->request, &data, &dlen)) != 0 || 290 (r = sshbuf_get_string_direct(e->request, &data, &dlen)) != 0 ||
290 (r = sshbuf_get_u32(e->request, &flags)) != 0) 291 (r = sshbuf_get_u32(e->request, &flags)) != 0) {
291 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 292 error("%s: couldn't parse request: %s", __func__, ssh_err(r));
292 if (flags & SSH_AGENT_OLD_SIGNATURE) 293 goto send;
293 compat = SSH_BUG_SIGBLOB; 294 }
295
294 if ((id = lookup_identity(key)) == NULL) { 296 if ((id = lookup_identity(key)) == NULL) {
295 verbose("%s: %s key not found", __func__, sshkey_type(key)); 297 verbose("%s: %s key not found", __func__, sshkey_type(key));
296 goto send; 298 goto send;
@@ -401,7 +403,7 @@ process_add_identity(SocketEntry *e)
401{ 403{
402 Identity *id; 404 Identity *id;
403 int success = 0, confirm = 0; 405 int success = 0, confirm = 0;
404 u_int seconds; 406 u_int seconds, maxsign;
405 char *comment = NULL; 407 char *comment = NULL;
406 time_t death = 0; 408 time_t death = 0;
407 struct sshkey *k = NULL; 409 struct sshkey *k = NULL;
@@ -432,6 +434,18 @@ process_add_identity(SocketEntry *e)
432 case SSH_AGENT_CONSTRAIN_CONFIRM: 434 case SSH_AGENT_CONSTRAIN_CONFIRM:
433 confirm = 1; 435 confirm = 1;
434 break; 436 break;
437 case SSH_AGENT_CONSTRAIN_MAXSIGN:
438 if ((r = sshbuf_get_u32(e->request, &maxsign)) != 0) {
439 error("%s: bad maxsign constraint: %s",
440 __func__, ssh_err(r));
441 goto err;
442 }
443 if ((r = sshkey_enable_maxsign(k, maxsign)) != 0) {
444 error("%s: cannot enable maxsign: %s",
445 __func__, ssh_err(r));
446 goto err;
447 }
448 break;
435 default: 449 default:
436 error("%s: Unknown constraint %d", __func__, ctype); 450 error("%s: Unknown constraint %d", __func__, ctype);
437 err: 451 err:
@@ -447,14 +461,15 @@ process_add_identity(SocketEntry *e)
447 death = monotime() + lifetime; 461 death = monotime() + lifetime;
448 if ((id = lookup_identity(k)) == NULL) { 462 if ((id = lookup_identity(k)) == NULL) {
449 id = xcalloc(1, sizeof(Identity)); 463 id = xcalloc(1, sizeof(Identity));
450 id->key = k;
451 TAILQ_INSERT_TAIL(&idtab->idlist, id, next); 464 TAILQ_INSERT_TAIL(&idtab->idlist, id, next);
452 /* Increment the number of identities. */ 465 /* Increment the number of identities. */
453 idtab->nentries++; 466 idtab->nentries++;
454 } else { 467 } else {
455 sshkey_free(k); 468 /* key state might have been updated */
469 sshkey_free(id->key);
456 free(id->comment); 470 free(id->comment);
457 } 471 }
472 id->key = k;
458 id->comment = comment; 473 id->comment = comment;
459 id->death = death; 474 id->death = death;
460 id->confirm = confirm; 475 id->confirm = confirm;
@@ -472,6 +487,11 @@ process_lock_agent(SocketEntry *e, int lock)
472 static u_int fail_count = 0; 487 static u_int fail_count = 0;
473 size_t pwlen; 488 size_t pwlen;
474 489
490 /*
491 * This is deliberately fatal: the user has requested that we lock,
492 * but we can't parse their request properly. The only safe thing to
493 * do is abort.
494 */
475 if ((r = sshbuf_get_cstring(e->request, &passwd, &pwlen)) != 0) 495 if ((r = sshbuf_get_cstring(e->request, &passwd, &pwlen)) != 0)
476 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 496 fatal("%s: buffer error: %s", __func__, ssh_err(r));
477 if (pwlen == 0) { 497 if (pwlen == 0) {
@@ -529,7 +549,7 @@ no_identities(SocketEntry *e)
529static void 549static void
530process_add_smartcard_key(SocketEntry *e) 550process_add_smartcard_key(SocketEntry *e)
531{ 551{
532 char *provider = NULL, *pin, canonical_provider[PATH_MAX]; 552 char *provider = NULL, *pin = NULL, canonical_provider[PATH_MAX];
533 int r, i, count = 0, success = 0, confirm = 0; 553 int r, i, count = 0, success = 0, confirm = 0;
534 u_int seconds; 554 u_int seconds;
535 time_t death = 0; 555 time_t death = 0;
@@ -538,17 +558,23 @@ process_add_smartcard_key(SocketEntry *e)
538 Identity *id; 558 Identity *id;
539 559
540 if ((r = sshbuf_get_cstring(e->request, &provider, NULL)) != 0 || 560 if ((r = sshbuf_get_cstring(e->request, &provider, NULL)) != 0 ||
541 (r = sshbuf_get_cstring(e->request, &pin, NULL)) != 0) 561 (r = sshbuf_get_cstring(e->request, &pin, NULL)) != 0) {
542 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 562 error("%s: buffer error: %s", __func__, ssh_err(r));
563 goto send;
564 }
543 565
544 while (sshbuf_len(e->request)) { 566 while (sshbuf_len(e->request)) {
545 if ((r = sshbuf_get_u8(e->request, &type)) != 0) 567 if ((r = sshbuf_get_u8(e->request, &type)) != 0) {
546 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 568 error("%s: buffer error: %s", __func__, ssh_err(r));
569 goto send;
570 }
547 switch (type) { 571 switch (type) {
548 case SSH_AGENT_CONSTRAIN_LIFETIME: 572 case SSH_AGENT_CONSTRAIN_LIFETIME:
549 if ((r = sshbuf_get_u32(e->request, &seconds)) != 0) 573 if ((r = sshbuf_get_u32(e->request, &seconds)) != 0) {
550 fatal("%s: buffer error: %s", 574 error("%s: buffer error: %s",
551 __func__, ssh_err(r)); 575 __func__, ssh_err(r));
576 goto send;
577 }
552 death = monotime() + seconds; 578 death = monotime() + seconds;
553 break; 579 break;
554 case SSH_AGENT_CONSTRAIN_CONFIRM: 580 case SSH_AGENT_CONSTRAIN_CONFIRM:
@@ -606,8 +632,10 @@ process_remove_smartcard_key(SocketEntry *e)
606 Identity *id, *nxt; 632 Identity *id, *nxt;
607 633
608 if ((r = sshbuf_get_cstring(e->request, &provider, NULL)) != 0 || 634 if ((r = sshbuf_get_cstring(e->request, &provider, NULL)) != 0 ||
609 (r = sshbuf_get_cstring(e->request, &pin, NULL)) != 0) 635 (r = sshbuf_get_cstring(e->request, &pin, NULL)) != 0) {
610 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 636 error("%s: buffer error: %s", __func__, ssh_err(r));
637 goto send;
638 }
611 free(pin); 639 free(pin);
612 640
613 if (realpath(provider, canonical_provider) == NULL) { 641 if (realpath(provider, canonical_provider) == NULL) {
diff --git a/ssh-dss.c b/ssh-dss.c
index 7af59fa6e..9f832ee2b 100644
--- a/ssh-dss.c
+++ b/ssh-dss.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-dss.c,v 1.35 2016/04/21 06:08:02 djm Exp $ */ 1/* $OpenBSD: ssh-dss.c,v 1.37 2018/02/07 02:06:51 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * 4 *
@@ -86,42 +86,28 @@ ssh_dss_sign(const struct sshkey *key, u_char **sigp, size_t *lenp,
86 BN_bn2bin(sig->r, sigblob + SIGBLOB_LEN - INTBLOB_LEN - rlen); 86 BN_bn2bin(sig->r, sigblob + SIGBLOB_LEN - INTBLOB_LEN - rlen);
87 BN_bn2bin(sig->s, sigblob + SIGBLOB_LEN - slen); 87 BN_bn2bin(sig->s, sigblob + SIGBLOB_LEN - slen);
88 88
89 if (compat & SSH_BUG_SIGBLOB) { 89 if ((b = sshbuf_new()) == NULL) {
90 if (sigp != NULL) { 90 ret = SSH_ERR_ALLOC_FAIL;
91 if ((*sigp = malloc(SIGBLOB_LEN)) == NULL) { 91 goto out;
92 ret = SSH_ERR_ALLOC_FAIL; 92 }
93 goto out; 93 if ((ret = sshbuf_put_cstring(b, "ssh-dss")) != 0 ||
94 } 94 (ret = sshbuf_put_string(b, sigblob, SIGBLOB_LEN)) != 0)
95 memcpy(*sigp, sigblob, SIGBLOB_LEN); 95 goto out;
96 } 96
97 if (lenp != NULL) 97 len = sshbuf_len(b);
98 *lenp = SIGBLOB_LEN; 98 if (sigp != NULL) {
99 ret = 0; 99 if ((*sigp = malloc(len)) == NULL) {
100 } else {
101 /* ietf-drafts */
102 if ((b = sshbuf_new()) == NULL) {
103 ret = SSH_ERR_ALLOC_FAIL; 100 ret = SSH_ERR_ALLOC_FAIL;
104 goto out; 101 goto out;
105 } 102 }
106 if ((ret = sshbuf_put_cstring(b, "ssh-dss")) != 0 || 103 memcpy(*sigp, sshbuf_ptr(b), len);
107 (ret = sshbuf_put_string(b, sigblob, SIGBLOB_LEN)) != 0)
108 goto out;
109 len = sshbuf_len(b);
110 if (sigp != NULL) {
111 if ((*sigp = malloc(len)) == NULL) {
112 ret = SSH_ERR_ALLOC_FAIL;
113 goto out;
114 }
115 memcpy(*sigp, sshbuf_ptr(b), len);
116 }
117 if (lenp != NULL)
118 *lenp = len;
119 ret = 0;
120 } 104 }
105 if (lenp != NULL)
106 *lenp = len;
107 ret = 0;
121 out: 108 out:
122 explicit_bzero(digest, sizeof(digest)); 109 explicit_bzero(digest, sizeof(digest));
123 if (sig != NULL) 110 DSA_SIG_free(sig);
124 DSA_SIG_free(sig);
125 sshbuf_free(b); 111 sshbuf_free(b);
126 return ret; 112 return ret;
127} 113}
@@ -146,28 +132,20 @@ ssh_dss_verify(const struct sshkey *key,
146 return SSH_ERR_INTERNAL_ERROR; 132 return SSH_ERR_INTERNAL_ERROR;
147 133
148 /* fetch signature */ 134 /* fetch signature */
149 if (compat & SSH_BUG_SIGBLOB) { 135 if ((b = sshbuf_from(signature, signaturelen)) == NULL)
150 if ((sigblob = malloc(signaturelen)) == NULL) 136 return SSH_ERR_ALLOC_FAIL;
151 return SSH_ERR_ALLOC_FAIL; 137 if (sshbuf_get_cstring(b, &ktype, NULL) != 0 ||
152 memcpy(sigblob, signature, signaturelen); 138 sshbuf_get_string(b, &sigblob, &len) != 0) {
153 len = signaturelen; 139 ret = SSH_ERR_INVALID_FORMAT;
154 } else { 140 goto out;
155 /* ietf-drafts */ 141 }
156 if ((b = sshbuf_from(signature, signaturelen)) == NULL) 142 if (strcmp("ssh-dss", ktype) != 0) {
157 return SSH_ERR_ALLOC_FAIL; 143 ret = SSH_ERR_KEY_TYPE_MISMATCH;
158 if (sshbuf_get_cstring(b, &ktype, NULL) != 0 || 144 goto out;
159 sshbuf_get_string(b, &sigblob, &len) != 0) { 145 }
160 ret = SSH_ERR_INVALID_FORMAT; 146 if (sshbuf_len(b) != 0) {
161 goto out; 147 ret = SSH_ERR_UNEXPECTED_TRAILING_DATA;
162 } 148 goto out;
163 if (strcmp("ssh-dss", ktype) != 0) {
164 ret = SSH_ERR_KEY_TYPE_MISMATCH;
165 goto out;
166 }
167 if (sshbuf_len(b) != 0) {
168 ret = SSH_ERR_UNEXPECTED_TRAILING_DATA;
169 goto out;
170 }
171 } 149 }
172 150
173 if (len != SIGBLOB_LEN) { 151 if (len != SIGBLOB_LEN) {
@@ -207,8 +185,7 @@ ssh_dss_verify(const struct sshkey *key,
207 185
208 out: 186 out:
209 explicit_bzero(digest, sizeof(digest)); 187 explicit_bzero(digest, sizeof(digest));
210 if (sig != NULL) 188 DSA_SIG_free(sig);
211 DSA_SIG_free(sig);
212 sshbuf_free(b); 189 sshbuf_free(b);
213 free(ktype); 190 free(ktype);
214 if (sigblob != NULL) { 191 if (sigblob != NULL) {
diff --git a/ssh-ecdsa.c b/ssh-ecdsa.c
index d7bf3c69b..3d3b78d7b 100644
--- a/ssh-ecdsa.c
+++ b/ssh-ecdsa.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-ecdsa.c,v 1.13 2016/04/21 06:08:02 djm Exp $ */ 1/* $OpenBSD: ssh-ecdsa.c,v 1.14 2018/02/07 02:06:51 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * Copyright (c) 2010 Damien Miller. All rights reserved. 4 * Copyright (c) 2010 Damien Miller. All rights reserved.
@@ -101,8 +101,7 @@ ssh_ecdsa_sign(const struct sshkey *key, u_char **sigp, size_t *lenp,
101 explicit_bzero(digest, sizeof(digest)); 101 explicit_bzero(digest, sizeof(digest));
102 sshbuf_free(b); 102 sshbuf_free(b);
103 sshbuf_free(bb); 103 sshbuf_free(bb);
104 if (sig != NULL) 104 ECDSA_SIG_free(sig);
105 ECDSA_SIG_free(sig);
106 return ret; 105 return ret;
107} 106}
108 107
@@ -180,8 +179,7 @@ ssh_ecdsa_verify(const struct sshkey *key,
180 explicit_bzero(digest, sizeof(digest)); 179 explicit_bzero(digest, sizeof(digest));
181 sshbuf_free(sigbuf); 180 sshbuf_free(sigbuf);
182 sshbuf_free(b); 181 sshbuf_free(b);
183 if (sig != NULL) 182 ECDSA_SIG_free(sig);
184 ECDSA_SIG_free(sig);
185 free(ktype); 183 free(ktype);
186 return ret; 184 return ret;
187} 185}
diff --git a/ssh-keygen.0 b/ssh-keygen.0
index fb2c02fe7..417e8382b 100644
--- a/ssh-keygen.0
+++ b/ssh-keygen.0
@@ -226,8 +226,10 @@ DESCRIPTION
226 -O option 226 -O option
227 Specify a certificate option when signing a key. This option may 227 Specify a certificate option when signing a key. This option may
228 be specified multiple times. See also the CERTIFICATES section 228 be specified multiple times. See also the CERTIFICATES section
229 for further details. The options that are valid for user 229 for further details.
230 certificates are: 230
231 At present, no standard options are valid for host keys. The
232 options that are valid for user certificates are:
231 233
232 clear Clear all enabled permissions. This is useful for 234 clear Clear all enabled permissions. This is useful for
233 clearing the default set of permissions so permissions 235 clearing the default set of permissions so permissions
@@ -246,8 +248,6 @@ DESCRIPTION
246 unknown critical options will cause the certificate to be 248 unknown critical options will cause the certificate to be
247 refused. 249 refused.
248 250
249 At present, no standard options are valid for host keys.
250
251 force-command=command 251 force-command=command
252 Forces the execution of command instead of any shell or 252 Forces the execution of command instead of any shell or
253 command specified by the user when the certificate is 253 command specified by the user when the certificate is
@@ -280,7 +280,7 @@ DESCRIPTION
280 permit-user-rc 280 permit-user-rc
281 Allows execution of ~/.ssh/rc by sshd(8). 281 Allows execution of ~/.ssh/rc by sshd(8).
282 282
283 permit-x11-forwarding 283 permit-X11-forwarding
284 Allows X11 forwarding. 284 Allows X11 forwarding.
285 285
286 source-address=address_list 286 source-address=address_list
@@ -349,19 +349,26 @@ DESCRIPTION
349 validity interval may consist of a single time, indicating that 349 validity interval may consist of a single time, indicating that
350 the certificate is valid beginning now and expiring at that time, 350 the certificate is valid beginning now and expiring at that time,
351 or may consist of two times separated by a colon to indicate an 351 or may consist of two times separated by a colon to indicate an
352 explicit time interval. The start time may be specified as a 352 explicit time interval.
353 date in YYYYMMDD format, a time in YYYYMMDDHHMMSS format or a 353
354 relative time (to the current time) consisting of a minus sign 354 The start time may be specified as the string M-bM-^@M-^\alwaysM-bM-^@M-^] to
355 followed by a relative time in the format described in the TIME 355 indicate the certificate has no specified start time, a date in
356 FORMATS section of sshd_config(5). The end time may be specified 356 YYYYMMDD format, a time in YYYYMMDDHHMM[SS] format, a relative
357 as a YYYYMMDD date, a YYYYMMDDHHMMSS time or a relative time 357 time (to the current time) consisting of a minus sign followed by
358 starting with a plus character. 358 an interval in the format described in the TIME FORMATS section
359 of sshd_config(5).
360
361 The end time may be specified as a YYYYMMDD date, a
362 YYYYMMDDHHMM[SS] time, a relative time starting with a plus
363 character or the string M-bM-^@M-^\foreverM-bM-^@M-^] to indicate that the
364 certificate has no expirty date.
359 365
360 For example: M-bM-^@M-^\+52w1dM-bM-^@M-^] (valid from now to 52 weeks and one day 366 For example: M-bM-^@M-^\+52w1dM-bM-^@M-^] (valid from now to 52 weeks and one day
361 from now), M-bM-^@M-^\-4w:+4wM-bM-^@M-^] (valid from four weeks ago to four weeks 367 from now), M-bM-^@M-^\-4w:+4wM-bM-^@M-^] (valid from four weeks ago to four weeks
362 from now), M-bM-^@M-^\20100101123000:20110101123000M-bM-^@M-^] (valid from 12:30 PM, 368 from now), M-bM-^@M-^\20100101123000:20110101123000M-bM-^@M-^] (valid from 12:30 PM,
363 January 1st, 2010 to 12:30 PM, January 1st, 2011), M-bM-^@M-^\-1d:20110101M-bM-^@M-^] 369 January 1st, 2010 to 12:30 PM, January 1st, 2011), M-bM-^@M-^\-1d:20110101M-bM-^@M-^]
364 (valid from yesterday to midnight, January 1st, 2011). 370 (valid from yesterday to midnight, January 1st, 2011).
371 M-bM-^@M-^\-1m:foreverM-bM-^@M-^] (valid from one minute ago and never expiring).
365 372
366 -v Verbose mode. Causes ssh-keygen to print debugging messages 373 -v Verbose mode. Causes ssh-keygen to print debugging messages
367 about its progress. This is helpful for debugging moduli 374 about its progress. This is helpful for debugging moduli
@@ -570,4 +577,4 @@ AUTHORS
570 created OpenSSH. Markus Friedl contributed the support for SSH protocol 577 created OpenSSH. Markus Friedl contributed the support for SSH protocol
571 versions 1.5 and 2.0. 578 versions 1.5 and 2.0.
572 579
573OpenBSD 6.2 July 8, 2017 OpenBSD 6.2 580OpenBSD 6.2 March 12, 2018 OpenBSD 6.2
diff --git a/ssh-keygen.1 b/ssh-keygen.1
index dfbc65ddb..39767e621 100644
--- a/ssh-keygen.1
+++ b/ssh-keygen.1
@@ -1,4 +1,4 @@
1.\" $OpenBSD: ssh-keygen.1,v 1.144 2017/07/08 18:32:54 jmc Exp $ 1.\" $OpenBSD: ssh-keygen.1,v 1.147 2018/03/12 00:52:01 djm Exp $
2.\" 2.\"
3.\" Author: Tatu Ylonen <ylo@cs.hut.fi> 3.\" Author: Tatu Ylonen <ylo@cs.hut.fi>
4.\" Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4.\" Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -35,7 +35,7 @@
35.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 35.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
36.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37.\" 37.\"
38.Dd $Mdocdate: July 8 2017 $ 38.Dd $Mdocdate: March 12 2018 $
39.Dt SSH-KEYGEN 1 39.Dt SSH-KEYGEN 1
40.Os 40.Os
41.Sh NAME 41.Sh NAME
@@ -421,6 +421,8 @@ This option may be specified multiple times.
421See also the 421See also the
422.Sx CERTIFICATES 422.Sx CERTIFICATES
423section for further details. 423section for further details.
424.Pp
425At present, no standard options are valid for host keys.
424The options that are valid for user certificates are: 426The options that are valid for user certificates are:
425.Pp 427.Pp
426.Bl -tag -width Ds -compact 428.Bl -tag -width Ds -compact
@@ -444,8 +446,6 @@ contents (usually indicating a flag).
444Extensions may be ignored by a client or server that does not recognise them, 446Extensions may be ignored by a client or server that does not recognise them,
445whereas unknown critical options will cause the certificate to be refused. 447whereas unknown critical options will cause the certificate to be refused.
446.Pp 448.Pp
447At present, no standard options are valid for host keys.
448.Pp
449.It Ic force-command Ns = Ns Ar command 449.It Ic force-command Ns = Ns Ar command
450Forces the execution of 450Forces the execution of
451.Ar command 451.Ar command
@@ -490,7 +490,7 @@ Allows execution of
490by 490by
491.Xr sshd 8 . 491.Xr sshd 8 .
492.Pp 492.Pp
493.It Ic permit-x11-forwarding 493.It Ic permit-X11-forwarding
494Allows X11 forwarding. 494Allows X11 forwarding.
495.Pp 495.Pp
496.It Ic source-address Ns = Ns Ar address_list 496.It Ic source-address Ns = Ns Ar address_list
@@ -580,13 +580,20 @@ Specify a validity interval when signing a certificate.
580A validity interval may consist of a single time, indicating that the 580A validity interval may consist of a single time, indicating that the
581certificate is valid beginning now and expiring at that time, or may consist 581certificate is valid beginning now and expiring at that time, or may consist
582of two times separated by a colon to indicate an explicit time interval. 582of two times separated by a colon to indicate an explicit time interval.
583The start time may be specified as a date in YYYYMMDD format, a time 583.Pp
584in YYYYMMDDHHMMSS format or a relative time (to the current time) consisting 584The start time may be specified as the string
585of a minus sign followed by a relative time in the format described in the 585.Dq always
586to indicate the certificate has no specified start time,
587a date in YYYYMMDD format, a time in YYYYMMDDHHMM[SS] format,
588a relative time (to the current time) consisting of a minus sign followed by
589an interval in the format described in the
586TIME FORMATS section of 590TIME FORMATS section of
587.Xr sshd_config 5 . 591.Xr sshd_config 5 .
588The end time may be specified as a YYYYMMDD date, a YYYYMMDDHHMMSS time or 592.Pp
589a relative time starting with a plus character. 593The end time may be specified as a YYYYMMDD date, a YYYYMMDDHHMM[SS] time,
594a relative time starting with a plus character or the string
595.Dq forever
596to indicate that the certificate has no expirty date.
590.Pp 597.Pp
591For example: 598For example:
592.Dq +52w1d 599.Dq +52w1d
@@ -597,6 +604,8 @@ For example:
597(valid from 12:30 PM, January 1st, 2010 to 12:30 PM, January 1st, 2011), 604(valid from 12:30 PM, January 1st, 2010 to 12:30 PM, January 1st, 2011),
598.Dq -1d:20110101 605.Dq -1d:20110101
599(valid from yesterday to midnight, January 1st, 2011). 606(valid from yesterday to midnight, January 1st, 2011).
607.Dq -1m:forever
608(valid from one minute ago and never expiring).
600.It Fl v 609.It Fl v
601Verbose mode. 610Verbose mode.
602Causes 611Causes
diff --git a/ssh-keygen.c b/ssh-keygen.c
index 835f7d016..9aac64fc3 100644
--- a/ssh-keygen.c
+++ b/ssh-keygen.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-keygen.c,v 1.307 2017/07/07 03:53:12 djm Exp $ */ 1/* $OpenBSD: ssh-keygen.c,v 1.314 2018/03/12 00:52:01 djm Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1994 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1994 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -275,6 +275,10 @@ ask_filename(struct passwd *pw, const char *prompt)
275 case KEY_ED25519_CERT: 275 case KEY_ED25519_CERT:
276 name = _PATH_SSH_CLIENT_ID_ED25519; 276 name = _PATH_SSH_CLIENT_ID_ED25519;
277 break; 277 break;
278 case KEY_XMSS:
279 case KEY_XMSS_CERT:
280 name = _PATH_SSH_CLIENT_ID_XMSS;
281 break;
278 default: 282 default:
279 fatal("bad key type"); 283 fatal("bad key type");
280 } 284 }
@@ -377,13 +381,6 @@ do_convert_to_pem(struct sshkey *k)
377 if (!PEM_write_RSAPublicKey(stdout, k->rsa)) 381 if (!PEM_write_RSAPublicKey(stdout, k->rsa))
378 fatal("PEM_write_RSAPublicKey failed"); 382 fatal("PEM_write_RSAPublicKey failed");
379 break; 383 break;
380#if notyet /* OpenSSH 0.9.8 lacks this function */
381 case KEY_DSA:
382 if (!PEM_write_DSAPublicKey(stdout, k->dsa))
383 fatal("PEM_write_DSAPublicKey failed");
384 break;
385#endif
386 /* XXX ECDSA? */
387 default: 384 default:
388 fatal("%s: unsupported key type %s", __func__, sshkey_type(k)); 385 fatal("%s: unsupported key type %s", __func__, sshkey_type(k));
389 } 386 }
@@ -539,7 +536,7 @@ do_convert_private_ssh2_from_blob(u_char *blob, u_int blen)
539 536
540 /* try the key */ 537 /* try the key */
541 if (sshkey_sign(key, &sig, &slen, data, sizeof(data), NULL, 0) != 0 || 538 if (sshkey_sign(key, &sig, &slen, data, sizeof(data), NULL, 0) != 0 ||
542 sshkey_verify(key, sig, slen, data, sizeof(data), 0) != 0) { 539 sshkey_verify(key, sig, slen, data, sizeof(data), NULL, 0) != 0) {
543 sshkey_free(key); 540 sshkey_free(key);
544 free(sig); 541 free(sig);
545 return NULL; 542 return NULL;
@@ -671,9 +668,6 @@ do_convert_from_pem(struct sshkey **k, int *private)
671{ 668{
672 FILE *fp; 669 FILE *fp;
673 RSA *rsa; 670 RSA *rsa;
674#ifdef notyet
675 DSA *dsa;
676#endif
677 671
678 if ((fp = fopen(identity_file, "r")) == NULL) 672 if ((fp = fopen(identity_file, "r")) == NULL)
679 fatal("%s: %s: %s", __progname, identity_file, strerror(errno)); 673 fatal("%s: %s: %s", __progname, identity_file, strerror(errno));
@@ -685,18 +679,6 @@ do_convert_from_pem(struct sshkey **k, int *private)
685 fclose(fp); 679 fclose(fp);
686 return; 680 return;
687 } 681 }
688#if notyet /* OpenSSH 0.9.8 lacks this function */
689 rewind(fp);
690 if ((dsa = PEM_read_DSAPublicKey(fp, NULL, NULL, NULL)) != NULL) {
691 if ((*k = sshkey_new(KEY_UNSPEC)) == NULL)
692 fatal("sshkey_new failed");
693 (*k)->type = KEY_DSA;
694 (*k)->dsa = dsa;
695 fclose(fp);
696 return;
697 }
698 /* XXX ECDSA */
699#endif
700 fatal("%s: unrecognised raw private key format", __func__); 682 fatal("%s: unrecognised raw private key format", __func__);
701} 683}
702 684
@@ -991,6 +973,9 @@ do_gen_all_hostkeys(struct passwd *pw)
991#endif /* OPENSSL_HAS_ECC */ 973#endif /* OPENSSL_HAS_ECC */
992#endif /* WITH_OPENSSL */ 974#endif /* WITH_OPENSSL */
993 { "ed25519", "ED25519",_PATH_HOST_ED25519_KEY_FILE }, 975 { "ed25519", "ED25519",_PATH_HOST_ED25519_KEY_FILE },
976#ifdef WITH_XMSS
977 { "xmss", "XMSS",_PATH_HOST_XMSS_KEY_FILE },
978#endif /* WITH_XMSS */
994 { NULL, NULL, NULL } 979 { NULL, NULL, NULL }
995 }; 980 };
996 981
@@ -1477,7 +1462,8 @@ do_change_comment(struct passwd *pw)
1477 } 1462 }
1478 } 1463 }
1479 1464
1480 if (private->type != KEY_ED25519 && !use_new_format) { 1465 if (private->type != KEY_ED25519 && private->type != KEY_XMSS &&
1466 !use_new_format) {
1481 error("Comments are only supported for keys stored in " 1467 error("Comments are only supported for keys stored in "
1482 "the new format (-o)."); 1468 "the new format (-o).");
1483 explicit_bzero(passphrase, strlen(passphrase)); 1469 explicit_bzero(passphrase, strlen(passphrase));
@@ -1719,13 +1705,16 @@ do_ca_sign(struct passwd *pw, int argc, char **argv)
1719 } 1705 }
1720 free(otmp); 1706 free(otmp);
1721 } 1707 }
1708 if (n > SSHKEY_CERT_MAX_PRINCIPALS)
1709 fatal("Too many certificate principals specified");
1722 1710
1723 tmp = tilde_expand_filename(argv[i], pw->pw_uid); 1711 tmp = tilde_expand_filename(argv[i], pw->pw_uid);
1724 if ((r = sshkey_load_public(tmp, &public, &comment)) != 0) 1712 if ((r = sshkey_load_public(tmp, &public, &comment)) != 0)
1725 fatal("%s: unable to open \"%s\": %s", 1713 fatal("%s: unable to open \"%s\": %s",
1726 __func__, tmp, ssh_err(r)); 1714 __func__, tmp, ssh_err(r));
1727 if (public->type != KEY_RSA && public->type != KEY_DSA && 1715 if (public->type != KEY_RSA && public->type != KEY_DSA &&
1728 public->type != KEY_ECDSA && public->type != KEY_ED25519) 1716 public->type != KEY_ECDSA && public->type != KEY_ED25519 &&
1717 public->type != KEY_XMSS)
1729 fatal("%s: key \"%s\" type %s cannot be certified", 1718 fatal("%s: key \"%s\" type %s cannot be certified",
1730 __func__, tmp, sshkey_type(public)); 1719 __func__, tmp, sshkey_type(public));
1731 1720
@@ -1809,40 +1798,6 @@ parse_relative_time(const char *s, time_t now)
1809 return now + (u_int64_t)(secs * mul); 1798 return now + (u_int64_t)(secs * mul);
1810} 1799}
1811 1800
1812static u_int64_t
1813parse_absolute_time(const char *s)
1814{
1815 struct tm tm;
1816 time_t tt;
1817 char buf[32], *fmt;
1818
1819 /*
1820 * POSIX strptime says "The application shall ensure that there
1821 * is white-space or other non-alphanumeric characters between
1822 * any two conversion specifications" so arrange things this way.
1823 */
1824 switch (strlen(s)) {
1825 case 8:
1826 fmt = "%Y-%m-%d";
1827 snprintf(buf, sizeof(buf), "%.4s-%.2s-%.2s", s, s + 4, s + 6);
1828 break;
1829 case 14:
1830 fmt = "%Y-%m-%dT%H:%M:%S";
1831 snprintf(buf, sizeof(buf), "%.4s-%.2s-%.2sT%.2s:%.2s:%.2s",
1832 s, s + 4, s + 6, s + 8, s + 10, s + 12);
1833 break;
1834 default:
1835 fatal("Invalid certificate time format %s", s);
1836 }
1837
1838 memset(&tm, 0, sizeof(tm));
1839 if (strptime(buf, fmt, &tm) == NULL)
1840 fatal("Invalid certificate time %s", s);
1841 if ((tt = mktime(&tm)) < 0)
1842 fatal("Certificate time %s cannot be represented", s);
1843 return (u_int64_t)tt;
1844}
1845
1846static void 1801static void
1847parse_cert_times(char *timespec) 1802parse_cert_times(char *timespec)
1848{ 1803{
@@ -1865,8 +1820,8 @@ parse_cert_times(char *timespec)
1865 1820
1866 /* 1821 /*
1867 * from:to, where 1822 * from:to, where
1868 * from := [+-]timespec | YYYYMMDD | YYYYMMDDHHMMSS 1823 * from := [+-]timespec | YYYYMMDD | YYYYMMDDHHMMSS | "always"
1869 * to := [+-]timespec | YYYYMMDD | YYYYMMDDHHMMSS 1824 * to := [+-]timespec | YYYYMMDD | YYYYMMDDHHMMSS | "forever"
1870 */ 1825 */
1871 from = xstrdup(timespec); 1826 from = xstrdup(timespec);
1872 to = strchr(from, ':'); 1827 to = strchr(from, ':');
@@ -1876,13 +1831,17 @@ parse_cert_times(char *timespec)
1876 1831
1877 if (*from == '-' || *from == '+') 1832 if (*from == '-' || *from == '+')
1878 cert_valid_from = parse_relative_time(from, now); 1833 cert_valid_from = parse_relative_time(from, now);
1879 else 1834 else if (strcmp(from, "always") == 0)
1880 cert_valid_from = parse_absolute_time(from); 1835 cert_valid_from = 0;
1836 else if (parse_absolute_time(from, &cert_valid_from) != 0)
1837 fatal("Invalid from time \"%s\"", from);
1881 1838
1882 if (*to == '-' || *to == '+') 1839 if (*to == '-' || *to == '+')
1883 cert_valid_to = parse_relative_time(to, now); 1840 cert_valid_to = parse_relative_time(to, now);
1884 else 1841 else if (strcmp(to, "forever") == 0)
1885 cert_valid_to = parse_absolute_time(to); 1842 cert_valid_to = ~(u_int64_t)0;
1843 else if (parse_absolute_time(to, &cert_valid_to) != 0)
1844 fatal("Invalid to time \"%s\"", to);
1886 1845
1887 if (cert_valid_to <= cert_valid_from) 1846 if (cert_valid_to <= cert_valid_from)
1888 fatal("Empty certificate validity interval"); 1847 fatal("Empty certificate validity interval");
@@ -2421,7 +2380,7 @@ main(int argc, char **argv)
2421 gen_all_hostkeys = 1; 2380 gen_all_hostkeys = 1;
2422 break; 2381 break;
2423 case 'b': 2382 case 'b':
2424 bits = (u_int32_t)strtonum(optarg, 256, 32768, &errstr); 2383 bits = (u_int32_t)strtonum(optarg, 10, 32768, &errstr);
2425 if (errstr) 2384 if (errstr)
2426 fatal("Bits has bad value %s (%s)", 2385 fatal("Bits has bad value %s (%s)",
2427 optarg, errstr); 2386 optarg, errstr);
@@ -2699,6 +2658,8 @@ main(int argc, char **argv)
2699 _PATH_HOST_ECDSA_KEY_FILE, rr_hostname); 2658 _PATH_HOST_ECDSA_KEY_FILE, rr_hostname);
2700 n += do_print_resource_record(pw, 2659 n += do_print_resource_record(pw,
2701 _PATH_HOST_ED25519_KEY_FILE, rr_hostname); 2660 _PATH_HOST_ED25519_KEY_FILE, rr_hostname);
2661 n += do_print_resource_record(pw,
2662 _PATH_HOST_XMSS_KEY_FILE, rr_hostname);
2702 if (n == 0) 2663 if (n == 0)
2703 fatal("no keys found."); 2664 fatal("no keys found.");
2704 exit(0); 2665 exit(0);
@@ -2859,7 +2820,8 @@ passphrase_again:
2859 if ((r = sshkey_write(public, f)) != 0) 2820 if ((r = sshkey_write(public, f)) != 0)
2860 error("write key failed: %s", ssh_err(r)); 2821 error("write key failed: %s", ssh_err(r));
2861 fprintf(f, " %s\n", comment); 2822 fprintf(f, " %s\n", comment);
2862 fclose(f); 2823 if (ferror(f) || fclose(f) != 0)
2824 fatal("write public failed: %s", strerror(errno));
2863 2825
2864 if (!quiet) { 2826 if (!quiet) {
2865 fp = sshkey_fingerprint(public, fingerprint_hash, 2827 fp = sshkey_fingerprint(public, fingerprint_hash,
diff --git a/ssh-keyscan.0 b/ssh-keyscan.0
index 1a9751ef1..c0278ee0a 100644
--- a/ssh-keyscan.0
+++ b/ssh-keyscan.0
@@ -1,62 +1,66 @@
1SSH-KEYSCAN(1) General Commands Manual SSH-KEYSCAN(1) 1SSH-KEYSCAN(1) General Commands Manual SSH-KEYSCAN(1)
2 2
3NAME 3NAME
4 ssh-keyscan M-bM-^@M-^S gather ssh public keys 4 ssh-keyscan M-bM-^@M-^S gather SSH public keys
5 5
6SYNOPSIS 6SYNOPSIS
7 ssh-keyscan [-46cHv] [-f file] [-p port] [-T timeout] [-t type] 7 ssh-keyscan [-46cDHv] [-f file] [-p port] [-T timeout] [-t type]
8 [host | addrlist namelist] ... 8 [host | addrlist namelist]
9 9
10DESCRIPTION 10DESCRIPTION
11 ssh-keyscan is a utility for gathering the public ssh host keys of a 11 ssh-keyscan is a utility for gathering the public SSH host keys of a
12 number of hosts. It was designed to aid in building and verifying 12 number of hosts. It was designed to aid in building and verifying
13 ssh_known_hosts files. ssh-keyscan provides a minimal interface suitable 13 ssh_known_hosts files, the format of which is documented in sshd(8).
14 for use by shell and perl scripts. 14 ssh-keyscan provides a minimal interface suitable for use by shell and
15 perl scripts.
15 16
16 ssh-keyscan uses non-blocking socket I/O to contact as many hosts as 17 ssh-keyscan uses non-blocking socket I/O to contact as many hosts as
17 possible in parallel, so it is very efficient. The keys from a domain of 18 possible in parallel, so it is very efficient. The keys from a domain of
18 1,000 hosts can be collected in tens of seconds, even when some of those 19 1,000 hosts can be collected in tens of seconds, even when some of those
19 hosts are down or do not run ssh. For scanning, one does not need login 20 hosts are down or do not run sshd(8). For scanning, one does not need
20 access to the machines that are being scanned, nor does the scanning 21 login access to the machines that are being scanned, nor does the
21 process involve any encryption. 22 scanning process involve any encryption.
22 23
23 The options are as follows: 24 The options are as follows:
24 25
25 -4 Forces ssh-keyscan to use IPv4 addresses only. 26 -4 Force ssh-keyscan to use IPv4 addresses only.
26 27
27 -6 Forces ssh-keyscan to use IPv6 addresses only. 28 -6 Force ssh-keyscan to use IPv6 addresses only.
28 29
29 -c Request certificates from target hosts instead of plain keys. 30 -c Request certificates from target hosts instead of plain keys.
30 31
32 -D Print keys found as SSHFP DNS records. The default is to print
33 keys in a format usable as a ssh(1) known_hosts file.
34
31 -f file 35 -f file
32 Read hosts or M-bM-^@M-^\addrlist namelistM-bM-^@M-^] pairs from file, one per line. 36 Read hosts or M-bM-^@M-^\addrlist namelistM-bM-^@M-^] pairs from file, one per line.
33 If - is supplied instead of a filename, ssh-keyscan will read 37 If M-bM-^@M-^X-M-bM-^@M-^Y is supplied instead of a filename, ssh-keyscan will read
34 hosts or M-bM-^@M-^\addrlist namelistM-bM-^@M-^] pairs from the standard input. 38 from the standard input. Input is expected in the format:
39
40 1.2.3.4,1.2.4.4 name.my.domain,name,n.my.domain,n,1.2.3.4,1.2.4.4
35 41
36 -H Hash all hostnames and addresses in the output. Hashed names may 42 -H Hash all hostnames and addresses in the output. Hashed names may
37 be used normally by ssh and sshd, but they do not reveal 43 be used normally by ssh(1) and sshd(8), but they do not reveal
38 identifying information should the file's contents be disclosed. 44 identifying information should the file's contents be disclosed.
39 45
40 -p port 46 -p port
41 Port to connect to on the remote host. 47 Connect to port on the remote host.
42 48
43 -T timeout 49 -T timeout
44 Set the timeout for connection attempts. If timeout seconds have 50 Set the timeout for connection attempts. If timeout seconds have
45 elapsed since a connection was initiated to a host or since the 51 elapsed since a connection was initiated to a host or since the
46 last time anything was read from that host, then the connection 52 last time anything was read from that host, the connection is
47 is closed and the host in question considered unavailable. 53 closed and the host in question considered unavailable. The
48 Default is 5 seconds. 54 default is 5 seconds.
49 55
50 -t type 56 -t type
51 Specifies the type of the key to fetch from the scanned hosts. 57 Specify the type of the key to fetch from the scanned hosts. The
52 The possible values are M-bM-^@M-^\dsaM-bM-^@M-^], M-bM-^@M-^\ecdsaM-bM-^@M-^], M-bM-^@M-^\ed25519M-bM-^@M-^], or M-bM-^@M-^\rsaM-bM-^@M-^]. 58 possible values are M-bM-^@M-^\dsaM-bM-^@M-^], M-bM-^@M-^\ecdsaM-bM-^@M-^], M-bM-^@M-^\ed25519M-bM-^@M-^], or M-bM-^@M-^\rsaM-bM-^@M-^].
53 Multiple values may be specified by separating them with commas. 59 Multiple values may be specified by separating them with commas.
54 The default is to fetch M-bM-^@M-^\rsaM-bM-^@M-^], M-bM-^@M-^\ecdsaM-bM-^@M-^], and M-bM-^@M-^\ed25519M-bM-^@M-^] keys. 60 The default is to fetch M-bM-^@M-^\rsaM-bM-^@M-^], M-bM-^@M-^\ecdsaM-bM-^@M-^], and M-bM-^@M-^\ed25519M-bM-^@M-^] keys.
55 61
56 -v Verbose mode. Causes ssh-keyscan to print debugging messages 62 -v Verbose mode: print debugging messages about progress.
57 about its progress.
58 63
59SECURITY
60 If an ssh_known_hosts file is constructed using ssh-keyscan without 64 If an ssh_known_hosts file is constructed using ssh-keyscan without
61 verifying the keys, users will be vulnerable to man in the middle 65 verifying the keys, users will be vulnerable to man in the middle
62 attacks. On the other hand, if the security model allows such a risk, 66 attacks. On the other hand, if the security model allows such a risk,
@@ -65,42 +69,28 @@ SECURITY
65 created. 69 created.
66 70
67FILES 71FILES
68 Input format:
69
70 1.2.3.4,1.2.4.4 name.my.domain,name,n.my.domain,n,1.2.3.4,1.2.4.4
71
72 Output format for RSA, DSA, ECDSA, and Ed25519 keys:
73
74 host-or-namelist keytype base64-encoded-key
75
76 Where keytype is either M-bM-^@M-^\ecdsa-sha2-nistp256M-bM-^@M-^], M-bM-^@M-^\ecdsa-sha2-nistp384M-bM-^@M-^],
77 M-bM-^@M-^\ecdsa-sha2-nistp521M-bM-^@M-^], M-bM-^@M-^\ssh-ed25519M-bM-^@M-^], M-bM-^@M-^\ssh-dssM-bM-^@M-^] or M-bM-^@M-^\ssh-rsaM-bM-^@M-^].
78
79 /etc/ssh/ssh_known_hosts 72 /etc/ssh/ssh_known_hosts
80 73
81EXAMPLES 74EXAMPLES
82 Print the rsa host key for machine hostname: 75 Print the RSA host key for machine hostname:
83 76
84 $ ssh-keyscan hostname 77 $ ssh-keyscan -t rsa hostname
85 78
86 Find all hosts from the file ssh_hosts which have new or different keys 79 Find all hosts from the file ssh_hosts which have new or different keys
87 from those in the sorted file ssh_known_hosts: 80 from those in the sorted file ssh_known_hosts:
88 81
89 $ ssh-keyscan -t rsa,dsa,ecdsa,ed25519 -f ssh_hosts | \ 82 $ ssh-keyscan -t rsa,dsa,ecdsa,ed25519 -f ssh_hosts | \
90 sort -u - ssh_known_hosts | diff ssh_known_hosts - 83 sort -u - ssh_known_hosts | diff ssh_known_hosts -
91 84
92SEE ALSO 85SEE ALSO
93 ssh(1), sshd(8) 86 ssh(1), sshd(8)
94 87
88 Using DNS to Securely Publish Secure Shell (SSH) Key Fingerprints, RFC
89 4255, 2006.
90
95AUTHORS 91AUTHORS
96 David Mazieres <dm@lcs.mit.edu> wrote the initial version, and Wayne 92 David Mazieres <dm@lcs.mit.edu> wrote the initial version, and Wayne
97 Davison <wayned@users.sourceforge.net> added support for protocol version 93 Davison <wayned@users.sourceforge.net> added support for protocol version
98 2. 94 2.
99 95
100BUGS 96OpenBSD 6.2 March 5, 2018 OpenBSD 6.2
101 It generates "Connection closed by remote host" messages on the consoles
102 of all the machines it scans if the server is older than version 2.9.
103 This is because it opens a connection to the ssh port, reads the public
104 key, and drops the connection as soon as it gets the key.
105
106OpenBSD 6.2 May 2, 2017 OpenBSD 6.2
diff --git a/ssh-keyscan.1 b/ssh-keyscan.1
index aa4a2ae83..f3d7a4078 100644
--- a/ssh-keyscan.1
+++ b/ssh-keyscan.1
@@ -1,4 +1,4 @@
1.\" $OpenBSD: ssh-keyscan.1,v 1.40 2017/05/02 17:04:09 jmc Exp $ 1.\" $OpenBSD: ssh-keyscan.1,v 1.44 2018/03/05 07:03:18 jmc Exp $
2.\" 2.\"
3.\" Copyright 1995, 1996 by David Mazieres <dm@lcs.mit.edu>. 3.\" Copyright 1995, 1996 by David Mazieres <dm@lcs.mit.edu>.
4.\" 4.\"
@@ -6,30 +6,29 @@
6.\" permitted provided that due credit is given to the author and the 6.\" permitted provided that due credit is given to the author and the
7.\" OpenBSD project by leaving this copyright notice intact. 7.\" OpenBSD project by leaving this copyright notice intact.
8.\" 8.\"
9.Dd $Mdocdate: May 2 2017 $ 9.Dd $Mdocdate: March 5 2018 $
10.Dt SSH-KEYSCAN 1 10.Dt SSH-KEYSCAN 1
11.Os 11.Os
12.Sh NAME 12.Sh NAME
13.Nm ssh-keyscan 13.Nm ssh-keyscan
14.Nd gather ssh public keys 14.Nd gather SSH public keys
15.Sh SYNOPSIS 15.Sh SYNOPSIS
16.Nm ssh-keyscan 16.Nm ssh-keyscan
17.Bk -words 17.Op Fl 46cDHv
18.Op Fl 46cHv
19.Op Fl f Ar file 18.Op Fl f Ar file
20.Op Fl p Ar port 19.Op Fl p Ar port
21.Op Fl T Ar timeout 20.Op Fl T Ar timeout
22.Op Fl t Ar type 21.Op Fl t Ar type
23.Op Ar host | addrlist namelist 22.Op Ar host | addrlist namelist
24.Ar ...
25.Ek
26.Sh DESCRIPTION 23.Sh DESCRIPTION
27.Nm 24.Nm
28is a utility for gathering the public ssh host keys of a number of 25is a utility for gathering the public SSH host keys of a number of
29hosts. 26hosts.
30It was designed to aid in building and verifying 27It was designed to aid in building and verifying
31.Pa ssh_known_hosts 28.Pa ssh_known_hosts
32files. 29files,
30the format of which is documented in
31.Xr sshd 8 .
33.Nm 32.Nm
34provides a minimal interface suitable for use by shell and perl 33provides a minimal interface suitable for use by shell and perl
35scripts. 34scripts.
@@ -39,7 +38,8 @@ uses non-blocking socket I/O to contact as many hosts as possible in
39parallel, so it is very efficient. 38parallel, so it is very efficient.
40The keys from a domain of 1,000 39The keys from a domain of 1,000
41hosts can be collected in tens of seconds, even when some of those 40hosts can be collected in tens of seconds, even when some of those
42hosts are down or do not run ssh. 41hosts are down or do not run
42.Xr sshd 8 .
43For scanning, one does not need 43For scanning, one does not need
44login access to the machines that are being scanned, nor does the 44login access to the machines that are being scanned, nor does the
45scanning process involve any encryption. 45scanning process involve any encryption.
@@ -47,15 +47,21 @@ scanning process involve any encryption.
47The options are as follows: 47The options are as follows:
48.Bl -tag -width Ds 48.Bl -tag -width Ds
49.It Fl 4 49.It Fl 4
50Forces 50Force
51.Nm 51.Nm
52to use IPv4 addresses only. 52to use IPv4 addresses only.
53.It Fl 6 53.It Fl 6
54Forces 54Force
55.Nm 55.Nm
56to use IPv6 addresses only. 56to use IPv6 addresses only.
57.It Fl c 57.It Fl c
58Request certificates from target hosts instead of plain keys. 58Request certificates from target hosts instead of plain keys.
59.It Fl D
60Print keys found as SSHFP DNS records.
61The default is to print keys in a format usable as a
62.Xr ssh 1
63.Pa known_hosts
64file.
59.It Fl f Ar file 65.It Fl f Ar file
60Read hosts or 66Read hosts or
61.Dq addrlist namelist 67.Dq addrlist namelist
@@ -63,32 +69,36 @@ pairs from
63.Ar file , 69.Ar file ,
64one per line. 70one per line.
65If 71If
66.Pa - 72.Sq -
67is supplied instead of a filename, 73is supplied instead of a filename,
68.Nm 74.Nm
69will read hosts or 75will read from the standard input.
70.Dq addrlist namelist 76Input is expected in the format:
71pairs from the standard input. 77.Bd -literal
781.2.3.4,1.2.4.4 name.my.domain,name,n.my.domain,n,1.2.3.4,1.2.4.4
79.Ed
72.It Fl H 80.It Fl H
73Hash all hostnames and addresses in the output. 81Hash all hostnames and addresses in the output.
74Hashed names may be used normally by 82Hashed names may be used normally by
75.Nm ssh 83.Xr ssh 1
76and 84and
77.Nm sshd , 85.Xr sshd 8 ,
78but they do not reveal identifying information should the file's contents 86but they do not reveal identifying information should the file's contents
79be disclosed. 87be disclosed.
80.It Fl p Ar port 88.It Fl p Ar port
81Port to connect to on the remote host. 89Connect to
90.Ar port
91on the remote host.
82.It Fl T Ar timeout 92.It Fl T Ar timeout
83Set the timeout for connection attempts. 93Set the timeout for connection attempts.
84If 94If
85.Ar timeout 95.Ar timeout
86seconds have elapsed since a connection was initiated to a host or since the 96seconds have elapsed since a connection was initiated to a host or since the
87last time anything was read from that host, then the connection is 97last time anything was read from that host, the connection is
88closed and the host in question considered unavailable. 98closed and the host in question considered unavailable.
89Default is 5 seconds. 99The default is 5 seconds.
90.It Fl t Ar type 100.It Fl t Ar type
91Specifies the type of the key to fetch from the scanned hosts. 101Specify the type of the key to fetch from the scanned hosts.
92The possible values are 102The possible values are
93.Dq dsa , 103.Dq dsa ,
94.Dq ecdsa , 104.Dq ecdsa ,
@@ -103,12 +113,10 @@ and
103.Dq ed25519 113.Dq ed25519
104keys. 114keys.
105.It Fl v 115.It Fl v
106Verbose mode. 116Verbose mode:
107Causes 117print debugging messages about progress.
108.Nm
109to print debugging messages about its progress.
110.El 118.El
111.Sh SECURITY 119.Pp
112If an ssh_known_hosts file is constructed using 120If an ssh_known_hosts file is constructed using
113.Nm 121.Nm
114without verifying the keys, users will be vulnerable to 122without verifying the keys, users will be vulnerable to
@@ -119,54 +127,32 @@ On the other hand, if the security model allows such a risk,
119can help in the detection of tampered keyfiles or man in the middle 127can help in the detection of tampered keyfiles or man in the middle
120attacks which have begun after the ssh_known_hosts file was created. 128attacks which have begun after the ssh_known_hosts file was created.
121.Sh FILES 129.Sh FILES
122Input format:
123.Bd -literal
1241.2.3.4,1.2.4.4 name.my.domain,name,n.my.domain,n,1.2.3.4,1.2.4.4
125.Ed
126.Pp
127Output format for RSA, DSA, ECDSA, and Ed25519 keys:
128.Bd -literal
129host-or-namelist keytype base64-encoded-key
130.Ed
131.Pp
132Where
133.Ar keytype
134is either
135.Dq ecdsa-sha2-nistp256 ,
136.Dq ecdsa-sha2-nistp384 ,
137.Dq ecdsa-sha2-nistp521 ,
138.Dq ssh-ed25519 ,
139.Dq ssh-dss
140or
141.Dq ssh-rsa .
142.Pp
143.Pa /etc/ssh/ssh_known_hosts 130.Pa /etc/ssh/ssh_known_hosts
144.Sh EXAMPLES 131.Sh EXAMPLES
145Print the rsa host key for machine 132Print the RSA host key for machine
146.Ar hostname : 133.Ar hostname :
147.Bd -literal 134.Pp
148$ ssh-keyscan hostname 135.Dl $ ssh-keyscan -t rsa hostname
149.Ed
150.Pp 136.Pp
151Find all hosts from the file 137Find all hosts from the file
152.Pa ssh_hosts 138.Pa ssh_hosts
153which have new or different keys from those in the sorted file 139which have new or different keys from those in the sorted file
154.Pa ssh_known_hosts : 140.Pa ssh_known_hosts :
155.Bd -literal 141.Bd -literal -offset indent
156$ ssh-keyscan -t rsa,dsa,ecdsa,ed25519 -f ssh_hosts | \e 142$ ssh-keyscan -t rsa,dsa,ecdsa,ed25519 -f ssh_hosts | \e
157 sort -u - ssh_known_hosts | diff ssh_known_hosts - 143 sort -u - ssh_known_hosts | diff ssh_known_hosts -
158.Ed 144.Ed
159.Sh SEE ALSO 145.Sh SEE ALSO
160.Xr ssh 1 , 146.Xr ssh 1 ,
161.Xr sshd 8 147.Xr sshd 8
148.Rs
149.%D 2006
150.%R RFC 4255
151.%T Using DNS to Securely Publish Secure Shell (SSH) Key Fingerprints
152.Re
162.Sh AUTHORS 153.Sh AUTHORS
163.An -nosplit 154.An -nosplit
164.An David Mazieres Aq Mt dm@lcs.mit.edu 155.An David Mazieres Aq Mt dm@lcs.mit.edu
165wrote the initial version, and 156wrote the initial version, and
166.An Wayne Davison Aq Mt wayned@users.sourceforge.net 157.An Wayne Davison Aq Mt wayned@users.sourceforge.net
167added support for protocol version 2. 158added support for protocol version 2.
168.Sh BUGS
169It generates "Connection closed by remote host" messages on the consoles
170of all the machines it scans if the server is older than version 2.9.
171This is because it opens a connection to the ssh port, reads the public
172key, and drops the connection as soon as it gets the key.
diff --git a/ssh-keyscan.c b/ssh-keyscan.c
index 258123ae8..381fb0844 100644
--- a/ssh-keyscan.c
+++ b/ssh-keyscan.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-keyscan.c,v 1.115 2017/06/30 04:17:23 dtucker Exp $ */ 1/* $OpenBSD: ssh-keyscan.c,v 1.119 2018/03/02 21:40:15 jmc Exp $ */
2/* 2/*
3 * Copyright 1995, 1996 by David Mazieres <dm@lcs.mit.edu>. 3 * Copyright 1995, 1996 by David Mazieres <dm@lcs.mit.edu>.
4 * 4 *
@@ -46,6 +46,7 @@
46#include "hostfile.h" 46#include "hostfile.h"
47#include "ssherr.h" 47#include "ssherr.h"
48#include "ssh_api.h" 48#include "ssh_api.h"
49#include "dns.h"
49 50
50/* Flag indicating whether IPv4 or IPv6. This can be set on the command line. 51/* Flag indicating whether IPv4 or IPv6. This can be set on the command line.
51 Default value is AF_UNSPEC means both IPv4 and IPv6. */ 52 Default value is AF_UNSPEC means both IPv4 and IPv6. */
@@ -57,15 +58,18 @@ int ssh_port = SSH_DEFAULT_PORT;
57#define KT_RSA (1<<1) 58#define KT_RSA (1<<1)
58#define KT_ECDSA (1<<2) 59#define KT_ECDSA (1<<2)
59#define KT_ED25519 (1<<3) 60#define KT_ED25519 (1<<3)
61#define KT_XMSS (1<<4)
60 62
61#define KT_MIN KT_DSA 63#define KT_MIN KT_DSA
62#define KT_MAX KT_ED25519 64#define KT_MAX KT_XMSS
63 65
64int get_cert = 0; 66int get_cert = 0;
65int get_keytypes = KT_RSA|KT_ECDSA|KT_ED25519; 67int get_keytypes = KT_RSA|KT_ECDSA|KT_ED25519;
66 68
67int hash_hosts = 0; /* Hash hostname on output */ 69int hash_hosts = 0; /* Hash hostname on output */
68 70
71int print_sshfp = 0; /* Print SSHFP records instead of known_hosts */
72
69#define MAXMAXFD 256 73#define MAXMAXFD 256
70 74
71/* The number of seconds after which to give up on a TCP connection */ 75/* The number of seconds after which to give up on a TCP connection */
@@ -235,6 +239,10 @@ keygrab_ssh2(con *c)
235 myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = get_cert ? 239 myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = get_cert ?
236 "ssh-ed25519-cert-v01@openssh.com" : "ssh-ed25519"; 240 "ssh-ed25519-cert-v01@openssh.com" : "ssh-ed25519";
237 break; 241 break;
242 case KT_XMSS:
243 myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = get_cert ?
244 "ssh-xmss-cert-v01@openssh.com" : "ssh-xmss@openssh.com";
245 break;
238 case KT_ECDSA: 246 case KT_ECDSA:
239 myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = get_cert ? 247 myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = get_cert ?
240 "ecdsa-sha2-nistp256-cert-v01@openssh.com," 248 "ecdsa-sha2-nistp256-cert-v01@openssh.com,"
@@ -280,6 +288,11 @@ keyprint_one(const char *host, struct sshkey *key)
280 char *hostport; 288 char *hostport;
281 const char *known_host, *hashed; 289 const char *known_host, *hashed;
282 290
291 if (print_sshfp) {
292 export_dns_rr(host, key, stdout, 0);
293 return;
294 }
295
283 hostport = put_host_port(host, ssh_port); 296 hostport = put_host_port(host, ssh_port);
284 lowercase(hostport); 297 lowercase(hostport);
285 if (hash_hosts && (hashed = host_hash(host, NULL, 0)) == NULL) 298 if (hash_hosts && (hashed = host_hash(host, NULL, 0)) == NULL)
@@ -377,7 +390,7 @@ conalloc(char *iname, char *oname, int keytype)
377 fdcon[s].c_len = 4; 390 fdcon[s].c_len = 4;
378 fdcon[s].c_off = 0; 391 fdcon[s].c_off = 0;
379 fdcon[s].c_keytype = keytype; 392 fdcon[s].c_keytype = keytype;
380 gettimeofday(&fdcon[s].c_tv, NULL); 393 monotime_tv(&fdcon[s].c_tv);
381 fdcon[s].c_tv.tv_sec += timeout; 394 fdcon[s].c_tv.tv_sec += timeout;
382 TAILQ_INSERT_TAIL(&tq, &fdcon[s], c_link); 395 TAILQ_INSERT_TAIL(&tq, &fdcon[s], c_link);
383 FD_SET(s, read_wait); 396 FD_SET(s, read_wait);
@@ -411,7 +424,7 @@ static void
411contouch(int s) 424contouch(int s)
412{ 425{
413 TAILQ_REMOVE(&tq, &fdcon[s], c_link); 426 TAILQ_REMOVE(&tq, &fdcon[s], c_link);
414 gettimeofday(&fdcon[s].c_tv, NULL); 427 monotime_tv(&fdcon[s].c_tv);
415 fdcon[s].c_tv.tv_sec += timeout; 428 fdcon[s].c_tv.tv_sec += timeout;
416 TAILQ_INSERT_TAIL(&tq, &fdcon[s], c_link); 429 TAILQ_INSERT_TAIL(&tq, &fdcon[s], c_link);
417} 430}
@@ -497,7 +510,8 @@ congreet(int s)
497 confree(s); 510 confree(s);
498 return; 511 return;
499 } 512 }
500 fprintf(stderr, "# %s:%d %s\n", c->c_name, ssh_port, chop(buf)); 513 fprintf(stderr, "%c %s:%d %s\n", print_sshfp ? ';' : '#',
514 c->c_name, ssh_port, chop(buf));
501 keygrab_ssh2(c); 515 keygrab_ssh2(c);
502 confree(s); 516 confree(s);
503} 517}
@@ -545,7 +559,7 @@ conloop(void)
545 con *c; 559 con *c;
546 int i; 560 int i;
547 561
548 gettimeofday(&now, NULL); 562 monotime_tv(&now);
549 c = TAILQ_FIRST(&tq); 563 c = TAILQ_FIRST(&tq);
550 564
551 if (c && (c->c_tv.tv_sec > now.tv_sec || 565 if (c && (c->c_tv.tv_sec > now.tv_sec ||
@@ -621,8 +635,8 @@ static void
621usage(void) 635usage(void)
622{ 636{
623 fprintf(stderr, 637 fprintf(stderr,
624 "usage: %s [-46cHv] [-f file] [-p port] [-T timeout] [-t type]\n" 638 "usage: %s [-46cDHv] [-f file] [-p port] [-T timeout] [-t type]\n"
625 "\t\t [host | addrlist namelist] ...\n", 639 "\t\t [host | addrlist namelist]\n",
626 __progname); 640 __progname);
627 exit(1); 641 exit(1);
628} 642}
@@ -650,7 +664,7 @@ main(int argc, char **argv)
650 if (argc <= 1) 664 if (argc <= 1)
651 usage(); 665 usage();
652 666
653 while ((opt = getopt(argc, argv, "cHv46p:T:t:f:")) != -1) { 667 while ((opt = getopt(argc, argv, "cDHv46p:T:t:f:")) != -1) {
654 switch (opt) { 668 switch (opt) {
655 case 'H': 669 case 'H':
656 hash_hosts = 1; 670 hash_hosts = 1;
@@ -658,6 +672,9 @@ main(int argc, char **argv)
658 case 'c': 672 case 'c':
659 get_cert = 1; 673 get_cert = 1;
660 break; 674 break;
675 case 'D':
676 print_sshfp = 1;
677 break;
661 case 'p': 678 case 'p':
662 ssh_port = a2port(optarg); 679 ssh_port = a2port(optarg);
663 if (ssh_port <= 0) { 680 if (ssh_port <= 0) {
@@ -706,6 +723,9 @@ main(int argc, char **argv)
706 case KEY_ED25519: 723 case KEY_ED25519:
707 get_keytypes |= KT_ED25519; 724 get_keytypes |= KT_ED25519;
708 break; 725 break;
726 case KEY_XMSS:
727 get_keytypes |= KT_XMSS;
728 break;
709 case KEY_UNSPEC: 729 case KEY_UNSPEC:
710 default: 730 default:
711 fatal("Unknown key type \"%s\"", tname); 731 fatal("Unknown key type \"%s\"", tname);
diff --git a/ssh-keysign.c b/ssh-keysign.c
index ac5034de8..78bb66b08 100644
--- a/ssh-keysign.c
+++ b/ssh-keysign.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-keysign.c,v 1.52 2016/02/15 09:47:49 dtucker Exp $ */ 1/* $OpenBSD: ssh-keysign.c,v 1.54 2018/02/23 15:58:38 markus Exp $ */
2/* 2/*
3 * Copyright (c) 2002 Markus Friedl. All rights reserved. 3 * Copyright (c) 2002 Markus Friedl. All rights reserved.
4 * 4 *
@@ -158,7 +158,7 @@ valid_request(struct passwd *pw, char *host, struct sshkey **ret,
158 158
159 debug3("%s: fail %d", __func__, fail); 159 debug3("%s: fail %d", __func__, fail);
160 160
161 if (fail && key != NULL) 161 if (fail)
162 sshkey_free(key); 162 sshkey_free(key);
163 else if (ret != NULL) 163 else if (ret != NULL)
164 *ret = key; 164 *ret = key;
@@ -171,7 +171,7 @@ main(int argc, char **argv)
171{ 171{
172 struct sshbuf *b; 172 struct sshbuf *b;
173 Options options; 173 Options options;
174#define NUM_KEYTYPES 4 174#define NUM_KEYTYPES 5
175 struct sshkey *keys[NUM_KEYTYPES], *key = NULL; 175 struct sshkey *keys[NUM_KEYTYPES], *key = NULL;
176 struct passwd *pw; 176 struct passwd *pw;
177 int r, key_fd[NUM_KEYTYPES], i, found, version = 2, fd; 177 int r, key_fd[NUM_KEYTYPES], i, found, version = 2, fd;
@@ -198,6 +198,7 @@ main(int argc, char **argv)
198 key_fd[i++] = open(_PATH_HOST_DSA_KEY_FILE, O_RDONLY); 198 key_fd[i++] = open(_PATH_HOST_DSA_KEY_FILE, O_RDONLY);
199 key_fd[i++] = open(_PATH_HOST_ECDSA_KEY_FILE, O_RDONLY); 199 key_fd[i++] = open(_PATH_HOST_ECDSA_KEY_FILE, O_RDONLY);
200 key_fd[i++] = open(_PATH_HOST_ED25519_KEY_FILE, O_RDONLY); 200 key_fd[i++] = open(_PATH_HOST_ED25519_KEY_FILE, O_RDONLY);
201 key_fd[i++] = open(_PATH_HOST_XMSS_KEY_FILE, O_RDONLY);
201 key_fd[i++] = open(_PATH_HOST_RSA_KEY_FILE, O_RDONLY); 202 key_fd[i++] = open(_PATH_HOST_RSA_KEY_FILE, O_RDONLY);
202 203
203 original_real_uid = getuid(); /* XXX readconf.c needs this */ 204 original_real_uid = getuid(); /* XXX readconf.c needs this */
diff --git a/ssh-pkcs11-client.c b/ssh-pkcs11-client.c
index a79c87210..fc7582827 100644
--- a/ssh-pkcs11-client.c
+++ b/ssh-pkcs11-client.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-pkcs11-client.c,v 1.7 2017/05/30 08:52:19 markus Exp $ */ 1/* $OpenBSD: ssh-pkcs11-client.c,v 1.8 2018/02/05 05:37:46 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2010 Markus Friedl. All rights reserved. 3 * Copyright (c) 2010 Markus Friedl. All rights reserved.
4 * 4 *
@@ -99,7 +99,8 @@ pkcs11_init(int interactive)
99void 99void
100pkcs11_terminate(void) 100pkcs11_terminate(void)
101{ 101{
102 close(fd); 102 if (fd >= 0)
103 close(fd);
103} 104}
104 105
105static int 106static int
diff --git a/ssh-pkcs11-helper.c b/ssh-pkcs11-helper.c
index fd3039c14..6301033c5 100644
--- a/ssh-pkcs11-helper.c
+++ b/ssh-pkcs11-helper.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-pkcs11-helper.c,v 1.13 2017/05/30 08:52:19 markus Exp $ */ 1/* $OpenBSD: ssh-pkcs11-helper.c,v 1.14 2018/01/08 15:18:46 markus Exp $ */
2/* 2/*
3 * Copyright (c) 2010 Markus Friedl. All rights reserved. 3 * Copyright (c) 2010 Markus Friedl. All rights reserved.
4 * 4 *
@@ -30,12 +30,13 @@
30#include <errno.h> 30#include <errno.h>
31 31
32#include "xmalloc.h" 32#include "xmalloc.h"
33#include "buffer.h" 33#include "sshbuf.h"
34#include "log.h" 34#include "log.h"
35#include "misc.h" 35#include "misc.h"
36#include "key.h" 36#include "sshkey.h"
37#include "authfd.h" 37#include "authfd.h"
38#include "ssh-pkcs11.h" 38#include "ssh-pkcs11.h"
39#include "ssherr.h"
39 40
40#ifdef ENABLE_PKCS11 41#ifdef ENABLE_PKCS11
41 42
@@ -51,13 +52,9 @@ TAILQ_HEAD(, pkcs11_keyinfo) pkcs11_keylist;
51 52
52#define MAX_MSG_LENGTH 10240 /*XXX*/ 53#define MAX_MSG_LENGTH 10240 /*XXX*/
53 54
54/* helper */
55#define get_int() buffer_get_int(&iqueue);
56#define get_string(lenp) buffer_get_string(&iqueue, lenp);
57
58/* input and output queue */ 55/* input and output queue */
59Buffer iqueue; 56struct sshbuf *iqueue;
60Buffer oqueue; 57struct sshbuf *oqueue;
61 58
62static void 59static void
63add_key(struct sshkey *k, char *name) 60add_key(struct sshkey *k, char *name)
@@ -80,7 +77,7 @@ del_keys_by_name(char *name)
80 if (!strcmp(ki->providername, name)) { 77 if (!strcmp(ki->providername, name)) {
81 TAILQ_REMOVE(&pkcs11_keylist, ki, next); 78 TAILQ_REMOVE(&pkcs11_keylist, ki, next);
82 free(ki->providername); 79 free(ki->providername);
83 key_free(ki->key); 80 sshkey_free(ki->key);
84 free(ki); 81 free(ki);
85 } 82 }
86 } 83 }
@@ -94,20 +91,19 @@ lookup_key(struct sshkey *k)
94 91
95 TAILQ_FOREACH(ki, &pkcs11_keylist, next) { 92 TAILQ_FOREACH(ki, &pkcs11_keylist, next) {
96 debug("check %p %s", ki, ki->providername); 93 debug("check %p %s", ki, ki->providername);
97 if (key_equal(k, ki->key)) 94 if (sshkey_equal(k, ki->key))
98 return (ki->key); 95 return (ki->key);
99 } 96 }
100 return (NULL); 97 return (NULL);
101} 98}
102 99
103static void 100static void
104send_msg(Buffer *m) 101send_msg(struct sshbuf *m)
105{ 102{
106 int mlen = buffer_len(m); 103 int r;
107 104
108 buffer_put_int(&oqueue, mlen); 105 if ((r = sshbuf_put_stringb(oqueue, m)) != 0)
109 buffer_append(&oqueue, buffer_ptr(m), mlen); 106 fatal("%s: buffer error: %s", __func__, ssh_err(r));
110 buffer_consume(m, mlen);
111} 107}
112 108
113static void 109static void
@@ -115,69 +111,85 @@ process_add(void)
115{ 111{
116 char *name, *pin; 112 char *name, *pin;
117 struct sshkey **keys; 113 struct sshkey **keys;
118 int i, nkeys; 114 int r, i, nkeys;
119 u_char *blob; 115 u_char *blob;
120 u_int blen; 116 size_t blen;
121 Buffer msg; 117 struct sshbuf *msg;
122 118
123 buffer_init(&msg); 119 if ((msg = sshbuf_new()) == NULL)
124 name = get_string(NULL); 120 fatal("%s: sshbuf_new failed", __func__);
125 pin = get_string(NULL); 121 if ((r = sshbuf_get_cstring(iqueue, &name, NULL)) != 0 ||
122 (r = sshbuf_get_cstring(iqueue, &pin, NULL)) != 0)
123 fatal("%s: buffer error: %s", __func__, ssh_err(r));
126 if ((nkeys = pkcs11_add_provider(name, pin, &keys)) > 0) { 124 if ((nkeys = pkcs11_add_provider(name, pin, &keys)) > 0) {
127 buffer_put_char(&msg, SSH2_AGENT_IDENTITIES_ANSWER); 125 if ((r = sshbuf_put_u8(msg,
128 buffer_put_int(&msg, nkeys); 126 SSH2_AGENT_IDENTITIES_ANSWER)) != 0 ||
127 (r = sshbuf_put_u32(msg, nkeys)) != 0)
128 fatal("%s: buffer error: %s", __func__, ssh_err(r));
129 for (i = 0; i < nkeys; i++) { 129 for (i = 0; i < nkeys; i++) {
130 if (key_to_blob(keys[i], &blob, &blen) == 0) 130 if ((r = sshkey_to_blob(keys[i], &blob, &blen)) != 0) {
131 debug("%s: sshkey_to_blob: %s",
132 __func__, ssh_err(r));
131 continue; 133 continue;
132 buffer_put_string(&msg, blob, blen); 134 }
133 buffer_put_cstring(&msg, name); 135 if ((r = sshbuf_put_string(msg, blob, blen)) != 0 ||
136 (r = sshbuf_put_cstring(msg, name)) != 0)
137 fatal("%s: buffer error: %s",
138 __func__, ssh_err(r));
134 free(blob); 139 free(blob);
135 add_key(keys[i], name); 140 add_key(keys[i], name);
136 } 141 }
137 free(keys); 142 free(keys);
138 } else { 143 } else {
139 buffer_put_char(&msg, SSH_AGENT_FAILURE); 144 if ((r = sshbuf_put_u8(msg, SSH_AGENT_FAILURE)) != 0)
145 fatal("%s: buffer error: %s", __func__, ssh_err(r));
140 } 146 }
141 free(pin); 147 free(pin);
142 free(name); 148 free(name);
143 send_msg(&msg); 149 send_msg(msg);
144 buffer_free(&msg); 150 sshbuf_free(msg);
145} 151}
146 152
147static void 153static void
148process_del(void) 154process_del(void)
149{ 155{
150 char *name, *pin; 156 char *name, *pin;
151 Buffer msg; 157 struct sshbuf *msg;
152 158 int r;
153 buffer_init(&msg); 159
154 name = get_string(NULL); 160 if ((msg = sshbuf_new()) == NULL)
155 pin = get_string(NULL); 161 fatal("%s: sshbuf_new failed", __func__);
162 if ((r = sshbuf_get_cstring(iqueue, &name, NULL)) != 0 ||
163 (r = sshbuf_get_cstring(iqueue, &pin, NULL)) != 0)
164 fatal("%s: buffer error: %s", __func__, ssh_err(r));
156 del_keys_by_name(name); 165 del_keys_by_name(name);
157 if (pkcs11_del_provider(name) == 0) 166 if ((r = sshbuf_put_u8(msg, pkcs11_del_provider(name) == 0 ?
158 buffer_put_char(&msg, SSH_AGENT_SUCCESS); 167 SSH_AGENT_SUCCESS : SSH_AGENT_FAILURE)) != 0)
159 else 168 fatal("%s: buffer error: %s", __func__, ssh_err(r));
160 buffer_put_char(&msg, SSH_AGENT_FAILURE);
161 free(pin); 169 free(pin);
162 free(name); 170 free(name);
163 send_msg(&msg); 171 send_msg(msg);
164 buffer_free(&msg); 172 sshbuf_free(msg);
165} 173}
166 174
167static void 175static void
168process_sign(void) 176process_sign(void)
169{ 177{
170 u_char *blob, *data, *signature = NULL; 178 u_char *blob, *data, *signature = NULL;
171 u_int blen, dlen, slen = 0; 179 size_t blen, dlen, slen = 0;
172 int ok = -1; 180 int r, ok = -1;
173 struct sshkey *key, *found; 181 struct sshkey *key, *found;
174 Buffer msg; 182 struct sshbuf *msg;
175 183
176 blob = get_string(&blen); 184 /* XXX support SHA2 signature flags */
177 data = get_string(&dlen); 185 if ((r = sshbuf_get_string(iqueue, &blob, &blen)) != 0 ||
178 (void)get_int(); /* XXX ignore flags */ 186 (r = sshbuf_get_string(iqueue, &data, &dlen)) != 0 ||
187 (r = sshbuf_get_u32(iqueue, NULL)) != 0)
188 fatal("%s: buffer error: %s", __func__, ssh_err(r));
179 189
180 if ((key = key_from_blob(blob, blen)) != NULL) { 190 if ((r = sshkey_from_blob(blob, blen, &key)) != 0)
191 error("%s: sshkey_from_blob: %s", __func__, ssh_err(r));
192 else {
181 if ((found = lookup_key(key)) != NULL) { 193 if ((found = lookup_key(key)) != NULL) {
182#ifdef WITH_OPENSSL 194#ifdef WITH_OPENSSL
183 int ret; 195 int ret;
@@ -191,20 +203,23 @@ process_sign(void)
191 } 203 }
192#endif /* WITH_OPENSSL */ 204#endif /* WITH_OPENSSL */
193 } 205 }
194 key_free(key); 206 sshkey_free(key);
195 } 207 }
196 buffer_init(&msg); 208 if ((msg = sshbuf_new()) == NULL)
209 fatal("%s: sshbuf_new failed", __func__);
197 if (ok == 0) { 210 if (ok == 0) {
198 buffer_put_char(&msg, SSH2_AGENT_SIGN_RESPONSE); 211 if ((r = sshbuf_put_u8(msg, SSH2_AGENT_SIGN_RESPONSE)) != 0 ||
199 buffer_put_string(&msg, signature, slen); 212 (r = sshbuf_put_string(msg, signature, slen)) != 0)
213 fatal("%s: buffer error: %s", __func__, ssh_err(r));
200 } else { 214 } else {
201 buffer_put_char(&msg, SSH_AGENT_FAILURE); 215 if ((r = sshbuf_put_u8(msg, SSH2_AGENT_FAILURE)) != 0)
216 fatal("%s: buffer error: %s", __func__, ssh_err(r));
202 } 217 }
203 free(data); 218 free(data);
204 free(blob); 219 free(blob);
205 free(signature); 220 free(signature);
206 send_msg(&msg); 221 send_msg(msg);
207 buffer_free(&msg); 222 sshbuf_free(msg);
208} 223}
209 224
210static void 225static void
@@ -213,13 +228,14 @@ process(void)
213 u_int msg_len; 228 u_int msg_len;
214 u_int buf_len; 229 u_int buf_len;
215 u_int consumed; 230 u_int consumed;
216 u_int type; 231 u_char type;
217 u_char *cp; 232 const u_char *cp;
233 int r;
218 234
219 buf_len = buffer_len(&iqueue); 235 buf_len = sshbuf_len(iqueue);
220 if (buf_len < 5) 236 if (buf_len < 5)
221 return; /* Incomplete message. */ 237 return; /* Incomplete message. */
222 cp = buffer_ptr(&iqueue); 238 cp = sshbuf_ptr(iqueue);
223 msg_len = get_u32(cp); 239 msg_len = get_u32(cp);
224 if (msg_len > MAX_MSG_LENGTH) { 240 if (msg_len > MAX_MSG_LENGTH) {
225 error("bad message len %d", msg_len); 241 error("bad message len %d", msg_len);
@@ -227,9 +243,10 @@ process(void)
227 } 243 }
228 if (buf_len < msg_len + 4) 244 if (buf_len < msg_len + 4)
229 return; 245 return;
230 buffer_consume(&iqueue, 4); 246 if ((r = sshbuf_consume(iqueue, 4)) != 0 ||
247 (r = sshbuf_get_u8(iqueue, &type)) != 0)
248 fatal("%s: buffer error: %s", __func__, ssh_err(r));
231 buf_len -= 4; 249 buf_len -= 4;
232 type = buffer_get_char(&iqueue);
233 switch (type) { 250 switch (type) {
234 case SSH_AGENTC_ADD_SMARTCARD_KEY: 251 case SSH_AGENTC_ADD_SMARTCARD_KEY:
235 debug("process_add"); 252 debug("process_add");
@@ -248,17 +265,19 @@ process(void)
248 break; 265 break;
249 } 266 }
250 /* discard the remaining bytes from the current packet */ 267 /* discard the remaining bytes from the current packet */
251 if (buf_len < buffer_len(&iqueue)) { 268 if (buf_len < sshbuf_len(iqueue)) {
252 error("iqueue grew unexpectedly"); 269 error("iqueue grew unexpectedly");
253 cleanup_exit(255); 270 cleanup_exit(255);
254 } 271 }
255 consumed = buf_len - buffer_len(&iqueue); 272 consumed = buf_len - sshbuf_len(iqueue);
256 if (msg_len < consumed) { 273 if (msg_len < consumed) {
257 error("msg_len %d < consumed %d", msg_len, consumed); 274 error("msg_len %d < consumed %d", msg_len, consumed);
258 cleanup_exit(255); 275 cleanup_exit(255);
259 } 276 }
260 if (msg_len > consumed) 277 if (msg_len > consumed) {
261 buffer_consume(&iqueue, msg_len - consumed); 278 if ((r = sshbuf_consume(iqueue, msg_len - consumed)) != 0)
279 fatal("%s: buffer error: %s", __func__, ssh_err(r));
280 }
262} 281}
263 282
264void 283void
@@ -272,7 +291,7 @@ int
272main(int argc, char **argv) 291main(int argc, char **argv)
273{ 292{
274 fd_set *rset, *wset; 293 fd_set *rset, *wset;
275 int in, out, max, log_stderr = 0; 294 int r, in, out, max, log_stderr = 0;
276 ssize_t len, olen, set_size; 295 ssize_t len, olen, set_size;
277 SyslogFacility log_facility = SYSLOG_FACILITY_AUTH; 296 SyslogFacility log_facility = SYSLOG_FACILITY_AUTH;
278 LogLevel log_level = SYSLOG_LEVEL_ERROR; 297 LogLevel log_level = SYSLOG_LEVEL_ERROR;
@@ -298,8 +317,10 @@ main(int argc, char **argv)
298 if (out > max) 317 if (out > max)
299 max = out; 318 max = out;
300 319
301 buffer_init(&iqueue); 320 if ((iqueue = sshbuf_new()) == NULL)
302 buffer_init(&oqueue); 321 fatal("%s: sshbuf_new failed", __func__);
322 if ((oqueue = sshbuf_new()) == NULL)
323 fatal("%s: sshbuf_new failed", __func__);
303 324
304 set_size = howmany(max + 1, NFDBITS) * sizeof(fd_mask); 325 set_size = howmany(max + 1, NFDBITS) * sizeof(fd_mask);
305 rset = xmalloc(set_size); 326 rset = xmalloc(set_size);
@@ -314,11 +335,13 @@ main(int argc, char **argv)
314 * the worst-case length packet it can generate, 335 * the worst-case length packet it can generate,
315 * otherwise apply backpressure by stopping reads. 336 * otherwise apply backpressure by stopping reads.
316 */ 337 */
317 if (buffer_check_alloc(&iqueue, sizeof(buf)) && 338 if ((r = sshbuf_check_reserve(iqueue, sizeof(buf))) == 0 &&
318 buffer_check_alloc(&oqueue, MAX_MSG_LENGTH)) 339 (r = sshbuf_check_reserve(oqueue, MAX_MSG_LENGTH)) == 0)
319 FD_SET(in, rset); 340 FD_SET(in, rset);
341 else if (r != SSH_ERR_NO_BUFFER_SPACE)
342 fatal("%s: buffer error: %s", __func__, ssh_err(r));
320 343
321 olen = buffer_len(&oqueue); 344 olen = sshbuf_len(oqueue);
322 if (olen > 0) 345 if (olen > 0)
323 FD_SET(out, wset); 346 FD_SET(out, wset);
324 347
@@ -338,18 +361,20 @@ main(int argc, char **argv)
338 } else if (len < 0) { 361 } else if (len < 0) {
339 error("read: %s", strerror(errno)); 362 error("read: %s", strerror(errno));
340 cleanup_exit(1); 363 cleanup_exit(1);
341 } else { 364 } else if ((r = sshbuf_put(iqueue, buf, len)) != 0) {
342 buffer_append(&iqueue, buf, len); 365 fatal("%s: buffer error: %s",
366 __func__, ssh_err(r));
343 } 367 }
344 } 368 }
345 /* send oqueue to stdout */ 369 /* send oqueue to stdout */
346 if (FD_ISSET(out, wset)) { 370 if (FD_ISSET(out, wset)) {
347 len = write(out, buffer_ptr(&oqueue), olen); 371 len = write(out, sshbuf_ptr(oqueue), olen);
348 if (len < 0) { 372 if (len < 0) {
349 error("write: %s", strerror(errno)); 373 error("write: %s", strerror(errno));
350 cleanup_exit(1); 374 cleanup_exit(1);
351 } else { 375 } else if ((r = sshbuf_consume(oqueue, len)) != 0) {
352 buffer_consume(&oqueue, len); 376 fatal("%s: buffer error: %s",
377 __func__, ssh_err(r));
353 } 378 }
354 } 379 }
355 380
@@ -358,8 +383,10 @@ main(int argc, char **argv)
358 * into the output buffer, otherwise stop processing input 383 * into the output buffer, otherwise stop processing input
359 * and let the output queue drain. 384 * and let the output queue drain.
360 */ 385 */
361 if (buffer_check_alloc(&oqueue, MAX_MSG_LENGTH)) 386 if ((r = sshbuf_check_reserve(oqueue, MAX_MSG_LENGTH)) == 0)
362 process(); 387 process();
388 else if (r != SSH_ERR_NO_BUFFER_SPACE)
389 fatal("%s: buffer error: %s", __func__, ssh_err(r));
363 } 390 }
364} 391}
365#else /* ENABLE_PKCS11 */ 392#else /* ENABLE_PKCS11 */
diff --git a/ssh-pkcs11.c b/ssh-pkcs11.c
index b37491c5d..65a7b5897 100644
--- a/ssh-pkcs11.c
+++ b/ssh-pkcs11.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-pkcs11.c,v 1.25 2017/05/31 09:15:42 deraadt Exp $ */ 1/* $OpenBSD: ssh-pkcs11.c,v 1.26 2018/02/07 02:06:51 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2010 Markus Friedl. All rights reserved. 3 * Copyright (c) 2010 Markus Friedl. All rights reserved.
4 * 4 *
@@ -532,8 +532,7 @@ pkcs11_fetch_keys_filter(struct pkcs11_provider *p, CK_ULONG slotidx,
532 == NULL) { 532 == NULL) {
533 error("RSAPublicKey_dup"); 533 error("RSAPublicKey_dup");
534 } 534 }
535 if (x509) 535 X509_free(x509);
536 X509_free(x509);
537 } 536 }
538 if (rsa && rsa->n && rsa->e && 537 if (rsa && rsa->n && rsa->e &&
539 pkcs11_rsa_wrap(p, slotidx, &attribs[0], rsa) == 0) { 538 pkcs11_rsa_wrap(p, slotidx, &attribs[0], rsa) == 0) {
diff --git a/ssh-rsa.c b/ssh-rsa.c
index f570ae6d4..49e71c87f 100644
--- a/ssh-rsa.c
+++ b/ssh-rsa.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-rsa.c,v 1.62 2017/07/01 13:50:45 djm Exp $ */ 1/* $OpenBSD: ssh-rsa.c,v 1.66 2018/02/14 16:27:24 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2000, 2003 Markus Friedl <markus@openbsd.org> 3 * Copyright (c) 2000, 2003 Markus Friedl <markus@openbsd.org>
4 * 4 *
@@ -33,6 +33,7 @@
33#define SSHKEY_INTERNAL 33#define SSHKEY_INTERNAL
34#include "sshkey.h" 34#include "sshkey.h"
35#include "digest.h" 35#include "digest.h"
36#include "log.h"
36 37
37static int openssh_RSA_verify(int, u_char *, size_t, u_char *, size_t, RSA *); 38static int openssh_RSA_verify(int, u_char *, size_t, u_char *, size_t, RSA *);
38 39
@@ -78,13 +79,12 @@ rsa_hash_alg_nid(int type)
78 } 79 }
79} 80}
80 81
81/* calculate p-1 and q-1 */
82int 82int
83ssh_rsa_generate_additional_parameters(struct sshkey *key) 83ssh_rsa_generate_additional_parameters(struct sshkey *key)
84{ 84{
85 RSA *rsa;
86 BIGNUM *aux = NULL; 85 BIGNUM *aux = NULL;
87 BN_CTX *ctx = NULL; 86 BN_CTX *ctx = NULL;
87 BIGNUM d;
88 int r; 88 int r;
89 89
90 if (key == NULL || key->rsa == NULL || 90 if (key == NULL || key->rsa == NULL ||
@@ -97,12 +97,15 @@ ssh_rsa_generate_additional_parameters(struct sshkey *key)
97 r = SSH_ERR_ALLOC_FAIL; 97 r = SSH_ERR_ALLOC_FAIL;
98 goto out; 98 goto out;
99 } 99 }
100 rsa = key->rsa; 100 BN_set_flags(aux, BN_FLG_CONSTTIME);
101 101
102 if ((BN_sub(aux, rsa->q, BN_value_one()) == 0) || 102 BN_init(&d);
103 (BN_mod(rsa->dmq1, rsa->d, aux, ctx) == 0) || 103 BN_with_flags(&d, key->rsa->d, BN_FLG_CONSTTIME);
104 (BN_sub(aux, rsa->p, BN_value_one()) == 0) || 104
105 (BN_mod(rsa->dmp1, rsa->d, aux, ctx) == 0)) { 105 if ((BN_sub(aux, key->rsa->q, BN_value_one()) == 0) ||
106 (BN_mod(key->rsa->dmq1, &d, aux, ctx) == 0) ||
107 (BN_sub(aux, key->rsa->p, BN_value_one()) == 0) ||
108 (BN_mod(key->rsa->dmp1, &d, aux, ctx) == 0)) {
106 r = SSH_ERR_LIBCRYPTO_ERROR; 109 r = SSH_ERR_LIBCRYPTO_ERROR;
107 goto out; 110 goto out;
108 } 111 }
@@ -119,7 +122,7 @@ ssh_rsa_sign(const struct sshkey *key, u_char **sigp, size_t *lenp,
119 const u_char *data, size_t datalen, const char *alg_ident) 122 const u_char *data, size_t datalen, const char *alg_ident)
120{ 123{
121 u_char digest[SSH_DIGEST_MAX_LENGTH], *sig = NULL; 124 u_char digest[SSH_DIGEST_MAX_LENGTH], *sig = NULL;
122 size_t slen; 125 size_t slen = 0;
123 u_int dlen, len; 126 u_int dlen, len;
124 int nid, hash_alg, ret = SSH_ERR_INTERNAL_ERROR; 127 int nid, hash_alg, ret = SSH_ERR_INTERNAL_ERROR;
125 struct sshbuf *b = NULL; 128 struct sshbuf *b = NULL;
@@ -188,21 +191,19 @@ ssh_rsa_sign(const struct sshkey *key, u_char **sigp, size_t *lenp,
188 ret = 0; 191 ret = 0;
189 out: 192 out:
190 explicit_bzero(digest, sizeof(digest)); 193 explicit_bzero(digest, sizeof(digest));
191 if (sig != NULL) { 194 freezero(sig, slen);
192 explicit_bzero(sig, slen);
193 free(sig);
194 }
195 sshbuf_free(b); 195 sshbuf_free(b);
196 return ret; 196 return ret;
197} 197}
198 198
199int 199int
200ssh_rsa_verify(const struct sshkey *key, 200ssh_rsa_verify(const struct sshkey *key,
201 const u_char *sig, size_t siglen, const u_char *data, size_t datalen) 201 const u_char *sig, size_t siglen, const u_char *data, size_t datalen,
202 const char *alg)
202{ 203{
203 char *ktype = NULL; 204 char *sigtype = NULL;
204 int hash_alg, ret = SSH_ERR_INTERNAL_ERROR; 205 int hash_alg, ret = SSH_ERR_INTERNAL_ERROR;
205 size_t len, diff, modlen, dlen; 206 size_t len = 0, diff, modlen, dlen;
206 struct sshbuf *b = NULL; 207 struct sshbuf *b = NULL;
207 u_char digest[SSH_DIGEST_MAX_LENGTH], *osigblob, *sigblob = NULL; 208 u_char digest[SSH_DIGEST_MAX_LENGTH], *osigblob, *sigblob = NULL;
208 209
@@ -215,11 +216,19 @@ ssh_rsa_verify(const struct sshkey *key,
215 216
216 if ((b = sshbuf_from(sig, siglen)) == NULL) 217 if ((b = sshbuf_from(sig, siglen)) == NULL)
217 return SSH_ERR_ALLOC_FAIL; 218 return SSH_ERR_ALLOC_FAIL;
218 if (sshbuf_get_cstring(b, &ktype, NULL) != 0) { 219 if (sshbuf_get_cstring(b, &sigtype, NULL) != 0) {
219 ret = SSH_ERR_INVALID_FORMAT; 220 ret = SSH_ERR_INVALID_FORMAT;
220 goto out; 221 goto out;
221 } 222 }
222 if ((hash_alg = rsa_hash_alg_from_ident(ktype)) == -1) { 223 /* XXX djm: need cert types that reliably yield SHA-2 signatures */
224 if (alg != NULL && strcmp(alg, sigtype) != 0 &&
225 strcmp(alg, "ssh-rsa-cert-v01@openssh.com") != 0) {
226 error("%s: RSA signature type mismatch: "
227 "expected %s received %s", __func__, alg, sigtype);
228 ret = SSH_ERR_SIGNATURE_INVALID;
229 goto out;
230 }
231 if ((hash_alg = rsa_hash_alg_from_ident(sigtype)) == -1) {
223 ret = SSH_ERR_KEY_TYPE_MISMATCH; 232 ret = SSH_ERR_KEY_TYPE_MISMATCH;
224 goto out; 233 goto out;
225 } 234 }
@@ -259,11 +268,8 @@ ssh_rsa_verify(const struct sshkey *key,
259 ret = openssh_RSA_verify(hash_alg, digest, dlen, sigblob, len, 268 ret = openssh_RSA_verify(hash_alg, digest, dlen, sigblob, len,
260 key->rsa); 269 key->rsa);
261 out: 270 out:
262 if (sigblob != NULL) { 271 freezero(sigblob, len);
263 explicit_bzero(sigblob, len); 272 free(sigtype);
264 free(sigblob);
265 }
266 free(ktype);
267 sshbuf_free(b); 273 sshbuf_free(b);
268 explicit_bzero(digest, sizeof(digest)); 274 explicit_bzero(digest, sizeof(digest));
269 return ret; 275 return ret;
@@ -384,10 +390,7 @@ openssh_RSA_verify(int hash_alg, u_char *hash, size_t hashlen,
384 } 390 }
385 ret = 0; 391 ret = 0;
386done: 392done:
387 if (decrypted) { 393 freezero(decrypted, rsasize);
388 explicit_bzero(decrypted, rsasize);
389 free(decrypted);
390 }
391 return ret; 394 return ret;
392} 395}
393#endif /* WITH_OPENSSL */ 396#endif /* WITH_OPENSSL */
diff --git a/ssh-xmss.c b/ssh-xmss.c
new file mode 100644
index 000000000..4c734fd7d
--- /dev/null
+++ b/ssh-xmss.c
@@ -0,0 +1,192 @@
1/* $OpenBSD: ssh-xmss.c,v 1.1 2018/02/23 15:58:38 markus Exp $*/
2/*
3 * Copyright (c) 2017 Stefan-Lukas Gazdag.
4 * Copyright (c) 2017 Markus Friedl.
5 *
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18#include "includes.h"
19#ifdef WITH_XMSS
20
21#define SSHKEY_INTERNAL
22#include <sys/types.h>
23#include <limits.h>
24
25#include <string.h>
26#include <stdarg.h>
27#include <unistd.h>
28
29#include "log.h"
30#include "sshbuf.h"
31#include "sshkey.h"
32#include "sshkey-xmss.h"
33#include "ssherr.h"
34#include "ssh.h"
35
36#include "xmss_fast.h"
37
38int
39ssh_xmss_sign(const struct sshkey *key, u_char **sigp, size_t *lenp,
40 const u_char *data, size_t datalen, u_int compat)
41{
42 u_char *sig = NULL;
43 size_t slen = 0, len = 0, required_siglen;
44 unsigned long long smlen;
45 int r, ret;
46 struct sshbuf *b = NULL;
47
48 if (lenp != NULL)
49 *lenp = 0;
50 if (sigp != NULL)
51 *sigp = NULL;
52
53 if (key == NULL ||
54 sshkey_type_plain(key->type) != KEY_XMSS ||
55 key->xmss_sk == NULL ||
56 sshkey_xmss_params(key) == NULL)
57 return SSH_ERR_INVALID_ARGUMENT;
58 if ((r = sshkey_xmss_siglen(key, &required_siglen)) != 0)
59 return r;
60 if (datalen >= INT_MAX - required_siglen)
61 return SSH_ERR_INVALID_ARGUMENT;
62 smlen = slen = datalen + required_siglen;
63 if ((sig = malloc(slen)) == NULL)
64 return SSH_ERR_ALLOC_FAIL;
65 if ((r = sshkey_xmss_get_state(key, error)) != 0)
66 goto out;
67 if ((ret = xmss_sign(key->xmss_sk, sshkey_xmss_bds_state(key), sig, &smlen,
68 data, datalen, sshkey_xmss_params(key))) != 0 || smlen <= datalen) {
69 r = SSH_ERR_INVALID_ARGUMENT; /* XXX better error? */
70 goto out;
71 }
72 /* encode signature */
73 if ((b = sshbuf_new()) == NULL) {
74 r = SSH_ERR_ALLOC_FAIL;
75 goto out;
76 }
77 if ((r = sshbuf_put_cstring(b, "ssh-xmss@openssh.com")) != 0 ||
78 (r = sshbuf_put_string(b, sig, smlen - datalen)) != 0)
79 goto out;
80 len = sshbuf_len(b);
81 if (sigp != NULL) {
82 if ((*sigp = malloc(len)) == NULL) {
83 r = SSH_ERR_ALLOC_FAIL;
84 goto out;
85 }
86 memcpy(*sigp, sshbuf_ptr(b), len);
87 }
88 if (lenp != NULL)
89 *lenp = len;
90 /* success */
91 r = 0;
92 out:
93 if ((ret = sshkey_xmss_update_state(key, error)) != 0) {
94 /* discard signature since we cannot update the state */
95 if (r == 0 && sigp != NULL && *sigp != NULL) {
96 explicit_bzero(*sigp, len);
97 free(*sigp);
98 }
99 if (sigp != NULL)
100 *sigp = NULL;
101 if (lenp != NULL)
102 *lenp = 0;
103 r = ret;
104 }
105 sshbuf_free(b);
106 if (sig != NULL) {
107 explicit_bzero(sig, slen);
108 free(sig);
109 }
110
111 return r;
112}
113
114int
115ssh_xmss_verify(const struct sshkey *key,
116 const u_char *signature, size_t signaturelen,
117 const u_char *data, size_t datalen, u_int compat)
118{
119 struct sshbuf *b = NULL;
120 char *ktype = NULL;
121 const u_char *sigblob;
122 u_char *sm = NULL, *m = NULL;
123 size_t len, required_siglen;
124 unsigned long long smlen = 0, mlen = 0;
125 int r, ret;
126
127 if (key == NULL ||
128 sshkey_type_plain(key->type) != KEY_XMSS ||
129 key->xmss_pk == NULL ||
130 sshkey_xmss_params(key) == NULL ||
131 signature == NULL || signaturelen == 0)
132 return SSH_ERR_INVALID_ARGUMENT;
133 if ((r = sshkey_xmss_siglen(key, &required_siglen)) != 0)
134 return r;
135 if (datalen >= INT_MAX - required_siglen)
136 return SSH_ERR_INVALID_ARGUMENT;
137
138 if ((b = sshbuf_from(signature, signaturelen)) == NULL)
139 return SSH_ERR_ALLOC_FAIL;
140 if ((r = sshbuf_get_cstring(b, &ktype, NULL)) != 0 ||
141 (r = sshbuf_get_string_direct(b, &sigblob, &len)) != 0)
142 goto out;
143 if (strcmp("ssh-xmss@openssh.com", ktype) != 0) {
144 r = SSH_ERR_KEY_TYPE_MISMATCH;
145 goto out;
146 }
147 if (sshbuf_len(b) != 0) {
148 r = SSH_ERR_UNEXPECTED_TRAILING_DATA;
149 goto out;
150 }
151 if (len != required_siglen) {
152 r = SSH_ERR_INVALID_FORMAT;
153 goto out;
154 }
155 if (datalen >= SIZE_MAX - len) {
156 r = SSH_ERR_INVALID_ARGUMENT;
157 goto out;
158 }
159 smlen = len + datalen;
160 mlen = smlen;
161 if ((sm = malloc(smlen)) == NULL || (m = malloc(mlen)) == NULL) {
162 r = SSH_ERR_ALLOC_FAIL;
163 goto out;
164 }
165 memcpy(sm, sigblob, len);
166 memcpy(sm+len, data, datalen);
167 if ((ret = xmss_sign_open(m, &mlen, sm, smlen,
168 key->xmss_pk, sshkey_xmss_params(key))) != 0) {
169 debug2("%s: crypto_sign_xmss_open failed: %d",
170 __func__, ret);
171 }
172 if (ret != 0 || mlen != datalen) {
173 r = SSH_ERR_SIGNATURE_INVALID;
174 goto out;
175 }
176 /* XXX compare 'm' and 'data' ? */
177 /* success */
178 r = 0;
179 out:
180 if (sm != NULL) {
181 explicit_bzero(sm, smlen);
182 free(sm);
183 }
184 if (m != NULL) {
185 explicit_bzero(m, smlen); /* NB mlen may be invalid if r != 0 */
186 free(m);
187 }
188 sshbuf_free(b);
189 free(ktype);
190 return r;
191}
192#endif /* WITH_XMSS */
diff --git a/ssh.0 b/ssh.0
index f920dd97e..228553c8b 100644
--- a/ssh.0
+++ b/ssh.0
@@ -4,13 +4,13 @@ NAME
4 ssh M-bM-^@M-^S OpenSSH SSH client (remote login program) 4 ssh M-bM-^@M-^S OpenSSH SSH client (remote login program)
5 5
6SYNOPSIS 6SYNOPSIS
7 ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] 7 ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface] [-b bind_address]
8 [-D [bind_address:]port] [-E log_file] [-e escape_char] 8 [-c cipher_spec] [-D [bind_address:]port] [-E log_file]
9 [-F configfile] [-I pkcs11] [-i identity_file] 9 [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file]
10 [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec] 10 [-J destination] [-L address] [-l login_name] [-m mac_spec]
11 [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address] 11 [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address]
12 [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]] 12 [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]] destination
13 [user@]hostname [command] 13 [command]
14 14
15DESCRIPTION 15DESCRIPTION
16 ssh (SSH client) is a program for logging into a remote machine and for 16 ssh (SSH client) is a program for logging into a remote machine and for
@@ -19,11 +19,12 @@ DESCRIPTION
19 network. X11 connections, arbitrary TCP ports and UNIX-domain sockets 19 network. X11 connections, arbitrary TCP ports and UNIX-domain sockets
20 can also be forwarded over the secure channel. 20 can also be forwarded over the secure channel.
21 21
22 ssh connects and logs into the specified hostname (with optional user 22 ssh connects and logs into the specified destination, which may be
23 name). The user must prove his/her identity to the remote machine using 23 specified as either [user@]hostname or a URI of the form
24 one of several methods (see below). 24 ssh://[user@]hostname[:port]. The user must prove his/her identity to
25 the remote machine using one of several methods (see below).
25 26
26 If command is specified, it is executed on the remote host instead of a 27 If a command is specified, it is executed on the remote host instead of a
27 login shell. 28 login shell.
28 29
29 The options are as follows: 30 The options are as follows:
@@ -46,6 +47,11 @@ DESCRIPTION
46 47
47 -a Disables forwarding of the authentication agent connection. 48 -a Disables forwarding of the authentication agent connection.
48 49
50 -B bind_interface
51 Bind to the address of bind_interface before attempting to
52 connect to the destination host. This is only useful on systems
53 with more than one address.
54
49 -b bind_address 55 -b bind_address
50 Use bind_address on the local machine as the source address of 56 Use bind_address on the local machine as the source address of
51 the connection. Only useful on systems with more than one 57 the connection. Only useful on systems with more than one
@@ -138,12 +144,12 @@ DESCRIPTION
138 information from the filename obtained by appending -cert.pub to 144 information from the filename obtained by appending -cert.pub to
139 identity filenames. 145 identity filenames.
140 146
141 -J [user@]host[:port] 147 -J destination
142 Connect to the target host by first making a ssh connection to 148 Connect to the target host by first making a ssh connection to
143 the jump host and then establishing a TCP forwarding to the 149 the jump host described by destination and then establishing a
144 ultimate destination from there. Multiple jump hops may be 150 TCP forwarding to the ultimate destination from there. Multiple
145 specified separated by comma characters. This is a shortcut to 151 jump hops may be specified separated by comma characters. This
146 specify a ProxyJump configuration directive. 152 is a shortcut to specify a ProxyJump configuration directive.
147 153
148 -K Enables GSSAPI-based authentication and forwarding (delegation) 154 -K Enables GSSAPI-based authentication and forwarding (delegation)
149 of GSSAPI credentials to the server. 155 of GSSAPI credentials to the server.
@@ -785,6 +791,16 @@ ENVIRONMENT
785 command. If the current session has no tty, this 791 command. If the current session has no tty, this
786 variable is not set. 792 variable is not set.
787 793
794 SSH_TUNNEL Optionally set by sshd(8) to contain the interface
795 names assigned if tunnel forwarding was requested
796 by the client.
797
798 SSH_USER_AUTH Optionally set by sshd(8), this variable may
799 contain a pathname to a file that lists the
800 authentication methods successfully used when the
801 session was established, including any public keys
802 that were used.
803
788 TZ This variable is set to indicate the present time 804 TZ This variable is set to indicate the present time
789 zone if it was set when the daemon was started 805 zone if it was set when the daemon was started
790 (i.e. the daemon passes the value on to new 806 (i.e. the daemon passes the value on to new
@@ -846,7 +862,7 @@ FILES
846 ignore a private key file if it is accessible by others. It is 862 ignore a private key file if it is accessible by others. It is
847 possible to specify a passphrase when generating the key which 863 possible to specify a passphrase when generating the key which
848 will be used to encrypt the sensitive part of this file using 864 will be used to encrypt the sensitive part of this file using
849 3DES. 865 AES-128.
850 866
851 ~/.ssh/id_dsa.pub 867 ~/.ssh/id_dsa.pub
852 ~/.ssh/id_ecdsa.pub 868 ~/.ssh/id_ecdsa.pub
@@ -957,4 +973,4 @@ AUTHORS
957 created OpenSSH. Markus Friedl contributed the support for SSH protocol 973 created OpenSSH. Markus Friedl contributed the support for SSH protocol
958 versions 1.5 and 2.0. 974 versions 1.5 and 2.0.
959 975
960OpenBSD 6.2 September 21, 2017 OpenBSD 6.2 976OpenBSD 6.2 February 23, 2018 OpenBSD 6.2
diff --git a/ssh.1 b/ssh.1
index f1b01c566..8a03db952 100644
--- a/ssh.1
+++ b/ssh.1
@@ -33,8 +33,8 @@
33.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 33.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
34.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35.\" 35.\"
36.\" $OpenBSD: ssh.1,v 1.384 2017/09/21 19:16:53 markus Exp $ 36.\" $OpenBSD: ssh.1,v 1.391 2018/02/23 07:38:09 jmc Exp $
37.Dd $Mdocdate: September 21 2017 $ 37.Dd $Mdocdate: February 23 2018 $
38.Dt SSH 1 38.Dt SSH 1
39.Os 39.Os
40.Sh NAME 40.Sh NAME
@@ -42,8 +42,8 @@
42.Nd OpenSSH SSH client (remote login program) 42.Nd OpenSSH SSH client (remote login program)
43.Sh SYNOPSIS 43.Sh SYNOPSIS
44.Nm ssh 44.Nm ssh
45.Bk -words
46.Op Fl 46AaCfGgKkMNnqsTtVvXxYy 45.Op Fl 46AaCfGgKkMNnqsTtVvXxYy
46.Op Fl B Ar bind_interface
47.Op Fl b Ar bind_address 47.Op Fl b Ar bind_address
48.Op Fl c Ar cipher_spec 48.Op Fl c Ar cipher_spec
49.Op Fl D Oo Ar bind_address : Oc Ns Ar port 49.Op Fl D Oo Ar bind_address : Oc Ns Ar port
@@ -52,7 +52,7 @@
52.Op Fl F Ar configfile 52.Op Fl F Ar configfile
53.Op Fl I Ar pkcs11 53.Op Fl I Ar pkcs11
54.Op Fl i Ar identity_file 54.Op Fl i Ar identity_file
55.Op Fl J Oo Ar user Ns @ Oc Ns Ar host Ns Op : Ns Ar port 55.Op Fl J Ar destination
56.Op Fl L Ar address 56.Op Fl L Ar address
57.Op Fl l Ar login_name 57.Op Fl l Ar login_name
58.Op Fl m Ar mac_spec 58.Op Fl m Ar mac_spec
@@ -64,9 +64,8 @@
64.Op Fl S Ar ctl_path 64.Op Fl S Ar ctl_path
65.Op Fl W Ar host : Ns Ar port 65.Op Fl W Ar host : Ns Ar port
66.Op Fl w Ar local_tun Ns Op : Ns Ar remote_tun 66.Op Fl w Ar local_tun Ns Op : Ns Ar remote_tun
67.Oo Ar user Ns @ Oc Ns Ar hostname 67.Ar destination
68.Op Ar command 68.Op Ar command
69.Ek
70.Sh DESCRIPTION 69.Sh DESCRIPTION
71.Nm 70.Nm
72(SSH client) is a program for logging into a remote machine and for 71(SSH client) is a program for logging into a remote machine and for
@@ -79,15 +78,20 @@ sockets can also be forwarded over the secure channel.
79.Pp 78.Pp
80.Nm 79.Nm
81connects and logs into the specified 80connects and logs into the specified
82.Ar hostname 81.Ar destination ,
83(with optional 82which may be specified as either
84.Ar user 83.Sm off
85name). 84.Oo user @ Oc hostname
85.Sm on
86or a URI of the form
87.Sm off
88.No ssh:// Oo user @ Oc hostname Op : port .
89.Sm on
86The user must prove 90The user must prove
87his/her identity to the remote machine using one of several methods 91his/her identity to the remote machine using one of several methods
88(see below). 92(see below).
89.Pp 93.Pp
90If 94If a
91.Ar command 95.Ar command
92is specified, 96is specified,
93it is executed on the remote host instead of a login shell. 97it is executed on the remote host instead of a login shell.
@@ -121,6 +125,12 @@ authenticate using the identities loaded into the agent.
121.It Fl a 125.It Fl a
122Disables forwarding of the authentication agent connection. 126Disables forwarding of the authentication agent connection.
123.Pp 127.Pp
128.It Fl B Ar bind_interface
129Bind to the address of
130.Ar bind_interface
131before attempting to connect to the destination host.
132This is only useful on systems with more than one address.
133.Pp
124.It Fl b Ar bind_address 134.It Fl b Ar bind_address
125Use 135Use
126.Ar bind_address 136.Ar bind_address
@@ -287,17 +297,11 @@ by appending
287.Pa -cert.pub 297.Pa -cert.pub
288to identity filenames. 298to identity filenames.
289.Pp 299.Pp
290.It Fl J Xo 300.It Fl J Ar destination
291.Sm off
292.Op Ar user No @
293.Ar host
294.Op : Ar port
295.Sm on
296.Xc
297Connect to the target host by first making a 301Connect to the target host by first making a
298.Nm 302.Nm
299connection to the jump 303connection to the jump host described by
300.Ar host 304.Ar destination
301and then establishing a TCP forwarding to the ultimate destination from 305and then establishing a TCP forwarding to the ultimate destination from
302there. 306there.
303Multiple jump hops may be specified separated by comma characters. 307Multiple jump hops may be specified separated by comma characters.
@@ -1418,6 +1422,17 @@ This is set to the name of the tty (path to the device) associated
1418with the current shell or command. 1422with the current shell or command.
1419If the current session has no tty, 1423If the current session has no tty,
1420this variable is not set. 1424this variable is not set.
1425.It Ev SSH_TUNNEL
1426Optionally set by
1427.Xr sshd 8
1428to contain the interface names assigned if tunnel forwarding was
1429requested by the client.
1430.It Ev SSH_USER_AUTH
1431Optionally set by
1432.Xr sshd 8 ,
1433this variable may contain a pathname to a file that lists the authentication
1434methods successfully used when the session was established, including any
1435public keys that were used.
1421.It Ev TZ 1436.It Ev TZ
1422This variable is set to indicate the present time zone if it 1437This variable is set to indicate the present time zone if it
1423was set when the daemon was started (i.e. the daemon passes the value 1438was set when the daemon was started (i.e. the daemon passes the value
@@ -1501,7 +1516,7 @@ accessible by others (read/write/execute).
1501will simply ignore a private key file if it is accessible by others. 1516will simply ignore a private key file if it is accessible by others.
1502It is possible to specify a passphrase when 1517It is possible to specify a passphrase when
1503generating the key which will be used to encrypt the 1518generating the key which will be used to encrypt the
1504sensitive part of this file using 3DES. 1519sensitive part of this file using AES-128.
1505.Pp 1520.Pp
1506.It Pa ~/.ssh/id_dsa.pub 1521.It Pa ~/.ssh/id_dsa.pub
1507.It Pa ~/.ssh/id_ecdsa.pub 1522.It Pa ~/.ssh/id_ecdsa.pub
diff --git a/ssh.c b/ssh.c
index 9cb211716..e36debf6a 100644
--- a/ssh.c
+++ b/ssh.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh.c,v 1.464 2017/09/21 19:16:53 markus Exp $ */ 1/* $OpenBSD: ssh.c,v 1.475 2018/02/23 15:58:38 markus Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -168,6 +168,10 @@ char *config = NULL;
168 */ 168 */
169char *host; 169char *host;
170 170
171/* Various strings used to to percent_expand() arguments */
172static char thishost[NI_MAXHOST], shorthost[NI_MAXHOST], portstr[NI_MAXSERV];
173static char uidstr[32], *host_arg, *conn_hash_hex;
174
171/* socket address the host resolves to */ 175/* socket address the host resolves to */
172struct sockaddr_storage hostaddr; 176struct sockaddr_storage hostaddr;
173 177
@@ -197,19 +201,19 @@ static void
197usage(void) 201usage(void)
198{ 202{
199 fprintf(stderr, 203 fprintf(stderr,
200"usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]\n" 204"usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]\n"
201" [-D [bind_address:]port] [-E log_file] [-e escape_char]\n" 205" [-b bind_address] [-c cipher_spec] [-D [bind_address:]port]\n"
202" [-F configfile] [-I pkcs11] [-i identity_file]\n" 206" [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]\n"
203" [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec]\n" 207" [-i identity_file] [-J [user@]host[:port]] [-L address]\n"
204" [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address]\n" 208" [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]\n"
205" [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]\n" 209" [-Q query_option] [-R address] [-S ctl_path] [-W host:port]\n"
206" [user@]hostname [command]\n" 210" [-w local_tun[:remote_tun]] destination [command]\n"
207 ); 211 );
208 exit(255); 212 exit(255);
209} 213}
210 214
211static int ssh_session2(struct ssh *); 215static int ssh_session2(struct ssh *, struct passwd *);
212static void load_public_identity_files(void); 216static void load_public_identity_files(struct passwd *);
213static void main_sigchld_handler(int); 217static void main_sigchld_handler(int);
214 218
215/* ~/ expand a list of paths. NB. assumes path[n] is heap-allocated. */ 219/* ~/ expand a list of paths. NB. assumes path[n] is heap-allocated. */
@@ -267,6 +271,40 @@ resolve_host(const char *name, int port, int logerr, char *cname, size_t clen)
267 return res; 271 return res;
268} 272}
269 273
274/* Returns non-zero if name can only be an address and not a hostname */
275static int
276is_addr_fast(const char *name)
277{
278 return (strchr(name, '%') != NULL || strchr(name, ':') != NULL ||
279 strspn(name, "0123456789.") == strlen(name));
280}
281
282/* Returns non-zero if name represents a valid, single address */
283static int
284is_addr(const char *name)
285{
286 char strport[NI_MAXSERV];
287 struct addrinfo hints, *res;
288
289 if (is_addr_fast(name))
290 return 1;
291
292 snprintf(strport, sizeof strport, "%u", default_ssh_port());
293 memset(&hints, 0, sizeof(hints));
294 hints.ai_family = options.address_family == -1 ?
295 AF_UNSPEC : options.address_family;
296 hints.ai_socktype = SOCK_STREAM;
297 hints.ai_flags = AI_NUMERICHOST|AI_NUMERICSERV;
298 if (getaddrinfo(name, strport, &hints, &res) != 0)
299 return 0;
300 if (res == NULL || res->ai_next != NULL) {
301 freeaddrinfo(res);
302 return 0;
303 }
304 freeaddrinfo(res);
305 return 1;
306}
307
270/* 308/*
271 * Attempt to resolve a numeric host address / port to a single address. 309 * Attempt to resolve a numeric host address / port to a single address.
272 * Returns a canonical address string. 310 * Returns a canonical address string.
@@ -372,20 +410,10 @@ resolve_canonicalize(char **hostp, int port)
372 char *cp, *fullhost, newname[NI_MAXHOST]; 410 char *cp, *fullhost, newname[NI_MAXHOST];
373 struct addrinfo *addrs; 411 struct addrinfo *addrs;
374 412
375 if (options.canonicalize_hostname == SSH_CANONICALISE_NO)
376 return NULL;
377
378 /* 413 /*
379 * Don't attempt to canonicalize names that will be interpreted by 414 * Attempt to canonicalise addresses, regardless of
380 * a proxy unless the user specifically requests so. 415 * whether hostname canonicalisation was requested
381 */ 416 */
382 direct = option_clear_or_none(options.proxy_command) &&
383 options.jump_host == NULL;
384 if (!direct &&
385 options.canonicalize_hostname != SSH_CANONICALISE_ALWAYS)
386 return NULL;
387
388 /* Try numeric hostnames first */
389 if ((addrs = resolve_addr(*hostp, port, 417 if ((addrs = resolve_addr(*hostp, port,
390 newname, sizeof(newname))) != NULL) { 418 newname, sizeof(newname))) != NULL) {
391 debug2("%s: hostname %.100s is address", __func__, *hostp); 419 debug2("%s: hostname %.100s is address", __func__, *hostp);
@@ -398,6 +426,30 @@ resolve_canonicalize(char **hostp, int port)
398 return addrs; 426 return addrs;
399 } 427 }
400 428
429 /*
430 * If this looks like an address but didn't parse as one, it might
431 * be an address with an invalid interface scope. Skip further
432 * attempts at canonicalisation.
433 */
434 if (is_addr_fast(*hostp)) {
435 debug("%s: hostname %.100s is an unrecognised address",
436 __func__, *hostp);
437 return NULL;
438 }
439
440 if (options.canonicalize_hostname == SSH_CANONICALISE_NO)
441 return NULL;
442
443 /*
444 * Don't attempt to canonicalize names that will be interpreted by
445 * a proxy unless the user specifically requests so.
446 */
447 direct = option_clear_or_none(options.proxy_command) &&
448 options.jump_host == NULL;
449 if (!direct &&
450 options.canonicalize_hostname != SSH_CANONICALISE_ALWAYS)
451 return NULL;
452
401 /* If domain name is anchored, then resolve it now */ 453 /* If domain name is anchored, then resolve it now */
402 if ((*hostp)[strlen(*hostp) - 1] == '.') { 454 if ((*hostp)[strlen(*hostp) - 1] == '.') {
403 debug3("%s: name is fully qualified", __func__); 455 debug3("%s: name is fully qualified", __func__);
@@ -456,14 +508,14 @@ resolve_canonicalize(char **hostp, int port)
456 * file if the user specifies a config file on the command line. 508 * file if the user specifies a config file on the command line.
457 */ 509 */
458static void 510static void
459process_config_files(const char *host_arg, struct passwd *pw, int post_canon) 511process_config_files(const char *host_name, struct passwd *pw, int post_canon)
460{ 512{
461 char buf[PATH_MAX]; 513 char buf[PATH_MAX];
462 int r; 514 int r;
463 515
464 if (config != NULL) { 516 if (config != NULL) {
465 if (strcasecmp(config, "none") != 0 && 517 if (strcasecmp(config, "none") != 0 &&
466 !read_config_file(config, pw, host, host_arg, &options, 518 !read_config_file(config, pw, host, host_name, &options,
467 SSHCONF_USERCONF | (post_canon ? SSHCONF_POSTCANON : 0))) 519 SSHCONF_USERCONF | (post_canon ? SSHCONF_POSTCANON : 0)))
468 fatal("Can't open user config file %.100s: " 520 fatal("Can't open user config file %.100s: "
469 "%.100s", config, strerror(errno)); 521 "%.100s", config, strerror(errno));
@@ -471,13 +523,13 @@ process_config_files(const char *host_arg, struct passwd *pw, int post_canon)
471 r = snprintf(buf, sizeof buf, "%s/%s", pw->pw_dir, 523 r = snprintf(buf, sizeof buf, "%s/%s", pw->pw_dir,
472 _PATH_SSH_USER_CONFFILE); 524 _PATH_SSH_USER_CONFFILE);
473 if (r > 0 && (size_t)r < sizeof(buf)) 525 if (r > 0 && (size_t)r < sizeof(buf))
474 (void)read_config_file(buf, pw, host, host_arg, 526 (void)read_config_file(buf, pw, host, host_name,
475 &options, SSHCONF_CHECKPERM | SSHCONF_USERCONF | 527 &options, SSHCONF_CHECKPERM | SSHCONF_USERCONF |
476 (post_canon ? SSHCONF_POSTCANON : 0)); 528 (post_canon ? SSHCONF_POSTCANON : 0));
477 529
478 /* Read systemwide configuration file after user config. */ 530 /* Read systemwide configuration file after user config. */
479 (void)read_config_file(_PATH_HOST_CONFIG_FILE, pw, 531 (void)read_config_file(_PATH_HOST_CONFIG_FILE, pw,
480 host, host_arg, &options, 532 host, host_name, &options,
481 post_canon ? SSHCONF_POSTCANON : 0); 533 post_canon ? SSHCONF_POSTCANON : 0);
482 } 534 }
483} 535}
@@ -510,10 +562,9 @@ main(int ac, char **av)
510{ 562{
511 struct ssh *ssh = NULL; 563 struct ssh *ssh = NULL;
512 int i, r, opt, exit_status, use_syslog, direct, timeout_ms; 564 int i, r, opt, exit_status, use_syslog, direct, timeout_ms;
513 int config_test = 0, opt_terminated = 0; 565 int was_addr, config_test = 0, opt_terminated = 0;
514 char *p, *cp, *line, *argv0, buf[PATH_MAX], *host_arg, *logfile; 566 char *p, *cp, *line, *argv0, buf[PATH_MAX], *logfile;
515 char thishost[NI_MAXHOST], shorthost[NI_MAXHOST], portstr[NI_MAXSERV]; 567 char cname[NI_MAXHOST];
516 char cname[NI_MAXHOST], uidstr[32], *conn_hash_hex;
517 struct stat st; 568 struct stat st;
518 struct passwd *pw; 569 struct passwd *pw;
519 extern int optind, optreset; 570 extern int optind, optreset;
@@ -612,7 +663,7 @@ main(int ac, char **av)
612 663
613 again: 664 again:
614 while ((opt = getopt(ac, av, "1246ab:c:e:fgi:kl:m:no:p:qstvx" 665 while ((opt = getopt(ac, av, "1246ab:c:e:fgi:kl:m:no:p:qstvx"
615 "ACD:E:F:GI:J:KL:MNO:PQ:R:S:TVw:W:XYy")) != -1) { 666 "AB:CD:E:F:GI:J:KL:MNO:PQ:R:S:TVw:W:XYy")) != -1) {
616 switch (opt) { 667 switch (opt) {
617 case '1': 668 case '1':
618 fatal("SSH protocol v.1 is no longer supported"); 669 fatal("SSH protocol v.1 is no longer supported");
@@ -846,14 +897,18 @@ main(int ac, char **av)
846 options.control_master = SSHCTL_MASTER_YES; 897 options.control_master = SSHCTL_MASTER_YES;
847 break; 898 break;
848 case 'p': 899 case 'p':
849 options.port = a2port(optarg); 900 if (options.port == -1) {
850 if (options.port <= 0) { 901 options.port = a2port(optarg);
851 fprintf(stderr, "Bad port '%s'\n", optarg); 902 if (options.port <= 0) {
852 exit(255); 903 fprintf(stderr, "Bad port '%s'\n",
904 optarg);
905 exit(255);
906 }
853 } 907 }
854 break; 908 break;
855 case 'l': 909 case 'l':
856 options.user = optarg; 910 if (options.user == NULL)
911 options.user = optarg;
857 break; 912 break;
858 913
859 case 'L': 914 case 'L':
@@ -918,6 +973,9 @@ main(int ac, char **av)
918 case 'b': 973 case 'b':
919 options.bind_address = optarg; 974 options.bind_address = optarg;
920 break; 975 break;
976 case 'B':
977 options.bind_interface = optarg;
978 break;
921 case 'F': 979 case 'F':
922 config = optarg; 980 config = optarg;
923 break; 981 break;
@@ -933,16 +991,38 @@ main(int ac, char **av)
933 av += optind; 991 av += optind;
934 992
935 if (ac > 0 && !host) { 993 if (ac > 0 && !host) {
936 if (strrchr(*av, '@')) { 994 int tport;
995 char *tuser;
996 switch (parse_ssh_uri(*av, &tuser, &host, &tport)) {
997 case -1:
998 usage();
999 break;
1000 case 0:
1001 if (options.user == NULL) {
1002 options.user = tuser;
1003 tuser = NULL;
1004 }
1005 free(tuser);
1006 if (options.port == -1 && tport != -1)
1007 options.port = tport;
1008 break;
1009 default:
937 p = xstrdup(*av); 1010 p = xstrdup(*av);
938 cp = strrchr(p, '@'); 1011 cp = strrchr(p, '@');
939 if (cp == NULL || cp == p) 1012 if (cp != NULL) {
940 usage(); 1013 if (cp == p)
941 options.user = p; 1014 usage();
942 *cp = '\0'; 1015 if (options.user == NULL) {
943 host = xstrdup(++cp); 1016 options.user = p;
944 } else 1017 p = NULL;
945 host = xstrdup(*av); 1018 }
1019 *cp++ = '\0';
1020 host = xstrdup(cp);
1021 free(p);
1022 } else
1023 host = p;
1024 break;
1025 }
946 if (ac > 1 && !opt_terminated) { 1026 if (ac > 1 && !opt_terminated) {
947 optind = optreset = 1; 1027 optind = optreset = 1;
948 goto again; 1028 goto again;
@@ -994,9 +1074,9 @@ main(int ac, char **av)
994 if (logfile != NULL) 1074 if (logfile != NULL)
995 log_redirect_stderr_to(logfile); 1075 log_redirect_stderr_to(logfile);
996 log_init(argv0, 1076 log_init(argv0,
997 options.log_level == SYSLOG_LEVEL_NOT_SET ? 1077 options.log_level == SYSLOG_LEVEL_NOT_SET ?
998 SYSLOG_LEVEL_INFO : options.log_level, 1078 SYSLOG_LEVEL_INFO : options.log_level,
999 options.log_facility == SYSLOG_FACILITY_NOT_SET ? 1079 options.log_facility == SYSLOG_FACILITY_NOT_SET ?
1000 SYSLOG_FACILITY_USER : options.log_facility, 1080 SYSLOG_FACILITY_USER : options.log_facility,
1001 !use_syslog); 1081 !use_syslog);
1002 1082
@@ -1026,16 +1106,22 @@ main(int ac, char **av)
1026 options.hostname = xstrdup(host); 1106 options.hostname = xstrdup(host);
1027 } 1107 }
1028 1108
1029 /* If canonicalization requested then try to apply it */ 1109 /* Don't lowercase addresses, they will be explicitly canonicalised */
1030 lowercase(host); 1110 if ((was_addr = is_addr(host)) == 0)
1031 if (options.canonicalize_hostname != SSH_CANONICALISE_NO) 1111 lowercase(host);
1112
1113 /*
1114 * Try to canonicalize if requested by configuration or the
1115 * hostname is an address.
1116 */
1117 if (options.canonicalize_hostname != SSH_CANONICALISE_NO || was_addr)
1032 addrs = resolve_canonicalize(&host, options.port); 1118 addrs = resolve_canonicalize(&host, options.port);
1033 1119
1034 /* 1120 /*
1035 * If CanonicalizePermittedCNAMEs have been specified but 1121 * If CanonicalizePermittedCNAMEs have been specified but
1036 * other canonicalization did not happen (by not being requested 1122 * other canonicalization did not happen (by not being requested
1037 * or by failing with fallback) then the hostname may still be changed 1123 * or by failing with fallback) then the hostname may still be changed
1038 * as a result of CNAME following. 1124 * as a result of CNAME following.
1039 * 1125 *
1040 * Try to resolve the bare hostname name using the system resolver's 1126 * Try to resolve the bare hostname name using the system resolver's
1041 * usual search rules and then apply the CNAME follow rules. 1127 * usual search rules and then apply the CNAME follow rules.
@@ -1177,6 +1263,7 @@ main(int ac, char **av)
1177 if (options.user == NULL) 1263 if (options.user == NULL)
1178 options.user = xstrdup(pw->pw_name); 1264 options.user = xstrdup(pw->pw_name);
1179 1265
1266 /* Set up strings used to percent_expand() arguments */
1180 if (gethostname(thishost, sizeof(thishost)) == -1) 1267 if (gethostname(thishost, sizeof(thishost)) == -1)
1181 fatal("gethostname: %s", strerror(errno)); 1268 fatal("gethostname: %s", strerror(errno));
1182 strlcpy(shorthost, thishost, sizeof(shorthost)); 1269 strlcpy(shorthost, thishost, sizeof(shorthost));
@@ -1194,24 +1281,11 @@ main(int ac, char **av)
1194 ssh_digest_free(md); 1281 ssh_digest_free(md);
1195 conn_hash_hex = tohex(conn_hash, ssh_digest_bytes(SSH_DIGEST_SHA1)); 1282 conn_hash_hex = tohex(conn_hash, ssh_digest_bytes(SSH_DIGEST_SHA1));
1196 1283
1197 if (options.local_command != NULL) { 1284 /*
1198 debug3("expanding LocalCommand: %s", options.local_command); 1285 * Expand tokens in arguments. NB. LocalCommand is expanded later,
1199 cp = options.local_command; 1286 * after port-forwarding is set up, so it may pick up any local
1200 options.local_command = percent_expand(cp, 1287 * tunnel interface name allocated.
1201 "C", conn_hash_hex, 1288 */
1202 "L", shorthost,
1203 "d", pw->pw_dir,
1204 "h", host,
1205 "l", thishost,
1206 "n", host_arg,
1207 "p", portstr,
1208 "r", options.user,
1209 "u", pw->pw_name,
1210 (char *)NULL);
1211 debug3("expanded LocalCommand: %s", options.local_command);
1212 free(cp);
1213 }
1214
1215 if (options.remote_command != NULL) { 1289 if (options.remote_command != NULL) {
1216 debug3("expanding RemoteCommand: %s", options.remote_command); 1290 debug3("expanding RemoteCommand: %s", options.remote_command);
1217 cp = options.remote_command; 1291 cp = options.remote_command;
@@ -1230,7 +1304,6 @@ main(int ac, char **av)
1230 free(cp); 1304 free(cp);
1231 buffer_append(&command, options.remote_command, 1305 buffer_append(&command, options.remote_command,
1232 strlen(options.remote_command)); 1306 strlen(options.remote_command));
1233
1234 } 1307 }
1235 1308
1236 if (options.control_path != NULL) { 1309 if (options.control_path != NULL) {
@@ -1311,7 +1384,7 @@ main(int ac, char **av)
1311 sensitive_data.keys = NULL; 1384 sensitive_data.keys = NULL;
1312 sensitive_data.external_keysign = 0; 1385 sensitive_data.external_keysign = 0;
1313 if (options.hostbased_authentication) { 1386 if (options.hostbased_authentication) {
1314 sensitive_data.nkeys = 9; 1387 sensitive_data.nkeys = 11;
1315 sensitive_data.keys = xcalloc(sensitive_data.nkeys, 1388 sensitive_data.keys = xcalloc(sensitive_data.nkeys,
1316 sizeof(struct sshkey)); /* XXX */ 1389 sizeof(struct sshkey)); /* XXX */
1317 for (i = 0; i < sensitive_data.nkeys; i++) 1390 for (i = 0; i < sensitive_data.nkeys; i++)
@@ -1338,6 +1411,10 @@ main(int ac, char **av)
1338 _PATH_HOST_RSA_KEY_FILE, "", NULL, NULL); 1411 _PATH_HOST_RSA_KEY_FILE, "", NULL, NULL);
1339 sensitive_data.keys[8] = key_load_private_type(KEY_DSA, 1412 sensitive_data.keys[8] = key_load_private_type(KEY_DSA,
1340 _PATH_HOST_DSA_KEY_FILE, "", NULL, NULL); 1413 _PATH_HOST_DSA_KEY_FILE, "", NULL, NULL);
1414 sensitive_data.keys[9] = key_load_private_cert(KEY_XMSS,
1415 _PATH_HOST_XMSS_KEY_FILE, "", NULL);
1416 sensitive_data.keys[10] = key_load_private_type(KEY_XMSS,
1417 _PATH_HOST_XMSS_KEY_FILE, "", NULL, NULL);
1341 PRIV_END; 1418 PRIV_END;
1342 1419
1343 if (options.hostbased_authentication == 1 && 1420 if (options.hostbased_authentication == 1 &&
@@ -1345,7 +1422,8 @@ main(int ac, char **av)
1345 sensitive_data.keys[5] == NULL && 1422 sensitive_data.keys[5] == NULL &&
1346 sensitive_data.keys[6] == NULL && 1423 sensitive_data.keys[6] == NULL &&
1347 sensitive_data.keys[7] == NULL && 1424 sensitive_data.keys[7] == NULL &&
1348 sensitive_data.keys[8] == NULL) { 1425 sensitive_data.keys[8] == NULL &&
1426 sensitive_data.keys[9] == NULL) {
1349#ifdef OPENSSL_HAS_ECC 1427#ifdef OPENSSL_HAS_ECC
1350 sensitive_data.keys[1] = key_load_cert( 1428 sensitive_data.keys[1] = key_load_cert(
1351 _PATH_HOST_ECDSA_KEY_FILE); 1429 _PATH_HOST_ECDSA_KEY_FILE);
@@ -1366,6 +1444,10 @@ main(int ac, char **av)
1366 _PATH_HOST_RSA_KEY_FILE, NULL); 1444 _PATH_HOST_RSA_KEY_FILE, NULL);
1367 sensitive_data.keys[8] = key_load_public( 1445 sensitive_data.keys[8] = key_load_public(
1368 _PATH_HOST_DSA_KEY_FILE, NULL); 1446 _PATH_HOST_DSA_KEY_FILE, NULL);
1447 sensitive_data.keys[9] = key_load_cert(
1448 _PATH_HOST_XMSS_KEY_FILE);
1449 sensitive_data.keys[10] = key_load_public(
1450 _PATH_HOST_XMSS_KEY_FILE, NULL);
1369 sensitive_data.external_keysign = 1; 1451 sensitive_data.external_keysign = 1;
1370 } 1452 }
1371 } 1453 }
@@ -1401,7 +1483,7 @@ main(int ac, char **av)
1401 } 1483 }
1402 } 1484 }
1403 /* load options.identity_files */ 1485 /* load options.identity_files */
1404 load_public_identity_files(); 1486 load_public_identity_files(pw);
1405 1487
1406 /* optionally set the SSH_AUTHSOCKET_ENV_NAME varibale */ 1488 /* optionally set the SSH_AUTHSOCKET_ENV_NAME varibale */
1407 if (options.identity_agent && 1489 if (options.identity_agent &&
@@ -1465,7 +1547,7 @@ main(int ac, char **av)
1465 } 1547 }
1466 1548
1467 skip_connect: 1549 skip_connect:
1468 exit_status = ssh_session2(ssh); 1550 exit_status = ssh_session2(ssh, pw);
1469 packet_close(); 1551 packet_close();
1470 1552
1471 if (options.control_path != NULL && muxserver_sock != -1) 1553 if (options.control_path != NULL && muxserver_sock != -1)
@@ -1485,29 +1567,29 @@ control_persist_detach(void)
1485 1567
1486 debug("%s: backgrounding master process", __func__); 1568 debug("%s: backgrounding master process", __func__);
1487 1569
1488 /* 1570 /*
1489 * master (current process) into the background, and make the 1571 * master (current process) into the background, and make the
1490 * foreground process a client of the backgrounded master. 1572 * foreground process a client of the backgrounded master.
1491 */ 1573 */
1492 switch ((pid = fork())) { 1574 switch ((pid = fork())) {
1493 case -1: 1575 case -1:
1494 fatal("%s: fork: %s", __func__, strerror(errno)); 1576 fatal("%s: fork: %s", __func__, strerror(errno));
1495 case 0: 1577 case 0:
1496 /* Child: master process continues mainloop */ 1578 /* Child: master process continues mainloop */
1497 break; 1579 break;
1498 default: 1580 default:
1499 /* Parent: set up mux slave to connect to backgrounded master */ 1581 /* Parent: set up mux slave to connect to backgrounded master */
1500 debug2("%s: background process is %ld", __func__, (long)pid); 1582 debug2("%s: background process is %ld", __func__, (long)pid);
1501 stdin_null_flag = ostdin_null_flag; 1583 stdin_null_flag = ostdin_null_flag;
1502 options.request_tty = orequest_tty; 1584 options.request_tty = orequest_tty;
1503 tty_flag = otty_flag; 1585 tty_flag = otty_flag;
1504 close(muxserver_sock); 1586 close(muxserver_sock);
1505 muxserver_sock = -1; 1587 muxserver_sock = -1;
1506 options.control_master = SSHCTL_MASTER_NO; 1588 options.control_master = SSHCTL_MASTER_NO;
1507 muxclient(options.control_path); 1589 muxclient(options.control_path);
1508 /* muxclient() doesn't return on success. */ 1590 /* muxclient() doesn't return on success. */
1509 fatal("Failed to connect to new control master"); 1591 fatal("Failed to connect to new control master");
1510 } 1592 }
1511 if ((devnull = open(_PATH_DEVNULL, O_RDWR)) == -1) { 1593 if ((devnull = open(_PATH_DEVNULL, O_RDWR)) == -1) {
1512 error("%s: open(\"/dev/null\"): %s", __func__, 1594 error("%s: open(\"/dev/null\"): %s", __func__,
1513 strerror(errno)); 1595 strerror(errno));
@@ -1562,7 +1644,7 @@ ssh_confirm_remote_forward(struct ssh *ssh, int type, u_int32_t seq, void *ctxt)
1562 channel_update_permitted_opens(ssh, rfwd->handle, -1); 1644 channel_update_permitted_opens(ssh, rfwd->handle, -1);
1563 } 1645 }
1564 } 1646 }
1565 1647
1566 if (type == SSH2_MSG_REQUEST_FAILURE) { 1648 if (type == SSH2_MSG_REQUEST_FAILURE) {
1567 if (options.exit_on_forward_failure) { 1649 if (options.exit_on_forward_failure) {
1568 if (rfwd->listen_path != NULL) 1650 if (rfwd->listen_path != NULL)
@@ -1624,7 +1706,7 @@ ssh_init_stdio_forwarding(struct ssh *ssh)
1624} 1706}
1625 1707
1626static void 1708static void
1627ssh_init_forwarding(struct ssh *ssh) 1709ssh_init_forwarding(struct ssh *ssh, char **ifname)
1628{ 1710{
1629 int success = 0; 1711 int success = 0;
1630 int i; 1712 int i;
@@ -1682,14 +1764,15 @@ ssh_init_forwarding(struct ssh *ssh)
1682 1764
1683 /* Initiate tunnel forwarding. */ 1765 /* Initiate tunnel forwarding. */
1684 if (options.tun_open != SSH_TUNMODE_NO) { 1766 if (options.tun_open != SSH_TUNMODE_NO) {
1685 if (client_request_tun_fwd(ssh, options.tun_open, 1767 if ((*ifname = client_request_tun_fwd(ssh,
1686 options.tun_local, options.tun_remote) == -1) { 1768 options.tun_open, options.tun_local,
1769 options.tun_remote)) == NULL) {
1687 if (options.exit_on_forward_failure) 1770 if (options.exit_on_forward_failure)
1688 fatal("Could not request tunnel forwarding."); 1771 fatal("Could not request tunnel forwarding.");
1689 else 1772 else
1690 error("Could not request tunnel forwarding."); 1773 error("Could not request tunnel forwarding.");
1691 } 1774 }
1692 } 1775 }
1693} 1776}
1694 1777
1695static void 1778static void
@@ -1798,20 +1881,41 @@ ssh_session2_open(struct ssh *ssh)
1798} 1881}
1799 1882
1800static int 1883static int
1801ssh_session2(struct ssh *ssh) 1884ssh_session2(struct ssh *ssh, struct passwd *pw)
1802{ 1885{
1803 int id = -1; 1886 int devnull, id = -1;
1887 char *cp, *tun_fwd_ifname = NULL;
1804 1888
1805 /* XXX should be pre-session */ 1889 /* XXX should be pre-session */
1806 if (!options.control_persist) 1890 if (!options.control_persist)
1807 ssh_init_stdio_forwarding(ssh); 1891 ssh_init_stdio_forwarding(ssh);
1808 ssh_init_forwarding(ssh); 1892
1893 ssh_init_forwarding(ssh, &tun_fwd_ifname);
1894
1895 if (options.local_command != NULL) {
1896 debug3("expanding LocalCommand: %s", options.local_command);
1897 cp = options.local_command;
1898 options.local_command = percent_expand(cp,
1899 "C", conn_hash_hex,
1900 "L", shorthost,
1901 "d", pw->pw_dir,
1902 "h", host,
1903 "l", thishost,
1904 "n", host_arg,
1905 "p", portstr,
1906 "r", options.user,
1907 "u", pw->pw_name,
1908 "T", tun_fwd_ifname == NULL ? "NONE" : tun_fwd_ifname,
1909 (char *)NULL);
1910 debug3("expanded LocalCommand: %s", options.local_command);
1911 free(cp);
1912 }
1809 1913
1810 /* Start listening for multiplex clients */ 1914 /* Start listening for multiplex clients */
1811 if (!packet_get_mux()) 1915 if (!packet_get_mux())
1812 muxserver_listen(ssh); 1916 muxserver_listen(ssh);
1813 1917
1814 /* 1918 /*
1815 * If we are in control persist mode and have a working mux listen 1919 * If we are in control persist mode and have a working mux listen
1816 * socket, then prepare to background ourselves and have a foreground 1920 * socket, then prepare to background ourselves and have a foreground
1817 * client attach as a control slave. 1921 * client attach as a control slave.
@@ -1820,18 +1924,18 @@ ssh_session2(struct ssh *ssh)
1820 * after the connection is fully established (in particular, 1924 * after the connection is fully established (in particular,
1821 * async rfwd replies have been received for ExitOnForwardFailure). 1925 * async rfwd replies have been received for ExitOnForwardFailure).
1822 */ 1926 */
1823 if (options.control_persist && muxserver_sock != -1) { 1927 if (options.control_persist && muxserver_sock != -1) {
1824 ostdin_null_flag = stdin_null_flag; 1928 ostdin_null_flag = stdin_null_flag;
1825 ono_shell_flag = no_shell_flag; 1929 ono_shell_flag = no_shell_flag;
1826 orequest_tty = options.request_tty; 1930 orequest_tty = options.request_tty;
1827 otty_flag = tty_flag; 1931 otty_flag = tty_flag;
1828 stdin_null_flag = 1; 1932 stdin_null_flag = 1;
1829 no_shell_flag = 1; 1933 no_shell_flag = 1;
1830 tty_flag = 0; 1934 tty_flag = 0;
1831 if (!fork_after_authentication_flag) 1935 if (!fork_after_authentication_flag)
1832 need_controlpersist_detach = 1; 1936 need_controlpersist_detach = 1;
1833 fork_after_authentication_flag = 1; 1937 fork_after_authentication_flag = 1;
1834 } 1938 }
1835 /* 1939 /*
1836 * ControlPersist mux listen socket setup failed, attempt the 1940 * ControlPersist mux listen socket setup failed, attempt the
1837 * stdio forward setup that we skipped earlier. 1941 * stdio forward setup that we skipped earlier.
@@ -1839,7 +1943,7 @@ ssh_session2(struct ssh *ssh)
1839 if (options.control_persist && muxserver_sock == -1) 1943 if (options.control_persist && muxserver_sock == -1)
1840 ssh_init_stdio_forwarding(ssh); 1944 ssh_init_stdio_forwarding(ssh);
1841 1945
1842 if (!no_shell_flag || (datafellows & SSH_BUG_DUMMYCHAN)) 1946 if (!no_shell_flag)
1843 id = ssh_session2_open(ssh); 1947 id = ssh_session2_open(ssh);
1844 else { 1948 else {
1845 packet_set_interactive( 1949 packet_set_interactive(
@@ -1863,6 +1967,22 @@ ssh_session2(struct ssh *ssh)
1863 ssh_local_cmd(options.local_command); 1967 ssh_local_cmd(options.local_command);
1864 1968
1865 /* 1969 /*
1970 * stdout is now owned by the session channel; clobber it here
1971 * so future channel closes are propagated to the local fd.
1972 * NB. this can only happen after LocalCommand has completed,
1973 * as it may want to write to stdout.
1974 */
1975 if (!need_controlpersist_detach) {
1976 if ((devnull = open(_PATH_DEVNULL, O_WRONLY)) == -1)
1977 error("%s: open %s: %s", __func__,
1978 _PATH_DEVNULL, strerror(errno));
1979 if (dup2(devnull, STDOUT_FILENO) < 0)
1980 fatal("%s: dup2() stdout failed", __func__);
1981 if (devnull > STDERR_FILENO)
1982 close(devnull);
1983 }
1984
1985 /*
1866 * If requested and we are not interested in replies to remote 1986 * If requested and we are not interested in replies to remote
1867 * forwarding requests, then let ssh continue in the background. 1987 * forwarding requests, then let ssh continue in the background.
1868 */ 1988 */
@@ -1881,12 +2001,10 @@ ssh_session2(struct ssh *ssh)
1881 2001
1882/* Loads all IdentityFile and CertificateFile keys */ 2002/* Loads all IdentityFile and CertificateFile keys */
1883static void 2003static void
1884load_public_identity_files(void) 2004load_public_identity_files(struct passwd *pw)
1885{ 2005{
1886 char *filename, *cp, thishost[NI_MAXHOST]; 2006 char *filename, *cp;
1887 char *pwdir = NULL, *pwname = NULL;
1888 struct sshkey *public; 2007 struct sshkey *public;
1889 struct passwd *pw;
1890 int i; 2008 int i;
1891 u_int n_ids, n_certs; 2009 u_int n_ids, n_certs;
1892 char *identity_files[SSH_MAX_IDENTITY_FILES]; 2010 char *identity_files[SSH_MAX_IDENTITY_FILES];
@@ -1925,11 +2043,6 @@ load_public_identity_files(void)
1925#endif /* ENABLE_PKCS11 */ 2043#endif /* ENABLE_PKCS11 */
1926 if ((pw = getpwuid(original_real_uid)) == NULL) 2044 if ((pw = getpwuid(original_real_uid)) == NULL)
1927 fatal("load_public_identity_files: getpwuid failed"); 2045 fatal("load_public_identity_files: getpwuid failed");
1928 pwname = xstrdup(pw->pw_name);
1929 pwdir = xstrdup(pw->pw_dir);
1930 if (gethostname(thishost, sizeof(thishost)) == -1)
1931 fatal("load_public_identity_files: gethostname: %s",
1932 strerror(errno));
1933 for (i = 0; i < options.num_identity_files; i++) { 2046 for (i = 0; i < options.num_identity_files; i++) {
1934 if (n_ids >= SSH_MAX_IDENTITY_FILES || 2047 if (n_ids >= SSH_MAX_IDENTITY_FILES ||
1935 strcasecmp(options.identity_files[i], "none") == 0) { 2048 strcasecmp(options.identity_files[i], "none") == 0) {
@@ -1939,8 +2052,8 @@ load_public_identity_files(void)
1939 } 2052 }
1940 cp = tilde_expand_filename(options.identity_files[i], 2053 cp = tilde_expand_filename(options.identity_files[i],
1941 original_real_uid); 2054 original_real_uid);
1942 filename = percent_expand(cp, "d", pwdir, 2055 filename = percent_expand(cp, "d", pw->pw_dir,
1943 "u", pwname, "l", thishost, "h", host, 2056 "u", pw->pw_name, "l", thishost, "h", host,
1944 "r", options.user, (char *)NULL); 2057 "r", options.user, (char *)NULL);
1945 free(cp); 2058 free(cp);
1946 public = key_load_public(filename, NULL); 2059 public = key_load_public(filename, NULL);
@@ -1985,8 +2098,8 @@ load_public_identity_files(void)
1985 for (i = 0; i < options.num_certificate_files; i++) { 2098 for (i = 0; i < options.num_certificate_files; i++) {
1986 cp = tilde_expand_filename(options.certificate_files[i], 2099 cp = tilde_expand_filename(options.certificate_files[i],
1987 original_real_uid); 2100 original_real_uid);
1988 filename = percent_expand(cp, "d", pwdir, 2101 filename = percent_expand(cp, "d", pw->pw_dir,
1989 "u", pwname, "l", thishost, "h", host, 2102 "u", pw->pw_name, "l", thishost, "h", host,
1990 "r", options.user, (char *)NULL); 2103 "r", options.user, (char *)NULL);
1991 free(cp); 2104 free(cp);
1992 2105
@@ -2019,11 +2132,6 @@ load_public_identity_files(void)
2019 memcpy(options.certificate_files, 2132 memcpy(options.certificate_files,
2020 certificate_files, sizeof(certificate_files)); 2133 certificate_files, sizeof(certificate_files));
2021 memcpy(options.certificates, certificates, sizeof(certificates)); 2134 memcpy(options.certificates, certificates, sizeof(certificates));
2022
2023 explicit_bzero(pwname, strlen(pwname));
2024 free(pwname);
2025 explicit_bzero(pwdir, strlen(pwdir));
2026 free(pwdir);
2027} 2135}
2028 2136
2029static void 2137static void
@@ -2036,7 +2144,5 @@ main_sigchld_handler(int sig)
2036 while ((pid = waitpid(-1, &status, WNOHANG)) > 0 || 2144 while ((pid = waitpid(-1, &status, WNOHANG)) > 0 ||
2037 (pid < 0 && errno == EINTR)) 2145 (pid < 0 && errno == EINTR))
2038 ; 2146 ;
2039
2040 signal(sig, main_sigchld_handler);
2041 errno = save_errno; 2147 errno = save_errno;
2042} 2148}
diff --git a/ssh_config.0 b/ssh_config.0
index 9493953ab..4109b1909 100644
--- a/ssh_config.0
+++ b/ssh_config.0
@@ -112,6 +112,11 @@ DESCRIPTION
112 one address. Note that this option does not work if 112 one address. Note that this option does not work if
113 UsePrivilegedPort is set to yes. 113 UsePrivilegedPort is set to yes.
114 114
115 BindInterface
116 Use the address of the specified interface on the local machine
117 as the source address of the connection. Note that this option
118 does not work if UsePrivilegedPort is set to yes.
119
115 CanonicalDomains 120 CanonicalDomains
116 When CanonicalizeHostname is enabled, this option specifies the 121 When CanonicalizeHostname is enabled, this option specifies the
117 list of domain suffixes in which to search for the specified 122 list of domain suffixes in which to search for the specified
@@ -583,7 +588,10 @@ DESCRIPTION
583 curve25519-sha256,curve25519-sha256@libssh.org, 588 curve25519-sha256,curve25519-sha256@libssh.org,
584 ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521, 589 ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,
585 diffie-hellman-group-exchange-sha256, 590 diffie-hellman-group-exchange-sha256,
591 diffie-hellman-group16-sha512,
592 diffie-hellman-group18-sha512,
586 diffie-hellman-group-exchange-sha1, 593 diffie-hellman-group-exchange-sha1,
594 diffie-hellman-group14-sha256,
587 diffie-hellman-group14-sha1 595 diffie-hellman-group14-sha1
588 596
589 The list of available key exchange algorithms may also be 597 The list of available key exchange algorithms may also be
@@ -652,12 +660,8 @@ DESCRIPTION
652 "ssh -Q mac". 660 "ssh -Q mac".
653 661
654 NoHostAuthenticationForLocalhost 662 NoHostAuthenticationForLocalhost
655 This option can be used if the home directory is shared across 663 Disable host authentication for localhost (loopback addresses).
656 machines. In this case localhost will refer to a different 664 The argument to this keyword must be yes or no (the default).
657 machine on each of the machines and the user will get many
658 warnings about changed host keys. However, this option disables
659 host authentication for localhost. The argument to this keyword
660 must be yes or no (the default).
661 665
662 NumberOfPasswordPrompts 666 NumberOfPasswordPrompts
663 Specifies the number of password prompts before giving up. The 667 Specifies the number of password prompts before giving up. The
@@ -713,12 +717,12 @@ DESCRIPTION
713 ProxyCommand /usr/bin/nc -X connect -x 192.0.2.0:8080 %h %p 717 ProxyCommand /usr/bin/nc -X connect -x 192.0.2.0:8080 %h %p
714 718
715 ProxyJump 719 ProxyJump
716 Specifies one or more jump proxies as [user@]host[:port]. 720 Specifies one or more jump proxies as either [user@]host[:port]
717 Multiple proxies may be separated by comma characters and will be 721 or an ssh URI. Multiple proxies may be separated by comma
718 visited sequentially. Setting this option will cause ssh(1) to 722 characters and will be visited sequentially. Setting this option
719 connect to the target host by first making a ssh(1) connection to 723 will cause ssh(1) to connect to the target host by first making a
720 the specified ProxyJump host and then establishing a TCP 724 ssh(1) connection to the specified ProxyJump host and then
721 forwarding to the ultimate target from there. 725 establishing a TCP forwarding to the ultimate target from there.
722 726
723 Note that this option will compete with the ProxyCommand option - 727 Note that this option will compete with the ProxyCommand option -
724 whichever is specified first will prevent later instances of the 728 whichever is specified first will prevent later instances of the
@@ -883,8 +887,8 @@ DESCRIPTION
883 If this flag is set to yes, ssh(1) will never automatically add 887 If this flag is set to yes, ssh(1) will never automatically add
884 host keys to the ~/.ssh/known_hosts file, and refuses to connect 888 host keys to the ~/.ssh/known_hosts file, and refuses to connect
885 to hosts whose host key has changed. This provides maximum 889 to hosts whose host key has changed. This provides maximum
886 protection against trojan horse attacks, though it can be 890 protection against man-in-the-middle (MITM) attacks, though it
887 annoying when the /etc/ssh/ssh_known_hosts file is poorly 891 can be annoying when the /etc/ssh/ssh_known_hosts file is poorly
888 maintained or when connections to new hosts are frequently made. 892 maintained or when connections to new hosts are frequently made.
889 This option forces the user to manually add all new hosts. 893 This option forces the user to manually add all new hosts.
890 894
@@ -918,6 +922,7 @@ DESCRIPTION
918 dies. This is important in scripts, and many users want it too. 922 dies. This is important in scripts, and many users want it too.
919 923
920 To disable TCP keepalive messages, the value should be set to no. 924 To disable TCP keepalive messages, the value should be set to no.
925 See also ServerAliveInterval for protocol-level keepalives.
921 926
922 Tunnel Request tun(4) device forwarding between the client and the 927 Tunnel Request tun(4) device forwarding between the client and the
923 server. The argument must be yes, point-to-point (layer 3), 928 server. The argument must be yes, point-to-point (layer 3),
@@ -1012,12 +1017,23 @@ PATTERNS
1012 1017
1013 from="!*.dialup.example.com,*.example.com" 1018 from="!*.dialup.example.com,*.example.com"
1014 1019
1020 Note that a negated match will never produce a positive result by itself.
1021 For example, attempting to match "host3" against the following pattern-
1022 list will fail:
1023
1024 from="!host1,!host2"
1025
1026 The solution here is to include a term that will yield a positive match,
1027 such as a wildcard:
1028
1029 from="!host1,!host2,*"
1030
1015TOKENS 1031TOKENS
1016 Arguments to some keywords can make use of tokens, which are expanded at 1032 Arguments to some keywords can make use of tokens, which are expanded at
1017 runtime: 1033 runtime:
1018 1034
1019 %% A literal M-bM-^@M-^X%M-bM-^@M-^Y. 1035 %% A literal M-bM-^@M-^X%M-bM-^@M-^Y.
1020 %C Shorthand for %l%h%p%r. 1036 %C Hash of %l%h%p%r.
1021 %d Local user's home directory. 1037 %d Local user's home directory.
1022 %h The remote hostname. 1038 %h The remote hostname.
1023 %i The local user ID. 1039 %i The local user ID.
@@ -1026,6 +1042,8 @@ TOKENS
1026 %n The original remote hostname, as given on the command line. 1042 %n The original remote hostname, as given on the command line.
1027 %p The remote port. 1043 %p The remote port.
1028 %r The remote username. 1044 %r The remote username.
1045 %T The local tun(4) or tap(4) network interface assigned if
1046 tunnel forwarding was requested, or "NONE" otherwise.
1029 %u The local username. 1047 %u The local username.
1030 1048
1031 Match exec accepts the tokens %%, %h, %L, %l, %n, %p, %r, and %u. 1049 Match exec accepts the tokens %%, %h, %L, %l, %n, %p, %r, and %u.
@@ -1040,7 +1058,8 @@ TOKENS
1040 IdentityAgent and IdentityFile accept the tokens %%, %d, %h, %l, %r, and 1058 IdentityAgent and IdentityFile accept the tokens %%, %d, %h, %l, %r, and
1041 %u. 1059 %u.
1042 1060
1043 LocalCommand accepts the tokens %%, %C, %d, %h, %l, %n, %p, %r, and %u. 1061 LocalCommand accepts the tokens %%, %C, %d, %h, %l, %n, %p, %r, %T, and
1062 %u.
1044 1063
1045 ProxyCommand accepts the tokens %%, %h, %p, and %r. 1064 ProxyCommand accepts the tokens %%, %h, %p, and %r.
1046 1065
@@ -1070,4 +1089,4 @@ AUTHORS
1070 created OpenSSH. Markus Friedl contributed the support for SSH protocol 1089 created OpenSSH. Markus Friedl contributed the support for SSH protocol
1071 versions 1.5 and 2.0. 1090 versions 1.5 and 2.0.
1072 1091
1073OpenBSD 6.2 September 21, 2017 OpenBSD 6.2 1092OpenBSD 6.2 February 23, 2018 OpenBSD 6.2
diff --git a/ssh_config.5 b/ssh_config.5
index 2da7029af..ed6e5d026 100644
--- a/ssh_config.5
+++ b/ssh_config.5
@@ -33,8 +33,8 @@
33.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 33.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
34.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35.\" 35.\"
36.\" $OpenBSD: ssh_config.5,v 1.256 2017/09/21 19:16:53 markus Exp $ 36.\" $OpenBSD: ssh_config.5,v 1.268 2018/02/23 07:38:09 jmc Exp $
37.Dd $Mdocdate: September 21 2017 $ 37.Dd $Mdocdate: February 23 2018 $
38.Dt SSH_CONFIG 5 38.Dt SSH_CONFIG 5
39.Os 39.Os
40.Sh NAME 40.Sh NAME
@@ -282,6 +282,13 @@ Note that this option does not work if
282.Cm UsePrivilegedPort 282.Cm UsePrivilegedPort
283is set to 283is set to
284.Cm yes . 284.Cm yes .
285.It Cm BindInterface
286Use the address of the specified interface on the local machine as the
287source address of the connection.
288Note that this option does not work if
289.Cm UsePrivilegedPort
290is set to
291.Cm yes .
285.It Cm CanonicalDomains 292.It Cm CanonicalDomains
286When 293When
287.Cm CanonicalizeHostname 294.Cm CanonicalizeHostname
@@ -1071,7 +1078,10 @@ The default is:
1071curve25519-sha256,curve25519-sha256@libssh.org, 1078curve25519-sha256,curve25519-sha256@libssh.org,
1072ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521, 1079ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,
1073diffie-hellman-group-exchange-sha256, 1080diffie-hellman-group-exchange-sha256,
1081diffie-hellman-group16-sha512,
1082diffie-hellman-group18-sha512,
1074diffie-hellman-group-exchange-sha1, 1083diffie-hellman-group-exchange-sha1,
1084diffie-hellman-group14-sha256,
1075diffie-hellman-group14-sha1 1085diffie-hellman-group14-sha1
1076.Ed 1086.Ed
1077.Pp 1087.Pp
@@ -1163,10 +1173,7 @@ hmac-sha2-256,hmac-sha2-512,hmac-sha1
1163The list of available MAC algorithms may also be obtained using 1173The list of available MAC algorithms may also be obtained using
1164.Qq ssh -Q mac . 1174.Qq ssh -Q mac .
1165.It Cm NoHostAuthenticationForLocalhost 1175.It Cm NoHostAuthenticationForLocalhost
1166This option can be used if the home directory is shared across machines. 1176Disable host authentication for localhost (loopback addresses).
1167In this case localhost will refer to a different machine on each of
1168the machines and the user will get many warnings about changed host keys.
1169However, this option disables host authentication for localhost.
1170The argument to this keyword must be 1177The argument to this keyword must be
1171.Cm yes 1178.Cm yes
1172or 1179or
@@ -1254,13 +1261,14 @@ For example, the following directive would connect via an HTTP proxy at
1254ProxyCommand /usr/bin/nc -X connect -x 192.0.2.0:8080 %h %p 1261ProxyCommand /usr/bin/nc -X connect -x 192.0.2.0:8080 %h %p
1255.Ed 1262.Ed
1256.It Cm ProxyJump 1263.It Cm ProxyJump
1257Specifies one or more jump proxies as 1264Specifies one or more jump proxies as either
1258.Xo 1265.Xo
1259.Sm off 1266.Sm off
1260.Op Ar user No @ 1267.Op Ar user No @
1261.Ar host 1268.Ar host
1262.Op : Ns Ar port 1269.Op : Ns Ar port
1263.Sm on 1270.Sm on
1271or an ssh URI
1264.Xc . 1272.Xc .
1265Multiple proxies may be separated by comma characters and will be visited 1273Multiple proxies may be separated by comma characters and will be visited
1266sequentially. 1274sequentially.
@@ -1520,7 +1528,7 @@ If this flag is set to
1520will never automatically add host keys to the 1528will never automatically add host keys to the
1521.Pa ~/.ssh/known_hosts 1529.Pa ~/.ssh/known_hosts
1522file, and refuses to connect to hosts whose host key has changed. 1530file, and refuses to connect to hosts whose host key has changed.
1523This provides maximum protection against trojan horse attacks, 1531This provides maximum protection against man-in-the-middle (MITM) attacks,
1524though it can be annoying when the 1532though it can be annoying when the
1525.Pa /etc/ssh/ssh_known_hosts 1533.Pa /etc/ssh/ssh_known_hosts
1526file is poorly maintained or when connections to new hosts are 1534file is poorly maintained or when connections to new hosts are
@@ -1578,6 +1586,9 @@ This is important in scripts, and many users want it too.
1578.Pp 1586.Pp
1579To disable TCP keepalive messages, the value should be set to 1587To disable TCP keepalive messages, the value should be set to
1580.Cm no . 1588.Cm no .
1589See also
1590.Cm ServerAliveInterval
1591for protocol-level keepalives.
1581.It Cm Tunnel 1592.It Cm Tunnel
1582Request 1593Request
1583.Xr tun 4 1594.Xr tun 4
@@ -1743,6 +1754,18 @@ pool,
1743the following entry (in authorized_keys) could be used: 1754the following entry (in authorized_keys) could be used:
1744.Pp 1755.Pp
1745.Dl from=\&"!*.dialup.example.com,*.example.com\&" 1756.Dl from=\&"!*.dialup.example.com,*.example.com\&"
1757.Pp
1758Note that a negated match will never produce a positive result by itself.
1759For example, attempting to match
1760.Qq host3
1761against the following pattern-list will fail:
1762.Pp
1763.Dl from=\&"!host1,!host2\&"
1764.Pp
1765The solution here is to include a term that will yield a positive match,
1766such as a wildcard:
1767.Pp
1768.Dl from=\&"!host1,!host2,*\&"
1746.Sh TOKENS 1769.Sh TOKENS
1747Arguments to some keywords can make use of tokens, 1770Arguments to some keywords can make use of tokens,
1748which are expanded at runtime: 1771which are expanded at runtime:
@@ -1752,7 +1775,7 @@ which are expanded at runtime:
1752A literal 1775A literal
1753.Sq % . 1776.Sq % .
1754.It \&%C 1777.It \&%C
1755Shorthand for %l%h%p%r. 1778Hash of %l%h%p%r.
1756.It %d 1779.It %d
1757Local user's home directory. 1780Local user's home directory.
1758.It %h 1781.It %h
@@ -1769,6 +1792,15 @@ The original remote hostname, as given on the command line.
1769The remote port. 1792The remote port.
1770.It %r 1793.It %r
1771The remote username. 1794The remote username.
1795.It \&%T
1796The local
1797.Xr tun 4
1798or
1799.Xr tap 4
1800network interface assigned if
1801tunnel forwarding was requested, or
1802.Qq NONE
1803otherwise.
1772.It %u 1804.It %u
1773The local username. 1805The local username.
1774.El 1806.El
@@ -1791,7 +1823,7 @@ and
1791accept the tokens %%, %d, %h, %l, %r, and %u. 1823accept the tokens %%, %d, %h, %l, %r, and %u.
1792.Pp 1824.Pp
1793.Cm LocalCommand 1825.Cm LocalCommand
1794accepts the tokens %%, %C, %d, %h, %l, %n, %p, %r, and %u. 1826accepts the tokens %%, %C, %d, %h, %l, %n, %p, %r, %T, and %u.
1795.Pp 1827.Pp
1796.Cm ProxyCommand 1828.Cm ProxyCommand
1797accepts the tokens %%, %h, %p, and %r. 1829accepts the tokens %%, %h, %p, and %r.
diff --git a/sshconnect.c b/sshconnect.c
index 3280b310d..15d8b807e 100644
--- a/sshconnect.c
+++ b/sshconnect.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshconnect.c,v 1.287 2017/09/14 04:32:21 djm Exp $ */ 1/* $OpenBSD: sshconnect.c,v 1.297 2018/02/23 15:58:38 markus Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -23,6 +23,7 @@
23# include <sys/time.h> 23# include <sys/time.h>
24#endif 24#endif
25 25
26#include <net/if.h>
26#include <netinet/in.h> 27#include <netinet/in.h>
27#include <arpa/inet.h> 28#include <arpa/inet.h>
28 29
@@ -43,6 +44,9 @@
43#include <stdlib.h> 44#include <stdlib.h>
44#include <string.h> 45#include <string.h>
45#include <unistd.h> 46#include <unistd.h>
47#ifdef HAVE_IFADDRS_H
48# include <ifaddrs.h>
49#endif
46 50
47#include "xmalloc.h" 51#include "xmalloc.h"
48#include "key.h" 52#include "key.h"
@@ -270,14 +274,83 @@ ssh_kill_proxy_command(void)
270 kill(proxy_command_pid, SIGHUP); 274 kill(proxy_command_pid, SIGHUP);
271} 275}
272 276
277#ifdef HAVE_IFADDRS_H
278/*
279 * Search a interface address list (returned from getifaddrs(3)) for an
280 * address that matches the desired address family on the specifed interface.
281 * Returns 0 and fills in *resultp and *rlenp on success. Returns -1 on failure.
282 */
283static int
284check_ifaddrs(const char *ifname, int af, const struct ifaddrs *ifaddrs,
285 struct sockaddr_storage *resultp, socklen_t *rlenp)
286{
287 struct sockaddr_in6 *sa6;
288 struct sockaddr_in *sa;
289 struct in6_addr *v6addr;
290 const struct ifaddrs *ifa;
291 int allow_local;
292
293 /*
294 * Prefer addresses that are not loopback or linklocal, but use them
295 * if nothing else matches.
296 */
297 for (allow_local = 0; allow_local < 2; allow_local++) {
298 for (ifa = ifaddrs; ifa != NULL; ifa = ifa->ifa_next) {
299 if (ifa->ifa_addr == NULL || ifa->ifa_name == NULL ||
300 (ifa->ifa_flags & IFF_UP) == 0 ||
301 ifa->ifa_addr->sa_family != af ||
302 strcmp(ifa->ifa_name, options.bind_interface) != 0)
303 continue;
304 switch (ifa->ifa_addr->sa_family) {
305 case AF_INET:
306 sa = (struct sockaddr_in *)ifa->ifa_addr;
307 if (!allow_local && sa->sin_addr.s_addr ==
308 htonl(INADDR_LOOPBACK))
309 continue;
310 if (*rlenp < sizeof(struct sockaddr_in)) {
311 error("%s: v4 addr doesn't fit",
312 __func__);
313 return -1;
314 }
315 *rlenp = sizeof(struct sockaddr_in);
316 memcpy(resultp, sa, *rlenp);
317 return 0;
318 case AF_INET6:
319 sa6 = (struct sockaddr_in6 *)ifa->ifa_addr;
320 v6addr = &sa6->sin6_addr;
321 if (!allow_local &&
322 (IN6_IS_ADDR_LINKLOCAL(v6addr) ||
323 IN6_IS_ADDR_LOOPBACK(v6addr)))
324 continue;
325 if (*rlenp < sizeof(struct sockaddr_in6)) {
326 error("%s: v6 addr doesn't fit",
327 __func__);
328 return -1;
329 }
330 *rlenp = sizeof(struct sockaddr_in6);
331 memcpy(resultp, sa6, *rlenp);
332 return 0;
333 }
334 }
335 }
336 return -1;
337}
338#endif
339
273/* 340/*
274 * Creates a (possibly privileged) socket for use as the ssh connection. 341 * Creates a (possibly privileged) socket for use as the ssh connection.
275 */ 342 */
276static int 343static int
277ssh_create_socket(int privileged, struct addrinfo *ai) 344ssh_create_socket(int privileged, struct addrinfo *ai)
278{ 345{
279 int sock, r, gaierr; 346 int sock, r, oerrno;
347 struct sockaddr_storage bindaddr;
348 socklen_t bindaddrlen = 0;
280 struct addrinfo hints, *res = NULL; 349 struct addrinfo hints, *res = NULL;
350#ifdef HAVE_IFADDRS_H
351 struct ifaddrs *ifaddrs = NULL;
352#endif
353 char ntop[NI_MAXHOST];
281 354
282 sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); 355 sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
283 if (sock < 0) { 356 if (sock < 0) {
@@ -287,22 +360,55 @@ ssh_create_socket(int privileged, struct addrinfo *ai)
287 fcntl(sock, F_SETFD, FD_CLOEXEC); 360 fcntl(sock, F_SETFD, FD_CLOEXEC);
288 361
289 /* Bind the socket to an alternative local IP address */ 362 /* Bind the socket to an alternative local IP address */
290 if (options.bind_address == NULL && !privileged) 363 if (options.bind_address == NULL && options.bind_interface == NULL &&
364 !privileged)
291 return sock; 365 return sock;
292 366
293 if (options.bind_address) { 367 if (options.bind_address != NULL) {
294 memset(&hints, 0, sizeof(hints)); 368 memset(&hints, 0, sizeof(hints));
295 hints.ai_family = ai->ai_family; 369 hints.ai_family = ai->ai_family;
296 hints.ai_socktype = ai->ai_socktype; 370 hints.ai_socktype = ai->ai_socktype;
297 hints.ai_protocol = ai->ai_protocol; 371 hints.ai_protocol = ai->ai_protocol;
298 hints.ai_flags = AI_PASSIVE; 372 hints.ai_flags = AI_PASSIVE;
299 gaierr = getaddrinfo(options.bind_address, NULL, &hints, &res); 373 if ((r = getaddrinfo(options.bind_address, NULL,
300 if (gaierr) { 374 &hints, &res)) != 0) {
301 error("getaddrinfo: %s: %s", options.bind_address, 375 error("getaddrinfo: %s: %s", options.bind_address,
302 ssh_gai_strerror(gaierr)); 376 ssh_gai_strerror(r));
303 close(sock); 377 goto fail;
304 return -1; 378 }
379 if (res == NULL) {
380 error("getaddrinfo: no addrs");
381 goto fail;
305 } 382 }
383 if (res->ai_addrlen > sizeof(bindaddr)) {
384 error("%s: addr doesn't fit", __func__);
385 goto fail;
386 }
387 memcpy(&bindaddr, res->ai_addr, res->ai_addrlen);
388 bindaddrlen = res->ai_addrlen;
389 } else if (options.bind_interface != NULL) {
390#ifdef HAVE_IFADDRS_H
391 if ((r = getifaddrs(&ifaddrs)) != 0) {
392 error("getifaddrs: %s: %s", options.bind_interface,
393 strerror(errno));
394 goto fail;
395 }
396 bindaddrlen = sizeof(bindaddr);
397 if (check_ifaddrs(options.bind_interface, ai->ai_family,
398 ifaddrs, &bindaddr, &bindaddrlen) != 0) {
399 logit("getifaddrs: %s: no suitable addresses",
400 options.bind_interface);
401 goto fail;
402 }
403#else
404 error("BindInterface not supported on this platform.");
405#endif
406 }
407 if ((r = getnameinfo((struct sockaddr *)&bindaddr, bindaddrlen,
408 ntop, sizeof(ntop), NULL, 0, NI_NUMERICHOST)) != 0) {
409 error("%s: getnameinfo failed: %s", __func__,
410 ssh_gai_strerror(r));
411 goto fail;
306 } 412 }
307 /* 413 /*
308 * If we are running as root and want to connect to a privileged 414 * If we are running as root and want to connect to a privileged
@@ -310,25 +416,32 @@ ssh_create_socket(int privileged, struct addrinfo *ai)
310 */ 416 */
311 if (privileged) { 417 if (privileged) {
312 PRIV_START; 418 PRIV_START;
313 r = bindresvport_sa(sock, res ? res->ai_addr : NULL); 419 r = bindresvport_sa(sock,
420 bindaddrlen == 0 ? NULL : (struct sockaddr *)&bindaddr);
421 oerrno = errno;
314 PRIV_END; 422 PRIV_END;
315 if (r < 0) { 423 if (r < 0) {
316 error("bindresvport_sa: af=%d %s", ai->ai_family, 424 error("bindresvport_sa %s: %s", ntop,
317 strerror(errno)); 425 strerror(oerrno));
318 goto fail; 426 goto fail;
319 } 427 }
320 } else { 428 } else if (bind(sock, (struct sockaddr *)&bindaddr, bindaddrlen) != 0) {
321 if (bind(sock, res->ai_addr, res->ai_addrlen) < 0) { 429 error("bind %s: %s", ntop, strerror(errno));
322 error("bind: %s: %s", options.bind_address, 430 goto fail;
323 strerror(errno));
324 fail:
325 close(sock);
326 freeaddrinfo(res);
327 return -1;
328 }
329 } 431 }
432 debug("%s: bound to %s", __func__, ntop);
433 /* success */
434 goto out;
435fail:
436 close(sock);
437 sock = -1;
438 out:
330 if (res != NULL) 439 if (res != NULL)
331 freeaddrinfo(res); 440 freeaddrinfo(res);
441#ifdef HAVE_IFADDRS_H
442 if (ifaddrs != NULL)
443 freeifaddrs(ifaddrs);
444#endif
332 return sock; 445 return sock;
333} 446}
334 447
@@ -344,7 +457,7 @@ waitrfd(int fd, int *timeoutp)
344 struct timeval t_start; 457 struct timeval t_start;
345 int oerrno, r; 458 int oerrno, r;
346 459
347 gettimeofday(&t_start, NULL); 460 monotime_tv(&t_start);
348 pfd.fd = fd; 461 pfd.fd = fd;
349 pfd.events = POLLIN; 462 pfd.events = POLLIN;
350 for (; *timeoutp >= 0;) { 463 for (; *timeoutp >= 0;) {
@@ -416,7 +529,7 @@ ssh_connect_direct(struct ssh *ssh, const char *host, struct addrinfo *aitop,
416 int connection_attempts, int *timeout_ms, int want_keepalive, int needpriv) 529 int connection_attempts, int *timeout_ms, int want_keepalive, int needpriv)
417{ 530{
418 int on = 1; 531 int on = 1;
419 int sock = -1, attempt; 532 int oerrno, sock = -1, attempt;
420 char ntop[NI_MAXHOST], strport[NI_MAXSERV]; 533 char ntop[NI_MAXHOST], strport[NI_MAXSERV];
421 struct addrinfo *ai; 534 struct addrinfo *ai;
422 535
@@ -436,12 +549,16 @@ ssh_connect_direct(struct ssh *ssh, const char *host, struct addrinfo *aitop,
436 */ 549 */
437 for (ai = aitop; ai; ai = ai->ai_next) { 550 for (ai = aitop; ai; ai = ai->ai_next) {
438 if (ai->ai_family != AF_INET && 551 if (ai->ai_family != AF_INET &&
439 ai->ai_family != AF_INET6) 552 ai->ai_family != AF_INET6) {
553 errno = EAFNOSUPPORT;
440 continue; 554 continue;
555 }
441 if (getnameinfo(ai->ai_addr, ai->ai_addrlen, 556 if (getnameinfo(ai->ai_addr, ai->ai_addrlen,
442 ntop, sizeof(ntop), strport, sizeof(strport), 557 ntop, sizeof(ntop), strport, sizeof(strport),
443 NI_NUMERICHOST|NI_NUMERICSERV) != 0) { 558 NI_NUMERICHOST|NI_NUMERICSERV) != 0) {
559 oerrno = errno;
444 error("%s: getnameinfo failed", __func__); 560 error("%s: getnameinfo failed", __func__);
561 errno = oerrno;
445 continue; 562 continue;
446 } 563 }
447 debug("Connecting to %.200s [%.100s] port %s.", 564 debug("Connecting to %.200s [%.100s] port %s.",
@@ -449,9 +566,11 @@ ssh_connect_direct(struct ssh *ssh, const char *host, struct addrinfo *aitop,
449 566
450 /* Create a socket for connecting. */ 567 /* Create a socket for connecting. */
451 sock = ssh_create_socket(needpriv, ai); 568 sock = ssh_create_socket(needpriv, ai);
452 if (sock < 0) 569 if (sock < 0) {
453 /* Any error is already output */ 570 /* Any error is already output */
571 errno = 0;
454 continue; 572 continue;
573 }
455 574
456 if (timeout_connect(sock, ai->ai_addr, ai->ai_addrlen, 575 if (timeout_connect(sock, ai->ai_addr, ai->ai_addrlen,
457 timeout_ms) >= 0) { 576 timeout_ms) >= 0) {
@@ -459,10 +578,12 @@ ssh_connect_direct(struct ssh *ssh, const char *host, struct addrinfo *aitop,
459 memcpy(hostaddr, ai->ai_addr, ai->ai_addrlen); 578 memcpy(hostaddr, ai->ai_addr, ai->ai_addrlen);
460 break; 579 break;
461 } else { 580 } else {
581 oerrno = errno;
462 debug("connect to address %s port %s: %s", 582 debug("connect to address %s port %s: %s",
463 ntop, strport, strerror(errno)); 583 ntop, strport, strerror(errno));
464 close(sock); 584 close(sock);
465 sock = -1; 585 sock = -1;
586 errno = oerrno;
466 } 587 }
467 } 588 }
468 if (sock != -1) 589 if (sock != -1)
@@ -472,8 +593,8 @@ ssh_connect_direct(struct ssh *ssh, const char *host, struct addrinfo *aitop,
472 /* Return failure if we didn't get a successful connection. */ 593 /* Return failure if we didn't get a successful connection. */
473 if (sock == -1) { 594 if (sock == -1) {
474 error("ssh: connect to host %s port %s: %s", 595 error("ssh: connect to host %s port %s: %s",
475 host, strport, strerror(errno)); 596 host, strport, errno == 0 ? "failure" : strerror(errno));
476 return (-1); 597 return -1;
477 } 598 }
478 599
479 debug("Connection established."); 600 debug("Connection established.");
@@ -610,9 +731,6 @@ ssh_exchange_identification(int timeout_ms)
610 if (mismatch) 731 if (mismatch)
611 fatal("Protocol major versions differ: %d vs. %d", 732 fatal("Protocol major versions differ: %d vs. %d",
612 PROTOCOL_MAJOR_2, remote_major); 733 PROTOCOL_MAJOR_2, remote_major);
613 if ((datafellows & SSH_BUG_DERIVEKEY) != 0)
614 fatal("Server version \"%.100s\" uses unsafe key agreement; "
615 "refusing connection", remote_version);
616 if ((datafellows & SSH_BUG_RSASIGMD5) != 0) 734 if ((datafellows & SSH_BUG_RSASIGMD5) != 0)
617 logit("Server version \"%.100s\" uses unsafe RSA signature " 735 logit("Server version \"%.100s\" uses unsafe RSA signature "
618 "scheme; disabling use of RSA keys", remote_version); 736 "scheme; disabling use of RSA keys", remote_version);
@@ -631,11 +749,12 @@ confirm(const char *prompt)
631 return 0; 749 return 0;
632 for (msg = prompt;;msg = again) { 750 for (msg = prompt;;msg = again) {
633 p = read_passphrase(msg, RP_ECHO); 751 p = read_passphrase(msg, RP_ECHO);
634 if (p == NULL || 752 if (p == NULL)
635 (p[0] == '\0') || (p[0] == '\n') || 753 return 0;
636 strncasecmp(p, "no", 2) == 0) 754 p[strcspn(p, "\n")] = '\0';
755 if (p[0] == '\0' || strcasecmp(p, "no") == 0)
637 ret = 0; 756 ret = 0;
638 if (p && strncasecmp(p, "yes", 3) == 0) 757 else if (strcasecmp(p, "yes") == 0)
639 ret = 1; 758 ret = 1;
640 free(p); 759 free(p);
641 if (ret != -1) 760 if (ret != -1)
@@ -1178,8 +1297,7 @@ fail:
1178 host_key = raw_key; 1297 host_key = raw_key;
1179 goto retry; 1298 goto retry;
1180 } 1299 }
1181 if (raw_key != NULL) 1300 sshkey_free(raw_key);
1182 sshkey_free(raw_key);
1183 free(ip); 1301 free(ip);
1184 free(host); 1302 free(host);
1185 if (host_hostkeys != NULL) 1303 if (host_hostkeys != NULL)
@@ -1364,6 +1482,7 @@ show_other_keys(struct hostkeys *hostkeys, struct sshkey *key)
1364 KEY_DSA, 1482 KEY_DSA,
1365 KEY_ECDSA, 1483 KEY_ECDSA,
1366 KEY_ED25519, 1484 KEY_ED25519,
1485 KEY_XMSS,
1367 -1 1486 -1
1368 }; 1487 };
1369 int i, ret = 0; 1488 int i, ret = 0;
@@ -1460,8 +1579,8 @@ ssh_local_cmd(const char *args)
1460} 1579}
1461 1580
1462void 1581void
1463maybe_add_key_to_agent(char *authfile, struct sshkey *private, char *comment, 1582maybe_add_key_to_agent(char *authfile, const struct sshkey *private,
1464 char *passphrase) 1583 char *comment, char *passphrase)
1465{ 1584{
1466 int auth_sock = -1, r; 1585 int auth_sock = -1, r;
1467 1586
@@ -1481,7 +1600,7 @@ maybe_add_key_to_agent(char *authfile, struct sshkey *private, char *comment,
1481 } 1600 }
1482 1601
1483 if ((r = ssh_add_identity_constrained(auth_sock, private, comment, 0, 1602 if ((r = ssh_add_identity_constrained(auth_sock, private, comment, 0,
1484 (options.add_keys_to_agent == 3))) == 0) 1603 (options.add_keys_to_agent == 3), 0)) == 0)
1485 debug("identity added to agent: %s", authfile); 1604 debug("identity added to agent: %s", authfile);
1486 else 1605 else
1487 debug("could not add identity to agent: %s (%d)", authfile, r); 1606 debug("could not add identity to agent: %s (%d)", authfile, r);
diff --git a/sshconnect.h b/sshconnect.h
index b5029e234..dd648b096 100644
--- a/sshconnect.h
+++ b/sshconnect.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshconnect.h,v 1.31 2017/09/12 06:32:07 djm Exp $ */ 1/* $OpenBSD: sshconnect.h,v 1.32 2018/02/10 09:25:35 djm Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2000 Markus Friedl. All rights reserved. 4 * Copyright (c) 2000 Markus Friedl. All rights reserved.
@@ -57,7 +57,7 @@ void ssh_userauth2(const char *, const char *, char *, Sensitive *);
57void ssh_put_password(char *); 57void ssh_put_password(char *);
58int ssh_local_cmd(const char *); 58int ssh_local_cmd(const char *);
59 59
60void maybe_add_key_to_agent(char *, struct sshkey *, char *, char *); 60void maybe_add_key_to_agent(char *, const struct sshkey *, char *, char *);
61 61
62/* 62/*
63 * Macros to raise/lower permissions. 63 * Macros to raise/lower permissions.
diff --git a/sshconnect2.c b/sshconnect2.c
index c22477f59..83562c688 100644
--- a/sshconnect2.c
+++ b/sshconnect2.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshconnect2.c,v 1.266 2017/08/27 00:38:41 dtucker Exp $ */ 1/* $OpenBSD: sshconnect2.c,v 1.270 2018/03/24 19:28:43 markus Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * Copyright (c) 2008 Damien Miller. All rights reserved. 4 * Copyright (c) 2008 Damien Miller. All rights reserved.
@@ -644,7 +644,6 @@ input_userauth_pk_ok(int type, u_int32_t seq, struct ssh *ssh)
644 Authctxt *authctxt = ssh->authctxt; 644 Authctxt *authctxt = ssh->authctxt;
645 struct sshkey *key = NULL; 645 struct sshkey *key = NULL;
646 Identity *id = NULL; 646 Identity *id = NULL;
647 Buffer b;
648 int pktype, sent = 0; 647 int pktype, sent = 0;
649 u_int alen, blen; 648 u_int alen, blen;
650 char *pkalg, *fp; 649 char *pkalg, *fp;
@@ -652,18 +651,9 @@ input_userauth_pk_ok(int type, u_int32_t seq, struct ssh *ssh)
652 651
653 if (authctxt == NULL) 652 if (authctxt == NULL)
654 fatal("input_userauth_pk_ok: no authentication context"); 653 fatal("input_userauth_pk_ok: no authentication context");
655 if (datafellows & SSH_BUG_PKOK) { 654
656 /* this is similar to SSH_BUG_PKAUTH */ 655 pkalg = packet_get_string(&alen);
657 debug2("input_userauth_pk_ok: SSH_BUG_PKOK"); 656 pkblob = packet_get_string(&blen);
658 pkblob = packet_get_string(&blen);
659 buffer_init(&b);
660 buffer_append(&b, pkblob, blen);
661 pkalg = buffer_get_string(&b, &alen);
662 buffer_free(&b);
663 } else {
664 pkalg = packet_get_string(&alen);
665 pkblob = packet_get_string(&blen);
666 }
667 packet_check_eom(); 657 packet_check_eom();
668 658
669 debug("Server accepts key: pkalg %s blen %u", pkalg, blen); 659 debug("Server accepts key: pkalg %s blen %u", pkalg, blen);
@@ -700,8 +690,7 @@ input_userauth_pk_ok(int type, u_int32_t seq, struct ssh *ssh)
700 } 690 }
701 } 691 }
702done: 692done:
703 if (key != NULL) 693 key_free(key);
704 key_free(key);
705 free(pkalg); 694 free(pkalg);
706 free(pkblob); 695 free(pkblob);
707 696
@@ -1136,17 +1125,46 @@ key_sign_encode(const struct sshkey *key)
1136 return key_ssh_name(key); 1125 return key_ssh_name(key);
1137} 1126}
1138 1127
1128/*
1129 * Some agents will return ssh-rsa signatures when asked to make a
1130 * rsa-sha2-* signature. Check what they actually gave back and warn the
1131 * user if the agent has returned an unexpected type.
1132 */
1133static int
1134check_sigtype(const struct sshkey *key, const u_char *sig, size_t len)
1135{
1136 int r;
1137 char *sigtype = NULL;
1138 const char *alg = key_sign_encode(key);
1139
1140 if (sshkey_is_cert(key))
1141 return 0;
1142 if ((r = sshkey_sigtype(sig, len, &sigtype)) != 0)
1143 return r;
1144 if (strcmp(sigtype, alg) != 0) {
1145 logit("warning: agent returned different signature type %s "
1146 "(expected %s)", sigtype, alg);
1147 }
1148 free(sigtype);
1149 /* Incorrect signature types aren't an error ... yet */
1150 return 0;
1151}
1152
1139static int 1153static int
1140identity_sign(struct identity *id, u_char **sigp, size_t *lenp, 1154identity_sign(struct identity *id, u_char **sigp, size_t *lenp,
1141 const u_char *data, size_t datalen, u_int compat) 1155 const u_char *data, size_t datalen, u_int compat)
1142{ 1156{
1143 struct sshkey *prv; 1157 struct sshkey *prv;
1144 int ret; 1158 int r;
1145 1159
1146 /* the agent supports this key */ 1160 /* the agent supports this key */
1147 if (id->key != NULL && id->agent_fd != -1) 1161 if (id->key != NULL && id->agent_fd != -1) {
1148 return ssh_agent_sign(id->agent_fd, id->key, sigp, lenp, 1162 if ((r = ssh_agent_sign(id->agent_fd, id->key, sigp, lenp,
1149 data, datalen, key_sign_encode(id->key), compat); 1163 data, datalen, key_sign_encode(id->key), compat)) != 0 ||
1164 (r = check_sigtype(id->key, *sigp, *lenp)) != 0)
1165 return r;
1166 return 0;
1167 }
1150 1168
1151 /* 1169 /*
1152 * we have already loaded the private key or 1170 * we have already loaded the private key or
@@ -1165,10 +1183,10 @@ identity_sign(struct identity *id, u_char **sigp, size_t *lenp,
1165 __func__, id->filename); 1183 __func__, id->filename);
1166 return SSH_ERR_KEY_NOT_FOUND; 1184 return SSH_ERR_KEY_NOT_FOUND;
1167 } 1185 }
1168 ret = sshkey_sign(prv, sigp, lenp, data, datalen, 1186 r = sshkey_sign(prv, sigp, lenp, data, datalen,
1169 key_sign_encode(prv), compat); 1187 key_sign_encode(prv), compat);
1170 sshkey_free(prv); 1188 sshkey_free(prv);
1171 return (ret); 1189 return r;
1172} 1190}
1173 1191
1174static int 1192static int
@@ -1223,17 +1241,10 @@ sign_and_send_pubkey(Authctxt *authctxt, Identity *id)
1223 } 1241 }
1224 buffer_put_char(&b, SSH2_MSG_USERAUTH_REQUEST); 1242 buffer_put_char(&b, SSH2_MSG_USERAUTH_REQUEST);
1225 buffer_put_cstring(&b, authctxt->server_user); 1243 buffer_put_cstring(&b, authctxt->server_user);
1226 buffer_put_cstring(&b, 1244 buffer_put_cstring(&b, authctxt->service);
1227 datafellows & SSH_BUG_PKSERVICE ? 1245 buffer_put_cstring(&b, authctxt->method->name);
1228 "ssh-userauth" : 1246 buffer_put_char(&b, have_sig);
1229 authctxt->service); 1247 buffer_put_cstring(&b, key_sign_encode(id->key));
1230 if (datafellows & SSH_BUG_PKAUTH) {
1231 buffer_put_char(&b, have_sig);
1232 } else {
1233 buffer_put_cstring(&b, authctxt->method->name);
1234 buffer_put_char(&b, have_sig);
1235 buffer_put_cstring(&b, key_sign_encode(id->key));
1236 }
1237 buffer_put_string(&b, blob, bloblen); 1248 buffer_put_string(&b, blob, bloblen);
1238 1249
1239 /* 1250 /*
@@ -1293,19 +1304,6 @@ sign_and_send_pubkey(Authctxt *authctxt, Identity *id)
1293#ifdef DEBUG_PK 1304#ifdef DEBUG_PK
1294 buffer_dump(&b); 1305 buffer_dump(&b);
1295#endif 1306#endif
1296 if (datafellows & SSH_BUG_PKSERVICE) {
1297 buffer_clear(&b);
1298 buffer_append(&b, session_id2, session_id2_len);
1299 skip = session_id2_len;
1300 buffer_put_char(&b, SSH2_MSG_USERAUTH_REQUEST);
1301 buffer_put_cstring(&b, authctxt->server_user);
1302 buffer_put_cstring(&b, authctxt->service);
1303 buffer_put_cstring(&b, authctxt->method->name);
1304 buffer_put_char(&b, have_sig);
1305 if (!(datafellows & SSH_BUG_PKAUTH))
1306 buffer_put_cstring(&b, key_ssh_name(id->key));
1307 buffer_put_string(&b, blob, bloblen);
1308 }
1309 free(blob); 1307 free(blob);
1310 1308
1311 /* append signature */ 1309 /* append signature */
@@ -1347,8 +1345,7 @@ send_pubkey_test(Authctxt *authctxt, Identity *id)
1347 packet_put_cstring(authctxt->service); 1345 packet_put_cstring(authctxt->service);
1348 packet_put_cstring(authctxt->method->name); 1346 packet_put_cstring(authctxt->method->name);
1349 packet_put_char(have_sig); 1347 packet_put_char(have_sig);
1350 if (!(datafellows & SSH_BUG_PKAUTH)) 1348 packet_put_cstring(key_sign_encode(id->key));
1351 packet_put_cstring(key_sign_encode(id->key));
1352 packet_put_string(blob, bloblen); 1349 packet_put_string(blob, bloblen);
1353 free(blob); 1350 free(blob);
1354 packet_send(); 1351 packet_send();
@@ -1864,7 +1861,6 @@ userauth_hostbased(Authctxt *authctxt)
1864 struct ssh *ssh = active_state; 1861 struct ssh *ssh = active_state;
1865 struct sshkey *private = NULL; 1862 struct sshkey *private = NULL;
1866 struct sshbuf *b = NULL; 1863 struct sshbuf *b = NULL;
1867 const char *service;
1868 u_char *sig = NULL, *keyblob = NULL; 1864 u_char *sig = NULL, *keyblob = NULL;
1869 char *fp = NULL, *chost = NULL, *lname = NULL; 1865 char *fp = NULL, *chost = NULL, *lname = NULL;
1870 size_t siglen = 0, keylen = 0; 1866 size_t siglen = 0, keylen = 0;
@@ -1935,9 +1931,6 @@ userauth_hostbased(Authctxt *authctxt)
1935 xasprintf(&chost, "%s.", lname); 1931 xasprintf(&chost, "%s.", lname);
1936 debug2("%s: chost %s", __func__, chost); 1932 debug2("%s: chost %s", __func__, chost);
1937 1933
1938 service = datafellows & SSH_BUG_HBSERVICE ? "ssh-userauth" :
1939 authctxt->service;
1940
1941 /* construct data */ 1934 /* construct data */
1942 if ((b = sshbuf_new()) == NULL) { 1935 if ((b = sshbuf_new()) == NULL) {
1943 error("%s: sshbuf_new failed", __func__); 1936 error("%s: sshbuf_new failed", __func__);
@@ -1950,7 +1943,7 @@ userauth_hostbased(Authctxt *authctxt)
1950 if ((r = sshbuf_put_string(b, session_id2, session_id2_len)) != 0 || 1943 if ((r = sshbuf_put_string(b, session_id2, session_id2_len)) != 0 ||
1951 (r = sshbuf_put_u8(b, SSH2_MSG_USERAUTH_REQUEST)) != 0 || 1944 (r = sshbuf_put_u8(b, SSH2_MSG_USERAUTH_REQUEST)) != 0 ||
1952 (r = sshbuf_put_cstring(b, authctxt->server_user)) != 0 || 1945 (r = sshbuf_put_cstring(b, authctxt->server_user)) != 0 ||
1953 (r = sshbuf_put_cstring(b, service)) != 0 || 1946 (r = sshbuf_put_cstring(b, authctxt->service)) != 0 ||
1954 (r = sshbuf_put_cstring(b, authctxt->method->name)) != 0 || 1947 (r = sshbuf_put_cstring(b, authctxt->method->name)) != 0 ||
1955 (r = sshbuf_put_cstring(b, key_ssh_name(private))) != 0 || 1948 (r = sshbuf_put_cstring(b, key_ssh_name(private))) != 0 ||
1956 (r = sshbuf_put_string(b, keyblob, keylen)) != 0 || 1949 (r = sshbuf_put_string(b, keyblob, keylen)) != 0 ||
diff --git a/sshd.0 b/sshd.0
index 92c8ec533..999d160bf 100644
--- a/sshd.0
+++ b/sshd.0
@@ -33,12 +33,14 @@ DESCRIPTION
33 -C connection_spec 33 -C connection_spec
34 Specify the connection parameters to use for the -T extended test 34 Specify the connection parameters to use for the -T extended test
35 mode. If provided, any Match directives in the configuration 35 mode. If provided, any Match directives in the configuration
36 file that would apply to the specified user, host, and address 36 file that would apply are applied before the configuration is
37 will be set before the configuration is written to standard 37 written to standard output. The connection parameters are
38 output. The connection parameters are supplied as keyword=value 38 supplied as keyword=value pairs and may be supplied in any order,
39 pairs. The keywords are 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
40 M-bM-^@M-^\addrM-bM-^@M-^]. All are required and may be supplied in any order,
41 either with multiple -C options or as a comma-separated list. 39 either with multiple -C options or as a comma-separated list.
40 The keywords are M-bM-^@M-^\addr,M-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
41 M-bM-^@M-^\rdomainM-bM-^@M-^] and correspond to source address, user, resolved source
42 host name, local address, local port number and routing domain
43 respectively.
42 44
43 -c host_certificate_file 45 -c host_certificate_file
44 Specifies a path to a certificate file to identify sshd during 46 Specifies a path to a certificate file to identify sshd during
@@ -75,10 +77,9 @@ DESCRIPTION
75 Specifies a file from which a host key is read. This option must 77 Specifies a file from which a host key is read. This option must
76 be given if sshd is not run as root (as the normal host key files 78 be given if sshd is not run as root (as the normal host key files
77 are normally not readable by anyone but root). The default is 79 are normally not readable by anyone but root). The default is
78 /etc/ssh/ssh_host_dsa_key, /etc/ssh/ssh_host_ecdsa_key, 80 /etc/ssh/ssh_host_ecdsa_key, /etc/ssh/ssh_host_ed25519_key and
79 /etc/ssh/ssh_host_ed25519_key and /etc/ssh/ssh_host_rsa_key. It 81 /etc/ssh/ssh_host_rsa_key. It is possible to have multiple host
80 is possible to have multiple host key files for the different 82 key files for the different host key algorithms.
81 host key algorithms.
82 83
83 -i Specifies that sshd is being run from inetd(8). 84 -i Specifies that sshd is being run from inetd(8).
84 85
@@ -247,7 +248,7 @@ AUTHORIZED_KEYS FILE FORMAT
247 You don't want to type them in; instead, copy the id_dsa.pub, 248 You don't want to type them in; instead, copy the id_dsa.pub,
248 id_ecdsa.pub, id_ed25519.pub, or the id_rsa.pub file and edit it. 249 id_ecdsa.pub, id_ed25519.pub, or the id_rsa.pub file and edit it.
249 250
250 sshd enforces a minimum RSA key modulus size of 768 bits. 251 sshd enforces a minimum RSA key modulus size of 1024 bits.
251 252
252 The options (if present) consist of comma-separated option 253 The options (if present) consist of comma-separated option
253 specifications. No spaces are permitted, except within double quotes. 254 specifications. No spaces are permitted, except within double quotes.
@@ -299,6 +300,11 @@ AUTHORIZED_KEYS FILE FORMAT
299 this type are permitted. Environment processing is disabled by 300 this type are permitted. Environment processing is disabled by
300 default and is controlled via the PermitUserEnvironment option. 301 default and is controlled via the PermitUserEnvironment option.
301 302
303 expiry-time="timespec"
304 Specifies a time after which the key will not be accepted. The
305 time may be specified as a YYYYMMDD date or a YYYYMMDDHHMM[SS]
306 time in the system time-zone.
307
302 from="pattern-list" 308 from="pattern-list"
303 Specifies that in addition to public key authentication, either 309 Specifies that in addition to public key authentication, either
304 the canonical name of the remote host or its IP address must be 310 the canonical name of the remote host or its IP address must be
@@ -346,6 +352,7 @@ AUTHORIZED_KEYS FILE FORMAT
346 352
347 port-forwarding 353 port-forwarding
348 Enable port forwarding previously disabled by the restrict 354 Enable port forwarding previously disabled by the restrict
355 option.
349 356
350 principals="principals" 357 principals="principals"
351 On a cert-authority line, specifies allowed principals for 358 On a cert-authority line, specifies allowed principals for
@@ -567,7 +574,6 @@ FILES
567 allows host-based authentication without permitting login with 574 allows host-based authentication without permitting login with
568 rlogin/rsh. 575 rlogin/rsh.
569 576
570 /etc/ssh/ssh_host_dsa_key
571 /etc/ssh/ssh_host_ecdsa_key 577 /etc/ssh/ssh_host_ecdsa_key
572 /etc/ssh/ssh_host_ed25519_key 578 /etc/ssh/ssh_host_ed25519_key
573 /etc/ssh/ssh_host_rsa_key 579 /etc/ssh/ssh_host_rsa_key
@@ -576,7 +582,6 @@ FILES
576 not accessible to others. Note that sshd does not start if these 582 not accessible to others. Note that sshd does not start if these
577 files are group/world-accessible. 583 files are group/world-accessible.
578 584
579 /etc/ssh/ssh_host_dsa_key.pub
580 /etc/ssh/ssh_host_ecdsa_key.pub 585 /etc/ssh/ssh_host_ecdsa_key.pub
581 /etc/ssh/ssh_host_ed25519_key.pub 586 /etc/ssh/ssh_host_ed25519_key.pub
582 /etc/ssh/ssh_host_rsa_key.pub 587 /etc/ssh/ssh_host_rsa_key.pub
@@ -629,4 +634,4 @@ AUTHORS
629 versions 1.5 and 2.0. Niels Provos and Markus Friedl contributed support 634 versions 1.5 and 2.0. Niels Provos and Markus Friedl contributed support
630 for privilege separation. 635 for privilege separation.
631 636
632OpenBSD 6.2 June 24, 2017 OpenBSD 6.2 637OpenBSD 6.2 March 14, 2018 OpenBSD 6.2
diff --git a/sshd.8 b/sshd.8
index 8c2306579..378aeb9f5 100644
--- a/sshd.8
+++ b/sshd.8
@@ -33,8 +33,8 @@
33.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 33.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
34.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35.\" 35.\"
36.\" $OpenBSD: sshd.8,v 1.291 2017/06/24 06:28:50 jmc Exp $ 36.\" $OpenBSD: sshd.8,v 1.299 2018/03/14 06:56:20 jmc Exp $
37.Dd $Mdocdate: June 24 2017 $ 37.Dd $Mdocdate: March 14 2018 $
38.Dt SSHD 8 38.Dt SSHD 8
39.Os 39.Os
40.Sh NAME 40.Sh NAME
@@ -100,20 +100,22 @@ Specify the connection parameters to use for the
100extended test mode. 100extended test mode.
101If provided, any 101If provided, any
102.Cm Match 102.Cm Match
103directives in the configuration file 103directives in the configuration file that would apply are applied before the
104that would apply to the specified user, host, and address will be set before 104configuration is written to standard output.
105the configuration is written to standard output. 105The connection parameters are supplied as keyword=value pairs and may be
106The connection parameters are supplied as keyword=value pairs. 106supplied in any order, either with multiple
107.Fl C
108options or as a comma-separated list.
107The keywords are 109The keywords are
110.Dq addr,
108.Dq user , 111.Dq user ,
109.Dq host , 112.Dq host ,
110.Dq laddr , 113.Dq laddr ,
111.Dq lport , 114.Dq lport ,
112and 115and
113.Dq addr . 116.Dq rdomain
114All are required and may be supplied in any order, either with multiple 117and correspond to source address, user, resolved source host name,
115.Fl C 118local address, local port number and routing domain respectively.
116options or as a comma-separated list.
117.It Fl c Ar host_certificate_file 119.It Fl c Ar host_certificate_file
118Specifies a path to a certificate file to identify 120Specifies a path to a certificate file to identify
119.Nm 121.Nm
@@ -164,10 +166,10 @@ This option must be given if
164is not run as root (as the normal 166is not run as root (as the normal
165host key files are normally not readable by anyone but root). 167host key files are normally not readable by anyone but root).
166The default is 168The default is
167.Pa /etc/ssh/ssh_host_rsa_key , 169.Pa /etc/ssh/ssh_host_ecdsa_key ,
168.Pa /etc/ssh/ssh_host_ecdsa_key 170.Pa /etc/ssh/ssh_host_ed25519_key
169and 171and
170.Pa /etc/ssh/ssh_host_ed25519_key . 172.Pa /etc/ssh/ssh_host_rsa_key .
171It is possible to have multiple host key files for 173It is possible to have multiple host key files for
172the different host key algorithms. 174the different host key algorithms.
173.It Fl i 175.It Fl i
@@ -451,7 +453,7 @@ or the
451file and edit it. 453file and edit it.
452.Pp 454.Pp
453.Nm 455.Nm
454enforces a minimum RSA key modulus size of 768 bits. 456enforces a minimum RSA key modulus size of 1024 bits.
455.Pp 457.Pp
456The options (if present) consist of comma-separated option 458The options (if present) consist of comma-separated option
457specifications. 459specifications.
@@ -511,6 +513,10 @@ Environment processing is disabled by default and is
511controlled via the 513controlled via the
512.Cm PermitUserEnvironment 514.Cm PermitUserEnvironment
513option. 515option.
516.It Cm expiry-time="timespec"
517Specifies a time after which the key will not be accepted.
518The time may be specified as a YYYYMMDD date or a YYYYMMDDHHMM[SS] time
519in the system time-zone.
514.It Cm from="pattern-list" 520.It Cm from="pattern-list"
515Specifies that in addition to public key authentication, either the canonical 521Specifies that in addition to public key authentication, either the canonical
516name of the remote host or its IP address must be present in the 522name of the remote host or its IP address must be present in the
@@ -565,6 +571,7 @@ matches any port.
565.It Cm port-forwarding 571.It Cm port-forwarding
566Enable port forwarding previously disabled by the 572Enable port forwarding previously disabled by the
567.Cm restrict 573.Cm restrict
574option.
568.It Cm principals="principals" 575.It Cm principals="principals"
569On a 576On a
570.Cm cert-authority 577.Cm cert-authority
@@ -876,7 +883,6 @@ This file is used in exactly the same way as
876but allows host-based authentication without permitting login with 883but allows host-based authentication without permitting login with
877rlogin/rsh. 884rlogin/rsh.
878.Pp 885.Pp
879.It Pa /etc/ssh/ssh_host_dsa_key
880.It Pa /etc/ssh/ssh_host_ecdsa_key 886.It Pa /etc/ssh/ssh_host_ecdsa_key
881.It Pa /etc/ssh/ssh_host_ed25519_key 887.It Pa /etc/ssh/ssh_host_ed25519_key
882.It Pa /etc/ssh/ssh_host_rsa_key 888.It Pa /etc/ssh/ssh_host_rsa_key
@@ -887,7 +893,6 @@ Note that
887.Nm 893.Nm
888does not start if these files are group/world-accessible. 894does not start if these files are group/world-accessible.
889.Pp 895.Pp
890.It Pa /etc/ssh/ssh_host_dsa_key.pub
891.It Pa /etc/ssh/ssh_host_ecdsa_key.pub 896.It Pa /etc/ssh/ssh_host_ecdsa_key.pub
892.It Pa /etc/ssh/ssh_host_ed25519_key.pub 897.It Pa /etc/ssh/ssh_host_ed25519_key.pub
893.It Pa /etc/ssh/ssh_host_rsa_key.pub 898.It Pa /etc/ssh/ssh_host_rsa_key.pub
diff --git a/sshd.c b/sshd.c
index 1fde5a63c..3a86e66e7 100644
--- a/sshd.c
+++ b/sshd.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshd.c,v 1.492 2017/09/12 06:32:07 djm Exp $ */ 1/* $OpenBSD: sshd.c,v 1.506 2018/03/03 03:15:51 djm Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -123,6 +123,7 @@
123#endif 123#endif
124#include "monitor_wrap.h" 124#include "monitor_wrap.h"
125#include "ssh-sandbox.h" 125#include "ssh-sandbox.h"
126#include "auth-options.h"
126#include "version.h" 127#include "version.h"
127#include "ssherr.h" 128#include "ssherr.h"
128 129
@@ -159,7 +160,12 @@ char *config_file_name = _PATH_SERVER_CONFIG_FILE;
159 */ 160 */
160int debug_flag = 0; 161int debug_flag = 0;
161 162
162/* Flag indicating that the daemon should only test the configuration and keys. */ 163/*
164 * Indicating that the daemon should only test the configuration and keys.
165 * If test_flag > 1 ("-T" flag), then sshd will also dump the effective
166 * configuration, optionally using connection information provided by the
167 * "-C" flag.
168 */
163int test_flag = 0; 169int test_flag = 0;
164 170
165/* Flag indicating that the daemon is being started from inetd. */ 171/* Flag indicating that the daemon is being started from inetd. */
@@ -242,6 +248,9 @@ static int privsep_chroot = 1;
242/* global authentication context */ 248/* global authentication context */
243Authctxt *the_authctxt = NULL; 249Authctxt *the_authctxt = NULL;
244 250
251/* global key/cert auth options. XXX move to permanent ssh->authctxt? */
252struct sshauthopt *auth_opts = NULL;
253
245/* sshd_config buffer */ 254/* sshd_config buffer */
246Buffer cfg; 255Buffer cfg;
247 256
@@ -293,7 +302,6 @@ sighup_handler(int sig)
293 int save_errno = errno; 302 int save_errno = errno;
294 303
295 received_sighup = 1; 304 received_sighup = 1;
296 signal(SIGHUP, sighup_handler);
297 errno = save_errno; 305 errno = save_errno;
298} 306}
299 307
@@ -343,8 +351,6 @@ main_sigchld_handler(int sig)
343 while ((pid = waitpid(-1, &status, WNOHANG)) > 0 || 351 while ((pid = waitpid(-1, &status, WNOHANG)) > 0 ||
344 (pid < 0 && errno == EINTR)) 352 (pid < 0 && errno == EINTR))
345 ; 353 ;
346
347 signal(SIGCHLD, main_sigchld_handler);
348 errno = save_errno; 354 errno = save_errno;
349} 355}
350 356
@@ -457,16 +463,12 @@ sshd_exchange_identification(struct ssh *ssh, int sock_in, int sock_out)
457 logit("Client version \"%.100s\" uses unsafe RSA signature " 463 logit("Client version \"%.100s\" uses unsafe RSA signature "
458 "scheme; disabling use of RSA keys", remote_version); 464 "scheme; disabling use of RSA keys", remote_version);
459 } 465 }
460 if ((ssh->compat & SSH_BUG_DERIVEKEY) != 0) {
461 fatal("Client version \"%.100s\" uses unsafe key agreement; "
462 "refusing connection", remote_version);
463 }
464 466
465 chop(server_version_string); 467 chop(server_version_string);
466 debug("Local version string %.200s", server_version_string); 468 debug("Local version string %.200s", server_version_string);
467 469
468 if (remote_major != 2 || 470 if (remote_major != 2 &&
469 (remote_major == 1 && remote_minor != 99)) { 471 !(remote_major == 1 && remote_minor == 99)) {
470 s = "Protocol major versions differ.\n"; 472 s = "Protocol major versions differ.\n";
471 (void) atomicio(vwrite, sock_out, s, strlen(s)); 473 (void) atomicio(vwrite, sock_out, s, strlen(s));
472 close(sock_in); 474 close(sock_in);
@@ -483,7 +485,7 @@ sshd_exchange_identification(struct ssh *ssh, int sock_in, int sock_out)
483void 485void
484destroy_sensitive_data(void) 486destroy_sensitive_data(void)
485{ 487{
486 int i; 488 u_int i;
487 489
488 for (i = 0; i < options.num_host_key_files; i++) { 490 for (i = 0; i < options.num_host_key_files; i++) {
489 if (sensitive_data.host_keys[i]) { 491 if (sensitive_data.host_keys[i]) {
@@ -502,7 +504,7 @@ void
502demote_sensitive_data(void) 504demote_sensitive_data(void)
503{ 505{
504 struct sshkey *tmp; 506 struct sshkey *tmp;
505 int i; 507 u_int i;
506 508
507 for (i = 0; i < options.num_host_key_files; i++) { 509 for (i = 0; i < options.num_host_key_files; i++) {
508 if (sensitive_data.host_keys[i]) { 510 if (sensitive_data.host_keys[i]) {
@@ -701,7 +703,7 @@ list_hostkey_types(void)
701 Buffer b; 703 Buffer b;
702 const char *p; 704 const char *p;
703 char *ret; 705 char *ret;
704 int i; 706 u_int i;
705 struct sshkey *key; 707 struct sshkey *key;
706 708
707 buffer_init(&b); 709 buffer_init(&b);
@@ -723,6 +725,7 @@ list_hostkey_types(void)
723 case KEY_DSA: 725 case KEY_DSA:
724 case KEY_ECDSA: 726 case KEY_ECDSA:
725 case KEY_ED25519: 727 case KEY_ED25519:
728 case KEY_XMSS:
726 if (buffer_len(&b) > 0) 729 if (buffer_len(&b) > 0)
727 buffer_append(&b, ",", 1); 730 buffer_append(&b, ",", 1);
728 p = key_ssh_name(key); 731 p = key_ssh_name(key);
@@ -744,6 +747,7 @@ list_hostkey_types(void)
744 case KEY_DSA_CERT: 747 case KEY_DSA_CERT:
745 case KEY_ECDSA_CERT: 748 case KEY_ECDSA_CERT:
746 case KEY_ED25519_CERT: 749 case KEY_ED25519_CERT:
750 case KEY_XMSS_CERT:
747 if (buffer_len(&b) > 0) 751 if (buffer_len(&b) > 0)
748 buffer_append(&b, ",", 1); 752 buffer_append(&b, ",", 1);
749 p = key_ssh_name(key); 753 p = key_ssh_name(key);
@@ -761,7 +765,7 @@ list_hostkey_types(void)
761static struct sshkey * 765static struct sshkey *
762get_hostkey_by_type(int type, int nid, int need_private, struct ssh *ssh) 766get_hostkey_by_type(int type, int nid, int need_private, struct ssh *ssh)
763{ 767{
764 int i; 768 u_int i;
765 struct sshkey *key; 769 struct sshkey *key;
766 770
767 for (i = 0; i < options.num_host_key_files; i++) { 771 for (i = 0; i < options.num_host_key_files; i++) {
@@ -770,6 +774,7 @@ get_hostkey_by_type(int type, int nid, int need_private, struct ssh *ssh)
770 case KEY_DSA_CERT: 774 case KEY_DSA_CERT:
771 case KEY_ECDSA_CERT: 775 case KEY_ECDSA_CERT:
772 case KEY_ED25519_CERT: 776 case KEY_ED25519_CERT:
777 case KEY_XMSS_CERT:
773 key = sensitive_data.host_certificates[i]; 778 key = sensitive_data.host_certificates[i];
774 break; 779 break;
775 default: 780 default:
@@ -801,7 +806,7 @@ get_hostkey_private_by_type(int type, int nid, struct ssh *ssh)
801struct sshkey * 806struct sshkey *
802get_hostkey_by_index(int ind) 807get_hostkey_by_index(int ind)
803{ 808{
804 if (ind < 0 || ind >= options.num_host_key_files) 809 if (ind < 0 || (u_int)ind >= options.num_host_key_files)
805 return (NULL); 810 return (NULL);
806 return (sensitive_data.host_keys[ind]); 811 return (sensitive_data.host_keys[ind]);
807} 812}
@@ -809,7 +814,7 @@ get_hostkey_by_index(int ind)
809struct sshkey * 814struct sshkey *
810get_hostkey_public_by_index(int ind, struct ssh *ssh) 815get_hostkey_public_by_index(int ind, struct ssh *ssh)
811{ 816{
812 if (ind < 0 || ind >= options.num_host_key_files) 817 if (ind < 0 || (u_int)ind >= options.num_host_key_files)
813 return (NULL); 818 return (NULL);
814 return (sensitive_data.host_pubkeys[ind]); 819 return (sensitive_data.host_pubkeys[ind]);
815} 820}
@@ -817,7 +822,7 @@ get_hostkey_public_by_index(int ind, struct ssh *ssh)
817int 822int
818get_hostkey_index(struct sshkey *key, int compare, struct ssh *ssh) 823get_hostkey_index(struct sshkey *key, int compare, struct ssh *ssh)
819{ 824{
820 int i; 825 u_int i;
821 826
822 for (i = 0; i < options.num_host_key_files; i++) { 827 for (i = 0; i < options.num_host_key_files; i++) {
823 if (key_is_cert(key)) { 828 if (key_is_cert(key)) {
@@ -846,7 +851,8 @@ notify_hostkeys(struct ssh *ssh)
846{ 851{
847 struct sshbuf *buf; 852 struct sshbuf *buf;
848 struct sshkey *key; 853 struct sshkey *key;
849 int i, nkeys, r; 854 u_int i, nkeys;
855 int r;
850 char *fp; 856 char *fp;
851 857
852 /* Some clients cannot cope with the hostkeys message, skip those. */ 858 /* Some clients cannot cope with the hostkeys message, skip those. */
@@ -877,7 +883,7 @@ notify_hostkeys(struct ssh *ssh)
877 packet_put_string(sshbuf_ptr(buf), sshbuf_len(buf)); 883 packet_put_string(sshbuf_ptr(buf), sshbuf_len(buf));
878 nkeys++; 884 nkeys++;
879 } 885 }
880 debug3("%s: sent %d hostkeys", __func__, nkeys); 886 debug3("%s: sent %u hostkeys", __func__, nkeys);
881 if (nkeys == 0) 887 if (nkeys == 0)
882 fatal("%s: no hostkeys", __func__); 888 fatal("%s: no hostkeys", __func__);
883 packet_send(); 889 packet_send();
@@ -1030,13 +1036,13 @@ server_accept_inetd(int *sock_in, int *sock_out)
1030 * Listen for TCP connections 1036 * Listen for TCP connections
1031 */ 1037 */
1032static void 1038static void
1033server_listen(void) 1039listen_on_addrs(struct listenaddr *la)
1034{ 1040{
1035 int ret, listen_sock, on = 1; 1041 int ret, listen_sock;
1036 struct addrinfo *ai; 1042 struct addrinfo *ai;
1037 char ntop[NI_MAXHOST], strport[NI_MAXSERV]; 1043 char ntop[NI_MAXHOST], strport[NI_MAXSERV];
1038 1044
1039 for (ai = options.listen_addrs; ai; ai = ai->ai_next) { 1045 for (ai = la->addrs; ai; ai = ai->ai_next) {
1040 if (ai->ai_family != AF_INET && ai->ai_family != AF_INET6) 1046 if (ai->ai_family != AF_INET && ai->ai_family != AF_INET6)
1041 continue; 1047 continue;
1042 if (num_listen_socks >= MAX_LISTEN_SOCKS) 1048 if (num_listen_socks >= MAX_LISTEN_SOCKS)
@@ -1066,13 +1072,13 @@ server_listen(void)
1066 close(listen_sock); 1072 close(listen_sock);
1067 continue; 1073 continue;
1068 } 1074 }
1069 /* 1075 /* Socket options */
1070 * Set socket options. 1076 set_reuseaddr(listen_sock);
1071 * Allow local port reuse in TIME_WAIT. 1077 if (la->rdomain != NULL &&
1072 */ 1078 set_rdomain(listen_sock, la->rdomain) == -1) {
1073 if (setsockopt(listen_sock, SOL_SOCKET, SO_REUSEADDR, 1079 close(listen_sock);
1074 &on, sizeof(on)) == -1) 1080 continue;
1075 error("setsockopt SO_REUSEADDR: %s", strerror(errno)); 1081 }
1076 1082
1077 /* Only communicate in IPv6 over AF_INET6 sockets. */ 1083 /* Only communicate in IPv6 over AF_INET6 sockets. */
1078 if (ai->ai_family == AF_INET6) 1084 if (ai->ai_family == AF_INET6)
@@ -1094,9 +1100,28 @@ server_listen(void)
1094 if (listen(listen_sock, SSH_LISTEN_BACKLOG) < 0) 1100 if (listen(listen_sock, SSH_LISTEN_BACKLOG) < 0)
1095 fatal("listen on [%s]:%s: %.100s", 1101 fatal("listen on [%s]:%s: %.100s",
1096 ntop, strport, strerror(errno)); 1102 ntop, strport, strerror(errno));
1097 logit("Server listening on %s port %s.", ntop, strport); 1103 logit("Server listening on %s port %s%s%s.",
1104 ntop, strport,
1105 la->rdomain == NULL ? "" : " rdomain ",
1106 la->rdomain == NULL ? "" : la->rdomain);
1107 }
1108}
1109
1110static void
1111server_listen(void)
1112{
1113 u_int i;
1114
1115 for (i = 0; i < options.num_listen_addrs; i++) {
1116 listen_on_addrs(&options.listen_addrs[i]);
1117 freeaddrinfo(options.listen_addrs[i].addrs);
1118 free(options.listen_addrs[i].rdomain);
1119 memset(&options.listen_addrs[i], 0,
1120 sizeof(options.listen_addrs[i]));
1098 } 1121 }
1099 freeaddrinfo(options.listen_addrs); 1122 free(options.listen_addrs);
1123 options.listen_addrs = NULL;
1124 options.num_listen_addrs = 0;
1100 1125
1101 if (!num_listen_socks) 1126 if (!num_listen_socks)
1102 fatal("Cannot bind any address."); 1127 fatal("Cannot bind any address.");
@@ -1364,6 +1389,46 @@ check_ip_options(struct ssh *ssh)
1364#endif /* IP_OPTIONS */ 1389#endif /* IP_OPTIONS */
1365} 1390}
1366 1391
1392/* Set the routing domain for this process */
1393static void
1394set_process_rdomain(struct ssh *ssh, const char *name)
1395{
1396#if defined(HAVE_SYS_SET_PROCESS_RDOMAIN)
1397 if (name == NULL)
1398 return; /* default */
1399
1400 if (strcmp(name, "%D") == 0) {
1401 /* "expands" to routing domain of connection */
1402 if ((name = ssh_packet_rdomain_in(ssh)) == NULL)
1403 return;
1404 }
1405 /* NB. We don't pass 'ssh' to sys_set_process_rdomain() */
1406 return sys_set_process_rdomain(name);
1407#elif defined(__OpenBSD__)
1408 int rtable, ortable = getrtable();
1409 const char *errstr;
1410
1411 if (name == NULL)
1412 return; /* default */
1413
1414 if (strcmp(name, "%D") == 0) {
1415 /* "expands" to routing domain of connection */
1416 if ((name = ssh_packet_rdomain_in(ssh)) == NULL)
1417 return;
1418 }
1419
1420 rtable = (int)strtonum(name, 0, 255, &errstr);
1421 if (errstr != NULL) /* Shouldn't happen */
1422 fatal("Invalid routing domain \"%s\": %s", name, errstr);
1423 if (rtable != ortable && setrtable(rtable) != 0)
1424 fatal("Unable to set routing domain %d: %s",
1425 rtable, strerror(errno));
1426 debug("%s: set routing domain %d (was %d)", __func__, rtable, ortable);
1427#else /* defined(__OpenBSD__) */
1428 fatal("Unable to set routing domain: not supported in this platform");
1429#endif
1430}
1431
1367/* 1432/*
1368 * Main program for the daemon. 1433 * Main program for the daemon.
1369 */ 1434 */
@@ -1373,20 +1438,19 @@ main(int ac, char **av)
1373 struct ssh *ssh = NULL; 1438 struct ssh *ssh = NULL;
1374 extern char *optarg; 1439 extern char *optarg;
1375 extern int optind; 1440 extern int optind;
1376 int r, opt, i, j, on = 1, already_daemon; 1441 int r, opt, on = 1, already_daemon, remote_port;
1377 int sock_in = -1, sock_out = -1, newsock = -1; 1442 int sock_in = -1, sock_out = -1, newsock = -1;
1378 const char *remote_ip; 1443 const char *remote_ip, *rdomain;
1379 int remote_port;
1380 char *fp, *line, *laddr, *logfile = NULL; 1444 char *fp, *line, *laddr, *logfile = NULL;
1381 int config_s[2] = { -1 , -1 }; 1445 int config_s[2] = { -1 , -1 };
1382 u_int n; 1446 u_int i, j;
1383 u_int64_t ibytes, obytes; 1447 u_int64_t ibytes, obytes;
1384 mode_t new_umask; 1448 mode_t new_umask;
1385 struct sshkey *key; 1449 struct sshkey *key;
1386 struct sshkey *pubkey; 1450 struct sshkey *pubkey;
1387 int keytype; 1451 int keytype;
1388 Authctxt *authctxt; 1452 Authctxt *authctxt;
1389 struct connection_info *connection_info = get_connection_info(0, 0); 1453 struct connection_info *connection_info = NULL;
1390 1454
1391 ssh_malloc_init(); /* must be called before any mallocs */ 1455 ssh_malloc_init(); /* must be called before any mallocs */
1392 1456
@@ -1399,7 +1463,7 @@ main(int ac, char **av)
1399 saved_argc = ac; 1463 saved_argc = ac;
1400 rexec_argc = ac; 1464 rexec_argc = ac;
1401 saved_argv = xcalloc(ac + 1, sizeof(*saved_argv)); 1465 saved_argv = xcalloc(ac + 1, sizeof(*saved_argv));
1402 for (i = 0; i < ac; i++) 1466 for (i = 0; (int)i < ac; i++)
1403 saved_argv[i] = xstrdup(av[i]); 1467 saved_argv[i] = xstrdup(av[i]);
1404 saved_argv[i] = NULL; 1468 saved_argv[i] = NULL;
1405 1469
@@ -1432,12 +1496,8 @@ main(int ac, char **av)
1432 config_file_name = optarg; 1496 config_file_name = optarg;
1433 break; 1497 break;
1434 case 'c': 1498 case 'c':
1435 if (options.num_host_cert_files >= MAX_HOSTCERTS) { 1499 servconf_add_hostcert("[command-line]", 0,
1436 fprintf(stderr, "too many host certificates.\n"); 1500 &options, optarg);
1437 exit(1);
1438 }
1439 options.host_cert_files[options.num_host_cert_files++] =
1440 derelativise_path(optarg);
1441 break; 1501 break;
1442 case 'd': 1502 case 'd':
1443 if (debug_flag == 0) { 1503 if (debug_flag == 0) {
@@ -1496,12 +1556,8 @@ main(int ac, char **av)
1496 /* protocol 1, ignored */ 1556 /* protocol 1, ignored */
1497 break; 1557 break;
1498 case 'h': 1558 case 'h':
1499 if (options.num_host_key_files >= MAX_HOSTKEYS) { 1559 servconf_add_hostkey("[command-line]", 0,
1500 fprintf(stderr, "too many host keys.\n"); 1560 &options, optarg);
1501 exit(1);
1502 }
1503 options.host_key_files[options.num_host_key_files++] =
1504 derelativise_path(optarg);
1505 break; 1561 break;
1506 case 't': 1562 case 't':
1507 test_flag = 1; 1563 test_flag = 1;
@@ -1510,6 +1566,7 @@ main(int ac, char **av)
1510 test_flag = 2; 1566 test_flag = 2;
1511 break; 1567 break;
1512 case 'C': 1568 case 'C':
1569 connection_info = get_connection_info(0, 0);
1513 if (parse_server_match_testspec(connection_info, 1570 if (parse_server_match_testspec(connection_info,
1514 optarg) == -1) 1571 optarg) == -1)
1515 exit(1); 1572 exit(1);
@@ -1568,24 +1625,13 @@ main(int ac, char **av)
1568 if (getenv("KRB5CCNAME") != NULL) 1625 if (getenv("KRB5CCNAME") != NULL)
1569 (void) unsetenv("KRB5CCNAME"); 1626 (void) unsetenv("KRB5CCNAME");
1570 1627
1571#ifdef _UNICOS
1572 /* Cray can define user privs drop all privs now!
1573 * Not needed on PRIV_SU systems!
1574 */
1575 drop_cray_privs();
1576#endif
1577
1578 sensitive_data.have_ssh2_key = 0; 1628 sensitive_data.have_ssh2_key = 0;
1579 1629
1580 /* 1630 /*
1581 * If we're doing an extended config test, make sure we have all of 1631 * If we're not doing an extended test do not silently ignore connection
1582 * the parameters we need. If we're not doing an extended test, 1632 * test params.
1583 * do not silently ignore connection test params.
1584 */ 1633 */
1585 if (test_flag >= 2 && server_match_spec_complete(connection_info) == 0) 1634 if (test_flag < 2 && connection_info != NULL)
1586 fatal("user, host and addr are all required when testing "
1587 "Match configs");
1588 if (test_flag < 2 && server_match_spec_complete(connection_info) >= 0)
1589 fatal("Config test connection parameter (-C) provided without " 1635 fatal("Config test connection parameter (-C) provided without "
1590 "test mode (-T)"); 1636 "test mode (-T)");
1591 1637
@@ -1627,12 +1673,12 @@ main(int ac, char **av)
1627 * and warns for trivial misconfigurations that could break login. 1673 * and warns for trivial misconfigurations that could break login.
1628 */ 1674 */
1629 if (options.num_auth_methods != 0) { 1675 if (options.num_auth_methods != 0) {
1630 for (n = 0; n < options.num_auth_methods; n++) { 1676 for (i = 0; i < options.num_auth_methods; i++) {
1631 if (auth2_methods_valid(options.auth_methods[n], 1677 if (auth2_methods_valid(options.auth_methods[i],
1632 1) == 0) 1678 1) == 0)
1633 break; 1679 break;
1634 } 1680 }
1635 if (n >= options.num_auth_methods) 1681 if (i >= options.num_auth_methods)
1636 fatal("AuthenticationMethods cannot be satisfied by " 1682 fatal("AuthenticationMethods cannot be satisfied by "
1637 "enabled authentication methods"); 1683 "enabled authentication methods");
1638 } 1684 }
@@ -1658,10 +1704,8 @@ main(int ac, char **av)
1658 fatal("Privilege separation user %s does not exist", 1704 fatal("Privilege separation user %s does not exist",
1659 SSH_PRIVSEP_USER); 1705 SSH_PRIVSEP_USER);
1660 } else { 1706 } else {
1661 explicit_bzero(privsep_pw->pw_passwd,
1662 strlen(privsep_pw->pw_passwd));
1663 privsep_pw = pwcopy(privsep_pw); 1707 privsep_pw = pwcopy(privsep_pw);
1664 free(privsep_pw->pw_passwd); 1708 freezero(privsep_pw->pw_passwd, strlen(privsep_pw->pw_passwd));
1665 privsep_pw->pw_passwd = xstrdup("*"); 1709 privsep_pw->pw_passwd = xstrdup("*");
1666 } 1710 }
1667 endpwent(); 1711 endpwent();
@@ -1713,6 +1757,7 @@ main(int ac, char **av)
1713 case KEY_DSA: 1757 case KEY_DSA:
1714 case KEY_ECDSA: 1758 case KEY_ECDSA:
1715 case KEY_ED25519: 1759 case KEY_ED25519:
1760 case KEY_XMSS:
1716 if (have_agent || key != NULL) 1761 if (have_agent || key != NULL)
1717 sensitive_data.have_ssh2_key = 1; 1762 sensitive_data.have_ssh2_key = 1;
1718 break; 1763 break;
@@ -1771,7 +1816,7 @@ main(int ac, char **av)
1771 continue; 1816 continue;
1772 } 1817 }
1773 sensitive_data.host_certificates[j] = key; 1818 sensitive_data.host_certificates[j] = key;
1774 debug("host certificate: #%d type %d %s", j, key->type, 1819 debug("host certificate: #%u type %d %s", j, key->type,
1775 key_type(key)); 1820 key_type(key));
1776 } 1821 }
1777 1822
@@ -1795,8 +1840,13 @@ main(int ac, char **av)
1795 } 1840 }
1796 1841
1797 if (test_flag > 1) { 1842 if (test_flag > 1) {
1798 if (server_match_spec_complete(connection_info) == 1) 1843 /*
1799 parse_server_match_config(&options, connection_info); 1844 * If no connection info was provided by -C then use
1845 * use a blank one that will cause no predicate to match.
1846 */
1847 if (connection_info == NULL)
1848 connection_info = get_connection_info(0, 0);
1849 parse_server_match_config(&options, connection_info);
1800 dump_config(&options); 1850 dump_config(&options);
1801 } 1851 }
1802 1852
@@ -1815,8 +1865,10 @@ main(int ac, char **av)
1815 debug("setgroups() failed: %.200s", strerror(errno)); 1865 debug("setgroups() failed: %.200s", strerror(errno));
1816 1866
1817 if (rexec_flag) { 1867 if (rexec_flag) {
1868 if (rexec_argc < 0)
1869 fatal("rexec_argc %d < 0", rexec_argc);
1818 rexec_argv = xcalloc(rexec_argc + 2, sizeof(char *)); 1870 rexec_argv = xcalloc(rexec_argc + 2, sizeof(char *));
1819 for (i = 0; i < rexec_argc; i++) { 1871 for (i = 0; i < (u_int)rexec_argc; i++) {
1820 debug("rexec_argv[%d]='%s'", i, saved_argv[i]); 1872 debug("rexec_argv[%d]='%s'", i, saved_argv[i]);
1821 rexec_argv[i] = saved_argv[i]; 1873 rexec_argv[i] = saved_argv[i];
1822 } 1874 }
@@ -1994,6 +2046,9 @@ main(int ac, char **av)
1994 cleanup_exit(255); 2046 cleanup_exit(255);
1995 } 2047 }
1996 2048
2049 if (options.routing_domain != NULL)
2050 set_process_rdomain(ssh, options.routing_domain);
2051
1997 /* 2052 /*
1998 * The rest of the code depends on the fact that 2053 * The rest of the code depends on the fact that
1999 * ssh_remote_ipaddr() caches the remote ip, even if 2054 * ssh_remote_ipaddr() caches the remote ip, even if
@@ -2023,10 +2078,15 @@ main(int ac, char **av)
2023 } 2078 }
2024#endif /* LIBWRAP */ 2079#endif /* LIBWRAP */
2025 2080
2081 rdomain = ssh_packet_rdomain_in(ssh);
2082
2026 /* Log the connection. */ 2083 /* Log the connection. */
2027 laddr = get_local_ipaddr(sock_in); 2084 laddr = get_local_ipaddr(sock_in);
2028 verbose("Connection from %s port %d on %s port %d", 2085 verbose("Connection from %s port %d on %s port %d%s%s%s",
2029 remote_ip, remote_port, laddr, ssh_local_port(ssh)); 2086 remote_ip, remote_port, laddr, ssh_local_port(ssh),
2087 rdomain == NULL ? "" : " rdomain \"",
2088 rdomain == NULL ? "" : rdomain,
2089 rdomain == NULL ? "" : "\"");
2030 free(laddr); 2090 free(laddr);
2031 2091
2032#ifdef USE_SECURITY_SESSION_API 2092#ifdef USE_SECURITY_SESSION_API
@@ -2106,6 +2166,10 @@ main(int ac, char **av)
2106 /* XXX global for cleanup, access from other modules */ 2166 /* XXX global for cleanup, access from other modules */
2107 the_authctxt = authctxt; 2167 the_authctxt = authctxt;
2108 2168
2169 /* Set default key authentication options */
2170 if ((auth_opts = sshauthopt_new_with_keys_defaults()) == NULL)
2171 fatal("allocation failed");
2172
2109 /* prepare buffer to collect messages to display to user after login */ 2173 /* prepare buffer to collect messages to display to user after login */
2110 buffer_init(&loginmsg); 2174 buffer_init(&loginmsg);
2111 auth_debug_reset(); 2175 auth_debug_reset();
@@ -2162,7 +2226,7 @@ main(int ac, char **av)
2162#ifdef USE_PAM 2226#ifdef USE_PAM
2163 if (options.use_pam) { 2227 if (options.use_pam) {
2164 do_pam_setcred(1); 2228 do_pam_setcred(1);
2165 do_pam_session(); 2229 do_pam_session(ssh);
2166 } 2230 }
2167#endif 2231#endif
2168 2232
diff --git a/sshd_config b/sshd_config
index a32dc1d46..31e14a4f0 100644
--- a/sshd_config
+++ b/sshd_config
@@ -1,4 +1,4 @@
1# $OpenBSD: sshd_config,v 1.101 2017/03/14 07:19:07 djm Exp $ 1# $OpenBSD: sshd_config,v 1.102 2018/02/16 02:32:40 djm Exp $
2 2
3# This is the sshd server system-wide configuration file. See 3# This is the sshd server system-wide configuration file. See
4# sshd_config(5) for more information. 4# sshd_config(5) for more information.
diff --git a/sshd_config.0 b/sshd_config.0
index 678ee14b4..95c17fc8d 100644
--- a/sshd_config.0
+++ b/sshd_config.0
@@ -6,9 +6,10 @@ NAME
6DESCRIPTION 6DESCRIPTION
7 sshd(8) reads configuration data from /etc/ssh/sshd_config (or the file 7 sshd(8) reads configuration data from /etc/ssh/sshd_config (or the file
8 specified with -f on the command line). The file contains keyword- 8 specified with -f on the command line). The file contains keyword-
9 argument pairs, one per line. Lines starting with M-bM-^@M-^X#M-bM-^@M-^Y and empty lines 9 argument pairs, one per line. For each keyword, the first obtained value
10 are interpreted as comments. Arguments may optionally be enclosed in 10 will be used. Lines starting with M-bM-^@M-^X#M-bM-^@M-^Y and empty lines are interpreted as
11 double quotes (") in order to represent arguments containing spaces. 11 comments. Arguments may optionally be enclosed in double quotes (") in
12 order to represent arguments containing spaces.
12 13
13 The possible keywords and their meanings are as follows (note that 14 The possible keywords and their meanings are as follows (note that
14 keywords are case-insensitive and arguments are case-sensitive): 15 keywords are case-insensitive and arguments are case-sensitive):
@@ -422,9 +423,8 @@ DESCRIPTION
422 423
423 HostKey 424 HostKey
424 Specifies a file containing a private host key used by SSH. The 425 Specifies a file containing a private host key used by SSH. The
425 defaults are /etc/ssh/ssh_host_dsa_key, 426 defaults are /etc/ssh/ssh_host_ecdsa_key,
426 /etc/ssh/ssh_host_ecdsa_key, /etc/ssh/ssh_host_ed25519_key and 427 /etc/ssh/ssh_host_ed25519_key and /etc/ssh/ssh_host_rsa_key.
427 /etc/ssh/ssh_host_rsa_key.
428 428
429 Note that sshd(8) will refuse to use a file if it is group/world- 429 Note that sshd(8) will refuse to use a file if it is group/world-
430 accessible and that the HostKeyAlgorithms option restricts which 430 accessible and that the HostKeyAlgorithms option restricts which
@@ -465,8 +465,9 @@ DESCRIPTION
465 465
466 IgnoreUserKnownHosts 466 IgnoreUserKnownHosts
467 Specifies whether sshd(8) should ignore the user's 467 Specifies whether sshd(8) should ignore the user's
468 ~/.ssh/known_hosts during HostbasedAuthentication. The default 468 ~/.ssh/known_hosts during HostbasedAuthentication and use only
469 is no. 469 the system-wide known hosts file /etc/ssh/known_hosts. The
470 default is no.
470 471
471 IPQoS Specifies the IPv4 type-of-service or DSCP class for the 472 IPQoS Specifies the IPv4 type-of-service or DSCP class for the
472 connection. Accepted values are af11, af12, af13, af21, af22, 473 connection. Accepted values are af11, af12, af13, af21, af22,
@@ -521,6 +522,9 @@ DESCRIPTION
521 curve25519-sha256@libssh.org 522 curve25519-sha256@libssh.org
522 diffie-hellman-group1-sha1 523 diffie-hellman-group1-sha1
523 diffie-hellman-group14-sha1 524 diffie-hellman-group14-sha1
525 diffie-hellman-group14-sha256
526 diffie-hellman-group16-sha512
527 diffie-hellman-group18-sha512
524 diffie-hellman-group-exchange-sha1 528 diffie-hellman-group-exchange-sha1
525 diffie-hellman-group-exchange-sha256 529 diffie-hellman-group-exchange-sha256
526 ecdh-sha2-nistp256 530 ecdh-sha2-nistp256
@@ -532,7 +536,8 @@ DESCRIPTION
532 curve25519-sha256,curve25519-sha256@libssh.org, 536 curve25519-sha256,curve25519-sha256@libssh.org,
533 ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521, 537 ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,
534 diffie-hellman-group-exchange-sha256, 538 diffie-hellman-group-exchange-sha256,
535 diffie-hellman-group14-sha1 539 diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,
540 diffie-hellman-group14-sha256,diffie-hellman-group14-sha1
536 541
537 The list of available key exchange algorithms may also be 542 The list of available key exchange algorithms may also be
538 obtained using "ssh -Q kex". 543 obtained using "ssh -Q kex".
@@ -541,13 +546,18 @@ DESCRIPTION
541 Specifies the local addresses sshd(8) should listen on. The 546 Specifies the local addresses sshd(8) should listen on. The
542 following forms may be used: 547 following forms may be used:
543 548
544 ListenAddress host|IPv4_addr|IPv6_addr 549 ListenAddress hostname|address [rdomain domain]
545 ListenAddress host|IPv4_addr:port 550 ListenAddress hostname:port [rdomain domain]
546 ListenAddress [host|IPv6_addr]:port 551 ListenAddress IPv4_address:port [rdomain domain]
552 ListenAddress [hostname|address]:port [rdomain domain]
547 553
548 If port is not specified, sshd will listen on the address and all 554 The optional rdomain qualifier requests sshd(8) listen in an
549 Port options specified. The default is to listen on all local 555 explicit routing domain. If port is not specified, sshd will
550 addresses. Multiple ListenAddress options are permitted. 556 listen on the address and all Port options specified. The
557 default is to listen on all local addresses on the current
558 default routing domain. Multiple ListenAddress options are
559 permitted. For more information on routing domains, see
560 rdomain(4).
551 561
552 LoginGraceTime 562 LoginGraceTime
553 The server disconnects after this time if the user has not 563 The server disconnects after this time if the user has not
@@ -612,10 +622,13 @@ DESCRIPTION
612 622
613 The arguments to Match are one or more criteria-pattern pairs or 623 The arguments to Match are one or more criteria-pattern pairs or
614 the single token All which matches all criteria. The available 624 the single token All which matches all criteria. The available
615 criteria are User, Group, Host, LocalAddress, LocalPort, and 625 criteria are User, Group, Host, LocalAddress, LocalPort, RDomain,
616 Address. The match patterns may consist of single entries or 626 and Address (with RDomain representing the rdomain(4) on which
617 comma-separated lists and may use the wildcard and negation 627 the connection was received.)
618 operators described in the PATTERNS section of ssh_config(5). 628
629 The match patterns may consist of single entries or comma-
630 separated lists and may use the wildcard and negation operators
631 described in the PATTERNS section of ssh_config(5).
619 632
620 The patterns in an Address criteria may additionally contain 633 The patterns in an Address criteria may additionally contain
621 addresses to match in CIDR address/masklen format, such as 634 addresses to match in CIDR address/masklen format, such as
@@ -640,7 +653,7 @@ DESCRIPTION
640 MaxAuthTries, MaxSessions, PasswordAuthentication, 653 MaxAuthTries, MaxSessions, PasswordAuthentication,
641 PermitEmptyPasswords, PermitOpen, PermitRootLogin, PermitTTY, 654 PermitEmptyPasswords, PermitOpen, PermitRootLogin, PermitTTY,
642 PermitTunnel, PermitUserRC, PubkeyAcceptedKeyTypes, 655 PermitTunnel, PermitUserRC, PubkeyAcceptedKeyTypes,
643 PubkeyAuthentication, RekeyLimit, RevokedKeys, 656 PubkeyAuthentication, RekeyLimit, RevokedKeys, RDomain,
644 StreamLocalBindMask, StreamLocalBindUnlink, TrustedUserCAKeys, 657 StreamLocalBindMask, StreamLocalBindUnlink, TrustedUserCAKeys,
645 X11DisplayOffset, X11Forwarding and X11UseLocalHost. 658 X11DisplayOffset, X11Forwarding and X11UseLocalHost.
646 659
@@ -700,12 +713,12 @@ DESCRIPTION
700 713
701 PermitRootLogin 714 PermitRootLogin
702 Specifies whether root can log in using ssh(1). The argument 715 Specifies whether root can log in using ssh(1). The argument
703 must be yes, prohibit-password, without-password, 716 must be yes, prohibit-password, forced-commands-only, or no. The
704 forced-commands-only, or no. The default is prohibit-password. 717 default is prohibit-password.
705 718
706 If this option is set to prohibit-password or without-password, 719 If this option is set to prohibit-password (or its deprecated
707 password and keyboard-interactive authentication are disabled for 720 alias, without-password), password and keyboard-interactive
708 root. 721 authentication are disabled for root.
709 722
710 If this option is set to forced-commands-only, root login with 723 If this option is set to forced-commands-only, root login with
711 public key authentication will be allowed, but only if the 724 public key authentication will be allowed, but only if the
@@ -807,6 +820,13 @@ DESCRIPTION
807 ssh-keygen(1). For more information on KRLs, see the KEY 820 ssh-keygen(1). For more information on KRLs, see the KEY
808 REVOCATION LISTS section in ssh-keygen(1). 821 REVOCATION LISTS section in ssh-keygen(1).
809 822
823 RDomain
824 Specifies an explicit routing domain that is applied after
825 authentication has completed. The user session, as well and any
826 forwarded or listening IP sockets, will be bound to this
827 rdomain(4). If the routing domain is set to %D, then the domain
828 in which the incoming connection was received will be applied.
829
810 StreamLocalBindMask 830 StreamLocalBindMask
811 Sets the octal file creation mode mask (umask) used when creating 831 Sets the octal file creation mode mask (umask) used when creating
812 a Unix-domain socket file for local or remote port forwarding. 832 a Unix-domain socket file for local or remote port forwarding.
@@ -980,6 +1000,8 @@ TOKENS
980 runtime: 1000 runtime:
981 1001
982 %% A literal M-bM-^@M-^X%M-bM-^@M-^Y. 1002 %% A literal M-bM-^@M-^X%M-bM-^@M-^Y.
1003 %D The routing domain in which the incoming connection was
1004 received.
983 %F The fingerprint of the CA key. 1005 %F The fingerprint of the CA key.
984 %f The fingerprint of the key or certificate. 1006 %f The fingerprint of the key or certificate.
985 %h The home directory of the user. 1007 %h The home directory of the user.
@@ -1002,6 +1024,8 @@ TOKENS
1002 1024
1003 ChrootDirectory accepts the tokens %%, %h, and %u. 1025 ChrootDirectory accepts the tokens %%, %h, and %u.
1004 1026
1027 RoutingDomain accepts the token %D.
1028
1005FILES 1029FILES
1006 /etc/ssh/sshd_config 1030 /etc/ssh/sshd_config
1007 Contains configuration data for sshd(8). This file should be 1031 Contains configuration data for sshd(8). This file should be
@@ -1019,4 +1043,4 @@ AUTHORS
1019 versions 1.5 and 2.0. Niels Provos and Markus Friedl contributed support 1043 versions 1.5 and 2.0. Niels Provos and Markus Friedl contributed support
1020 for privilege separation. 1044 for privilege separation.
1021 1045
1022OpenBSD 6.2 September 27, 2017 OpenBSD 6.2 1046OpenBSD 6.2 February 16, 2018 OpenBSD 6.2
diff --git a/sshd_config.5 b/sshd_config.5
index ef520680f..4c7ee4254 100644
--- a/sshd_config.5
+++ b/sshd_config.5
@@ -33,8 +33,8 @@
33.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 33.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
34.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35.\" 35.\"
36.\" $OpenBSD: sshd_config.5,v 1.253 2017/09/27 06:45:53 jmc Exp $ 36.\" $OpenBSD: sshd_config.5,v 1.263 2018/02/16 02:40:45 djm Exp $
37.Dd $Mdocdate: September 27 2017 $ 37.Dd $Mdocdate: February 16 2018 $
38.Dt SSHD_CONFIG 5 38.Dt SSHD_CONFIG 5
39.Os 39.Os
40.Sh NAME 40.Sh NAME
@@ -48,6 +48,7 @@ reads configuration data from
48.Fl f 48.Fl f
49on the command line). 49on the command line).
50The file contains keyword-argument pairs, one per line. 50The file contains keyword-argument pairs, one per line.
51For each keyword, the first obtained value will be used.
51Lines starting with 52Lines starting with
52.Ql # 53.Ql #
53and empty lines are interpreted as comments. 54and empty lines are interpreted as comments.
@@ -749,10 +750,10 @@ is not to load any certificates.
749Specifies a file containing a private host key 750Specifies a file containing a private host key
750used by SSH. 751used by SSH.
751The defaults are 752The defaults are
752.Pa /etc/ssh/ssh_host_rsa_key , 753.Pa /etc/ssh/ssh_host_ecdsa_key ,
753.Pa /etc/ssh/ssh_host_ecdsa_key 754.Pa /etc/ssh/ssh_host_ed25519_key
754and 755and
755.Pa /etc/ssh/ssh_host_ed25519_key . 756.Pa /etc/ssh/ssh_host_rsa_key .
756.Pp 757.Pp
757Note that 758Note that
758.Xr sshd 8 759.Xr sshd 8
@@ -811,7 +812,9 @@ Specifies whether
811should ignore the user's 812should ignore the user's
812.Pa ~/.ssh/known_hosts 813.Pa ~/.ssh/known_hosts
813during 814during
814.Cm HostbasedAuthentication . 815.Cm HostbasedAuthentication
816and use only the system-wide known hosts file
817.Pa /etc/ssh/known_hosts .
815The default is 818The default is
816.Cm no . 819.Cm no .
817.It Cm IPQoS 820.It Cm IPQoS
@@ -912,6 +915,12 @@ diffie-hellman-group1-sha1
912.It 915.It
913diffie-hellman-group14-sha1 916diffie-hellman-group14-sha1
914.It 917.It
918diffie-hellman-group14-sha256
919.It
920diffie-hellman-group16-sha512
921.It
922diffie-hellman-group18-sha512
923.It
915diffie-hellman-group-exchange-sha1 924diffie-hellman-group-exchange-sha1
916.It 925.It
917diffie-hellman-group-exchange-sha256 926diffie-hellman-group-exchange-sha256
@@ -928,7 +937,8 @@ The default is:
928curve25519-sha256,curve25519-sha256@libssh.org, 937curve25519-sha256,curve25519-sha256@libssh.org,
929ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521, 938ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,
930diffie-hellman-group-exchange-sha256, 939diffie-hellman-group-exchange-sha256,
931diffie-hellman-group14-sha1 940diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,
941diffie-hellman-group14-sha256,diffie-hellman-group14-sha1
932.Ed 942.Ed
933.Pp 943.Pp
934The list of available key exchange algorithms may also be obtained using 944The list of available key exchange algorithms may also be obtained using
@@ -943,31 +953,47 @@ The following forms may be used:
943.It 953.It
944.Cm ListenAddress 954.Cm ListenAddress
945.Sm off 955.Sm off
946.Ar host | Ar IPv4_addr | Ar IPv6_addr 956.Ar hostname | address
957.Sm on
958.Op Cm rdomain Ar domain
959.It
960.Cm ListenAddress
961.Sm off
962.Ar hostname : port
947.Sm on 963.Sm on
964.Op Cm rdomain Ar domain
948.It 965.It
949.Cm ListenAddress 966.Cm ListenAddress
950.Sm off 967.Sm off
951.Ar host | Ar IPv4_addr : Ar port 968.Ar IPv4_address : port
952.Sm on 969.Sm on
970.Op Cm rdomain Ar domain
953.It 971.It
954.Cm ListenAddress 972.Cm ListenAddress
955.Sm off 973.Sm off
956.Oo 974.Oo Ar hostname | address Oc : Ar port
957.Ar host | Ar IPv6_addr Oc : Ar port
958.Sm on 975.Sm on
976.Op Cm rdomain Ar domain
959.El 977.El
960.Pp 978.Pp
979The optional
980.Cm rdomain
981qualifier requests
982.Xr sshd 8
983listen in an explicit routing domain.
961If 984If
962.Ar port 985.Ar port
963is not specified, 986is not specified,
964sshd will listen on the address and all 987sshd will listen on the address and all
965.Cm Port 988.Cm Port
966options specified. 989options specified.
967The default is to listen on all local addresses. 990The default is to listen on all local addresses on the current default
991routing domain.
968Multiple 992Multiple
969.Cm ListenAddress 993.Cm ListenAddress
970options are permitted. 994options are permitted.
995For more information on routing domains, see
996.Xr rdomain 4 .
971.It Cm LoginGraceTime 997.It Cm LoginGraceTime
972The server disconnects after this time if the user has not 998The server disconnects after this time if the user has not
973successfully logged in. 999successfully logged in.
@@ -1071,8 +1097,15 @@ The available criteria are
1071.Cm Host , 1097.Cm Host ,
1072.Cm LocalAddress , 1098.Cm LocalAddress ,
1073.Cm LocalPort , 1099.Cm LocalPort ,
1100.Cm RDomain ,
1074and 1101and
1075.Cm Address . 1102.Cm Address
1103(with
1104.Cm RDomain
1105representing the
1106.Xr rdomain 4
1107on which the connection was received.)
1108.Pp
1076The match patterns may consist of single entries or comma-separated 1109The match patterns may consist of single entries or comma-separated
1077lists and may use the wildcard and negation operators described in the 1110lists and may use the wildcard and negation operators described in the
1078.Sx PATTERNS 1111.Sx PATTERNS
@@ -1135,6 +1168,7 @@ Available keywords are
1135.Cm PubkeyAuthentication , 1168.Cm PubkeyAuthentication ,
1136.Cm RekeyLimit , 1169.Cm RekeyLimit ,
1137.Cm RevokedKeys , 1170.Cm RevokedKeys ,
1171.Cm RDomain ,
1138.Cm StreamLocalBindMask , 1172.Cm StreamLocalBindMask ,
1139.Cm StreamLocalBindUnlink , 1173.Cm StreamLocalBindUnlink ,
1140.Cm TrustedUserCAKeys , 1174.Cm TrustedUserCAKeys ,
@@ -1223,7 +1257,6 @@ Specifies whether root can log in using
1223The argument must be 1257The argument must be
1224.Cm yes , 1258.Cm yes ,
1225.Cm prohibit-password , 1259.Cm prohibit-password ,
1226.Cm without-password ,
1227.Cm forced-commands-only , 1260.Cm forced-commands-only ,
1228or 1261or
1229.Cm no . 1262.Cm no .
@@ -1232,8 +1265,8 @@ The default is
1232.Pp 1265.Pp
1233If this option is set to 1266If this option is set to
1234.Cm prohibit-password 1267.Cm prohibit-password
1235or 1268(or its deprecated alias,
1236.Cm without-password , 1269.Cm without-password ) ,
1237password and keyboard-interactive authentication are disabled for root. 1270password and keyboard-interactive authentication are disabled for root.
1238.Pp 1271.Pp
1239If this option is set to 1272If this option is set to
@@ -1396,6 +1429,15 @@ an OpenSSH Key Revocation List (KRL) as generated by
1396.Xr ssh-keygen 1 . 1429.Xr ssh-keygen 1 .
1397For more information on KRLs, see the KEY REVOCATION LISTS section in 1430For more information on KRLs, see the KEY REVOCATION LISTS section in
1398.Xr ssh-keygen 1 . 1431.Xr ssh-keygen 1 .
1432.It Cm RDomain
1433Specifies an explicit routing domain that is applied after authentication
1434has completed.
1435The user session, as well and any forwarded or listening IP sockets,
1436will be bound to this
1437.Xr rdomain 4 .
1438If the routing domain is set to
1439.Cm \&%D ,
1440then the domain in which the incoming connection was received will be applied.
1399.It Cm StreamLocalBindMask 1441.It Cm StreamLocalBindMask
1400Sets the octal file creation mode mask 1442Sets the octal file creation mode mask
1401.Pq umask 1443.Pq umask
@@ -1664,6 +1706,8 @@ which are expanded at runtime:
1664.It %% 1706.It %%
1665A literal 1707A literal
1666.Sq % . 1708.Sq % .
1709.It \&%D
1710The routing domain in which the incoming connection was received.
1667.It %F 1711.It %F
1668The fingerprint of the CA key. 1712The fingerprint of the CA key.
1669.It %f 1713.It %f
@@ -1700,6 +1744,9 @@ accepts the tokens %%, %h, and %u.
1700.Pp 1744.Pp
1701.Cm ChrootDirectory 1745.Cm ChrootDirectory
1702accepts the tokens %%, %h, and %u. 1746accepts the tokens %%, %h, and %u.
1747.Pp
1748.Cm RoutingDomain
1749accepts the token %D.
1703.Sh FILES 1750.Sh FILES
1704.Bl -tag -width Ds 1751.Bl -tag -width Ds
1705.It Pa /etc/ssh/sshd_config 1752.It Pa /etc/ssh/sshd_config
diff --git a/sshkey-xmss.c b/sshkey-xmss.c
new file mode 100644
index 000000000..5d66ee790
--- /dev/null
+++ b/sshkey-xmss.c
@@ -0,0 +1,1055 @@
1/* $OpenBSD: sshkey-xmss.c,v 1.1 2018/02/23 15:58:38 markus Exp $ */
2/*
3 * Copyright (c) 2017 Markus Friedl. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#include "includes.h"
27#ifdef WITH_XMSS
28
29#include <sys/types.h>
30#include <sys/uio.h>
31
32#include <stdio.h>
33#include <string.h>
34#include <unistd.h>
35#include <fcntl.h>
36#include <errno.h>
37#ifdef HAVE_SYS_FILE_H
38# include <sys/file.h>
39#endif
40
41#include "ssh2.h"
42#include "ssherr.h"
43#include "sshbuf.h"
44#include "cipher.h"
45#include "sshkey.h"
46#include "sshkey-xmss.h"
47#include "atomicio.h"
48
49#include "xmss_fast.h"
50
51/* opaque internal XMSS state */
52#define XMSS_MAGIC "xmss-state-v1"
53#define XMSS_CIPHERNAME "aes256-gcm@openssh.com"
54struct ssh_xmss_state {
55 xmss_params params;
56 u_int32_t n, w, h, k;
57
58 bds_state bds;
59 u_char *stack;
60 u_int32_t stackoffset;
61 u_char *stacklevels;
62 u_char *auth;
63 u_char *keep;
64 u_char *th_nodes;
65 u_char *retain;
66 treehash_inst *treehash;
67
68 u_int32_t idx; /* state read from file */
69 u_int32_t maxidx; /* resticted # of signatures */
70 int have_state; /* .state file exists */
71 int lockfd; /* locked in sshkey_xmss_get_state() */
72 int allow_update; /* allow sshkey_xmss_update_state() */
73 char *enc_ciphername;/* encrypt state with cipher */
74 u_char *enc_keyiv; /* encrypt state with key */
75 u_int32_t enc_keyiv_len; /* length of enc_keyiv */
76};
77
78int sshkey_xmss_init_bds_state(struct sshkey *);
79int sshkey_xmss_init_enc_key(struct sshkey *, const char *);
80void sshkey_xmss_free_bds(struct sshkey *);
81int sshkey_xmss_get_state_from_file(struct sshkey *, const char *,
82 int *, sshkey_printfn *);
83int sshkey_xmss_encrypt_state(const struct sshkey *, struct sshbuf *,
84 struct sshbuf **);
85int sshkey_xmss_decrypt_state(const struct sshkey *, struct sshbuf *,
86 struct sshbuf **);
87int sshkey_xmss_serialize_enc_key(const struct sshkey *, struct sshbuf *);
88int sshkey_xmss_deserialize_enc_key(struct sshkey *, struct sshbuf *);
89
90#define PRINT(s...) do { if (pr) pr(s); } while (0)
91
92int
93sshkey_xmss_init(struct sshkey *key, const char *name)
94{
95 struct ssh_xmss_state *state;
96
97 if (key->xmss_state != NULL)
98 return SSH_ERR_INVALID_FORMAT;
99 if (name == NULL)
100 return SSH_ERR_INVALID_FORMAT;
101 state = calloc(sizeof(struct ssh_xmss_state), 1);
102 if (state == NULL)
103 return SSH_ERR_ALLOC_FAIL;
104 if (strcmp(name, XMSS_SHA2_256_W16_H10_NAME) == 0) {
105 state->n = 32;
106 state->w = 16;
107 state->h = 10;
108 } else if (strcmp(name, XMSS_SHA2_256_W16_H16_NAME) == 0) {
109 state->n = 32;
110 state->w = 16;
111 state->h = 16;
112 } else if (strcmp(name, XMSS_SHA2_256_W16_H20_NAME) == 0) {
113 state->n = 32;
114 state->w = 16;
115 state->h = 20;
116 } else {
117 free(state);
118 return SSH_ERR_KEY_TYPE_UNKNOWN;
119 }
120 if ((key->xmss_name = strdup(name)) == NULL) {
121 free(state);
122 return SSH_ERR_ALLOC_FAIL;
123 }
124 state->k = 2; /* XXX hardcoded */
125 state->lockfd = -1;
126 if (xmss_set_params(&state->params, state->n, state->h, state->w,
127 state->k) != 0) {
128 free(state);
129 return SSH_ERR_INVALID_FORMAT;
130 }
131 key->xmss_state = state;
132 return 0;
133}
134
135void
136sshkey_xmss_free_state(struct sshkey *key)
137{
138 struct ssh_xmss_state *state = key->xmss_state;
139
140 sshkey_xmss_free_bds(key);
141 if (state) {
142 if (state->enc_keyiv) {
143 explicit_bzero(state->enc_keyiv, state->enc_keyiv_len);
144 free(state->enc_keyiv);
145 }
146 free(state->enc_ciphername);
147 free(state);
148 }
149 key->xmss_state = NULL;
150}
151
152#define SSH_XMSS_K2_MAGIC "k=2"
153#define num_stack(x) ((x->h+1)*(x->n))
154#define num_stacklevels(x) (x->h+1)
155#define num_auth(x) ((x->h)*(x->n))
156#define num_keep(x) ((x->h >> 1)*(x->n))
157#define num_th_nodes(x) ((x->h - x->k)*(x->n))
158#define num_retain(x) (((1ULL << x->k) - x->k - 1) * (x->n))
159#define num_treehash(x) ((x->h) - (x->k))
160
161int
162sshkey_xmss_init_bds_state(struct sshkey *key)
163{
164 struct ssh_xmss_state *state = key->xmss_state;
165 u_int32_t i;
166
167 state->stackoffset = 0;
168 if ((state->stack = calloc(num_stack(state), 1)) == NULL ||
169 (state->stacklevels = calloc(num_stacklevels(state), 1))== NULL ||
170 (state->auth = calloc(num_auth(state), 1)) == NULL ||
171 (state->keep = calloc(num_keep(state), 1)) == NULL ||
172 (state->th_nodes = calloc(num_th_nodes(state), 1)) == NULL ||
173 (state->retain = calloc(num_retain(state), 1)) == NULL ||
174 (state->treehash = calloc(num_treehash(state),
175 sizeof(treehash_inst))) == NULL) {
176 sshkey_xmss_free_bds(key);
177 return SSH_ERR_ALLOC_FAIL;
178 }
179 for (i = 0; i < state->h - state->k; i++)
180 state->treehash[i].node = &state->th_nodes[state->n*i];
181 xmss_set_bds_state(&state->bds, state->stack, state->stackoffset,
182 state->stacklevels, state->auth, state->keep, state->treehash,
183 state->retain, 0);
184 return 0;
185}
186
187void
188sshkey_xmss_free_bds(struct sshkey *key)
189{
190 struct ssh_xmss_state *state = key->xmss_state;
191
192 if (state == NULL)
193 return;
194 free(state->stack);
195 free(state->stacklevels);
196 free(state->auth);
197 free(state->keep);
198 free(state->th_nodes);
199 free(state->retain);
200 free(state->treehash);
201 state->stack = NULL;
202 state->stacklevels = NULL;
203 state->auth = NULL;
204 state->keep = NULL;
205 state->th_nodes = NULL;
206 state->retain = NULL;
207 state->treehash = NULL;
208}
209
210void *
211sshkey_xmss_params(const struct sshkey *key)
212{
213 struct ssh_xmss_state *state = key->xmss_state;
214
215 if (state == NULL)
216 return NULL;
217 return &state->params;
218}
219
220void *
221sshkey_xmss_bds_state(const struct sshkey *key)
222{
223 struct ssh_xmss_state *state = key->xmss_state;
224
225 if (state == NULL)
226 return NULL;
227 return &state->bds;
228}
229
230int
231sshkey_xmss_siglen(const struct sshkey *key, size_t *lenp)
232{
233 struct ssh_xmss_state *state = key->xmss_state;
234
235 if (lenp == NULL)
236 return SSH_ERR_INVALID_ARGUMENT;
237 if (state == NULL)
238 return SSH_ERR_INVALID_FORMAT;
239 *lenp = 4 + state->n +
240 state->params.wots_par.keysize +
241 state->h * state->n;
242 return 0;
243}
244
245size_t
246sshkey_xmss_pklen(const struct sshkey *key)
247{
248 struct ssh_xmss_state *state = key->xmss_state;
249
250 if (state == NULL)
251 return 0;
252 return state->n * 2;
253}
254
255size_t
256sshkey_xmss_sklen(const struct sshkey *key)
257{
258 struct ssh_xmss_state *state = key->xmss_state;
259
260 if (state == NULL)
261 return 0;
262 return state->n * 4 + 4;
263}
264
265int
266sshkey_xmss_init_enc_key(struct sshkey *k, const char *ciphername)
267{
268 struct ssh_xmss_state *state = k->xmss_state;
269 const struct sshcipher *cipher;
270 size_t keylen = 0, ivlen = 0;
271
272 if (state == NULL)
273 return SSH_ERR_INVALID_ARGUMENT;
274 if ((cipher = cipher_by_name(ciphername)) == NULL)
275 return SSH_ERR_INTERNAL_ERROR;
276 if ((state->enc_ciphername = strdup(ciphername)) == NULL)
277 return SSH_ERR_ALLOC_FAIL;
278 keylen = cipher_keylen(cipher);
279 ivlen = cipher_ivlen(cipher);
280 state->enc_keyiv_len = keylen + ivlen;
281 if ((state->enc_keyiv = calloc(state->enc_keyiv_len, 1)) == NULL) {
282 free(state->enc_ciphername);
283 state->enc_ciphername = NULL;
284 return SSH_ERR_ALLOC_FAIL;
285 }
286 arc4random_buf(state->enc_keyiv, state->enc_keyiv_len);
287 return 0;
288}
289
290int
291sshkey_xmss_serialize_enc_key(const struct sshkey *k, struct sshbuf *b)
292{
293 struct ssh_xmss_state *state = k->xmss_state;
294 int r;
295
296 if (state == NULL || state->enc_keyiv == NULL ||
297 state->enc_ciphername == NULL)
298 return SSH_ERR_INVALID_ARGUMENT;
299 if ((r = sshbuf_put_cstring(b, state->enc_ciphername)) != 0 ||
300 (r = sshbuf_put_string(b, state->enc_keyiv,
301 state->enc_keyiv_len)) != 0)
302 return r;
303 return 0;
304}
305
306int
307sshkey_xmss_deserialize_enc_key(struct sshkey *k, struct sshbuf *b)
308{
309 struct ssh_xmss_state *state = k->xmss_state;
310 size_t len;
311 int r;
312
313 if (state == NULL)
314 return SSH_ERR_INVALID_ARGUMENT;
315 if ((r = sshbuf_get_cstring(b, &state->enc_ciphername, NULL)) != 0 ||
316 (r = sshbuf_get_string(b, &state->enc_keyiv, &len)) != 0)
317 return r;
318 state->enc_keyiv_len = len;
319 return 0;
320}
321
322int
323sshkey_xmss_serialize_pk_info(const struct sshkey *k, struct sshbuf *b,
324 enum sshkey_serialize_rep opts)
325{
326 struct ssh_xmss_state *state = k->xmss_state;
327 u_char have_info = 1;
328 u_int32_t idx;
329 int r;
330
331 if (state == NULL)
332 return SSH_ERR_INVALID_ARGUMENT;
333 if (opts != SSHKEY_SERIALIZE_INFO)
334 return 0;
335 idx = k->xmss_sk ? PEEK_U32(k->xmss_sk) : state->idx;
336 if ((r = sshbuf_put_u8(b, have_info)) != 0 ||
337 (r = sshbuf_put_u32(b, idx)) != 0 ||
338 (r = sshbuf_put_u32(b, state->maxidx)) != 0)
339 return r;
340 return 0;
341}
342
343int
344sshkey_xmss_deserialize_pk_info(struct sshkey *k, struct sshbuf *b)
345{
346 struct ssh_xmss_state *state = k->xmss_state;
347 u_char have_info;
348 int r;
349
350 if (state == NULL)
351 return SSH_ERR_INVALID_ARGUMENT;
352 /* optional */
353 if (sshbuf_len(b) == 0)
354 return 0;
355 if ((r = sshbuf_get_u8(b, &have_info)) != 0)
356 return r;
357 if (have_info != 1)
358 return SSH_ERR_INVALID_ARGUMENT;
359 if ((r = sshbuf_get_u32(b, &state->idx)) != 0 ||
360 (r = sshbuf_get_u32(b, &state->maxidx)) != 0)
361 return r;
362 return 0;
363}
364
365int
366sshkey_xmss_generate_private_key(struct sshkey *k, u_int bits)
367{
368 int r;
369 const char *name;
370
371 if (bits == 10) {
372 name = XMSS_SHA2_256_W16_H10_NAME;
373 } else if (bits == 16) {
374 name = XMSS_SHA2_256_W16_H16_NAME;
375 } else if (bits == 20) {
376 name = XMSS_SHA2_256_W16_H20_NAME;
377 } else {
378 name = XMSS_DEFAULT_NAME;
379 }
380 if ((r = sshkey_xmss_init(k, name)) != 0 ||
381 (r = sshkey_xmss_init_bds_state(k)) != 0 ||
382 (r = sshkey_xmss_init_enc_key(k, XMSS_CIPHERNAME)) != 0)
383 return r;
384 if ((k->xmss_pk = malloc(sshkey_xmss_pklen(k))) == NULL ||
385 (k->xmss_sk = malloc(sshkey_xmss_sklen(k))) == NULL) {
386 return SSH_ERR_ALLOC_FAIL;
387 }
388 xmss_keypair(k->xmss_pk, k->xmss_sk, sshkey_xmss_bds_state(k),
389 sshkey_xmss_params(k));
390 return 0;
391}
392
393int
394sshkey_xmss_get_state_from_file(struct sshkey *k, const char *filename,
395 int *have_file, sshkey_printfn *pr)
396{
397 struct sshbuf *b = NULL, *enc = NULL;
398 int ret = SSH_ERR_SYSTEM_ERROR, r, fd = -1;
399 u_int32_t len;
400 unsigned char buf[4], *data = NULL;
401
402 *have_file = 0;
403 if ((fd = open(filename, O_RDONLY)) >= 0) {
404 *have_file = 1;
405 if (atomicio(read, fd, buf, sizeof(buf)) != sizeof(buf)) {
406 PRINT("%s: corrupt state file: %s", __func__, filename);
407 goto done;
408 }
409 len = PEEK_U32(buf);
410 if ((data = calloc(len, 1)) == NULL) {
411 ret = SSH_ERR_ALLOC_FAIL;
412 goto done;
413 }
414 if (atomicio(read, fd, data, len) != len) {
415 PRINT("%s: cannot read blob: %s", __func__, filename);
416 goto done;
417 }
418 if ((enc = sshbuf_from(data, len)) == NULL) {
419 ret = SSH_ERR_ALLOC_FAIL;
420 goto done;
421 }
422 sshkey_xmss_free_bds(k);
423 if ((r = sshkey_xmss_decrypt_state(k, enc, &b)) != 0) {
424 ret = r;
425 goto done;
426 }
427 if ((r = sshkey_xmss_deserialize_state(k, b)) != 0) {
428 ret = r;
429 goto done;
430 }
431 ret = 0;
432 }
433done:
434 if (fd != -1)
435 close(fd);
436 free(data);
437 sshbuf_free(enc);
438 sshbuf_free(b);
439 return ret;
440}
441
442int
443sshkey_xmss_get_state(const struct sshkey *k, sshkey_printfn *pr)
444{
445 struct ssh_xmss_state *state = k->xmss_state;
446 u_int32_t idx = 0;
447 char *filename = NULL;
448 char *statefile = NULL, *ostatefile = NULL, *lockfile = NULL;
449 int lockfd = -1, have_state = 0, have_ostate, tries = 0;
450 int ret = SSH_ERR_INVALID_ARGUMENT, r;
451
452 if (state == NULL)
453 goto done;
454 /*
455 * If maxidx is set, then we are allowed a limited number
456 * of signatures, but don't need to access the disk.
457 * Otherwise we need to deal with the on-disk state.
458 */
459 if (state->maxidx) {
460 /* xmss_sk always contains the current state */
461 idx = PEEK_U32(k->xmss_sk);
462 if (idx < state->maxidx) {
463 state->allow_update = 1;
464 return 0;
465 }
466 return SSH_ERR_INVALID_ARGUMENT;
467 }
468 if ((filename = k->xmss_filename) == NULL)
469 goto done;
470 if (asprintf(&lockfile, "%s.lock", filename) < 0 ||
471 asprintf(&statefile, "%s.state", filename) < 0 ||
472 asprintf(&ostatefile, "%s.ostate", filename) < 0) {
473 ret = SSH_ERR_ALLOC_FAIL;
474 goto done;
475 }
476 if ((lockfd = open(lockfile, O_CREAT|O_RDONLY, 0600)) < 0) {
477 ret = SSH_ERR_SYSTEM_ERROR;
478 PRINT("%s: cannot open/create: %s", __func__, lockfile);
479 goto done;
480 }
481 while (flock(lockfd, LOCK_EX|LOCK_NB) < 0) {
482 if (errno != EWOULDBLOCK) {
483 ret = SSH_ERR_SYSTEM_ERROR;
484 PRINT("%s: cannot lock: %s", __func__, lockfile);
485 goto done;
486 }
487 if (++tries > 10) {
488 ret = SSH_ERR_SYSTEM_ERROR;
489 PRINT("%s: giving up on: %s", __func__, lockfile);
490 goto done;
491 }
492 usleep(1000*100*tries);
493 }
494 /* XXX no longer const */
495 if ((r = sshkey_xmss_get_state_from_file((struct sshkey *)k,
496 statefile, &have_state, pr)) != 0) {
497 if ((r = sshkey_xmss_get_state_from_file((struct sshkey *)k,
498 ostatefile, &have_ostate, pr)) == 0) {
499 state->allow_update = 1;
500 r = sshkey_xmss_forward_state(k, 1);
501 state->idx = PEEK_U32(k->xmss_sk);
502 state->allow_update = 0;
503 }
504 }
505 if (!have_state && !have_ostate) {
506 /* check that bds state is initialized */
507 if (state->bds.auth == NULL)
508 goto done;
509 PRINT("%s: start from scratch idx 0: %u", __func__, state->idx);
510 } else if (r != 0) {
511 ret = r;
512 goto done;
513 }
514 if (state->idx + 1 < state->idx) {
515 PRINT("%s: state wrap: %u", __func__, state->idx);
516 goto done;
517 }
518 state->have_state = have_state;
519 state->lockfd = lockfd;
520 state->allow_update = 1;
521 lockfd = -1;
522 ret = 0;
523done:
524 if (lockfd != -1)
525 close(lockfd);
526 free(lockfile);
527 free(statefile);
528 free(ostatefile);
529 return ret;
530}
531
532int
533sshkey_xmss_forward_state(const struct sshkey *k, u_int32_t reserve)
534{
535 struct ssh_xmss_state *state = k->xmss_state;
536 u_char *sig = NULL;
537 size_t required_siglen;
538 unsigned long long smlen;
539 u_char data;
540 int ret, r;
541
542 if (state == NULL || !state->allow_update)
543 return SSH_ERR_INVALID_ARGUMENT;
544 if (reserve == 0)
545 return SSH_ERR_INVALID_ARGUMENT;
546 if (state->idx + reserve <= state->idx)
547 return SSH_ERR_INVALID_ARGUMENT;
548 if ((r = sshkey_xmss_siglen(k, &required_siglen)) != 0)
549 return r;
550 if ((sig = malloc(required_siglen)) == NULL)
551 return SSH_ERR_ALLOC_FAIL;
552 while (reserve-- > 0) {
553 state->idx = PEEK_U32(k->xmss_sk);
554 smlen = required_siglen;
555 if ((ret = xmss_sign(k->xmss_sk, sshkey_xmss_bds_state(k),
556 sig, &smlen, &data, 0, sshkey_xmss_params(k))) != 0) {
557 r = SSH_ERR_INVALID_ARGUMENT;
558 break;
559 }
560 }
561 free(sig);
562 return r;
563}
564
565int
566sshkey_xmss_update_state(const struct sshkey *k, sshkey_printfn *pr)
567{
568 struct ssh_xmss_state *state = k->xmss_state;
569 struct sshbuf *b = NULL, *enc = NULL;
570 u_int32_t idx = 0;
571 unsigned char buf[4];
572 char *filename = NULL;
573 char *statefile = NULL, *ostatefile = NULL, *nstatefile = NULL;
574 int fd = -1;
575 int ret = SSH_ERR_INVALID_ARGUMENT;
576
577 if (state == NULL || !state->allow_update)
578 return ret;
579 if (state->maxidx) {
580 /* no update since the number of signatures is limited */
581 ret = 0;
582 goto done;
583 }
584 idx = PEEK_U32(k->xmss_sk);
585 if (idx == state->idx) {
586 /* no signature happend, no need to update */
587 ret = 0;
588 goto done;
589 } else if (idx != state->idx + 1) {
590 PRINT("%s: more than one signature happened: idx %u state %u",
591 __func__, idx, state->idx);
592 goto done;
593 }
594 state->idx = idx;
595 if ((filename = k->xmss_filename) == NULL)
596 goto done;
597 if (asprintf(&statefile, "%s.state", filename) < 0 ||
598 asprintf(&ostatefile, "%s.ostate", filename) < 0 ||
599 asprintf(&nstatefile, "%s.nstate", filename) < 0) {
600 ret = SSH_ERR_ALLOC_FAIL;
601 goto done;
602 }
603 unlink(nstatefile);
604 if ((b = sshbuf_new()) == NULL) {
605 ret = SSH_ERR_ALLOC_FAIL;
606 goto done;
607 }
608 if ((ret = sshkey_xmss_serialize_state(k, b)) != 0) {
609 PRINT("%s: SERLIALIZE FAILED: %d", __func__, ret);
610 goto done;
611 }
612 if ((ret = sshkey_xmss_encrypt_state(k, b, &enc)) != 0) {
613 PRINT("%s: ENCRYPT FAILED: %d", __func__, ret);
614 goto done;
615 }
616 if ((fd = open(nstatefile, O_CREAT|O_WRONLY|O_EXCL, 0600)) < 0) {
617 ret = SSH_ERR_SYSTEM_ERROR;
618 PRINT("%s: open new state file: %s", __func__, nstatefile);
619 goto done;
620 }
621 POKE_U32(buf, sshbuf_len(enc));
622 if (atomicio(vwrite, fd, buf, sizeof(buf)) != sizeof(buf)) {
623 ret = SSH_ERR_SYSTEM_ERROR;
624 PRINT("%s: write new state file hdr: %s", __func__, nstatefile);
625 close(fd);
626 goto done;
627 }
628 if (atomicio(vwrite, fd, (void *)sshbuf_ptr(enc), sshbuf_len(enc)) !=
629 sshbuf_len(enc)) {
630 ret = SSH_ERR_SYSTEM_ERROR;
631 PRINT("%s: write new state file data: %s", __func__, nstatefile);
632 close(fd);
633 goto done;
634 }
635 if (fsync(fd) < 0) {
636 ret = SSH_ERR_SYSTEM_ERROR;
637 PRINT("%s: sync new state file: %s", __func__, nstatefile);
638 close(fd);
639 goto done;
640 }
641 if (close(fd) < 0) {
642 ret = SSH_ERR_SYSTEM_ERROR;
643 PRINT("%s: close new state file: %s", __func__, nstatefile);
644 goto done;
645 }
646 if (state->have_state) {
647 unlink(ostatefile);
648 if (link(statefile, ostatefile)) {
649 ret = SSH_ERR_SYSTEM_ERROR;
650 PRINT("%s: backup state %s to %s", __func__, statefile,
651 ostatefile);
652 goto done;
653 }
654 }
655 if (rename(nstatefile, statefile) < 0) {
656 ret = SSH_ERR_SYSTEM_ERROR;
657 PRINT("%s: rename %s to %s", __func__, nstatefile, statefile);
658 goto done;
659 }
660 ret = 0;
661done:
662 if (state->lockfd != -1) {
663 close(state->lockfd);
664 state->lockfd = -1;
665 }
666 if (nstatefile)
667 unlink(nstatefile);
668 free(statefile);
669 free(ostatefile);
670 free(nstatefile);
671 sshbuf_free(b);
672 sshbuf_free(enc);
673 return ret;
674}
675
676int
677sshkey_xmss_serialize_state(const struct sshkey *k, struct sshbuf *b)
678{
679 struct ssh_xmss_state *state = k->xmss_state;
680 treehash_inst *th;
681 u_int32_t i, node;
682 int r;
683
684 if (state == NULL)
685 return SSH_ERR_INVALID_ARGUMENT;
686 if (state->stack == NULL)
687 return SSH_ERR_INVALID_ARGUMENT;
688 state->stackoffset = state->bds.stackoffset; /* copy back */
689 if ((r = sshbuf_put_cstring(b, SSH_XMSS_K2_MAGIC)) != 0 ||
690 (r = sshbuf_put_u32(b, state->idx)) != 0 ||
691 (r = sshbuf_put_string(b, state->stack, num_stack(state))) != 0 ||
692 (r = sshbuf_put_u32(b, state->stackoffset)) != 0 ||
693 (r = sshbuf_put_string(b, state->stacklevels, num_stacklevels(state))) != 0 ||
694 (r = sshbuf_put_string(b, state->auth, num_auth(state))) != 0 ||
695 (r = sshbuf_put_string(b, state->keep, num_keep(state))) != 0 ||
696 (r = sshbuf_put_string(b, state->th_nodes, num_th_nodes(state))) != 0 ||
697 (r = sshbuf_put_string(b, state->retain, num_retain(state))) != 0 ||
698 (r = sshbuf_put_u32(b, num_treehash(state))) != 0)
699 return r;
700 for (i = 0; i < num_treehash(state); i++) {
701 th = &state->treehash[i];
702 node = th->node - state->th_nodes;
703 if ((r = sshbuf_put_u32(b, th->h)) != 0 ||
704 (r = sshbuf_put_u32(b, th->next_idx)) != 0 ||
705 (r = sshbuf_put_u32(b, th->stackusage)) != 0 ||
706 (r = sshbuf_put_u8(b, th->completed)) != 0 ||
707 (r = sshbuf_put_u32(b, node)) != 0)
708 return r;
709 }
710 return 0;
711}
712
713int
714sshkey_xmss_serialize_state_opt(const struct sshkey *k, struct sshbuf *b,
715 enum sshkey_serialize_rep opts)
716{
717 struct ssh_xmss_state *state = k->xmss_state;
718 int r = SSH_ERR_INVALID_ARGUMENT;
719
720 if (state == NULL)
721 return SSH_ERR_INVALID_ARGUMENT;
722 if ((r = sshbuf_put_u8(b, opts)) != 0)
723 return r;
724 switch (opts) {
725 case SSHKEY_SERIALIZE_STATE:
726 r = sshkey_xmss_serialize_state(k, b);
727 break;
728 case SSHKEY_SERIALIZE_FULL:
729 if ((r = sshkey_xmss_serialize_enc_key(k, b)) != 0)
730 break;
731 r = sshkey_xmss_serialize_state(k, b);
732 break;
733 case SSHKEY_SERIALIZE_DEFAULT:
734 r = 0;
735 break;
736 default:
737 r = SSH_ERR_INVALID_ARGUMENT;
738 break;
739 }
740 return r;
741}
742
743int
744sshkey_xmss_deserialize_state(struct sshkey *k, struct sshbuf *b)
745{
746 struct ssh_xmss_state *state = k->xmss_state;
747 treehash_inst *th;
748 u_int32_t i, lh, node;
749 size_t ls, lsl, la, lk, ln, lr;
750 char *magic;
751 int r;
752
753 if (state == NULL)
754 return SSH_ERR_INVALID_ARGUMENT;
755 if (k->xmss_sk == NULL)
756 return SSH_ERR_INVALID_ARGUMENT;
757 if ((state->treehash = calloc(num_treehash(state),
758 sizeof(treehash_inst))) == NULL)
759 return SSH_ERR_ALLOC_FAIL;
760 if ((r = sshbuf_get_cstring(b, &magic, NULL)) != 0 ||
761 (r = sshbuf_get_u32(b, &state->idx)) != 0 ||
762 (r = sshbuf_get_string(b, &state->stack, &ls)) != 0 ||
763 (r = sshbuf_get_u32(b, &state->stackoffset)) != 0 ||
764 (r = sshbuf_get_string(b, &state->stacklevels, &lsl)) != 0 ||
765 (r = sshbuf_get_string(b, &state->auth, &la)) != 0 ||
766 (r = sshbuf_get_string(b, &state->keep, &lk)) != 0 ||
767 (r = sshbuf_get_string(b, &state->th_nodes, &ln)) != 0 ||
768 (r = sshbuf_get_string(b, &state->retain, &lr)) != 0 ||
769 (r = sshbuf_get_u32(b, &lh)) != 0)
770 return r;
771 if (strcmp(magic, SSH_XMSS_K2_MAGIC) != 0)
772 return SSH_ERR_INVALID_ARGUMENT;
773 /* XXX check stackoffset */
774 if (ls != num_stack(state) ||
775 lsl != num_stacklevels(state) ||
776 la != num_auth(state) ||
777 lk != num_keep(state) ||
778 ln != num_th_nodes(state) ||
779 lr != num_retain(state) ||
780 lh != num_treehash(state))
781 return SSH_ERR_INVALID_ARGUMENT;
782 for (i = 0; i < num_treehash(state); i++) {
783 th = &state->treehash[i];
784 if ((r = sshbuf_get_u32(b, &th->h)) != 0 ||
785 (r = sshbuf_get_u32(b, &th->next_idx)) != 0 ||
786 (r = sshbuf_get_u32(b, &th->stackusage)) != 0 ||
787 (r = sshbuf_get_u8(b, &th->completed)) != 0 ||
788 (r = sshbuf_get_u32(b, &node)) != 0)
789 return r;
790 if (node < num_th_nodes(state))
791 th->node = &state->th_nodes[node];
792 }
793 POKE_U32(k->xmss_sk, state->idx);
794 xmss_set_bds_state(&state->bds, state->stack, state->stackoffset,
795 state->stacklevels, state->auth, state->keep, state->treehash,
796 state->retain, 0);
797 return 0;
798}
799
800int
801sshkey_xmss_deserialize_state_opt(struct sshkey *k, struct sshbuf *b)
802{
803 enum sshkey_serialize_rep opts;
804 u_char have_state;
805 int r;
806
807 if ((r = sshbuf_get_u8(b, &have_state)) != 0)
808 return r;
809
810 opts = have_state;
811 switch (opts) {
812 case SSHKEY_SERIALIZE_DEFAULT:
813 r = 0;
814 break;
815 case SSHKEY_SERIALIZE_STATE:
816 if ((r = sshkey_xmss_deserialize_state(k, b)) != 0)
817 return r;
818 break;
819 case SSHKEY_SERIALIZE_FULL:
820 if ((r = sshkey_xmss_deserialize_enc_key(k, b)) != 0 ||
821 (r = sshkey_xmss_deserialize_state(k, b)) != 0)
822 return r;
823 break;
824 default:
825 r = SSH_ERR_INVALID_FORMAT;
826 break;
827 }
828 return r;
829}
830
831int
832sshkey_xmss_encrypt_state(const struct sshkey *k, struct sshbuf *b,
833 struct sshbuf **retp)
834{
835 struct ssh_xmss_state *state = k->xmss_state;
836 struct sshbuf *encrypted = NULL, *encoded = NULL, *padded = NULL;
837 struct sshcipher_ctx *ciphercontext = NULL;
838 const struct sshcipher *cipher;
839 u_char *cp, *key, *iv = NULL;
840 size_t i, keylen, ivlen, blocksize, authlen, encrypted_len, aadlen;
841 int r = SSH_ERR_INTERNAL_ERROR;
842
843 if (retp != NULL)
844 *retp = NULL;
845 if (state == NULL ||
846 state->enc_keyiv == NULL ||
847 state->enc_ciphername == NULL)
848 return SSH_ERR_INTERNAL_ERROR;
849 if ((cipher = cipher_by_name(state->enc_ciphername)) == NULL) {
850 r = SSH_ERR_INTERNAL_ERROR;
851 goto out;
852 }
853 blocksize = cipher_blocksize(cipher);
854 keylen = cipher_keylen(cipher);
855 ivlen = cipher_ivlen(cipher);
856 authlen = cipher_authlen(cipher);
857 if (state->enc_keyiv_len != keylen + ivlen) {
858 r = SSH_ERR_INVALID_FORMAT;
859 goto out;
860 }
861 key = state->enc_keyiv;
862 if ((encrypted = sshbuf_new()) == NULL ||
863 (encoded = sshbuf_new()) == NULL ||
864 (padded = sshbuf_new()) == NULL ||
865 (iv = malloc(ivlen)) == NULL) {
866 r = SSH_ERR_ALLOC_FAIL;
867 goto out;
868 }
869
870 /* replace first 4 bytes of IV with index to ensure uniqueness */
871 memcpy(iv, key + keylen, ivlen);
872 POKE_U32(iv, state->idx);
873
874 if ((r = sshbuf_put(encoded, XMSS_MAGIC, sizeof(XMSS_MAGIC))) != 0 ||
875 (r = sshbuf_put_u32(encoded, state->idx)) != 0)
876 goto out;
877
878 /* padded state will be encrypted */
879 if ((r = sshbuf_putb(padded, b)) != 0)
880 goto out;
881 i = 0;
882 while (sshbuf_len(padded) % blocksize) {
883 if ((r = sshbuf_put_u8(padded, ++i & 0xff)) != 0)
884 goto out;
885 }
886 encrypted_len = sshbuf_len(padded);
887
888 /* header including the length of state is used as AAD */
889 if ((r = sshbuf_put_u32(encoded, encrypted_len)) != 0)
890 goto out;
891 aadlen = sshbuf_len(encoded);
892
893 /* concat header and state */
894 if ((r = sshbuf_putb(encoded, padded)) != 0)
895 goto out;
896
897 /* reserve space for encryption of encoded data plus auth tag */
898 /* encrypt at offset addlen */
899 if ((r = sshbuf_reserve(encrypted,
900 encrypted_len + aadlen + authlen, &cp)) != 0 ||
901 (r = cipher_init(&ciphercontext, cipher, key, keylen,
902 iv, ivlen, 1)) != 0 ||
903 (r = cipher_crypt(ciphercontext, 0, cp, sshbuf_ptr(encoded),
904 encrypted_len, aadlen, authlen)) != 0)
905 goto out;
906
907 /* success */
908 r = 0;
909 out:
910 if (retp != NULL) {
911 *retp = encrypted;
912 encrypted = NULL;
913 }
914 sshbuf_free(padded);
915 sshbuf_free(encoded);
916 sshbuf_free(encrypted);
917 cipher_free(ciphercontext);
918 free(iv);
919 return r;
920}
921
922int
923sshkey_xmss_decrypt_state(const struct sshkey *k, struct sshbuf *encoded,
924 struct sshbuf **retp)
925{
926 struct ssh_xmss_state *state = k->xmss_state;
927 struct sshbuf *copy = NULL, *decrypted = NULL;
928 struct sshcipher_ctx *ciphercontext = NULL;
929 const struct sshcipher *cipher = NULL;
930 u_char *key, *iv = NULL, *dp;
931 size_t keylen, ivlen, authlen, aadlen;
932 u_int blocksize, encrypted_len, index;
933 int r = SSH_ERR_INTERNAL_ERROR;
934
935 if (retp != NULL)
936 *retp = NULL;
937 if (state == NULL ||
938 state->enc_keyiv == NULL ||
939 state->enc_ciphername == NULL)
940 return SSH_ERR_INTERNAL_ERROR;
941 if ((cipher = cipher_by_name(state->enc_ciphername)) == NULL) {
942 r = SSH_ERR_INVALID_FORMAT;
943 goto out;
944 }
945 blocksize = cipher_blocksize(cipher);
946 keylen = cipher_keylen(cipher);
947 ivlen = cipher_ivlen(cipher);
948 authlen = cipher_authlen(cipher);
949 if (state->enc_keyiv_len != keylen + ivlen) {
950 r = SSH_ERR_INTERNAL_ERROR;
951 goto out;
952 }
953 key = state->enc_keyiv;
954
955 if ((copy = sshbuf_fromb(encoded)) == NULL ||
956 (decrypted = sshbuf_new()) == NULL ||
957 (iv = malloc(ivlen)) == NULL) {
958 r = SSH_ERR_ALLOC_FAIL;
959 goto out;
960 }
961
962 /* check magic */
963 if (sshbuf_len(encoded) < sizeof(XMSS_MAGIC) ||
964 memcmp(sshbuf_ptr(encoded), XMSS_MAGIC, sizeof(XMSS_MAGIC))) {
965 r = SSH_ERR_INVALID_FORMAT;
966 goto out;
967 }
968 /* parse public portion */
969 if ((r = sshbuf_consume(encoded, sizeof(XMSS_MAGIC))) != 0 ||
970 (r = sshbuf_get_u32(encoded, &index)) != 0 ||
971 (r = sshbuf_get_u32(encoded, &encrypted_len)) != 0)
972 goto out;
973
974 /* check size of encrypted key blob */
975 if (encrypted_len < blocksize || (encrypted_len % blocksize) != 0) {
976 r = SSH_ERR_INVALID_FORMAT;
977 goto out;
978 }
979 /* check that an appropriate amount of auth data is present */
980 if (sshbuf_len(encoded) < encrypted_len + authlen) {
981 r = SSH_ERR_INVALID_FORMAT;
982 goto out;
983 }
984
985 aadlen = sshbuf_len(copy) - sshbuf_len(encoded);
986
987 /* replace first 4 bytes of IV with index to ensure uniqueness */
988 memcpy(iv, key + keylen, ivlen);
989 POKE_U32(iv, index);
990
991 /* decrypt private state of key */
992 if ((r = sshbuf_reserve(decrypted, aadlen + encrypted_len, &dp)) != 0 ||
993 (r = cipher_init(&ciphercontext, cipher, key, keylen,
994 iv, ivlen, 0)) != 0 ||
995 (r = cipher_crypt(ciphercontext, 0, dp, sshbuf_ptr(copy),
996 encrypted_len, aadlen, authlen)) != 0)
997 goto out;
998
999 /* there should be no trailing data */
1000 if ((r = sshbuf_consume(encoded, encrypted_len + authlen)) != 0)
1001 goto out;
1002 if (sshbuf_len(encoded) != 0) {
1003 r = SSH_ERR_INVALID_FORMAT;
1004 goto out;
1005 }
1006
1007 /* remove AAD */
1008 if ((r = sshbuf_consume(decrypted, aadlen)) != 0)
1009 goto out;
1010 /* XXX encrypted includes unchecked padding */
1011
1012 /* success */
1013 r = 0;
1014 if (retp != NULL) {
1015 *retp = decrypted;
1016 decrypted = NULL;
1017 }
1018 out:
1019 cipher_free(ciphercontext);
1020 sshbuf_free(copy);
1021 sshbuf_free(decrypted);
1022 free(iv);
1023 return r;
1024}
1025
1026u_int32_t
1027sshkey_xmss_signatures_left(const struct sshkey *k)
1028{
1029 struct ssh_xmss_state *state = k->xmss_state;
1030 u_int32_t idx;
1031
1032 if (sshkey_type_plain(k->type) == KEY_XMSS && state &&
1033 state->maxidx) {
1034 idx = k->xmss_sk ? PEEK_U32(k->xmss_sk) : state->idx;
1035 if (idx < state->maxidx)
1036 return state->maxidx - idx;
1037 }
1038 return 0;
1039}
1040
1041int
1042sshkey_xmss_enable_maxsign(struct sshkey *k, u_int32_t maxsign)
1043{
1044 struct ssh_xmss_state *state = k->xmss_state;
1045
1046 if (sshkey_type_plain(k->type) != KEY_XMSS)
1047 return SSH_ERR_INVALID_ARGUMENT;
1048 if (maxsign == 0)
1049 return 0;
1050 if (state->idx + maxsign < state->idx)
1051 return SSH_ERR_INVALID_ARGUMENT;
1052 state->maxidx = state->idx + maxsign;
1053 return 0;
1054}
1055#endif /* WITH_XMSS */
diff --git a/sshkey-xmss.h b/sshkey-xmss.h
new file mode 100644
index 000000000..b9f8ead10
--- /dev/null
+++ b/sshkey-xmss.h
@@ -0,0 +1,56 @@
1/* $OpenBSD: sshkey-xmss.h,v 1.1 2018/02/23 15:58:38 markus Exp $ */
2/*
3 * Copyright (c) 2017 Markus Friedl. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25#ifndef SSHKEY_XMSS_H
26#define SSHKEY_XMSS_H
27
28#define XMSS_SHA2_256_W16_H10_NAME "XMSS_SHA2-256_W16_H10"
29#define XMSS_SHA2_256_W16_H16_NAME "XMSS_SHA2-256_W16_H16"
30#define XMSS_SHA2_256_W16_H20_NAME "XMSS_SHA2-256_W16_H20"
31#define XMSS_DEFAULT_NAME XMSS_SHA2_256_W16_H10_NAME
32
33size_t sshkey_xmss_pklen(const struct sshkey *);
34size_t sshkey_xmss_sklen(const struct sshkey *);
35int sshkey_xmss_init(struct sshkey *, const char *);
36void sshkey_xmss_free_state(struct sshkey *);
37int sshkey_xmss_generate_private_key(struct sshkey *, u_int);
38int sshkey_xmss_serialize_state(const struct sshkey *, struct sshbuf *);
39int sshkey_xmss_serialize_state_opt(const struct sshkey *, struct sshbuf *,
40 enum sshkey_serialize_rep);
41int sshkey_xmss_serialize_pk_info(const struct sshkey *, struct sshbuf *,
42 enum sshkey_serialize_rep);
43int sshkey_xmss_deserialize_state(struct sshkey *, struct sshbuf *);
44int sshkey_xmss_deserialize_state_opt(struct sshkey *, struct sshbuf *);
45int sshkey_xmss_deserialize_pk_info(struct sshkey *, struct sshbuf *);
46
47int sshkey_xmss_siglen(const struct sshkey *, size_t *);
48void *sshkey_xmss_params(const struct sshkey *);
49void *sshkey_xmss_bds_state(const struct sshkey *);
50int sshkey_xmss_get_state(const struct sshkey *, sshkey_printfn *);
51int sshkey_xmss_enable_maxsign(struct sshkey *, u_int32_t);
52int sshkey_xmss_forward_state(const struct sshkey *, u_int32_t);
53int sshkey_xmss_update_state(const struct sshkey *, sshkey_printfn *);
54u_int32_t sshkey_xmss_signatures_left(const struct sshkey *);
55
56#endif /* SSHKEY_XMSS_H */
diff --git a/sshkey.c b/sshkey.c
index c2cf0e036..088872860 100644
--- a/sshkey.c
+++ b/sshkey.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshkey.c,v 1.56 2017/08/12 06:42:52 djm Exp $ */ 1/* $OpenBSD: sshkey.c,v 1.64 2018/03/22 07:05:48 markus Exp $ */
2/* 2/*
3 * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
4 * Copyright (c) 2008 Alexander von Gernler. All rights reserved. 4 * Copyright (c) 2008 Alexander von Gernler. All rights reserved.
@@ -55,8 +55,11 @@
55#include "digest.h" 55#include "digest.h"
56#define SSHKEY_INTERNAL 56#define SSHKEY_INTERNAL
57#include "sshkey.h" 57#include "sshkey.h"
58#include "sshkey-xmss.h"
58#include "match.h" 59#include "match.h"
59 60
61#include "xmss_fast.h"
62
60/* openssh private key file format */ 63/* openssh private key file format */
61#define MARK_BEGIN "-----BEGIN OPENSSH PRIVATE KEY-----\n" 64#define MARK_BEGIN "-----BEGIN OPENSSH PRIVATE KEY-----\n"
62#define MARK_END "-----END OPENSSH PRIVATE KEY-----\n" 65#define MARK_END "-----END OPENSSH PRIVATE KEY-----\n"
@@ -71,6 +74,8 @@
71/* Version identification string for SSH v1 identity files. */ 74/* Version identification string for SSH v1 identity files. */
72#define LEGACY_BEGIN "SSH PRIVATE KEY FILE FORMAT 1.1\n" 75#define LEGACY_BEGIN "SSH PRIVATE KEY FILE FORMAT 1.1\n"
73 76
77int sshkey_private_serialize_opt(const struct sshkey *key,
78 struct sshbuf *buf, enum sshkey_serialize_rep);
74static int sshkey_from_blob_internal(struct sshbuf *buf, 79static int sshkey_from_blob_internal(struct sshbuf *buf,
75 struct sshkey **keyp, int allow_cert); 80 struct sshkey **keyp, int allow_cert);
76 81
@@ -87,6 +92,11 @@ static const struct keytype keytypes[] = {
87 { "ssh-ed25519", "ED25519", KEY_ED25519, 0, 0, 0 }, 92 { "ssh-ed25519", "ED25519", KEY_ED25519, 0, 0, 0 },
88 { "ssh-ed25519-cert-v01@openssh.com", "ED25519-CERT", 93 { "ssh-ed25519-cert-v01@openssh.com", "ED25519-CERT",
89 KEY_ED25519_CERT, 0, 1, 0 }, 94 KEY_ED25519_CERT, 0, 1, 0 },
95#ifdef WITH_XMSS
96 { "ssh-xmss@openssh.com", "XMSS", KEY_XMSS, 0, 0, 0 },
97 { "ssh-xmss-cert-v01@openssh.com", "XMSS-CERT",
98 KEY_XMSS_CERT, 0, 1, 0 },
99#endif /* WITH_XMSS */
90#ifdef WITH_OPENSSL 100#ifdef WITH_OPENSSL
91 { "ssh-rsa", "RSA", KEY_RSA, 0, 0, 0 }, 101 { "ssh-rsa", "RSA", KEY_RSA, 0, 0, 0 },
92 { "rsa-sha2-256", "RSA", KEY_RSA, 0, 0, 1 }, 102 { "rsa-sha2-256", "RSA", KEY_RSA, 0, 0, 1 },
@@ -275,6 +285,8 @@ sshkey_size(const struct sshkey *k)
275#endif /* WITH_OPENSSL */ 285#endif /* WITH_OPENSSL */
276 case KEY_ED25519: 286 case KEY_ED25519:
277 case KEY_ED25519_CERT: 287 case KEY_ED25519_CERT:
288 case KEY_XMSS:
289 case KEY_XMSS_CERT:
278 return 256; /* XXX */ 290 return 256; /* XXX */
279 } 291 }
280 return 0; 292 return 0;
@@ -288,6 +300,7 @@ sshkey_type_is_valid_ca(int type)
288 case KEY_DSA: 300 case KEY_DSA:
289 case KEY_ECDSA: 301 case KEY_ECDSA:
290 case KEY_ED25519: 302 case KEY_ED25519:
303 case KEY_XMSS:
291 return 1; 304 return 1;
292 default: 305 default:
293 return 0; 306 return 0;
@@ -315,6 +328,8 @@ sshkey_type_plain(int type)
315 return KEY_ECDSA; 328 return KEY_ECDSA;
316 case KEY_ED25519_CERT: 329 case KEY_ED25519_CERT:
317 return KEY_ED25519; 330 return KEY_ED25519;
331 case KEY_XMSS_CERT:
332 return KEY_XMSS;
318 default: 333 default:
319 return type; 334 return type;
320 } 335 }
@@ -421,8 +436,7 @@ cert_free(struct sshkey_cert *cert)
421 free(cert->principals[i]); 436 free(cert->principals[i]);
422 free(cert->principals); 437 free(cert->principals);
423 sshkey_free(cert->signature_key); 438 sshkey_free(cert->signature_key);
424 explicit_bzero(cert, sizeof(*cert)); 439 freezero(cert, sizeof(*cert));
425 free(cert);
426} 440}
427 441
428static struct sshkey_cert * 442static struct sshkey_cert *
@@ -463,6 +477,8 @@ sshkey_new(int type)
463 k->cert = NULL; 477 k->cert = NULL;
464 k->ed25519_sk = NULL; 478 k->ed25519_sk = NULL;
465 k->ed25519_pk = NULL; 479 k->ed25519_pk = NULL;
480 k->xmss_sk = NULL;
481 k->xmss_pk = NULL;
466 switch (k->type) { 482 switch (k->type) {
467#ifdef WITH_OPENSSL 483#ifdef WITH_OPENSSL
468 case KEY_RSA: 484 case KEY_RSA:
@@ -470,8 +486,7 @@ sshkey_new(int type)
470 if ((rsa = RSA_new()) == NULL || 486 if ((rsa = RSA_new()) == NULL ||
471 (rsa->n = BN_new()) == NULL || 487 (rsa->n = BN_new()) == NULL ||
472 (rsa->e = BN_new()) == NULL) { 488 (rsa->e = BN_new()) == NULL) {
473 if (rsa != NULL) 489 RSA_free(rsa);
474 RSA_free(rsa);
475 free(k); 490 free(k);
476 return NULL; 491 return NULL;
477 } 492 }
@@ -484,8 +499,7 @@ sshkey_new(int type)
484 (dsa->q = BN_new()) == NULL || 499 (dsa->q = BN_new()) == NULL ||
485 (dsa->g = BN_new()) == NULL || 500 (dsa->g = BN_new()) == NULL ||
486 (dsa->pub_key = BN_new()) == NULL) { 501 (dsa->pub_key = BN_new()) == NULL) {
487 if (dsa != NULL) 502 DSA_free(dsa);
488 DSA_free(dsa);
489 free(k); 503 free(k);
490 return NULL; 504 return NULL;
491 } 505 }
@@ -498,6 +512,8 @@ sshkey_new(int type)
498#endif /* WITH_OPENSSL */ 512#endif /* WITH_OPENSSL */
499 case KEY_ED25519: 513 case KEY_ED25519:
500 case KEY_ED25519_CERT: 514 case KEY_ED25519_CERT:
515 case KEY_XMSS:
516 case KEY_XMSS_CERT:
501 /* no need to prealloc */ 517 /* no need to prealloc */
502 break; 518 break;
503 case KEY_UNSPEC: 519 case KEY_UNSPEC:
@@ -546,6 +562,8 @@ sshkey_add_private(struct sshkey *k)
546#endif /* WITH_OPENSSL */ 562#endif /* WITH_OPENSSL */
547 case KEY_ED25519: 563 case KEY_ED25519:
548 case KEY_ED25519_CERT: 564 case KEY_ED25519_CERT:
565 case KEY_XMSS:
566 case KEY_XMSS_CERT:
549 /* no need to prealloc */ 567 /* no need to prealloc */
550 break; 568 break;
551 case KEY_UNSPEC: 569 case KEY_UNSPEC:
@@ -579,38 +597,43 @@ sshkey_free(struct sshkey *k)
579#ifdef WITH_OPENSSL 597#ifdef WITH_OPENSSL
580 case KEY_RSA: 598 case KEY_RSA:
581 case KEY_RSA_CERT: 599 case KEY_RSA_CERT:
582 if (k->rsa != NULL) 600 RSA_free(k->rsa);
583 RSA_free(k->rsa);
584 k->rsa = NULL; 601 k->rsa = NULL;
585 break; 602 break;
586 case KEY_DSA: 603 case KEY_DSA:
587 case KEY_DSA_CERT: 604 case KEY_DSA_CERT:
588 if (k->dsa != NULL) 605 DSA_free(k->dsa);
589 DSA_free(k->dsa);
590 k->dsa = NULL; 606 k->dsa = NULL;
591 break; 607 break;
592# ifdef OPENSSL_HAS_ECC 608# ifdef OPENSSL_HAS_ECC
593 case KEY_ECDSA: 609 case KEY_ECDSA:
594 case KEY_ECDSA_CERT: 610 case KEY_ECDSA_CERT:
595 if (k->ecdsa != NULL) 611 EC_KEY_free(k->ecdsa);
596 EC_KEY_free(k->ecdsa);
597 k->ecdsa = NULL; 612 k->ecdsa = NULL;
598 break; 613 break;
599# endif /* OPENSSL_HAS_ECC */ 614# endif /* OPENSSL_HAS_ECC */
600#endif /* WITH_OPENSSL */ 615#endif /* WITH_OPENSSL */
601 case KEY_ED25519: 616 case KEY_ED25519:
602 case KEY_ED25519_CERT: 617 case KEY_ED25519_CERT:
603 if (k->ed25519_pk) { 618 freezero(k->ed25519_pk, ED25519_PK_SZ);
604 explicit_bzero(k->ed25519_pk, ED25519_PK_SZ); 619 k->ed25519_pk = NULL;
605 free(k->ed25519_pk); 620 freezero(k->ed25519_sk, ED25519_SK_SZ);
606 k->ed25519_pk = NULL; 621 k->ed25519_sk = NULL;
607 } 622 break;
608 if (k->ed25519_sk) { 623#ifdef WITH_XMSS
609 explicit_bzero(k->ed25519_sk, ED25519_SK_SZ); 624 case KEY_XMSS:
610 free(k->ed25519_sk); 625 case KEY_XMSS_CERT:
611 k->ed25519_sk = NULL; 626 freezero(k->xmss_pk, sshkey_xmss_pklen(k));
612 } 627 k->xmss_pk = NULL;
613 break; 628 freezero(k->xmss_sk, sshkey_xmss_sklen(k));
629 k->xmss_sk = NULL;
630 sshkey_xmss_free_state(k);
631 free(k->xmss_name);
632 k->xmss_name = NULL;
633 free(k->xmss_filename);
634 k->xmss_filename = NULL;
635 break;
636#endif /* WITH_XMSS */
614 case KEY_UNSPEC: 637 case KEY_UNSPEC:
615 break; 638 break;
616 default: 639 default:
@@ -618,8 +641,7 @@ sshkey_free(struct sshkey *k)
618 } 641 }
619 if (sshkey_is_cert(k)) 642 if (sshkey_is_cert(k))
620 cert_free(k->cert); 643 cert_free(k->cert);
621 explicit_bzero(k, sizeof(*k)); 644 freezero(k, sizeof(*k));
622 free(k);
623} 645}
624 646
625static int 647static int
@@ -691,6 +713,13 @@ sshkey_equal_public(const struct sshkey *a, const struct sshkey *b)
691 case KEY_ED25519_CERT: 713 case KEY_ED25519_CERT:
692 return a->ed25519_pk != NULL && b->ed25519_pk != NULL && 714 return a->ed25519_pk != NULL && b->ed25519_pk != NULL &&
693 memcmp(a->ed25519_pk, b->ed25519_pk, ED25519_PK_SZ) == 0; 715 memcmp(a->ed25519_pk, b->ed25519_pk, ED25519_PK_SZ) == 0;
716#ifdef WITH_XMSS
717 case KEY_XMSS:
718 case KEY_XMSS_CERT:
719 return a->xmss_pk != NULL && b->xmss_pk != NULL &&
720 sshkey_xmss_pklen(a) == sshkey_xmss_pklen(b) &&
721 memcmp(a->xmss_pk, b->xmss_pk, sshkey_xmss_pklen(a)) == 0;
722#endif /* WITH_XMSS */
694 default: 723 default:
695 return 0; 724 return 0;
696 } 725 }
@@ -710,7 +739,8 @@ sshkey_equal(const struct sshkey *a, const struct sshkey *b)
710} 739}
711 740
712static int 741static int
713to_blob_buf(const struct sshkey *key, struct sshbuf *b, int force_plain) 742to_blob_buf(const struct sshkey *key, struct sshbuf *b, int force_plain,
743 enum sshkey_serialize_rep opts)
714{ 744{
715 int type, ret = SSH_ERR_INTERNAL_ERROR; 745 int type, ret = SSH_ERR_INTERNAL_ERROR;
716 const char *typename; 746 const char *typename;
@@ -734,6 +764,9 @@ to_blob_buf(const struct sshkey *key, struct sshbuf *b, int force_plain)
734 case KEY_RSA_CERT: 764 case KEY_RSA_CERT:
735#endif /* WITH_OPENSSL */ 765#endif /* WITH_OPENSSL */
736 case KEY_ED25519_CERT: 766 case KEY_ED25519_CERT:
767#ifdef WITH_XMSS
768 case KEY_XMSS_CERT:
769#endif /* WITH_XMSS */
737 /* Use the existing blob */ 770 /* Use the existing blob */
738 /* XXX modified flag? */ 771 /* XXX modified flag? */
739 if ((ret = sshbuf_putb(b, key->cert->certblob)) != 0) 772 if ((ret = sshbuf_putb(b, key->cert->certblob)) != 0)
@@ -778,6 +811,19 @@ to_blob_buf(const struct sshkey *key, struct sshbuf *b, int force_plain)
778 key->ed25519_pk, ED25519_PK_SZ)) != 0) 811 key->ed25519_pk, ED25519_PK_SZ)) != 0)
779 return ret; 812 return ret;
780 break; 813 break;
814#ifdef WITH_XMSS
815 case KEY_XMSS:
816 if (key->xmss_name == NULL || key->xmss_pk == NULL ||
817 sshkey_xmss_pklen(key) == 0)
818 return SSH_ERR_INVALID_ARGUMENT;
819 if ((ret = sshbuf_put_cstring(b, typename)) != 0 ||
820 (ret = sshbuf_put_cstring(b, key->xmss_name)) != 0 ||
821 (ret = sshbuf_put_string(b,
822 key->xmss_pk, sshkey_xmss_pklen(key))) != 0 ||
823 (ret = sshkey_xmss_serialize_pk_info(key, b, opts)) != 0)
824 return ret;
825 break;
826#endif /* WITH_XMSS */
781 default: 827 default:
782 return SSH_ERR_KEY_TYPE_UNKNOWN; 828 return SSH_ERR_KEY_TYPE_UNKNOWN;
783 } 829 }
@@ -787,18 +833,19 @@ to_blob_buf(const struct sshkey *key, struct sshbuf *b, int force_plain)
787int 833int
788sshkey_putb(const struct sshkey *key, struct sshbuf *b) 834sshkey_putb(const struct sshkey *key, struct sshbuf *b)
789{ 835{
790 return to_blob_buf(key, b, 0); 836 return to_blob_buf(key, b, 0, SSHKEY_SERIALIZE_DEFAULT);
791} 837}
792 838
793int 839int
794sshkey_puts(const struct sshkey *key, struct sshbuf *b) 840sshkey_puts_opts(const struct sshkey *key, struct sshbuf *b,
841 enum sshkey_serialize_rep opts)
795{ 842{
796 struct sshbuf *tmp; 843 struct sshbuf *tmp;
797 int r; 844 int r;
798 845
799 if ((tmp = sshbuf_new()) == NULL) 846 if ((tmp = sshbuf_new()) == NULL)
800 return SSH_ERR_ALLOC_FAIL; 847 return SSH_ERR_ALLOC_FAIL;
801 r = to_blob_buf(key, tmp, 0); 848 r = to_blob_buf(key, tmp, 0, opts);
802 if (r == 0) 849 if (r == 0)
803 r = sshbuf_put_stringb(b, tmp); 850 r = sshbuf_put_stringb(b, tmp);
804 sshbuf_free(tmp); 851 sshbuf_free(tmp);
@@ -806,13 +853,20 @@ sshkey_puts(const struct sshkey *key, struct sshbuf *b)
806} 853}
807 854
808int 855int
856sshkey_puts(const struct sshkey *key, struct sshbuf *b)
857{
858 return sshkey_puts_opts(key, b, SSHKEY_SERIALIZE_DEFAULT);
859}
860
861int
809sshkey_putb_plain(const struct sshkey *key, struct sshbuf *b) 862sshkey_putb_plain(const struct sshkey *key, struct sshbuf *b)
810{ 863{
811 return to_blob_buf(key, b, 1); 864 return to_blob_buf(key, b, 1, SSHKEY_SERIALIZE_DEFAULT);
812} 865}
813 866
814static int 867static int
815to_blob(const struct sshkey *key, u_char **blobp, size_t *lenp, int force_plain) 868to_blob(const struct sshkey *key, u_char **blobp, size_t *lenp, int force_plain,
869 enum sshkey_serialize_rep opts)
816{ 870{
817 int ret = SSH_ERR_INTERNAL_ERROR; 871 int ret = SSH_ERR_INTERNAL_ERROR;
818 size_t len; 872 size_t len;
@@ -824,7 +878,7 @@ to_blob(const struct sshkey *key, u_char **blobp, size_t *lenp, int force_plain)
824 *blobp = NULL; 878 *blobp = NULL;
825 if ((b = sshbuf_new()) == NULL) 879 if ((b = sshbuf_new()) == NULL)
826 return SSH_ERR_ALLOC_FAIL; 880 return SSH_ERR_ALLOC_FAIL;
827 if ((ret = to_blob_buf(key, b, force_plain)) != 0) 881 if ((ret = to_blob_buf(key, b, force_plain, opts)) != 0)
828 goto out; 882 goto out;
829 len = sshbuf_len(b); 883 len = sshbuf_len(b);
830 if (lenp != NULL) 884 if (lenp != NULL)
@@ -845,13 +899,13 @@ to_blob(const struct sshkey *key, u_char **blobp, size_t *lenp, int force_plain)
845int 899int
846sshkey_to_blob(const struct sshkey *key, u_char **blobp, size_t *lenp) 900sshkey_to_blob(const struct sshkey *key, u_char **blobp, size_t *lenp)
847{ 901{
848 return to_blob(key, blobp, lenp, 0); 902 return to_blob(key, blobp, lenp, 0, SSHKEY_SERIALIZE_DEFAULT);
849} 903}
850 904
851int 905int
852sshkey_plain_to_blob(const struct sshkey *key, u_char **blobp, size_t *lenp) 906sshkey_plain_to_blob(const struct sshkey *key, u_char **blobp, size_t *lenp)
853{ 907{
854 return to_blob(key, blobp, lenp, 1); 908 return to_blob(key, blobp, lenp, 1, SSHKEY_SERIALIZE_DEFAULT);
855} 909}
856 910
857int 911int
@@ -870,7 +924,8 @@ sshkey_fingerprint_raw(const struct sshkey *k, int dgst_alg,
870 r = SSH_ERR_INVALID_ARGUMENT; 924 r = SSH_ERR_INVALID_ARGUMENT;
871 goto out; 925 goto out;
872 } 926 }
873 if ((r = to_blob(k, &blob, &blob_len, 1)) != 0) 927 if ((r = to_blob(k, &blob, &blob_len, 1, SSHKEY_SERIALIZE_DEFAULT))
928 != 0)
874 goto out; 929 goto out;
875 if ((ret = calloc(1, SSH_DIGEST_MAX_LENGTH)) == NULL) { 930 if ((ret = calloc(1, SSH_DIGEST_MAX_LENGTH)) == NULL) {
876 r = SSH_ERR_ALLOC_FAIL; 931 r = SSH_ERR_ALLOC_FAIL;
@@ -912,8 +967,7 @@ fingerprint_b64(const char *alg, u_char *dgst_raw, size_t dgst_raw_len)
912 return ret; 967 return ret;
913 if ((r = b64_ntop(dgst_raw, dgst_raw_len, 968 if ((r = b64_ntop(dgst_raw, dgst_raw_len,
914 ret + plen, rlen - plen)) == -1) { 969 ret + plen, rlen - plen)) == -1) {
915 explicit_bzero(ret, rlen); 970 freezero(ret, rlen);
916 free(ret);
917 return NULL; 971 return NULL;
918 } 972 }
919 /* Trim padding characters from end */ 973 /* Trim padding characters from end */
@@ -1162,22 +1216,37 @@ sshkey_fingerprint(const struct sshkey *k, int dgst_alg,
1162 return retval; 1216 return retval;
1163} 1217}
1164 1218
1219static int
1220peek_type_nid(const char *s, size_t l, int *nid)
1221{
1222 const struct keytype *kt;
1223
1224 for (kt = keytypes; kt->type != -1; kt++) {
1225 if (kt->name == NULL || strlen(kt->name) != l)
1226 continue;
1227 if (memcmp(s, kt->name, l) == 0) {
1228 *nid = -1;
1229 if (kt->type == KEY_ECDSA || kt->type == KEY_ECDSA_CERT)
1230 *nid = kt->nid;
1231 return kt->type;
1232 }
1233 }
1234 return KEY_UNSPEC;
1235}
1165 1236
1166/* returns 0 ok, and < 0 error */ 1237/* XXX this can now be made const char * */
1167int 1238int
1168sshkey_read(struct sshkey *ret, char **cpp) 1239sshkey_read(struct sshkey *ret, char **cpp)
1169{ 1240{
1170 struct sshkey *k; 1241 struct sshkey *k;
1171 int retval = SSH_ERR_INVALID_FORMAT; 1242 char *cp, *blobcopy;
1172 char *ep, *cp, *space; 1243 size_t space;
1173 int r, type, curve_nid = -1; 1244 int r, type, curve_nid = -1;
1174 struct sshbuf *blob; 1245 struct sshbuf *blob;
1175 1246
1176 if (ret == NULL) 1247 if (ret == NULL)
1177 return SSH_ERR_INVALID_ARGUMENT; 1248 return SSH_ERR_INVALID_ARGUMENT;
1178 1249
1179 cp = *cpp;
1180
1181 switch (ret->type) { 1250 switch (ret->type) {
1182 case KEY_UNSPEC: 1251 case KEY_UNSPEC:
1183 case KEY_RSA: 1252 case KEY_RSA:
@@ -1188,120 +1257,147 @@ sshkey_read(struct sshkey *ret, char **cpp)
1188 case KEY_ECDSA_CERT: 1257 case KEY_ECDSA_CERT:
1189 case KEY_RSA_CERT: 1258 case KEY_RSA_CERT:
1190 case KEY_ED25519_CERT: 1259 case KEY_ED25519_CERT:
1191 space = strchr(cp, ' '); 1260#ifdef WITH_XMSS
1192 if (space == NULL) 1261 case KEY_XMSS:
1193 return SSH_ERR_INVALID_FORMAT; 1262 case KEY_XMSS_CERT:
1194 *space = '\0'; 1263#endif /* WITH_XMSS */
1195 type = sshkey_type_from_name(cp); 1264 break; /* ok */
1196 if (sshkey_type_plain(type) == KEY_ECDSA && 1265 default:
1197 (curve_nid = sshkey_ecdsa_nid_from_name(cp)) == -1) 1266 return SSH_ERR_INVALID_ARGUMENT;
1198 return SSH_ERR_EC_CURVE_INVALID; 1267 }
1199 *space = ' '; 1268
1200 if (type == KEY_UNSPEC) 1269 /* Decode type */
1201 return SSH_ERR_INVALID_FORMAT; 1270 cp = *cpp;
1202 cp = space+1; 1271 space = strcspn(cp, " \t");
1203 if (*cp == '\0') 1272 if (space == strlen(cp))
1204 return SSH_ERR_INVALID_FORMAT; 1273 return SSH_ERR_INVALID_FORMAT;
1205 if (ret->type != KEY_UNSPEC && ret->type != type) 1274 if ((type = peek_type_nid(cp, space, &curve_nid)) == KEY_UNSPEC)
1206 return SSH_ERR_KEY_TYPE_MISMATCH; 1275 return SSH_ERR_INVALID_FORMAT;
1207 if ((blob = sshbuf_new()) == NULL) 1276
1208 return SSH_ERR_ALLOC_FAIL; 1277 /* skip whitespace */
1209 /* trim comment */ 1278 for (cp += space; *cp == ' ' || *cp == '\t'; cp++)
1210 space = strchr(cp, ' '); 1279 ;
1211 if (space) { 1280 if (*cp == '\0')
1212 /* advance 'space': skip whitespace */ 1281 return SSH_ERR_INVALID_FORMAT;
1213 *space++ = '\0'; 1282 if (ret->type != KEY_UNSPEC && ret->type != type)
1214 while (*space == ' ' || *space == '\t') 1283 return SSH_ERR_KEY_TYPE_MISMATCH;
1215 space++; 1284 if ((blob = sshbuf_new()) == NULL)
1216 ep = space; 1285 return SSH_ERR_ALLOC_FAIL;
1217 } else 1286
1218 ep = cp + strlen(cp); 1287 /* find end of keyblob and decode */
1219 if ((r = sshbuf_b64tod(blob, cp)) != 0) { 1288 space = strcspn(cp, " \t");
1220 sshbuf_free(blob); 1289 if ((blobcopy = strndup(cp, space)) == NULL) {
1221 return r;
1222 }
1223 if ((r = sshkey_from_blob(sshbuf_ptr(blob),
1224 sshbuf_len(blob), &k)) != 0) {
1225 sshbuf_free(blob);
1226 return r;
1227 }
1228 sshbuf_free(blob); 1290 sshbuf_free(blob);
1229 if (k->type != type) { 1291 return SSH_ERR_ALLOC_FAIL;
1230 sshkey_free(k); 1292 }
1231 return SSH_ERR_KEY_TYPE_MISMATCH; 1293 if ((r = sshbuf_b64tod(blob, blobcopy)) != 0) {
1232 } 1294 free(blobcopy);
1233 if (sshkey_type_plain(type) == KEY_ECDSA && 1295 sshbuf_free(blob);
1234 curve_nid != k->ecdsa_nid) { 1296 return r;
1297 }
1298 free(blobcopy);
1299 if ((r = sshkey_fromb(blob, &k)) != 0) {
1300 sshbuf_free(blob);
1301 return r;
1302 }
1303 sshbuf_free(blob);
1304
1305 /* skip whitespace and leave cp at start of comment */
1306 for (cp += space; *cp == ' ' || *cp == '\t'; cp++)
1307 ;
1308
1309 /* ensure type of blob matches type at start of line */
1310 if (k->type != type) {
1311 sshkey_free(k);
1312 return SSH_ERR_KEY_TYPE_MISMATCH;
1313 }
1314 if (sshkey_type_plain(type) == KEY_ECDSA && curve_nid != k->ecdsa_nid) {
1315 sshkey_free(k);
1316 return SSH_ERR_EC_CURVE_MISMATCH;
1317 }
1318
1319 /* Fill in ret from parsed key */
1320 ret->type = type;
1321 if (sshkey_is_cert(ret)) {
1322 if (!sshkey_is_cert(k)) {
1235 sshkey_free(k); 1323 sshkey_free(k);
1236 return SSH_ERR_EC_CURVE_MISMATCH; 1324 return SSH_ERR_EXPECTED_CERT;
1237 }
1238 ret->type = type;
1239 if (sshkey_is_cert(ret)) {
1240 if (!sshkey_is_cert(k)) {
1241 sshkey_free(k);
1242 return SSH_ERR_EXPECTED_CERT;
1243 }
1244 if (ret->cert != NULL)
1245 cert_free(ret->cert);
1246 ret->cert = k->cert;
1247 k->cert = NULL;
1248 } 1325 }
1249 switch (sshkey_type_plain(ret->type)) { 1326 if (ret->cert != NULL)
1327 cert_free(ret->cert);
1328 ret->cert = k->cert;
1329 k->cert = NULL;
1330 }
1331 switch (sshkey_type_plain(ret->type)) {
1250#ifdef WITH_OPENSSL 1332#ifdef WITH_OPENSSL
1251 case KEY_RSA: 1333 case KEY_RSA:
1252 if (ret->rsa != NULL) 1334 RSA_free(ret->rsa);
1253 RSA_free(ret->rsa); 1335 ret->rsa = k->rsa;
1254 ret->rsa = k->rsa; 1336 k->rsa = NULL;
1255 k->rsa = NULL;
1256#ifdef DEBUG_PK 1337#ifdef DEBUG_PK
1257 RSA_print_fp(stderr, ret->rsa, 8); 1338 RSA_print_fp(stderr, ret->rsa, 8);
1258#endif 1339#endif
1259 break; 1340 break;
1260 case KEY_DSA: 1341 case KEY_DSA:
1261 if (ret->dsa != NULL) 1342 DSA_free(ret->dsa);
1262 DSA_free(ret->dsa); 1343 ret->dsa = k->dsa;
1263 ret->dsa = k->dsa; 1344 k->dsa = NULL;
1264 k->dsa = NULL;
1265#ifdef DEBUG_PK 1345#ifdef DEBUG_PK
1266 DSA_print_fp(stderr, ret->dsa, 8); 1346 DSA_print_fp(stderr, ret->dsa, 8);
1267#endif 1347#endif
1268 break; 1348 break;
1269# ifdef OPENSSL_HAS_ECC 1349# ifdef OPENSSL_HAS_ECC
1270 case KEY_ECDSA: 1350 case KEY_ECDSA:
1271 if (ret->ecdsa != NULL) 1351 EC_KEY_free(ret->ecdsa);
1272 EC_KEY_free(ret->ecdsa); 1352 ret->ecdsa = k->ecdsa;
1273 ret->ecdsa = k->ecdsa; 1353 ret->ecdsa_nid = k->ecdsa_nid;
1274 ret->ecdsa_nid = k->ecdsa_nid; 1354 k->ecdsa = NULL;
1275 k->ecdsa = NULL; 1355 k->ecdsa_nid = -1;
1276 k->ecdsa_nid = -1;
1277#ifdef DEBUG_PK 1356#ifdef DEBUG_PK
1278 sshkey_dump_ec_key(ret->ecdsa); 1357 sshkey_dump_ec_key(ret->ecdsa);
1279#endif 1358#endif
1280 break; 1359 break;
1281# endif /* OPENSSL_HAS_ECC */ 1360# endif /* OPENSSL_HAS_ECC */
1282#endif /* WITH_OPENSSL */ 1361#endif /* WITH_OPENSSL */
1283 case KEY_ED25519: 1362 case KEY_ED25519:
1284 free(ret->ed25519_pk); 1363 freezero(ret->ed25519_pk, ED25519_PK_SZ);
1285 ret->ed25519_pk = k->ed25519_pk; 1364 ret->ed25519_pk = k->ed25519_pk;
1286 k->ed25519_pk = NULL; 1365 k->ed25519_pk = NULL;
1287#ifdef DEBUG_PK 1366#ifdef DEBUG_PK
1288 /* XXX */ 1367 /* XXX */
1289#endif 1368#endif
1290 break;
1291 }
1292 *cpp = ep;
1293 retval = 0;
1294/*XXXX*/
1295 sshkey_free(k);
1296 if (retval != 0)
1297 break;
1298 break; 1369 break;
1370#ifdef WITH_XMSS
1371 case KEY_XMSS:
1372 free(ret->xmss_pk);
1373 ret->xmss_pk = k->xmss_pk;
1374 k->xmss_pk = NULL;
1375 free(ret->xmss_state);
1376 ret->xmss_state = k->xmss_state;
1377 k->xmss_state = NULL;
1378 free(ret->xmss_name);
1379 ret->xmss_name = k->xmss_name;
1380 k->xmss_name = NULL;
1381 free(ret->xmss_filename);
1382 ret->xmss_filename = k->xmss_filename;
1383 k->xmss_filename = NULL;
1384#ifdef DEBUG_PK
1385 /* XXX */
1386#endif
1387 break;
1388#endif /* WITH_XMSS */
1299 default: 1389 default:
1300 return SSH_ERR_INVALID_ARGUMENT; 1390 sshkey_free(k);
1391 return SSH_ERR_INTERNAL_ERROR;
1301 } 1392 }
1302 return retval; 1393 sshkey_free(k);
1394
1395 /* success */
1396 *cpp = cp;
1397 return 0;
1303} 1398}
1304 1399
1400
1305int 1401int
1306sshkey_to_base64(const struct sshkey *key, char **b64p) 1402sshkey_to_base64(const struct sshkey *key, char **b64p)
1307{ 1403{
@@ -1411,10 +1507,8 @@ rsa_generate_private_key(u_int bits, RSA **rsap)
1411 private = NULL; 1507 private = NULL;
1412 ret = 0; 1508 ret = 0;
1413 out: 1509 out:
1414 if (private != NULL) 1510 RSA_free(private);
1415 RSA_free(private); 1511 BN_free(f4);
1416 if (f4 != NULL)
1417 BN_free(f4);
1418 return ret; 1512 return ret;
1419} 1513}
1420 1514
@@ -1442,8 +1536,7 @@ dsa_generate_private_key(u_int bits, DSA **dsap)
1442 private = NULL; 1536 private = NULL;
1443 ret = 0; 1537 ret = 0;
1444 out: 1538 out:
1445 if (private != NULL) 1539 DSA_free(private);
1446 DSA_free(private);
1447 return ret; 1540 return ret;
1448} 1541}
1449 1542
@@ -1522,8 +1615,7 @@ ecdsa_generate_private_key(u_int bits, int *nid, EC_KEY **ecdsap)
1522 private = NULL; 1615 private = NULL;
1523 ret = 0; 1616 ret = 0;
1524 out: 1617 out:
1525 if (private != NULL) 1618 EC_KEY_free(private);
1526 EC_KEY_free(private);
1527 return ret; 1619 return ret;
1528} 1620}
1529# endif /* OPENSSL_HAS_ECC */ 1621# endif /* OPENSSL_HAS_ECC */
@@ -1550,6 +1642,11 @@ sshkey_generate(int type, u_int bits, struct sshkey **keyp)
1550 crypto_sign_ed25519_keypair(k->ed25519_pk, k->ed25519_sk); 1642 crypto_sign_ed25519_keypair(k->ed25519_pk, k->ed25519_sk);
1551 ret = 0; 1643 ret = 0;
1552 break; 1644 break;
1645#ifdef WITH_XMSS
1646 case KEY_XMSS:
1647 ret = sshkey_xmss_generate_private_key(k, bits);
1648 break;
1649#endif /* WITH_XMSS */
1553#ifdef WITH_OPENSSL 1650#ifdef WITH_OPENSSL
1554 case KEY_DSA: 1651 case KEY_DSA:
1555 ret = dsa_generate_private_key(bits, &k->dsa); 1652 ret = dsa_generate_private_key(bits, &k->dsa);
@@ -1693,6 +1790,29 @@ sshkey_from_private(const struct sshkey *k, struct sshkey **pkp)
1693 memcpy(n->ed25519_pk, k->ed25519_pk, ED25519_PK_SZ); 1790 memcpy(n->ed25519_pk, k->ed25519_pk, ED25519_PK_SZ);
1694 } 1791 }
1695 break; 1792 break;
1793#ifdef WITH_XMSS
1794 case KEY_XMSS:
1795 case KEY_XMSS_CERT:
1796 if ((n = sshkey_new(k->type)) == NULL)
1797 return SSH_ERR_ALLOC_FAIL;
1798 if ((ret = sshkey_xmss_init(n, k->xmss_name)) != 0) {
1799 sshkey_free(n);
1800 return ret;
1801 }
1802 if (k->xmss_pk != NULL) {
1803 size_t pklen = sshkey_xmss_pklen(k);
1804 if (pklen == 0 || sshkey_xmss_pklen(n) != pklen) {
1805 sshkey_free(n);
1806 return SSH_ERR_INTERNAL_ERROR;
1807 }
1808 if ((n->xmss_pk = malloc(pklen)) == NULL) {
1809 sshkey_free(n);
1810 return SSH_ERR_ALLOC_FAIL;
1811 }
1812 memcpy(n->xmss_pk, k->xmss_pk, pklen);
1813 }
1814 break;
1815#endif /* WITH_XMSS */
1696 default: 1816 default:
1697 return SSH_ERR_KEY_TYPE_UNKNOWN; 1817 return SSH_ERR_KEY_TYPE_UNKNOWN;
1698 } 1818 }
@@ -1815,7 +1935,7 @@ cert_parse(struct sshbuf *b, struct sshkey *key, struct sshbuf *certbuf)
1815 goto out; 1935 goto out;
1816 } 1936 }
1817 if ((ret = sshkey_verify(key->cert->signature_key, sig, slen, 1937 if ((ret = sshkey_verify(key->cert->signature_key, sig, slen,
1818 sshbuf_ptr(key->cert->certblob), signed_len, 0)) != 0) 1938 sshbuf_ptr(key->cert->certblob), signed_len, NULL, 0)) != 0)
1819 goto out; 1939 goto out;
1820 1940
1821 /* Success */ 1941 /* Success */
@@ -1834,7 +1954,7 @@ sshkey_from_blob_internal(struct sshbuf *b, struct sshkey **keyp,
1834 int allow_cert) 1954 int allow_cert)
1835{ 1955{
1836 int type, ret = SSH_ERR_INTERNAL_ERROR; 1956 int type, ret = SSH_ERR_INTERNAL_ERROR;
1837 char *ktype = NULL, *curve = NULL; 1957 char *ktype = NULL, *curve = NULL, *xmss_name = NULL;
1838 struct sshkey *key = NULL; 1958 struct sshkey *key = NULL;
1839 size_t len; 1959 size_t len;
1840 u_char *pk = NULL; 1960 u_char *pk = NULL;
@@ -1934,8 +2054,7 @@ sshkey_from_blob_internal(struct sshbuf *b, struct sshkey **keyp,
1934 ret = SSH_ERR_EC_CURVE_MISMATCH; 2054 ret = SSH_ERR_EC_CURVE_MISMATCH;
1935 goto out; 2055 goto out;
1936 } 2056 }
1937 if (key->ecdsa != NULL) 2057 EC_KEY_free(key->ecdsa);
1938 EC_KEY_free(key->ecdsa);
1939 if ((key->ecdsa = EC_KEY_new_by_curve_name(key->ecdsa_nid)) 2058 if ((key->ecdsa = EC_KEY_new_by_curve_name(key->ecdsa_nid))
1940 == NULL) { 2059 == NULL) {
1941 ret = SSH_ERR_EC_CURVE_INVALID; 2060 ret = SSH_ERR_EC_CURVE_INVALID;
@@ -1986,6 +2105,36 @@ sshkey_from_blob_internal(struct sshbuf *b, struct sshkey **keyp,
1986 key->ed25519_pk = pk; 2105 key->ed25519_pk = pk;
1987 pk = NULL; 2106 pk = NULL;
1988 break; 2107 break;
2108#ifdef WITH_XMSS
2109 case KEY_XMSS_CERT:
2110 /* Skip nonce */
2111 if (sshbuf_get_string_direct(b, NULL, NULL) != 0) {
2112 ret = SSH_ERR_INVALID_FORMAT;
2113 goto out;
2114 }
2115 /* FALLTHROUGH */
2116 case KEY_XMSS:
2117 if ((ret = sshbuf_get_cstring(b, &xmss_name, NULL)) != 0)
2118 goto out;
2119 if ((key = sshkey_new(type)) == NULL) {
2120 ret = SSH_ERR_ALLOC_FAIL;
2121 goto out;
2122 }
2123 if ((ret = sshkey_xmss_init(key, xmss_name)) != 0)
2124 goto out;
2125 if ((ret = sshbuf_get_string(b, &pk, &len)) != 0)
2126 goto out;
2127 if (len == 0 || len != sshkey_xmss_pklen(key)) {
2128 ret = SSH_ERR_INVALID_FORMAT;
2129 goto out;
2130 }
2131 key->xmss_pk = pk;
2132 pk = NULL;
2133 if (type != KEY_XMSS_CERT &&
2134 (ret = sshkey_xmss_deserialize_pk_info(key, b)) != 0)
2135 goto out;
2136 break;
2137#endif /* WITH_XMSS */
1989 case KEY_UNSPEC: 2138 case KEY_UNSPEC:
1990 default: 2139 default:
1991 ret = SSH_ERR_KEY_TYPE_UNKNOWN; 2140 ret = SSH_ERR_KEY_TYPE_UNKNOWN;
@@ -2008,12 +2157,12 @@ sshkey_from_blob_internal(struct sshbuf *b, struct sshkey **keyp,
2008 out: 2157 out:
2009 sshbuf_free(copy); 2158 sshbuf_free(copy);
2010 sshkey_free(key); 2159 sshkey_free(key);
2160 free(xmss_name);
2011 free(ktype); 2161 free(ktype);
2012 free(curve); 2162 free(curve);
2013 free(pk); 2163 free(pk);
2014#if defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC) 2164#if defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC)
2015 if (q != NULL) 2165 EC_POINT_free(q);
2016 EC_POINT_free(q);
2017#endif /* WITH_OPENSSL && OPENSSL_HAS_ECC */ 2166#endif /* WITH_OPENSSL && OPENSSL_HAS_ECC */
2018 return ret; 2167 return ret;
2019} 2168}
@@ -2051,6 +2200,31 @@ sshkey_froms(struct sshbuf *buf, struct sshkey **keyp)
2051} 2200}
2052 2201
2053int 2202int
2203sshkey_sigtype(const u_char *sig, size_t siglen, char **sigtypep)
2204{
2205 int r;
2206 struct sshbuf *b = NULL;
2207 char *sigtype = NULL;
2208
2209 if (sigtypep != NULL)
2210 *sigtypep = NULL;
2211 if ((b = sshbuf_from(sig, siglen)) == NULL)
2212 return SSH_ERR_ALLOC_FAIL;
2213 if ((r = sshbuf_get_cstring(b, &sigtype, NULL)) != 0)
2214 goto out;
2215 /* success */
2216 if (sigtypep != NULL) {
2217 *sigtypep = sigtype;
2218 sigtype = NULL;
2219 }
2220 r = 0;
2221 out:
2222 free(sigtype);
2223 sshbuf_free(b);
2224 return r;
2225}
2226
2227int
2054sshkey_sign(const struct sshkey *key, 2228sshkey_sign(const struct sshkey *key,
2055 u_char **sigp, size_t *lenp, 2229 u_char **sigp, size_t *lenp,
2056 const u_char *data, size_t datalen, const char *alg, u_int compat) 2230 const u_char *data, size_t datalen, const char *alg, u_int compat)
@@ -2078,6 +2252,11 @@ sshkey_sign(const struct sshkey *key,
2078 case KEY_ED25519: 2252 case KEY_ED25519:
2079 case KEY_ED25519_CERT: 2253 case KEY_ED25519_CERT:
2080 return ssh_ed25519_sign(key, sigp, lenp, data, datalen, compat); 2254 return ssh_ed25519_sign(key, sigp, lenp, data, datalen, compat);
2255#ifdef WITH_XMSS
2256 case KEY_XMSS:
2257 case KEY_XMSS_CERT:
2258 return ssh_xmss_sign(key, sigp, lenp, data, datalen, compat);
2259#endif /* WITH_XMSS */
2081 default: 2260 default:
2082 return SSH_ERR_KEY_TYPE_UNKNOWN; 2261 return SSH_ERR_KEY_TYPE_UNKNOWN;
2083 } 2262 }
@@ -2085,11 +2264,12 @@ sshkey_sign(const struct sshkey *key,
2085 2264
2086/* 2265/*
2087 * ssh_key_verify returns 0 for a correct signature and < 0 on error. 2266 * ssh_key_verify returns 0 for a correct signature and < 0 on error.
2267 * If "alg" specified, then the signature must use that algorithm.
2088 */ 2268 */
2089int 2269int
2090sshkey_verify(const struct sshkey *key, 2270sshkey_verify(const struct sshkey *key,
2091 const u_char *sig, size_t siglen, 2271 const u_char *sig, size_t siglen,
2092 const u_char *data, size_t dlen, u_int compat) 2272 const u_char *data, size_t dlen, const char *alg, u_int compat)
2093{ 2273{
2094 if (siglen == 0 || dlen > SSH_KEY_MAX_SIGN_DATA_SIZE) 2274 if (siglen == 0 || dlen > SSH_KEY_MAX_SIGN_DATA_SIZE)
2095 return SSH_ERR_INVALID_ARGUMENT; 2275 return SSH_ERR_INVALID_ARGUMENT;
@@ -2105,11 +2285,16 @@ sshkey_verify(const struct sshkey *key,
2105# endif /* OPENSSL_HAS_ECC */ 2285# endif /* OPENSSL_HAS_ECC */
2106 case KEY_RSA_CERT: 2286 case KEY_RSA_CERT:
2107 case KEY_RSA: 2287 case KEY_RSA:
2108 return ssh_rsa_verify(key, sig, siglen, data, dlen); 2288 return ssh_rsa_verify(key, sig, siglen, data, dlen, alg);
2109#endif /* WITH_OPENSSL */ 2289#endif /* WITH_OPENSSL */
2110 case KEY_ED25519: 2290 case KEY_ED25519:
2111 case KEY_ED25519_CERT: 2291 case KEY_ED25519_CERT:
2112 return ssh_ed25519_verify(key, sig, siglen, data, dlen, compat); 2292 return ssh_ed25519_verify(key, sig, siglen, data, dlen, compat);
2293#ifdef WITH_XMSS
2294 case KEY_XMSS:
2295 case KEY_XMSS_CERT:
2296 return ssh_xmss_verify(key, sig, siglen, data, dlen, compat);
2297#endif /* WITH_XMSS */
2113 default: 2298 default:
2114 return SSH_ERR_KEY_TYPE_UNKNOWN; 2299 return SSH_ERR_KEY_TYPE_UNKNOWN;
2115 } 2300 }
@@ -2133,6 +2318,8 @@ sshkey_demote(const struct sshkey *k, struct sshkey **dkp)
2133 pk->rsa = NULL; 2318 pk->rsa = NULL;
2134 pk->ed25519_pk = NULL; 2319 pk->ed25519_pk = NULL;
2135 pk->ed25519_sk = NULL; 2320 pk->ed25519_sk = NULL;
2321 pk->xmss_pk = NULL;
2322 pk->xmss_sk = NULL;
2136 2323
2137 switch (k->type) { 2324 switch (k->type) {
2138#ifdef WITH_OPENSSL 2325#ifdef WITH_OPENSSL
@@ -2194,6 +2381,29 @@ sshkey_demote(const struct sshkey *k, struct sshkey **dkp)
2194 memcpy(pk->ed25519_pk, k->ed25519_pk, ED25519_PK_SZ); 2381 memcpy(pk->ed25519_pk, k->ed25519_pk, ED25519_PK_SZ);
2195 } 2382 }
2196 break; 2383 break;
2384#ifdef WITH_XMSS
2385 case KEY_XMSS_CERT:
2386 if ((ret = sshkey_cert_copy(k, pk)) != 0)
2387 goto fail;
2388 /* FALLTHROUGH */
2389 case KEY_XMSS:
2390 if ((ret = sshkey_xmss_init(pk, k->xmss_name)) != 0)
2391 goto fail;
2392 if (k->xmss_pk != NULL) {
2393 size_t pklen = sshkey_xmss_pklen(k);
2394
2395 if (pklen == 0 || sshkey_xmss_pklen(pk) != pklen) {
2396 ret = SSH_ERR_INTERNAL_ERROR;
2397 goto fail;
2398 }
2399 if ((pk->xmss_pk = malloc(pklen)) == NULL) {
2400 ret = SSH_ERR_ALLOC_FAIL;
2401 goto fail;
2402 }
2403 memcpy(pk->xmss_pk, k->xmss_pk, pklen);
2404 }
2405 break;
2406#endif /* WITH_XMSS */
2197 default: 2407 default:
2198 ret = SSH_ERR_KEY_TYPE_UNKNOWN; 2408 ret = SSH_ERR_KEY_TYPE_UNKNOWN;
2199 fail: 2409 fail:
@@ -2225,6 +2435,11 @@ sshkey_to_certified(struct sshkey *k)
2225 case KEY_ED25519: 2435 case KEY_ED25519:
2226 newtype = KEY_ED25519_CERT; 2436 newtype = KEY_ED25519_CERT;
2227 break; 2437 break;
2438#ifdef WITH_XMSS
2439 case KEY_XMSS:
2440 newtype = KEY_XMSS_CERT;
2441 break;
2442#endif /* WITH_XMSS */
2228 default: 2443 default:
2229 return SSH_ERR_INVALID_ARGUMENT; 2444 return SSH_ERR_INVALID_ARGUMENT;
2230 } 2445 }
@@ -2309,6 +2524,18 @@ sshkey_certify_custom(struct sshkey *k, struct sshkey *ca, const char *alg,
2309 k->ed25519_pk, ED25519_PK_SZ)) != 0) 2524 k->ed25519_pk, ED25519_PK_SZ)) != 0)
2310 goto out; 2525 goto out;
2311 break; 2526 break;
2527#ifdef WITH_XMSS
2528 case KEY_XMSS_CERT:
2529 if (k->xmss_name == NULL) {
2530 ret = SSH_ERR_INVALID_ARGUMENT;
2531 goto out;
2532 }
2533 if ((ret = sshbuf_put_cstring(cert, k->xmss_name)) ||
2534 (ret = sshbuf_put_string(cert,
2535 k->xmss_pk, sshkey_xmss_pklen(k))) != 0)
2536 goto out;
2537 break;
2538#endif /* WITH_XMSS */
2312 default: 2539 default:
2313 ret = SSH_ERR_INVALID_ARGUMENT; 2540 ret = SSH_ERR_INVALID_ARGUMENT;
2314 goto out; 2541 goto out;
@@ -2466,7 +2693,8 @@ sshkey_format_cert_validity(const struct sshkey_cert *cert, char *s, size_t l)
2466} 2693}
2467 2694
2468int 2695int
2469sshkey_private_serialize(const struct sshkey *key, struct sshbuf *b) 2696sshkey_private_serialize_opt(const struct sshkey *key, struct sshbuf *b,
2697 enum sshkey_serialize_rep opts)
2470{ 2698{
2471 int r = SSH_ERR_INTERNAL_ERROR; 2699 int r = SSH_ERR_INTERNAL_ERROR;
2472 2700
@@ -2552,6 +2780,36 @@ sshkey_private_serialize(const struct sshkey *key, struct sshbuf *b)
2552 ED25519_SK_SZ)) != 0) 2780 ED25519_SK_SZ)) != 0)
2553 goto out; 2781 goto out;
2554 break; 2782 break;
2783#ifdef WITH_XMSS
2784 case KEY_XMSS:
2785 if (key->xmss_name == NULL) {
2786 r = SSH_ERR_INVALID_ARGUMENT;
2787 goto out;
2788 }
2789 if ((r = sshbuf_put_cstring(b, key->xmss_name)) != 0 ||
2790 (r = sshbuf_put_string(b, key->xmss_pk,
2791 sshkey_xmss_pklen(key))) != 0 ||
2792 (r = sshbuf_put_string(b, key->xmss_sk,
2793 sshkey_xmss_sklen(key))) != 0 ||
2794 (r = sshkey_xmss_serialize_state_opt(key, b, opts)) != 0)
2795 goto out;
2796 break;
2797 case KEY_XMSS_CERT:
2798 if (key->cert == NULL || sshbuf_len(key->cert->certblob) == 0 ||
2799 key->xmss_name == NULL) {
2800 r = SSH_ERR_INVALID_ARGUMENT;
2801 goto out;
2802 }
2803 if ((r = sshbuf_put_stringb(b, key->cert->certblob)) != 0 ||
2804 (r = sshbuf_put_cstring(b, key->xmss_name)) != 0 ||
2805 (r = sshbuf_put_string(b, key->xmss_pk,
2806 sshkey_xmss_pklen(key))) != 0 ||
2807 (r = sshbuf_put_string(b, key->xmss_sk,
2808 sshkey_xmss_sklen(key))) != 0 ||
2809 (r = sshkey_xmss_serialize_state_opt(key, b, opts)) != 0)
2810 goto out;
2811 break;
2812#endif /* WITH_XMSS */
2555 default: 2813 default:
2556 r = SSH_ERR_INVALID_ARGUMENT; 2814 r = SSH_ERR_INVALID_ARGUMENT;
2557 goto out; 2815 goto out;
@@ -2563,13 +2821,21 @@ sshkey_private_serialize(const struct sshkey *key, struct sshbuf *b)
2563} 2821}
2564 2822
2565int 2823int
2824sshkey_private_serialize(const struct sshkey *key, struct sshbuf *b)
2825{
2826 return sshkey_private_serialize_opt(key, b,
2827 SSHKEY_SERIALIZE_DEFAULT);
2828}
2829
2830int
2566sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **kp) 2831sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **kp)
2567{ 2832{
2568 char *tname = NULL, *curve = NULL; 2833 char *tname = NULL, *curve = NULL, *xmss_name = NULL;
2569 struct sshkey *k = NULL; 2834 struct sshkey *k = NULL;
2570 size_t pklen = 0, sklen = 0; 2835 size_t pklen = 0, sklen = 0;
2571 int type, r = SSH_ERR_INTERNAL_ERROR; 2836 int type, r = SSH_ERR_INTERNAL_ERROR;
2572 u_char *ed25519_pk = NULL, *ed25519_sk = NULL; 2837 u_char *ed25519_pk = NULL, *ed25519_sk = NULL;
2838 u_char *xmss_pk = NULL, *xmss_sk = NULL;
2573#ifdef WITH_OPENSSL 2839#ifdef WITH_OPENSSL
2574 BIGNUM *exponent = NULL; 2840 BIGNUM *exponent = NULL;
2575#endif /* WITH_OPENSSL */ 2841#endif /* WITH_OPENSSL */
@@ -2714,6 +2980,53 @@ sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **kp)
2714 k->ed25519_sk = ed25519_sk; 2980 k->ed25519_sk = ed25519_sk;
2715 ed25519_pk = ed25519_sk = NULL; 2981 ed25519_pk = ed25519_sk = NULL;
2716 break; 2982 break;
2983#ifdef WITH_XMSS
2984 case KEY_XMSS:
2985 if ((k = sshkey_new_private(type)) == NULL) {
2986 r = SSH_ERR_ALLOC_FAIL;
2987 goto out;
2988 }
2989 if ((r = sshbuf_get_cstring(buf, &xmss_name, NULL)) != 0 ||
2990 (r = sshkey_xmss_init(k, xmss_name)) != 0 ||
2991 (r = sshbuf_get_string(buf, &xmss_pk, &pklen)) != 0 ||
2992 (r = sshbuf_get_string(buf, &xmss_sk, &sklen)) != 0)
2993 goto out;
2994 if (pklen != sshkey_xmss_pklen(k) ||
2995 sklen != sshkey_xmss_sklen(k)) {
2996 r = SSH_ERR_INVALID_FORMAT;
2997 goto out;
2998 }
2999 k->xmss_pk = xmss_pk;
3000 k->xmss_sk = xmss_sk;
3001 xmss_pk = xmss_sk = NULL;
3002 /* optional internal state */
3003 if ((r = sshkey_xmss_deserialize_state_opt(k, buf)) != 0)
3004 goto out;
3005 break;
3006 case KEY_XMSS_CERT:
3007 if ((r = sshkey_froms(buf, &k)) != 0 ||
3008 (r = sshkey_add_private(k)) != 0 ||
3009 (r = sshbuf_get_cstring(buf, &xmss_name, NULL)) != 0 ||
3010 (r = sshbuf_get_string(buf, &xmss_pk, &pklen)) != 0 ||
3011 (r = sshbuf_get_string(buf, &xmss_sk, &sklen)) != 0)
3012 goto out;
3013 if (strcmp(xmss_name, k->xmss_name)) {
3014 r = SSH_ERR_INVALID_FORMAT;
3015 goto out;
3016 }
3017 if (pklen != sshkey_xmss_pklen(k) ||
3018 sklen != sshkey_xmss_sklen(k)) {
3019 r = SSH_ERR_INVALID_FORMAT;
3020 goto out;
3021 }
3022 k->xmss_pk = xmss_pk;
3023 k->xmss_sk = xmss_sk;
3024 xmss_pk = xmss_sk = NULL;
3025 /* optional internal state */
3026 if ((r = sshkey_xmss_deserialize_state_opt(k, buf)) != 0)
3027 goto out;
3028 break;
3029#endif /* WITH_XMSS */
2717 default: 3030 default:
2718 r = SSH_ERR_KEY_TYPE_UNKNOWN; 3031 r = SSH_ERR_KEY_TYPE_UNKNOWN;
2719 goto out; 3032 goto out;
@@ -2740,18 +3053,14 @@ sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **kp)
2740 free(tname); 3053 free(tname);
2741 free(curve); 3054 free(curve);
2742#ifdef WITH_OPENSSL 3055#ifdef WITH_OPENSSL
2743 if (exponent != NULL) 3056 BN_clear_free(exponent);
2744 BN_clear_free(exponent);
2745#endif /* WITH_OPENSSL */ 3057#endif /* WITH_OPENSSL */
2746 sshkey_free(k); 3058 sshkey_free(k);
2747 if (ed25519_pk != NULL) { 3059 freezero(ed25519_pk, pklen);
2748 explicit_bzero(ed25519_pk, pklen); 3060 freezero(ed25519_sk, sklen);
2749 free(ed25519_pk); 3061 free(xmss_name);
2750 } 3062 freezero(xmss_pk, pklen);
2751 if (ed25519_sk != NULL) { 3063 freezero(xmss_sk, sklen);
2752 explicit_bzero(ed25519_sk, sklen);
2753 free(ed25519_sk);
2754 }
2755 return r; 3064 return r;
2756} 3065}
2757 3066
@@ -2829,8 +3138,7 @@ sshkey_ec_validate_public(const EC_GROUP *group, const EC_POINT *public)
2829 ret = 0; 3138 ret = 0;
2830 out: 3139 out:
2831 BN_CTX_free(bnctx); 3140 BN_CTX_free(bnctx);
2832 if (nq != NULL) 3141 EC_POINT_free(nq);
2833 EC_POINT_free(nq);
2834 return ret; 3142 return ret;
2835} 3143}
2836 3144
@@ -3007,7 +3315,8 @@ sshkey_private_to_blob2(const struct sshkey *prv, struct sshbuf *blob,
3007 goto out; 3315 goto out;
3008 3316
3009 /* append private key and comment*/ 3317 /* append private key and comment*/
3010 if ((r = sshkey_private_serialize(prv, encrypted)) != 0 || 3318 if ((r = sshkey_private_serialize_opt(prv, encrypted,
3319 SSHKEY_SERIALIZE_FULL)) != 0 ||
3011 (r = sshbuf_put_cstring(encrypted, comment)) != 0) 3320 (r = sshbuf_put_cstring(encrypted, comment)) != 0)
3012 goto out; 3321 goto out;
3013 3322
@@ -3305,7 +3614,7 @@ sshkey_private_pem_to_blob(struct sshkey *key, struct sshbuf *blob,
3305 int blen, len = strlen(_passphrase); 3614 int blen, len = strlen(_passphrase);
3306 u_char *passphrase = (len > 0) ? (u_char *)_passphrase : NULL; 3615 u_char *passphrase = (len > 0) ? (u_char *)_passphrase : NULL;
3307 const EVP_CIPHER *cipher = (len > 0) ? EVP_aes_128_cbc() : NULL; 3616 const EVP_CIPHER *cipher = (len > 0) ? EVP_aes_128_cbc() : NULL;
3308 const u_char *bptr; 3617 char *bptr;
3309 BIO *bio = NULL; 3618 BIO *bio = NULL;
3310 3619
3311 if (len > 0 && len <= 4) 3620 if (len > 0 && len <= 4)
@@ -3368,6 +3677,9 @@ sshkey_private_to_fileblob(struct sshkey *key, struct sshbuf *blob,
3368 passphrase, comment); 3677 passphrase, comment);
3369#endif /* WITH_OPENSSL */ 3678#endif /* WITH_OPENSSL */
3370 case KEY_ED25519: 3679 case KEY_ED25519:
3680#ifdef WITH_XMSS
3681 case KEY_XMSS:
3682#endif /* WITH_XMSS */
3371 return sshkey_private_to_blob2(key, blob, passphrase, 3683 return sshkey_private_to_blob2(key, blob, passphrase,
3372 comment, new_format_cipher, new_format_rounds); 3684 comment, new_format_cipher, new_format_rounds);
3373 default: 3685 default:
@@ -3525,8 +3837,7 @@ sshkey_parse_private_pem_fileblob(struct sshbuf *blob, int type,
3525 } 3837 }
3526 out: 3838 out:
3527 BIO_free(bio); 3839 BIO_free(bio);
3528 if (pk != NULL) 3840 EVP_PKEY_free(pk);
3529 EVP_PKEY_free(pk);
3530 sshkey_free(prv); 3841 sshkey_free(prv);
3531 return r; 3842 return r;
3532} 3843}
@@ -3552,6 +3863,9 @@ sshkey_parse_private_fileblob_type(struct sshbuf *blob, int type,
3552 passphrase, keyp); 3863 passphrase, keyp);
3553#endif /* WITH_OPENSSL */ 3864#endif /* WITH_OPENSSL */
3554 case KEY_ED25519: 3865 case KEY_ED25519:
3866#ifdef WITH_XMSS
3867 case KEY_XMSS:
3868#endif /* WITH_XMSS */
3555 return sshkey_parse_private2(blob, type, passphrase, 3869 return sshkey_parse_private2(blob, type, passphrase,
3556 keyp, commentp); 3870 keyp, commentp);
3557 case KEY_UNSPEC: 3871 case KEY_UNSPEC:
@@ -3583,3 +3897,90 @@ sshkey_parse_private_fileblob(struct sshbuf *buffer, const char *passphrase,
3583 return sshkey_parse_private_fileblob_type(buffer, KEY_UNSPEC, 3897 return sshkey_parse_private_fileblob_type(buffer, KEY_UNSPEC,
3584 passphrase, keyp, commentp); 3898 passphrase, keyp, commentp);
3585} 3899}
3900
3901#ifdef WITH_XMSS
3902/*
3903 * serialize the key with the current state and forward the state
3904 * maxsign times.
3905 */
3906int
3907sshkey_private_serialize_maxsign(const struct sshkey *k, struct sshbuf *b,
3908 u_int32_t maxsign, sshkey_printfn *pr)
3909{
3910 int r, rupdate;
3911
3912 if (maxsign == 0 ||
3913 sshkey_type_plain(k->type) != KEY_XMSS)
3914 return sshkey_private_serialize_opt(k, b,
3915 SSHKEY_SERIALIZE_DEFAULT);
3916 if ((r = sshkey_xmss_get_state(k, pr)) != 0 ||
3917 (r = sshkey_private_serialize_opt(k, b,
3918 SSHKEY_SERIALIZE_STATE)) != 0 ||
3919 (r = sshkey_xmss_forward_state(k, maxsign)) != 0)
3920 goto out;
3921 r = 0;
3922out:
3923 if ((rupdate = sshkey_xmss_update_state(k, pr)) != 0) {
3924 if (r == 0)
3925 r = rupdate;
3926 }
3927 return r;
3928}
3929
3930u_int32_t
3931sshkey_signatures_left(const struct sshkey *k)
3932{
3933 if (sshkey_type_plain(k->type) == KEY_XMSS)
3934 return sshkey_xmss_signatures_left(k);
3935 return 0;
3936}
3937
3938int
3939sshkey_enable_maxsign(struct sshkey *k, u_int32_t maxsign)
3940{
3941 if (sshkey_type_plain(k->type) != KEY_XMSS)
3942 return SSH_ERR_INVALID_ARGUMENT;
3943 return sshkey_xmss_enable_maxsign(k, maxsign);
3944}
3945
3946int
3947sshkey_set_filename(struct sshkey *k, const char *filename)
3948{
3949 if (k == NULL)
3950 return SSH_ERR_INVALID_ARGUMENT;
3951 if (sshkey_type_plain(k->type) != KEY_XMSS)
3952 return 0;
3953 if (filename == NULL)
3954 return SSH_ERR_INVALID_ARGUMENT;
3955 if ((k->xmss_filename = strdup(filename)) == NULL)
3956 return SSH_ERR_ALLOC_FAIL;
3957 return 0;
3958}
3959#else
3960int
3961sshkey_private_serialize_maxsign(const struct sshkey *k, struct sshbuf *b,
3962 u_int32_t maxsign, sshkey_printfn *pr)
3963{
3964 return sshkey_private_serialize_opt(k, b, SSHKEY_SERIALIZE_DEFAULT);
3965}
3966
3967u_int32_t
3968sshkey_signatures_left(const struct sshkey *k)
3969{
3970 return 0;
3971}
3972
3973int
3974sshkey_enable_maxsign(struct sshkey *k, u_int32_t maxsign)
3975{
3976 return SSH_ERR_INVALID_ARGUMENT;
3977}
3978
3979int
3980sshkey_set_filename(struct sshkey *k, const char *filename)
3981{
3982 if (k == NULL)
3983 return SSH_ERR_INVALID_ARGUMENT;
3984 return 0;
3985}
3986#endif /* WITH_XMSS */
diff --git a/sshkey.h b/sshkey.h
index b5d020cbf..4e89049f1 100644
--- a/sshkey.h
+++ b/sshkey.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshkey.h,v 1.21 2017/07/01 13:50:45 djm Exp $ */ 1/* $OpenBSD: sshkey.h,v 1.24 2018/02/23 15:58:38 markus Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. 4 * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
@@ -61,6 +61,8 @@ enum sshkey_types {
61 KEY_DSA_CERT, 61 KEY_DSA_CERT,
62 KEY_ECDSA_CERT, 62 KEY_ECDSA_CERT,
63 KEY_ED25519_CERT, 63 KEY_ED25519_CERT,
64 KEY_XMSS,
65 KEY_XMSS_CERT,
64 KEY_NULL, 66 KEY_NULL,
65 KEY_UNSPEC 67 KEY_UNSPEC
66}; 68};
@@ -77,6 +79,14 @@ enum sshkey_fp_rep {
77 SSH_FP_RANDOMART 79 SSH_FP_RANDOMART
78}; 80};
79 81
82/* Private key serialisation formats, used on the wire */
83enum sshkey_serialize_rep {
84 SSHKEY_SERIALIZE_DEFAULT = 0,
85 SSHKEY_SERIALIZE_STATE = 1,
86 SSHKEY_SERIALIZE_FULL = 2,
87 SSHKEY_SERIALIZE_INFO = 254,
88};
89
80/* key is stored in external hardware */ 90/* key is stored in external hardware */
81#define SSHKEY_FLAG_EXT 0x0001 91#define SSHKEY_FLAG_EXT 0x0001
82 92
@@ -105,6 +115,11 @@ struct sshkey {
105 EC_KEY *ecdsa; 115 EC_KEY *ecdsa;
106 u_char *ed25519_sk; 116 u_char *ed25519_sk;
107 u_char *ed25519_pk; 117 u_char *ed25519_pk;
118 char *xmss_name;
119 char *xmss_filename; /* for state file updates */
120 void *xmss_state; /* depends on xmss_name, opaque */
121 u_char *xmss_sk;
122 u_char *xmss_pk;
108 struct sshkey_cert *cert; 123 struct sshkey_cert *cert;
109}; 124};
110 125
@@ -172,13 +187,16 @@ int sshkey_to_blob(const struct sshkey *, u_char **, size_t *);
172int sshkey_to_base64(const struct sshkey *, char **); 187int sshkey_to_base64(const struct sshkey *, char **);
173int sshkey_putb(const struct sshkey *, struct sshbuf *); 188int sshkey_putb(const struct sshkey *, struct sshbuf *);
174int sshkey_puts(const struct sshkey *, struct sshbuf *); 189int sshkey_puts(const struct sshkey *, struct sshbuf *);
190int sshkey_puts_opts(const struct sshkey *, struct sshbuf *,
191 enum sshkey_serialize_rep);
175int sshkey_plain_to_blob(const struct sshkey *, u_char **, size_t *); 192int sshkey_plain_to_blob(const struct sshkey *, u_char **, size_t *);
176int sshkey_putb_plain(const struct sshkey *, struct sshbuf *); 193int sshkey_putb_plain(const struct sshkey *, struct sshbuf *);
177 194
195int sshkey_sigtype(const u_char *, size_t, char **);
178int sshkey_sign(const struct sshkey *, u_char **, size_t *, 196int sshkey_sign(const struct sshkey *, u_char **, size_t *,
179 const u_char *, size_t, const char *, u_int); 197 const u_char *, size_t, const char *, u_int);
180int sshkey_verify(const struct sshkey *, const u_char *, size_t, 198int sshkey_verify(const struct sshkey *, const u_char *, size_t,
181 const u_char *, size_t, u_int); 199 const u_char *, size_t, const char *, u_int);
182 200
183/* for debug */ 201/* for debug */
184void sshkey_dump_ec_point(const EC_GROUP *, const EC_POINT *); 202void sshkey_dump_ec_point(const EC_GROUP *, const EC_POINT *);
@@ -186,6 +204,8 @@ void sshkey_dump_ec_key(const EC_KEY *);
186 204
187/* private key parsing and serialisation */ 205/* private key parsing and serialisation */
188int sshkey_private_serialize(const struct sshkey *key, struct sshbuf *buf); 206int sshkey_private_serialize(const struct sshkey *key, struct sshbuf *buf);
207int sshkey_private_serialize_opt(const struct sshkey *key, struct sshbuf *buf,
208 enum sshkey_serialize_rep);
189int sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **keyp); 209int sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **keyp);
190 210
191/* private key file format parsing and serialisation */ 211/* private key file format parsing and serialisation */
@@ -200,12 +220,26 @@ int sshkey_parse_private_fileblob_type(struct sshbuf *blob, int type,
200/* XXX should be internal, but used by ssh-keygen */ 220/* XXX should be internal, but used by ssh-keygen */
201int ssh_rsa_generate_additional_parameters(struct sshkey *); 221int ssh_rsa_generate_additional_parameters(struct sshkey *);
202 222
223/* stateful keys (e.g. XMSS) */
224#ifdef NO_ATTRIBUTE_ON_PROTOTYPE_ARGS
225typedef void sshkey_printfn(const char *, ...);
226#else
227typedef void sshkey_printfn(const char *, ...) __attribute__((format(printf, 1, 2)));
228#endif
229int sshkey_set_filename(struct sshkey *, const char *);
230int sshkey_enable_maxsign(struct sshkey *, u_int32_t);
231u_int32_t sshkey_signatures_left(const struct sshkey *);
232int sshkey_forward_state(const struct sshkey *, u_int32_t, sshkey_printfn *);
233int sshkey_private_serialize_maxsign(const struct sshkey *key, struct sshbuf *buf,
234 u_int32_t maxsign, sshkey_printfn *pr);
235
203#ifdef SSHKEY_INTERNAL 236#ifdef SSHKEY_INTERNAL
204int ssh_rsa_sign(const struct sshkey *key, 237int ssh_rsa_sign(const struct sshkey *key,
205 u_char **sigp, size_t *lenp, const u_char *data, size_t datalen, 238 u_char **sigp, size_t *lenp, const u_char *data, size_t datalen,
206 const char *ident); 239 const char *ident);
207int ssh_rsa_verify(const struct sshkey *key, 240int ssh_rsa_verify(const struct sshkey *key,
208 const u_char *sig, size_t siglen, const u_char *data, size_t datalen); 241 const u_char *sig, size_t siglen, const u_char *data, size_t datalen,
242 const char *alg);
209int ssh_dss_sign(const struct sshkey *key, u_char **sigp, size_t *lenp, 243int ssh_dss_sign(const struct sshkey *key, u_char **sigp, size_t *lenp,
210 const u_char *data, size_t datalen, u_int compat); 244 const u_char *data, size_t datalen, u_int compat);
211int ssh_dss_verify(const struct sshkey *key, 245int ssh_dss_verify(const struct sshkey *key,
@@ -221,6 +255,11 @@ int ssh_ed25519_sign(const struct sshkey *key, u_char **sigp, size_t *lenp,
221int ssh_ed25519_verify(const struct sshkey *key, 255int ssh_ed25519_verify(const struct sshkey *key,
222 const u_char *signature, size_t signaturelen, 256 const u_char *signature, size_t signaturelen,
223 const u_char *data, size_t datalen, u_int compat); 257 const u_char *data, size_t datalen, u_int compat);
258int ssh_xmss_sign(const struct sshkey *key, u_char **sigp, size_t *lenp,
259 const u_char *data, size_t datalen, u_int compat);
260int ssh_xmss_verify(const struct sshkey *key,
261 const u_char *signature, size_t signaturelen,
262 const u_char *data, size_t datalen, u_int compat);
224#endif 263#endif
225 264
226#if !defined(WITH_OPENSSL) 265#if !defined(WITH_OPENSSL)
diff --git a/sshpty.c b/sshpty.c
index feb22b06b..676ade50e 100644
--- a/sshpty.c
+++ b/sshpty.c
@@ -100,30 +100,6 @@ pty_make_controlling_tty(int *ttyfd, const char *tty)
100{ 100{
101 int fd; 101 int fd;
102 102
103#ifdef _UNICOS
104 if (setsid() < 0)
105 error("setsid: %.100s", strerror(errno));
106
107 fd = open(tty, O_RDWR|O_NOCTTY);
108 if (fd != -1) {
109 signal(SIGHUP, SIG_IGN);
110 ioctl(fd, TCVHUP, (char *)NULL);
111 signal(SIGHUP, SIG_DFL);
112 setpgid(0, 0);
113 close(fd);
114 } else {
115 error("Failed to disconnect from controlling tty.");
116 }
117
118 debug("Setting controlling tty using TCSETCTTY.");
119 ioctl(*ttyfd, TCSETCTTY, NULL);
120 fd = open("/dev/tty", O_RDWR);
121 if (fd < 0)
122 error("%.100s: %.100s", tty, strerror(errno));
123 close(*ttyfd);
124 *ttyfd = fd;
125#else /* _UNICOS */
126
127 /* First disconnect from the old controlling tty. */ 103 /* First disconnect from the old controlling tty. */
128#ifdef TIOCNOTTY 104#ifdef TIOCNOTTY
129 fd = open(_PATH_TTY, O_RDWR | O_NOCTTY); 105 fd = open(_PATH_TTY, O_RDWR | O_NOCTTY);
@@ -167,7 +143,6 @@ pty_make_controlling_tty(int *ttyfd, const char *tty)
167 strerror(errno)); 143 strerror(errno));
168 else 144 else
169 close(fd); 145 close(fd);
170#endif /* _UNICOS */
171} 146}
172 147
173/* Changes the window size associated with the pty. */ 148/* Changes the window size associated with the pty. */
diff --git a/ttymodes.c b/ttymodes.c
index 845139635..f9fdb92de 100644
--- a/ttymodes.c
+++ b/ttymodes.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ttymodes.c,v 1.32 2017/04/30 23:26:54 djm Exp $ */ 1/* $OpenBSD: ttymodes.c,v 1.33 2018/02/16 04:43:11 dtucker Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -56,6 +56,7 @@
56#include "log.h" 56#include "log.h"
57#include "compat.h" 57#include "compat.h"
58#include "buffer.h" 58#include "buffer.h"
59#include "compat.h"
59 60
60#define TTY_OP_END 0 61#define TTY_OP_END 0
61/* 62/*
@@ -308,9 +309,15 @@ tty_make_modes(int fd, struct termios *tiop)
308 buffer_put_char(&buf, OP); \ 309 buffer_put_char(&buf, OP); \
309 buffer_put_int(&buf, special_char_encode(tio.c_cc[NAME])); 310 buffer_put_int(&buf, special_char_encode(tio.c_cc[NAME]));
310 311
312#define SSH_TTYMODE_IUTF8 42 /* for SSH_BUG_UTF8TTYMODE */
313
311#define TTYMODE(NAME, FIELD, OP) \ 314#define TTYMODE(NAME, FIELD, OP) \
312 buffer_put_char(&buf, OP); \ 315 if (OP == SSH_TTYMODE_IUTF8 && (datafellows & SSH_BUG_UTF8TTYMODE)) { \
313 buffer_put_int(&buf, ((tio.FIELD & NAME) != 0)); 316 debug3("%s: SSH_BUG_UTF8TTYMODE", __func__); \
317 } else { \
318 buffer_put_char(&buf, OP); \
319 buffer_put_int(&buf, ((tio.FIELD & NAME) != 0)); \
320 }
314 321
315#include "ttymodes.h" 322#include "ttymodes.h"
316 323
diff --git a/umac.c b/umac.c
index 9f2187c9a..eab831072 100644
--- a/umac.c
+++ b/umac.c
@@ -1,6 +1,6 @@
1/* $OpenBSD: umac.c,v 1.12 2017/05/31 08:09:45 markus Exp $ */ 1/* $OpenBSD: umac.c,v 1.16 2017/12/12 15:06:12 naddy Exp $ */
2/* ----------------------------------------------------------------------- 2/* -----------------------------------------------------------------------
3 * 3 *
4 * umac.c -- C Implementation UMAC Message Authentication 4 * umac.c -- C Implementation UMAC Message Authentication
5 * 5 *
6 * Version 0.93b of rfc4418.txt -- 2006 July 18 6 * Version 0.93b of rfc4418.txt -- 2006 July 18
@@ -10,7 +10,7 @@
10 * Please report bugs and suggestions to the UMAC webpage. 10 * Please report bugs and suggestions to the UMAC webpage.
11 * 11 *
12 * Copyright (c) 1999-2006 Ted Krovetz 12 * Copyright (c) 1999-2006 Ted Krovetz
13 * 13 *
14 * Permission to use, copy, modify, and distribute this software and 14 * Permission to use, copy, modify, and distribute this software and
15 * its documentation for any purpose and with or without fee, is hereby 15 * its documentation for any purpose and with or without fee, is hereby
16 * granted provided that the above copyright notice appears in all copies 16 * granted provided that the above copyright notice appears in all copies
@@ -18,10 +18,10 @@
18 * holder not be used in advertising or publicity pertaining to 18 * holder not be used in advertising or publicity pertaining to
19 * distribution of the software without specific, written prior permission. 19 * distribution of the software without specific, written prior permission.
20 * 20 *
21 * Comments should be directed to Ted Krovetz (tdk@acm.org) 21 * Comments should be directed to Ted Krovetz (tdk@acm.org)
22 * 22 *
23 * ---------------------------------------------------------------------- */ 23 * ---------------------------------------------------------------------- */
24 24
25 /* ////////////////////// IMPORTANT NOTES ///////////////////////////////// 25 /* ////////////////////// IMPORTANT NOTES /////////////////////////////////
26 * 26 *
27 * 1) This version does not work properly on messages larger than 16MB 27 * 1) This version does not work properly on messages larger than 16MB
@@ -47,7 +47,7 @@
47 * produced under gcc with optimizations set -O3 or higher. Dunno why. 47 * produced under gcc with optimizations set -O3 or higher. Dunno why.
48 * 48 *
49 /////////////////////////////////////////////////////////////////////// */ 49 /////////////////////////////////////////////////////////////////////// */
50 50
51/* ---------------------------------------------------------------------- */ 51/* ---------------------------------------------------------------------- */
52/* --- User Switches ---------------------------------------------------- */ 52/* --- User Switches ---------------------------------------------------- */
53/* ---------------------------------------------------------------------- */ 53/* ---------------------------------------------------------------------- */
@@ -187,11 +187,11 @@ static void kdf(void *bufp, aes_int_key key, UINT8 ndx, int nbytes)
187 UINT8 out_buf[AES_BLOCK_LEN]; 187 UINT8 out_buf[AES_BLOCK_LEN];
188 UINT8 *dst_buf = (UINT8 *)bufp; 188 UINT8 *dst_buf = (UINT8 *)bufp;
189 int i; 189 int i;
190 190
191 /* Setup the initial value */ 191 /* Setup the initial value */
192 in_buf[AES_BLOCK_LEN-9] = ndx; 192 in_buf[AES_BLOCK_LEN-9] = ndx;
193 in_buf[AES_BLOCK_LEN-1] = i = 1; 193 in_buf[AES_BLOCK_LEN-1] = i = 1;
194 194
195 while (nbytes >= AES_BLOCK_LEN) { 195 while (nbytes >= AES_BLOCK_LEN) {
196 aes_encryption(in_buf, out_buf, key); 196 aes_encryption(in_buf, out_buf, key);
197 memcpy(dst_buf,out_buf,AES_BLOCK_LEN); 197 memcpy(dst_buf,out_buf,AES_BLOCK_LEN);
@@ -208,7 +208,7 @@ static void kdf(void *bufp, aes_int_key key, UINT8 ndx, int nbytes)
208} 208}
209 209
210/* The final UHASH result is XOR'd with the output of a pseudorandom 210/* The final UHASH result is XOR'd with the output of a pseudorandom
211 * function. Here, we use AES to generate random output and 211 * function. Here, we use AES to generate random output and
212 * xor the appropriate bytes depending on the last bits of nonce. 212 * xor the appropriate bytes depending on the last bits of nonce.
213 * This scheme is optimized for sequential, increasing big-endian nonces. 213 * This scheme is optimized for sequential, increasing big-endian nonces.
214 */ 214 */
@@ -222,10 +222,10 @@ typedef struct {
222static void pdf_init(pdf_ctx *pc, aes_int_key prf_key) 222static void pdf_init(pdf_ctx *pc, aes_int_key prf_key)
223{ 223{
224 UINT8 buf[UMAC_KEY_LEN]; 224 UINT8 buf[UMAC_KEY_LEN];
225 225
226 kdf(buf, prf_key, 0, UMAC_KEY_LEN); 226 kdf(buf, prf_key, 0, UMAC_KEY_LEN);
227 aes_key_setup(buf, pc->prf_key); 227 aes_key_setup(buf, pc->prf_key);
228 228
229 /* Initialize pdf and cache */ 229 /* Initialize pdf and cache */
230 memset(pc->nonce, 0, sizeof(pc->nonce)); 230 memset(pc->nonce, 0, sizeof(pc->nonce));
231 aes_encryption(pc->nonce, pc->cache, pc->prf_key); 231 aes_encryption(pc->nonce, pc->cache, pc->prf_key);
@@ -238,7 +238,7 @@ static void pdf_gen_xor(pdf_ctx *pc, const UINT8 nonce[8], UINT8 buf[8])
238 * of the AES output. If last time around we returned the ndx-1st 238 * of the AES output. If last time around we returned the ndx-1st
239 * element, then we may have the result in the cache already. 239 * element, then we may have the result in the cache already.
240 */ 240 */
241 241
242#if (UMAC_OUTPUT_LEN == 4) 242#if (UMAC_OUTPUT_LEN == 4)
243#define LOW_BIT_MASK 3 243#define LOW_BIT_MASK 3
244#elif (UMAC_OUTPUT_LEN == 8) 244#elif (UMAC_OUTPUT_LEN == 8)
@@ -255,7 +255,7 @@ static void pdf_gen_xor(pdf_ctx *pc, const UINT8 nonce[8], UINT8 buf[8])
255#endif 255#endif
256 *(UINT32 *)t.tmp_nonce_lo = ((const UINT32 *)nonce)[1]; 256 *(UINT32 *)t.tmp_nonce_lo = ((const UINT32 *)nonce)[1];
257 t.tmp_nonce_lo[3] &= ~LOW_BIT_MASK; /* zero last bit */ 257 t.tmp_nonce_lo[3] &= ~LOW_BIT_MASK; /* zero last bit */
258 258
259 if ( (((UINT32 *)t.tmp_nonce_lo)[0] != ((UINT32 *)pc->nonce)[1]) || 259 if ( (((UINT32 *)t.tmp_nonce_lo)[0] != ((UINT32 *)pc->nonce)[1]) ||
260 (((const UINT32 *)nonce)[0] != ((UINT32 *)pc->nonce)[0]) ) 260 (((const UINT32 *)nonce)[0] != ((UINT32 *)pc->nonce)[0]) )
261 { 261 {
@@ -263,7 +263,7 @@ static void pdf_gen_xor(pdf_ctx *pc, const UINT8 nonce[8], UINT8 buf[8])
263 ((UINT32 *)pc->nonce)[1] = ((UINT32 *)t.tmp_nonce_lo)[0]; 263 ((UINT32 *)pc->nonce)[1] = ((UINT32 *)t.tmp_nonce_lo)[0];
264 aes_encryption(pc->nonce, pc->cache, pc->prf_key); 264 aes_encryption(pc->nonce, pc->cache, pc->prf_key);
265 } 265 }
266 266
267#if (UMAC_OUTPUT_LEN == 4) 267#if (UMAC_OUTPUT_LEN == 4)
268 *((UINT32 *)buf) ^= ((UINT32 *)pc->cache)[ndx]; 268 *((UINT32 *)buf) ^= ((UINT32 *)pc->cache)[ndx];
269#elif (UMAC_OUTPUT_LEN == 8) 269#elif (UMAC_OUTPUT_LEN == 8)
@@ -284,28 +284,28 @@ static void pdf_gen_xor(pdf_ctx *pc, const UINT8 nonce[8], UINT8 buf[8])
284/* ---------------------------------------------------------------------- */ 284/* ---------------------------------------------------------------------- */
285 285
286/* The NH-based hash functions used in UMAC are described in the UMAC paper 286/* The NH-based hash functions used in UMAC are described in the UMAC paper
287 * and specification, both of which can be found at the UMAC website. 287 * and specification, both of which can be found at the UMAC website.
288 * The interface to this implementation has two 288 * The interface to this implementation has two
289 * versions, one expects the entire message being hashed to be passed 289 * versions, one expects the entire message being hashed to be passed
290 * in a single buffer and returns the hash result immediately. The second 290 * in a single buffer and returns the hash result immediately. The second
291 * allows the message to be passed in a sequence of buffers. In the 291 * allows the message to be passed in a sequence of buffers. In the
292 * muliple-buffer interface, the client calls the routine nh_update() as 292 * muliple-buffer interface, the client calls the routine nh_update() as
293 * many times as necessary. When there is no more data to be fed to the 293 * many times as necessary. When there is no more data to be fed to the
294 * hash, the client calls nh_final() which calculates the hash output. 294 * hash, the client calls nh_final() which calculates the hash output.
295 * Before beginning another hash calculation the nh_reset() routine 295 * Before beginning another hash calculation the nh_reset() routine
296 * must be called. The single-buffer routine, nh(), is equivalent to 296 * must be called. The single-buffer routine, nh(), is equivalent to
297 * the sequence of calls nh_update() and nh_final(); however it is 297 * the sequence of calls nh_update() and nh_final(); however it is
298 * optimized and should be prefered whenever the multiple-buffer interface 298 * optimized and should be prefered whenever the multiple-buffer interface
299 * is not necessary. When using either interface, it is the client's 299 * is not necessary. When using either interface, it is the client's
300 * responsability to pass no more than L1_KEY_LEN bytes per hash result. 300 * responsability to pass no more than L1_KEY_LEN bytes per hash result.
301 * 301 *
302 * The routine nh_init() initializes the nh_ctx data structure and 302 * The routine nh_init() initializes the nh_ctx data structure and
303 * must be called once, before any other PDF routine. 303 * must be called once, before any other PDF routine.
304 */ 304 */
305 305
306 /* The "nh_aux" routines do the actual NH hashing work. They 306 /* The "nh_aux" routines do the actual NH hashing work. They
307 * expect buffers to be multiples of L1_PAD_BOUNDARY. These routines 307 * expect buffers to be multiples of L1_PAD_BOUNDARY. These routines
308 * produce output for all STREAMS NH iterations in one call, 308 * produce output for all STREAMS NH iterations in one call,
309 * allowing the parallel implementation of the streams. 309 * allowing the parallel implementation of the streams.
310 */ 310 */
311 311
@@ -328,10 +328,10 @@ typedef struct {
328#if (UMAC_OUTPUT_LEN == 4) 328#if (UMAC_OUTPUT_LEN == 4)
329 329
330static void nh_aux(void *kp, const void *dp, void *hp, UINT32 dlen) 330static void nh_aux(void *kp, const void *dp, void *hp, UINT32 dlen)
331/* NH hashing primitive. Previous (partial) hash result is loaded and 331/* NH hashing primitive. Previous (partial) hash result is loaded and
332* then stored via hp pointer. The length of the data pointed at by "dp", 332* then stored via hp pointer. The length of the data pointed at by "dp",
333* "dlen", is guaranteed to be divisible by L1_PAD_BOUNDARY (32). Key 333* "dlen", is guaranteed to be divisible by L1_PAD_BOUNDARY (32). Key
334* is expected to be endian compensated in memory at key setup. 334* is expected to be endian compensated in memory at key setup.
335*/ 335*/
336{ 336{
337 UINT64 h; 337 UINT64 h;
@@ -340,7 +340,7 @@ static void nh_aux(void *kp, const void *dp, void *hp, UINT32 dlen)
340 const UINT32 *d = (const UINT32 *)dp; 340 const UINT32 *d = (const UINT32 *)dp;
341 UINT32 d0,d1,d2,d3,d4,d5,d6,d7; 341 UINT32 d0,d1,d2,d3,d4,d5,d6,d7;
342 UINT32 k0,k1,k2,k3,k4,k5,k6,k7; 342 UINT32 k0,k1,k2,k3,k4,k5,k6,k7;
343 343
344 h = *((UINT64 *)hp); 344 h = *((UINT64 *)hp);
345 do { 345 do {
346 d0 = LOAD_UINT32_LITTLE(d+0); d1 = LOAD_UINT32_LITTLE(d+1); 346 d0 = LOAD_UINT32_LITTLE(d+0); d1 = LOAD_UINT32_LITTLE(d+1);
@@ -353,7 +353,7 @@ static void nh_aux(void *kp, const void *dp, void *hp, UINT32 dlen)
353 h += MUL64((k1 + d1), (k5 + d5)); 353 h += MUL64((k1 + d1), (k5 + d5));
354 h += MUL64((k2 + d2), (k6 + d6)); 354 h += MUL64((k2 + d2), (k6 + d6));
355 h += MUL64((k3 + d3), (k7 + d7)); 355 h += MUL64((k3 + d3), (k7 + d7));
356 356
357 d += 8; 357 d += 8;
358 k += 8; 358 k += 8;
359 } while (--c); 359 } while (--c);
@@ -421,7 +421,7 @@ static void nh_aux(void *kp, const void *dp, void *hp, UINT32 dlen)
421 UINT32 d0,d1,d2,d3,d4,d5,d6,d7; 421 UINT32 d0,d1,d2,d3,d4,d5,d6,d7;
422 UINT32 k0,k1,k2,k3,k4,k5,k6,k7, 422 UINT32 k0,k1,k2,k3,k4,k5,k6,k7,
423 k8,k9,k10,k11,k12,k13,k14,k15; 423 k8,k9,k10,k11,k12,k13,k14,k15;
424 424
425 h1 = *((UINT64 *)hp); 425 h1 = *((UINT64 *)hp);
426 h2 = *((UINT64 *)hp + 1); 426 h2 = *((UINT64 *)hp + 1);
427 h3 = *((UINT64 *)hp + 2); 427 h3 = *((UINT64 *)hp + 2);
@@ -434,26 +434,26 @@ static void nh_aux(void *kp, const void *dp, void *hp, UINT32 dlen)
434 d6 = LOAD_UINT32_LITTLE(d+6); d7 = LOAD_UINT32_LITTLE(d+7); 434 d6 = LOAD_UINT32_LITTLE(d+6); d7 = LOAD_UINT32_LITTLE(d+7);
435 k8 = *(k+8); k9 = *(k+9); k10 = *(k+10); k11 = *(k+11); 435 k8 = *(k+8); k9 = *(k+9); k10 = *(k+10); k11 = *(k+11);
436 k12 = *(k+12); k13 = *(k+13); k14 = *(k+14); k15 = *(k+15); 436 k12 = *(k+12); k13 = *(k+13); k14 = *(k+14); k15 = *(k+15);
437 437
438 h1 += MUL64((k0 + d0), (k4 + d4)); 438 h1 += MUL64((k0 + d0), (k4 + d4));
439 h2 += MUL64((k4 + d0), (k8 + d4)); 439 h2 += MUL64((k4 + d0), (k8 + d4));
440 h3 += MUL64((k8 + d0), (k12 + d4)); 440 h3 += MUL64((k8 + d0), (k12 + d4));
441 441
442 h1 += MUL64((k1 + d1), (k5 + d5)); 442 h1 += MUL64((k1 + d1), (k5 + d5));
443 h2 += MUL64((k5 + d1), (k9 + d5)); 443 h2 += MUL64((k5 + d1), (k9 + d5));
444 h3 += MUL64((k9 + d1), (k13 + d5)); 444 h3 += MUL64((k9 + d1), (k13 + d5));
445 445
446 h1 += MUL64((k2 + d2), (k6 + d6)); 446 h1 += MUL64((k2 + d2), (k6 + d6));
447 h2 += MUL64((k6 + d2), (k10 + d6)); 447 h2 += MUL64((k6 + d2), (k10 + d6));
448 h3 += MUL64((k10 + d2), (k14 + d6)); 448 h3 += MUL64((k10 + d2), (k14 + d6));
449 449
450 h1 += MUL64((k3 + d3), (k7 + d7)); 450 h1 += MUL64((k3 + d3), (k7 + d7));
451 h2 += MUL64((k7 + d3), (k11 + d7)); 451 h2 += MUL64((k7 + d3), (k11 + d7));
452 h3 += MUL64((k11 + d3), (k15 + d7)); 452 h3 += MUL64((k11 + d3), (k15 + d7));
453 453
454 k0 = k8; k1 = k9; k2 = k10; k3 = k11; 454 k0 = k8; k1 = k9; k2 = k10; k3 = k11;
455 k4 = k12; k5 = k13; k6 = k14; k7 = k15; 455 k4 = k12; k5 = k13; k6 = k14; k7 = k15;
456 456
457 d += 8; 457 d += 8;
458 k += 8; 458 k += 8;
459 } while (--c); 459 } while (--c);
@@ -477,7 +477,7 @@ static void nh_aux(void *kp, const void *dp, void *hp, UINT32 dlen)
477 UINT32 k0,k1,k2,k3,k4,k5,k6,k7, 477 UINT32 k0,k1,k2,k3,k4,k5,k6,k7,
478 k8,k9,k10,k11,k12,k13,k14,k15, 478 k8,k9,k10,k11,k12,k13,k14,k15,
479 k16,k17,k18,k19; 479 k16,k17,k18,k19;
480 480
481 h1 = *((UINT64 *)hp); 481 h1 = *((UINT64 *)hp);
482 h2 = *((UINT64 *)hp + 1); 482 h2 = *((UINT64 *)hp + 1);
483 h3 = *((UINT64 *)hp + 2); 483 h3 = *((UINT64 *)hp + 2);
@@ -492,31 +492,31 @@ static void nh_aux(void *kp, const void *dp, void *hp, UINT32 dlen)
492 k8 = *(k+8); k9 = *(k+9); k10 = *(k+10); k11 = *(k+11); 492 k8 = *(k+8); k9 = *(k+9); k10 = *(k+10); k11 = *(k+11);
493 k12 = *(k+12); k13 = *(k+13); k14 = *(k+14); k15 = *(k+15); 493 k12 = *(k+12); k13 = *(k+13); k14 = *(k+14); k15 = *(k+15);
494 k16 = *(k+16); k17 = *(k+17); k18 = *(k+18); k19 = *(k+19); 494 k16 = *(k+16); k17 = *(k+17); k18 = *(k+18); k19 = *(k+19);
495 495
496 h1 += MUL64((k0 + d0), (k4 + d4)); 496 h1 += MUL64((k0 + d0), (k4 + d4));
497 h2 += MUL64((k4 + d0), (k8 + d4)); 497 h2 += MUL64((k4 + d0), (k8 + d4));
498 h3 += MUL64((k8 + d0), (k12 + d4)); 498 h3 += MUL64((k8 + d0), (k12 + d4));
499 h4 += MUL64((k12 + d0), (k16 + d4)); 499 h4 += MUL64((k12 + d0), (k16 + d4));
500 500
501 h1 += MUL64((k1 + d1), (k5 + d5)); 501 h1 += MUL64((k1 + d1), (k5 + d5));
502 h2 += MUL64((k5 + d1), (k9 + d5)); 502 h2 += MUL64((k5 + d1), (k9 + d5));
503 h3 += MUL64((k9 + d1), (k13 + d5)); 503 h3 += MUL64((k9 + d1), (k13 + d5));
504 h4 += MUL64((k13 + d1), (k17 + d5)); 504 h4 += MUL64((k13 + d1), (k17 + d5));
505 505
506 h1 += MUL64((k2 + d2), (k6 + d6)); 506 h1 += MUL64((k2 + d2), (k6 + d6));
507 h2 += MUL64((k6 + d2), (k10 + d6)); 507 h2 += MUL64((k6 + d2), (k10 + d6));
508 h3 += MUL64((k10 + d2), (k14 + d6)); 508 h3 += MUL64((k10 + d2), (k14 + d6));
509 h4 += MUL64((k14 + d2), (k18 + d6)); 509 h4 += MUL64((k14 + d2), (k18 + d6));
510 510
511 h1 += MUL64((k3 + d3), (k7 + d7)); 511 h1 += MUL64((k3 + d3), (k7 + d7));
512 h2 += MUL64((k7 + d3), (k11 + d7)); 512 h2 += MUL64((k7 + d3), (k11 + d7));
513 h3 += MUL64((k11 + d3), (k15 + d7)); 513 h3 += MUL64((k11 + d3), (k15 + d7));
514 h4 += MUL64((k15 + d3), (k19 + d7)); 514 h4 += MUL64((k15 + d3), (k19 + d7));
515 515
516 k0 = k8; k1 = k9; k2 = k10; k3 = k11; 516 k0 = k8; k1 = k9; k2 = k10; k3 = k11;
517 k4 = k12; k5 = k13; k6 = k14; k7 = k15; 517 k4 = k12; k5 = k13; k6 = k14; k7 = k15;
518 k8 = k16; k9 = k17; k10 = k18; k11 = k19; 518 k8 = k16; k9 = k17; k10 = k18; k11 = k19;
519 519
520 d += 8; 520 d += 8;
521 k += 8; 521 k += 8;
522 } while (--c); 522 } while (--c);
@@ -541,7 +541,7 @@ static void nh_transform(nh_ctx *hc, const UINT8 *buf, UINT32 nbytes)
541 */ 541 */
542{ 542{
543 UINT8 *key; 543 UINT8 *key;
544 544
545 key = hc->nh_key + hc->bytes_hashed; 545 key = hc->nh_key + hc->bytes_hashed;
546 nh_aux(key, buf, hc->state, nbytes); 546 nh_aux(key, buf, hc->state, nbytes);
547} 547}
@@ -613,7 +613,7 @@ static void nh_update(nh_ctx *hc, const UINT8 *buf, UINT32 nbytes)
613/* even multiple of HASH_BUF_BYTES. */ 613/* even multiple of HASH_BUF_BYTES. */
614{ 614{
615 UINT32 i,j; 615 UINT32 i,j;
616 616
617 j = hc->next_data_empty; 617 j = hc->next_data_empty;
618 if ((j + nbytes) >= HASH_BUF_BYTES) { 618 if ((j + nbytes) >= HASH_BUF_BYTES) {
619 if (j) { 619 if (j) {
@@ -677,12 +677,12 @@ static void nh_final(nh_ctx *hc, UINT8 *result)
677 if (hc->next_data_empty != 0) { 677 if (hc->next_data_empty != 0) {
678 nh_len = ((hc->next_data_empty + (L1_PAD_BOUNDARY - 1)) & 678 nh_len = ((hc->next_data_empty + (L1_PAD_BOUNDARY - 1)) &
679 ~(L1_PAD_BOUNDARY - 1)); 679 ~(L1_PAD_BOUNDARY - 1));
680 zero_pad(hc->data + hc->next_data_empty, 680 zero_pad(hc->data + hc->next_data_empty,
681 nh_len - hc->next_data_empty); 681 nh_len - hc->next_data_empty);
682 nh_transform(hc, hc->data, nh_len); 682 nh_transform(hc, hc->data, nh_len);
683 hc->bytes_hashed += hc->next_data_empty; 683 hc->bytes_hashed += hc->next_data_empty;
684 } else if (hc->bytes_hashed == 0) { 684 } else if (hc->bytes_hashed == 0) {
685 nh_len = L1_PAD_BOUNDARY; 685 nh_len = L1_PAD_BOUNDARY;
686 zero_pad(hc->data, L1_PAD_BOUNDARY); 686 zero_pad(hc->data, L1_PAD_BOUNDARY);
687 nh_transform(hc, hc->data, nh_len); 687 nh_transform(hc, hc->data, nh_len);
688 } 688 }
@@ -711,10 +711,10 @@ static void nh(nh_ctx *hc, const UINT8 *buf, UINT32 padded_len,
711 */ 711 */
712{ 712{
713 UINT32 nbits; 713 UINT32 nbits;
714 714
715 /* Initialize the hash state */ 715 /* Initialize the hash state */
716 nbits = (unpadded_len << 3); 716 nbits = (unpadded_len << 3);
717 717
718 ((UINT64 *)result)[0] = nbits; 718 ((UINT64 *)result)[0] = nbits;
719#if (UMAC_OUTPUT_LEN >= 8) 719#if (UMAC_OUTPUT_LEN >= 8)
720 ((UINT64 *)result)[1] = nbits; 720 ((UINT64 *)result)[1] = nbits;
@@ -725,7 +725,7 @@ static void nh(nh_ctx *hc, const UINT8 *buf, UINT32 padded_len,
725#if (UMAC_OUTPUT_LEN == 16) 725#if (UMAC_OUTPUT_LEN == 16)
726 ((UINT64 *)result)[3] = nbits; 726 ((UINT64 *)result)[3] = nbits;
727#endif 727#endif
728 728
729 nh_aux(hc->nh_key, buf, result, padded_len); 729 nh_aux(hc->nh_key, buf, result, padded_len);
730} 730}
731 731
@@ -744,16 +744,16 @@ static void nh(nh_ctx *hc, const UINT8 *buf, UINT32 padded_len,
744 * buffers are presented sequentially. In the sequential interface, the 744 * buffers are presented sequentially. In the sequential interface, the
745 * UHASH client calls the routine uhash_update() as many times as necessary. 745 * UHASH client calls the routine uhash_update() as many times as necessary.
746 * When there is no more data to be fed to UHASH, the client calls 746 * When there is no more data to be fed to UHASH, the client calls
747 * uhash_final() which 747 * uhash_final() which
748 * calculates the UHASH output. Before beginning another UHASH calculation 748 * calculates the UHASH output. Before beginning another UHASH calculation
749 * the uhash_reset() routine must be called. The all-at-once UHASH routine, 749 * the uhash_reset() routine must be called. The all-at-once UHASH routine,
750 * uhash(), is equivalent to the sequence of calls uhash_update() and 750 * uhash(), is equivalent to the sequence of calls uhash_update() and
751 * uhash_final(); however it is optimized and should be 751 * uhash_final(); however it is optimized and should be
752 * used whenever the sequential interface is not necessary. 752 * used whenever the sequential interface is not necessary.
753 * 753 *
754 * The routine uhash_init() initializes the uhash_ctx data structure and 754 * The routine uhash_init() initializes the uhash_ctx data structure and
755 * must be called once, before any other UHASH routine. 755 * must be called once, before any other UHASH routine.
756 */ 756 */
757 757
758/* ---------------------------------------------------------------------- */ 758/* ---------------------------------------------------------------------- */
759/* ----- Constants and uhash_ctx ---------------------------------------- */ 759/* ----- Constants and uhash_ctx ---------------------------------------- */
@@ -802,13 +802,13 @@ static UINT64 poly64(UINT64 cur, UINT64 key, UINT64 data)
802 x_lo, 802 x_lo,
803 x_hi; 803 x_hi;
804 UINT64 X,T,res; 804 UINT64 X,T,res;
805 805
806 X = MUL64(key_hi, cur_lo) + MUL64(cur_hi, key_lo); 806 X = MUL64(key_hi, cur_lo) + MUL64(cur_hi, key_lo);
807 x_lo = (UINT32)X; 807 x_lo = (UINT32)X;
808 x_hi = (UINT32)(X >> 32); 808 x_hi = (UINT32)(X >> 32);
809 809
810 res = (MUL64(key_hi, cur_hi) + x_hi) * 59 + MUL64(key_lo, cur_lo); 810 res = (MUL64(key_hi, cur_hi) + x_hi) * 59 + MUL64(key_lo, cur_lo);
811 811
812 T = ((UINT64)x_lo << 32); 812 T = ((UINT64)x_lo << 32);
813 res += T; 813 res += T;
814 if (res < T) 814 if (res < T)
@@ -832,10 +832,10 @@ static void poly_hash(uhash_ctx_t hc, UINT32 data_in[])
832{ 832{
833 int i; 833 int i;
834 UINT64 *data=(UINT64*)data_in; 834 UINT64 *data=(UINT64*)data_in;
835 835
836 for (i = 0; i < STREAMS; i++) { 836 for (i = 0; i < STREAMS; i++) {
837 if ((UINT32)(data[i] >> 32) == 0xfffffffful) { 837 if ((UINT32)(data[i] >> 32) == 0xfffffffful) {
838 hc->poly_accum[i] = poly64(hc->poly_accum[i], 838 hc->poly_accum[i] = poly64(hc->poly_accum[i],
839 hc->poly_key_8[i], p64 - 1); 839 hc->poly_key_8[i], p64 - 1);
840 hc->poly_accum[i] = poly64(hc->poly_accum[i], 840 hc->poly_accum[i] = poly64(hc->poly_accum[i],
841 hc->poly_key_8[i], (data[i] - 59)); 841 hc->poly_key_8[i], (data[i] - 59));
@@ -862,7 +862,7 @@ static UINT64 ip_aux(UINT64 t, UINT64 *ipkp, UINT64 data)
862 t = t + ipkp[1] * (UINT64)(UINT16)(data >> 32); 862 t = t + ipkp[1] * (UINT64)(UINT16)(data >> 32);
863 t = t + ipkp[2] * (UINT64)(UINT16)(data >> 16); 863 t = t + ipkp[2] * (UINT64)(UINT16)(data >> 16);
864 t = t + ipkp[3] * (UINT64)(UINT16)(data); 864 t = t + ipkp[3] * (UINT64)(UINT16)(data);
865 865
866 return t; 866 return t;
867} 867}
868 868
@@ -870,7 +870,7 @@ static UINT32 ip_reduce_p36(UINT64 t)
870{ 870{
871/* Divisionless modular reduction */ 871/* Divisionless modular reduction */
872 UINT64 ret; 872 UINT64 ret;
873 873
874 ret = (t & m36) + 5 * (t >> 36); 874 ret = (t & m36) + 5 * (t >> 36);
875 if (ret >= p36) 875 if (ret >= p36)
876 ret -= p36; 876 ret -= p36;
@@ -888,7 +888,7 @@ static void ip_short(uhash_ctx_t ahc, UINT8 *nh_res, u_char *res)
888{ 888{
889 UINT64 t; 889 UINT64 t;
890 UINT64 *nhp = (UINT64 *)nh_res; 890 UINT64 *nhp = (UINT64 *)nh_res;
891 891
892 t = ip_aux(0,ahc->ip_keys, nhp[0]); 892 t = ip_aux(0,ahc->ip_keys, nhp[0]);
893 STORE_UINT32_BIG((UINT32 *)res+0, ip_reduce_p36(t) ^ ahc->ip_trans[0]); 893 STORE_UINT32_BIG((UINT32 *)res+0, ip_reduce_p36(t) ^ ahc->ip_trans[0]);
894#if (UMAC_OUTPUT_LEN >= 8) 894#if (UMAC_OUTPUT_LEN >= 8)
@@ -919,7 +919,7 @@ static void ip_long(uhash_ctx_t ahc, u_char *res)
919 if (ahc->poly_accum[i] >= p64) 919 if (ahc->poly_accum[i] >= p64)
920 ahc->poly_accum[i] -= p64; 920 ahc->poly_accum[i] -= p64;
921 t = ip_aux(0,ahc->ip_keys+(i*4), ahc->poly_accum[i]); 921 t = ip_aux(0,ahc->ip_keys+(i*4), ahc->poly_accum[i]);
922 STORE_UINT32_BIG((UINT32 *)res+i, 922 STORE_UINT32_BIG((UINT32 *)res+i,
923 ip_reduce_p36(t) ^ ahc->ip_trans[i]); 923 ip_reduce_p36(t) ^ ahc->ip_trans[i]);
924 } 924 }
925} 925}
@@ -958,13 +958,13 @@ static void uhash_init(uhash_ctx_t ahc, aes_int_key prf_key)
958{ 958{
959 int i; 959 int i;
960 UINT8 buf[(8*STREAMS+4)*sizeof(UINT64)]; 960 UINT8 buf[(8*STREAMS+4)*sizeof(UINT64)];
961 961
962 /* Zero the entire uhash context */ 962 /* Zero the entire uhash context */
963 memset(ahc, 0, sizeof(uhash_ctx)); 963 memset(ahc, 0, sizeof(uhash_ctx));
964 964
965 /* Initialize the L1 hash */ 965 /* Initialize the L1 hash */
966 nh_init(&ahc->hash, prf_key); 966 nh_init(&ahc->hash, prf_key);
967 967
968 /* Setup L2 hash variables */ 968 /* Setup L2 hash variables */
969 kdf(buf, prf_key, 2, sizeof(buf)); /* Fill buffer with index 1 key */ 969 kdf(buf, prf_key, 2, sizeof(buf)); /* Fill buffer with index 1 key */
970 for (i = 0; i < STREAMS; i++) { 970 for (i = 0; i < STREAMS; i++) {
@@ -978,17 +978,17 @@ static void uhash_init(uhash_ctx_t ahc, aes_int_key prf_key)
978 ahc->poly_key_8[i] &= ((UINT64)0x01ffffffu << 32) + 0x01ffffffu; 978 ahc->poly_key_8[i] &= ((UINT64)0x01ffffffu << 32) + 0x01ffffffu;
979 ahc->poly_accum[i] = 1; /* Our polyhash prepends a non-zero word */ 979 ahc->poly_accum[i] = 1; /* Our polyhash prepends a non-zero word */
980 } 980 }
981 981
982 /* Setup L3-1 hash variables */ 982 /* Setup L3-1 hash variables */
983 kdf(buf, prf_key, 3, sizeof(buf)); /* Fill buffer with index 2 key */ 983 kdf(buf, prf_key, 3, sizeof(buf)); /* Fill buffer with index 2 key */
984 for (i = 0; i < STREAMS; i++) 984 for (i = 0; i < STREAMS; i++)
985 memcpy(ahc->ip_keys+4*i, buf+(8*i+4)*sizeof(UINT64), 985 memcpy(ahc->ip_keys+4*i, buf+(8*i+4)*sizeof(UINT64),
986 4*sizeof(UINT64)); 986 4*sizeof(UINT64));
987 endian_convert_if_le(ahc->ip_keys, sizeof(UINT64), 987 endian_convert_if_le(ahc->ip_keys, sizeof(UINT64),
988 sizeof(ahc->ip_keys)); 988 sizeof(ahc->ip_keys));
989 for (i = 0; i < STREAMS*4; i++) 989 for (i = 0; i < STREAMS*4; i++)
990 ahc->ip_keys[i] %= p36; /* Bring into Z_p36 */ 990 ahc->ip_keys[i] %= p36; /* Bring into Z_p36 */
991 991
992 /* Setup L3-2 hash variables */ 992 /* Setup L3-2 hash variables */
993 /* Fill buffer with index 4 key */ 993 /* Fill buffer with index 4 key */
994 kdf(ahc->ip_trans, prf_key, 4, STREAMS * sizeof(UINT32)); 994 kdf(ahc->ip_trans, prf_key, 4, STREAMS * sizeof(UINT32));
@@ -1006,7 +1006,7 @@ static uhash_ctx_t uhash_alloc(u_char key[])
1006 uhash_ctx_t ctx; 1006 uhash_ctx_t ctx;
1007 u_char bytes_to_add; 1007 u_char bytes_to_add;
1008 aes_int_key prf_key; 1008 aes_int_key prf_key;
1009 1009
1010 ctx = (uhash_ctx_t)malloc(sizeof(uhash_ctx)+ALLOC_BOUNDARY); 1010 ctx = (uhash_ctx_t)malloc(sizeof(uhash_ctx)+ALLOC_BOUNDARY);
1011 if (ctx) { 1011 if (ctx) {
1012 if (ALLOC_BOUNDARY) { 1012 if (ALLOC_BOUNDARY) {
@@ -1029,7 +1029,7 @@ static int uhash_free(uhash_ctx_t ctx)
1029{ 1029{
1030/* Free memory allocated by uhash_alloc */ 1030/* Free memory allocated by uhash_alloc */
1031 u_char bytes_to_sub; 1031 u_char bytes_to_sub;
1032 1032
1033 if (ctx) { 1033 if (ctx) {
1034 if (ALLOC_BOUNDARY) { 1034 if (ALLOC_BOUNDARY) {
1035 bytes_to_sub = *((u_char *)ctx - 1); 1035 bytes_to_sub = *((u_char *)ctx - 1);
@@ -1050,12 +1050,12 @@ static int uhash_update(uhash_ctx_t ctx, const u_char *input, long len)
1050 UWORD bytes_hashed, bytes_remaining; 1050 UWORD bytes_hashed, bytes_remaining;
1051 UINT64 result_buf[STREAMS]; 1051 UINT64 result_buf[STREAMS];
1052 UINT8 *nh_result = (UINT8 *)&result_buf; 1052 UINT8 *nh_result = (UINT8 *)&result_buf;
1053 1053
1054 if (ctx->msg_len + len <= L1_KEY_LEN) { 1054 if (ctx->msg_len + len <= L1_KEY_LEN) {
1055 nh_update(&ctx->hash, (const UINT8 *)input, len); 1055 nh_update(&ctx->hash, (const UINT8 *)input, len);
1056 ctx->msg_len += len; 1056 ctx->msg_len += len;
1057 } else { 1057 } else {
1058 1058
1059 bytes_hashed = ctx->msg_len % L1_KEY_LEN; 1059 bytes_hashed = ctx->msg_len % L1_KEY_LEN;
1060 if (ctx->msg_len == L1_KEY_LEN) 1060 if (ctx->msg_len == L1_KEY_LEN)
1061 bytes_hashed = L1_KEY_LEN; 1061 bytes_hashed = L1_KEY_LEN;
@@ -1128,15 +1128,15 @@ static int uhash(uhash_ctx_t ahc, u_char *msg, long len, u_char *res)
1128 UINT8 nh_result[STREAMS*sizeof(UINT64)]; 1128 UINT8 nh_result[STREAMS*sizeof(UINT64)];
1129 UINT32 nh_len; 1129 UINT32 nh_len;
1130 int extra_zeroes_needed; 1130 int extra_zeroes_needed;
1131 1131
1132 /* If the message to be hashed is no longer than L1_HASH_LEN, we skip 1132 /* If the message to be hashed is no longer than L1_HASH_LEN, we skip
1133 * the polyhash. 1133 * the polyhash.
1134 */ 1134 */
1135 if (len <= L1_KEY_LEN) { 1135 if (len <= L1_KEY_LEN) {
1136 if (len == 0) /* If zero length messages will not */ 1136 if (len == 0) /* If zero length messages will not */
1137 nh_len = L1_PAD_BOUNDARY; /* be seen, comment out this case */ 1137 nh_len = L1_PAD_BOUNDARY; /* be seen, comment out this case */
1138 else 1138 else
1139 nh_len = ((len + (L1_PAD_BOUNDARY - 1)) & ~(L1_PAD_BOUNDARY - 1)); 1139 nh_len = ((len + (L1_PAD_BOUNDARY - 1)) & ~(L1_PAD_BOUNDARY - 1));
1140 extra_zeroes_needed = nh_len - len; 1140 extra_zeroes_needed = nh_len - len;
1141 zero_pad((UINT8 *)msg + len, extra_zeroes_needed); 1141 zero_pad((UINT8 *)msg + len, extra_zeroes_needed);
1142 nh(&ahc->hash, (UINT8 *)msg, nh_len, len, nh_result); 1142 nh(&ahc->hash, (UINT8 *)msg, nh_len, len, nh_result);
@@ -1161,7 +1161,7 @@ static int uhash(uhash_ctx_t ahc, u_char *msg, long len, u_char *res)
1161 1161
1162 ip_long(ahc, res); 1162 ip_long(ahc, res);
1163 } 1163 }
1164 1164
1165 uhash_reset(ahc); 1165 uhash_reset(ahc);
1166 return 1; 1166 return 1;
1167} 1167}
@@ -1175,9 +1175,9 @@ static int uhash(uhash_ctx_t ahc, u_char *msg, long len, u_char *res)
1175 1175
1176/* The UMAC interface has two interfaces, an all-at-once interface where 1176/* The UMAC interface has two interfaces, an all-at-once interface where
1177 * the entire message to be authenticated is passed to UMAC in one buffer, 1177 * the entire message to be authenticated is passed to UMAC in one buffer,
1178 * and a sequential interface where the message is presented a little at a 1178 * and a sequential interface where the message is presented a little at a
1179 * time. The all-at-once is more optimaized than the sequential version and 1179 * time. The all-at-once is more optimaized than the sequential version and
1180 * should be preferred when the sequential interface is not required. 1180 * should be preferred when the sequential interface is not required.
1181 */ 1181 */
1182struct umac_ctx { 1182struct umac_ctx {
1183 uhash_ctx hash; /* Hash function for message compression */ 1183 uhash_ctx hash; /* Hash function for message compression */
@@ -1213,14 +1213,14 @@ int umac_delete(struct umac_ctx *ctx)
1213/* ---------------------------------------------------------------------- */ 1213/* ---------------------------------------------------------------------- */
1214 1214
1215struct umac_ctx *umac_new(const u_char key[]) 1215struct umac_ctx *umac_new(const u_char key[])
1216/* Dynamically allocate a umac_ctx struct, initialize variables, 1216/* Dynamically allocate a umac_ctx struct, initialize variables,
1217 * generate subkeys from key. Align to 16-byte boundary. 1217 * generate subkeys from key. Align to 16-byte boundary.
1218 */ 1218 */
1219{ 1219{
1220 struct umac_ctx *ctx, *octx; 1220 struct umac_ctx *ctx, *octx;
1221 size_t bytes_to_add; 1221 size_t bytes_to_add;
1222 aes_int_key prf_key; 1222 aes_int_key prf_key;
1223 1223
1224 octx = ctx = xcalloc(1, sizeof(*ctx) + ALLOC_BOUNDARY); 1224 octx = ctx = xcalloc(1, sizeof(*ctx) + ALLOC_BOUNDARY);
1225 if (ctx) { 1225 if (ctx) {
1226 if (ALLOC_BOUNDARY) { 1226 if (ALLOC_BOUNDARY) {
@@ -1234,7 +1234,7 @@ struct umac_ctx *umac_new(const u_char key[])
1234 uhash_init(&ctx->hash, prf_key); 1234 uhash_init(&ctx->hash, prf_key);
1235 explicit_bzero(prf_key, sizeof(prf_key)); 1235 explicit_bzero(prf_key, sizeof(prf_key));
1236 } 1236 }
1237 1237
1238 return (ctx); 1238 return (ctx);
1239} 1239}
1240 1240
@@ -1245,7 +1245,7 @@ int umac_final(struct umac_ctx *ctx, u_char tag[], const u_char nonce[8])
1245{ 1245{
1246 uhash_final(&ctx->hash, (u_char *)tag); 1246 uhash_final(&ctx->hash, (u_char *)tag);
1247 pdf_gen_xor(&ctx->pdf, (const UINT8 *)nonce, (UINT8 *)tag); 1247 pdf_gen_xor(&ctx->pdf, (const UINT8 *)nonce, (UINT8 *)tag);
1248 1248
1249 return (1); 1249 return (1);
1250} 1250}
1251 1251
@@ -1263,14 +1263,14 @@ int umac_update(struct umac_ctx *ctx, const u_char *input, long len)
1263/* ---------------------------------------------------------------------- */ 1263/* ---------------------------------------------------------------------- */
1264 1264
1265#if 0 1265#if 0
1266int umac(struct umac_ctx *ctx, u_char *input, 1266int umac(struct umac_ctx *ctx, u_char *input,
1267 long len, u_char tag[], 1267 long len, u_char tag[],
1268 u_char nonce[8]) 1268 u_char nonce[8])
1269/* All-in-one version simply calls umac_update() and umac_final(). */ 1269/* All-in-one version simply calls umac_update() and umac_final(). */
1270{ 1270{
1271 uhash(&ctx->hash, input, len, (u_char *)tag); 1271 uhash(&ctx->hash, input, len, (u_char *)tag);
1272 pdf_gen_xor(&ctx->pdf, (UINT8 *)nonce, (UINT8 *)tag); 1272 pdf_gen_xor(&ctx->pdf, (UINT8 *)nonce, (UINT8 *)tag);
1273 1273
1274 return (1); 1274 return (1);
1275} 1275}
1276#endif 1276#endif
diff --git a/umac128.c b/umac128.c
new file mode 100644
index 000000000..f71792506
--- /dev/null
+++ b/umac128.c
@@ -0,0 +1,10 @@
1/* $OpenBSD: umac128.c,v 1.2 2018/02/08 04:12:32 dtucker Exp $ */
2
3#define UMAC_OUTPUT_LEN 16
4#define umac_new umac128_new
5#define umac_update umac128_update
6#define umac_final umac128_final
7#define umac_delete umac128_delete
8#define umac_ctx umac128_ctx
9
10#include "umac.c"
diff --git a/version.h b/version.h
index b7c5ad2a0..a3fa6e0b9 100644
--- a/version.h
+++ b/version.h
@@ -1,6 +1,6 @@
1/* $OpenBSD: version.h,v 1.80 2017/09/30 22:26:33 djm Exp $ */ 1/* $OpenBSD: version.h,v 1.81 2018/03/24 19:29:03 markus Exp $ */
2 2
3#define SSH_VERSION "OpenSSH_7.6" 3#define SSH_VERSION "OpenSSH_7.7"
4 4
5#define SSH_PORTABLE "p1" 5#define SSH_PORTABLE "p1"
6#define SSH_RELEASE_MINIMUM SSH_VERSION SSH_PORTABLE 6#define SSH_RELEASE_MINIMUM SSH_VERSION SSH_PORTABLE
diff --git a/xmss_commons.c b/xmss_commons.c
new file mode 100644
index 000000000..59486aead
--- /dev/null
+++ b/xmss_commons.c
@@ -0,0 +1,36 @@
1/* $OpenBSD: xmss_commons.c,v 1.2 2018/02/26 03:56:44 dtucker Exp $ */
2/*
3xmss_commons.c 20160722
4Andreas Hülsing
5Joost Rijneveld
6Public domain.
7*/
8
9#include "includes.h"
10#ifdef WITH_XMSS
11
12#include "xmss_commons.h"
13#include <stdlib.h>
14#include <stdio.h>
15#ifdef HAVE_STDINT_H
16#include <stdint.h>
17#endif
18
19void to_byte(unsigned char *out, unsigned long long in, uint32_t bytes)
20{
21 int32_t i;
22 for (i = bytes-1; i >= 0; i--) {
23 out[i] = in & 0xff;
24 in = in >> 8;
25 }
26}
27
28#if 0
29void hexdump(const unsigned char *a, size_t len)
30{
31 size_t i;
32 for (i = 0; i < len; i++)
33 printf("%02x", a[i]);
34}
35#endif
36#endif /* WITH_XMSS */
diff --git a/xmss_commons.h b/xmss_commons.h
new file mode 100644
index 000000000..a98e4799c
--- /dev/null
+++ b/xmss_commons.h
@@ -0,0 +1,21 @@
1#ifdef WITH_XMSS
2/* $OpenBSD: xmss_commons.h,v 1.3 2018/02/26 03:56:44 dtucker Exp $ */
3/*
4xmss_commons.h 20160722
5Andreas Hülsing
6Joost Rijneveld
7Public domain.
8*/
9#ifndef XMSS_COMMONS_H
10#define XMSS_COMMONS_H
11
12#include <stdlib.h>
13#ifdef HAVE_STDINT_H
14#include <stdint.h>
15#endif
16#endif
17void to_byte(unsigned char *output, unsigned long long in, uint32_t bytes);
18#if 0
19void hexdump(const unsigned char *a, size_t len);
20#endif
21#endif /* WITH_XMSS */
diff --git a/xmss_fast.c b/xmss_fast.c
new file mode 100644
index 000000000..e37447f60
--- /dev/null
+++ b/xmss_fast.c
@@ -0,0 +1,1106 @@
1/* $OpenBSD: xmss_fast.c,v 1.3 2018/03/22 07:06:11 markus Exp $ */
2/*
3xmss_fast.c version 20160722
4Andreas Hülsing
5Joost Rijneveld
6Public domain.
7*/
8
9#include "includes.h"
10#ifdef WITH_XMSS
11
12#include <stdlib.h>
13#include <string.h>
14#ifdef HAVE_STDINT_H
15#include <stdint.h>
16#endif
17
18#include "xmss_fast.h"
19#include "crypto_api.h"
20#include "xmss_wots.h"
21#include "xmss_hash.h"
22
23#include "xmss_commons.h"
24#include "xmss_hash_address.h"
25// For testing
26#include "stdio.h"
27
28
29
30/**
31 * Used for pseudorandom keygeneration,
32 * generates the seed for the WOTS keypair at address addr
33 *
34 * takes n byte sk_seed and returns n byte seed using 32 byte address addr.
35 */
36static void get_seed(unsigned char *seed, const unsigned char *sk_seed, int n, uint32_t addr[8])
37{
38 unsigned char bytes[32];
39 // Make sure that chain addr, hash addr, and key bit are 0!
40 setChainADRS(addr,0);
41 setHashADRS(addr,0);
42 setKeyAndMask(addr,0);
43 // Generate pseudorandom value
44 addr_to_byte(bytes, addr);
45 prf(seed, bytes, sk_seed, n);
46}
47
48/**
49 * Initialize xmss params struct
50 * parameter names are the same as in the draft
51 * parameter k is K as used in the BDS algorithm
52 */
53int xmss_set_params(xmss_params *params, int n, int h, int w, int k)
54{
55 if (k >= h || k < 2 || (h - k) % 2) {
56 fprintf(stderr, "For BDS traversal, H - K must be even, with H > K >= 2!\n");
57 return 1;
58 }
59 params->h = h;
60 params->n = n;
61 params->k = k;
62 wots_params wots_par;
63 wots_set_params(&wots_par, n, w);
64 params->wots_par = wots_par;
65 return 0;
66}
67
68/**
69 * Initialize BDS state struct
70 * parameter names are the same as used in the description of the BDS traversal
71 */
72void xmss_set_bds_state(bds_state *state, unsigned char *stack, int stackoffset, unsigned char *stacklevels, unsigned char *auth, unsigned char *keep, treehash_inst *treehash, unsigned char *retain, int next_leaf)
73{
74 state->stack = stack;
75 state->stackoffset = stackoffset;
76 state->stacklevels = stacklevels;
77 state->auth = auth;
78 state->keep = keep;
79 state->treehash = treehash;
80 state->retain = retain;
81 state->next_leaf = next_leaf;
82}
83
84/**
85 * Initialize xmssmt_params struct
86 * parameter names are the same as in the draft
87 *
88 * Especially h is the total tree height, i.e. the XMSS trees have height h/d
89 */
90int xmssmt_set_params(xmssmt_params *params, int n, int h, int d, int w, int k)
91{
92 if (h % d) {
93 fprintf(stderr, "d must divide h without remainder!\n");
94 return 1;
95 }
96 params->h = h;
97 params->d = d;
98 params->n = n;
99 params->index_len = (h + 7) / 8;
100 xmss_params xmss_par;
101 if (xmss_set_params(&xmss_par, n, (h/d), w, k)) {
102 return 1;
103 }
104 params->xmss_par = xmss_par;
105 return 0;
106}
107
108/**
109 * Computes a leaf from a WOTS public key using an L-tree.
110 */
111static void l_tree(unsigned char *leaf, unsigned char *wots_pk, const xmss_params *params, const unsigned char *pub_seed, uint32_t addr[8])
112{
113 unsigned int l = params->wots_par.len;
114 unsigned int n = params->n;
115 uint32_t i = 0;
116 uint32_t height = 0;
117 uint32_t bound;
118
119 //ADRS.setTreeHeight(0);
120 setTreeHeight(addr, height);
121
122 while (l > 1) {
123 bound = l >> 1; //floor(l / 2);
124 for (i = 0; i < bound; i++) {
125 //ADRS.setTreeIndex(i);
126 setTreeIndex(addr, i);
127 //wots_pk[i] = RAND_HASH(pk[2i], pk[2i + 1], SEED, ADRS);
128 hash_h(wots_pk+i*n, wots_pk+i*2*n, pub_seed, addr, n);
129 }
130 //if ( l % 2 == 1 ) {
131 if (l & 1) {
132 //pk[floor(l / 2) + 1] = pk[l];
133 memcpy(wots_pk+(l>>1)*n, wots_pk+(l-1)*n, n);
134 //l = ceil(l / 2);
135 l=(l>>1)+1;
136 }
137 else {
138 //l = ceil(l / 2);
139 l=(l>>1);
140 }
141 //ADRS.setTreeHeight(ADRS.getTreeHeight() + 1);
142 height++;
143 setTreeHeight(addr, height);
144 }
145 //return pk[0];
146 memcpy(leaf, wots_pk, n);
147}
148
149/**
150 * Computes the leaf at a given address. First generates the WOTS key pair, then computes leaf using l_tree. As this happens position independent, we only require that addr encodes the right ltree-address.
151 */
152static void gen_leaf_wots(unsigned char *leaf, const unsigned char *sk_seed, const xmss_params *params, const unsigned char *pub_seed, uint32_t ltree_addr[8], uint32_t ots_addr[8])
153{
154 unsigned char seed[params->n];
155 unsigned char pk[params->wots_par.keysize];
156
157 get_seed(seed, sk_seed, params->n, ots_addr);
158 wots_pkgen(pk, seed, &(params->wots_par), pub_seed, ots_addr);
159
160 l_tree(leaf, pk, params, pub_seed, ltree_addr);
161}
162
163static int treehash_minheight_on_stack(bds_state* state, const xmss_params *params, const treehash_inst *treehash) {
164 unsigned int r = params->h, i;
165 for (i = 0; i < treehash->stackusage; i++) {
166 if (state->stacklevels[state->stackoffset - i - 1] < r) {
167 r = state->stacklevels[state->stackoffset - i - 1];
168 }
169 }
170 return r;
171}
172
173/**
174 * Merkle's TreeHash algorithm. The address only needs to initialize the first 78 bits of addr. Everything else will be set by treehash.
175 * Currently only used for key generation.
176 *
177 */
178static void treehash_setup(unsigned char *node, int height, int index, bds_state *state, const unsigned char *sk_seed, const xmss_params *params, const unsigned char *pub_seed, const uint32_t addr[8])
179{
180 unsigned int idx = index;
181 unsigned int n = params->n;
182 unsigned int h = params->h;
183 unsigned int k = params->k;
184 // use three different addresses because at this point we use all three formats in parallel
185 uint32_t ots_addr[8];
186 uint32_t ltree_addr[8];
187 uint32_t node_addr[8];
188 // only copy layer and tree address parts
189 memcpy(ots_addr, addr, 12);
190 // type = ots
191 setType(ots_addr, 0);
192 memcpy(ltree_addr, addr, 12);
193 setType(ltree_addr, 1);
194 memcpy(node_addr, addr, 12);
195 setType(node_addr, 2);
196
197 uint32_t lastnode, i;
198 unsigned char stack[(height+1)*n];
199 unsigned int stacklevels[height+1];
200 unsigned int stackoffset=0;
201 unsigned int nodeh;
202
203 lastnode = idx+(1<<height);
204
205 for (i = 0; i < h-k; i++) {
206 state->treehash[i].h = i;
207 state->treehash[i].completed = 1;
208 state->treehash[i].stackusage = 0;
209 }
210
211 i = 0;
212 for (; idx < lastnode; idx++) {
213 setLtreeADRS(ltree_addr, idx);
214 setOTSADRS(ots_addr, idx);
215 gen_leaf_wots(stack+stackoffset*n, sk_seed, params, pub_seed, ltree_addr, ots_addr);
216 stacklevels[stackoffset] = 0;
217 stackoffset++;
218 if (h - k > 0 && i == 3) {
219 memcpy(state->treehash[0].node, stack+stackoffset*n, n);
220 }
221 while (stackoffset>1 && stacklevels[stackoffset-1] == stacklevels[stackoffset-2])
222 {
223 nodeh = stacklevels[stackoffset-1];
224 if (i >> nodeh == 1) {
225 memcpy(state->auth + nodeh*n, stack+(stackoffset-1)*n, n);
226 }
227 else {
228 if (nodeh < h - k && i >> nodeh == 3) {
229 memcpy(state->treehash[nodeh].node, stack+(stackoffset-1)*n, n);
230 }
231 else if (nodeh >= h - k) {
232 memcpy(state->retain + ((1 << (h - 1 - nodeh)) + nodeh - h + (((i >> nodeh) - 3) >> 1)) * n, stack+(stackoffset-1)*n, n);
233 }
234 }
235 setTreeHeight(node_addr, stacklevels[stackoffset-1]);
236 setTreeIndex(node_addr, (idx >> (stacklevels[stackoffset-1]+1)));
237 hash_h(stack+(stackoffset-2)*n, stack+(stackoffset-2)*n, pub_seed,
238 node_addr, n);
239 stacklevels[stackoffset-2]++;
240 stackoffset--;
241 }
242 i++;
243 }
244
245 for (i = 0; i < n; i++)
246 node[i] = stack[i];
247}
248
249static void treehash_update(treehash_inst *treehash, bds_state *state, const unsigned char *sk_seed, const xmss_params *params, const unsigned char *pub_seed, const uint32_t addr[8]) {
250 int n = params->n;
251
252 uint32_t ots_addr[8];
253 uint32_t ltree_addr[8];
254 uint32_t node_addr[8];
255 // only copy layer and tree address parts
256 memcpy(ots_addr, addr, 12);
257 // type = ots
258 setType(ots_addr, 0);
259 memcpy(ltree_addr, addr, 12);
260 setType(ltree_addr, 1);
261 memcpy(node_addr, addr, 12);
262 setType(node_addr, 2);
263
264 setLtreeADRS(ltree_addr, treehash->next_idx);
265 setOTSADRS(ots_addr, treehash->next_idx);
266
267 unsigned char nodebuffer[2 * n];
268 unsigned int nodeheight = 0;
269 gen_leaf_wots(nodebuffer, sk_seed, params, pub_seed, ltree_addr, ots_addr);
270 while (treehash->stackusage > 0 && state->stacklevels[state->stackoffset-1] == nodeheight) {
271 memcpy(nodebuffer + n, nodebuffer, n);
272 memcpy(nodebuffer, state->stack + (state->stackoffset-1)*n, n);
273 setTreeHeight(node_addr, nodeheight);
274 setTreeIndex(node_addr, (treehash->next_idx >> (nodeheight+1)));
275 hash_h(nodebuffer, nodebuffer, pub_seed, node_addr, n);
276 nodeheight++;
277 treehash->stackusage--;
278 state->stackoffset--;
279 }
280 if (nodeheight == treehash->h) { // this also implies stackusage == 0
281 memcpy(treehash->node, nodebuffer, n);
282 treehash->completed = 1;
283 }
284 else {
285 memcpy(state->stack + state->stackoffset*n, nodebuffer, n);
286 treehash->stackusage++;
287 state->stacklevels[state->stackoffset] = nodeheight;
288 state->stackoffset++;
289 treehash->next_idx++;
290 }
291}
292
293/**
294 * Computes a root node given a leaf and an authapth
295 */
296static void validate_authpath(unsigned char *root, const unsigned char *leaf, unsigned long leafidx, const unsigned char *authpath, const xmss_params *params, const unsigned char *pub_seed, uint32_t addr[8])
297{
298 unsigned int n = params->n;
299
300 uint32_t i, j;
301 unsigned char buffer[2*n];
302
303 // If leafidx is odd (last bit = 1), current path element is a right child and authpath has to go to the left.
304 // Otherwise, it is the other way around
305 if (leafidx & 1) {
306 for (j = 0; j < n; j++)
307 buffer[n+j] = leaf[j];
308 for (j = 0; j < n; j++)
309 buffer[j] = authpath[j];
310 }
311 else {
312 for (j = 0; j < n; j++)
313 buffer[j] = leaf[j];
314 for (j = 0; j < n; j++)
315 buffer[n+j] = authpath[j];
316 }
317 authpath += n;
318
319 for (i=0; i < params->h-1; i++) {
320 setTreeHeight(addr, i);
321 leafidx >>= 1;
322 setTreeIndex(addr, leafidx);
323 if (leafidx&1) {
324 hash_h(buffer+n, buffer, pub_seed, addr, n);
325 for (j = 0; j < n; j++)
326 buffer[j] = authpath[j];
327 }
328 else {
329 hash_h(buffer, buffer, pub_seed, addr, n);
330 for (j = 0; j < n; j++)
331 buffer[j+n] = authpath[j];
332 }
333 authpath += n;
334 }
335 setTreeHeight(addr, (params->h-1));
336 leafidx >>= 1;
337 setTreeIndex(addr, leafidx);
338 hash_h(root, buffer, pub_seed, addr, n);
339}
340
341/**
342 * Performs one treehash update on the instance that needs it the most.
343 * Returns 1 if such an instance was not found
344 **/
345static char bds_treehash_update(bds_state *state, unsigned int updates, const unsigned char *sk_seed, const xmss_params *params, unsigned char *pub_seed, const uint32_t addr[8]) {
346 uint32_t i, j;
347 unsigned int level, l_min, low;
348 unsigned int h = params->h;
349 unsigned int k = params->k;
350 unsigned int used = 0;
351
352 for (j = 0; j < updates; j++) {
353 l_min = h;
354 level = h - k;
355 for (i = 0; i < h - k; i++) {
356 if (state->treehash[i].completed) {
357 low = h;
358 }
359 else if (state->treehash[i].stackusage == 0) {
360 low = i;
361 }
362 else {
363 low = treehash_minheight_on_stack(state, params, &(state->treehash[i]));
364 }
365 if (low < l_min) {
366 level = i;
367 l_min = low;
368 }
369 }
370 if (level == h - k) {
371 break;
372 }
373 treehash_update(&(state->treehash[level]), state, sk_seed, params, pub_seed, addr);
374 used++;
375 }
376 return updates - used;
377}
378
379/**
380 * Updates the state (typically NEXT_i) by adding a leaf and updating the stack
381 * Returns 1 if all leaf nodes have already been processed
382 **/
383static char bds_state_update(bds_state *state, const unsigned char *sk_seed, const xmss_params *params, unsigned char *pub_seed, const uint32_t addr[8]) {
384 uint32_t ltree_addr[8];
385 uint32_t node_addr[8];
386 uint32_t ots_addr[8];
387
388 int n = params->n;
389 int h = params->h;
390 int k = params->k;
391
392 int nodeh;
393 int idx = state->next_leaf;
394 if (idx == 1 << h) {
395 return 1;
396 }
397
398 // only copy layer and tree address parts
399 memcpy(ots_addr, addr, 12);
400 // type = ots
401 setType(ots_addr, 0);
402 memcpy(ltree_addr, addr, 12);
403 setType(ltree_addr, 1);
404 memcpy(node_addr, addr, 12);
405 setType(node_addr, 2);
406
407 setOTSADRS(ots_addr, idx);
408 setLtreeADRS(ltree_addr, idx);
409
410 gen_leaf_wots(state->stack+state->stackoffset*n, sk_seed, params, pub_seed, ltree_addr, ots_addr);
411
412 state->stacklevels[state->stackoffset] = 0;
413 state->stackoffset++;
414 if (h - k > 0 && idx == 3) {
415 memcpy(state->treehash[0].node, state->stack+state->stackoffset*n, n);
416 }
417 while (state->stackoffset>1 && state->stacklevels[state->stackoffset-1] == state->stacklevels[state->stackoffset-2]) {
418 nodeh = state->stacklevels[state->stackoffset-1];
419 if (idx >> nodeh == 1) {
420 memcpy(state->auth + nodeh*n, state->stack+(state->stackoffset-1)*n, n);
421 }
422 else {
423 if (nodeh < h - k && idx >> nodeh == 3) {
424 memcpy(state->treehash[nodeh].node, state->stack+(state->stackoffset-1)*n, n);
425 }
426 else if (nodeh >= h - k) {
427 memcpy(state->retain + ((1 << (h - 1 - nodeh)) + nodeh - h + (((idx >> nodeh) - 3) >> 1)) * n, state->stack+(state->stackoffset-1)*n, n);
428 }
429 }
430 setTreeHeight(node_addr, state->stacklevels[state->stackoffset-1]);
431 setTreeIndex(node_addr, (idx >> (state->stacklevels[state->stackoffset-1]+1)));
432 hash_h(state->stack+(state->stackoffset-2)*n, state->stack+(state->stackoffset-2)*n, pub_seed, node_addr, n);
433
434 state->stacklevels[state->stackoffset-2]++;
435 state->stackoffset--;
436 }
437 state->next_leaf++;
438 return 0;
439}
440
441/**
442 * Returns the auth path for node leaf_idx and computes the auth path for the
443 * next leaf node, using the algorithm described by Buchmann, Dahmen and Szydlo
444 * in "Post Quantum Cryptography", Springer 2009.
445 */
446static void bds_round(bds_state *state, const unsigned long leaf_idx, const unsigned char *sk_seed, const xmss_params *params, unsigned char *pub_seed, uint32_t addr[8])
447{
448 unsigned int i;
449 unsigned int n = params->n;
450 unsigned int h = params->h;
451 unsigned int k = params->k;
452
453 unsigned int tau = h;
454 unsigned int startidx;
455 unsigned int offset, rowidx;
456 unsigned char buf[2 * n];
457
458 uint32_t ots_addr[8];
459 uint32_t ltree_addr[8];
460 uint32_t node_addr[8];
461 // only copy layer and tree address parts
462 memcpy(ots_addr, addr, 12);
463 // type = ots
464 setType(ots_addr, 0);
465 memcpy(ltree_addr, addr, 12);
466 setType(ltree_addr, 1);
467 memcpy(node_addr, addr, 12);
468 setType(node_addr, 2);
469
470 for (i = 0; i < h; i++) {
471 if (! ((leaf_idx >> i) & 1)) {
472 tau = i;
473 break;
474 }
475 }
476
477 if (tau > 0) {
478 memcpy(buf, state->auth + (tau-1) * n, n);
479 // we need to do this before refreshing state->keep to prevent overwriting
480 memcpy(buf + n, state->keep + ((tau-1) >> 1) * n, n);
481 }
482 if (!((leaf_idx >> (tau + 1)) & 1) && (tau < h - 1)) {
483 memcpy(state->keep + (tau >> 1)*n, state->auth + tau*n, n);
484 }
485 if (tau == 0) {
486 setLtreeADRS(ltree_addr, leaf_idx);
487 setOTSADRS(ots_addr, leaf_idx);
488 gen_leaf_wots(state->auth, sk_seed, params, pub_seed, ltree_addr, ots_addr);
489 }
490 else {
491 setTreeHeight(node_addr, (tau-1));
492 setTreeIndex(node_addr, leaf_idx >> tau);
493 hash_h(state->auth + tau * n, buf, pub_seed, node_addr, n);
494 for (i = 0; i < tau; i++) {
495 if (i < h - k) {
496 memcpy(state->auth + i * n, state->treehash[i].node, n);
497 }
498 else {
499 offset = (1 << (h - 1 - i)) + i - h;
500 rowidx = ((leaf_idx >> i) - 1) >> 1;
501 memcpy(state->auth + i * n, state->retain + (offset + rowidx) * n, n);
502 }
503 }
504
505 for (i = 0; i < ((tau < h - k) ? tau : (h - k)); i++) {
506 startidx = leaf_idx + 1 + 3 * (1 << i);
507 if (startidx < 1U << h) {
508 state->treehash[i].h = i;
509 state->treehash[i].next_idx = startidx;
510 state->treehash[i].completed = 0;
511 state->treehash[i].stackusage = 0;
512 }
513 }
514 }
515}
516
517/*
518 * Generates a XMSS key pair for a given parameter set.
519 * Format sk: [(32bit) idx || SK_SEED || SK_PRF || PUB_SEED || root]
520 * Format pk: [root || PUB_SEED] omitting algo oid.
521 */
522int xmss_keypair(unsigned char *pk, unsigned char *sk, bds_state *state, xmss_params *params)
523{
524 unsigned int n = params->n;
525 // Set idx = 0
526 sk[0] = 0;
527 sk[1] = 0;
528 sk[2] = 0;
529 sk[3] = 0;
530 // Init SK_SEED (n byte), SK_PRF (n byte), and PUB_SEED (n byte)
531 randombytes(sk+4, 3*n);
532 // Copy PUB_SEED to public key
533 memcpy(pk+n, sk+4+2*n, n);
534
535 uint32_t addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
536
537 // Compute root
538 treehash_setup(pk, params->h, 0, state, sk+4, params, sk+4+2*n, addr);
539 // copy root to sk
540 memcpy(sk+4+3*n, pk, n);
541 return 0;
542}
543
544/**
545 * Signs a message.
546 * Returns
547 * 1. an array containing the signature followed by the message AND
548 * 2. an updated secret key!
549 *
550 */
551int xmss_sign(unsigned char *sk, bds_state *state, unsigned char *sig_msg, unsigned long long *sig_msg_len, const unsigned char *msg, unsigned long long msglen, const xmss_params *params)
552{
553 unsigned int h = params->h;
554 unsigned int n = params->n;
555 unsigned int k = params->k;
556 uint16_t i = 0;
557
558 // Extract SK
559 unsigned long idx = ((unsigned long)sk[0] << 24) | ((unsigned long)sk[1] << 16) | ((unsigned long)sk[2] << 8) | sk[3];
560 unsigned char sk_seed[n];
561 memcpy(sk_seed, sk+4, n);
562 unsigned char sk_prf[n];
563 memcpy(sk_prf, sk+4+n, n);
564 unsigned char pub_seed[n];
565 memcpy(pub_seed, sk+4+2*n, n);
566
567 // index as 32 bytes string
568 unsigned char idx_bytes_32[32];
569 to_byte(idx_bytes_32, idx, 32);
570
571 unsigned char hash_key[3*n];
572
573 // Update SK
574 sk[0] = ((idx + 1) >> 24) & 255;
575 sk[1] = ((idx + 1) >> 16) & 255;
576 sk[2] = ((idx + 1) >> 8) & 255;
577 sk[3] = (idx + 1) & 255;
578 // -- Secret key for this non-forward-secure version is now updated.
579 // -- A productive implementation should use a file handle instead and write the updated secret key at this point!
580
581 // Init working params
582 unsigned char R[n];
583 unsigned char msg_h[n];
584 unsigned char ots_seed[n];
585 uint32_t ots_addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
586
587 // ---------------------------------
588 // Message Hashing
589 // ---------------------------------
590
591 // Message Hash:
592 // First compute pseudorandom value
593 prf(R, idx_bytes_32, sk_prf, n);
594 // Generate hash key (R || root || idx)
595 memcpy(hash_key, R, n);
596 memcpy(hash_key+n, sk+4+3*n, n);
597 to_byte(hash_key+2*n, idx, n);
598 // Then use it for message digest
599 h_msg(msg_h, msg, msglen, hash_key, 3*n, n);
600
601 // Start collecting signature
602 *sig_msg_len = 0;
603
604 // Copy index to signature
605 sig_msg[0] = (idx >> 24) & 255;
606 sig_msg[1] = (idx >> 16) & 255;
607 sig_msg[2] = (idx >> 8) & 255;
608 sig_msg[3] = idx & 255;
609
610 sig_msg += 4;
611 *sig_msg_len += 4;
612
613 // Copy R to signature
614 for (i = 0; i < n; i++)
615 sig_msg[i] = R[i];
616
617 sig_msg += n;
618 *sig_msg_len += n;
619
620 // ----------------------------------
621 // Now we start to "really sign"
622 // ----------------------------------
623
624 // Prepare Address
625 setType(ots_addr, 0);
626 setOTSADRS(ots_addr, idx);
627
628 // Compute seed for OTS key pair
629 get_seed(ots_seed, sk_seed, n, ots_addr);
630
631 // Compute WOTS signature
632 wots_sign(sig_msg, msg_h, ots_seed, &(params->wots_par), pub_seed, ots_addr);
633
634 sig_msg += params->wots_par.keysize;
635 *sig_msg_len += params->wots_par.keysize;
636
637 // the auth path was already computed during the previous round
638 memcpy(sig_msg, state->auth, h*n);
639
640 if (idx < (1U << h) - 1) {
641 bds_round(state, idx, sk_seed, params, pub_seed, ots_addr);
642 bds_treehash_update(state, (h - k) >> 1, sk_seed, params, pub_seed, ots_addr);
643 }
644
645/* TODO: save key/bds state here! */
646
647 sig_msg += params->h*n;
648 *sig_msg_len += params->h*n;
649
650 //Whipe secret elements?
651 //zerobytes(tsk, CRYPTO_SECRETKEYBYTES);
652
653
654 memcpy(sig_msg, msg, msglen);
655 *sig_msg_len += msglen;
656
657 return 0;
658}
659
660/**
661 * Verifies a given message signature pair under a given public key.
662 */
663int xmss_sign_open(unsigned char *msg, unsigned long long *msglen, const unsigned char *sig_msg, unsigned long long sig_msg_len, const unsigned char *pk, const xmss_params *params)
664{
665 unsigned int n = params->n;
666
667 unsigned long long i, m_len;
668 unsigned long idx=0;
669 unsigned char wots_pk[params->wots_par.keysize];
670 unsigned char pkhash[n];
671 unsigned char root[n];
672 unsigned char msg_h[n];
673 unsigned char hash_key[3*n];
674
675 unsigned char pub_seed[n];
676 memcpy(pub_seed, pk+n, n);
677
678 // Init addresses
679 uint32_t ots_addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
680 uint32_t ltree_addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
681 uint32_t node_addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
682
683 setType(ots_addr, 0);
684 setType(ltree_addr, 1);
685 setType(node_addr, 2);
686
687 // Extract index
688 idx = ((unsigned long)sig_msg[0] << 24) | ((unsigned long)sig_msg[1] << 16) | ((unsigned long)sig_msg[2] << 8) | sig_msg[3];
689 printf("verify:: idx = %lu\n", idx);
690
691 // Generate hash key (R || root || idx)
692 memcpy(hash_key, sig_msg+4,n);
693 memcpy(hash_key+n, pk, n);
694 to_byte(hash_key+2*n, idx, n);
695
696 sig_msg += (n+4);
697 sig_msg_len -= (n+4);
698
699 // hash message
700 unsigned long long tmp_sig_len = params->wots_par.keysize+params->h*n;
701 m_len = sig_msg_len - tmp_sig_len;
702 h_msg(msg_h, sig_msg + tmp_sig_len, m_len, hash_key, 3*n, n);
703
704 //-----------------------
705 // Verify signature
706 //-----------------------
707
708 // Prepare Address
709 setOTSADRS(ots_addr, idx);
710 // Check WOTS signature
711 wots_pkFromSig(wots_pk, sig_msg, msg_h, &(params->wots_par), pub_seed, ots_addr);
712
713 sig_msg += params->wots_par.keysize;
714 sig_msg_len -= params->wots_par.keysize;
715
716 // Compute Ltree
717 setLtreeADRS(ltree_addr, idx);
718 l_tree(pkhash, wots_pk, params, pub_seed, ltree_addr);
719
720 // Compute root
721 validate_authpath(root, pkhash, idx, sig_msg, params, pub_seed, node_addr);
722
723 sig_msg += params->h*n;
724 sig_msg_len -= params->h*n;
725
726 for (i = 0; i < n; i++)
727 if (root[i] != pk[i])
728 goto fail;
729
730 *msglen = sig_msg_len;
731 for (i = 0; i < *msglen; i++)
732 msg[i] = sig_msg[i];
733
734 return 0;
735
736
737fail:
738 *msglen = sig_msg_len;
739 for (i = 0; i < *msglen; i++)
740 msg[i] = 0;
741 *msglen = -1;
742 return -1;
743}
744
745/*
746 * Generates a XMSSMT key pair for a given parameter set.
747 * Format sk: [(ceil(h/8) bit) idx || SK_SEED || SK_PRF || PUB_SEED || root]
748 * Format pk: [root || PUB_SEED] omitting algo oid.
749 */
750int xmssmt_keypair(unsigned char *pk, unsigned char *sk, bds_state *states, unsigned char *wots_sigs, xmssmt_params *params)
751{
752 unsigned int n = params->n;
753 unsigned int i;
754 unsigned char ots_seed[params->n];
755 // Set idx = 0
756 for (i = 0; i < params->index_len; i++) {
757 sk[i] = 0;
758 }
759 // Init SK_SEED (n byte), SK_PRF (n byte), and PUB_SEED (n byte)
760 randombytes(sk+params->index_len, 3*n);
761 // Copy PUB_SEED to public key
762 memcpy(pk+n, sk+params->index_len+2*n, n);
763
764 // Set address to point on the single tree on layer d-1
765 uint32_t addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
766 setLayerADRS(addr, (params->d-1));
767 // Set up state and compute wots signatures for all but topmost tree root
768 for (i = 0; i < params->d - 1; i++) {
769 // Compute seed for OTS key pair
770 treehash_setup(pk, params->xmss_par.h, 0, states + i, sk+params->index_len, &(params->xmss_par), pk+n, addr);
771 setLayerADRS(addr, (i+1));
772 get_seed(ots_seed, sk+params->index_len, n, addr);
773 wots_sign(wots_sigs + i*params->xmss_par.wots_par.keysize, pk, ots_seed, &(params->xmss_par.wots_par), pk+n, addr);
774 }
775 treehash_setup(pk, params->xmss_par.h, 0, states + i, sk+params->index_len, &(params->xmss_par), pk+n, addr);
776 memcpy(sk+params->index_len+3*n, pk, n);
777 return 0;
778}
779
780/**
781 * Signs a message.
782 * Returns
783 * 1. an array containing the signature followed by the message AND
784 * 2. an updated secret key!
785 *
786 */
787int xmssmt_sign(unsigned char *sk, bds_state *states, unsigned char *wots_sigs, unsigned char *sig_msg, unsigned long long *sig_msg_len, const unsigned char *msg, unsigned long long msglen, const xmssmt_params *params)
788{
789 unsigned int n = params->n;
790
791 unsigned int tree_h = params->xmss_par.h;
792 unsigned int h = params->h;
793 unsigned int k = params->xmss_par.k;
794 unsigned int idx_len = params->index_len;
795 uint64_t idx_tree;
796 uint32_t idx_leaf;
797 uint64_t i, j;
798 int needswap_upto = -1;
799 unsigned int updates;
800
801 unsigned char sk_seed[n];
802 unsigned char sk_prf[n];
803 unsigned char pub_seed[n];
804 // Init working params
805 unsigned char R[n];
806 unsigned char msg_h[n];
807 unsigned char hash_key[3*n];
808 unsigned char ots_seed[n];
809 uint32_t addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
810 uint32_t ots_addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
811 unsigned char idx_bytes_32[32];
812 bds_state tmp;
813
814 // Extract SK
815 unsigned long long idx = 0;
816 for (i = 0; i < idx_len; i++) {
817 idx |= ((unsigned long long)sk[i]) << 8*(idx_len - 1 - i);
818 }
819
820 memcpy(sk_seed, sk+idx_len, n);
821 memcpy(sk_prf, sk+idx_len+n, n);
822 memcpy(pub_seed, sk+idx_len+2*n, n);
823
824 // Update SK
825 for (i = 0; i < idx_len; i++) {
826 sk[i] = ((idx + 1) >> 8*(idx_len - 1 - i)) & 255;
827 }
828 // -- Secret key for this non-forward-secure version is now updated.
829 // -- A productive implementation should use a file handle instead and write the updated secret key at this point!
830
831
832 // ---------------------------------
833 // Message Hashing
834 // ---------------------------------
835
836 // Message Hash:
837 // First compute pseudorandom value
838 to_byte(idx_bytes_32, idx, 32);
839 prf(R, idx_bytes_32, sk_prf, n);
840 // Generate hash key (R || root || idx)
841 memcpy(hash_key, R, n);
842 memcpy(hash_key+n, sk+idx_len+3*n, n);
843 to_byte(hash_key+2*n, idx, n);
844
845 // Then use it for message digest
846 h_msg(msg_h, msg, msglen, hash_key, 3*n, n);
847
848 // Start collecting signature
849 *sig_msg_len = 0;
850
851 // Copy index to signature
852 for (i = 0; i < idx_len; i++) {
853 sig_msg[i] = (idx >> 8*(idx_len - 1 - i)) & 255;
854 }
855
856 sig_msg += idx_len;
857 *sig_msg_len += idx_len;
858
859 // Copy R to signature
860 for (i = 0; i < n; i++)
861 sig_msg[i] = R[i];
862
863 sig_msg += n;
864 *sig_msg_len += n;
865
866 // ----------------------------------
867 // Now we start to "really sign"
868 // ----------------------------------
869
870 // Handle lowest layer separately as it is slightly different...
871
872 // Prepare Address
873 setType(ots_addr, 0);
874 idx_tree = idx >> tree_h;
875 idx_leaf = (idx & ((1 << tree_h)-1));
876 setLayerADRS(ots_addr, 0);
877 setTreeADRS(ots_addr, idx_tree);
878 setOTSADRS(ots_addr, idx_leaf);
879
880 // Compute seed for OTS key pair
881 get_seed(ots_seed, sk_seed, n, ots_addr);
882
883 // Compute WOTS signature
884 wots_sign(sig_msg, msg_h, ots_seed, &(params->xmss_par.wots_par), pub_seed, ots_addr);
885
886 sig_msg += params->xmss_par.wots_par.keysize;
887 *sig_msg_len += params->xmss_par.wots_par.keysize;
888
889 memcpy(sig_msg, states[0].auth, tree_h*n);
890 sig_msg += tree_h*n;
891 *sig_msg_len += tree_h*n;
892
893 // prepare signature of remaining layers
894 for (i = 1; i < params->d; i++) {
895 // put WOTS signature in place
896 memcpy(sig_msg, wots_sigs + (i-1)*params->xmss_par.wots_par.keysize, params->xmss_par.wots_par.keysize);
897
898 sig_msg += params->xmss_par.wots_par.keysize;
899 *sig_msg_len += params->xmss_par.wots_par.keysize;
900
901 // put AUTH nodes in place
902 memcpy(sig_msg, states[i].auth, tree_h*n);
903 sig_msg += tree_h*n;
904 *sig_msg_len += tree_h*n;
905 }
906
907 updates = (tree_h - k) >> 1;
908
909 setTreeADRS(addr, (idx_tree + 1));
910 // mandatory update for NEXT_0 (does not count towards h-k/2) if NEXT_0 exists
911 if ((1 + idx_tree) * (1 << tree_h) + idx_leaf < (1ULL << h)) {
912 bds_state_update(&states[params->d], sk_seed, &(params->xmss_par), pub_seed, addr);
913 }
914
915 for (i = 0; i < params->d; i++) {
916 // check if we're not at the end of a tree
917 if (! (((idx + 1) & ((1ULL << ((i+1)*tree_h)) - 1)) == 0)) {
918 idx_leaf = (idx >> (tree_h * i)) & ((1 << tree_h)-1);
919 idx_tree = (idx >> (tree_h * (i+1)));
920 setLayerADRS(addr, i);
921 setTreeADRS(addr, idx_tree);
922 if (i == (unsigned int) (needswap_upto + 1)) {
923 bds_round(&states[i], idx_leaf, sk_seed, &(params->xmss_par), pub_seed, addr);
924 }
925 updates = bds_treehash_update(&states[i], updates, sk_seed, &(params->xmss_par), pub_seed, addr);
926 setTreeADRS(addr, (idx_tree + 1));
927 // if a NEXT-tree exists for this level;
928 if ((1 + idx_tree) * (1 << tree_h) + idx_leaf < (1ULL << (h - tree_h * i))) {
929 if (i > 0 && updates > 0 && states[params->d + i].next_leaf < (1ULL << h)) {
930 bds_state_update(&states[params->d + i], sk_seed, &(params->xmss_par), pub_seed, addr);
931 updates--;
932 }
933 }
934 }
935 else if (idx < (1ULL << h) - 1) {
936 memcpy(&tmp, states+params->d + i, sizeof(bds_state));
937 memcpy(states+params->d + i, states + i, sizeof(bds_state));
938 memcpy(states + i, &tmp, sizeof(bds_state));
939
940 setLayerADRS(ots_addr, (i+1));
941 setTreeADRS(ots_addr, ((idx + 1) >> ((i+2) * tree_h)));
942 setOTSADRS(ots_addr, (((idx >> ((i+1) * tree_h)) + 1) & ((1 << tree_h)-1)));
943
944 get_seed(ots_seed, sk+params->index_len, n, ots_addr);
945 wots_sign(wots_sigs + i*params->xmss_par.wots_par.keysize, states[i].stack, ots_seed, &(params->xmss_par.wots_par), pub_seed, ots_addr);
946
947 states[params->d + i].stackoffset = 0;
948 states[params->d + i].next_leaf = 0;
949
950 updates--; // WOTS-signing counts as one update
951 needswap_upto = i;
952 for (j = 0; j < tree_h-k; j++) {
953 states[i].treehash[j].completed = 1;
954 }
955 }
956 }
957
958 //Whipe secret elements?
959 //zerobytes(tsk, CRYPTO_SECRETKEYBYTES);
960
961 memcpy(sig_msg, msg, msglen);
962 *sig_msg_len += msglen;
963
964 return 0;
965}
966
967/**
968 * Verifies a given message signature pair under a given public key.
969 */
970int xmssmt_sign_open(unsigned char *msg, unsigned long long *msglen, const unsigned char *sig_msg, unsigned long long sig_msg_len, const unsigned char *pk, const xmssmt_params *params)
971{
972 unsigned int n = params->n;
973
974 unsigned int tree_h = params->xmss_par.h;
975 unsigned int idx_len = params->index_len;
976 uint64_t idx_tree;
977 uint32_t idx_leaf;
978
979 unsigned long long i, m_len;
980 unsigned long long idx=0;
981 unsigned char wots_pk[params->xmss_par.wots_par.keysize];
982 unsigned char pkhash[n];
983 unsigned char root[n];
984 unsigned char msg_h[n];
985 unsigned char hash_key[3*n];
986
987 unsigned char pub_seed[n];
988 memcpy(pub_seed, pk+n, n);
989
990 // Init addresses
991 uint32_t ots_addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
992 uint32_t ltree_addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
993 uint32_t node_addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
994
995 // Extract index
996 for (i = 0; i < idx_len; i++) {
997 idx |= ((unsigned long long)sig_msg[i]) << (8*(idx_len - 1 - i));
998 }
999 printf("verify:: idx = %llu\n", idx);
1000 sig_msg += idx_len;
1001 sig_msg_len -= idx_len;
1002
1003 // Generate hash key (R || root || idx)
1004 memcpy(hash_key, sig_msg,n);
1005 memcpy(hash_key+n, pk, n);
1006 to_byte(hash_key+2*n, idx, n);
1007
1008 sig_msg += n;
1009 sig_msg_len -= n;
1010
1011
1012 // hash message (recall, R is now on pole position at sig_msg
1013 unsigned long long tmp_sig_len = (params->d * params->xmss_par.wots_par.keysize) + (params->h * n);
1014 m_len = sig_msg_len - tmp_sig_len;
1015 h_msg(msg_h, sig_msg + tmp_sig_len, m_len, hash_key, 3*n, n);
1016
1017
1018 //-----------------------
1019 // Verify signature
1020 //-----------------------
1021
1022 // Prepare Address
1023 idx_tree = idx >> tree_h;
1024 idx_leaf = (idx & ((1 << tree_h)-1));
1025 setLayerADRS(ots_addr, 0);
1026 setTreeADRS(ots_addr, idx_tree);
1027 setType(ots_addr, 0);
1028
1029 memcpy(ltree_addr, ots_addr, 12);
1030 setType(ltree_addr, 1);
1031
1032 memcpy(node_addr, ltree_addr, 12);
1033 setType(node_addr, 2);
1034
1035 setOTSADRS(ots_addr, idx_leaf);
1036
1037 // Check WOTS signature
1038 wots_pkFromSig(wots_pk, sig_msg, msg_h, &(params->xmss_par.wots_par), pub_seed, ots_addr);
1039
1040 sig_msg += params->xmss_par.wots_par.keysize;
1041 sig_msg_len -= params->xmss_par.wots_par.keysize;
1042
1043 // Compute Ltree
1044 setLtreeADRS(ltree_addr, idx_leaf);
1045 l_tree(pkhash, wots_pk, &(params->xmss_par), pub_seed, ltree_addr);
1046
1047 // Compute root
1048 validate_authpath(root, pkhash, idx_leaf, sig_msg, &(params->xmss_par), pub_seed, node_addr);
1049
1050 sig_msg += tree_h*n;
1051 sig_msg_len -= tree_h*n;
1052
1053 for (i = 1; i < params->d; i++) {
1054 // Prepare Address
1055 idx_leaf = (idx_tree & ((1 << tree_h)-1));
1056 idx_tree = idx_tree >> tree_h;
1057
1058 setLayerADRS(ots_addr, i);
1059 setTreeADRS(ots_addr, idx_tree);
1060 setType(ots_addr, 0);
1061
1062 memcpy(ltree_addr, ots_addr, 12);
1063 setType(ltree_addr, 1);
1064
1065 memcpy(node_addr, ltree_addr, 12);
1066 setType(node_addr, 2);
1067
1068 setOTSADRS(ots_addr, idx_leaf);
1069
1070 // Check WOTS signature
1071 wots_pkFromSig(wots_pk, sig_msg, root, &(params->xmss_par.wots_par), pub_seed, ots_addr);
1072
1073 sig_msg += params->xmss_par.wots_par.keysize;
1074 sig_msg_len -= params->xmss_par.wots_par.keysize;
1075
1076 // Compute Ltree
1077 setLtreeADRS(ltree_addr, idx_leaf);
1078 l_tree(pkhash, wots_pk, &(params->xmss_par), pub_seed, ltree_addr);
1079
1080 // Compute root
1081 validate_authpath(root, pkhash, idx_leaf, sig_msg, &(params->xmss_par), pub_seed, node_addr);
1082
1083 sig_msg += tree_h*n;
1084 sig_msg_len -= tree_h*n;
1085
1086 }
1087
1088 for (i = 0; i < n; i++)
1089 if (root[i] != pk[i])
1090 goto fail;
1091
1092 *msglen = sig_msg_len;
1093 for (i = 0; i < *msglen; i++)
1094 msg[i] = sig_msg[i];
1095
1096 return 0;
1097
1098
1099fail:
1100 *msglen = sig_msg_len;
1101 for (i = 0; i < *msglen; i++)
1102 msg[i] = 0;
1103 *msglen = -1;
1104 return -1;
1105}
1106#endif /* WITH_XMSS */
diff --git a/xmss_fast.h b/xmss_fast.h
new file mode 100644
index 000000000..2ffba7057
--- /dev/null
+++ b/xmss_fast.h
@@ -0,0 +1,111 @@
1#ifdef WITH_XMSS
2/* $OpenBSD: xmss_fast.h,v 1.2 2018/02/26 03:56:44 dtucker Exp $ */
3/*
4xmss_fast.h version 20160722
5Andreas Hülsing
6Joost Rijneveld
7Public domain.
8*/
9
10#include "xmss_wots.h"
11
12#ifndef XMSS_H
13#define XMSS_H
14typedef struct{
15 unsigned int level;
16 unsigned long long subtree;
17 unsigned int subleaf;
18} leafaddr;
19
20typedef struct{
21 wots_params wots_par;
22 unsigned int n;
23 unsigned int h;
24 unsigned int k;
25} xmss_params;
26
27typedef struct{
28 xmss_params xmss_par;
29 unsigned int n;
30 unsigned int h;
31 unsigned int d;
32 unsigned int index_len;
33} xmssmt_params;
34
35typedef struct{
36 unsigned int h;
37 unsigned int next_idx;
38 unsigned int stackusage;
39 unsigned char completed;
40 unsigned char *node;
41} treehash_inst;
42
43typedef struct {
44 unsigned char *stack;
45 unsigned int stackoffset;
46 unsigned char *stacklevels;
47 unsigned char *auth;
48 unsigned char *keep;
49 treehash_inst *treehash;
50 unsigned char *retain;
51 unsigned int next_leaf;
52} bds_state;
53
54/**
55 * Initialize BDS state struct
56 * parameter names are the same as used in the description of the BDS traversal
57 */
58void xmss_set_bds_state(bds_state *state, unsigned char *stack, int stackoffset, unsigned char *stacklevels, unsigned char *auth, unsigned char *keep, treehash_inst *treehash, unsigned char *retain, int next_leaf);
59/**
60 * Initializes parameter set.
61 * Needed, for any of the other methods.
62 */
63int xmss_set_params(xmss_params *params, int n, int h, int w, int k);
64/**
65 * Initialize xmssmt_params struct
66 * parameter names are the same as in the draft
67 *
68 * Especially h is the total tree height, i.e. the XMSS trees have height h/d
69 */
70int xmssmt_set_params(xmssmt_params *params, int n, int h, int d, int w, int k);
71/**
72 * Generates a XMSS key pair for a given parameter set.
73 * Format sk: [(32bit) idx || SK_SEED || SK_PRF || PUB_SEED || root]
74 * Format pk: [root || PUB_SEED] omitting algo oid.
75 */
76int xmss_keypair(unsigned char *pk, unsigned char *sk, bds_state *state, xmss_params *params);
77/**
78 * Signs a message.
79 * Returns
80 * 1. an array containing the signature followed by the message AND
81 * 2. an updated secret key!
82 *
83 */
84int xmss_sign(unsigned char *sk, bds_state *state, unsigned char *sig_msg, unsigned long long *sig_msg_len, const unsigned char *msg,unsigned long long msglen, const xmss_params *params);
85/**
86 * Verifies a given message signature pair under a given public key.
87 *
88 * Note: msg and msglen are pure outputs which carry the message in case verification succeeds. The (input) message is assumed to be within sig_msg which has the form (sig||msg).
89 */
90int xmss_sign_open(unsigned char *msg,unsigned long long *msglen, const unsigned char *sig_msg,unsigned long long sig_msg_len, const unsigned char *pk, const xmss_params *params);
91
92/*
93 * Generates a XMSSMT key pair for a given parameter set.
94 * Format sk: [(ceil(h/8) bit) idx || SK_SEED || SK_PRF || PUB_SEED || root]
95 * Format pk: [root || PUB_SEED] omitting algo oid.
96 */
97int xmssmt_keypair(unsigned char *pk, unsigned char *sk, bds_state *states, unsigned char *wots_sigs, xmssmt_params *params);
98/**
99 * Signs a message.
100 * Returns
101 * 1. an array containing the signature followed by the message AND
102 * 2. an updated secret key!
103 *
104 */
105int xmssmt_sign(unsigned char *sk, bds_state *state, unsigned char *wots_sigs, unsigned char *sig_msg, unsigned long long *sig_msg_len, const unsigned char *msg, unsigned long long msglen, const xmssmt_params *params);
106/**
107 * Verifies a given message signature pair under a given public key.
108 */
109int xmssmt_sign_open(unsigned char *msg, unsigned long long *msglen, const unsigned char *sig_msg, unsigned long long sig_msg_len, const unsigned char *pk, const xmssmt_params *params);
110#endif
111#endif /* WITH_XMSS */
diff --git a/xmss_hash.c b/xmss_hash.c
new file mode 100644
index 000000000..b9eee7cff
--- /dev/null
+++ b/xmss_hash.c
@@ -0,0 +1,140 @@
1/* $OpenBSD: xmss_hash.c,v 1.2 2018/02/26 03:56:44 dtucker Exp $ */
2/*
3hash.c version 20160722
4Andreas Hülsing
5Joost Rijneveld
6Public domain.
7*/
8
9#include "includes.h"
10#ifdef WITH_XMSS
11
12#include "xmss_hash_address.h"
13#include "xmss_commons.h"
14#include "xmss_hash.h"
15
16#include <stddef.h>
17#ifdef HAVE_STDINT_H
18#include <stdint.h>
19#endif
20#include <stdio.h>
21#include <string.h>
22#include <openssl/sha.h>
23#include <openssl/hmac.h>
24#include <openssl/evp.h>
25
26int core_hash_SHA2(unsigned char *, const unsigned int, const unsigned char *,
27 unsigned int, const unsigned char *, unsigned long long, unsigned int);
28
29unsigned char* addr_to_byte(unsigned char *bytes, const uint32_t addr[8]){
30#if IS_LITTLE_ENDIAN==1
31 int i = 0;
32 for(i=0;i<8;i++)
33 to_byte(bytes+i*4, addr[i],4);
34 return bytes;
35#else
36 memcpy(bytes, addr, 32);
37 return bytes;
38#endif
39}
40
41int core_hash_SHA2(unsigned char *out, const unsigned int type, const unsigned char *key, unsigned int keylen, const unsigned char *in, unsigned long long inlen, unsigned int n){
42 unsigned long long i = 0;
43 unsigned char buf[inlen + n + keylen];
44
45 // Input is (toByte(X, 32) || KEY || M)
46
47 // set toByte
48 to_byte(buf, type, n);
49
50 for (i=0; i < keylen; i++) {
51 buf[i+n] = key[i];
52 }
53
54 for (i=0; i < inlen; i++) {
55 buf[keylen + n + i] = in[i];
56 }
57
58 if (n == 32) {
59 SHA256(buf, inlen + keylen + n, out);
60 return 0;
61 }
62 else {
63 if (n == 64) {
64 SHA512(buf, inlen + keylen + n, out);
65 return 0;
66 }
67 }
68 return 1;
69}
70
71/**
72 * Implements PRF
73 */
74int prf(unsigned char *out, const unsigned char *in, const unsigned char *key, unsigned int keylen)
75{
76 return core_hash_SHA2(out, 3, key, keylen, in, 32, keylen);
77}
78
79/*
80 * Implemts H_msg
81 */
82int h_msg(unsigned char *out, const unsigned char *in, unsigned long long inlen, const unsigned char *key, const unsigned int keylen, const unsigned int n)
83{
84 if (keylen != 3*n){
85 // H_msg takes 3n-bit keys, but n does not match the keylength of keylen
86 return -1;
87 }
88 return core_hash_SHA2(out, 2, key, keylen, in, inlen, n);
89}
90
91/**
92 * We assume the left half is in in[0]...in[n-1]
93 */
94int hash_h(unsigned char *out, const unsigned char *in, const unsigned char *pub_seed, uint32_t addr[8], const unsigned int n)
95{
96
97 unsigned char buf[2*n];
98 unsigned char key[n];
99 unsigned char bitmask[2*n];
100 unsigned char byte_addr[32];
101 unsigned int i;
102
103 setKeyAndMask(addr, 0);
104 addr_to_byte(byte_addr, addr);
105 prf(key, byte_addr, pub_seed, n);
106 // Use MSB order
107 setKeyAndMask(addr, 1);
108 addr_to_byte(byte_addr, addr);
109 prf(bitmask, byte_addr, pub_seed, n);
110 setKeyAndMask(addr, 2);
111 addr_to_byte(byte_addr, addr);
112 prf(bitmask+n, byte_addr, pub_seed, n);
113 for (i = 0; i < 2*n; i++) {
114 buf[i] = in[i] ^ bitmask[i];
115 }
116 return core_hash_SHA2(out, 1, key, n, buf, 2*n, n);
117}
118
119int hash_f(unsigned char *out, const unsigned char *in, const unsigned char *pub_seed, uint32_t addr[8], const unsigned int n)
120{
121 unsigned char buf[n];
122 unsigned char key[n];
123 unsigned char bitmask[n];
124 unsigned char byte_addr[32];
125 unsigned int i;
126
127 setKeyAndMask(addr, 0);
128 addr_to_byte(byte_addr, addr);
129 prf(key, byte_addr, pub_seed, n);
130
131 setKeyAndMask(addr, 1);
132 addr_to_byte(byte_addr, addr);
133 prf(bitmask, byte_addr, pub_seed, n);
134
135 for (i = 0; i < n; i++) {
136 buf[i] = in[i] ^ bitmask[i];
137 }
138 return core_hash_SHA2(out, 0, key, n, buf, n, n);
139}
140#endif /* WITH_XMSS */
diff --git a/xmss_hash.h b/xmss_hash.h
new file mode 100644
index 000000000..d19c62152
--- /dev/null
+++ b/xmss_hash.h
@@ -0,0 +1,22 @@
1#ifdef WITH_XMSS
2/* $OpenBSD: xmss_hash.h,v 1.2 2018/02/26 03:56:44 dtucker Exp $ */
3/*
4hash.h version 20160722
5Andreas Hülsing
6Joost Rijneveld
7Public domain.
8*/
9
10#ifndef HASH_H
11#define HASH_H
12
13#define IS_LITTLE_ENDIAN 1
14
15unsigned char* addr_to_byte(unsigned char *bytes, const uint32_t addr[8]);
16int prf(unsigned char *out, const unsigned char *in, const unsigned char *key, unsigned int keylen);
17int h_msg(unsigned char *out,const unsigned char *in,unsigned long long inlen, const unsigned char *key, const unsigned int keylen, const unsigned int n);
18int hash_h(unsigned char *out, const unsigned char *in, const unsigned char *pub_seed, uint32_t addr[8], const unsigned int n);
19int hash_f(unsigned char *out, const unsigned char *in, const unsigned char *pub_seed, uint32_t addr[8], const unsigned int n);
20
21#endif
22#endif /* WITH_XMSS */
diff --git a/xmss_hash_address.c b/xmss_hash_address.c
new file mode 100644
index 000000000..c6c1347e9
--- /dev/null
+++ b/xmss_hash_address.c
@@ -0,0 +1,66 @@
1/* $OpenBSD: xmss_hash_address.c,v 1.2 2018/02/26 03:56:44 dtucker Exp $ */
2/*
3hash_address.c version 20160722
4Andreas Hülsing
5Joost Rijneveld
6Public domain.
7*/
8#include "includes.h"
9#ifdef WITH_XMSS
10
11#ifdef HAVE_STDINT_H
12#include <stdint.h>
13#endif
14#include "xmss_hash_address.h" /* prototypes */
15
16void setLayerADRS(uint32_t adrs[8], uint32_t layer){
17 adrs[0] = layer;
18}
19
20void setTreeADRS(uint32_t adrs[8], uint64_t tree){
21 adrs[1] = (uint32_t) (tree >> 32);
22 adrs[2] = (uint32_t) tree;
23}
24
25void setType(uint32_t adrs[8], uint32_t type){
26 adrs[3] = type;
27 int i;
28 for(i = 4; i < 8; i++){
29 adrs[i] = 0;
30 }
31}
32
33void setKeyAndMask(uint32_t adrs[8], uint32_t keyAndMask){
34 adrs[7] = keyAndMask;
35}
36
37// OTS
38
39void setOTSADRS(uint32_t adrs[8], uint32_t ots){
40 adrs[4] = ots;
41}
42
43void setChainADRS(uint32_t adrs[8], uint32_t chain){
44 adrs[5] = chain;
45}
46
47void setHashADRS(uint32_t adrs[8], uint32_t hash){
48 adrs[6] = hash;
49}
50
51// L-tree
52
53void setLtreeADRS(uint32_t adrs[8], uint32_t ltree){
54 adrs[4] = ltree;
55}
56
57// Hash Tree & L-tree
58
59void setTreeHeight(uint32_t adrs[8], uint32_t treeHeight){
60 adrs[5] = treeHeight;
61}
62
63void setTreeIndex(uint32_t adrs[8], uint32_t treeIndex){
64 adrs[6] = treeIndex;
65}
66#endif /* WITH_XMSS */
diff --git a/xmss_hash_address.h b/xmss_hash_address.h
new file mode 100644
index 000000000..66bb4cc4d
--- /dev/null
+++ b/xmss_hash_address.h
@@ -0,0 +1,40 @@
1#ifdef WITH_XMSS
2/* $OpenBSD: xmss_hash_address.h,v 1.2 2018/02/26 03:56:44 dtucker Exp $ */
3/*
4hash_address.h version 20160722
5Andreas Hülsing
6Joost Rijneveld
7Public domain.
8*/
9
10#ifdef HAVE_STDINT_H
11#include <stdint.h>
12#endif
13
14void setLayerADRS(uint32_t adrs[8], uint32_t layer);
15
16void setTreeADRS(uint32_t adrs[8], uint64_t tree);
17
18void setType(uint32_t adrs[8], uint32_t type);
19
20void setKeyAndMask(uint32_t adrs[8], uint32_t keyAndMask);
21
22// OTS
23
24void setOTSADRS(uint32_t adrs[8], uint32_t ots);
25
26void setChainADRS(uint32_t adrs[8], uint32_t chain);
27
28void setHashADRS(uint32_t adrs[8], uint32_t hash);
29
30// L-tree
31
32void setLtreeADRS(uint32_t adrs[8], uint32_t ltree);
33
34// Hash Tree & L-tree
35
36void setTreeHeight(uint32_t adrs[8], uint32_t treeHeight);
37
38void setTreeIndex(uint32_t adrs[8], uint32_t treeIndex);
39
40#endif /* WITH_XMSS */
diff --git a/xmss_wots.c b/xmss_wots.c
new file mode 100644
index 000000000..b4702ed8d
--- /dev/null
+++ b/xmss_wots.c
@@ -0,0 +1,192 @@
1/* $OpenBSD: xmss_wots.c,v 1.2 2018/02/26 03:56:44 dtucker Exp $ */
2/*
3wots.c version 20160722
4Andreas Hülsing
5Joost Rijneveld
6Public domain.
7*/
8
9#include "includes.h"
10#ifdef WITH_XMSS
11
12#include <stdlib.h>
13#ifdef HAVE_STDINT_H
14#include <stdint.h>
15#endif
16#include <limits.h>
17#include "xmss_commons.h"
18#include "xmss_hash.h"
19#include "xmss_wots.h"
20#include "xmss_hash_address.h"
21
22
23/* libm-free version of log2() for wots */
24static inline int
25wots_log2(uint32_t v)
26{
27 int b;
28
29 for (b = sizeof (v) * CHAR_BIT - 1; b >= 0; b--) {
30 if ((1U << b) & v) {
31 return b;
32 }
33 }
34 return 0;
35}
36
37void
38wots_set_params(wots_params *params, int n, int w)
39{
40 params->n = n;
41 params->w = w;
42 params->log_w = wots_log2(params->w);
43 params->len_1 = (CHAR_BIT * n) / params->log_w;
44 params->len_2 = (wots_log2(params->len_1 * (w - 1)) / params->log_w) + 1;
45 params->len = params->len_1 + params->len_2;
46 params->keysize = params->len * params->n;
47}
48
49/**
50 * Helper method for pseudorandom key generation
51 * Expands an n-byte array into a len*n byte array
52 * this is done using PRF
53 */
54static void expand_seed(unsigned char *outseeds, const unsigned char *inseed, const wots_params *params)
55{
56 uint32_t i = 0;
57 unsigned char ctr[32];
58 for(i = 0; i < params->len; i++){
59 to_byte(ctr, i, 32);
60 prf((outseeds + (i*params->n)), ctr, inseed, params->n);
61 }
62}
63
64/**
65 * Computes the chaining function.
66 * out and in have to be n-byte arrays
67 *
68 * interpretes in as start-th value of the chain
69 * addr has to contain the address of the chain
70 */
71static void gen_chain(unsigned char *out, const unsigned char *in, unsigned int start, unsigned int steps, const wots_params *params, const unsigned char *pub_seed, uint32_t addr[8])
72{
73 uint32_t i, j;
74 for (j = 0; j < params->n; j++)
75 out[j] = in[j];
76
77 for (i = start; i < (start+steps) && i < params->w; i++) {
78 setHashADRS(addr, i);
79 hash_f(out, out, pub_seed, addr, params->n);
80 }
81}
82
83/**
84 * base_w algorithm as described in draft.
85 *
86 *
87 */
88static void base_w(int *output, const int out_len, const unsigned char *input, const wots_params *params)
89{
90 int in = 0;
91 int out = 0;
92 uint32_t total = 0;
93 int bits = 0;
94 int consumed = 0;
95
96 for (consumed = 0; consumed < out_len; consumed++) {
97 if (bits == 0) {
98 total = input[in];
99 in++;
100 bits += 8;
101 }
102 bits -= params->log_w;
103 output[out] = (total >> bits) & (params->w - 1);
104 out++;
105 }
106}
107
108void wots_pkgen(unsigned char *pk, const unsigned char *sk, const wots_params *params, const unsigned char *pub_seed, uint32_t addr[8])
109{
110 uint32_t i;
111 expand_seed(pk, sk, params);
112 for (i=0; i < params->len; i++) {
113 setChainADRS(addr, i);
114 gen_chain(pk+i*params->n, pk+i*params->n, 0, params->w-1, params, pub_seed, addr);
115 }
116}
117
118
119int wots_sign(unsigned char *sig, const unsigned char *msg, const unsigned char *sk, const wots_params *params, const unsigned char *pub_seed, uint32_t addr[8])
120{
121 //int basew[params->len];
122 int csum = 0;
123 uint32_t i = 0;
124 int *basew = calloc(params->len, sizeof(int));
125 if (basew == NULL)
126 return -1;
127
128 base_w(basew, params->len_1, msg, params);
129
130 for (i=0; i < params->len_1; i++) {
131 csum += params->w - 1 - basew[i];
132 }
133
134 csum = csum << (8 - ((params->len_2 * params->log_w) % 8));
135
136 int len_2_bytes = ((params->len_2 * params->log_w) + 7) / 8;
137
138 unsigned char csum_bytes[len_2_bytes];
139 to_byte(csum_bytes, csum, len_2_bytes);
140
141 int csum_basew[params->len_2];
142 base_w(csum_basew, params->len_2, csum_bytes, params);
143
144 for (i = 0; i < params->len_2; i++) {
145 basew[params->len_1 + i] = csum_basew[i];
146 }
147
148 expand_seed(sig, sk, params);
149
150 for (i = 0; i < params->len; i++) {
151 setChainADRS(addr, i);
152 gen_chain(sig+i*params->n, sig+i*params->n, 0, basew[i], params, pub_seed, addr);
153 }
154 free(basew);
155 return 0;
156}
157
158int wots_pkFromSig(unsigned char *pk, const unsigned char *sig, const unsigned char *msg, const wots_params *params, const unsigned char *pub_seed, uint32_t addr[8])
159{
160 int csum = 0;
161 uint32_t i = 0;
162 int *basew = calloc(params->len, sizeof(int));
163 if (basew == NULL)
164 return -1;
165
166 base_w(basew, params->len_1, msg, params);
167
168 for (i=0; i < params->len_1; i++) {
169 csum += params->w - 1 - basew[i];
170 }
171
172 csum = csum << (8 - ((params->len_2 * params->log_w) % 8));
173
174 int len_2_bytes = ((params->len_2 * params->log_w) + 7) / 8;
175
176 unsigned char csum_bytes[len_2_bytes];
177 to_byte(csum_bytes, csum, len_2_bytes);
178
179 int csum_basew[params->len_2];
180 base_w(csum_basew, params->len_2, csum_bytes, params);
181
182 for (i = 0; i < params->len_2; i++) {
183 basew[params->len_1 + i] = csum_basew[i];
184 }
185 for (i=0; i < params->len; i++) {
186 setChainADRS(addr, i);
187 gen_chain(pk+i*params->n, sig+i*params->n, basew[i], params->w-1-basew[i], params, pub_seed, addr);
188 }
189 free(basew);
190 return 0;
191}
192#endif /* WITH_XMSS */
diff --git a/xmss_wots.h b/xmss_wots.h
new file mode 100644
index 000000000..1eebf3b21
--- /dev/null
+++ b/xmss_wots.h
@@ -0,0 +1,64 @@
1#ifdef WITH_XMSS
2/* $OpenBSD: xmss_wots.h,v 1.3 2018/02/26 12:14:53 dtucker Exp $ */
3/*
4wots.h version 20160722
5Andreas Hülsing
6Joost Rijneveld
7Public domain.
8*/
9
10#ifndef WOTS_H
11#define WOTS_H
12
13#ifdef HAVE_STDINT_H
14#include "stdint.h"
15#endif
16
17/**
18 * WOTS parameter set
19 *
20 * Meaning as defined in draft-irtf-cfrg-xmss-hash-based-signatures-02
21 */
22typedef struct {
23 uint32_t len_1;
24 uint32_t len_2;
25 uint32_t len;
26 uint32_t n;
27 uint32_t w;
28 uint32_t log_w;
29 uint32_t keysize;
30} wots_params;
31
32/**
33 * Set the WOTS parameters,
34 * only m, n, w are required as inputs,
35 * len, len_1, and len_2 are computed from those.
36 *
37 * Assumes w is a power of 2
38 */
39void wots_set_params(wots_params *params, int n, int w);
40
41/**
42 * WOTS key generation. Takes a 32byte seed for the secret key, expands it to a full WOTS secret key and computes the corresponding public key.
43 * For this it takes the seed pub_seed which is used to generate bitmasks and hash keys and the address of this WOTS key pair addr
44 *
45 * params, must have been initialized before using wots_set params for params ! This is not done in this function
46 *
47 * Places the computed public key at address pk.
48 */
49void wots_pkgen(unsigned char *pk, const unsigned char *sk, const wots_params *params, const unsigned char *pub_seed, uint32_t addr[8]);
50
51/**
52 * Takes a m-byte message and the 32-byte seed for the secret key to compute a signature that is placed at "sig".
53 *
54 */
55int wots_sign(unsigned char *sig, const unsigned char *msg, const unsigned char *sk, const wots_params *params, const unsigned char *pub_seed, uint32_t addr[8]);
56
57/**
58 * Takes a WOTS signature, a m-byte message and computes a WOTS public key that it places at pk.
59 *
60 */
61int wots_pkFromSig(unsigned char *pk, const unsigned char *sig, const unsigned char *msg, const wots_params *params, const unsigned char *pub_seed, uint32_t addr[8]);
62
63#endif
64#endif /* WITH_XMSS */